feat(autonomy): autonomy plugin — category, topology contracts, guided-setup v0 (WP1)#333
Conversation
New marketplace category `autonomy` (domain-and-cross-cutting tier; singleton justified by the taxonomy's singleton-governance clause, with a broaden-on-trigger register row) and the autonomy plugin scaffold: manifest v0.1.0 scoped to shipped capability only, marketplace entry, README with trigger-gated roadmap, regenerated catalog. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
role-topology (five roles incl. unborn runner-execution, adapter split rule, composition stance), binding-seam (schema-versioned binding shape, three-rung resolution ladder, no-org terminal default, staleness limitation, reference/ layout convention), wiring-vs-advisor (WIRE vs ADVISE surface classes, paid-is-advisory-first). Tool-agnostic contract vocabulary throughout; vendor and fleet names banned by sweep. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
Setup contract per plugin philosophy: check + apply actions, disable-model-invocation, enumerated argument surface with pinned headless free-tier defaults, non-interactive when arguments complete. Discovery-first (role homes, substrate, budget posture); writes the schema-versioned .claude/autonomy/binding.json (concern-named from day one); seam-2 overlay obligations documented. Five eval cases incl. no-org terminal default, non-interactive run, and the never-assumes-fleet-shape refusal. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
…hase 5) Promote the fleet-name sweep to a standing check scoped to plugins/autonomy/**: the org token and bare fleet repo names fail validation anywhere under the plugin except plugin.json author metadata. Enforces the WP1 acceptance criterion that fleet instances live only in the org-policy home's binding doc. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
The tool-agnostic guarantee held only through one-off greps; the standing contract check now fails any vendor name inside plugins/autonomy/reference/ (surface classes replace them), alongside the existing fleet-name sweep. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c9a59c9cae
ℹ️ 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".
|
Claude finished @kyle-sexton's task in 2m 14s —— View job PR Review — feat(autonomy) WP1
SummaryOverall the PR is well-structured and the design is sound — tool-agnostic contracts, correct plugin-form isolation ( Correctness Bug — Schema Key MismatchThe Codex finding is accurate and this needs a fix before merge.
But the writer (
The normative contract is the authority — when a downstream reader follows -Bindings carry a `schema-version` field from v0 — consumers read the version before the body,
+Bindings carry a `schema_version` field from v0 — consumers read the version before the body,Minor Observations1. No validator asserts schema-key consistency going forward. 2. Everything else looks clean
Verdict: merge after fixing the |
The binding-seam contract said schema-version while setup documents, tests, and empirically writes schema_version (hook-envelope precedent); consumers keying on the contract spelling would miss the field. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 27312c8298
ℹ️ 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".
|
Claude finished @kyle-sexton's task in 2m 24s —— View job
Round 2 Review — commit
|
| Line | Current | Fix |
|---|---|---|
| 55 | .claude/autonomy/binding.json |
${CLAUDE_PROJECT_DIR}/.claude/autonomy/binding.json |
| 57 | .claude/autonomy/binding.local.json |
${CLAUDE_PROJECT_DIR}/.claude/autonomy/binding.local.json |
| 23 | .claude/autonomy/ (project layer) |
${CLAUDE_PROJECT_DIR}/.claude/autonomy/ |
| 24 | .claude/autonomy/**/*.local.* |
${CLAUDE_PROJECT_DIR}/.claude/autonomy/**/*.local.* |
Finding #3 — validate-plugin-contracts.mjs:212: fleet-token exemption too broad — PLAUSIBLE, low risk today
The continue at line 212 skips the entire plugin.json from fleet-token checking. The exemption exists because "author": {"name": "Melodic Software", "email": "info@melodicsoftware.com"} legitimately contains melodic-software. But it also silently exempts description and keywords from fleet-token checks.
Current plugin.json is clean — description and keywords contain no fleet tokens. But a future "keywords": ["github-iac"] would pass unchallenged.
A targeted fix parses the manifest and only exempts author fields:
if (path.endsWith(`${sep}.claude-plugin${sep}plugin.json`)) {
// Author block is allowed to contain publisher identifiers; description/keywords are not.
const { description = '', keywords = [] } = JSON.parse(read(path));
const checkText = [description, ...keywords].join(' ');
if (fleetTokens.test(checkText)) {
fail(path, "autonomy plugin manifest description/keywords must not name the org or fleet repos");
}
continue;
}Not a blocker given the current content, but closes a gap that would otherwise require a human to catch.
Verdict
| Finding | Verdict | Blocker? |
|---|---|---|
| schema_version fix | ✅ Fixed | was blocking, now resolved |
| check mode description overstates completeness | PLAUSIBLE | No — v0, doc-only fix |
Relative .claude/autonomy/ paths in SKILL.md |
CONFIRMED | Recommend fix before merge |
| plugin.json fleet-token exemption too broad | PLAUSIBLE | No — current content is clean |
Recommend: fix the relative-path anchoring in SKILL.md (finding #2) before merge — it's a two-minute change that prevents a silent misplacement. The other two are improvements worth making but not blocking.
…st exemption check now folds in the org-policy rung when a pointer exists (warning on unreachable, never silent); apply anchors every project path at the resolved project root so subdirectory invocations cannot nest the binding; the fleet-token gate now exempts only plugin.json's author block instead of the whole manifest. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0f0d012918
ℹ️ 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 contract said first-rung-wins over two layers while setup documents an additive user-global > org > project > local-overlay merge; a consumer implementing from the contract would drop user-global and overlay values and miss per-value refinement. The ladder now states the four-layer additive merge with interview as the unresolved-value fallback and the org-fetch failure surfaced, matching setup. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d5003371b3
ℹ️ 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".
|
Claude finished @kyle-sexton's task in 4m 4s —— View job Round 3 Review — commit
|
| Round | Finding | Status |
|---|---|---|
| R1 | schema_version key mismatch in binding-seam.md |
✅ Fixed in 27312c8 |
| R2 | check description overstated completeness (no org rung) |
✅ Fixed in 0f0d012 |
| R2 | Relative .claude/autonomy/ write paths in apply |
✅ Fixed in 0f0d012 |
| R2 | plugin.json fleet-token exemption too broad |
✅ Fixed in 0f0d012 |
| R3-Codex | Binding ladder was winner-takes-all instead of additive merge | ✅ Fixed in d500337 |
The binding-seam.md resolution ladder now correctly describes a four-layer additive merge (user-global → org → repo-local → local overlay), matching SKILL.md and matching the terminal-default solo-adopter case.
Outstanding Codex P2 Findings
Finding #1 — Org binding document location (SKILL.md:39) — PLAUSIBLE, deferred
When check resolves rung 2, it needs to know which file within the org-policy-home repo to fetch. binding-seam.md:21 names "the org's binding instance document" but never standardizes its path. An implementation following the contract — without reading the Phase 6 standards PR — can't know whether to look for .claude/autonomy/binding.json, autonomy-binding.json, or something else at the org-policy home.
Disposition: intentionally deferred per plan. The PR description explicitly states "Phase 6 (fleet binding instance doc) lands as a separate melodic-software/standards PR after this merges (dead-link avoidance, per plan)." That Phase 6 document is where the filename convention is established. The gap is real but acknowledged.
A small doc improvement would close the gap without a blocker: add one sentence to binding-seam.md's existing Known Limitation section noting that the org binding filename convention is defined in the org-policy-home's own instance document (standardized in the binding instance doc, Phase 6). This is a suggestion, not a blocker.
Finding #2 — Unborn roles must be representable in the binding shape — CONFIRMED
binding-seam.md:9 reads:
A binding is a written, schema-versioned record mapping contract vocabulary to org instances: each topology role to a repository, each capability's seam to the org's chosen instance…
But role-topology.md:16 marks runner-execution home as Unborn — it has no repository until the runner charter fires. And evals.json:62 already expects the skill to handle this correctly: "Asks or records unbound for role homes it cannot infer."
The three-way inconsistency is real: the normative contract says "each role → a repository" with no carve-out; the topology contract says one role may have no repository; the eval expects "unbound" to be a valid binding state. A downstream consumer implementing binding resolution from binding-seam.md alone would have no basis to emit runner_execution_home: null — they'd be forced to either invent a repo or reject the binding as malformed.
Recommend fixing before merge — it's a single-sentence clarification:
-each topology role to a repository, each capability's seam to the org's chosen instance,
+each topology role to a repository (or an explicit unbound marker when the role is not yet
+instantiated — see `role-topology.md`), each capability's seam to the org's chosen instance,Everything else looks clean
After four rounds of review the PR is in good shape:
- Binding ladder in
binding-seam.mdis now additive merge, identical semantics toSKILL.md— thed500337fix resolved the Codex finding cleanly. applypath anchoring in SKILL.md explicitly resolves${CLAUDE_PROJECT_DIR}before writing — subdirectory invocations can't create nested.claude/autonomy/.- Fleet-token gate now strips only the
authorblock fromplugin.jsonbefore testing; description, keywords, and all other fields stay gated. checkmode correctly describes all four resolution rungs including the org fetch with auth, and correctly warns on unreachable org-policy-home rather than silently skipping it.- Validator gates (
disable-model-invocation, fleet-name sweep, vendor deny-list) all look correct.
Verdict: Fix the unbound-role carve-out in binding-seam.md (Finding #2) before merge — it's a one-sentence change that removes a genuine inconsistency between the normative contract and the topology + eval behavior. Finding #1 (org binding filename) is phase-6-deferred and acceptable as-is.
|
Claude finished @kyle-sexton's task in 2m 36s —— View job Round 4 Review
One remaining fix needed —
|
| Round | Finding | Status |
|---|---|---|
| R1 | schema_version key mismatch in binding-seam.md |
✅ Fixed |
| R2 | check description overstated completeness (no org rung) |
✅ Fixed |
| R2 | Relative .claude/autonomy/ write paths in apply |
✅ Fixed |
| R2 | plugin.json fleet-token exemption too broad |
✅ Fixed |
| R3 | Binding ladder was winner-takes-all instead of additive merge | ✅ Fixed |
| R4 | Unborn roles not representable in the binding shape | ⬛ Pending |
Verdict: one-line fix to binding-seam.md:10 and this is mergeable.
The binding shape now states a role MAY be null (unborn role or no org instance — consumers never invent one), and the org-policy-home pointer gains document resolution: an optional #<path> suffix, else discovery by the binding's schema-versioned shape with the resolved path persisted for deterministic later fetches. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 01a24bb62c
ℹ️ 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 check eval only asserted the three local layers, so an implementation omitting the promised org-binding fetch would stay green; it now requires the org rung when a pointer exists and the not-considered warning on fetch failure. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 057fcef60f
ℹ️ 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".
Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9fa88cdd3f
ℹ️ 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".
…ladder Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5a168c1858
ℹ️ 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".
|
Claude finished @kyle-sexton's task in 2m 15s —— View job Round 5 Review
Prior findings — all resolvedAll findings from rounds 1–4 are confirmed resolved in the current state of the branch:
Round 5 Codex P2 AssessmentFinding #1 — The finding is accurate: That said, this is correctly v0-deferred for three reasons:
The gap is real and worth tracking, but it is not a correctness bug today. Suggest adding a JSON example to Finding #2 —
The gap is latent but not active today:
Like finding #1, the right fix arrives with the first PR that writes to the user-global layer (presumably a user-scoped defaults command in a later work package). That PR should standardize VerdictBoth Codex P2 findings from the latest round are PLAUSIBLE but correctly v0-deferred — no active correctness bug exists in the shipped behavior, and both gaps are naturally resolved by the first work-package PR that either writes a user-global binding or introduces a compiled capability consumer. The The PR is clean for merge in its current state. |
The written-binding section now names the exact JSON keys (roles object keyed by the kebab-case topology role names, substrate surface keys, budget_posture values) and fixes binding.json / binding.local.json as the shape at every layer including user-global, so independent consumers serialize and resolve identically. Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
…live-proven demo (WP2) (#343) ## Summary WP2 (`ai-ladder-wp2-telemetry`) implementation, phases 1–4 per its approved PLAN (`docs/topics/ai-ladder-wp2-telemetry/PLAN.md`, #330): - **Telemetry contract** (`reference/telemetry.md`): OTLP pinned to semconv v1.43.0 with `schema_url` on contract-authored emissions (native tool output consumed as-is — empirically corrected during the demo); the `autonomy.work_item.url` join attribute (normalized canonical item URL, selection rule, resource-scope on sessions / span-scope on CI, 1:1-lease granularity guarantee, join-epoch limitations, confidentiality clause, governed `autonomy.*` extension); one causal tree via W3C context propagation with the interactive exclusion; three sink classes with the file-artifact free default; native-surface principle; telemetry-is-not-return boundary. - **Setup telemetry slice**: existing-stack wiring, free default (pipeline-span JSON-lines writer + ephemeral per-job collector into one artifact directory, interactive coverage via a local collector store), `OTEL_RESOURCE_ATTRIBUTES` join wiring (vendor honoring verified against the official monitoring doc), paid sinks advisory-first, additive `telemetry` binding section. - **Emission-conformance check** (`scripts/check-emission-conformance.mjs`): pinned `schemaUrl` (OTLP JSON lowerCamelCase), join-attribute presence + normalization — the contract's enforcement surface. - Templates, three new eval cases, v0.2.0 manifest + catalog. ## Conforming-path demo (executed live) Trigger stub emitted its own root span and propagated TRACEPARENT → template writer emitted the pipeline span → a real headless agent session inherited the context with the join attribute at resource scope. Results: DuckDB over the single artifact directory shows **1 distinct trace across 4 spans** (trigger + pipeline + 2 session spans); `claude_code.cost.usage`/`token.usage` carry `autonomy.work_item.url` string-identical to the pipeline span; conformance check exit 0. Sanitized fixture committed (`skills/setup/evals/fixtures/otlp-demo/`) as the WP3 demo interface. Demo capture used an equivalent OTLP/HTTP-JSON receiver (same JSON-lines output shape as the template's collector fileexporter) — the adopter template keeps the collector. ## Audits - Near-duplicate: the slice composes the fleet's existing observability pipeline as one conforming existing-stack instance; the demo exercised the file-artifact class without touching it. No native telemetry surface reimplemented. - Gates: validate-plugins, contract validator (fleet + vendor sweeps), catalog check, plugin validate --strict, skill-quality PASS, evals schema ok, run-plugin-tests exit 0, markdownlint/typos clean. No linked issue ## Related - Plan record: `docs/topics/ai-ladder-wp2-telemetry/PLAN.md` (#330); WP1: #333 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 (1M context) <noreply@anthropic.com>
## Summary WP1 Phase 6 of the AI-adoption-ladder effort: the organization's binding instance for the `autonomy` contract set — each role-topology role mapped to its fleet repository, the bound role-vocabulary version (`autonomy` plugin 0.1.0), the unborn runner-execution role recorded with its birth trigger, and the consumption path through the binding-seam org layer. This is deliberately the ONLY artifact in the contract set where fleet repository names appear (the plugin's standing validator bans them everywhere under `plugins/autonomy/`). Placement in `conventions/process/` was user-locked after the pre-flight charter check: the process tier owns operational standards, and this document becomes the single owner of a new fact (no duplication of `GovernedRepositories.cs`, which owns governance flags, not autonomy roles). No linked issue ## Related - melodic-software/claude-code-plugins#333 (the autonomy plugin this binds, merged) - Contract source: `plugins/autonomy/reference/role-topology.md` + `binding-seam.md` in the marketplace repo ## Verification - markdownlint/typos/gitleaks/editorconfig pre-commit lanes pass - One grep hit per role name; role-vocabulary version marker present 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 (1M context) <noreply@anthropic.com>
## Summary Effort-end housekeeping for the AI-adoption-ladder effort: all seven work packages are merged, so the per-WP topic slices come out per the close-out convention (publish the PLAN, then prune the slice). - WP4–WP7 PLANs were already spliced into their PR bodies at each close-out (#372, #377, #600, #676). - WP1–WP3 PLANs are now published the same way into #333, #343, and #356 (each merged PR body gained a `PLAN (published at effort-end close-out)` details block), so every slice's content has a durable home on its merged PR before the directory is removed. - The WP map in `docs/topics/ai-adoption-ladder/index.md` now records delivery PRs instead of live slugs. The effort hub itself (index, design evidence, research docs) stays. No content is lost: every deleted PLAN.md is byte-recoverable from git history and readable in its merged PR's details block. ## Related No linked issue (effort-end housekeeping; the WP map issue #239 is already closed). - #239 (WP map: AI adoption ladder — the effort this closes out) - #333 / #343 / #356 (WP1–WP3 delivery PRs, PLANs published into their bodies in this close-out) - #372 / #377 / #600 / #676 (WP4–WP7 delivery PRs, PLANs published at their own close-outs) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ger row (#698) ## Summary D1 sweep for #353: the WP1–WP7 PLAN out-of-package notes (mined from the merged PR bodies #333/#343/#356/#372/#377/#600/#676) contained 31 deferred notes; every note that named no tracking issue and had no contract-recorded trigger now has a durable home: - **README roadmap** gains four trigger-gated rows: fleet guardrail materializations (WP5), fleet routine stand-up + existing-scheduler reconciliation (WP6), vendor-binding capability templates (WP6), cost enforcement / hard spend caps (WP5, 3→4 trigger). - **Trigger register** gains the second-binding-consumer cross-repo drift check (WP1). - **`reference/return-accounting.md`** records the per-work-class precision-graduation deferral beside its band-stability rule (WP3). - **CHANGELOG.md created** for the autonomy plugin (first entry; 0.1.0–0.7.0 history stays in the WP PR bodies) + version bump to 0.7.1 — starts the CHANGELOG-parity posture #663 gates on. All other mined notes were already covered: tracked issues (#351, #352, #694–#697), contract-recorded triggers (telemetry immutable-ID, return-accounting expansion/revisit), delivered sibling WPs, resolved `/architect` questions, or the user-held dormant triggers (runner build T4, L3 backend, merge serialization, mid-run interrupt, org-enablement, cross-team). Full disposition table lands as a comment on #353 at close. Documentation only — no contract semantics change. ## Related - #685 (effort-end prune that moved the PLAN records into the merged PR bodies) - #663 (CHANGELOG-parity gate this PR's new CHANGELOG.md starts satisfying) - WP delivery PRs mined: #333, #343, #356, #372, #377, #600, #676 Closes #353 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Summary
WP1 (
ai-ladder-wp1-packaging) implementation, phases 1–5 per its PLAN (indocs/topics/ai-ladder-wp1-packaging/PLAN.md, approved on #330):autonomy(domain-and-cross-cutting tier; singleton per the taxonomy's own governance clause, broaden-on-trigger row recorded) +CATEGORY_ORDERentryplugins/autonomyscaffold: manifest v0.1.0 scoped to shipped capability, marketplace entry, README with trigger-gated roadmap, regenerated catalogreference/: role-topology (five roles incl. unborn runner-execution), binding-seam (schema-versioned binding, three-rung resolution ladder, no-org free-tier terminal default), wiring-vs-advisor — tool-agnostic, vendor + fleet names banned/autonomy:setup): check + apply,disable-model-invocation, enumerated argument surface with pinned headless free-tier defaults, writes schema-versioned.claude/autonomy/binding.json; five eval casesplugins/autonomy/**+ vendor deny-list overplugins/autonomy/reference/Phase 6 (fleet binding instance doc) lands as a separate
melodic-software/standardsPR after this merges (dead-link avoidance, per plan).Verification
claude plugin validate --strictexit 0 (marketplace + plugin);node scripts/generate-catalog.mjs --checkin syncnode scripts/validate-plugin-contracts.mjsexit 0 (incl. the two new autonomy gates);bash scripts/run-plugin-tests.shexit 0/skill-quality:checkPASS onsetup(1 advisory warning: no Gotchas surface — new skill, no failure history);check-jsonschemavalidatesevals.json--plugin-dir, non-interactiveapply --org-policy-home none --budget-posture free): completed with ZERO prompts, wrote schema-versioned.claude/autonomy/binding.json(schema_version: "1.0",org_policy_home: null,budget_posture: "free")Audits
No linked issue
Related
docs/topics/ai-ladder-wp1-packaging/PLAN.md(docs(topics): ai-adoption-ladder contract set + WP1-WP3 plans #330)docs/topics/ai-adoption-ladder/index.md🤖 Generated with Claude Code
PLAN (published at effort-end close-out)
ai-ladder-wp1-packaging
Brief
TLDR
Packaging and topology for the AI-adoption-ladder machinery (T1–T7 contract set): role-vocabulary
repo topology, one new plugin as the single home composing existing plugin seams, and a
surface-based wiring-vs-advisor principle for guided setup.
Goal
Every ladder artifact has one owning home named by ROLE in contract text; fleet repo names appear
only in the binding-seam instance doc; the new plugin ships the contract docs and capabilities and
composes existing plugins without duplicating them.
Locked decisions
role-topology.mdfrom this row copies the role sentences in surface-class vocabulary, never the parentheses; the Phase 5 standing gate and the vendor deny-list fail any leak.autonomy; final name via naming pass) is the single home for: contract docs, guided-setup capability, guardrail-matrix + org-binding seam, sandbox-ladder setup, telemetry contract, return-accounting convention, routine catalog + v1 definitions.Constraints
binding-seam instance doc.
org/tool can consume.
Acceptance criteria
per MIGRATION-PLAYBOOK).
Captured assumptions
single-plugin decision is reversible.
non-Claude-Code orgs consume the contract markdown directly.
Out-of-scope (deferred with triggers)
Deferred questions
D22 category vocabulary governs) —
/architect./architect.Plan
Interview-locked this round: plugin name
autonomy; NEW marketplace categoryautonomy(singleton, justified by the taxonomy's own singleton-governance clause); WP1 materializes
topology contract docs only (per-capability contracts land with WP2–WP6); guided-setup ships
as a v0 discovery-phase skill; the fleet binding instance lands in the org-policy home
(
melodic-software/standards) via a separate small PR that merges after the plugin PR.Phase 1: Category vocabulary + generator [DONE]
docs/CATALOG-TAXONOMY.mdautonomyto the domain-and-cross-cutting tier — gloss: governed autonomous agent operation (adoption discovery, guardrails, standing routines, autonomy telemetry/return contracts). Singleton justified via the doc's singleton-governance clause (honest distinct label; label predicts member). Trigger-register row: a broader automation plugin lands → broaden or add a sibling category then.scripts/generate-catalog.mjsautonomytoCATEGORY_ORDER(line 23), position mirroring the taxonomy doc's tier ordering.Sanity Check:
grep -c '\autonomy`' docs/CATALOG-TAXONOMY.md` ≥ 1grep -n 'autonomy' scripts/generate-catalog.mjsshows aCATEGORY_ORDERentryPhase 2: Plugin scaffold [DONE]
First work item — migration-gate step 1: re-fetch the official plugins/plugin-manifest docs
(fresh-docs mandate) before authoring. Migration-gate step 6 (PII/secrets strip) runs before
the first commit.
plugins/autonomy/.claude-plugin/plugin.json.claude-plugin/marketplace.jsonsource: ./plugins/autonomy,category: autonomy.plugins/autonomy/README.mdREADME.mdnode scripts/generate-catalog.mjs).Sanity Check:
claude plugin validate --strict <repo-root>exit 0node scripts/generate-catalog.mjsreports in-syncgrep -riE 'melodic-software|ci-workflows|github-iac' plugins/autonomy/ --exclude=plugin.jsonreturns empty (author metadata in plugin.json is the only allowed occurrence)Phase 3: Topology contract docs [DONE]
All three docs in
plugins/autonomy/reference/are tool-agnostic contract markdown: roles andsurface classes only. Vendor and fleet names banned outright — real instances live in the
org-binding doc (Phase 6); tool-specific materialization details (e.g. the
.claude/autonomy/path) live in SKILL.md/README, never in
reference/.plugins/autonomy/reference/role-topology.mdplugins/autonomy/reference/binding-seam.mdschema_versionfield from v0; (e) known limitation: pointer staleness when an org moves its policy home. Layout convention stated as shape only — one contract doc per capability lands inreference/with its owning WP; no future-filename enumeration.plugins/autonomy/reference/wiring-vs-advisor.mdSanity Check:
grep -riE 'melodic-software|ci-workflows|github-iac' plugins/autonomy/reference/emptyreference/—grep -riE 'github|gitlab|bitbucket|slack|anthropic|claude|openai|copilot|cursor|devin' plugins/autonomy/reference/(surface classes replace all of these; list pairs with PR review for completeness)grep -ci 'reviewable' plugins/autonomy/reference/wiring-vs-advisor.md≥ 1 andgrep -ci 'opt-in' …≥ 1Phase 4: guided-setup v0 skill [DONE]
plugins/autonomy/skills/setup/SKILL.mdsetup,disable-model-invocation: true,check+applyactions, idempotent, non-interactive when complete arguments supplied). Scope: D7 discovery/interview of the adopting org's state (role homes present, substrate availability, budget posture);applywrites the discovered binding as tracked config.claude/autonomy/— concern-named from day one (concern = governed autonomous operation; a plugin split/rename leaves it valid; the versioneddocs/conventions/autonomy/contract is deferred with trigger: second plugin consumes the config). Enumerated argument surface + pinned headless defaults (free tier everywhere per Brief cost constraint). Seam-2 obligations:*.local.*overlay, recommended.gitignoreline (.claude/autonomy/**/*.local.*), user-global → project → local resolution, infer-and-persist convention ladder. Written binding carriesschema_version.plugins/autonomy/skills/setup/evals/evals.jsoncodebase-health/setup). Cases: trigger/routing, discovery happy path, no-org terminal default, one non-interactive argument-supplied run, one refusal/guardrail (never assumes fleet shape).Sanity Check:
/skill-quality:checkandvalidate-evalspass withskills_root=plugins/autonomy/skillsclaude plugin validateexit 0grep -c 'disable-model-invocation: true' plugins/autonomy/skills/setup/SKILL.md= 1Phase 5: Acceptance gates (in-repo) [DONE]
scripts/validate-plugin-contracts.mjsplugins/autonomy/**: org tokenmelodic-software+ bare repo names (ci-workflows,github-iac), excluding plugin.json author metadata. Also gate the Phase 3 vendor deny-list as a standing check scoped toplugins/autonomy/reference/— the tool-agnostic guarantee must not depend on one-off greps.Gate run:
scripts/validate-plugins.sh;scripts/run-plugin-tests.sh(verified: no per-plugintest file required);
node scripts/validate-plugin-contracts.mjs; markdown/typos/lychee lanes;claude plugin validate --strict. Migration-gate step 9: clean consumer repo (NOT this repo),claude --plugin-dir ./plugins/autonomy, exercise/autonomy:setupon its argument-suppliednon-interactive path — must complete without prompting and write a schema-versioned
.claude/autonomy/binding. Near-duplicate audit: statement that no autonomy skill duplicatesan existing plugin capability. Security review: surfaces 2/5/7 untouched; surface 6
reviewed-and-accepted (first-party, MIT).
Sanity Check:
.claude/autonomy/with aschema_versionfield after the non-interactive run, with zero prompts issuedPhase 6: Fleet binding dogfood — standards PR [DONE]
Runs AFTER the plugin PR merges (dead-cross-repo-link avoidance). First work item —
pre-flight: read
standards' own conventions/docs layout and pick the target path per ITSrules (no agent-operations section exists today; placement follows that repo's charter, not an
assumption).
Deliverable: the fleet binding instance doc in
melodic-software/standards— each D1 role →fleet instance (capability-distribution → the claude-code-plugins marketplace;
CI-orchestration → ci-workflows; settings-as-code → github-iac; org-policy → standards itself;
runner-execution → unborn, T4 birth trigger recorded). The doc records the role-vocabulary
version it binds and cites
role-topology.md. Fleet names appear ONLY here among WP1deliverables.
Sanity Check:
grephit per D1 role namegrep -riE 'ci-workflows|github-iac' plugins/autonomy/still empty (post-merge re-check)Blast radius
MEDIUM — ~12 files across 2 repos; new category + contract docs constrain WP2–WP6 (each of
which has its own architect round); fully git-revertible; automated gates (validate, contract
tests, CI lanes) cover the shared surfaces.
Stress-test summary
Step 3 fresh-context plan review: 10 findings (1 CRITICAL — D6 dropped; fixed by
wiring-vs-advisor.md). Step 4
/devils-advocate: 0 CRITICAL / 3 HIGH / 5 MEDIUM / 3 LOW — allfolded into the phases above (whole-tree fleet-name sweep + standing gate; concern-named
config folder from day one; resolution-ladder pointer/fetch/terminal-default mechanics;
argument surface + headless defaults + non-interactive eval; schema-versioned binding;
description scoped to shipped capability; standards pre-flight + drift trigger + plugin-first
merge ordering). Residuals accepted: vendor deny-list completeness pairs with review;
cross-repo drift recheck is trigger-based (deferred-with-trigger: mechanical cross-repo check
when a second binding consumer exists); bare word "standards" ungrepable — org-qualified
token + review covers it.
Execution shape
Fully sequential 1 → 2 → 3 → 4 → 5 → 6 — Phase 2's marketplace entry needs Phase 1's category;
Phase 4 cites Phase 3's binding shape; Phase 5 gates the authored tree; Phase 6 waits on the
plugin PR merge. Parallel saving immaterial (small doc volume).
Open questions
None blocking. Deferred with triggers:
docs/conventions/autonomy/versioned config contract(trigger: second plugin consumes
.claude/autonomy/); mechanical cross-repo drift check(trigger: second binding consumer); per-capability wiring depth (WP2–WP6 Briefs, per Brief).
Handoff to implementation
User-approval gates
validate-plugin-contracts.mjsedit adds a standing CI gate — flagged[EXEC-SHAPE]; surface before landing if scope beyond
plugins/autonomy/**is proposed.mismatch), STOP and re-surface placement rather than improvising a location.
/architect review.Execution shape ([EXEC-SHAPE] tagged)
Sequential, all main-session (table above). Decisions made under the confidence gate:
reference/ as contract-doc home (10 in-repo precedents + reference-vs-context semantic split);
concern-named
.claude/autonomy/(extensibility-contract rationale: plugin boundaries are thevolatile axis); full vendor+fleet name ban in reference/ with tool-specific details in
SKILL.md/README (Brief tool-agnostic constraint); description scoped to shipped capability
(Boris no-step-skipping); schema-versioned binding (version-pinning rules + standards-contract
precedent); two-PR split with plugin-first ordering (dead-link avoidance).
Mechanical work
Commit per phase on the implementation branch (suggest
feat/autonomy-plugin); PLAN.md phasetags advance
[TODO]→[DOING]→[DONE]in the same commit as the phase; gates re-run atPhase 5 even if run earlier; no commits without the repo's commit conventions.