docs(openspec): the process lives in config.yaml (verbara-meta/ADR-0023) - #298
Merged
Merged
Conversation
`rules.tasks` ordered "Use Subagent-Driven Development with FCM batching", naming a skill of a third-party plugin that is NOT installed in the active Claude config. It reached the agent verbatim (the `<rules>` block of `openspec instructions tasks`) and could not be carried out; "FCM" was never defined anywhere an agent reads (twice, incompatibly, in tracked plans). - `rules.tasks`: replace that entry with two rules of our own, naming no external skill — three-phase execution (A foundation batched, B critical components one focused subagent each, C integration batched) with a fresh subagent per task, and the tests-first rule for bug fixes. - `context:`: append the ecosystem's verification gate as a hard constraint. It was travelling on `operations.apply.guidance`, which `/opsx:apply` itself labels "optional additive advice... do not follow it"; `context:` is delivered verbatim to propose, apply AND archive. - docs/specs/2026-03-31-v121-operations-design.md: reframe the "REQUIRED SUB-SKILL" banner as history, not instruction — the shape Pro's 2026-03-20-pro-agent-assist-design.md already uses. No live tracked file in this repo cites the plugin namespace any more (sweep rc=1, clean). - .gitignore: add `docs/superpowers/` (the uniform six-repo contract). Historical prose is untouched: docs/plans, docs/research, docs/decisions, CHANGELOG.md and openspec/changes/archive keep their period-correct records. Verification, run on this integrated branch (not only the touched files): - YAML parse: keys [schema, context, rules, operations], rules.tasks = 4 entries. `openspec validate` does NOT read config.yaml, so a broken YAML would have merged green. - `openspec instructions tasks --change wire-api-rate-limiting`: both new rules present in `<rules>`, the gate present in `<project_context>`. - ADR-0023 ratchet (/xr:doctor check 21): rules.tasks FCM / "Subagent-Driven Development" = no; context: carries ci.yml + "integrated branch" = yes -> PASS. - ci.yml fast, deterministic, non-service steps: * OpenSpec Validate (strict): 30 passed, 0 failed (30 items) * Invariant Gates (scripts/check-endpoint-invariants.py): gates 6/9/7/10/11 OK * Coverage Script Tests (python3 -m unittest discover scripts/tests): 82 OK Build+Unit/Coverage/AOT/Live-DB were not run locally: they need the private Pro feed and a live Postgres, and CI skips them on this docs-only diff via the Docs-only gate.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The measurement that justifies this
openspec/config.yamlordered, inrules.tasks:That line reached the agent verbatim, inside the
<rules>block ofopenspec instructions tasks. It names a skill of a third-party process plugin that is not installed in the active Claude config — an instruction that cannot be carried out. An agent that cannot comply either improvises or silently skips, and both look identical in a green PR. "FCM" was never defined anywhere an agent reads; it is defined twice, incompatibly, in tracked plans (Pro .../2026-03-19-sprint17-pro-analytics.md:13= Foundation-Critical-Mechanical,Platform docs/plans/completed/2026-04-26-r5.3-execution-plan.md:7= Foreground-Coordinator + Multiple-background-subagents).Separately, the ecosystem's § Verification gate (run this repo's own
ci.ymlfast steps on the integrated branch before committing) travelled only onoperations.apply.guidance— the channel/opsx:applyitself labels "optional additive advice… do not follow it". The strongest rule in the ecosystem was on the weakest wire.Rollout of verbara-meta/ADR-0023 — The process lives in
openspec/config.yaml; no third-party process plugin. Same-shaped PR in all five code repos.Before / after
rules.tasks— one entry replaced by two, naming no external skill:The second rule settles an inconsistency that is ours, not the plugin's: of the open changes, four are tests-first and three are tests-last, with no rule saying which is right.
context:— the § Verification gate appended as a hard constraint, becausecontext:is the one channel delivered verbatim to propose and apply and archive:docs/specs/2026-03-31-v121-operations-design.md:3— theREQUIRED SUB-SKILLbanner reframed as history, not instruction, in the shapeVerbara.Sdk.Pro/docs/specs/2026-03-20-pro-agent-assist-design.md:6-8already uses for its superseded storage mechanism. The dated record is preserved; only the live order is retired. After this, no live tracked file in this repo cites the plugin namespace (sweep below)..gitignore—docs/superpowers/added next to the existing.superpowers/and.worktrees/, completing the uniform six-repo contract.Historical prose is untouched:
docs/plans/,docs/research/,docs/decisions/,CHANGELOG.mdandopenspec/changes/archive/keep their period-correct records (Verbara.Sdk.Pro/openspec/specs/docs-path-hygiene/spec.md:48-49is the live spec that requires this). The one opentasks.mdthat still carries the old banner (promote-community-smoke-to-gating) dies by archiving, not by rewrite — ADR-0023 "What this does not fix".Ratchet conditions satisfied (
/xr:doctorcheck 21,no-process-plugin)Run with the check's own probe:
Part (a) of the check (live tracked citations) also flips to PASS — it was WARNing on one file.
Verification
openspec validatedoes not readconfig.yaml: a broken YAML is discarded silently and merges green. So the config is parsed, and the rules are proven to reach the agent.This repo's own
ci.ymlfast, deterministic, non-service steps, run on the integrated branch:Note on the last one: the classifier is fail-closed on top-level non-
.mdpaths, so touching.gitignoremakes this diffdocs_only=falseand the heavy jobs (Build + Unit Tests, Coverage Ratchet, AOT Publish, Live-DB) will run here in full. That is correct behaviour, not a regression — and none of the three changed files enters compilation. Those jobs were not reproduced locally: they need the private Pro NuGet feed plus a live Postgres service container, i.e. exactly the service steps the gate excludes.🤖 Generated with Claude Code