Repository navigation
feat(classifications, iid): bring the catalogue, ladders and helpers to parity with the reference implementation and derive one podcast GUID per feed (P16d) - #39
Merged
Conversation
… to parity with the reference implementation (P16d) Application code imports helpers and data from the classifications package that the train lacked, and the train's spec data had drifted from the reference since August. This ports all of it onto the train's declarative spec shape. - Helpers: getClassificationLabel, getClassificationByType, getClassificationByReference (plus the reference resolver tiers), deriveClassificationIdentifier, buildClassificationSearchText, visibility presets incl. PRIMARY_ITEM_CATALOGUE_PRESET, native atom types, identity field aliases, DISCOVER_ACTIVITY_GROUPS; all exported from the package root. - Spec shape: optional typed commonName and atomCategory fields (the reference's label and engine category); every spec populates atomCategory. schema, metadataPredicates, inline identity and the creation-profile shape stay canonical. - Identity data: every rung order, wdSlug, recipe and identifies value audited against the reference for all 37 classifications; podcast GUID derived through normalizePodcastFeedUrl; person accepts a mononym (familyName optional) as the reference does. - Schema contexts: four specs move to the reference's context values (ethereum-account and ethereum-smart-contract to https://schemas.intuition.systems/v1, social-media-account and one more to the reference value); no spec references schema.intuition.systems any more. Creation profiles regenerated through the repo generator. - Tests: 256 pass, including inline parity oracles for labels, ladders and the catalogue (rung tokens, schema type and context per type) built from the reference data at authoring time; all 67 reference test cases present. Six ladders still carry slugless wd rungs (brand, local-business, location, event, thing, music-group); the ladder already refuses bare wd minting unless the plain-wd policy allows it, matching the reference.
…ta (P16d) The classification parity port changed data the primitives tests pinned: the Ethereum classifications' JSON-LD context is now the reference value, a person accepts a mononym (familyName optional, givenName required), and the movie ladder carries an active typed wd binding so it no longer serves as the polymorphic bare-P0 example (brand does). Eight expectations updated; 140 tests pass.
…interpreter so every entry point derives one GUID (P16d fix round)
…lassification data resolves (P16d ledger round)
This was referenced Oct 19, 2026
jonathanprozzi
marked this pull request as ready for review
October 19, 2026 20:39
…ive engine, as the reference does (P16i)
…f surfacing the polymorphic P0 refusal (P16i)
…-skip fix(iid): skip a Wikidata rung without an active slug in the declarative engine, as the reference does (P16i)
kamescg
changed the base branch from
fix/pr15-integration-gates
to
update/v1.1.0-alpha
October 20, 2026 16:22
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Important
@kamescg — review ready. Base is #36; retarget to
update/v1.1.0-alphaonce #36 lands. This is the biggest ledger movement in the series; read theconformance/known-divergences.tsdiff first.To ratify here: (1) the declarative spec shape stays canonical, extended only by optional
commonNameandatomCategory; (2) the four schema-context values (three Ethereum classifications →https://schemas.intuition.systems/v1, social-media-account →https://schema.org/); (3) podcast feed normalization lives in the IID interpreter'spodcast-guidsource, so every entry point derives one GUID per feed.Receipt: 28 ledger entries retired because both sides now agree (book, company, music-album, person ladders plus the two podcast cases); harness 1027 pass / 0 fail.
Child PR of the v1.1.0-alpha umbrella (#15). Part of the parity series: each PR in the series makes a train package behave exactly as the reference implementation's in-tree copy does today, so the published packages can replace those copies without a behaviour change.
Current (train)
@0xintuition/classificationscarried an older catalogue than the reference implementation: identity ladders differed for several classifications (Wikidata subtype slugs, rung order, the podcast feed recipe), four schema contexts pointed at a Pages-hosted schema or the wrong vocabulary, the person spec required a family name, and consumer helpers the reference exports (lookups by type, label and derived-identifier helpers, search text, visibility presets, native types, aliases, discover groups) were missing. The podcast feed GUID was also derived from the raw feed URL when a ladder was passed straight to the IID engine, but from the normalized URL through the classification helper, so one feed could get two identities.Need
The catalogue, the identity data and the helpers equal to the reference's, one derivation path for podcast feeds, and the conformance ledger moved to match.
Reconciliation
src/generated/specs/*,src/classifications.tsand the ported helpers): every ladder, schema type and context equals the reference. The four context changes:ethereum-account,ethereum-erc20,ethereum-smart-contract→https://schemas.intuition.systems/v1;social-media-account→https://schema.org/.ClassificationSpecgains optionalcommonNameandatomCategory; creation profiles regenerated.packages/primitivestests: eight expectations follow the data (contexts, person mononym, the polymorphic example moved from movie to brand).packages/iidderive.ts: thepodcast-guidvalue source normalizes scheme and host case before hashing, soidentityLadderFor('podcast-series')passed to the engine, the classification helper and the primitives anchor builder derive the same GUID. The adapter-side normalization is removed. Regressions in iid and classifications pin the exported-ladder path.conformance/known-divergences.tsbecause the public side now equals the reference: the two podcast feed-host entries (anchor and ladder) and 26 ladder cases across book (wd:written-work, 6), company (wd:organization, 8), music-album (wd:album, 6), person (olidand the OpenLibrary author case, 5) and the person ladder structure. NoactualHashre-pinned, noexpectedHashor vector touched; the README enumeration moves to 33/25 for the anchor proof and 410/44 for the ladder proof (765 agreements, 70 divergences overall).Parity
Matches the reference implementation's classifications package at its current development tip (catalogue, identity ladders, helpers) and its podcast feed normalization. Remaining differences are the ones the ledger still carries after this PR, each with its reason.
Held out
Evidence
packages/classifications: typecheck, lint, build green; 257 tests (catalogue, label and ladder parity oracles inlined from the reference; helper equivalence; the exported-ladder podcast regression).classifications:check-creation-profilesup to date.packages/iid275 tests,packages/primitives140,packages/iid-ladder139,packages/iid-registry49; rootregistry:check(14 packages),guard:supply-chain,pack:dry-runpass.Review notes
Base
fix/pr15-integration-gates(#36) so the conformance gate runs on this diff; retarget to the train branch once #36 lands. Read the ledger diff first (it is the parity receipt), thensrc/generated/specs/for the data, thenpackages/iid/src/derive.tsfor the podcast change.