# Gift Graph Feature Backlog
> Gift Graph - what v0.1 left out on purpose, what the live demo surfaced, and the order I would build it in
> Last Updated: 2026-10-08 · Mirrors `docs/feature-backlog.md` in the repo, with priorities added here
## Legend
- **Status:** `[ ]` Not Started | `[~]` In Progress | `[x]` Complete
- **Priority:** P0 (Critical) | P1 (High) | P2 (Medium) | P3 (Nice-to-have)
- **Links:** [[Project - Gift Graph/Build & Iterate/Technical Decisions|Technical Decisions]], [[Project - Gift Graph/Build & Iterate/Bug Tracker|Bug Tracker]], [[Project - Gift Graph/Discovery & Planning/Product Plan|Product Plan]]
## P0 - Critical (Proves the Privacy Model)
- [ ] **One account per person across domains** - P0
- *Goal:* A sign-in on any of Gift Graph's domains reaches the same account
- *Plan:* Key accounts on the Clerk user alone and fold the empty account giftgraph.aleksandar.app made into the real one, rehearsed on a branch of production first
- *See:* [[Project - Gift Graph/Build & Iterate/Bug Tracker#BUG-023|Bug Tracker > BUG-023]], [[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-039|Technical Decisions > TDR-039]]
- [x] **Three levels, with labels on the hint** - 2026-10-03
- *Shipped:* Secret · Hint · Silent, up to two labels from a public vocabulary, and a line the server checks against the secret
- *See:* [[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-021|Technical Decisions > TDR-021]]
- [x] **Requests by email with one answer either way** - 2026-10-07
- *Shipped:* A keyed hash of each verified sign-in address, the request held on the owner's side until they answer, and the same reply whether or not an account matches; agent-only for now
- *See:* [[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-036|Technical Decisions > TDR-036]], [[Project - Gift Graph/Build & Iterate/Bug Tracker#BUG-020|Bug Tracker > BUG-020]]
- [x] **Consent handshake** - 2026-09-30
- *Goal:* A requester asks, an owner approves once with a default tier, and either side can see where the connection stands
- *Shipped:* `request_connection` · `approve_connection` · `set_default_tier` · `revoke_connection` · `list_connections`
- [x] **Tier-limited drop and pull** - 2026-09-30
- *Goal:* A pull returns only the text the tier allows; silent drops never surface; matching never touches withheld text
- *Shipped:* `drop` and `pull` over Streamable HTTP, filter in the query, 12 integration tests
- [~] **Semantic matching built from disclosed text only** - P2
- *Goal:* Natural prompts match ("gift ideas about fonts" finds "type and lettering") without reopening the leak literal matching closes
- *Constraint:* Embeddings computed from category and vibe text only; verbatim text never enters the index
- *2026-10-03:* Hearing returns everything allowed, ranked, and the asking agent reasons about fit ([[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-022|Technical Decisions > TDR-022]]). Local embeddings for the website's labels wait until they beat the word list on a blind set
- *See:* [[Project - Gift Graph/Build & Iterate/Bug Tracker#BUG-003|Bug Tracker > BUG-003]]
- [x] **Drop scope decision** - 2026-10-01
- *Shipped:* Both. Owner-wide preferences choose all approved connections and a ceiling; legacy requester-scoped drops convert with confirmation
- *See:* [[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-011|Technical Decisions > TDR-011]]
- [x] **Revocation semantics** - 2026-10-01
- *Shipped:* Withdrawal is permanent and survives reapproval; nothing retracts what was already received
- *See:* [[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-013|Technical Decisions > TDR-013]]
## P1 - High (From Prototype to Product)
- [~] **Registration ladder** - P1
- *Shipped:* Sign-up through Clerk; OAuth for agents, each agent a row, 2026-10-05 ([[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-029|Technical Decisions > TDR-029]]); the seeded identities retired 2026-10-07 ([[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-034|Technical Decisions > TDR-034]]). The enterprise rung is next
- *Preview, 2026-10-02:* Per-account IDs and a self-issued MCP token from the dashboard, no sign-in provider yet ([[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-017|Technical Decisions > TDR-017]])
- *v0.2:* Sign-up and login through Clerk (Google or email); first login creates the user row; a settings page issues that user's MCP token; connection invites by email or handle
- *v0.3:* OAuth for MCP clients in place of static tokens, the way Replit's own MCP server works, with the user approving access in a browser
- *Enterprise:* SSO and SCIM through the customer's identity provider; a SCIM removal also revokes that user's connections and drops
- [x] **Owner review screen** - 2026-10-01
- *Shipped:* The `/owner` dashboard with a six-hour session, showing originals, disclosures, audiences, connection limits, and withdrawal state
- *See:* [[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-014|Technical Decisions > TDR-014]]
- [x] **Run v0.2 in production** - 2026-10-03
- *Shipped:* Production followed every release from v0.4 on; the app migrates itself at start ([[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-024|Technical Decisions > TDR-024]]), and v0.6.2 runs at schema 011
- *See:* [[Project - Gift Graph/Build & Iterate/Bug Tracker#BUG-011|Bug Tracker > BUG-011]]
- [ ] **Enterprise SSO through Clerk with Microsoft Entra ID** - P1
- *Goal:* The customer-infra story in one evening; Entra or Okta over OIDC or SAML
- *Note:* Replit's free SSO window through Clerk closed October 1, 2026
- [ ] **Anti-inference engine** - P1
- *Goal:* 48-hour release delay, a three-drop minimum per category before anything at category or vibe tier is served, jitter on top, which keeps "something design-related" from being triangulated back to "he mentioned a font on Tuesday"
- [x] **Re-run tests in the multi-artifact layout, then republish** - 2026-10-03
- *Shipped:* 97 tests in Agent's rebuild; 85 API, 26 web, and 21 routing tests in the local round of 2026-10-07
- *See:* [[Project - Gift Graph/Build & Iterate/Bug Tracker#BUG-009|Bug Tracker > BUG-009]]
- [x] **Invites** - 2026-10-03
- *Shipped:* A single-use link at a level, shown once and stored as a hash, with a lifetime, a new link for a lost one, and the open links in a person's name closed when I remove them ([[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-023|Technical Decisions > TDR-023]])
- [x] **The web app from the design handoff** - 2026-10-05, v0.5
- *Shipped:* Whisper a secret, Your secrets with a Silent drawer, Connections at one direction per card, Invite, the home page in two states, the demo, and refusals beside their controls
- [x] **An agent gets the web app's guidance** - 2026-10-05, then 2026-10-07
- *Shipped:* `next` in every result, previews that wait for my yes, the account line at connect, `help`, three prompts, and one vocabulary in plain technical English ([[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-032|Technical Decisions > TDR-032]], [[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-035|Technical Decisions > TDR-035]])
- [ ] **Grants and circles** - P1, v0.7
- *Goal:* One-to-many, with circles, per-secret exclusions, and reveal requests, in one migration designed once
- *See:* `docs/architecture.md`, section 6
- [ ] **An account page** - P1, v0.7 or a v0.6.3
- *Goal:* My name as Clerk gives it, the sign-in email and whether it is verified, Your agents, sign out, and deleting the account with everything in its name
## P2 - Medium (Field Assets and Reach)
- [x] **Teal ember** - 2026-10-07
- *Shipped:* The dark palette from the design handoff, read through semantic tokens ([[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-037|Technical Decisions > TDR-037]])
- [x] **A domain of my own** - 2026-10-07
- *Shipped:* giftgraph.aleksandar.app on the published app; the account bug it exposed sits at P0
- [x] **The release record** - 2026-10-05
- *Shipped:* The README's Versions section and a git tag per publish ([[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-031|Technical Decisions > TDR-031]])
- [ ] **A public list behind one link** - P2, pending my call
- *Goal:* The live-stream case, one posted link anyone holding it can read, Hints by default, with grants as one more kind of audience
- [ ] **The web control for requests by email** - P2
- [ ] **The audit's second half** - P2
- *Goal:* One session gate for the signed-in pages, the radiogroups with arrow keys, the connect sheet's tabs wired to their panels, the dashboard's command state in a hook, and the vestigial columns dropped
- [ ] **The twenty-word cap** - P2, pending my call
- *Goal:* Raise it, retire it, or enforce it; real secrets ran twenty-five to thirty-five words
- [ ] **Gifting through agents** - P2, v0.8
- *Goal:* A buyer's agent buys a secret it may hear and ships it to the holder's address without the buyer ever reading it
- [x] **Demo page** - 2026-10-02
- *Shipped:* Theo and Mira, three whispers, four prompts, a reset, in the preview ([[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-018|Technical Decisions > TDR-018]])
- [ ] **Probe 3 shape, chosen from the Beyond Gifts table** - P2
- *Goal:* Pick the enterprise row to pilot first; support across a wall is the reachable one ([[Project - Gift Graph/Discovery & Planning/Product Plan#Beyond Gifts|Product Plan > Beyond Gifts]])
- [ ] **Replit Skill packaging the SSO setup** - P2
- *Goal:* The "turn field patterns into templates and playbooks" line from the posting, built in Replit's own format and shareable from the repo
- [x] **Per-drop editing and tier changes** - 2026-10-01
- *Shipped:* Edits with confirmation; a tier increase previews for five minutes and waits for a second call; decreases apply at once
- *See:* [[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-012|Technical Decisions > TDR-012]]
- [ ] **Pull history and an activity indicator** - P2
- *Goal:* Let an owner see that a pull happened without revealing the prompt; v0.2 ships neither on purpose, and the asymmetric notification design on the concept page is the starting point
- [ ] **Notifications, the owner's dial** - P2
- *Goal:* Push (rare, opt in), passive (the requester's agent simply knows more when asked), or seasonal (a nudge before a birthday, only if enabled)
- [ ] **Black-box pen test against the live URL** - P2
- *Goal:* The outside-in result from Replit's Security Center to sit beside the clean static scan
- [ ] **Review deck in a separate project** - P2
- *Goal:* The five-slide engineer-review deck from the three docs, built where it cannot touch the live server
## P3 - Nice-to-have
- [ ] **Codex as one row** - P3
- *See:* [[Project - Gift Graph/Build & Iterate/Bug Tracker#BUG-024|Bug Tracker > BUG-024]]
- [ ] **Email hashes that go stale** - P3
- *Goal:* A re-hash at sign-in when the key or the primary address changes
- [x] **Feedback widget, once a human-facing page exists** - 2026-10-02
- *Shipped:* On, with the v0.2 landing page
- *Why:* Feedback capture, data, and sentiment analysis are areas I have worked in deeply as a partner to product teams, and the widget is a ready surface for it
- [ ] **Automated screen-size checks** - P3
- *Goal:* Replace the three-viewport manual check once pages change often enough to need it ([[Project - Gift Graph/Build & Iterate/Technical Decisions#TDR-020|Technical Decisions > TDR-020]])
- [ ] **PSI-based tombstones for purchases** - P3
- *Goal:* Mark a hint as bought without either side revealing purchase history
- [ ] **The business pilot** - P3
- *Goal:* One vendor and one customer support team who already share context badly over email; measure whether tier-reduced context resolves a real ticket faster than the wall did ([[Project - Gift Graph/Discovery & Planning/Product Plan|Product Plan]])