From 4ba0183ea1df3ad8744880c3e6417a438b1fcb51 Mon Sep 17 00:00:00 2001 From: Miguel Casal Date: Fri, 9 Oct 2026 09:50:14 +0100 Subject: [PATCH 1/3] Run every job on the self-hosted fleet Removes GitHub-hosted runner fallbacks. The fleet job-started hook now admits all same-repository events and refuses fork code, so pull request and feature-branch jobs no longer need a hosted runner. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 2886acb..ebc4dac 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -31,7 +31,7 @@ jobs: # is unreachable from here: a public repository cannot resolve a reusable # workflow from a private one. `universe-ci-actions` below is public and is # fine to call. - runs-on: ${{ contains(fromJSON('["push","schedule","workflow_dispatch"]'), github.event_name) && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop') && fromJSON('["self-hosted","universe-runners-1"]') || 'ubuntu-24.04' }} + runs-on: [self-hosted, universe-runners-1] steps: - name: Check out exact source uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 From d47ad0b2d96e99a05e5e3db66aef366efc0ca9e9 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Admin Date: Sun, 18 Oct 2026 10:29:18 +0100 Subject: [PATCH 2/3] docs: prepare metadata traits and B2 implementation handoff --- .../docs/markets/collection-imports.mdx | 32 +++++++++++++++++++ .../docs/markets/collection-markets.mdx | 31 ++++++++++++++++++ src/content/docs/markets/collection-media.mdx | 30 +++++++++++++++++ 3 files changed, 93 insertions(+) diff --git a/src/content/docs/markets/collection-imports.mdx b/src/content/docs/markets/collection-imports.mdx index f6d74cb..dd7a90e 100644 --- a/src/content/docs/markets/collection-imports.mdx +++ b/src/content/docs/markets/collection-imports.mdx @@ -49,6 +49,38 @@ publish. Gallery imports read the parent inscription's children and are published as **Unverified**. +{/* +IMPLEMENTATION-HANDOFF [META-10] META-D02 +Coverage: DOC-02; defects: DEF-DOC-02. +Preparation: ANNOTATED. Functional state remains FAIL or NOT TESTED as indexed. +Prerequisites: META-01, META-03, META-04, META-07. +Current evidence: this guide covers the existing manifest v1 and calls the parent +children path a gallery import. New provider registry and Ord properties adapters +need documented source roles; a gallery list is not proof of parent-child provenance. +Sources: research/provider-research.md; docs.ordinals.com/inscriptions/metadata.html; +Core OrdinalsCollectionManifest, import service and annotated publication points. + +1. Keep the existing v1 schema and four creator entry methods compatible. Add the +accepted metadata enrichment behavior and explain reviewable membership sources +separately from trait sources. Parent-child membership must use the owned Ord +reader; permissionless gallery references need their own stated trust level. +2. Document UniSat registry, Satflow membership and Ord metadata only for the exact +adapter/version and chain/network accepted by META-03. Provider market listings, +holders or token supply never substitute for the full member inventory. +3. Show one validated small example containing a string, numeric zero, boolean +false and absent attributes. Explain that missing creator attributes stay missing; +Core can display separately labelled native properties without inventing rarity. +4. Update validation, conflict, partial coverage, retry and last-good publication +messages to match actual backend error codes and the live import preview. +Verify: npm test and npm run build in docs-core; pair example/schema checks with +Core manifest/import and SSRF tests named by META-03. Walk URL, file, paste and +parent entry paths on the accepted test environment and record each separately. +Acceptance: docs never grant a source ownership, listings, confirmations, official +status or signing authority. Rollback: preserve the stable v1 schema and existing +imports; do not rewrite published source history or describe pending support as live. +END IMPLEMENTATION-HANDOFF META-D02 +*/} + ## What an import controls, and what it does not An import proposes collection **metadata and membership**. It does not control: diff --git a/src/content/docs/markets/collection-markets.mdx b/src/content/docs/markets/collection-markets.mdx index c9db8a3..ff7a13a 100644 --- a/src/content/docs/markets/collection-markets.mdx +++ b/src/content/docs/markets/collection-markets.mdx @@ -40,6 +40,37 @@ enrichment provider is offline. Listings overlay inventory and never create membership. +{/* +IMPLEMENTATION-HANDOFF [META-10] META-D03 +Coverage: DOC-03; defects: DEF-DOC-01. +Preparation: ANNOTATED. Functional state remains FAIL or NOT TESTED as indexed. +Prerequisites: META-04, META-06, META-07, META-08. +Current evidence: this guide promises authoritative inventory, stable facets and +cached item traits; the source audit identifies protocol-specific paths that do not +yet share those guarantees. Listings must remain an overlay on reconciled inventory. +Sources: Core collection-cache, trait oracle, protocol registries and frontend +annotations; workstreams/frontend and workstreams/ingestion in the handoff. + +1. Update the browse and item sections after the common DTO and all protocol +consumers pass acceptance. Describe source, coverage and freshness without exposing +implementation details to a person browsing a collection. +2. Document OR within one trait type and AND across types, self-excluding counts, +multi-value de-duplication, value paging and active filter preservation. Define the +shown denominator as reconciled unique eligible members; never listed count, token +supply or an unqualified provider estimate. Partial coverage is visible. +3. Keep creator attributes, derived Bitmap/native properties and token properties +visually labelled. Every supported collection uses the common readable panel, and a +verified attribute-free item has an honest empty state with its native identity. +4. Recheck catalog links, item deep links, direct reload, mobile filter sheet, keyboard +selection, error/retry and source outage recovery against the release being described. +Verify: docs-core npm test and npm run build plus META-07/META-08 browser acceptance; +record actual route, viewport, revision and outcome. Unperformed checks stay NOT TESTED. +Acceptance: no metadata import grants trade readiness or changes ownership/signing, +pricing or settlement. Rollback: preserve public navigation and honest unavailable +states while restoring a compatible accepted Core generation/artifact. +END IMPLEMENTATION-HANDOFF META-D03 +*/} + ## Finding an item Search, price, listing status, sorting, and traits work together. Trait choices diff --git a/src/content/docs/markets/collection-media.mdx b/src/content/docs/markets/collection-media.mdx index 9bc67cd..98a0c35 100644 --- a/src/content/docs/markets/collection-media.mdx +++ b/src/content/docs/markets/collection-media.mdx @@ -22,6 +22,36 @@ Core mirrors supported artwork, metadata, thumbnails, renders, audio, and video into one shared media system, covering Ordinals, DMT, UNAT, Doginals, Atomicals, Bitcoin Stamps, and other supported families. +{/* +IMPLEMENTATION-HANDOFF [META-10] META-D01 +Coverage: DOC-01; defects: DEF-DOC-01. +Preparation: ANNOTATED. Functional state remains FAIL or NOT TESTED as indexed. +Prerequisites: META-02, META-05, META-07, META-08. +Current evidence: this page describes shared metadata coverage, while core collection +trait/detail paths still read SQL JSON or provider data without a verified B2 +metadata generation. Media mirroring alone does not establish trait persistence. +Sources: research/storage-research.md; core collection-media-storage.service.ts +and collection-trait.service.ts; B2 read-only evidence in the preparation handoff. + +1. After META-02/META-05 acceptance, explain the separate immutable source captures, +normalized collection/item records, facet artifacts and generation manifest in the +existing private shared store. Keep artwork originals and derivatives distinct. +2. Describe Core API delivery, source provenance, observation time and explicit +complete/partial/unavailable states implemented by META-07/META-08. No bucket keys, +credentials, presigned provider URLs or internal job payloads belong in user prose. +3. Update Provenance only to the actually accepted revision/date. Tie each claimed +protocol to its metadata adapter and published coverage evidence; token properties +and native identifiers are useful even where creator attributes do not exist. +Verify: from docs-core run npm test and npm run build after updating rendered prose; +commands exist but this new behavior is not yet implemented or accepted. Compare +desktop/mobile trait panels and page links with the exact Core release evidence. +Acceptance: source outages retain the last verified traits with a truthful state, +and reload reads the same B2-backed generation. No storage fallback claim exceeds +measured behavior. Rollback: retain truthful prior documented limitations until the +compatible Core release is restored; documentation never enables runtime flags. +END IMPLEMENTATION-HANDOFF META-D01 +*/} + ## Originals and derivatives are different things The exact bytes discovered from a chain or an authoritative Universe index are From a750fc71bfc322a0c5a20460f3130c483d4e2f20 Mon Sep 17 00:00:00 2001 From: Bitcoin Universe Admin Date: Sun, 18 Oct 2026 14:13:24 +0100 Subject: [PATCH 3/3] docs: explain collection traits, properties and sealed metadata snapshots Co-Authored-By: Claude Opus 5.5 --- .../docs/markets/collection-imports.mdx | 45 ++++++------------ .../docs/markets/collection-markets.mdx | 46 +++++++------------ src/content/docs/markets/collection-media.mdx | 40 +++++----------- 3 files changed, 41 insertions(+), 90 deletions(-) diff --git a/src/content/docs/markets/collection-imports.mdx b/src/content/docs/markets/collection-imports.mdx index dd7a90e..931538c 100644 --- a/src/content/docs/markets/collection-imports.mdx +++ b/src/content/docs/markets/collection-imports.mdx @@ -49,37 +49,20 @@ publish. Gallery imports read the parent inscription's children and are published as **Unverified**. -{/* -IMPLEMENTATION-HANDOFF [META-10] META-D02 -Coverage: DOC-02; defects: DEF-DOC-02. -Preparation: ANNOTATED. Functional state remains FAIL or NOT TESTED as indexed. -Prerequisites: META-01, META-03, META-04, META-07. -Current evidence: this guide covers the existing manifest v1 and calls the parent -children path a gallery import. New provider registry and Ord properties adapters -need documented source roles; a gallery list is not proof of parent-child provenance. -Sources: research/provider-research.md; docs.ordinals.com/inscriptions/metadata.html; -Core OrdinalsCollectionManifest, import service and annotated publication points. - -1. Keep the existing v1 schema and four creator entry methods compatible. Add the -accepted metadata enrichment behavior and explain reviewable membership sources -separately from trait sources. Parent-child membership must use the owned Ord -reader; permissionless gallery references need their own stated trust level. -2. Document UniSat registry, Satflow membership and Ord metadata only for the exact -adapter/version and chain/network accepted by META-03. Provider market listings, -holders or token supply never substitute for the full member inventory. -3. Show one validated small example containing a string, numeric zero, boolean -false and absent attributes. Explain that missing creator attributes stay missing; -Core can display separately labelled native properties without inventing rarity. -4. Update validation, conflict, partial coverage, retry and last-good publication -messages to match actual backend error codes and the live import preview. -Verify: npm test and npm run build in docs-core; pair example/schema checks with -Core manifest/import and SSRF tests named by META-03. Walk URL, file, paste and -parent entry paths on the accepted test environment and record each separately. -Acceptance: docs never grant a source ownership, listings, confirmations, official -status or signing authority. Rollback: preserve the stable v1 schema and existing -imports; do not rewrite published source history or describe pending support as live. -END IMPLEMENTATION-HANDOFF META-D02 -*/} +## Where traits come from + +| Source | What it adds | +| --- | --- | +| Pinned open registry | Names and item traits, read from a fixed, reviewable revision | +| Marketplace sources | Item traits and collection details where the registry has none | +| Universe indexers | Native facts: supply, decimals, deployment, block and name records | + +When two sources disagree, the registry wins and the other answer is kept as a +recorded conflict. A source that fails never wipes traits that are already +known, and an item with no traits is shown as having none, not as missing. + +Tokens such as BRC-20, Runes or CAT-20 show their real deployment properties. +They never get invented artwork traits. ## What an import controls, and what it does not diff --git a/src/content/docs/markets/collection-markets.mdx b/src/content/docs/markets/collection-markets.mdx index ff7a13a..d48906e 100644 --- a/src/content/docs/markets/collection-markets.mdx +++ b/src/content/docs/markets/collection-markets.mdx @@ -40,36 +40,22 @@ enrichment provider is offline. Listings overlay inventory and never create membership. -{/* -IMPLEMENTATION-HANDOFF [META-10] META-D03 -Coverage: DOC-03; defects: DEF-DOC-01. -Preparation: ANNOTATED. Functional state remains FAIL or NOT TESTED as indexed. -Prerequisites: META-04, META-06, META-07, META-08. -Current evidence: this guide promises authoritative inventory, stable facets and -cached item traits; the source audit identifies protocol-specific paths that do not -yet share those guarantees. Listings must remain an overlay on reconciled inventory. -Sources: Core collection-cache, trait oracle, protocol registries and frontend -annotations; workstreams/frontend and workstreams/ingestion in the handoff. - -1. Update the browse and item sections after the common DTO and all protocol -consumers pass acceptance. Describe source, coverage and freshness without exposing -implementation details to a person browsing a collection. -2. Document OR within one trait type and AND across types, self-excluding counts, -multi-value de-duplication, value paging and active filter preservation. Define the -shown denominator as reconciled unique eligible members; never listed count, token -supply or an unqualified provider estimate. Partial coverage is visible. -3. Keep creator attributes, derived Bitmap/native properties and token properties -visually labelled. Every supported collection uses the common readable panel, and a -verified attribute-free item has an honest empty state with its native identity. -4. Recheck catalog links, item deep links, direct reload, mobile filter sheet, keyboard -selection, error/retry and source outage recovery against the release being described. -Verify: docs-core npm test and npm run build plus META-07/META-08 browser acceptance; -record actual route, viewport, revision and outcome. Unperformed checks stay NOT TESTED. -Acceptance: no metadata import grants trade readiness or changes ownership/signing, -pricing or settlement. Rollback: preserve public navigation and honest unavailable -states while restoring a compatible accepted Core generation/artifact. -END IMPLEMENTATION-HANDOFF META-D03 -*/} +## Traits on every item + +Open any item to see its traits as cards: the trait, the value, and how rare it +is. Rarity is the share of the collection's known members carrying that value. +When the full membership is not known yet, the card shows the count only. + +Token markets show **Properties** instead: the deployment facts of the token, +such as supply and decimals, read from Universe indexers. + +| State | What you see | +| --- | --- | +| Ready | Traits and properties with counts | +| Partial | What is known so far, marked as partial | +| None | The item has no traits | +| Updating | The last good values, with the time of the last update | +| Unavailable | A short notice and a retry button | ## Finding an item diff --git a/src/content/docs/markets/collection-media.mdx b/src/content/docs/markets/collection-media.mdx index 98a0c35..fee7a74 100644 --- a/src/content/docs/markets/collection-media.mdx +++ b/src/content/docs/markets/collection-media.mdx @@ -22,35 +22,17 @@ Core mirrors supported artwork, metadata, thumbnails, renders, audio, and video into one shared media system, covering Ordinals, DMT, UNAT, Doginals, Atomicals, Bitcoin Stamps, and other supported families. -{/* -IMPLEMENTATION-HANDOFF [META-10] META-D01 -Coverage: DOC-01; defects: DEF-DOC-01. -Preparation: ANNOTATED. Functional state remains FAIL or NOT TESTED as indexed. -Prerequisites: META-02, META-05, META-07, META-08. -Current evidence: this page describes shared metadata coverage, while core collection -trait/detail paths still read SQL JSON or provider data without a verified B2 -metadata generation. Media mirroring alone does not establish trait persistence. -Sources: research/storage-research.md; core collection-media-storage.service.ts -and collection-trait.service.ts; B2 read-only evidence in the preparation handoff. - -1. After META-02/META-05 acceptance, explain the separate immutable source captures, -normalized collection/item records, facet artifacts and generation manifest in the -existing private shared store. Keep artwork originals and derivatives distinct. -2. Describe Core API delivery, source provenance, observation time and explicit -complete/partial/unavailable states implemented by META-07/META-08. No bucket keys, -credentials, presigned provider URLs or internal job payloads belong in user prose. -3. Update Provenance only to the actually accepted revision/date. Tie each claimed -protocol to its metadata adapter and published coverage evidence; token properties -and native identifiers are useful even where creator attributes do not exist. -Verify: from docs-core run npm test and npm run build after updating rendered prose; -commands exist but this new behavior is not yet implemented or accepted. Compare -desktop/mobile trait panels and page links with the exact Core release evidence. -Acceptance: source outages retain the last verified traits with a truthful state, -and reload reads the same B2-backed generation. No storage fallback claim exceeds -measured behavior. Rollback: retain truthful prior documented limitations until the -compatible Core release is restored; documentation never enables runtime flags. -END IMPLEMENTATION-HANDOFF META-D01 -*/} +## Traits and properties are stored too + +Collection details, item traits and token properties live in the same private +store as artwork, in their own space. Each refresh is saved as a complete, +sealed snapshot: the raw source answers, the cleaned collection and items, the +trait counts, and a manifest that lists every piece by its exact fingerprint. + +The pages you browse read that snapshot back and check every fingerprint before +showing a value. A snapshot replaces the previous one only after it is complete +and checked, so you never see half of an update. If a source goes quiet, the +last good snapshot stays on screen. ## Originals and derivatives are different things