docs(openspec): retire the FCM rule, land the verification gate (verbara-meta/ADR-0023) - #111
Merged
Merged
Conversation
…ara-meta/ADR-0023) `rules.tasks` ordered "Use Subagent-Driven Development with FCM batching where the change is non-trivial." That reached the agent verbatim in `openspec instructions tasks` and named a skill of a third-party plugin that is NOT installed in the active Claude config — an instruction no session could carry out. "FCM" was never defined anywhere an agent reads (twice, incompatibly, in tracked plans of other repos). Replaced by two rules of our own, naming no external skill: the three-phase ordering (A foundation batched -> B critical components, one focused subagent each -> C integration batched, a fresh subagent per task, "where the change is non-trivial" — this repo's variant), and the test-ordering rule that settles a real inconsistency of our own (failing regression test first for a bug fix; tests may batch into Phase C for new capability). Separately, the ecosystem's verification gate travelled on `operations.apply.guidance`, which `/opsx:apply` itself calls "optional additive advice... do not follow it". It moves to `context:`, the one channel 1.13.1 delivers verbatim to propose, apply AND archive. Appended as a bullet under the existing `Constraints:` list — this repo has no `Hard constraints` block, and inventing one just to match the other four would have been noise. Ratchet (/xr:doctor check 21 `no-process-plugin`): `rules.tasks` now contains 0 occurrences of "FCM" and 0 of "Subagent-Driven Development"; `context:` contains both "ci.yml" and "integrated branch". Verified on this branch: - YAML parse: keys ['schema', 'context', 'rules', 'operations'], rules.tasks 4 -> 5 entries. `openspec validate` never reads config.yaml, so a broken YAML would have merged green. - `openspec instructions tasks --change zz-verify-rules` (throwaway, removed; git clean): both new rules at <rules> lines 37-38, the gate inside <project_context>; also confirmed in `instructions apply`. 0 hits for FCM / Subagent-Driven Development. - ci.yml fast steps, all green: npm run check (0 errors, 85 files), npm run lint, npm run test:i18n (476 keys x 3 locales), npm run validate:digests (56 refs — authorized-digests.json untouched), npm test (92 passed), npm run build (36 pages), npm run validate:html (0 errors), scripts/tests/test_classify_docs_only.sh (37 passed), python3 -m unittest discover scripts/tests (32 passed), openspec validate --all --strict --no-interactive (rc=0, "No items found" — no specs yet). No .gitignore change needed (docs/superpowers/, .superpowers/, .worktrees/ already covered) and no live tracked file cites the `superpowers:` namespace outside historical prose, which ADR-0023 protects.
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
verbara-website | b60ef12 | Commit Preview URL Branch Preview URL |
Sep 20 2026, 10:16 PM |
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.
Rolls verbara-meta ADR-0023 — The process lives in
openspec/config.yaml; no third-partyprocess plugin — into this repo. Same-shaped PR across the five code repos (verbara-meta/ADR-0006).
The measurement that justifies it
rules.tasksordered:That line reached the agent verbatim — it is emitted inside
<rules>byopenspec instructions tasks— and it names a skill of a third-party plugin that is not installed in the active Claudeconfig. Every session was being handed an instruction it could not carry out; an agent that cannot
comply either improvises or silently skips, and both look identical in a green PR. "FCM" made it
worse: the ecosystem never defined the acronym anywhere an agent reads (it is defined twice,
incompatibly, in tracked plans of two other repos, and zero times in the plugin the rule named).
Separately, the ecosystem's § Verification gate — run this repo's own
ci.ymlfast steps on theintegrated branch before committing — reached agents only through
operations.apply.guidance,which
/opsx:applyitself labels "optional additive advice… do not follow it". The strongest rulein the ecosystem was travelling on the weakest wire.
context:is the one channel the pinned 1.13.1CLI delivers verbatim to propose and apply and archive.
Before / after
rules.tasks— one entry out, two in (4 → 5 entries):The second rule is not imported discipline — it settles an inconsistency that is ours: across the
ecosystem's open changes, four are tests-first and three are tests-last, with no rule saying which is
right.
context:— the gate appended as a third bullet under the existingConstraints:list:Repo-specific shaping, deliberate: unlike the other four repos this
context:has noHard constraints (non-negotiable):heading — it is a plainConstraints:bullet list. The gatejoins that list in its own style rather than importing a heading that would read as noise here. The
rules.tasksreplacement keeps this repo's "where the change is non-trivial" flavour instead ofthe other repos' "never inline in the main session".
Ratchet conditions satisfied
/xr:doctorcheck 21 (no-process-plugin) WARNs unless both hold. Measured on this branch:rules.taskscontains noFCMrules.taskscontains noSubagent-Driven Developmentcontext:containsci.ymlcontext:containsintegrated branchgrep -n 'FCM\|Subagent-Driven Development' openspec/config.yaml→ rc=1 (no match). "A freshsubagent per task" carries the meaning without the banned phrase.
Verification
YAML parse —
openspec validatedoes not readconfig.yaml, so a broken YAML would mergegreen. Parsed explicitly:
The rules actually reach the agent — this repo has no open change, so a throwaway
(
openspec new change zz-verify-rules --json) was used and then removed (git statusclean):Zero hits for
FCM/Subagent-Driven Developmentin that output.instructions applycarries thegate too (line 25) — which is the whole point of moving it from
guidancetocontext.This repo's own
ci.ymlfast steps, on the integrated branch, all green:npm run checknpm run lintnpm run test:i18nnpm run validate:digestsnpm testnpm run buildnpm run validate:htmllong-titlewarnings)bash scripts/tests/test_classify_docs_only.shpython3 -m unittest discover scripts/testsopenspec validate --all --strict --no-interactivescripts/ci/classify-docs-only.shon this commitdocs_only=true—coverage/e2e/lighthouseskip as designedNot touched, on purpose
data/authorized-digests.json— security-critical and release-owned by/xr:release.docs/plans/,docs/specs/,docs/decisions/,CHANGELOG.md. The sixdocs/plans/completed/files that citesuperpowers:subagent-driven-developmentareperiod-correct records — evidence, not instructions. No live tracked file cites the
superpowers:namespace, so check 21 already passes on that clause here..gitignore—docs/superpowers/,.superpowers/and.worktrees/are all already covered;this repo had no gap to close.
CHANGELOG.md [Unreleased]— n/a, this PR is typeddocs.🤖 Generated with Claude Code