Repository navigation
refactor(aidd-dev): make assert a judge and route sdlc through plan, implement and assert - #1135
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XeK3mFt8TGPAoKbzZAsaNf
Sonnet skipped plan, implement and assert on small changes: "proportional plan" and a router that only checked installation let it do that work inline. The router now requires each named provider whatever the change's size, deliver plans through the plan skill and hands the executor the plan's folder, and a failure the plan did not cause is repaired in its own commit. Implement follows the documented architecture, and the phase tree is rooted at the project so the plan validator stops rejecting it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XeK3mFt8TGPAoKbzZAsaNf
… task reports Assert drops its runner script: the agent picks the relevant coding assertions and runs them, recording each failure in one line without fixing it. Its round, implement's run and review's report share one shape, guarded by a test, and review asks for a folder instead of guessing one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XeK3mFt8TGPAoKbzZAsaNf
The head placeholder read as literal text, and a run copied "plus the working tree, when it held changes" into its report. The placeholder now says what to write in each case. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XeK3mFt8TGPAoKbzZAsaNf
…nsversal The router's behavior returns to its original text. Running every named step whatever the change's size moves to transversal rules, and deliver drops "proportional", the word that let a model skip plan, implement and assert. Deliver states the repair loop at the level it had: the executor repairs what the validation skills report until they pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XeK3mFt8TGPAoKbzZAsaNf
Assert used to collect, repair and rerun failed CI checks before one push. Repairing and pushing have their own owners; assert keeps its part: the checks a CI run failed join the ones it judges, marked not run when only CI runs them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XeK3mFt8TGPAoKbzZAsaNf
Assert now only judges, so a failing report goes back to the step that changes the code, as the full delivery flow already shows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XeK3mFt8TGPAoKbzZAsaNf
| name: 03-assert | ||
| description: Assert the work behaves by iterating the project's coding assertions until they pass, plus optional architecture and frontend facets. Use to validate an implementation. Not for reviewing or writing tests. | ||
| argument-hint: work | scope | ||
| description: Assert the work against the project's coding assertions into a pass or fail report. Use to verify an implementation before it ships. Not for fixing code, reviewing a diff, or writing tests. |
There was a problem hiding this comment.
Est-ce qu'on est sûr de la partie ship on ?
Est-ce que l'argument, il n'est pas trop réducteur vers un argument sans rien ? Comment c'était fait avant ?
| 1. Pick the assertions the work concerns: | ||
| - from `aidd_docs/memory/coding-assertions.md`; | ||
| - else from the project's own checks; | ||
| - plus the checks a supplied CI run failed, `not run` when they only run in CI; |
There was a problem hiding this comment.
Je ne sais pas si c'est bien dit. Ça fait assez lourd, assez long. Toujours une question sur le flow pour la partie CI : par rapport à avant, comment c'était fait ?
| 3. Fill a round from the [assert template](../assets/assert-template.md). | ||
| 4. Keep the round: | ||
| - with a task folder: append it to its `assert.md`; | ||
| - without one, ask whether to keep it in a file: |
There was a problem hiding this comment.
Est-ce un bon formalisme par rapport à ce qu'on a l'habitude de faire et pour l'IA : puis le bullet point :
| @@ -0,0 +1,12 @@ | |||
| # Assert: {{the plan's title without its `Plan:` prefix, else the task folder's slug}} | |||
There was a problem hiding this comment.
On est obligé de dire ce truc de « plan title without plan prefix ». un détail, je trouve
|
|
||
| ## Round {{the count of round headings, this one included}} | ||
|
|
||
| - Head: `{{short sha of HEAD before the checks ran}}`{{", plus the working tree" when it held changes, else nothing}} |
There was a problem hiding this comment.
La partie waqiy chui, j'ai pas compris ce que c'était. Est-ce qu'il vaut mieux pas qu'ils listent un peu les fichiers ? J'en sais rien. Ça couvre quoi comme cas ? Tu l'as généralisé partout, je crois, en plus
|
|
||
| ## Transversal rules | ||
|
|
||
| - Run every step through the skill or agent its zone names, whatever the change's size. |
There was a problem hiding this comment.
À quoi est-ce qu'elles apportent, ces deux lignes, explicitement, surtout la fin, whatever the changes size ?
| ## Behavior | ||
|
|
||
| Turn the contract into a proportional plan, then give the `executor` agent the plan. It implements it and calls the validation skills, which own their checks and repair loops. Include architecture conformance whenever the project documents architecture. Run an end-to-end journey after every other validation when the plan calls for one, and none otherwise. | ||
| Turn the contract into a plan, then give the `executor` agent the plan. It implements it, calls the validation skills, and repairs whatever they report until they pass. Run an end-to-end journey after every other validation when the plan calls for one, and none otherwise. |
There was a problem hiding this comment.
Est-ce qu'on ne perd pas la partie architecture quand même, qui semblait être assez généraliste ici ?
…cture - assert description no longer says "before it ships" - report titles take the plan's title as is - assert states uncommitted changes in their own field - sdlc keeps one transversal rule - deliver asks for architecture conformance again Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XeK3mFt8TGPAoKbzZAsaNf
No caller in the chain supplies a CI run before the pull request opens, so the line judged nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XeK3mFt8TGPAoKbzZAsaNf
🎯 What & why
Assert now only judges: it picks the project's coding assertions, runs them, and appends a normed pass or fail round to
assert.md, never fixing code. The SDLC flow actually goes through plan, implement and assert, which a model used to skip on small changes.🛠️ How it works
coding-assertions.md, else the project's own, may run them in parallel, and writes one decisive error line per failed check.run-assertions.cjsis deleted.run.md,review.mdandassert.mdshare a title and- Head:line, guarded by task-reports-share-one-shape.test.js.Closes #1077
🧪 How to verify
Measured with headless
claude -pruns of/aidd-orchestrator:01-sdlcon a kanban fixture holding a straydebugger;:debugger;removed in its own commit.06-test, acceptance evidence isaidd-qa:01-acceptance-qa, repairing is08-debugor implement. Assert judges by exit code only.aidd-vcs, outside this PR.🤖 Generated with Claude Code
https://claude.ai/code/session_01XeK3mFt8TGPAoKbzZAsaNf