Follow-up from PR #4505 (3.1 distributed brand.json).
What ships in 3.1
The trust model now resolves at two layers — identity (TLS-only) and relationships (mutual-assertion-gated). A leaf can be in any of these states:
- Mutual assertion — leaf says `house_domain: A`, A's `brand_refs[]` includes it. Full trust.
- Leaf-only — leaf claims A, A is silent. Identity trusted on TLS, relationship unverified.
- House-only — A claims the leaf, leaf has no `house_domain`. Treat leaf as standalone.
- Standalone — no `house_domain` at all.
See `brand.json` § Mutual-assertion trust model.
What's missing in the viewer
`server/public/brand-viewer.html` (today 135KB) renders brand.json contents but doesn't yet:
- Show the trust tier for each `brand_refs[]` entry. Render a badge: mutual / leaf-only / house-only / standalone.
- Show the `effective_at` date on each portfolio entry and surface how stale the edge is per the consumer's chosen TTL.
- Fetch and display the leaf's canonical document for Brand Canonical Documents — the viewer should be able to follow a `brand_refs[]` pointer and render the resolved brand.
- Surface `managed_by` as the directory field it is — group by `managed_by` in a separate aggregation view, distinct from the per-house portfolio view.
- Visualize the strictest-of compliance resolution. When a leaf carries its own `data_subject_contestation` and the house also publishes one, show both side-by-side with the resolved (strictest) value.
- Show the typed trademark fields (`status`, `license_type`, `licensor_domain`, `countries`, `nice_classes`) where they're now schema-typed.
Scope
Single UI surface (`server/public/brand-viewer.html`). Likely needs:
- Trust-tier badge component
- Pointer-following fetch logic (with the 3-hop redirect cap and the requirement to follow House Redirects on the house side before comparing `brand_refs[]` — see Conformance)
- Aggregation view for `managed_by`
- Side-by-side compliance resolution view
Related
Follow-up from PR #4505 (3.1 distributed brand.json).
What ships in 3.1
The trust model now resolves at two layers — identity (TLS-only) and relationships (mutual-assertion-gated). A leaf can be in any of these states:
See `brand.json` § Mutual-assertion trust model.
What's missing in the viewer
`server/public/brand-viewer.html` (today 135KB) renders brand.json contents but doesn't yet:
Scope
Single UI surface (`server/public/brand-viewer.html`). Likely needs:
Related