Skip to content

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:122 still 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_ext project 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:

  1. No Implementation Without Blueprint — Code changes to src/constel/ that add new modules, stages, or integrations MUST have a corresponding blueprint in docs/fcc/.
  2. No Blueprint Without Research — Blueprints MUST reference a research inventory or capability matrix from the Find phase.
  3. Critique Before Merge — All FCC artifacts (research, blueprints, guides, runbooks) MUST pass /scaffold-doc-review quality 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 in docs/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").
  4. 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.py code.
  • 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:

  1. The Find and the Create carry different numbers. R-002 → B-003, not R-002 → B-002. The chain is expressed by the Upstream/Downstream columns, so a number is never overloaded.
  2. Build is a separate row from Create. B-003 (blueprint) and B-004 (implementation) are distinct backlog items with distinct efforts, which is what makes "no implementation without blueprint" a countable claim rather than a slogan.
  3. 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 — see could_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.py with ChromaDB vector store, 19 tests in tests/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 | Author docs/fcc/design/*_streams.md BEFORE 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-SemVer train; an axis in :data:VALID_AXES; non-empty northstar_ref, roadmap_arc, sar_delta and impl_anchor; a non-empty exit_criteria list; and an operator_ack witness.

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_delta may 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, with status: 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}), and operator_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. provenance is 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 retrieved or 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_stale pattern).

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 in fcc_naming_grandfather.txt (shrink-only, count-pinned), and every NEW docs/fcc/**/*.md must match its subdir's pattern or be an index.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 PATTERNS table 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 its proof names 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. Run python 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 in make check (ROADMAP is red) | | Docs freshness — sha256 manifest | same | advisory; the half a version sweep cannot satisfy | | Memory retention ratchet | make memory-check | enforced in make check | | Memory live-plane parity | make memory-check-strict | pre-push (reads $HOME; make check stays hermetic) | | Model + tier currency | paom-model-audit --check | advisory; quarterly REVIEW_OVERDUE | | Gold-cycle receipt | make check | enforced | | Northstar cadence | ⛔ no command yet | operator-directed or major-boundary only; deliberately NOT in docs_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 fails make check if 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.py names 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:

  1. 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.md within 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 plausible sar_delta and a copied operator_ack passes. Nor can the gate check that sar_delta is 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):

  1. Forgery remains possible. …
  2. sar_delta truthfulness is not checkable. The gate proves the SAR was modified, not that the modification describes the change. A one-character edit satisfies it.
  3. Ancestry is skipped where git cannot determine it — shallow clones, missing history (#387). Silence there is a skip, never a pass.
  4. 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:

  1. Ship a gate advisory when reality is already red; make it strict when it is green. (docs-freshness is advisory because ROADMAP.md is 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):

  1. A grandfather clause covers age, never content. (legacy_stale tolerates an old reviewed_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:

  1. 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 (axis enum, 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.md
  • aome_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.md
  • constel_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.md
  • cto/docs/process/ECOSYSTEM_PROCESS_REFORM.md · cto/STRATEGIC_ARCHITECTURE_REVIEW.md
  • research_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.md
  • paom/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