nplus1 × Zendo
Published attempt
0.61 · Partial reward
gpt-5.6-luna via opencode
Attempt scoring
Weighted checks
- Passedcore engine and unrelated capabilities are unchangedReward weight 4%
- Passedweb-openai resolves its dependency setReward weight 3%
- Passedweb-openai adds OpenAI SDK 7.xReward weight 3%
- Passedstandalone web-openai declares one runtime keyReward weight 3%
- Passedstandalone credentials remain server-onlyReward weight 3%
- Passedstandalone guidance explains server-only useReward weight 2%
- Passedinfra declares the official provider constraintReward weight 3%
- PassedTerraform formats and validates when the registry is availableReward weight 4%
- Passedinfra declares only the Terraform admin credentialReward weight 3%
- Passedopenai plus infra does not create web outputReward weight 2%
- Verifier or setup issueinfra plans one app-named OpenAI projectReward weight 5%
- Verifier or setup issueinfra plans one app-named runtime service accountReward weight 5%
- Verifier or setup issueruntime identity receives the API project-member roleReward weight 5%
- Verifier or setup issueTerraform outputs expose both managed IDsReward weight 4%
- Verifier or setup issueTerraform does not mint or expose runtime API keysReward weight 5%
- Passedcombined secret map is correct in plugin order 1Reward weight 3%
- Passedruntime workflow works in plugin order 1Reward weight 4%
- Passedcombined secret map is correct in plugin order 2Reward weight 3%
- Passedruntime workflow works in plugin order 2Reward weight 4%
- Passedopenai does not own web-openai behaviorReward weight 6%
- Failedplain web and infra remain isolated from OpenAIReward weight 6%
- Passedrepeated apply is idempotentReward weight 5%
- Passedremoving web-openai preserves infra provisioningReward weight 4%
- Failedremoving openai cleans all managed outputReward weight 4%
- FailedREADME documents the operator credential boundaryReward weight 3%
- Passeddownstream lint fixture covers OpenAIReward weight 2%
- Failedrepository smoke regression passesReward weight 1%
- Failedrepository smoke detects broken OpenAI contractsReward weight 1%
Agent input
Instruction
# Add first-class OpenAI API Platform support to n1x
Introduce an `openai` capability which, when composed with `infra`, declares the
official `openai/openai` Terraform provider at `~> 0.7.0`, creates an OpenAI
project named from `local.app_id`, creates a `${local.app_id}-runtime` service
account with the API project-member role, and exposes the project and service
account IDs as Terraform outputs. Terraform must not mint runtime API keys; it
authenticates with `OPENAI_ADMIN_KEY`.
Introduce a `web-openai` capability that requires `web` and `openai`, adds
`openai` `^7.0.0` to the generated web app, and makes the server-only
`OPENAI_API_KEY` part of the normal generated web environment workflow. When
`infra` is selected, pass the runtime key through the existing
`TF_VAR_web_secret_env_values` map. Never expose either credential through a
`NEXT_PUBLIC_*` variable.
Keep the capabilities composable:
- `web-openai` must work without `infra`.
- `openai` with `infra` must not introduce the web SDK or runtime key.
- Existing projects that select neither capability must not gain OpenAI output.
- Repeated apply operations must be idempotent.
- Removing the capabilities must clean up their managed Terraform, environment,
and guidance insertions according to n1x's existing lifecycle rules.
Document the operator workflow and credential boundary. After provisioning, an
operator creates a scoped runtime key through the OpenAI Admin API and supplies
it through `TF_VAR_web_secret_env_values`; the admin key is only for Terraform
and must never be used for model requests.
Update repository documentation, generated guidance, lint coverage, and smoke
coverage while preserving all existing behavior.