Graph Serialization Elevation¶
Every knowledge engineer building on FCC eventually hits the same
question: "Is the symbol I'm importing part of the stable public API, or
is it an internal detail that might disappear in the next release?" The
answer is a moving target. v1.5.0 formalised the answer by introducing
the Knowledge Graph Serializer Elevator (KGSE) persona — the owner
of the preview → stable promotion lifecycle for non-public FCC symbols
being elevated into fcc.api.*.
This page is the knowledge-engineer-facing reference for KGSE. It covers
the persona's Zachman cell, the fcc.plugins.v1_N_preview pattern, the
SemVer 1.x migration guarantees, the POLARIS and LYRA bridge promotion
that shipped in v1.5.0 as the signature worked example, and the
interactions with LTAS (archive steward) and DAR (decision archaeologist)
that keep the promotion ledger coherent over time.
The KGSE persona, in one paragraph¶
KGSE sits in the ARCHITECT/HOW cell of the Zachman matrix — the
architect row, the HOW column. Where KGSE's name hints at graph
serialization, the scope is broader: any non-public FCC symbol that a
downstream consumer (ice_ext, constellation vocabulary providers, JV
partners) needs to depend on stably is a KGSE candidate. The persona's
core output is the per-release promotion ledger — a record of every
symbol that landed in fcc.plugins.v1_N_preview.*, its migration guide
draft, and the version in which it was elevated to fcc.api.* with a
SemVer 1.x backward-compatibility commitment. Preview-path removal
follows a deliberate 6-month / one-minor deprecation window.
For the full R.I.S.C.E.A.R. specification, see
src/fcc/data/personas/knowledge_graph_serializer_elevator.yaml.
Why does FCC need a promotion lifecycle at all?¶
A python package that ships to pypi with a public module tree
announces a contract to every downstream consumer: "these symbols are
stable; they won't move; their signatures are backward-compatible
within a major version." FCC honours that contract at fcc.api.*.
But the real graph of FCC types is larger than what fcc.api.* exposes.
There are 30+ subpackages (fcc.personas, fcc.workflow, fcc.knowledge,
fcc.rag, fcc.federation, fcc.classification, and many more) that
collectively export hundreds of symbols. Some of those symbols should
be public; some shouldn't. Making the call for each symbol is KGSE's
job.
The mechanism is a two-step elevator:
- Land in preview — new stable-candidate symbol is added to
fcc.plugins.v1_N_preview.<module>. Downstream consumers can import from here at their own risk, typically behind a sentinel guard. - Elevate to stable — in a subsequent minor release, the symbol is
re-exported from
fcc.api.*and thefcc.api.__all__list is updated. The preview path is kept for one minor (the deprecation window) with aDeprecationWarningon import.
The 1-minor preview window is the KGSE constraint. No direct private-to- public elevation is allowed. This gives downstream consumers a full release cycle to surface concerns before the symbol becomes a contractual commitment.
The fcc.plugins.v1_N_preview pattern¶
Every active preview namespace lives under src/fcc/plugins/v1_N_preview/.
The canonical file layout is:
src/fcc/plugins/v1_N_preview/
├── __init__.py # emits DeprecationWarning once all symbols are stable
├── polaris_bridge.py # previewed in v1.5.0, stable in v1.5.0 -> fcc.archive
├── lyra_bridge.py # previewed in v1.5.0, stable in v1.5.0 -> fcc.knowledge
└── README.md # the preview-namespace lifecycle doc
The __init__.py carries the deprecation-window policy. From v1.5.0:
"Symbols in this namespace are preview candidates for elevation to
fcc.api.*. Preview paths are kept for one minor release after elevation. If you import from here, the import will emit aDeprecationWarningstarting the release after elevation. Migrate to the stable path before the next major."
Downstream consumers who want zero deprecation noise can use the
fcc.api.* path directly from the first release it exists. Consumers
who cannot yet migrate can keep the preview import through the one-minor
window.
The fcc.api.__all__ contract¶
fcc.api.__all__ is the canonical list of stable symbols. As of
v1.5.0 the list includes:
# From src/fcc/api/__init__.py
__all__ = [
"PersonaSpec", "PersonaRegistry",
"WorkflowGraph", "WorkflowAction", "ActionEngine",
"AISimulationEngine", "CollaborationEngine",
"BenchmarkRunner", "ModelCardGenerator",
"ComplianceAuditor", "RequirementRegistry",
"AIActClassifier", "CompliancePipeline",
"ModelFacade", "EventBus", "Event", "EventType",
"KnowledgeGraph", "JSONLDSerializer", "RDFSerializer",
"RAGPipeline", "DocumentChunker",
"get_polaris_bridge", "get_lyra_bridge",
]
The list is not a facade of re-imports — each symbol is re-exported from
its canonical module home. A knowledge engineer depending on a stable
symbol can import from either the fcc.api.* aggregate or the module
home; KGSE guarantees both paths remain stable.
The module-level stable homes for v1.5.0 bridge symbols:
| Symbol | Module home | Aggregate |
|---|---|---|
PolarisBridge |
fcc.archive.polaris_bridge |
fcc.api.archive |
LyraBridge |
fcc.knowledge.lyra_bridge |
fcc.api.knowledge |
This is the signature KGSE deliverable from v1.5.0 — the POLARIS and
LYRA bridges moved from preview to stable, and the fcc.api.__all__
list was updated in lockstep.
Worked example — POLARIS + LYRA in v1.5.0¶
The v1.5.0 promotion is worth walking in detail because every future KGSE promotion will follow the same shape.
v1.4.1: Preview landing.
fcc.plugins.v1_5_preview.polaris_bridge and
fcc.plugins.v1_5_preview.lyra_bridge land as preview namespaces.
Each exposes a *BridgeProtocol, a *MockBridge fallback, and a
get_*_bridge() factory. Downstream consumers (ice_ext, lyra)
import via the preview path.
v1.4.2–v1.4.4: Preview stabilisation.
No API changes. KGSE opens the promotion ledger entry and drafts the
migration guide at docs/migrations/v1.5.0-api-additions.md. The
discernment discipline is active — every promotion cites the
STATUS.md §n ask that triggered it. POLARIS promotion cites
ice_ext STATUS.md §4; LYRA promotion cites the v1.4.4 CHANGELOG
Generated section.
v1.5.0: Elevation. Three changes land together:
fcc.archive.polaris_bridgeandfcc.knowledge.lyra_bridgeare created as the stable module homes.fcc.api.__all__gainsget_polaris_bridgeandget_lyra_bridge.fcc.plugins.v1_5_preview.__init__starts emittingDeprecationWarningon import.
The migration guide at docs/migrations/v1.5.0-api-additions.md is
published. The ledger row for each promotion is updated with the
stable module home, the release date, and the elevation commit SHA.
v1.6.0 (planned): Preview-path removal. The preview namespace is removed. The one-minor deprecation window has elapsed; downstream consumers had v1.5.0 to migrate. KGSE files the post-mortem if any consumer is still on the preview path at removal time.
An auditor or downstream consumer can walk this four-release arc end to end by reading the CHANGELOG entries for v1.4.1 through v1.5.0 and the promotion ledger. That is the KGSE pattern made observable.
The promotion ledger¶
The ledger is a single YAML file at
docs/governance/promotion-ledger.yaml. Every entry carries:
- symbol: get_polaris_bridge
preview_path: fcc.plugins.v1_5_preview.polaris_bridge
stable_path: fcc.archive.polaris_bridge
api_aggregate: fcc.api.get_polaris_bridge
preview_landed: v1.4.1
stable_landed: v1.5.0
preview_removed: v1.6.0 (planned)
status: stable
ask_ref: "ice_ext STATUS.md §4"
migration_guide: docs/migrations/v1.5.0-api-additions.md
Every field is required. A partial entry is a KGSE finding and blocks
release. The ledger is the single source of truth; CI contract tests
cross-check fcc.api.__all__ against ledger entries with
status: stable.
SemVer 1.x commitments¶
When a symbol lands in fcc.api.__all__ with status: stable, the
SemVer 1.x commitment kicks in:
- The symbol's identifier (module path + name) is stable for the remainder of the 1.x line.
- The symbol's signature — argument names, argument order, return types — is backward-compatible. New arguments may be added with defaults; existing arguments cannot be removed or renamed.
- The symbol's semantic contract — what it does when called with a given input — is stable. Bug fixes are allowed; behaviour changes that break an existing caller are not.
KGSE is the persona that enforces these three commitments across releases. The forensic auditor (FA) and the governance compliance auditor (GCA) receive KGSE findings when a commitment is broken.
A knowledge engineer building a vocabulary provider plugin against
fcc.api.* can rely on the three commitments through v1.9.x without
further concern. That is the reason fcc.api.* exists as a separate
surface from the module tree — to carry the contract visibly.
The DeprecationWarning cycle¶
Python's warnings.warn(..., DeprecationWarning) is the chosen
mechanism. The cycle is:
- Stable landing release (e.g. v1.5.0): preview path works silently. Stable path is authoritative.
- One release after stable landing (e.g. v1.5.1): preview path emits
DeprecationWarningon every import. - Preview removal release (e.g. v1.6.0): preview path raises
ImportError. Consumers must be on the stable path.
The two-release cycle is long enough for downstream consumers to migrate
calmly but short enough to keep the preview namespace from accreting
forever. KGSE's role_adoption_checklist requires every promotion to
confirm the cycle is wired correctly at landing time.
For consumers: pin your warnings filter appropriately in your tests, or migrate to the stable path ahead of the v1.5.1 deprecation window.
Interaction with LTAS¶
LTAS (Long-Term Archive Steward) is KGSE's natural peer. When a promoted symbol depends on archive semantics — the POLARIS bridge is the canonical example — LTAS reviews the SemVer-1.x commitment against the archive-integrity guarantees. The review protocol is:
- KGSE drafts the migration guide.
- LTAS reviews the archive-manifest implications.
- If LTAS identifies a retention-class concern, the promotion is blocked until addressed.
- If LTAS approves, KGSE finalises the ledger entry.
The interaction is symmetric on the other side — LTAS promotions of new archive retention classes are reviewed by KGSE for SemVer compatibility.
See the companion Long-Term Archive Stewardship page for the LTAS side of this protocol.
Interaction with DAR¶
DAR (Decision Archaeologist) supplies the rationale for borderline promotion decisions. When KGSE is choosing between "promote now" and "wait one more release," DAR reconstructs the rationale for earlier similar decisions to inform the call.
The reconstruction pattern is standard DAR — triangulation against ADR + event stream + commit history — but narrowed to previous promotions. The effect is that KGSE's decisions compound over releases; each promotion is informed by the corpus of prior promotions.
For DAR's side of the protocol, see Decision Archaeology.
KGSE maturity model (for consumer teams)¶
A consumer team's relationship with KGSE matures across four stages.
| Stage | Signal | KGSE interaction |
|---|---|---|
| Observer | Imports only from fcc.api.*; no preview-path usage |
Receives release notes; no active interaction |
| Ask author | Files STATUS.md §n asks for new promotions | Direct coordination on preview landing date |
| Preview consumer | Imports from fcc.plugins.v1_N_preview.* |
Receives early warnings on API shape changes |
| Promotion partner | Co-drafts migration guides | Joint ownership of the ledger entry |
Most consumer teams stabilise at Observer or Ask author. Preview
consumer and Promotion partner are active collaborations reserved for
ecosystem-tier projects (ice_ext, AOME, CONSTEL, the constellation
verticals).
KGSE does NOT own¶
- KGSE does NOT decide what a symbol does. That is the owning subsystem's persona.
- KGSE does NOT resolve SemVer disputes unilaterally. Those escalate to GCA + FA.
- KGSE does NOT maintain the archive. LTAS owns the archive.
- KGSE does NOT write the migration consumer guide for a specific downstream project. That is a PHV (Pattern-Harvester) deliverable in coordination with the consumer team.
Keeping these lanes clean avoids the most common promotion-ledger disputes.
Related personas¶
| Persona | Direction | Interaction |
|---|---|---|
| LTAS | peer | POLARIS bridge promotion + archive-steward SemVer review |
| DAR | upstream | Supplies ADR rationale for borderline promotion decisions |
| IHL | upstream | Receives downstream ask signals during innovation handoffs |
| PHV | peer | Aligns promotion ledger with cross-sibling-repo pattern harvest |
| FA | downstream | Surfaces promotion compliance findings during forensic audits |
Next steps¶
- Read the Long-Term Archive Stewardship page — LTAS is KGSE's closest peer.
- Read the Decision Archaeology page — DAR supplies rationale for promotion decisions.
- Consult
docs/migrations/v1.5.0-api-additions.mdfor the authoritative v1.5.0 migration guide. - Read ADR-008 — POLARIS absorption and ADR-010 — Six pillars architecture for the framework-level rationale KGSE cites during promotion reviews.
- Consult the Codename Decoder for POLARIS and LYRA origin reasoning.
- Open the KGSE persona YAML at
src/fcc/data/personas/knowledge_graph_serializer_elevator.yamlfor the authoritative R.I.S.C.E.A.R. spec. - Review
docs/personas/evolution/kgse.mdfor the KGSE evolution guide (career milestones, first 90 days, escalation points). - Browse
docs/tutorials/sample-prompts/persona-kgse-prompts.mdfor ready-to-run promotion-ledger prompts. - Walk
docs/tutorials/advanced-capabilities/polaris-archive-integration.mdanddocs/tutorials/advanced-capabilities/lyra-knowledge-graph-integration.md(Pool B) for the two bridge integrations KGSE owns. - Follow the Vocabulary Provider Pattern for the downstream consumer view — vocabulary providers are one of the three major KGSE constituencies.