Repository navigation
feat(web): a Map tab draws each project's feature map from GitHub - #247
Conversation
The Map tab in the right panel draws the thread's project from docs/map.md on its default branch and colours every part planned, working, broken or done from what GitHub returns for its primary ref. - featureMap.read reads the map at the default branch's head commit, every ref through resource(url:), and the repo's open Issues (up to 500), under one pinned credential, behind its own capability flag. - featureMap.logic folds the four states, the gaps list and the diagram's class lines; a pinned-Mermaid test proves the node-id match. - A thread icon shows only while a linked thread works on the part and opens it; a part list and gaps list sit under the drawing. Closes #235 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
|
What: Independent review round 1 is FAIL at Reviewed the complete diff against Blocking findings
Verified and limitations
Requirements and who asked: The user's exact-head independent review of #247 against the agreed design and state-truth requirements. Reviewer: gpt-6.1-sol, medium effort, Codex harness in T3 Code. |
|
Verdict: no blocking findings on The Map tab matches design v2 and the two user decisions. There is no "live" label. A working thread is a linked icon (a count and a title menu only when several threads are working). States come from the primary ref, broken overrides them, and a missing or older read stays unknown rather than a fake state. States. The fold does not call a part done unless an Issue primary is closed as completed, or a PR primary is merged into its base repository's default branch. I checked the refs the description cites, with Deviations, accepted. The server parses Cost, partial, failure. GitHub's published point rule (add one request per parent for each connection, divide by 100, minimum 1) puts a 30-ref facts query at about 4 points, because each Issue asks for up to 10 closing PRs and each of those asks for its head check. Head 1 plus file 1 plus that 4 is the reported 6. Two visible tabs at one read a minute are 720 points an hour of the shared 5,000. Acceptable for this map. I did not send a query to read Other checks. No secrets or private data in the diff. The state transitions the design lists are asserted in Unproven. No real client. Icon placement, node click, and the minute refresh while the tab is mounted are not shown in Chromeria. This review did not start one. Optional. The user guide's gaps sentence does not mention the partial marker or the Unreadable refs row. The panel shows both. |
Review round 1 (Sol) on #247: - An Issue whose labels or closing PRs run past the page GitHub returned is marked incomplete; a part that could be broken by the unread evidence shows "incomplete" instead of done or working. Labels now read GitHub's full page of 100 at no extra cost. - An unreadable first ref token marks the part's primary unreadable: it shows unknown and opens nothing, instead of letting the next ref decide. - An Issue-primary part drops a working thread only when the thread carries the primary PR of another part that names the same Issue; unrelated PR links no longer hide work. CI: own the feature in docs/fork-features.md, allowlist the MermaidDiagram edit, drop the closed-tab history change, and stop exporting FEATURE_MAP_CLASSES. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
What: PASS, independent Sol review round 2 at Read the full v2 design, every round 1 review comment, the complete PR diff against Round 1 closure
Independent proofAll execution was in my own
LimitsNo second browser/server pass was run by this review sub-agent. Reopen, cancellation, unavailable refs and paging have executable regression/service coverage; their full event sequences were not independently replayed in a client. The supplied client input was #56's earlier 27-part map, so it is not visual acceptance of the later 37-part layout; the exact companion's parser/fold and sanitized renderer were checked separately. Node 26.8.1 was used locally, outside the root's Node 24 range; CI supplies the project gate. Requirements and who asked: The user's round 2 exact-head review, prior-finding closure, failing-before tests, current GitHub state, CI and privacy verification. Reviewer: gpt-6.1-sol, medium effort, Codex harness in T3 Code. |
|
Verdict: no blocking findings on Round 1
CI and privacyOn this SHA, Test, Test Web, Test Server 1 through 6, Lint, Typecheck, Build, Rust, and Release Smoke succeeded. The skipped jobs are preview and native static analysis. No check failed. The diff has no private path, machine name, token, or private repository name. |
* feat: a Map tab draws each project's feature map from GitHub The Map tab in the right panel draws the thread's project from docs/map.md on its default branch and colours every part planned, working, broken or done from what GitHub returns for its primary ref. - featureMap.read reads the map at the default branch's head commit, every ref through resource(url:), and the repo's open Issues (up to 500), under one pinned credential, behind its own capability flag. - featureMap.logic folds the four states, the gaps list and the diagram's class lines; a pinned-Mermaid test proves the node-id match. - A thread icon shows only while a linked thread works on the part and opens it; a part list and gaps list sit under the drawing. Closes #235 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix: the Map claims no state its evidence cannot prove Review round 1 (Sol) on #247: - An Issue whose labels or closing PRs run past the page GitHub returned is marked incomplete; a part that could be broken by the unread evidence shows "incomplete" instead of done or working. Labels now read GitHub's full page of 100 at no extra cost. - An unreadable first ref token marks the part's primary unreadable: it shows unknown and opens nothing, instead of letting the next ref decide. - An Issue-primary part drops a working thread only when the thread carries the primary PR of another part that names the same Issue; unrelated PR links no longer hide work. CI: own the feature in docs/fork-features.md, allowlist the MermaidDiagram edit, drop the closed-tab history change, and stop exporting FEATURE_MAP_CLASSES. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(user): the Map guide names incomplete, unknown and partial Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
What: a Map tab in the right panel draws the thread's project from
docs/map.mdon its default branch, with every part coloured planned, working, broken or done from GitHub, a thread icon on parts a thread is working on, a keyboard part list and a gaps list.Why: project status lived in scattered notes and a static diagram that went stale within a day (#235).
So what: the planner dispatches the round-2 Sol and Grok review on this head and, after merge, deploys; the ContextMD map file lands separately in toolboxmd/contextmd#56.
Round 2: how each finding is closed
Each defect got a test that failed before its fix (7 new checks failed for the intended reason, then passed).
complete, false when labels or closing PRs had another page. When an open Issue's unread evidence could make the part broken, the part shows incomplete instead of done or working, and the ref is listed in the gaps row. Evidence that was read and proves broken still shows broken. Tests: a bug label past the cap (was done, now incomplete), a failing PR past the closing-PR cap (was working, now incomplete), proven broken still broken, closed Issue unaffected.primaryUnreadablewhen the first token of a part's ref line cannot be read. The part shows unknown and opens nothing; the next ref never decides. Tests: parser (%% A: #0 PR #38) and fold (was done and opened PR fix(web): close Issues integration gaps (#25) #38, now unknown with no link).feature-mapnow owns its files indocs/fork-features.mdandMermaidDiagram.tsxis allowlisted, the optional closed-tab history change is dropped, andFEATURE_MAP_CLASSESis no longer exported. CI is green on6d87729.Real-client pass (round 2)
An isolated dev server ran from this worktree (
vp run dev --home-dir /tmp/fm-t3home, server 13919, web 5879). It never used~/.t3/userdataor Chromeria's live ports, and the live app was not restarted. One uncommitted dev-only patch made the server readdocs/map.mdfrom thedocs/feature-mapbranch of toolboxmd/contextmd (#56) instead ofmain, because #56 is not merged; it was reverted afterwards (git statusclean). The project was the #56 checkout. A fixture thread on GPT-6-Luna ran onlysleep, and was linked to contextmd#7 (part C) through Linked PRs and Issues.Observed, in order. Screenshots are kept by the planner's session, not committed:
Aopens it. The header reads "Map from docs/feature-map at f0feb61". All 27 parts are coloured. C is working; SR, SC, MK, PK, FR, CU and SI are done; W is working; S, R and AS are context; GD is broken. GD is correct: closing PR chromeria#238's head rollup wasFAILUREat the time, checked with GraphQL.featureMap.readwas sent at 17:20:03.145Z and 17:21:03.146Z, counted on the page's WebSocket.Not covered in the client: the partial open-Issue marker (ContextMD has 25 open Issues; the 500 cap and partial flag are proven by the service test and a live 5-page read of pingdotgg/t3code), and mobile (out of slice).
Problem
#235: the user wants one live map per project, bound to its Issues and PRs, showing at a glance what is planned, working, broken or missing. The agreed design is
DESIGN-feature-map-v2.md(statuses only GitHub can prove; a thread icon only while a thread works on a part).Change
packages/contracts/src/featureMap.ts):featureMap.read({ projectId })returns one snapshot,MaporNoMap(missing/no-diagram), with branch, commit, parts, ref facts, open Issues, a partial flag andfetchedAt. New capability flagfeatureMap; read scopeorchestration:read.apps/server/src/issues/featureMap.ts,IssueService.readFeatureMap):docs/map.mdat that oid (object(expression: "<oid>:docs/map.md")), so file and commit always match;resource(url:)with bothIssueandPullRequestfragments, plus one page of open Issues per request, up to 5 pages (500), then marked partial.All under one pinned credential, through the existing
GitHubApiclient and rate-limit pause.STATE_FIELDSandissueStatusOfare untouched.apps/web/src/components/featureMap/featureMap.logic.ts): the primary ref decides planned / working / done; broken overrides on an openbug-labelled Issue among the refs or a failing check on an open PR of the part; cancelled, unavailable and unknown are shown as notes, never as states. Gaps: untracked parts, shared Issues, open Issues on no part (with partial), cancelled/unavailable refs, ref lines for undeclared IDs, unreadable refs.useIssueRowThreadsover every server that keeps Issue links. An Issue primary follows threads on that Issue, minus threads carrying another part's primary PR; a PR primary follows threads on the part's Issues that carry that PR. One thread opens directly; several open a menu.MermaidDiagramgains anonRenderedcontainer mode (chat keeps its button, strict mode and sanitizer). The Map appendsclassDef/classlines only; labels are never rewritten. Nodes are matched by^mermaid-diagram-\d+-flowchart-(.+)-\d+$against parsed IDs.mapinRIGHT_PANEL_KINDS,singletonSurface, both add-surface menus (shortcutA), tab title and icon,ChatViewbody, closed-tab history. Persisted restore drops surface kinds the build does not know.docs/user/source-control.md#feature-map.Deviations from the design, for review
featureMap.logic.tsas designed.issueThreadTargetsaccepts closing PRs as{repository, number}, anduseIssueRowThreadsalso returns its first server error, for the unreachable-environment note.Scope and approval
Fork work tracked in #235; design agreed by the user on 2026-10-13. Upstream-first search: no
pingdotgg/t3codeIssue or PR for a project or feature map (searched PR titles for "map" and Issues for roadmap / feature map / project map).Verification
Focused tests, all green on this head:
apps/server:vp test run src/issues src/auth. Covers featureMap parse, document and fact decoding, andreadFeatureMap: head, then file at that oid, then facts; NoMap; the 5-page cap with partial; a GitHub outage fails instead of returning an empty map; a non-GitHub project is refused before any read.apps/web:vp test run src/components/featureMap src/rightPanelStore.test.ts src/closedViewStore.test.ts src/reopenClosedView.test.ts src/components/RightPanelTabs*.test.tsx src/components/issues src/components/ChatMarkdown.test.tsx(333 tests). Transitions: close, reopen, cancel (Issue not planned, PR closed unmerged), unavailable, unknown, shared Issue, PR primary merged to a non-default branch, broken with an active thread, bug label on a closed Issue ignored, a merged PR's failing checks ignored, older server shown as unknown, offline keeps the last snapshot.MermaidDiagram's real path, sanitizer included: every node id resolves to its part, the state class applies, and edges and markers never match.tsc --noEmitclean for contracts, server and web. Lint: no new warnings on changed lines.Live GitHub pass (disposable scripts, nothing committed), using this branch's parser, documents and fold against the real API:
pingdotgg/t3codeopen Issues read in 5 requests, 500 Issues, marked partial.Measured cost (
rateLimit.coston the final documents): head 1 + file 1 + facts 4 = 6 points per read for the 30-ref ContextMD map, higher than the design's estimate because the closing-PR checks are nested connections. At one read a minute per visible tab: 360 points an hour per client, 720 an hour with two clients, inside the shared 5,000.Found while working: #246 (pre-existing macOS-only failure in
ServerEnvironment.test.ts, reproduced on main) and #249 (flakyServerSecretStorerace test).Elon record
issueStatusOfand growth ofSTATE_FIELDS; label rewriting in Mermaid; the local-checkout fallback; a server poller (the tab owns its refresh).nullfor private or deleted refs and{}for the wrong type), the 6-point cost, 500-Issue paging, and real Mermaid node ids on 11.17.2.Model and harness: Claude Opus 5.5 in Claude Code (T3 Code).
🤖 Generated with Claude Code