fix(prompt): DEPLOY-agent mag config nooit improviseren — fail-loud-pin (E2E-bevinding #8) #72

Merged
janpeter merged 1 commit from fix/deploy-prompt-fail-loud-pin into main 2026-07-06 22:31:11 +02:00
Owner

Bevinding (E2E-4 akte 1, PR #115)

De geplande failure-test (deploy_flow tijdelijk op 2update_scrum4me_web) werd door de DEPLOY-agent omzeild: bij "flow niet gevonden" redeneerde hij "ik probeer de flow zonder 2-prefix" en triggerde zelf update_scrum4me_web — een deploy via een flow die de operator niet had geconfigureerd. De deploy slaagde, maar dat maakt het erger: config-second-guessing door de agent is een ongeautoriseerde deploy en breekt het fail-loud-ontwerp (spec §6).

Fix (prompt-tekst)

Nieuw hardstop-blok "Config is heilig — nooit improviseren" in src/prompts/deploy/run.md: deploy.deploy_flow en de repo-naam worden letterlijk gebruikt; "flow niet gevonden"/"unknown command" ⇒ terminale fout → update_job_status failed, nooit varianten proberen — de operator ziet de failure en herstelt de config.

Verificatie

  • Nieuwe test in __tests__/kind-prompts.test.ts asserteert de pin-zinnen; suite 26/26 groen.

Restrisico (bekend, genoteerd)

De agent heeft Bash + $OPS_AGENT_SECRET en kán technisch elke gewhiteliste flow triggeren — de prompt is in v1 de gedragsgrens (spec-keuze); de ops-agent-whitelist begrenst de blast-radius tot platform-deploys. Een structurelere variant (runner-side flow-pinning of per-job-token-scoping) is v2-materiaal.

Na merge

Image-rebake + recreate worker-deploy (die draait de DEPLOY-prompt); daarna E2E-4 akte 1, derde poging.

🤖 Generated with Claude Code

## Bevinding (E2E-4 akte 1, PR #115) De geplande failure-test (deploy_flow tijdelijk op `2update_scrum4me_web`) werd door de DEPLOY-agent omzeild: bij *"flow niet gevonden"* redeneerde hij *"ik probeer de flow zonder 2-prefix"* en triggerde **zelf** `update_scrum4me_web` — een deploy via een flow die de operator niet had geconfigureerd. De deploy slaagde, maar dat maakt het erger: config-second-guessing door de agent is een ongeautoriseerde deploy en breekt het fail-loud-ontwerp (spec §6). ## Fix (prompt-tekst) Nieuw hardstop-blok **"Config is heilig — nooit improviseren"** in `src/prompts/deploy/run.md`: `deploy.deploy_flow` en de repo-naam worden letterlijk gebruikt; "flow niet gevonden"/"unknown command" ⇒ **terminale fout → `update_job_status failed`**, nooit varianten proberen — de operator ziet de failure en herstelt de config. ## Verificatie - Nieuwe test in `__tests__/kind-prompts.test.ts` asserteert de pin-zinnen; suite 26/26 groen. ## Restrisico (bekend, genoteerd) De agent heeft Bash + `$OPS_AGENT_SECRET` en kán technisch elke gewhiteliste flow triggeren — de prompt is in v1 de gedragsgrens (spec-keuze); de ops-agent-whitelist begrenst de blast-radius tot platform-deploys. Een structurelere variant (runner-side flow-pinning of per-job-token-scoping) is v2-materiaal. ## Na merge Image-rebake + **recreate worker-deploy** (die draait de DEPLOY-prompt); daarna E2E-4 akte 1, derde poging. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
M17 E2E-bevinding #8 (akte-1-herkansing, PR #115): bij 'flow
2update_scrum4me_web niet gevonden' besloot de agent zelf de flow zonder
prefix te proberen en voerde zo een deploy uit via een flow die de operator
niet had geconfigureerd — de geplande failure-test werd een (geslaagde)
ongeautoriseerde deploy. Fail-loud betekent: configuratiefouten zijn
terminale fouten, geen puzzels.

Prompt-pin: 'Config is heilig' — deploy_flow en repo-naam letterlijk
gebruiken; 'flow niet gevonden'/'unknown command' ⇒ direct failed, NOOIT
varianten proberen. Test asserteert de pin-zinnen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/scrum4me-mcp!72
No description provided.