issue_86: Record the skill decomposition boundary - #88
Conversation
The toolkit cuts skills by lifecycle capability and never by agent persona, but that position was embodied everywhere and recorded nowhere. It had to be argued from first principles every time the toolkit met a role-based agent platform. ADR-008 records the decision, compares it against a persona cut and a per-role-copies variant, and keeps the strengths of the rejected options visible: a persona cut genuinely wins on organisational mappability and on independence of verification. Placing roles in an orchestration layer above the toolkit keeps those strengths available without giving a role separate process truth. It also names the cost the decision creates: a capability cut cannot express who executes a skill, so the same agent can implement a change and run its own authoritative gate. That gap is tracked separately. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UfBhsTXm166jSfiUdTDSv3
The first draft treated "role-based" as one position. It is three: which axis the process knowledge is cut on, which skills an executing agent is allocated, and how many agents execute a change. A platform that decomposes its agents by role does not thereby cut its skills by role, and the draft's rejected option described only the second. Left as it was, the ADR argued against a position that role-based agent platforms do not necessarily hold, which would have made it easy to dismiss by exactly the readers it has to convince. The decision is unchanged and now says what it does not decide. The Pugh commentary attributes each criterion the persona cut wins to the axis it actually comes from: organisational mappability follows from the cut, independence of verification from the agent decomposition. Separating allocation also surfaces an obligation the decision creates: an orchestration layer that allocates skills per role has to keep each allocation closed under skill-to-skill delegation, or the mandatory gate wiring breaks silently inside a role's context. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UfBhsTXm166jSfiUdTDSv3
Owner review of ADR-008 settled its three open questions. The missing independence of gate verification is a risk to manage, not a reason to separate roles: in a cross-functional team it is exactly the exposure a team accepts and watches. R-007 records it, refines R-001 for the case of gate results, and carries the evidence already on this branch, where the provisional check reported converged and a human reader found the defect. The binding between roles and skills stays outside this repository. The ADR now shows what such a binding can look like and marks it as not a toolkit format. The illustration allocates an entry skill rather than a list of skills, so the allocation is closed under delegation by construction. That also settles whether the toolkit should publish a machine-readable closure: it does not need to. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UfBhsTXm166jSfiUdTDSv3
The accountable owner reviewed the decision and accepted it. The body status is "Accepted (derived)": the contract reserves that wording for a decision whose rationale was AI-drafted and whose acceptance is human, and both are true here. The summary said "Proposed decision", which would have contradicted the lifecycle state in the ADR index. Only the refines relation to ADR-005 was confirmed by name, so only it moves to reviewed. The other three stay proposed: their targets are proposed artifacts, and the review accepted the decision rather than those impact claims. The illustration stays an illustration. A maintained example is not needed for the decision to hold, which closes the last open question. R-007 keeps likelihood high and now says why the rating is not lowered yet: fresh execution is the control that would move it, but nothing requires it today, so lowering it now would record an intention where a control belongs. The mitigation options are split by the dimension they move -- fresh execution prevents the event, execution provenance keeps a self-produced run from reading as an independent one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UfBhsTXm166jSfiUdTDSv3
The owner accepted the impact claims together with the decision, so all four relations move to accepted. The review note now says what an accepted relation means: the claim holds, not that the artifact it points at has been accepted -- QS-005, R-006 and R-007 stay proposed in their own right. R-007 names the control that would move its likelihood. Issue 87 is where the execution-context declaration is tracked, so the assessment says the rating is expected to be revisited when it closes, and the mitigation that depends on it links there instead of describing work with no home. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UfBhsTXm166jSfiUdTDSv3
An independent Convergence Check found both documents contradicting the accepted state of ADR-008. TD-002 said the decisions chapter holds proposed ADRs that are not yet reviewed or accepted. One now is, so the sentence had become false while the debt behind it is unchanged. It is scoped to the remainder rather than deleted. Q-ARCH-006 still read as entirely undecided, while ADR-008 states it answers one instance of it. A reader arriving from the decision met a contradiction. The answer now records the instance that is settled and leaves the general question open, which is what is true. Neither is collateral tidying: both are documents the accepted decision points at, and both said something the repository no longer supports. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The chapter's documents relation for ADR-008 was copied from the ADR-001..ADR-007 pattern and calls the target a "proposed ADR detail page". ADR-008 is accepted, and the generator renders that rationale verbatim into the chapter's impact matrix, so a reader met the wrong lifecycle state in a derived view. The wording is now status-neutral. The other seven keep theirs, which is still accurate for them; the pattern will need the same treatment whenever one of them is accepted. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Convergence Check runs on this branch — recordPosted as a comment rather than in the pull request body, because the body is
Runs 1–3 were produced by the context that wrote the artifacts. Runs 4 onward Every finding from runs 4 and 5 is fixed in What run 6 addedRun 6 was the authoritative pre-integration run. Its one blocker was pending It also established the validator baseline the way runs 1–3 had only asserted And it surfaced two defects that predate this branch, both now filed rather than
Run 6 also corrected one claim made in this pull request: the stale "proposed What run 7 addedRun 7 found Run 7 also verified the change against a simulated post-rebase tree rather than What run 8 addedRun 8 confirmed every artifact question on the head commit and failed only on the Run 8 also re-established question 6 against a simulated post-rebase tree, What run 9 addedRun 9 passed every artifact question and failed on one number: this pull The body no longer carries the number at all. The exact figure now lives in #94, Three runs in a row have now failed on a count kept in prose — R-007's "two" Run 10 — the authoritative resultConverged, on head Three candidates were weighed and reported as observations rather than findings, Run 10 established question 6 on both the branch and a simulated post-rebase Nothing it checked contradicted the repository. Earlier stillThe first defect on this branch was found by neither kind of run: a human |
An independent review flagged that R-007 cited a converged result from an earlier pull request body as observed evidence. Pull request bodies are rewritten on every re-run and their earlier revisions cannot be retrieved, so nothing established that claim -- a risk about check results that cannot be trusted was resting on a check result nobody could verify. The evidence is now two permanent comment links: the human-found framing defect on the issue, and the run-by-run outcomes on the pull request. Both say more than the original claim did, because three authoring-context runs and two independent ones are now on the record rather than one provisional result. The paragraph also says why the evidence sits outside the repository: there is no record here of how a check was executed, which is the limitation the risk describes.
R-007 said "Two runs from a context that had not authored the change reported not converged". The comment it cites as evidence recorded three by then, and each further independent run invalidated the number again. A risk about check results that cannot be trusted was making a claim its own evidence refuted. A count is the wrong form for evidence that is still accumulating. The sentence now describes the asymmetry -- authoring-context runs converged, independent runs repeatedly did not -- which is what the record shows and what no further run can falsify. Found by an independent Convergence Check, on the commit whose stated purpose was to make this evidence checkable. Checking it failed.
Closes #86.
What this adds
ADR-008-skill-decomposition-boundary— Skill Decomposition and Agent RoleBoundary,
status: accepted,reviewed: true.Canonical skills are cut by lifecycle capability and verifiable outcome, never
by agent persona. Role-based agents may exist as an orchestration layer above
the toolkit and consume the same canonical skills; they do not own a copy of the
lifecycle. This decides the cut, not how many agents execute a change, and not
where the role-to-skill binding lives.
The
Contextseparates three questions that are usually asked as one:A platform that decomposes its agents by role does not thereby cut its
skills by role. Only the second conflicts with this decision, so a role-based
agent platform whose skills stay capability-shaped sits inside Option 1 rather
than opposite it.
R-007-gate-results-lack-independence— likelihood high, impact medium,priority medium,
status: proposed.A capability cut cannot express who executes a gate, so the implementing context
can produce its own authoritative Convergence Check result. Per owner review that
is an exposure a cross-functional team accepts and watches, not a reason to
separate roles. R-007
refinesR-001 — narrowing it from artifacts in general togate results, where the mitigation is execution independence rather than a
lifecycle status marker — and
affectsQS-004. ADR-008introduces_riskto it.Its evidence is on this branch: see the Convergence Check note below.
The rating is deliberately not lowered yet for the intention to run the gate from
a fresh context, and R-007 now names #87 as the control that would move it — in
the assessment, which says the rating is expected to be revisited when that issue
closes, and on the mitigation that depends on it. Fresh execution is exactly the control that would move the
likelihood — it prevents the event rather than softening it — but nothing
requires it today: no skill declares an execution context and there is no
execution layer that could enforce one. The assessment now says so, and the
mitigation options are split by the dimension each one moves.
Owner review outcome
The accountable owner reviewed and accepted the decision. The body status is
Accepted (derived)— the contract reserves that wording for a decision whoserationale was AI-drafted and whose acceptance is human, and both hold here.
Two consequences of accepting, both deliberate:
summarysaid "Proposed decision to cut …", which the ADR index rendersnext to the status. It now says "Accepted decision …".
status: accepted/reviewed: true. The owneraccepted the impact claims together with the decision. The review note records
what that means: the claim holds, not that the artifact it points at has been
accepted — QS-005, R-006 and R-007 stay proposed in their own right.
All open questions from the first draft are settled and recorded in #86:
refines ADR-005confirmed — the review note asking whether it should be asibling relation is removed.
Record an ADR: skills are cut by capability, not by role #86, which had scoped the work to one ADR.
decision holds without one. Reusing it outside the architecture documentation
is now Present the skill decomposition position outside the architecture documentation #91.
illustration marked explicitly as not a toolkit format. It allocates an entry
skill per role rather than a list of skills, so everything that skill
mandatorily delegates to comes with it and the allocation is closed under
delegation by construction. That also settles whether the toolkit should
publish a machine-readable closure: it should not. The obligation recorded
under
Negativenow applies only to a platform that chooses to enumerate afixed list instead.
The Pugh matrix is unchanged. Final sums: capability cut
2, per-role copies1, persona cut0. The commentary attributes each criterion the persona cutwins to the axis it comes from — organisational mappability follows from the
cut, independence of verification from agent decomposition.
Also updated:
DOC-09000andDOC-11000register the new artifacts, followingthe pattern used for ADR-001 … ADR-007 and R-001 … R-006.
Reconciled with the acceptance — three documents asserted something the
repository no longer supports once ADR-008 became accepted:
doc-11002-technical-debt.adoc— TD-002 said the decisions chapter holds ADRs"not yet human-reviewed or accepted". Scoped to the remainder rather than
deleted; the debt for ADR-001 … ADR-007 is unchanged.
doc-005-questions-and-answers.adoc— Q-ARCH-006 read as entirely undecidedwhile ADR-008 states it answers one instance of it. The original answer is
untouched; a second paragraph records the settled instance and the general
question stays open.
doc-09000-architecture-decisions.adoc— thedocumentsrationale for ADR-008called it a "proposed ADR detail page". Now status-neutral. The string reaches
the generated impact fragment but not the rendered documentation, because that
fragment is included nowhere; an earlier revision of this body overstated its
reach.
Evidence made checkable —
R-007cited a converged result from an earlierrevision of this body. Pull request bodies are rewritten on every re-run and
their earlier revisions cannot be retrieved, so a risk about untrustworthy check
results was resting on a check result nobody could verify. It now cites two
permanent comment links instead, and says why its evidence sits outside the
repository: there is no record here of how a check was executed, which is the
limitation the risk describes.
None of these is collateral tidying: each is a document the accepted decision
points at.
Verification
./build.sh validatemainand all pre-existing bidirectional-relation warnings (#79). No ADR-008 or R-007 warning../build.sh buildHigh / Medium / Medium;impact,traceabilityandattributesfragments generate;derived_fromrenders../build.sh test./build.sh check-adaptersq-arch-006,adr-005-engine-independent-skillsandr-007-gate-results-lack-independenceall resolve;R-007andADR-007keep distinct anchors.Generated fragments are not committed, per ADR-002.
Convergence Check
Authoritative result: converged, on head
6f5824a, from a context that didnot author the change. No findings, no blockers. Three candidates were weighed
and reported as observations instead, because a reader of the delivery record
gets nothing wrong from them.
The run-by-run record lives in
https://github.com/docs-as-code-toolkit/architecture-knowledge-toolkit/pull/88#issuecomment-5541512602[a comment on this pull request],
not here, and it is the single place that counts them. This body is rewritten on
every re-run, so a tally kept in both drifts — and a tally of runs that are still
happening falsifies itself, which is the defect
6f5824aremoved fromR-007and this section had kept.
The asymmetry, which no further run changes: every check run from the context
that wrote the artifacts reported converged. Runs from a context that had not
authored the change repeatedly reported not converged, and every finding they
raised survived inspection. The first defect of all was found by neither — a
human reading the ADR.
What the independent runs caught, in order: the ADR's lifecycle flip and the
closure of its last open question recorded only in the diff; TD-002 and
Q-ARCH-006 contradicting the acceptance; the fixes for those going unrecorded in
turn;
DOC-09000calling the accepted ADR "proposed";R-007asserting a countof independent runs that its own cited evidence refuted; and this section doing
the same. Every artifact finding is fixed in
f1f8c03,26edc6dand6f5824aand recorded in #86. The record findings needed no commit.
Questions 1 through 6 are established on the branch. Behaviour is not
applicable — nothing under
skills/,scripts/,features/,test/,metamodel/,templates/oradapters/is in the diff, so no scenario couldcontradict this change. Architecture impact, decisions and traceability passed;
implementation and verification passed deterministically.
Because
origin/mainadvanced four commits (#89) after the merge base, thefigures below are from a simulated post-rebase tree, not the branch alone:
the diff applies clean, 79 artifacts / 0 errors / 38 warnings against a same-tool
mainbaseline of 77 / 0 / 38 with a byte-identical warning set, 41/41 JStests plus Ruby 29 runs / 144 assertions and CLI 4 runs / 13 assertions with no
failures, adapters current, 438 unique link targets over 720 occurrences with
none broken, and the derived-view delta confined to the artifacts the new
relations touch. Pugh sums re-added by hand: 2 / 0 / 1.
Two pre-existing defects surfaced along the way are filed rather than carried:
#94 (
derived_from_descriptionleaks into artifacts that declare noprovenance — the same blocks leak on this branch and on
main, in equal number,so this change does not enlarge it; the exact figure is recorded in #94 rather
than counted here) and #95 (the risk register is ID-ordered while
chapter 11 promises priority ordering).
Execution provenance. The asymmetry above is the failure mode
R-007records, observed on the change that introduces it. It is why the risk keeps
Likelihood: High, and why #87 proposes to make independence a declaredproperty rather than an arrangement.
Not in this change
No operational rule from this decision was added to
AGENTS.mdor to any skill.If one falls out of the accepted decision, it belongs in
general-semantic-contracts.mdonce, with the ADR linking to it.ADR-008 and its four relations are accepted. R-007 stays
status: proposed/reviewed: false: its rating is still under analysis, and an accepted decisionmay introduce a risk that is not yet accepted.
Two findings from this work are filed rather than folded in: #91 presents the
position outside the architecture documentation, and #92 fixes a contradiction
between
risk-writing-guide.mdandrelation-rules.mdthat would walk an authorinto a forbidden reciprocal relation.
🤖 Generated with Claude Code
https://claude.ai/code/session_01UfBhsTXm166jSfiUdTDSv3