Skip to content

PR-2: freeze the 20-layer foundation taxonomy and add layer-verdict schema v2 - #61

Merged
seathatflowsinourveins merged 7 commits into
mainfrom
claude/grand-catalog-pr2
Sep 22, 2026
Merged

seathatflowsinourveins merged 7 commits into
mainfrom
claude/grand-catalog-pr2

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Owner

Scope

Second of five PRs finalizing the 2026-09-22 grand catalog handbook (base 9b7a67b).

  • Foundation taxonomy frozen at 20 layers (additive): agent-sdks, mcp-surfaces, secrets-credentials, git-github-automation; 47 → 51 decisions; migrated components keep their original layer ids and gain the new one. Model routing, packaging and docs/dashboard stay cards.
  • Landscape ledger schema v2: verdict_status, winners[] (evidence class, why selected, recipe ref, platform status), alternatives[], overturn_protocol, lanes (Claude/Codex sealed hashes, agreement), open_gaps; the trading ledger is restructured onto the 12-layer trading taxonomy with group = originating domain card (the four domain rows preserved under domain_rows).
  • scripts/landscape.py validates v2 (strict rules apply once a row is recorded); tools/sota-convergence/build_verdicts.py --write|--check generates catalogs/sota-convergence/layer-verdicts-20260922.json and the per-layer tables in docs/grand-catalog-handbook.md; build_manifest.py::merge_lanes carries the optional why_selected / comparison_that_would_overturn lane fields; validate.yml gains the verdict check.
  • Every row is pending_lanes: no winner or alternative is asserted by this PR. The lane runs (PR-5) fill them.

Evidence (local integration)

validate.py passed; validate_catalogs.py passed; validate_foundation.py 20 layers / 51 decisions; landscape.py passed (32 rows, 843 research repositories); validate_convergence.py --all-recorded valid; build_verdicts.py --check 20 + 12 rows pending; build_ecosystem.py --check passed; python3 -m unittest 1,198 OK; zizmor clean. Built by two isolated builders, each Opus-reviewed with one fix round (findings: landscape sibling files not updated, a stale README count, an undisclosed missing card note, a flattened pin map, duplicated domain fan-out — all fixed with regression tests).

🤖 Generated with Claude Code

Add four additive layers to catalogs/foundation/manifest.json (agent-sdks,
mcp-surfaces, secrets-credentials, git-github-automation), one new
decisions.json row per layer (review_status source_review, reusing existing
component/evidence references) and layer_ids additions on the five existing
decisions whose components migrate into the new layers, without removing any
prior layer id. Extend catalogs/foundation/surfaces.json and
catalogs/landscape/foundation.json with matching entries so
tools/sota-convergence/extract_layers.py and scripts/landscape.py's foundation
coverage derive 20 layers automatically. Update validate_foundation.py's
LAYERS set/message, the affected test fixtures, and "sixteen"/"16" wording in
catalogs/foundation/README.md, README.md and docs/full-stack-convergence.md
(live counts only; dated wave snapshots left untouched). Rehash
manifests/evidence.json for the ten changed tracked files via the provided
rehash_evidence.py helper.

scripts/validate_foundation.py: layers 16->20, decisions 47->51 (both green).
scripts/validate.py, scripts/validate_catalogs.py and
scripts/validate_convergence.py all pass. python3 -m unittest runs the same
1,153 tests as base with 6 known failures, all in
tests/test_blind_layer_decisions.py via blueprints/blind-catalog-convergence/
audit_reports.py's hardcoded 20-layer assumption (16 foundation + 4 domain);
that file and catalogs/landscape/{research-state,candidate-quality-review,
blind-convergence}.json are outside this unit's owned paths and need their
own +4-layer follow-up once the taxonomy-adding units land together.
scripts/landscape.py fails for the same reason (confirmed via a throwaway
diagnostic copy, not committed) and passes once those sibling catalogs are
patched.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… wording/sentences

Resolve the fix-round findings for unit pr2-taxonomy:

