Conformance

What Atlas cannot show yet

Atlas renders only public interfaces. The day it needs a private endpoint to show something, the protocol has a gap — so this page is the protocol’s to-do list, kept where everyone can see it. The list shrinking over time is the proof the method works.

Open gaps · 7
Per-peer provenance

A node's index labels every mirrored event node_id:"peers" instead of naming the originating peer. Atlas works around it by querying each node's own index, but attribution should come from the protocol, not from fan-out.

Calendar, articles and market do not cross federation links

Declared peer links carry kinds 0 and 1 only. A peer mirroring Röbel today gets profiles and posts, not the programme. Widening the declared kinds is a manifest edit — the mechanism exists.

No governance dataset on the record

Proposal texts, states and aggregate tallies live onchain and in the app, but are not yet published as signed records on the node's public index. Atlas shows chain aggregates and stops there.

Per-person event opt-in

Events owned by personal (non-organisation) accounts are refused by the publisher until an explicit per-person opt-in exists. Correct privacy default; missing feature.

No self-announcement for new nodes

A new node becomes visible to Atlas by a pull request to registry/nodes.json. A protocol-native announcement (a signed record on the node's own relay, or a well-known URL) would remove the human step; its design belongs in NSP.

The canonical NSP-0 schema is not app-importable

@netizen-labs/protocol ships TypeScript with NodeNext-style .js imports that app bundlers cannot resolve, so Atlas validates manifests with its own tolerant schema instead of the canonical one. An outside builder would hit the same wall — the protocol package needs a published build.

Proof links to replaceable records go stale on edit

Editing a profile, event or listing mints a new event id; the old id stops resolving anywhere (NIP-01 replaceable semantics, observed live 2026-07-30). Correct behaviour — but a proof page should eventually resolve the record's address (d tag) to its current version instead of dead-ending.

Graduated · 6
closedOrganisation directory

2026-07-30 — org profiles publish as kind 0 signed by each org's own derived key, with the netizen_org tag.

closedEvents and cinema programme

2026-07-30 — NIP-52 kind 31923, signed by the owning organisation. Any generic Nostr client renders the town's programme.

closedArticles

2026-07-30 — NIP-23 long-form (kind 30023) on the public index.

closedMarketplace

2026-07-30 — NIP-15 listings (kind 30018), seller opt-in, withdrawal-as-edit instead of silent deletion.

closedNode manifest served publicly

2026-07-30 — /manifest on the node's index returns the full NSP-0 document; secret references stay references, which is what makes a manifest safe to publish.

closedMulti-client interop

2026-07-30 — posts, replies, reactions and reposts dual-write to the relay, and events written in any Nostr client flow back to the app for bound citizens.