The project's brain. One table of every open loop, one law (WIP=1), one honest maturity number. Seeded 2026-07-15 by a grounded four-gate closure scan of the Python core (
src/contextcore) + docs. TS plugins (contextcore-owl/-rabbit), helm/k8s, and dashboards were out of scope for this pass. See the DEV-OS docs atdev/dev-os/.
Maturity of this repo: L2 — set by the lowest open loop (dead CLI sync stubs / un-wired a2a gate). The lessons + comms core is L4/L5-live and notably self-aware. No rounding up. Loops in flight: 0 — WIP=1: pick one, close or park it, before opening another. Last grounded: 2026-07-15 — core lessons-recall path grounded to the querier; INERT-2/3/4 NOT re-grounded (see caveat).
ContextCore is more self-aware than most repos — it already carries a fresh, formal
closure analysis of its lessons core:
docs/design/LESSONS_ENHANCEMENTS_BACKLOG.md (2026-07-03) +
docs/design/LESSONS_INERT_GAPS_REQUIREMENTS.md (2026-07-09, "Ready to implement").
Those define INERT-1…4. This ledger does not duplicate them — it cites them.
But grounding INERT-1 against the code flipped it from open to closed (see Recently Closed): the querier does rank by effectiveness; the requirements doc is the stale artifact. INERT-2/3/4 were NOT re-grounded (re-check declined). Because INERT-1 was over-reported, treat INERT-2/3/4 as unverified hypotheses, not confirmed debt — ground each against code before working it. The map here has already lagged the territory once.
| Level | Gate | Meaning | Cost |
|---|---|---|---|
| L0 | idea | not started | — |
| L1 | drafted | spec/design exists, no code | — |
| L2 | un-wired | code doesn't exist / isn't called anywhere | highest |
| L3 | un-validated | wired, but never proven correct | run a check |
| L4 | un-enabled | wired + valid, behind a default-off flag/config | flip a flag |
| L5 | un-recorded → done | wired, valid, enabled — only a stale doc says otherwise | fix a comment |
Ground before you trust a level. Every row is a hypothesis. Grep the whole-codebase consumers before believing "dormant/missing"; and read the implementation, not the requirements-doc status field — the map drifts in both directions (INERT-1 proved it).
| ID | Artifact | What it is | Now | Gate to next level | Value if closed |
|---|---|---|---|---|---|
| CL-1 | storage/base.py (420 LOC), storage/file.py (341 LOC) |
Core persistence protocol + file backend for handoffs/sessions/insights — zero tests | L3 | Unit tests for the file backend + protocol conformance → L5. Highest real risk — this is production data, and it's NOT covered by the inert-gaps doc. | Core persistence proven, not assumed |
| CL-2 | cli/{task,install,skill,dashboards,review}.py |
CLI command handlers (task routing, install/health, dashboard provisioning, PR review) — no integration tests | L3 | Integration tests per handler | Setup / provisioning / review flows exercised |
| CL-3 | cli/sync.py:20,34 — jira() / github() |
Registered CLI commands that parse args then print "not yet implemented" | L2 | Implement the sync or remove the registered commands (don't ship surfaces that only error) | No dead/lying CLI surface |
| CL-4 | contracts/a2a/content_verification.py |
Gate-3 content verifiers (verify_schema_fields etc.). Grounded: internally composed (:713/:782), NOT 3 dead functions — but integration into the live gate pipeline is unverified |
L2? | Grep whether the gate runner invokes this module; wire it, or record it as an available-but-unwired library | Gate-3 verification actually runs, or is honestly parked |
| CL-5 | contracts/capability/otel.py:32,65 — emit_capability_result / _chain_result |
Capability-boundary span emitters; exported but only a test calls them | L2 | Wire into the capability tracking flow, or mark as an opt-in emitter | Capability crossings observable |
| CL-6 | graph/builder.py:332,354 |
TODO: implement K8s watching + TODO: context removal — placeholder graph-mutation seams |
L2 | Implement CRD watching + node/edge removal, or document as deferred | Live knowledge-graph updates |
| CL-7 | state.py:212, tracker.py:152 — transport=None default |
Task-state → comms emission (REQ-STU-001) is wired but off unless transport is passed; lifecycle events never surface to comms list --kind task_state |
L4 | Decide the default (pass a transport at the composition root) + smoke test | Task lifecycle observable by default |
| CL-8 | 23 data-model inconsistencies | areas-of-improvemet-2026-0115.md: 4 status enums, 3 priority systems, label/event drift — esp. LabelName.TASK_ID="task" vs "task.id" |
L2 | Adopt a single source of truth (contracts/types.py); the label mismatch is a live query-break risk — fix first |
Query paths stop silently missing rows |
| CL-12 | src/contextcore/weaver/retail_conventions.yaml |
Pre-Weaver prototype artifact — a retail.crm.* schema in the OLD ad-hoc format (models:/name/inline enum:) living in src/, outside the governed registry (not in registry_manifest.yaml, not validated by weaver check vs contracts/types.py). Superseded by the canonical semconv/registry/ pattern. |
L1 | Retire it — or, if the retail.* conventions are still wanted, re-author them as a canonical semconv/registry/retail.yaml group (prefix + attribute_group + requirement_level + members mirroring a types.py enum). Don't leave a second, ungoverned semconv format. Owner: the Weaver-effort / retail lane. |
One governed source of truth for semconv; no pre-Weaver shadow schema. Flagged 2026-08-19 while grounding the incoming business.* registry work (BI-1). |
| ID | Item | Source | Status per doc | Grounding status |
|---|---|---|---|---|
| CL-9 | INERT-2 — no CI gates the ~2007-test suite | LESSONS_INERT_GAPS_REQUIREMENTS.md |
ready-to-implement | UNVERIFIED — check for a CI workflow before believing it's open |
| CL-10 | INERT-3 — lessons don't reach Loki (store path is Tempo-span-only) | same | ready-to-implement | PARTIAL — the store path has no Loki push (grounded); the capture-lessons skill wrapper does push. Confirm which layer the requirement means. |
| CL-11 | INERT-4 — agentLessons CRD stanza unpopulated |
same | ready-to-implement | UNVERIFIED — grep whether anything populates AgentLessonsSpec |
Cross-repo design specs whose build lands in ContextCore but whose design home is
startd8-sdk/docs/design/business-context-propagation/. Listed here for discoverability (the "no all-requests index" gap, 2026-08-19). Not in-flight — queued behind the Weaver registry effort (docs/design/weaver/WEAVER_REGISTRY_REQUIREMENTS.md, Phase 1 not started) which they extend, so WIP=1 is unaffected. Ground each against its design doc before starting.
| ID | Spec (design home in startd8-sdk) | What it is | Depends on / extends | State |
|---|---|---|---|---|
| BI-1 | REQ-business-semconv-registry-group.md |
Author the business.* Weaver registry group — the dynamic axis (business.flow + business.flow.criticality) + the two-validator seam |
extends WEAVER_REGISTRY_REQUIREMENTS §4.5 (static business.*, Phase 2) |
spec, not started |
| BI-2 | REQ-business-flow-and-flow-criticality.md |
The carrier — seed/propagate/materialize business.flow via W3C baggage + OTTL |
BI-1 (schema); mesh header rule + OTel Operator CRD | spec, not started |
| BI-3 | map-fidelity gate (BI-2 FR-9) | weaver registry live-check reconciling the declared route→flow map vs live traffic — closes confidently-wrong-RCA |
same class as REQ_FIDELITY_VERDICT_REFINEMENT (bound_no_data) — reuse its binding_coverage vocab |
spec, not started |
Not to be confused with the shipped
BUSINESS_OBSERVABILITYcapability (OKR/revenue pacing,contextcore business pace) — a different sense of "business" (metrics observed), not business instrumentation (declared context as a dimension on telemetry). Adjacent, not the same.
| ID | Artifact | Why it's parked, not broken | Revisit when |
|---|---|---|---|
| P-1 | Default-off OTel flags: CONTEXTCORE_MESSAGING_EMIT, _CICD_EMIT, EMIT_MODE=dual |
Fully wired; intentionally opt-in for back-compat during the OTel-semconv migration. Not dormant. | Per-flag: graduate to default-on once the semconv migration completes |
| P-2 | compat/otel_genai.py:701 — TestDualEmitLayer |
A test class living in a src/ module (name starts with Test) — a misfile, harmless |
Housekeeping: move to the test tree or rename |
| ID | Artifact | Closed how | Level reached |
|---|---|---|---|
| ✅ | INERT-1 — effectiveness ranking | Closed in code, not recorded. LessonQuerier.recall (learning/querier.py:343) ranks by a composite relevance + effectiveness_score + recency score and cites INERT-1/FR-I1.2; query_detailed has the rank={recency,effectiveness} param (:277). The LessonsAPI.recall docstring ("effectiveness-ranked") is accurate. Only the requirements doc still says "Ready to implement" → un-recorded (L5): mark the doc done. |
L5 |
During this very scan I first reported INERT-1 as an open gap and claimed the
recalldocstring was "ahead of the code" — because I read the requirements doc's "Ready to implement" status field instead of the querier implementation. Grounding the code reversed it: INERT-1 is closed in code; the doc is the stale artifact. The map lagged the territory in the closed-looks-open direction, and the audit itself fell for it before catching it. Standard reaffirmed: read the implementation, never the status field.
- One loop in flight. Close (or park with a dated gate) before opening a new one.
- Close top-down by value × readiness. Next up: CL-1 (storage-layer tests — highest real risk, fully ready, no external gate). Then CL-8's
LabelName.TASK_IDlabel mismatch (live query-break, tiny fix). - Every new dormant path lands here the moment it's built-but-unwired.
- Advertise honestly. Repo maturity = its lowest open loop (currently L2).
- Ground, don't inflate — and don't trust a status field. A docs/req-derived ledger over-reports; grounding deflates it (INERT-1 went open→closed on grounding). Re-ground INERT-2/3/4 before working them.
Seeded from dev/dev-os/templates/CLOSURE-LEDGER.template.md. Canonical assets are
single-source — cite them, don't copy (dev/dev-os/REQUIREMENTS-PIPELINE.md §2).