- Blocker: add matching agent-sdks/mcp-surfaces/secrets-credentials/
  git-github-automation entries to catalogs/landscape/research-state.json
  (research queue), catalogs/landscape/candidate-quality-review.json
  (layer_coverage) and catalogs/landscape/blind-convergence.json
  (coordinator dispositions mirroring catalogs/landscape/foundation.json),
  and bump blueprints/blind-catalog-convergence/audit_reports.py's canonical
  layer count from 20 to 24 (16+4 foundation + 4 domain -> 20+4 foundation +
  4 domain). docs/blind-catalog-layer-findings-20260921.md gains four new
  handbook rows, each explicitly labelled as a 2026-09-22 taxonomy split and
  not part of the original 2026-09-21 sealed blind review; no existing dated
  row's text changed. tests/test_blind_layer_decisions.py's two hardcoded
  canonical-count assertions move from 20 to 24 to match the real repository
  fixtures the test copies.
- Major: README.md's candidate-decision count corrected from the stale 207
  to the recomputed 222 (148 foundation + 74 domain candidates).
- Major: catalogs/foundation/manifest.json gains the required
  model-routing/packaging/docs sentences inside native-clients (omniroute
  trial, catalogs/us-equities/models.json ledger), recovery-portability
  (adoption/lifecycle.md install/update/roll-back) and hosting-services
  (.github/workflows/publish-catalog.yml, docs/ecosystem), so those concerns
  are documented as notes rather than missing entirely.
- Major: catalogs/landscape/README.md's live "16 foundation layers" wording
  corrected to 20.

Rehashed the ten changed tracked files via the provided rehash_evidence.py
helper.

scripts/validate.py, scripts/validate_catalogs.py,
scripts/validate_foundation.py (20 layers/51 decisions),
scripts/landscape.py (24 layers, 222 comparison_candidates) and
scripts/validate_convergence.py --all-recorded all pass. python3 -m
unittest runs the same 1,153 tests as base with 0 known failures (the
6 tests/test_blind_layer_decisions.py failures from the prior commit are
now green). tools/sota-convergence/extract_layers.py confirms 20 foundation
layers.

