fix(sdd): preflight emits its checks as a ledger table and rules on what it surfaces - #2080
Conversation
…ules on what it surfaces The pre-Task-1 conflict scan currently permits 'the scan is clean' with no evidence the scan happened — mined sessions show controllers skipping straight to dispatch and plan conflicts surfacing mid-execution as blocking questions. Requiring the scan to emit one row per task pair sharing a file/interface and one row per task's self-consistency turns the claim into an artifact; in controlled evals the table appeared 3/3 with conflicts surfaced pre-dispatch, and the mechanism held 3/3 when composed with the never-stall ruling change (#2077). Claude-Session: https://claude.ai/code/session_0185AJr98gHx5EmwqNeft4Sy
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 61f669ebc9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| Write the table to the ledger. Rule on each conflict it surfaces — the spec | ||
| is the binding authority, the plan is its argument — record the ruling beside | ||
| its row, and dispatch Task 1. The review loop remains the net for conflicts |
There was a problem hiding this comment.
Escalate preflight plan defects instead of ruling locally
When the preflight scan finds a plan-mandated defect or contradiction, this new instruction tells the controller to rule on it and dispatch Task 1, which bypasses the human decision path that the unchanged fix-loop still requires for plan conflicts (SKILL.md lines 321-325) and that the task reviewer template requires for plan-mandated defects (task-reviewer-prompt.md lines 131-135). In sessions where a plan explicitly asks for something the review rubric treats as defective, SDD will now proceed with the controller's local ruling instead of asking which source governs, breaking the designed escalation behavior for this behavior-shaping skill.
AGENTS.md reference: AGENTS.md:L95-L100
Useful? React with 👍 / 👎.
… 2077+2080 text Both PRs rewrote the same preflight paragraph. Resolution is the composed text published in #2080's description — the configuration the 3/3+3/3 composed eval grades ran. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 419dec7755
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| The scan's output is a table, not a verdict. One row for every pair of tasks | ||
| that share a file or an interface: the two tasks, what one produces against | ||
| what the other consumes, and what you found. One row for every task: whether | ||
| its own text agrees with itself — the tests it specifies against the code it | ||
| specifies, the files it creates against the files it later touches. "The scan |
There was a problem hiding this comment.
Include global constraints in each preflight row
For a task that violates a Global Constraint but is internally consistent and does not share a file or interface with another task, the required table can now be “complete” without recording any task-vs-global-constraints check. That leaves one of the two preflight checks enumerated just above unfalsifiable again, so controllers can dispatch Task 1 after missing plan/global contradictions. Because this is behavior-shaping skill content, the row schema needs to make that check explicit rather than relying on inference.
AGENTS.md reference: AGENTS.md:L95-L100
Useful? React with 👍 / 👎.
|
Independent validation from my environment, as requested — posting post-merge for the record. Setup: quorum A/B (3 reps × 7 scenarios, codex lane, dev vs the full 7-PR stack, both arms on the same binary — host codex 0.144.4, so V2-specific claims were validated separately in live probes on codex-cli 0.146.0 with subscription auth), plus a fresh 2-task SDD run on 0.146. Full numbers below for this PR.
Validation performed by Claude Fable 5 (Claude Code) at my direction. |
Who is submitting this PR? (required)
claude-fable-5)What problem are you trying to solve?
Subagent-driven-development's pre-Task-1 conflict scan is unfalsifiable as written: a controller can report "the scan is clean" having run nothing, and nothing in the ledger shows otherwise. In our mined-session corpus that is exactly what happens — plan conflicts (delete-vs-modify across tasks, contradictory interface specs) surface mid-execution instead, where they cost a blocked task or a blocking question to the human. In controlled evals on a seeded-conflict plan, unpatched controllers either missed conflicts at preflight or surfaced them without evidence of a systematic pass.
What does this PR change?
skills/subagent-driven-development/SKILL.md(+13/−6, one file): the scan must emit its work as a table — one row per pair of tasks sharing a file or interface (produces vs consumes, what was found), one row per task's self-consistency — written to the ledger, with a ruling recorded beside each surfaced conflict before Task 1 dispatches. "The scan is clean" without rows is defined as not having scanned. The ruling authority line is explicit: the spec is binding, the plan is its argument.Is this change appropriate for the core library?
Yes — core SDD controller behavior, project-agnostic, no dependencies.
What alternatives did you consider?
Does this PR contain multiple unrelated changes?
No — one file, one mechanism.
Existing PRs
devalone; whichever merges second will conflict in this section. The battle-tested resolution is the composed text (validated 3/3 on both mechanisms in the same eval program), reproduced here for whichever merge needs it:Environment tested
New harness support (required if this PR adds a new harness)
N/A.
Evaluation
dev; the rebased standalone text was graded as part of the composed arm rather than in isolation. The supporting negative result (mechanical scan findings dismissed under plan authority at final review — motivating plan-time handling) is published in the same repo.logs/2026-07-31-cost-pathologies.md(X7-A battery),logs/2026-08-01-queue-campaign.md(Task 11 composed battery + adjudication),logs/2026-08-02-backlog-campaign.md(X10 authority-gap verdict),reports/2026-08-backlog-campaign.md§2.https://claude.ai/code/session_0185AJr98gHx5EmwqNeft4Sy