Shubo · Roadmap

Snapshot of ROADMAP.md · 2026-06-15 · the markdown is canonical (regenerate after edits)
file-based Linear · DIRECTION / DESIGN / FEAT / ROADMAP / HELP
To decide what's next, read this board — the Now cycle + the ranked backlog — and open a single FEAT- only when it's the in-flight one. Never read every FEAT to choose (that's how focus is lost). Closed FEATs archive, so the board stays a short list of in-flight work — a focused board, not a pile of stale tickets.
Now — current cycle
▶ WAVE 1 · personal-first

Light up file import → library → AI-index bridge → ask

The first end-to-end personal-first path — free to validate, zero collab/billing.

Feature☑ done this waveStatus
reference-managerBibTeX import/export · CRUD · dedup · enrich · AI-index bridge · OA full text · listing · "My work" · Unpaywall OABuilding · import + bridge plan-ready
onboardingsilent workspace · DOI-paste import · route ① OpenAlex/ORCID claim → My work · Route ② file importBuilding · Route ② plan-ready
RM AI-index bridgeReference full text / abstract → ingestion / RAG / chatNext · plan-ready owner boundary
first-session experienceSlice 1 readiness rollup + manual warm Library Ask → Slice 2 chipsNext · Slice 1 plan ready
End-to-end acceptance: sign up → import (paste DOIs today; Route ② .bib/.ris/CSL-JSON file drop next) → library lights up → AI indexing prepares a ready subset → manual Library Ask from that subset → grounded answer with citations, visible source fragments, and scope disclosure. Warm chips are Slice 2.
‖ Parallel track (@pinglin) · Dynamic Organization M0 Building — pure backend substrate (the facet_tag layer + outbox/reconciler; no LLM, no UI), runs alongside Wave 1 with no collision. Gate = the invariant harness: no-re-embed · never-moves · reconciler-converges · undo-exact. M1–M8 stay post-Wave-1.
Not in Wave 1: PDF/Zotero/link doors · Scholar/topic routes · Write · Grounded AI Write · Dynamic Organization M1-M8 · all share-era · billing. Paper Reader Read v1 and Dynamic Organization M0 may continue in parallel, but neither blocks import → ask.
Backlog — ranked, foundation before leaves

PHASE 0 personal-first foundation

Free to validate. The R-sequence everything else gates behind.

1Reference Manager
Building · R3 bridge next
now, the root — R0/R1 landed; full-text Part 1 + listing + OA landed; Route ② file import and R3/full-text Part 2 AI-index bridge are next
Plan ready · import spinePlan ready · bridge boundary
Pull 5Gate 5Effort 3Rev 5
2Onboarding · 3 routes
Building · Route ② next
route ① OpenAlex/ORCID claim → My work shipped; Route ② .bib/.ris/CSL-JSON file import is the next door; ★ "add your work" is the killer-feature prerequisite
Plan ready · Route ②
Pull 5Gate 4Effort 3Rev 5
depends on reference-manager (Library destination needs the Reference entity)
3First Warm Library Ask
Next · Slice 1
Wave 1 activation — readiness rollup, manual right-side Library Ask from indexed subset, source fragments, and scope disclosure
Plan ready · Slice 1Slice 2 chips later
Pull 5Gate 4Effort 3Rev 5
depends on RM full-text Part 2/R3 + onboarding Route ②
4Write With Citations
Next
after RM — editor → /cite a Library paper → live reference list → style switch (the non-AI bicycle slice)
Mostly plan ready
Pull 5Gate 4Effort 3Rev 4
depends on reference-manager (cite from library + deterministic resolver)
5Paper Reader
Building · Read v1
parallel, non-Wave-1 blocker — Read v1 opens a Library PDF in a large branded reader; Mark v2 adds highlight → note → jumpback
Plan ready · Read v1Mark v2 later
Pull 5Gate 4Effort 3Rev 4
does not block Wave 1 import → ask
6Grounded AI Write
Next · needs design pass
after Write With Citations — AI suggestions emit citation nodes; retrieval/source quality, memory-substrate consumption, and first AI command contract are not plan-ready
Not plan ready
Pull 5Gate 5Effort 2Rev 4
depends on Write + retrieval/source contracts; Dynamic Organization memory-substrate dependency is ratified, consumption design still needs pinning
7Submission Export
Next · design pinned
after Write With Citations — cited draft → docx/LaTeX/venue handoff
Pull 4Gate 3Effort 2Rev 3
depends on Write With Citations (cited draft model)
8Manuscript Review
Next · design pinned
after Grounded AI Write — claim/citation audit (unsupported claims, weak evidence, misattribution)
Pull 4Gate 3Effort 2Rev 4
depends on Grounded AI Write (a cited draft + source provenance)
9Dynamic Organization
Building · M0 (parallel track)
auto-tags the library for search/filter + smart-folder views — folders stay user-owned, Shubo only tags; M0 substrate builds in parallel with Wave 1, M1–M8 follow (@pinglin)
Plan ready · M0M1-M8 laterGrounded Write dep ratified
Pull 4Gate 4Effort 2Rev 4
depends on reference-manager + onboarding (a populated library) · obeys DESIGN-faceted-organization

PHASE 1 share era

Gated after personal-first is complete. Share verbs unlock these.

10Real-time Collaboration
Next · designed
when share lands — the collaboration base (Hocuspocus + Yjs)
Pull 3Gate 5Effort 3Rev 5
depends on personal-first complete
11Comments
Next · designed
right after collab — "share to comment", anchors free from Yjs
Pull 4Gate 3Effort 4Rev 5
depends on collaboration (Yjs anchor layer)
12Notification Center
Next · designed
with comment — mention/reply triggers; self-built center + Sonner toast
Pull 3Gate 3Effort 4Rev 5
depends on collaboration (event source)
Dependency map — blockers and parallel work (no time scale)
Wave 1 remaining path — follow the arrows
Already cleared: RM core. It is no longer a Wave 1 blocker; it stays in the lanes below only as context.
Route ② import
current blocker
AI-index bridge
current blocker
Library Ask
Wave 1 payoff
Only the orange nodes are current blockers. The blue node is the payoff target after both blockers clear. The lanes below show context, parallel work, and later work.
Reference Managernon-AI core · root
RM corecleared
Onboardingneeds RM
Route ② importblocker
RM AI-index Bridgeblocks Ask
AI-index bridgeblocker
First Warm Library AskWave 1 payoff
manual Library Askpayoff
Write With Citationsneeds RM · non-AI
Write · cite + stylemostly ready
Paper Readerneeds RM full text
Read → Markparallel
Dynamic Organization‖ parallel · @pinglin
Dyn Org M0parallel
Grounded AI Writeneeds Write + RAG contracts
AI draft + citesneeds plan
Submission Exportneeds Write
docx / LaTeX
Manuscript Reviewneeds grounded write
claim / citation audit
personal-first complete · share verbs unlock
Collaborationafter personal-first
Collaboration
Commentsneeds collab
Comments
Notificationneeds collab
Notification
 Cleared prerequisite  Current Wave 1 blocker  Wave 1 payoff target  Parallel · not blocking Wave 1  Later planned personal feature  Needs design pass · not plan-ready  Phase 1 · share era ← left = dependency depth, not time
Status — just three (keep PM simple)
Next Building Shipped archive/ · closed
Next = queued (raw idea → fully-designed; readiness shows in the FEAT's own filled sections). Building = being built now (the Now wave). Shipped = a user can actually do the thing — that, not a green backend, is the bar; only Shipped triggers a help article (R7). Design-done and code-green (e.g. RM's R0) are Scope ☑ facts inside the FEAT, never board states. A finished FEAT closes to archive/ (self-labeled Shipped ✓) with the repo's docs/ + help/ as its living record. The board shows only: what's shipped, what's building, what's next.
System map — five concepts (frame → work → outward truth)

Two former "layers" were cut to stay simple: archive/ is a state (Retired), not a doc type — see Status above; and inward "how it works" is not a planning prefix — it lives in each repo's docs/ / docs/invariants/ next to the code (the quality gate), so planning owns only the outward help/.

LayerPrefix / fileManagesTime
VisionDIRECTION-why we exist / where to gorarely changes
DesignDESIGN-cross-feature laws a FEAT obeysrevised, never ships
FeatureFEAT-<name>one buildable unit (+ Scope ☑/☐)ships complete
BoardROADMAP.mdranking + Now + disciplinealways rolling
Help (outward)help/ · MkDocswhat a user can do today · en/zh-Hans/zh-Hant · on shiptracks shipped
Discipline — R1–R7 (the system stays alive)
R1 · discovery before creation
Discuss a feature → first check it's in a FEAT; if not, create one + register in ROADMAP. A conclusion that stays in chat didn't happen.
R2 · single source of truth
A decision/scope lives in one doc (its FEAT/DESIGN); ROADMAP only references.
R3 · status freshness
Code lands → mark the FEAT ☑→✓, update status, roll Now. A board that lies is worse than none.
R4 · wave rolling
Wave end-to-end green → check the next ☐ batch → roll Now to Wave N+1. One cycle at a time.
R5 · prefix / extract-DESIGN + archive-on-close
Hit a decision bigger than the feature (constrains others) → extract a DESIGN the FEAT references. Two things archive: dropped/superseded (✗) and fully-closed FEATs (✓, once the repo docs/ + help/ exist). The bloat valve — the live board shows only in-flight work.
R6 · no BUG-/IMPROVEMENT-
Improvement = a ☐ item or a new FEAT; a bug worth fixing is just fixed.
R7 · HELP on ship
When a user-facing feature ships: confirm the repo's docs/invariants reflect it (inward — already required by the quality gate) + write the help-center article (outward, en/zh-Hans/zh-Hant) from the user's POV. Tracks shipped reality — never pre-written from the roadmap.
⚙ enforced by
the shubo-planning skill — fires whenever a feature/scope is discussed.