Left untouched, as dated historical records: docs/tasks/2026-09-21-*.md
(207/16-layer counts), evidence/receipts/*-2026*.json, catalogs/foundation/
community-practice-20260920.json, docs/full-stack-convergence.md line 9's
"September 21 convergence connects ... 16 foundation" sentence (the
paragraph's live count above it was already updated to 24), and
docs/ecosystem/* per the working rules (coordinator regenerates the
explorer). Not touched because not named in this fix round's findings or
owned paths: docs/native-dashboard-data.md's "sixteen foundation layers"
table (a live but out-of-scope reference) and tools/sota-convergence/
extract_layers.py's docstring comment.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…onto the 12-layer taxonomy

catalogs/landscape/{foundation,us-equities}.json move to schema_version 2:
every row gains verdict_status/winners/alternatives/overturn_protocol/lanes/
open_gaps/checked_at, migrated as verdict_status "pending_lanes" with empty
containers (no winner is selected by this migration). us-equities.json
replaces its 4 domain rows with the 12 trading-taxonomy rows from
catalogs/sota-convergence/manifest-20260922.json#/taxonomy, each carrying a
"group" (the us-equities/*.json card contributing the most entries, computed
via tools/sota-convergence/extract_layers.py) and the originating domain
row's requirement/current_choice/decision/rationale/evidence/candidates
verbatim; the 4 original domain rows are preserved unrestructured in a new
top-level domain_rows array.

scripts/landscape.py enforces schema v2 (verdict_status vocabulary, winner/
alternative structure, sota-manifest pin agreement, recipe_map resolution,
sealed-lane file existence, recorded/no_selection cross-field rules) and
sources the expected us-equities layer set live from the sota manifest
instead of the retired per-domain-document layer field; a domain document now
binds to every landscape row sharing its group.

tools/sota-convergence/build_verdicts.py (new) joins the ledger with the sota
manifest and adoption/manifest.json's recipe_map into
catalogs/sota-convergence/layer-verdicts-20260922.json and the generated
per-layer verdict tables in docs/grand-catalog-handbook.md, reusing
build_manifest.py's sanitize/leak-refusal contract for both outputs.
build_manifest.py's merge_lanes now carries optional why_selected/
comparison_that_would_overturn lane fields through when present.

Known integration gap (out of owned scope for this unit): catalogs/landscape/
research-state.json, catalogs/landscape/candidate-quality-review.json,
catalogs/us-equities/decision-index.json, tests/test_blind_layer_decisions.py
and blueprints/blind-catalog-convergence/audit_reports.py all still assume
the retired 4-row us-equities structure and need a follow-up update to the
12-layer taxonomy.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…pins, historical-card fan-out, and lane-field carry-through

- Expand catalogs/landscape/research-state.json and candidate-quality-review.json's
  us-equities rows from the 4 retired domain ids to the 12 trading-taxonomy layer
  ids, so scripts/landscape.py's expected-layer-set and quality-coverage checks
  pass again (blocker).
- Expand catalogs/landscape/blind-convergence.json and
  docs/blind-catalog-layer-findings-20260921.md to the same 12 rows, and update
  blueprints/blind-catalog-convergence/audit_reports.py's canonical-layer count
  (24 -> 32 = 20 foundation + 12 trading) so the CI/unittest blind-convergence
  reproduction passes again (blocker/major).
- Regenerate catalogs/us-equities/decision-index.json (via
  scripts/catalog_decisions.py --write, registering the 8 new
  us-equities.json#/layers/4..11/candidates supplements) so
  scripts/validate_catalogs.py's decision-index union check passes (blocker).
- scripts/landscape.py: scope the sota-manifest winner-pin check per layer_id
  (sota_pins_by_layer, mirroring build_verdicts.py's own sota_layer_index join)
  instead of one flattened component_id -> pin map, so a component id repeated
  in two layers with different pins can no longer overwrite the correct pin for
  an unrelated layer (major, latent). Added
  test_sota_pin_check_does_not_conflate_a_shared_component_id_across_layers.
- scripts/landscape.py: compute counts.historical_candidate_cards as distinct
  domain-document entries instead of summing catalog_candidates across every
  landscape row that shares a group, which previously inflated the count by
  the group's fan-out factor (major). Extended
  test_domain_document_binds_through_group_to_every_matching_row to assert the
  count stays undoubled.
- tools/sota-convergence/build_manifest.py: carry the optional lane fields
  why_selected/comparison_that_would_overturn from merge_lanes' status[key]
  onto the merged foundation components[]/trading entries[] it actually
  writes, so the fields have an observable effect on the generated manifest
  (major -- previously only attached to the intermediate status dict). Added
  test_why_selected_and_comparison_that_would_overturn_reach_the_merged_manifest_rows,
  which asserts on build_manifest()'s output rather than merge_lanes' return value.
- tests/test_blind_layer_decisions.py and tests/test_landscape.py's sota-pin
  fixture updated for the 32-layer canonical set and per-layer pin scoping.

Evidence classes: all of the above are native_proven (rtk proxy execution on
this host, receipts retained via each command's own output); no execution
claim beyond scripts/validators/tests actually run in this session.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…to the grand catalog

Foundation taxonomy frozen at 20 layers (agent-sdks, mcp-surfaces, secrets-credentials, git-github-automation added; 51 decisions); landscape ledger schema v2 with winners/alternatives/overturn/lanes fields, the trading ledger restructured onto the 12-layer taxonomy with domain groups, scripts/landscape.py extended, tools/sota-convergence/build_verdicts.py generating the frozen snapshot and handbook tables (all rows pending_lanes until the lane runs). Explorer regenerated and evidence rehashed; validators, landscape, verdict check and 1,198 tests pass.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Recorded winners must carry a non-empty recipe_ref that resolves (an empty string no longer bypasses the check) and platform_status is validated per platform (Linux: accepted/conditional/not_established; macOS: untested on this profile), each with a regression test. Live counts corrected: 51 decisions, 20 foundation and 12 trading layers (32 rows, 365 candidate decisions); the 2026-09-20 community review keeps its own sixteen-layer coverage. Explorer regenerated and evidence rehashed; 1,200 tests OK.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@seathatflowsinourveins
seathatflowsinourveins merged commit 6c07b86 into main Sep 22, 2026
4 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/grand-catalog-pr2 branch September 25, 2026 18:47
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.

1 participant