Skip to content

ADR-003 (plan only): repository scope boundary — govern the Gap Map, not the OSO org - #404

Merged
ccerv1 merged 4 commits into
mainfrom
claude/warehouse-restructure-y88c21
Aug 29, 2026
Merged

ADR-003 (plan only): repository scope boundary — govern the Gap Map, not the OSO org#404
ccerv1 merged 4 commits into
mainfrom
claude/warehouse-restructure-y88c21

Conversation

@ccerv1

@ccerv1 ccerv1 commented Aug 29, 2026

Copy link
Copy Markdown
Collaborator

What

A plan-only scope reset. It sets the repository boundary and sequences the execution into later PRs; it moves, removes, and reclassifies no asset and changes no behavior.

Root cause it addresses: inventory membership is triggered by "exists on OSO OR is read by any repo notebook," which pulls whole peripheral pipelines (entities, events, metrics, analytical scores, catalog reference inputs) into Gap Map governance and generates the endless namespace-move / schedule / compatibility / retirement work. The ownership test is wrong — a live OSO notebook reading a table doesn't make it map governance.

The boundary (ADR-003)

An asset is governed only if it is: (1) a curated declaration / published table on the release path, (2) repo-owned computation implementing/auditing map semantics, (3) a direct OSO dependency of (1)/(2) — recorded as a contract, not owned, or (4) a temporary compatibility shim with an exit. Everything else lives on OSO and is discoverable in OSO's UI.

Mechanisms specified (built in later PRs, not here):

  • a role field on governed assets (governed-output / repo-computation / compatibility);
  • warehouse/dependencies.yaml — external-input contracts (purpose, grain, freshness, verified_revision, owner: oso), carrying no migration/retirement/mirror obligations;
  • a root-scoped DAG (standalone notebooks stop creating core DAG nodes; three views: map governance / runtime dependencies / compatibility appendix);
  • anti-reintroduction gates (incl. retiring the overloaded population: long_tail as a governed population).

Classification (grounded in the current inventory, dated 2026-08-29)

Freeze

All Phase-5 platform migration is held until this boundary is accepted and the mechanism PRs (steps 2–4) land. CLAUDE.md, migration-status.md, and both phase5 operations docs carry the freeze; data-architecture.md §11.3 gets a superseded-in-basis pointer.

Gates

No inventory change → no counts move. build.validate0 error(s); count_claim_violations()[]; test_docs_integrity + test_assets_inventory pass.

Checklist

  • uv run python -m build.validate prints 0 error(s)
  • N/A — plan/docs only; no scores, products, or inventory changes
  • I did not edit build/notebook_data.json or notebooks/ai-stack-map.py

🤖 Generated with Claude Code


Generated by Claude Code

claude added 4 commits August 29, 2026 17:18
…not the OSO org

A deeper review found the root cause of Phase 5's sprawl: inventory membership is
triggered by "exists on OSO OR read by any repo notebook," which pulls whole
peripheral pipelines (entities, events, metrics, analytical scores, catalog
reference inputs) into Gap Map governance and generates endless namespace-move,
schedule, compatibility and retirement work. The ownership test is wrong: a live
OSO notebook reading a table does not make it map governance.

This is a PLAN-ONLY PR. It sets the boundary and sequences the execution; it moves,
removes, or reclassifies no asset.

