FCC Peer SOP Alignment — the spine FCC does not yet run on itself¶
What this is. A Find. It measures what five mature peers converged on as a governance/SOP spine, quotes the doctrines they wrote it in, and states — precisely and without softening — what this project has instead. It is also the durable replacement for a memory the 2026-09-03 crash destroyed and
BACKLOG.md:122still cites.
0. The finding that frames everything below¶
paom/STRATEGIC_ARCHITECTURE_REVIEW.md:5, verbatim:
Canonical authority for the FCC Framework and R.I.S.C.E.A.R. specification resides in the
l2_fcc_agent_team_extproject at/mnt/d/VirtualDataRoom/TechnologyArchitecture/Ideate/crucible/L2/l2_fcc_agent_team_ext. PAOM is a reference consumer.
And l2_fcc_agent_team_ext/ROADMAP.md:13, this project's own claim:
This project is the canonical authority for the FCC (Find → Create → Critique) framework and the R.I.S.C.E.A.R. specification. All other projects (including PAOM) are consumers, not authorities.
Measured against the filesystem on 2026-09-04:
| Directory | Files |
|---|---|
docs/fcc/research/ |
0 |
docs/fcc/blueprints/ |
0 |
docs/fcc/charters/ |
0 |
docs/fcc/critiques/ |
0 |
docs/fcc/design/ |
0 |
docs/fcc/handoffs/ |
0 |
docs/fcc/governance/ |
0 |
docs/vision/ |
0 |
The seven directories exist. They are empty — not sparsely populated, empty. This project
ships a Research Crafter persona whose declared output is a Find artifact and a
Blueprint Crafter whose declared output is a Create artifact
(constel_ext/CLAUDE.md:178-179 names both against this framework's own workflow table),
and it has nowhere on disk that either persona's output has ever been filed.
The asymmetry is not "FCC is behind." It is that the authority for a process is the only node in the mesh not running it. Every one of the five consumers below filed hundreds of artifacts against the spine FCC defines.
1. The spine — who has what¶
The declared hierarchy, stated most cleanly by AOME
(aome_ext/STRATEGIC_ARCHITECTURE_REVIEW.md:20-30, verbatim):
docs/vision/AOME_NORTHSTAR.md the vision — why AOME exists, where it is going
↓
STRATEGIC_ARCHITECTURE_REVIEW.md ← you are here: the architecture, and this train's delta
↓
ROADMAP.md the plan for the current release
↓
docs/fcc/{research,blueprints,reviews,handoffs}/ per-phase evidence
And AOME's one-line diagnosis of why the middle of that chain rots
(aome_ext/docs/fcc/research/AOME_PROCESS_GOLD_STANDARD_RESEARCH.md:47-49, verbatim):
The documents that carry RECORD are current. The documents that carry INTENT are stale.
1.1 Spine presence, measured¶
| Element | AOME | CTO | CONSTEL | RC/NEXUS | PAOM | FCC |
|---|---|---|---|---|---|---|
docs/vision/<CODE>_NORTHSTAR.md |
✅ AOME_NORTHSTAR.md |
❌ (vision lives in memory/northstar_vision.md, outside docs/) |
✅ CONSTEL_NORTHSTAR.md |
✅ NEXUS_NORTHSTAR.md |
✅ SENTINEL_NORTHSTAR.md |
❌ empty dir |
STRATEGIC_ARCHITECTURE_REVIEW.md |
✅ root | ✅ root | ✅ root + docs/strategy/ mirror |
✅ docs/ |
✅ root | ✅ root (stale — §8) |
ROADMAP.md |
✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
docs/STATE.md |
✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
docs/fcc/charters/ |
4 | ❌ | 3 (2 charters + index) | 3 | ❌ (charter-shaped rules live in docs/fcc/governance/, 13 files) |
0 |
docs/fcc/research/ |
342 | 21 | 285 | 102 | 77 | 0 |
docs/fcc/blueprints/ |
205 | 10 | 186 | 47 | 39 | 0 |
docs/fcc/design/ |
10 | ❌ | 21 | ❌ | 1 | 0 |
docs/fcc/critiques/ or reviews/ |
154 (reviews) | 3 + 3 | 35 + 4 | 8 + 6 | 34 (reviews) | 0 |
docs/fcc/handoffs/ |
77 | 1 | 5 | 1 | 30 | 0 |
docs/uat/v<X.Y.Z>/ dirs |
92 | 72 | 70 | 55 | 39 | 4 |
| Release ledger | docs/process/FAILURE_GATE_LEDGER.md |
docs/process/IMPROVEMENT_REGISTER.md |
docs/governance/gold-cycle-receipts/ |
docs/uat/RELEASE_LEDGER.md |
docs/fcc/research/FINDINGS_LEDGER.md |
❌ |
Honest negatives, first-class. CTO has no docs/vision/ northstar and no
docs/fcc/charters/ — its vision sits in memory/northstar_vision.md and its SAR is a
banner stack (cto/STRATEGIC_ARCHITECTURE_REVIEW.md:3-11, one blockquote per cut, newest
first), which is a different and arguably weaker answer to the same problem. PAOM has no
charters directory either; its equivalent binding artifact is
docs/fcc/governance/PAOM_RELEASE_TRAIN_SOP.md plus a sar-check Makefile target. So
"everyone has a Train Charter" is false — three of five do (AOME, CONSTEL, RC), and it
is the three that have it who describe it as the load-bearing piece.
1.2 What FCC does have¶
FCC's UAT lane is real and is the one part of the spine it already runs.
docs/uat/ holds POST_RELEASE_PATCH_PATTERN.md, RETENTION.md, UAT_CRITERIA.md, and
four release dirs (v1.10.0, v2.0.1, v2.1.1, v2.2.0). docs/uat/v2.2.0/ carries
verdict.md, probe_pass/, responsiveness.json, manual_uat_handoff.md — the same
shape as research_center_ext/docs/uat/v8.4.1/ (verdict.md, findings.md,
automated_run/, responsiveness.json, perf_delta.json, screenshots/). FCC is missing
findings.md and the roll-up ledger, not the lane.
FCC also has 18 ADRs (docs/decisions/ADR-001…ADR-018) — more than most peers had when
they built their spine. The ADRs exist without the R→B chain that is supposed to produce
them. That is §2.
2. The R→B→ADR spine and FCC Rules 11–14¶
2.1 The rules, verbatim¶
The canonical text is constel_ext/CLAUDE.md:120-144, under the heading "FCC Process
(Hard Enforcement)" with the preamble:
The FCC (Find -> Create -> Critique) lifecycle governs ALL non-trivial work. These rules are inviolable — equivalent to Constitution Rules above.
Verbatim, constel_ext/CLAUDE.md:126-144:
- No Implementation Without Blueprint — Code changes to
src/constel/that add new modules, stages, or integrations MUST have a corresponding blueprint indocs/fcc/.- No Blueprint Without Research — Blueprints MUST reference a research inventory or capability matrix from the Find phase.
- Critique Before Merge — All FCC artifacts (research, blueprints, guides, runbooks) MUST pass
/scaffold-doc-reviewquality gates before merge to main. 13a. ⭐ NO BLUEPRINT WITHOUT JOURNEY STREAMS (operator-approved 2026-08-26) — a blueprint for a user-facing capability MUST be preceded by an AX + UX journey-stream design indocs/fcc/design/, and the blueprint must trace to it. The streams are the design driver (EVOLVED_WORKFLOW.md§3.7 element 3: "design precedes build").- Capability Traceability — Every FCC artifact MUST include metadata (title, date, author) and capability tags linking back to research.
Rule 13a carries its own instance, which is the house style and the reason the rule is
credible (constel_ext/CLAUDE.md:136-142, verbatim):
⚠️ Why this rule exists: the four-phase table folded Design into Create and named only
/fcc-blueprint, while the repository holds 20 design documents, 9 of them stream docs, against 184 blueprints. The declared process did not describe what the project does, so "follow the SOP" was a judgement call exactly where it should have been a gate. Found 2026-08-26 when the operator asked whether the streams had been resolved with the blueprint — they had not, because no blueprint existed.
2.2 Gate A — no src/ before the ADR is accepted¶
"Gate A" is CONSTEL's name for Rule 11's enforcement point. Two verbatim instances:
constel_ext/docs/architecture/adr-034-rt20-pi2-ecosystem-depth.md:38:
This ADR satisfies FCC Rule 11 (Gate A — no
src/code before this is accepted).
constel_ext/docs/architecture/adr-034-rt20-pi2-ecosystem-depth.md:183-185:
- Rule 11: This ADR exists before any
src/constel/api/v1/portal_components.pycode.- Rule 12: R-211 (
RT20_PI2_ECOSYSTEM_DEPTH_RESEARCH.md) precedes B-211 and this ADR.- Rule 14: Capability tags present; linked to R-211 research.
constel_ext/docs/architecture/adr-024-mesh-pi3-train-close-…md:259-265 gives the full
four-rule closure block, verbatim:
- Rule 11 — No Implementation Without Blueprint: B-206 authored before
- Rule 12 — No Blueprint Without Research: R-206 authored before
- Rule 13 — Critique Before Merge: §"Gate-C critique plan" in B-206
- Rule 14 — Capability Traceability: R-206 / B-206 / ADR-024 all
Gates A/B/C appear in CONSTEL's ship narrative as a triple with a numeric verdict —
constel_ext/CLAUDE.md:23, verbatim: "FCC delta spine R-202→B-202→ADR-020
authored + Gate A/B validated before any src/ code (Rules 11/12/14; validators 0/0/0)."
The 0/0/0 is three validator scripts each returning zero issues:
validate_fcc_metadata.py, validate_partner_approvals.py, validate_snapshot_id.py
(constel_ext/Makefile:525-529, target validate-fcc).
2.3 The R-NNN / B-NNN / ADR-NNN numbering, precisely¶
Source of record: constel_ext/docs/fcc/FCC_BACKLOG.md — front matter
title: "CONSTEL FCC Backlog", phase: Ops, status: Active, with the body line "Structured
backlog mapping all outstanding work by FCC phase."
The scheme, as observed across ~40 instances:
| Prefix | Phase | Meaning |
|---|---|---|
R-NNN |
Find | one research artifact — the inventory / capability matrix / gap analysis |
B-NNN |
Create and Build | the blueprint and, at a different number, its implementation |
Q-NNN |
Critique | a standing quality obligation |
ADR-NNN |
ratification | the decision the blueprint's open questions resolve into |
The backlog is a table with columns ID | Title | Phase | Upstream | Downstream | Status |
Effort, and the chain is expressed in the Upstream/Downstream cells, not in prose.
Verbatim rows (constel_ext/docs/fcc/FCC_BACKLOG.md:36-40):
| R-002 | Encoder stage research | Find | Pipeline architecture | B-003 | Complete | 8h | | B-003 | Encoder stage blueprint | Create | R-002 | B-004 | Complete | 12h | | B-004 | Encoder stage implementation | Build | B-003 | B-027, B-001 | Complete | 20h | | R-005 | Agent stage research | Find | Pipeline architecture | B-006 | Complete | 8h | | B-006 | Agent stage blueprint | Create | R-005 | B-007 | Complete | 12h | | B-007 | Agent stage implementation | Build | B-006 | B-009 | Complete | 20h |
Three properties worth adopting exactly:
- The Find and the Create carry different numbers.
R-002 → B-003, notR-002 → B-002. The chain is expressed by the Upstream/Downstream columns, so a number is never overloaded. - Build is a separate row from Create.
B-003(blueprint) andB-004(implementation) are distinct backlog items with distinct efforts, which is what makes "no implementation without blueprint" a countable claim rather than a slogan. - The ADR number is independent.
R-202 → B-202 → ADR-020;R-206 → B-206 → ADR-024;R-211 → B-211 → ADR-034. The R/B pair shares a number in the delta spine (the per-PI trains, R-201..R-211), while the ADR runs on the repository's own ADR sequence. The pairing in the 2xx band is a train convention; the 0xx band (R-002/B-003) is not paired. This is the one place the scheme is not uniform, and CONSTEL never wrote the rule down — seecould_not_establish(4).
Every closed row carries a strikethrough summary and the code path that discharges it, e.g.
(constel_ext/docs/fcc/FCC_BACKLOG.md:57-59, verbatim):
R-002/B-003/B-004: ~~Encoder pipeline stage -- embedding generation for semantic search.~~ Complete --
src/constel/pipeline/encoder.pywith ChromaDB vector store, 19 tests intests/test_pipeline/test_encoder.py.
2.4 Phase detection — the table that removes the judgement call¶
constel_ext/CLAUDE.md:148-158 makes the phase a lookup rather than a decision. Verbatim
rows:
| Exploring a new area, gap analysis, inventory | Find | Run
/fcc-research| | ⭐ Defining the JOURNEYS a build must satisfy — AX + UX streams | ⭐ Design | Authordocs/fcc/design/*_streams.mdBEFORE the blueprint. ⚠️ The streams GATE the blueprint | | Designing architecture, specs, data models | Create | Run/fcc-blueprint(requires research input and the Design streams) | | Building from a blueprint | Build | Run/scaffold-solution(requires blueprint input) | | Reviewing docs, validating quality | Critique | Run/fcc-critique|
Note the persona column in the companion table (constel_ext/CLAUDE.md:176-183): Find →
Research Crafter, Create → Blueprint Crafter, Critique → Documentation Evangelist.
Those are FCC's own personas, used by a consumer, against directories FCC does not populate.
3. The Train Charter — the artifact that binds train → northstar → SAR → roadmap¶
3.1 Where it came from¶
AOME invented it, in a Find written at the operator's prompt. The prompt is quoted in the
artifact itself (aome_ext/docs/fcc/research/AOME_PROCESS_GOLD_STANDARD_RESEARCH.md:21-24,
verbatim):
"we seem to be getting lost in the weeds over time… we have evolved our process to use FCC with Fable and journey streams… but we really have not updated our full process. Is it gate enforced? Harness used? Guardrail protected?"
The measurement that followed (same file, :33-38), verbatim table rows:
|
STRATEGIC_ARCHITECTURE_REVIEW.md| architecture per train | 497 | 2026-07-04 | v8/v9/v10/v11 mentioned ZERO times | |ROADMAP.md| this release | 92 | 2026-08-03 | 4 ARCs, all v8/v10-era; 0 hits for v12/Energy |
and the diagnosis (:71-73), verbatim:
Everything gates output. Nothing gates intent. A train can ship with a green receipt, 97% coverage and a converged 6-round critique while the architecture document still describes v4.x — and every gate stays green, because no gate is looking.
Two structural reasons the closing minor could not fix it (:77-87), verbatim:
It runs last. Intent drift is created at the start of a train … A gate at the end can only observe the damage; by then the train is built, and the cheapest possible moment to state the architectural change has passed by weeks.
It checks stamps, not content. … A stamp check is structurally blind to the thing we need caught.
3.2 The front-matter schema — AOME's original¶
Proposed at AOME_PROCESS_GOLD_STANDARD_RESEARCH.md:112-119; the implemented contract is
aome_ext/src/aome/uat/charter.py. The authoritative required-field statement is
charter_problems' docstring (src/aome/uat/charter.py:162-165), verbatim:
A valid charter carries
fcc_stage: Charter; a bare-SemVertrain; anaxisin :data:VALID_AXES; non-emptynorthstar_ref,roadmap_arc,sar_deltaandimpl_anchor; a non-emptyexit_criterialist; and anoperator_ackwitness.
with the module constants (src/aome/uat/charter.py:36-57), verbatim:
CHARTER_DIR = "docs/fcc/charters"
CHARTER_GLOB = "AOME_TRAIN_CHARTER_v*.md"
NO_ARCH_CHANGE = "no architectural change"
VALID_AXES = frozenset({"vertical", "application"})
CHARTER_REQUIRED_FROM: tuple[int, int, int] = (11, 4, 0)
REQUIRED_SCALARS: tuple[str, ...] = ("northstar_ref", "roadmap_arc", "sar_delta", "impl_anchor")
| Field | Content | Source |
|---|---|---|
fcc_stage |
must be the literal Charter |
charter.py:180 |
train |
bare SemVer — v-prefix rejected |
charter.py:186-187 |
axis |
vertical | application |
charter.py:44 |
northstar_ref |
which north-star capability this train advances | charter.py:57 |
roadmap_arc |
the arc this train belongs to, and the next planned major | charter.py:57 |
sar_delta |
the architectural change — or the literal words no architectural change |
charter.py:39-42 |
impl_anchor |
the file whose adding-commit the charter must precede | charter.py:57 |
exit_criteria |
list; "what done means, in terms a gate can read" | charter.py:164 |
operator_ack |
witness token | charter.py:164 |
The design note about sar_delta never being empty — the single most quotable line in
the whole corpus (aome_ext/src/aome/uat/charter.py:166-168), verbatim:
sar_deltamay not be blank. The explicit words "no architectural change" are a decision; an empty string is an omission; and if the gate could not tell them apart, every train could dodge the SAR requirement by leaving the field empty.
Restated as an executable assertion in the negative-case test
(aome_ext/tests/charter/test_train_charter_gate.py, the blanked/declared block),
verbatim comment:
★ THE DISTINCTION THE WHOLE INSTRUMENT EXISTS FOR — an empty sar_delta is an OMISSION and must be rejected; the explicit words are a DECISION and must be accepted. If the gate could not tell them apart, every train could dodge the SAR by leaving it blank.
And the operator decision that made it policy (aome_ext/memory/process-gold-standard-decisions-2026-08-11.md),
verbatim:
The SAR is updated in the train that changes the architecture, before the first implementation commit — a train that changes nothing says so in one line. "No change to record" and "nobody recorded a change" must stay distinguishable.
3.3 RC's extension — design_package, and hash-don't-stamp¶
RC adopted the charter and extended it. research_center_ext/docs/operations/RELEASE_TRAIN_WORKFLOW.md:32-33,
verbatim:
docs/fcc/charters/NEXUS_TRAIN_CHARTER_v<X.Y.Z>.md, adopted from AOME's gold standard rather than re-invented. Created before the first implementation commit, withstatus: open.
and :35-38, verbatim:
Its frontmatter is the gate's input and must be structured data, never prose:
status,version_line,train_versions,range_base,roadmap_versions,sar_delta_present,journeys(the declared id set),design_package(rows of{path, verdict, sha256}), andoperator_ack. The body table is for humans; the gate never reads it.
The reason that sentence exists is written into the charter itself
(research_center_ext/docs/fcc/charters/NEXUS_TRAIN_CHARTER_v8.4.1.md:7-11), verbatim:
─── Gate inputs. STRUCTURED DATA, never prose. ──────────────────────────────── The gate reads only the fields below. An earlier draft asserted it read "machine-readable charter fields" while design_package, roadmap_versions and the journey ids lived as narrative inside a markdown table cell — an implementer would have had to regex prose or invent a schema, and whatever they invented would have become the de-facto standard for every future charter.
The design_package block, verbatim (NEXUS_TRAIN_CHARTER_v8.4.1.md:41-52):
design_package: # verdict is a BARE ENUM compared by EQUALITY: PENDING | CONVERGED.
# ⚠️ Never a substring test — "CONVERGED" is a substring of
# "NOT CONVERGED", so the obvious implementation passes on the
# un-converged state. Prose belongs in verdict_note, never in verdict.
- path: docs/fcc/journeys/NEXUS_RC_MP_24_JOURNEY_STREAMS.md
verdict: CONVERGED
sha256: 13568e80ea9246501d03505f678807698b48ff445a17b8ef8e11a40b1a115e09
- path: docs/fcc/blueprints/NEXUS_RC_MP_24_PATCH_BLUEPRINT.md
verdict: CONVERGED
sha256: 0f2b53326d1c5c9a2f1b3e756a86005cb2179e96f9bf406ebf2c0207ee6763c7
- path: docs/fcc/research/NEXUS_INTENT_LINEAGE_RESEARCH.md
verdict: CONVERGED
sha256: a8711eed94181287ba72ad85e53b7e25aa9541b028b366323bfea4945b288930
The gate's own summary of what it checks
(research_center_ext/scripts/check_train_charter.py:13-17), verbatim:
(1) design before code — src/ touched ⇒ every design_package path in HEAD's tree, verdict == CONVERGED (EQUALITY), sha256 matching (2) train resolution — exactly one charter with `status: open` (3) architecture — sar_delta_present ⇒ the SAR changed in range_base..HEAD (4) roadmap — __version__'s line is in roadmap_versions, and a later one named
⭐ The resolver decision is RC's most transferable finding
(check_train_charter.py:29-33), verbatim:
It resolves the train by
status: open, NEVER by__version__. The version bump lands at the END of a train's cycle, so for the whole code phase__version__names the PREVIOUS train. Keying on it meant the next train's code would resolve the previous train's charter, find it converged, and go green with no design in existence — the exact failure this gate prevents, on the default path of RC's own SOP.
And its scope discipline (check_train_charter.py:22-26), verbatim:
It checks HEAD's TREE, not each historical commit's tree. The rule is "you may not land code without a converged design", not "no commit in history ever lacked one" — which is archaeology.
3.4 CONSTEL's variant¶
CONSTEL's charter (constel_ext/docs/fcc/charters/CONSTEL_TRAIN_CHARTER_v28.22.0.md:1-16)
uses a different, prose-heavy front matter — title, date, author, phase: Create,
status, research_source, prior_art, capability_tags — and encodes the ordering claim
inside status, verbatim:
Committed BEFORE the first implementation commit, per AOME §5.2 ancestor-proof — the gate cannot be back-filled.
Its prior_art field names AOME's Find explicitly as the pattern source, and the body opens,
verbatim (:19-22):
Adopted, not invented here. The journey-stream pattern is CTO's and AOME's, and the four-harvest principle is already CONSTEL's own … This charter consumes all three.
That is the house style, stated in one sentence. See §9.
4. Front-matter contracts per stage¶
4.1 What each project requires¶
| Project | Scope | Required | Recommended / conditional | Enforcer |
|---|---|---|---|---|
| AOME — charters | docs/fcc/charters/AOME_TRAIN_CHARTER_v*.md |
fcc_stage: Charter, train (bare SemVer), axis, northstar_ref, roadmap_arc, sar_delta (non-blank), impl_anchor, exit_criteria[], operator_ack |
operator_ack_provenance (used, not gated) |
tests/charter/test_train_charter_gate.py |
| AOME — all FCC docs | docs/fcc/** |
title, phase, fcc_stage, persona, participants[], date, status (observed schema; naming is what is gated) |
— | tests/test_docs_fcc_naming.py |
| CONSTEL | 10 dirs incl. research, design, blueprints, architecture, audit, critiques, guides, tutorials, patents |
title, date, author |
phase, status, version (verbose mode); prior_art for research dated ≥ 2026-08-12 |
scripts/validate_fcc_metadata.py |
| RC/NEXUS | Finds dated ≥ 2026-08-29 |
provenance.date; ≥1 source list; retrieval date on every web source; provenance.could_not_establish[] or a "could not be established" heading |
— | scripts/check_research_provenance.py, make research-provenance-check |
| PAOM | typed by filename suffix | per type — see below | updated; status ∈ 5-value enum |
scripts/validate_fcc_metadata.py |
4.2 PAOM's REQUIRED_FIELDS validator — verbatim¶
paom/scripts/validate_fcc_metadata.py:72-81:
REQUIRED_FIELDS = {
'research': ['title', 'type', 'status', 'created'],
'blueprint': ['title', 'type', 'status', 'created', 'version'],
'review': ['title', 'type', 'status', 'created'],
'runbook': ['title', 'type', 'status', 'created', 'owner'],
'handoff': ['title', 'type', 'status', 'created'],
'certification': ['title', 'type', 'status', 'created'],
}
VALID_STATUSES = ['draft', 'in-review', 'approved', 'published', 'deprecated']
The document type is derived from the filename suffix (get_document_type,
:52-69 — _RESEARCH.md, _BLUEPRINT.md, _REVIEW.md, _RUNBOOK.md, _HANDOFF.md,
_CERT.md) and a mismatch between type: in front matter and the suffix is a warning,
not an error (:105-107). This is the tightest binding of naming to schema in the mesh:
the filename decides which fields are mandatory.
PAOM's prose contract, from PAOM_DOCUMENTATION_SOP.md:39-41, verbatim:
Research artifacts carry frontmatter:
title · phase · fcc_stage · persona · participants · date · status · provenance.provenanceis not decoration — it is how a reader knows whether a number was measured or cited.
4.3 RC's provenance: block — verbatim contract¶
research_center_ext/scripts/check_research_provenance.py:1-15:
A Find written on or after 2026-08-29 (the day the evolved workflow was adopted) must carry a
provenance:block that says WHERE its claims came from and WHAT could not be established:
provenance.date— when the reading was done (a reading has a timestamp; a claim does not);- at least one source list —
files_read/inputs/sources/web_sources/commands_run— naming what was read or run;- every web source with a retrieval date (the word
retrievedor an ISO date beside the URL);provenance.could_not_establish(a list) or a body heading containing "could not be established" — the honest bound, stated rather than discovered afterwards.
The SOP's justification (RELEASE_TRAIN_WORKFLOW.md:80-96), verbatim:
⭐ The shared property: none of it is re-derivable from the repository. A test can be re-run, a partner re-queried. These cannot. If the provenance is not captured at the moment of the finding, it is unverifiable forever — and the claim will still be quoted, because a recommendation outlives its evidence.
…
⭐ The failure mode is one step earlier in the chain than the rest of this document's lessons: a claim whose provenance is gone is indistinguishable from a claim that was never checked.
4.4 CONSTEL's prior_art: obligation¶
constel_ext/scripts/validate_fcc_metadata.py:37-58, verbatim:
A Find that cites no prior solution re-derives solved problems. Twice measured: 2026-07-30 the World-View globe was tuned blind across four rounds against a committed harvest that named the pitfall by word; 2026-08-12 a Find concluded a capability was "undesigned anywhere in the ecosystem" while NEXUS held a full strategic audit of it.
The obligation is INWARD and OUTWARD. Inward-only did not stop the second failure — the harvest was ours, the audit was a partner's — so a qualifying
prior_art:must record what the ecosystem knowledge base said, INCLUDING when it said nothing. "eco-KB unavailable" and "eco-KB returned no hits, and here is what I queried" both satisfy this; silence does not.
with the grandfather clause (:53-58), verbatim:
GRANDFATHERING. 262 of 264 research documents predate the obligation. Enforcing it retroactively would produce 262 reds and be switched off within a day, so the gate applies from the cutover date forward — and prints the grandfathered count LOUDLY on every clean run so the clause cannot quietly become permanent (AOME's
legacy_stalepattern).
The loud print is executable (:222-226), verbatim comment + code:
Printed on EVERY run, clean or not, so the grandfather clause stays visible instead of¶
quietly becoming permanent. It should shrink as old Finds are revisited; it must never grow.¶
5. Naming conventions¶
5.1 The rule: same stem, different stage suffix¶
Stated in-band, in the artifact that first demonstrated it
(aome_ext/docs/fcc/research/AOME_PROCESS_GOLD_STANDARD_RESEARCH.md:13-16), verbatim:
Find phase closed 2026-08-11. The Create-phase sibling is
docs/fcc/blueprints/AOME_PROCESS_GOLD_STANDARD_BLUEPRINT.md— same stem, different stage suffix, so the bundle is findable by topic.
The pattern holds across peers by inspection:
| Stem | Find | Create | Critique |
|---|---|---|---|
AOME PROCESS_GOLD_STANDARD |
…_RESEARCH.md |
…_BLUEPRINT.md |
…_CRITIQUE_R2.md (in reviews/) |
CONSTEL AGENT_STAGE |
AGENT_STAGE_RESEARCH.md |
AGENT_STAGE_BLUEPRINT.md |
— |
CONSTEL CONSTEL_PATENT_INV-001_REASONING_MESH_ORCHESTRATION |
…_RESEARCH.md |
…_BLUEPRINT.md |
CONSTEL_PATENT_BLUEPRINT_CRITIQUE.md |
RC NEXUS_RC_MP_24 |
NEXUS_INTENT_LINEAGE_RESEARCH.md |
NEXUS_RC_MP_24_PATCH_BLUEPRINT.md |
NEXUS_RC_MP_24_DESIGN_CRITIQUE_R1.md |
Critiques carry a round suffix (_R1, _R2) — the critique is expected to iterate, and
the round number is part of the name.
5.2 AOME's machine-enforced fcc_naming.md — grandfather-all, gate-new¶
aome_ext/docs/process/fcc_naming.md is itself an FCC artifact (front matter:
fcc_stage: "Create", persona: "Documentation Evangelist"). The policy, verbatim (:13-17):
Enforced by
tests/test_docs_fcc_naming.py. Policy: grandfather-all, gate-new — every pre-existing violation is listed infcc_naming_grandfather.txt(shrink-only, count-pinned), and every NEWdocs/fcc/**/*.mdmust match its subdir's pattern or be anindex.md. A new file outside the ten patterned subdirs is denied outright.
The ten patterned subdirs, verbatim table (:19-32):
|
research/|AOME_*RESEARCH*.md|AOME_PLAN_PHASE_11_5_DOCS_IA_REASSESSMENT_RESEARCH.md| |blueprints/|AOME_*BLUEPRINT*.md|AOME_PLAN_PHASE_11_5_DOCS_IA_REASSESSMENT_BLUEPRINT.md| |reviews/|AOME_*{REVIEW,VALIDATION,CRITIQUE}*.md|AOME_PHASE_13_CLOSE_OUT_REVIEW.md| |handoffs/|AOME_*HANDOFF*.md|AOME_PHASE_14_HANDOFF.md| |summaries/|AOME_*.md|AOME_FCC_ARTIFACT_TRACKER.md| |tutorials/|AOME_*.md(any depth) |AOME_CLAUDE_FCC_ENFORCEMENT_GUIDE.md| |metrics/|AOME_*{METRICS,REPORT}*.md| phase metrics reports | |certifications/|AOME_*.md| readiness reports | |peer-review/|AOME_*.md| peer review packages | |charters/|AOME_TRAIN_CHARTER_vN.N.N.md|AOME_TRAIN_CHARTER_v11.5.0.md|
The default-deny clause (:34-37), verbatim:
The other seventeen subdirs (architecture, audit, rfcs, patents, design, …) are closed to new files by default — adding one there is a deliberate act that either renames into a patterned home or (rarely) extends this convention doc AND the test's
PATTERNStable in the same reviewed diff.
Why not fix-all (:47-51), verbatim:
403 files predate the convention (pinned in the grandfather header). Renaming them would break every FCC cross-reference and git-history citation for zero governance gain; the value is stopping the 404th. The list may only shrink — a rename to convention, an archive move, or a deletion each retire an entry, and the pin falls.
FCC's advantage here is real and should be used now: with 0 files in every FCC directory, FCC has no grandfather list to write. It can adopt gate-new with an empty exemption set — the only project in the mesh that can.
6. The gates — every enforcing target and test, per project¶
6.1 AOME¶
| Gate | Where | Enforces |
|---|---|---|
tests/charter/test_train_charter_gate.py |
make check (Tier-A) |
charter well-formed · present when due · charter commit is git-ancestor of impl_anchor's adding commit · SAR modified when sar_delta ≠ no architectural change · negative case @pytest.mark.ledger("F35") |
tests/charter/test_critique_gate.py |
make check (Tier-A, F26) |
critique exists, well-formed (verdict, BLK/MAJ/MIN taxonomy, model attestation, operator_ack), and precedes first implementation commit |
tests/charter/test_fcc_completeness.py |
make check (F27) |
for a declared phase, research + blueprint + review/critique all exist under docs/fcc/ |
tests/test_docs_fcc_naming.py |
make check |
grandfather-all / gate-new naming |
tests/charter/test_failure_gate_ledger.py |
make check (Tier-A) |
every 🟢 ledger row names a collected, un-skipped negative-case node-id |
scripts/check_docs_freshness.py |
make check |
tracked-doc currency (ClaimCheck with required/forbidden content modes) |
make uat-gold-cycle |
make check |
release-ready receipt; blocks any release without one |
The ledger's teeth clause (aome_ext/docs/process/FAILURE_GATE_LEDGER.md:16-21), verbatim:
The rule that gives this ledger teeth: a row is
🟢ONLY when itsproofnames a real, collected, un-skipped NEGATIVE-CASE pytest node-id carrying@pytest.mark.ledger("F<n>"). File existence is NOT enforcement — that is the exact trap this initiative kills (the vision step that checked file existence hid for four trains).
The five-part shape every AOME process gate copies
(tests/charter/test_train_charter_gate.py:8-9), verbatim:
…so this is a second application of a shipped pattern, and it keeps that module's five-part shape: positive control, ancestry, discrimination control, negative case, and an honest-limit docstring.
6.2 CONSTEL¶
| Gate | Target | Enforces |
|---|---|---|
validate-fcc |
make validate-fcc → make check |
validate_fcc_metadata.py + validate_partner_approvals.py + validate_snapshot_id.py — the "0/0/0" triple |
charter-verify |
make check |
"E-7 — the charter's OWN exit criteria, mechanically checked"; unmet criteria are xfail(strict=True), never skipped |
docs-freshness-verify |
make check |
"FAIL when a tracked intent document's stamped version lags the live one (backlog P-1)" |
strategy-docs-verify |
make check |
published strategy pages byte-match their repo-root sources |
pitfall-verify, nav-verify, capability-verify, count-chain-verify, vision-verdict-verify |
make check |
anti-drift family |
| pre-commit | scripts/validate_fcc_metadata.py |
metadata + capability tags |
constel_ext/Makefile:2719-2723, verbatim comment:
E-7 is "the charter gate itself exists" — process debt P-4, unbuilt since 2026-08-17 and undesigned for fifteen revisions. A charter whose criteria nothing reads is a wish list.
CONSTEL's cross-project rule (CLAUDE.md:166-169), verbatim:
Before committing FCC artifacts in
docs/fcc/: 1. Runpython scripts/validate_fcc_metadata.py— validates metadata headers 2. Verify capability tags reference existing research 3. Cross-project changes require FCC Critique from 2+ partner leads
6.3 RC / NEXUS¶
| Gate | Target | Enforces |
|---|---|---|
| charter gate | make charter-gate |
four checks of §3.3; "you may not LAND code without a converged design" |
| research provenance | make research-provenance-check (pre-push) |
§4.3's four-part provenance: contract |
| pre-registration | make prereg-check (pre-push) |
byte-frozen registration (design_sha + registering commit) + seed · digests · MDE · interval · stimulus control · reliability-not-correctness · validator PHOENIX |
| SOP amendments | make sop-amendments-check |
"SOP amendments a train owes must actually land. Prose that says 'we will amend the SOP' lapses — this SOP records three of its own halves lapsing that way." |
| decision citations | make decision-citations-check |
every D-0NN citation resolves to a log entry |
| STATE reconciliation | make state-check |
STATE names installed version, carries verify commands, says the live system wins, not older than latest tag |
| northstar cadence | make northstar-cadence-check |
advisory when due; fails only when a full extra tier has passed |
| pre-tag completeness | make pre-tag-check |
findings ledger EXISTS and carries a row for every journey the charter declares; "An absent ledger is a failure, never a vacuous pass." |
| the only tag path | make tag-release |
runs pre-tag; "Honest scope: sanctioned, not sole." |
| operator prose | make operator-prose-check |
a bare code (ADR/D-/seq/#/hash) with no prose beside it fails |
| loop closure | make no-caller-check |
a public render_*/collect_* with no caller in src/ is "stranded, not shipped" |
make uat-join's one-line statement of where declared scope comes from
(research_center_ext/Makefile:1183), verbatim: "Declared ids come from the Train Charter,
never from the inputs."
6.4 PAOM¶
paom/docs/fcc/governance/PAOM_DOCUMENTATION_SOP.md:113-121, the enforcement table, verbatim:
| Docs freshness — stamp tier |
make docs-freshness| advisory inmake check(ROADMAP is red) | | Docs freshness — sha256 manifest | same | advisory; the half a version sweep cannot satisfy | | Memory retention ratchet |make memory-check| enforced inmake check| | Memory live-plane parity |make memory-check-strict| pre-push (reads$HOME;make checkstays hermetic) | | Model + tier currency |paom-model-audit --check| advisory; quarterlyREVIEW_OVERDUE| | Gold-cycle receipt |make check| enforced | | Northstar cadence | ⛔ no command yet | operator-directed or major-boundary only; deliberately NOT indocs_freshness.yaml. A gate is owed (rule 13) — until it exists this is a written rule, which §0 says is the weaker kind |
with the hermeticity rule, verbatim (:123-124):
A gate that reads host state must never enter
make check— it would skip on every CI runner and prove nothing.
Plus, from the Makefile: make sar-check — "Release Train SOP §1b — refuse a train the SAR
does not name (a delta, or an explicit 'no architectural change' line)" — make
convergence-check (blueprint convergence ledgers, "advisory until the first ledger is
green, then strict"), make convergence-stamp ("Bind a blueprint's ledger to its body hash
+ converged_at"), make major-close-check, make release-cascade-check ("advisory <
5.0.0, blocking from 5.0.0"), and tests/process/test_sop_rule_ids.py, which "asserts
C-1…C-14 exist exactly once each and that the alias 'Rule 14 → C-8' holds"
(PAOM_COORDINATION_SOP.md:5).
6.5 CTO¶
CTO's delta over CONSTEL is stated as a gate upgrade
(cto/docs/process/ECOSYSTEM_PROCESS_REFORM.md:103-108), verbatim:
CTO's addition over CONSTEL: this is not only a ritual step but a hard CI gate (
tests/charter/test_state_freshness.py) that failsmake checkif STATE's version or gold counts drift from the live model. Given failure mode #4 (a gate skipped for convenience is a gate that doesn't run), making it structural — not disciplinary — is the point.
plus scripts/bump_version.py with per-site expected match counts (:110-116), make
learn-docs-check, make audit-baseline-check, make openapi-diff, make uml-check,
make gold-verify, make coverage-verify.
6.6 FCC — the same table, honestly¶
| Gate | Target | Enforces |
|---|---|---|
| lint · tests · tag validation · scenario validation | make ci-full (= lint test validate-tags scenarios-validate) |
code quality; tag registry; scenario schema |
| quality gates | make quality-gates |
the 30+ configurable gates over generated docs |
| registry drift | tests/test_ecosystem_registry_drift.py |
vendored RC registries pinned by SHA256 |
| charter / SAR / roadmap / research / blueprint / critique / naming / provenance / freshness / ledger | — | nothing |
There is no make check. There is no gate that reads STRATEGIC_ARCHITECTURE_REVIEW.md,
ROADMAP.md, or any file under docs/fcc/. scripts/ contains 30+ generators and four
verify_* scripts, none of which touch the FCC artifact tree.
7. The doctrines, verbatim¶
Nine lines that carry the whole ethos. Every one is quotable as-is and every one is attributable.
1 — "declared gap, never retro-fill." aome_ext/STRATEGIC_ARCHITECTURE_REVIEW.md:42-46:
The gap is acknowledged, not retro-filled. A retrospective SAR would invent intent after the fact — the same forgery problem
tests/charter/test_critique_gate.pynames when it says a gate raises the cost of dodging "from zero to deliberate forgery".
RC's restatement (research_center_ext/docs/STRATEGIC_ARCHITECTURE_REVIEW.md:29-33):
Restarted forward, not retro-filled¶
This revision describes RC as it is at v8.2.0 and reasons forward. It does not reconstruct the intent behind v6–v8 decisions. A retrospective SAR invents intent after the fact…
and its closing line (:45-46):
Nothing is lost by declining to re-narrate them here. Something would be lost by inventing a through-line they did not have.
PAOM's ledger records that all four peers converged on this independently
(paom/docs/fcc/research/FINDINGS_LEDGER.md:278), verbatim excerpt:
all four partners converged on the same SAR contract independently, and every one of them wrote it AFTER the same failure we just had … The shared contract: (1) a declared-gap §0 that names the stale period rather than retro-filling it — all four have one; (2) restarted forward, not retro-filled; (3) a per-train delta section; (4) architectural intent; (5) standing posture toward the next major; (6) a canonical authority map; (7) a risk register + outstanding decisions; (8) a review-cadence clause the older revisions all lacked.
2 — "hash, don't stamp." paom/docs/fcc/governance/PAOM_DOCUMENTATION_SOP.md:74-78:
- A stamp is not a reading. Content-hash anything that must actually be re-read. (AOME's v11.3.0 sweep restamped every tracked document and would have been just as green with every body describing v7.9. PAOM proved the same on
CLAUDE.mdwithin a day: correct version stamp, body claiming ~1,000 fewer tests than measured.)
Mechanised as RC's design_package sha256 rows (§3.3) and PAOM's make convergence-stamp
("Bind a blueprint's ledger to its body hash + converged_at (only if every rule passes)").
3 — "documents do not constrain, mechanisms do."
research_center_ext/scripts/check_train_charter.py:3-6:
⛔ WHY THIS EXISTS. RC skipped design-first sequencing twice in one day despite explicit instruction. The standing lesson from that week: documents do not constrain; mechanisms do — every failure was a document RC had read and not applied.
Restated in the SOP itself (RELEASE_TRAIN_WORKFLOW.md:24-27):
⛔ Design precedes code. This step exists because RC skipped design-first sequencing twice in one day despite explicit instruction (D-048). … so this step is enforced by
make charter-gate, not by good intentions.
4 — "a rule without an instance does not belong in the SOP."
paom/docs/fcc/governance/PAOM_DOCUMENTATION_SOP.md:144-147:
This document is reviewed quarterly with the model inventory, and amended whenever a rule is earned. A rule without an instance does not belong here — it is somebody's preference, and preferences do not survive contact with a tired reader at 2am.
Operationalised as the section heading ## 2. Rules earned the hard way, whose lede is
"Each is followed by the instance that produced it."
5 — PAOM's §0, the rule the rest follow from (PAOM_DOCUMENTATION_SOP.md:22-27):
A document that cannot be shown to be current is not current.
Silence is not freshness, a version stamp is not a reading, and a green gate over a document nobody checks is worth less than no gate, because it manufactures confidence.
6 — the honest-limit convention on every gate. Four instances, one per project:
AOME (src/aome/uat/charter.py:170-173):
HONEST LIMIT (mirrors
critique_problems): this raises the cost of shipping an unconsidered train from zero to deliberate forgery. A hand-written charter with a plausiblesar_deltaand a copiedoperator_ackpasses. Nor can the gate check thatsar_deltais TRUE — only that the SAR was touched. Stated, not hidden.
AOME's four numbered limits (tests/charter/test_train_charter_gate.py), verbatim heading and
items:
HONEST LIMITS (stated, not hidden):
- Forgery remains possible. …
sar_deltatruthfulness is not checkable. The gate proves the SAR was modified, not that the modification describes the change. A one-character edit satisfies it.- Ancestry is skipped where git cannot determine it — shallow clones, missing history (#387). Silence there is a skip, never a pass.
- A charter written five minutes before the first commit satisfies every temporal check. The gate enforces order, not deliberation.
RC (scripts/check_train_charter.py:37-38):
HONEST BOUND: checked and fail-loud, not impossible to bypass. D-046 stands as an authorised one-time bypass, and a release can still be tagged server-side.
RC again, on the operator witness
(docs/fcc/charters/NEXUS_TRAIN_CHARTER_v8.4.1.md:54-58):
HONEST BOUND: operator-ATTESTED, not agent-proof — it is a text field in a tracked file and detection of a forged token is by review, not by mechanism. An earlier draft required a cryptographically signed commit; withdrawn because this repository has never signed one and signing is unconfigured, so the check could never pass.
RC on the SOP-amendment gate (Makefile:1208):
Asserts the words landed, not that the practice is followed.
7 — "a skip reads exactly like a pass."
aome_ext/tests/charter/test_train_charter_gate.py:
★ WHY THE PENDING WINDOW IS NOT A SILENT SKIP. A test that skips forever reads exactly like a test that passes … So pending here is bounded by a version threshold, not by a waiver somebody must remember to renew … The window closes itself.
and the constant's comment (src/aome/uat/charter.py:51-54):
★ A THRESHOLD, NOT A LEDGER WAIVER. The blueprint proposed a waiver
until v11.4.0. A waiver needs a human to renew or retire it, and the ledger's own 2026-07-28 policy exists because they were being renewed reflexively. A threshold arms itself.
8 — "advisory when red, strict when green."
paom/docs/fcc/governance/PAOM_DOCUMENTATION_SOP.md:87-90:
- Ship a gate advisory when reality is already red; make it strict when it is green. (docs-freshness is advisory because
ROADMAP.mdis genuinely stale — a gate that must be bypassed on day one is bypassed forever. Memory discipline is enforced because it is green.)
and its sibling (:92-94):
- A grandfather clause covers age, never content. (
legacy_staletolerates an oldreviewed_at; editing that document without re-review still fails, or the flag becomes a permanent excuse.)
9 — "adopt with attribution; never mint a dialect."
paom/docs/fcc/governance/PAOM_DOCUMENTATION_SOP.md:104-106:
- Attribute what you consume. (Every ported file names its origin. CONSTEL wrote theirs "to be lifted wholesale"; CTO's names PAOM in its audience line and sat unread for a month.)
CONSTEL wrote the invitation (docs/governance/EVOLVED_WORKFLOW.md:17-21), verbatim:
Why it's ecosystem-wide. Other projects in the federated mesh (AOME, CTO, PAOM, RC) are running the same RT governance and hitting the same wall as their work shifts from feature-delivery to research/derivation. This is written to be lifted wholesale — replace the CONSTEL-specific paths and it applies as-is.
CTO accepted it in its own front matter: basis: "adopts + extends CONSTEL (PRISM)
docs/governance/EVOLVED_WORKFLOW.md". PAOM's SOP front matter carries
adopted_from: "CONSTEL EVOLVED_WORKFLOW.md · CTO ECOSYSTEM_PROCESS_REFORM.md · AOME
check_docs_freshness.py + check_memory_index.py". RC's SOP says "adopted from AOME's gold
standard rather than re-invented." CONSTEL's own charter says "Adopted, not invented here."
Four independent projects, four attribution lines, zero new dialects. That is the convention this document's own front matter follows.
8. FCC's measured gap table¶
Unflattering by construction. Every row is a measured fact from 2026-09-04.
| # | Capability | Peer state | FCC state | Severity |
|---|---|---|---|---|
| G-1 | Northstar | 4/5 have docs/vision/<CODE>_NORTHSTAR.md; PAOM gives it its own cadence rule (SOP rule 13) |
docs/vision/ exists and is empty; ROADMAP.md, SAR and CLAUDE.md contain zero occurrences of "northstar"/"north star"/"north-star" |
🔴 the top of the spine is absent |
| G-2 | Train Charter | AOME 4, CONSTEL 3, RC 3; AOME + RC both gate it | docs/fcc/charters/ empty; no charter has ever existed |
🔴 nothing binds a train to intent |
| G-3 | Find artifacts | AOME 342, CONSTEL 285, RC 102, PAOM 77, CTO 21 | 0 | 🔴 |
| G-4 | Create artifacts | AOME 205, CONSTEL 186, RC 47, PAOM 39, CTO 10 | 0 | 🔴 |
| G-5 | Critique artifacts | AOME 154 reviews, CONSTEL 35 critiques + 4 reviews, PAOM 34, RC 8+6, CTO 3+3 | 0 | 🔴 |
| G-6 | Design / journey streams | CONSTEL 21 (and Rule 13a gates the blueprint on them); AOME 10 | 0 | 🟠 |
| G-7 | Handoffs | AOME 77, PAOM 30, CONSTEL 5 | 0 | 🟠 |
| G-8 | SAR currency | all five run a declared-gap §0 + per-train delta; AOME/PAOM gate it | SAR's "Current State" header reads v1.3.5.3 (STRATEGIC_ARCHITECTURE_REVIEW.md:14) while src/fcc/__init__.py:3 is 2.2.0 — a major behind. Its authority section is stamped v1.3.5.4 (:275) and describes RC's registry as "19 projects in 3 tiers" while CLAUDE.md states the vendored registry tracks 23. No §0, no declared gap, no per-train delta, no review-cadence clause. |
🔴 the exact failure AOME wrote the charter gate to stop, present here, unwatched |
| G-9 | ADR ↔ R/B chain | CONSTEL closes each ADR with an explicit Rule-11/12/13/14 block naming its R-NNN/B-NNN |
18 ADRs, 0 naming a research or blueprint artifact, because none exist | 🔴 the ADRs are decisions with no recorded Find |
| G-10 | Front-matter contract | CONSTEL title/date/author (+prior_art), PAOM per-type REQUIRED_FIELDS, RC provenance:, AOME 9 charter fields |
none declared, none validated; scripts/ has no FCC metadata validator |
🔴 |
| G-11 | Naming convention | AOME machine-enforced, 10 patterned subdirs, default-deny, 403-file grandfather | none; and — the one advantage — grandfather list would be empty | 🟡 cheap to fix now, expensive later |
| G-12 | Process gate in CI | AOME 5 Tier-A charter tests; RC 11 gates incl. 3 pre-push; CONSTEL make check chains ~25 verifiers; PAOM 12; CTO test_state_freshness.py |
0. make ci-full = lint test validate-tags scenarios-validate |
🔴 |
| G-13 | docs/STATE.md |
all five | absent | 🟠 |
| G-14 | Release / findings ledger | RC RELEASE_LEDGER.md (41 rows), AOME FAILURE_GATE_LEDGER.md (F1–F35+), PAOM FINDINGS_LEDGER.md, CONSTEL gold-cycle receipts, CTO IMPROVEMENT_REGISTER.md |
absent | 🟠 |
| G-15 | UAT lane | AOME 92 release dirs, CTO 72, CONSTEL 70, RC 55, PAOM 39 | 4 (v1.10.0, v2.0.1, v2.1.1, v2.2.0), with verdict.md + probe_pass/ + responsiveness.json + manual_uat_handoff.md |
🟢 the one part of the spine FCC already runs — missing only findings.md and the roll-up |
| G-16 | Memory durability | AOME memory/ committed + tombstone log + licence-checked index; PAOM make memory-check enforced; CONSTEL memory/LOST_MEMORY_REGISTER.md |
no memory/ directory. BACKLOG.md:122 cites reference_aome_gold_standard_forensics, destroyed 2026-09-03, with no register recording the loss |
🔴 this document exists because of this row |
8.1 The one that is worst¶
G-8 + G-2 together. AOME's SAR went four majors untouched and "it is watched by
nothing" (AOME_PROCESS_GOLD_STANDARD_RESEARCH.md:39). FCC's SAR is one major stale and
is watched by nothing. AOME wrote the fix, shipped it, and it is 200 lines of Python plus a
one-page markdown artifact per train. FCC has the diagnosis, the cure, and four working
reference implementations sitting in sibling directories, and has adopted none of it.
CONSTEL's line, written about its own Rule 13a, is the exact description of FCC's position
(constel_ext/CLAUDE.md:138), verbatim:
The declared process did not describe what the project does, so "follow the SOP" was a judgement call exactly where it should have been a gate.
For FCC it is stronger: the declared process is the product.
9. Adoption recommendation, in dependency order¶
House style, stated by PAOM's rule 12 and CONSTEL's charter: adopt with attribution, never mint a new dialect. Every step below names its source and its delta. Nothing here is invented.
A-0 — Restore the memory as an artifact (this document)¶
Adopted from: AOME's memory/ + tombstone discipline and CONSTEL's
memory/LOST_MEMORY_REGISTER.md.
Delta: FCC has no memory/ plane at all, so the restoration lands as an FCC research
artifact rather than a memory. BACKLOG.md:122's citation should be amended to point here.
Blocks: nothing. Blocked by: nothing. Do it first because everything else cites it.
A-1 — docs/vision/FCC_NORTHSTAR.md¶
Adopted from: AOME docs/vision/AOME_NORTHSTAR.md; PAOM's SOP rule 13 for the cadence.
Delta: FCC already has vision material — docs/roadmap/fcc-aome-parity-vision.md,
docs/roadmap/strategic-vision.md, docs/roadmap/PHASE_12_15_STRATEGIC_PLAN.md. This is a
consolidation into the conventional path, not new authorship.
Carry PAOM's cadence clause verbatim (PAOM_DOCUMENTATION_SOP.md:96-101): operator-owned,
revisited only on operator direction or at a major boundary, excluded from any
per-release freshness gate, proposals as _DRAFT beside it, never edited in place.
Blocks: A-3 (the charter's northstar_ref needs a target).
A-2 — SAR §0 declared gap + per-train delta¶
Adopted from: AOME STRATEGIC_ARCHITECTURE_REVIEW.md §0; RC's "Restarted forward, not
retro-filled"; the 8-part contract PAOM's FINDINGS_LEDGER.md:278 distilled from all four.
Delta: FCC's gap is one major (v1.3.5.3 → v2.2.0), not four; and unlike the peers FCC's
SAR also carries a stale cross-project inventory (19 vs 23 projects), so §0 must name
both the version gap and the registry gap.
⛔ Do not retro-fill v1.4 → v2.1. Declare the gap, restart at v2.2.0, and point at
CHANGELOG.md / docs/decisions/ / docs/uat/ for what actually happened — RC's table
pattern (docs/STRATEGIC_ARCHITECTURE_REVIEW.md:38-44).
Blocks: A-3 (sar_delta has nothing to be a delta of until §0 exists).
A-3 — docs/fcc/charters/FCC_TRAIN_CHARTER_v<X.Y.Z>.md¶
Adopted from: AOME's field set (the nine of §3.2), verbatim including the literal
no architectural change sentinel and the sar_delta-blank-is-an-omission rule.
Extended with RC's design_package — rows of {path, verdict, sha256}, verdict
compared by EQUALITY, plus RC's status: open|closed resolver.
Delta, and it matters: AOME's axis enum is {vertical, application} — FCC's axes are
not verticals. Propose axis: {specification, framework, platform} — specification for
trains that change R.I.S.C.E.A.R. or the FCC workflow definition (which are the ones
consumers must be told about), framework for src/fcc/ capability, platform for
deploy/docs/portal. This is the only place a new value is minted, and it is minted because
the imported enum is domain-specific to AOME's vertical series, not because FCC prefers its
own words.
Second delta: FCC's charter should carry a consumers_notified: field. FCC is the only
node whose sar_delta can invalidate five downstream projects; none of the peers need that
field and none have it.
Blocked by: A-1, A-2. Blocks: A-5.
A-4 — Front-matter contract + naming, both machine-checked¶
Adopted from: AOME docs/process/fcc_naming.md (grandfather-all, gate-new,
default-deny outside patterned subdirs) + CONSTEL scripts/validate_fcc_metadata.py
(title/date/author required; phase/status/version recommended) + PAOM's per-type
REQUIRED_FIELDS keyed on filename suffix + RC's provenance: four-part contract for Finds.
Delta: ⭐ FCC's grandfather list is empty. Every peer paid a 262–403-file exemption to
adopt this; FCC pays zero. It is the single cheapest adoption in the list and the one whose
cost only ever increases.
Second delta: CONSTEL's prior_art: obligation should be required from day one, with no
cutover date, for the same reason — there is nothing to grandfather. FCC's variant must be
OUTWARD by default: FCC's prior art is overwhelmingly its own consumers' implementations.
Blocked by: nothing. Can land in parallel with A-1/A-2.
A-5 — The gate: make check with a charter test¶
Adopted from: AOME tests/charter/test_train_charter_gate.py + src/aome/uat/charter.py
(the rules belong in the package, not in tests/, so scripts can consume them — AOME's own
correction, tests/charter/fcc_gate.py:52-56).
Extended with RC's check_train_charter.py four checks and its two design decisions:
resolve by status: open, check HEAD's tree not history.
Keep AOME's five-part module shape verbatim: positive control · ancestry ·
discrimination control · negative case · honest-limit docstring. The discrimination
control is not optional — git merge-base --is-ancestor X X exits 0, and a self-comparison
makes every ordering proof vacuous while green (AOME issue #387).
Delta: FCC has no make check target. Create it as
check: lint test validate-tags scenarios-validate quality-gates fcc-metadata charter-gate,
and follow PAOM rule 7 — ship charter-gate and docs-freshness advisory while the
SAR is red, strict once A-2 lands. A gate that must be bypassed on day one is bypassed forever.
Blocked by: A-3, A-4.
A-6 — Rules 11–14 in CLAUDE.md, with FCC's own numbering¶
Adopted from: CONSTEL CLAUDE.md §"FCC Process (Hard Enforcement)" — rules 11, 12, 13,
13a, 14 verbatim, path-substituted (src/constel/ → src/fcc/), plus the Phase Detection
table and the persona/command table.
Delta: FCC owns these rules. Copying CONSTEL's text back into FCC and citing CONSTEL as
the source is correct and should be said plainly: the canonical author is adopting the
consumer's codification of its own specification, because the consumer wrote it down first.
Rule 13a's journey-stream requirement should be adopted as written rather than softened —
its instance (20 design docs against 184 blueprints) is exactly the drift FCC is at risk of
once docs/fcc/design/ starts filling.
Second delta: adopt CONSTEL's R-NNN/B-NNN backlog with the sequencing rule written
down, since CONSTEL never wrote it (§2.3, and could_not_establish (4)). Recommended:
R and B share a number within a train's delta spine; Build is its own row; ADRs keep the
existing ADR-0NN sequence, and each ADR closes with the Rule-11/12/13/14 block CONSTEL uses.
Blocked by: A-4 (naming must exist before numbering means anything).
A-7 — docs/STATE.md + Session Resume Ritual¶
Adopted from: CONSTEL EVOLVED_WORKFLOW.md §3.1/§3.3/§3.4; CTO's delta of making the
freshness check a hard CI gate (test_state_freshness.py) rather than a ritual step; RC's
make state-check (names the installed version, carries verify commands, says the live system
wins, not older than the latest tag).
Delta: none needed. Take CONSTEL's §3.1 template and CTO's gate. CONSTEL invited exactly
this: "replace the CONSTEL-specific paths and it applies as-is."
Blocked by: nothing, but lower value than A-1..A-5 until artifacts exist to reconcile.
A-8 — Findings ledger + findings.md per release¶
Adopted from: RC docs/uat/RELEASE_LEDGER.md + docs/uat/<v>/findings.md (id · outcome ·
disposition · detail, rendered from triage_ledger.json); AOME's teeth rule — a row is green
only when its proof names a collected, un-skipped negative-case node-id.
Delta: FCC's UAT dirs already carry verdict.md, probe_pass/, responsiveness.json.
Adding findings.md + the roll-up completes an existing lane rather than starting one — the
highest ratio of value to effort in this list after A-4.
Blocked by: nothing.
9.1 Dependency order, condensed¶
A-0 memory restoration (this doc)
│
├── A-1 northstar ──┐
├── A-2 SAR §0 ─────┼──> A-3 train charter ──┐
├── A-4 naming + front matter ────────────────┼──> A-5 make check + charter gate
│ │
├── A-6 Rules 11-14 + R/B numbering (needs A-4)
├── A-7 STATE.md + resume ritual (independent)
└── A-8 findings ledger (independent)
Recommended first cut: A-0 + A-4 + A-8. All three are independent, all three are cheap, and A-4's cost is the only one in the list that grows every day the FCC directories stay empty of convention while filling with files.
10. What this document deliberately does not do¶
- It does not retro-fill the FCC SAR. §9 A-2 says declare the gap; this Find does not write it.
- It does not propose a new FCC dialect. Every recommendation names an origin. The two places a
new value is minted (
axisenum,consumers_notified) are flagged as mints, with the reason. - It does not estimate effort. See
could_not_establish(6). - It does not restore the destroyed memory's text. It restores the finding, from primary
sources, and says so. See
could_not_establish(1).
References¶
aome_ext/docs/fcc/research/AOME_PROCESS_GOLD_STANDARD_RESEARCH.md·…/blueprints/AOME_PROCESS_GOLD_STANDARD_BLUEPRINT.md·aome_ext/memory/process-gold-standard-decisions-2026-08-11.mdaome_ext/src/aome/uat/charter.py·aome_ext/tests/charter/{fcc_gate.py,test_train_charter_gate.py}·aome_ext/docs/process/{fcc_naming.md,FAILURE_GATE_LEDGER.md}·aome_ext/STRATEGIC_ARCHITECTURE_REVIEW.mdconstel_ext/CLAUDE.md§Constitution Rules + §FCC Process ·constel_ext/docs/governance/EVOLVED_WORKFLOW.md·constel_ext/scripts/validate_fcc_metadata.py·constel_ext/docs/fcc/FCC_BACKLOG.mdcto/docs/process/ECOSYSTEM_PROCESS_REFORM.md·cto/STRATEGIC_ARCHITECTURE_REVIEW.mdresearch_center_ext/docs/operations/RELEASE_TRAIN_WORKFLOW.md·research_center_ext/scripts/{check_train_charter.py,check_research_provenance.py}·research_center_ext/docs/fcc/charters/NEXUS_TRAIN_CHARTER_v8.4.1.md·research_center_ext/docs/STRATEGIC_ARCHITECTURE_REVIEW.md·research_center_ext/docs/uat/RELEASE_LEDGER.mdpaom/docs/fcc/governance/{PAOM_DOCUMENTATION_SOP.md,PAOM_COORDINATION_SOP.md}·paom/scripts/validate_fcc_metadata.py·paom/docs/fcc/research/FINDINGS_LEDGER.md·paom/STRATEGIC_ARCHITECTURE_REVIEW.md- Local:
STRATEGIC_ARCHITECTURE_REVIEW.md·ROADMAP.md·BACKLOG.md:122·Makefile·docs/uat/v2.2.0/verdict.md·src/fcc/__init__.py:3