Summary
When a task's proof artifact can only be covered by a CI/workflow change, sdd-execute cannot satisfy it: the agent's create_pull_request / push_to_pull_request_branch safe-outputs run with protect_top_level_dot_folders: true, which strips any change under a top-level dot-folder — including .github/workflows/. So the one remediation sdd-validate itself offers ("a human must verify the proof or add a covering check") is structurally impossible for the agent. The result is a guaranteed needs-human with no autonomous path, even via /revise.
Evidence (E2E tracker gominimal/minimal#311, task #326 / PR #339)
- sdd-validate flagged the R2.4 boot proof as a Blocker: "a proof artifact blocked by an infrastructure limit and covered by no consumer required status check is a Blocker — a human must verify the proof or add a covering check." → applied
needs-human.
- A
/revise was posted instructing the agent to add a ci-macos.yml step that fetches the kernel and runs boot_e2e (i.e., add the covering check sdd-validate asked for).
- The agent ran (
agent:success) but could not touch .github/. Its safe-output config (from the run log):
"push_to_pull_request_branch": { ... "protect_top_level_dot_folders": true ... },
"create_pull_request": { ... "protect_top_level_dot_folders": true ... }
It instead made an unrelated in-scope source edit (crates/minvmd/src/cmd/boot.rs) and pushed that. The CI coverage was never added.
Root cause
protect_top_level_dot_folders: true is a blanket guard that blocks all .github/ edits. CI-coverage remediation lives in .github/workflows/. So sdd-validate can demand a covering check, and /revise can instruct one, but sdd-execute can never produce one. Unbreakable loop.
Fix (options)
- Allow
sdd-execute to modify .github/workflows/ under a scoped exception (e.g., when the task is explicitly a CI-coverage task), instead of the blanket dot-folder block; or
- Have
sdd-validate recognize that "add a covering check" is not an agent-actionable remediation and route such proof-artifact gaps to an explicit human-CI lane (distinct label/instruction) rather than a needs-human the agent will silently fail to clear; or
- Provide a dedicated safe-output for workflow edits with its own review/guard, so CI coverage can be added without lifting the general dot-folder protection.
Acceptance
- A task whose only remediation is a CI/workflow change either (a) is completed by the agent editing
.github/workflows/ under a scoped allowance, or (b) is routed to a clearly-labeled human-CI task — never left as a needs-human the agent provably cannot clear.
References
Summary
When a task's proof artifact can only be covered by a CI/workflow change,
sdd-executecannot satisfy it: the agent'screate_pull_request/push_to_pull_request_branchsafe-outputs run withprotect_top_level_dot_folders: true, which strips any change under a top-level dot-folder — including.github/workflows/. So the one remediationsdd-validateitself offers ("a human must verify the proof or add a covering check") is structurally impossible for the agent. The result is a guaranteedneeds-humanwith no autonomous path, even via/revise.Evidence (E2E tracker gominimal/minimal#311, task #326 / PR #339)
needs-human./revisewas posted instructing the agent to add aci-macos.ymlstep that fetches the kernel and runsboot_e2e(i.e., add the covering check sdd-validate asked for).agent:success) but could not touch.github/. Its safe-output config (from the run log):crates/minvmd/src/cmd/boot.rs) and pushed that. The CI coverage was never added.Root cause
protect_top_level_dot_folders: trueis a blanket guard that blocks all.github/edits. CI-coverage remediation lives in.github/workflows/. So sdd-validate can demand a covering check, and/revisecan instruct one, but sdd-execute can never produce one. Unbreakable loop.Fix (options)
sdd-executeto modify.github/workflows/under a scoped exception (e.g., when the task is explicitly a CI-coverage task), instead of the blanket dot-folder block; orsdd-validaterecognize that "add a covering check" is not an agent-actionable remediation and route such proof-artifact gaps to an explicit human-CI lane (distinct label/instruction) rather than aneeds-humanthe agent will silently fail to clear; orAcceptance
.github/workflows/under a scoped allowance, or (b) is routed to a clearly-labeled human-CI task — never left as aneeds-humanthe agent provably cannot clear.References
/revisethat the agent could not honor.