- docs/architecture/adr-003-repository-scope-boundary.md: the boundary rule (4
  membership categories), a `role` field taxonomy (governed-output / repo-computation
  / compatibility), a warehouse/dependencies.yaml spec for external OSO inputs
  (contract, not owned), a root-scoped-DAG design (notebooks stop creating core DAG
  nodes; three separate views), proposed anti-reintroduction gates, and a full
  classification: the 24 long_tail assets to externalize and the 4 questionable
  gap_map assets resolved individually. Honestly flags that this partly unwinds the
  recent foundation_model_repos work (#397/#400) and retires the stack_map transition.
- CLAUDE.md: charter amended with the scope boundary + the Phase-5 freeze.
- migration-status.md: Phase 5 marked FROZEN (scope reset) pending the boundary.
- data-architecture.md §11.3: superseded-in-basis pointer to ADR-003.
- phase5 plan + runbook: FROZEN banners; execute nothing until the boundary lands.

No inventory change, so no counts move. Gates: build.validate 0 errors, count-claim
clean, docs-integrity + inventory suites pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S5bY5TtNtdqoxaeJBdNmXv
…variants

Address the four blocking findings, the execution clarification, and the nits on #404.

1. Freeze durability: ADR status is now "Accepted — implementation pending"; the freeze
   holds until the mechanism (role field, dependencies.yaml contracts, root-scoped DAG,
   anti-reintroduction gates) is MERGED, not when the ADR is accepted. CLAUDE.md,
   migration-status, and both old runbooks reworded accordingly.
2. AGENTS.md: the repo map no longer says "one entry per platform table" or that
   warehouse/models mirrors the org. It now states assets.yaml holds governed outputs +
   repo computation + compatibility shims only, external OSO inputs live in
   dependencies.yaml, warehouse/models is not an org-wide mirror, and OSO existence /
   standalone-notebook use never confers membership.
3. Taxonomy split: the repo tracks governed assets (categories 1,2,4) in assets.yaml and
   dependency contracts (category 3) in dependencies.yaml, disjoint; a dependency is never
   a governed asset. governed-output redefined as a published Gap Map artifact whose
   schema + publication lifecycle are owned here (so the evaluation.* release-path outputs
   qualify even though they derive partly from observations). "gap_map/release only" is now
   "every governed asset is population: gap_map; only governed outputs require release_path".
4. Gate invariants rewritten to also protect dependencies.yaml: every external table a repo
   computation reads appears in dependencies.yaml exactly once; every dependency has a named
   required_by; no dependency referenced only by a notebook/external product; assets.yaml and
   dependencies.yaml are disjoint; platform inputs are contracts (compatibility-shim the
   exception); required_by is recorded and mechanically re-derived and gated.

Execution clarification: step 5 removals require a verified ownership handoff (destination
repo/path, owner, merged transfer PR, working deploy, proof OSO consumers still work);
foundation_model_repos is unwound by ownership transfer, never by reversing the platform
deployment, so entities.models is never orphaned.

Nits: dependencies schema allows content_contract_sha256 + verified_at when an oso.* input has
no model revision; the role is compatibility-shim (distinct from status: compatibility); the old
runbooks now read "SUPERSEDED — NOT EXECUTABLE", not merely frozen.

Still plan-only; no inventory change. Gates: build.validate 0 errors, count-claim clean,
docs-integrity + inventory suites pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S5bY5TtNtdqoxaeJBdNmXv
…mark superseded docs HISTORICAL

- CLAUDE.md scope: governed outputs/repo computations/compatibility shims -> assets.yaml;
  direct OSO inputs -> dependencies.yaml, never assets.yaml (was still listing OSO deps as
  assets.yaml members).
- phase5 plan + runbook: internal status lines -> HISTORICAL - NOT EXECUTABLE; the
  '3 executable moves' phrasing neutralized to past-tense/superseded.
- ADR execution-sequence heading: 'frozen until this boundary lands' -> 'frozen until the
  mechanism lands'.
- data-architecture.md 11.3 pointer: ADR-003 'proposed' -> 'Accepted - implementation pending'.

Plan-only; no inventory change. Gates: build.validate 0, count-claim clean, docs-integrity +
inventory suites pass, git diff --check clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S5bY5TtNtdqoxaeJBdNmXv
Per review: a 'responsible owner' field is signal-free when it is always the same
account. Replace the 5-item ownership-handoff checklist with one load-bearing rule
for step 5 externalizations: never leave a consumed table with no producer and no
data (don't delete the live OSO table; keep every reader resolving). The
foundation_model_repos -> entities.models no-orphan case is preserved.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S5bY5TtNtdqoxaeJBdNmXv
@ccerv1
ccerv1 merged commit e6e8fe2 into main Aug 29, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants