Skip to content

docs: model-catalog-entry v0.2 design notes for baseBinding debt#20

Merged
mdheller merged 2 commits into
mainfrom
docs/basebinding-v0.2-design-notes
Jun 11, 2026
Merged

docs: model-catalog-entry v0.2 design notes for baseBinding debt#20
mdheller merged 2 commits into
mainfrom
docs/basebinding-v0.2-design-notes

Conversation

@mdheller

Copy link
Copy Markdown
Member

Summary

Documents the known v0.1 design debt where kind: "base" catalog entries are required by the JSON Schema to carry a baseBinding object, even though that field is semantically self-referential for base entries (there is no parent base to point at).

  • Explains the debt: schema requires baseBinding for all kinds; validator already soft-handles kind=base (skips baseModelId check); TypeScript contract has a comment about it; but no formal tracking existed
  • Specifies the v0.2 fix: JSON Schema if/then conditional that makes baseBinding optional for kind=base and fully required (including baseModelId) for adapter/steering/guardrail kinds
  • Documents the gate condition: at least one real kind=base example with confirmed artifact.contentHash + consuming-repo readiness confirmation
  • Links from MODEL_ROUTER.md

No schema change in this PR — this is documentation only. The v0.2 schema change will be a separate coordinated PR when the gate condition is met.

Test plan

  • make validate passes
  • Doc renders correctly

🤖 Generated with Claude Code

mdheller added 2 commits June 10, 2026 22:43
…t v0.1

Implements the ModelCatalogEntry admission contract for model-router.
Designed from forensic analysis of Apple Foundation Models delivery,
Claude Code/Codex lifecycle failures, and SourceOS differentiators
(SAE interpretability, SCOPE-D epistemic labeling, guardrail-fabric policy,
Ontogenesis ontologies, TriTRPC provenance wire).

Seven hard admission gates — a single failure denies, no silent admission:
  1. content_hash_mismatch  — sha256 format + payload verification; encrypted=true invariant
  2. attestation_invalid    — signer identity, signature, hash-chain (provenance anchor)
  3. base_version_mismatch  — adapters/steering/guardrail must declare exact base binding
  4. capability_not_granted — highPrivilege requires non-empty requiredPermissions
  5. missing_epistemic_label — SCOPE-D level required; no label = inadmissible
  6. epistemic_rejected     — retained for audit, never loadable
  7. steering_diff_unsupported — steeringTier full/local requires emitsSteeringDiff=true

Artifacts:
  contracts/sourceos/model-catalog-entry.v0.1.ts   — TypeScript source of truth
  schemas/model-catalog-entry.v0.1.schema.json     — JSON Schema (draft-07)
  examples/model-catalog-entry.admitted.json       — valid admitted entry
  examples/model-catalog-entry.denied.epistemic-rejected.json
  examples/model-catalog-entry.denied.steering-diff-unsupported.json
  tools/validate_model_catalog_entry.py            — Python admission implementation
  tools/tests/test_model_catalog_entry.py          — 35 tests, all gates covered
  Makefile: validate-model-catalog-entry wired into make validate
  .github/workflows/model-catalog-entry.yml        — path-scoped CI
Documents the v0.1 design debt where kind=base entries are required to
carry a semantically redundant baseBinding object. Records the v0.2 fix
(if/then conditional schema), the gate condition (real base entry example
+ consuming-repo readiness), and the current state. Links from MODEL_ROUTER.md.
@mdheller mdheller merged commit 8fbc0cd into main Jun 11, 2026
6 checks passed
@mdheller mdheller deleted the docs/basebinding-v0.2-design-notes branch July 4, 2026 03:23
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