← All docs  Β·  Home

Roadmap & issue map

This is the project decomposed into issues with their dependencies. Each issue maps to a GitHub issue (the epic links them all). Status reflects this branch.

Dependency graph (milestones)

M1 protocol-lib core ─┬─► M2 storage ─┬─► M3 feedback-server ─┬─► M4 cli-client
   (done)             β”‚               β”‚                      β”œβ”€β–Ί M5 discovery-server ─► M6 collection-server ─► M7 advanced-client
                      β”‚               β”‚                      └─► (interop) ───────────────────────────────────► M8 widgets/extension/demo
                      └───────────────┴─────────────────────────────────────────────────────────────────────► M9 equivalence agent
                                                                                                                M10 deployment + Pages

Resolved-by map (commit ↔ issue)

The initial milestones M1–M10 landed as one self-contained commit each (table below) and were brought onto main together in PR #14. Subsequent work now ships as focused PRs validated by CI and merged when green (e.g. #15 JSON-LD primary, #16 durable storage, custom rating scales). Each GitHub issue also carries its resolving commit.

Milestone Issue Resolving commit Status
M1 protocol-lib core #2 ac38bbe closed βœ…
M2 storage #3 a5f30d9 closed βœ… (SQLite mock added in #23, ADR 0016)
M3 feedback-server #4 099c978 closed βœ…
M4 cli-client #5 98000ef closed βœ…
M5 discovery-server #6 347073b closed βœ… (NIP-65 outbox resolver, ADR 0014; liveness/signed-announce/gossip hardening in #25, ADR 0015)
M6 collection-server #7 dd997ad closed βœ… (cache freshness + validators, ADR 0012; persistent state in #23, ADR 0016)
M7 advanced-client #8 1a70947 closed βœ… (negentropy deferred)
M9 equivalence prompt #10 feeebbd closed βœ… (prompt-only by scope)
M8 widgets/extension/demo #9 bba88dc closed βœ… (WebCrypto signing + scalar/tag added, ADR 0013)
M10 deployment #11 191d210 core βœ…; musl + RocksDB + release pipeline in #11, ADR 0019 (custom domain pending registrar)
Full JSON-LD (foreign @context) #12 1503996 closed βœ… (compaction, ADR 0011)

Convention going forward: each milestone lands as one commit whose message names the milestone; on completion, comment the commit SHA on the issue and add the row here before closing it.

Milestones / issues

M1 β€” protocol-lib core βœ… (done on this branch)

Model, @context/ontology/shapes, JCS dedup id, P-256 sign/verify, RDF mapping, shapes-driven SHACL validation. Compiles native and wasm32.

M2 β€” storage trait + mocks βœ… (memory + Oxigraph + SQLite)

FeedbackStore trait; in-memory mock (fast tests); Oxigraph impl (primary, in-memory backend); SQLite durable mock (sqlite feature, #23). Put/query/dedup/ sync semantics.

M3 β€” feedback-server (axum) βœ… [#component-1]

POST-to-container (WAP), paginated reads (AnnotationPage + Link rels), /sync cursor, dual auth (JWS + OAuth), /.well-known/freedback, SHACL-reject β†’ 422 with report.

M4 β€” cli-client (native + wasm) βœ… [#component-4]

read / write / sync; distinguish collection points (read aggregates) from publication points (POST) as distinct types. Transport trait abstracts I/O (native fs + reqwest; wasm Fetch). The native freedback CLI signs & posts.

M5 β€” discovery-server (registry) βœ… [#component-2]

/.well-known/freedback self-description; POST /announce with verifying fetch; GET /servers; GET /resolve?target=. Flat list plus a NIP-65-style outbox resolver.

M6 β€” collection-server (aggregation) βœ… [#component-7]

Multi-server cache with conditional requests (ETag/If-None-Match) + per-host token-bucket rate limiting; per-URI index; URI equivalence (transitive, via a union-find β€” see note); POST /equivalence.

M7 β€” advanced-client (local sync copy) βœ… [#component-6]

Local redb store keyed by dedup id; resume cursor per (server, target); dedup-on-merge with edit supersession; reconcile_full for backdated items.

M8 β€” widgets + Firefox extension + interop demo βœ… [#components-3,9,5]

Drop-in Web Components (<freedback-stars/thumb/scalar/comment/tag>) β€” vanilla JS, no build step; read-only renders aggregates, data-publish POSTs a W3C annotation. A Firefox (MV3) popup lists feedback for the active tab's URL. A dependency-free interop demo renders a Freedback collection page as plain W3C annotations.

M9 β€” equivalence-detection prompt βœ… [#component-8]

Scope (per maintainer): ship a prompt, not an LLM client. A self-contained prompt that any agent can drop in to decide URI equivalence, plus how it feeds the collection server. The prompt is agent-prompts/equivalence.md; the write path it targets (POST /equivalence {a,b,proof}) already exists (M6).

M10 β€” deployment + Pages βœ… (core) [#cross-cutting]

Multi-stage Dockerfile (in-memory Oxigraph β†’ ephemeral demo image, no Clang), docker compose up for the full 3-server stack, a container.yml CI job that builds the image, and a pages.yml workflow serving the @context/ontology/ shapes at stable /ns/* URLs (+ landing page). See docs/deployment.md.

Cross-cutting issues