Skip to content

refactor(aidd-dev): make assert a judge and route sdlc through plan, implement and assert - #1135

Merged
blafourcade merged 9 commits into
nextfrom
refactor/lean-assert-skill
Oct 31, 2026
Merged

blafourcade merged 9 commits into
nextfrom
refactor/lean-assert-skill

Conversation

@blafourcade

@blafourcade blafourcade commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

🎯 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

  • Assert (03-assert/actions/01-assert.md): no script anymore; the AI chooses the relevant checks from coding-assertions.md, else the project's own, may run them in parallel, and writes one decisive error line per failed check. run-assertions.cjs is deleted.
  • One report shape: run.md, review.md and assert.md share a title and - Head: line, guarded by task-reports-share-one-shape.test.js.
  • SDLC: the router keeps its text and gains one transversal rule: every step goes through the skill or agent its zone names, whatever the change's size. Deliver drops "proportional" and states the repair loop: the executor repairs what validation reports until it passes.
  • Architecture conformance leaves assert: implement builds against the documented architecture, and deliver still asks for it.
  • Plan phase tree is rooted at the project, which stops the plan validator rejecting it.

Closes #1077

🧪 How to verify

Measured with headless claude -p runs of /aidd-orchestrator:01-sdlc on a kanban fixture holding a stray debugger;:

  • Sonnet, before: 0 of 3 runs used plan, implement and assert. After: 2 of 2, at 0.79 and 0.80 $ (baseline 0.90 $), test, typecheck and lint green, the debugger; removed in its own commit.
  • A harder request (assignee filter and column): 4 of 4 runs green with the full chain.

⚠️ Heads-up

  • Manual repair after a FAIL stays manual; assert never fixes.
  • Review now asks for a task folder instead of resolving one.
  • The frontend facet is gone: observing a UI while building is 06-test, acceptance evidence is aidd-qa:01-acceptance-qa, repairing is 08-debug or implement. Assert judges by exit code only.
  • Assert judges only the checks it runs locally. No step waits for CI after the pull request opens: that belongs to orchestration with aidd-vcs, outside this PR.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XeK3mFt8TGPAoKbzZAsaNf

blafourcade and others added 7 commits October 30, 2026 21:01
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
@blafourcade
blafourcade marked this pull request as ready for review October 31, 2026 11:41
@blafourcade
blafourcade requested a review from a team as a code owner October 31, 2026 11:41
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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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;

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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}}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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}}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

À 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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Est-ce qu'on ne perd pas la partie architecture quand même, qui semblait être assez généraliste ici ?

blafourcade and others added 2 commits October 31, 2026 15:28
…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
@blafourcade
blafourcade merged commit 65b54db into next Oct 31, 2026
32 checks passed
@blafourcade
blafourcade deleted the refactor/lean-assert-skill branch October 31, 2026 14:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant