Skip to content

ADR-015: Contribution-Intelligence Dossier (FCC-native, cohesion #4)

Date: 2026-06-21 Status: Accepted Decision-makers: FCC core maintainers Consulted: Research Center (RC-MP-21 / ADR-067 / ADR-068 reference pattern; contribution-dossier-v1 blueprint) Informed: Ecosystem partners (PAOM/AOME/NEXUS) — coordination via GitHub issues/notices (Channel-B)

Context and Problem Statement

FCC is the canonical authority for personas / archetypes / R.I.S.C.E.A.R., and they are increasingly run across the ecosystem (PAOM executes FCC champions; AOME/CONSTEL/RC consume the catalog). But FCC had no way to see how its contributions are actually adopted and run — no forensic, repeatable view of commits, releases, served surfaces, or persona-adoption. This is the fourth and final cohesion mechanism of the v1.8.3→v2.0.0 arc (the other three: registry-sync bot, journey emission + portal manifest, machine-readable catalog export).

Two hard constraints shape the design: - Channel-B: FCC must never write into partner repos; harvest is local + read-only. - Rule-8 / FTO: no person or partner names, and no privileged (monetary / patent-claim) data.

Decision

Build an FCC-native contribution-intelligence dossier (src/fcc/contributions/), mirroring RC's RC-MP-21 pattern but adapted to FCC:

  1. Offline-green harvest (harvest.py) — local git log (commit count + distinct-author integer count, never names), latest release tag, served surfaces from the vendored port_allocation.yaml, and the 23-project roster from ecosystem_projects.yaml. Every external command degrades to empty rather than raising (a dossier always builds, no network).
  2. FCC-distinctive persona-adoption tier (dossier.py::_catalog_adoption) — derived from the committed docs/catalog/*.jsonl + paom_override_map.json: persona count, PAOM-runnable count, override-map label count, and the distribution by PAOM-8 archetype. This is FCC's unique signal (how the persona catalog is consumed) and has no RC analog.
  3. Two governance firewalls (guards.py):
  4. Rule-8: structural (no name fields; active_authors is an int) + assert_no_names rejecting email/@handle shapes in any free-text field.
  5. FTO: assert_fto_safe rejects monetary/patent-claim shapes ($N, N million USD, patent claim N) at construction → PrivilegedDataError. Detector matches shapes, never names — so it is simultaneously Rule-8-clean.
  6. Surfaces: fcc contributions dossier CLI + make contribution-dossier → gitignored output/contributions/{dossier.json,DOSSIER.md}; a read-open contribution-dossier-v1 summary served at /.well-known/contribution-dossier.json (schema contribution_dossier_v1.schema.json, additionalProperties:false).

Consequences

  • FCC gains a repeatable, name-free, offline-green view of its own contribution
  • adoption footprint, and a federation-ready descriptor a NEXUS aggregator can fan in (per the co-designed contribution-dossier-v1 blueprint).
  • The dossier output is regenerated, not committed (gitignored) — it is evidence, not source.
  • Channel-B/Rule-8/FTO are enforced in code + tests, so the dossier can harvest sibling checkouts read-only without risk of leaking names or privileged data.
  • The persona-adoption tier ties the dossier to the catalog export (ADR-relevant to the cohesion set), making FCC's "how are my personas used" question answerable from committed data alone.