Link documents to tasks from the TUI - #105
Merged
Merged
Conversation
Document links shipped CLI-only, and the scope cut said so: the TUI rendered a task's documents and edited none of them, keeping the cockpit about attention rather than librarianship. The cut held for registration and does not hold for linking. The moment a link most wants making is while triaging a proposal in the queue — exactly where the operator already is — and dropping to a shell to run `voro doc link` there is friction the read-only lines make visible without relieving. So `c` on a selected task opens a picker over every registered document with the ones the task already cites ticked, and enter links or unlinks the highlighted one in place. The picker stays open on the refreshed list, so several can be toggled in one visit, and it is reachable from all three places a task is selected: the cockpit, the task browser, and the browser's detail popup, which it returns to on esc with its scroll intact. On the cockpit that includes a proposal folded inside a digest row, once the digest is expanded; the digest row itself names no task, so the key correctly does nothing there and the hint line omits it. The list spans every project's documents rather than the task's own, since a task in any project may cite any plan; the task's own project's come first, where a triage most often reaches, and the rest carry their owner's name so two plans sharing a filename stay apart. Registration stays a CLI affair: it is a rarer, wordier act — a location, a title, sometimes a repo — with no pull toward the queue. That is also why this picker is the whole of the TUI's librarianship and there is no documents screen; a document's own row remains `doc list`/`doc show`. `voro-core` gains no write path — the picker calls the same `link_doc` and `unlink_doc` the CLI verbs do, so every toggle is event-logged as before. Marks are read from the per-refresh link map the detail panes render, so the picker's ticks and those lines cannot disagree. Verified against a scratch database driving the real TUI: linking from an expanded proposal and unlinking from the detail popup both land in `voro show` and the event log, and with nothing registered the picker reports `voro doc add` on the status line instead of opening empty. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KfkU9yj3w4tMmydrWUcxbs
MJohnson459
force-pushed
the
feat/tui-doc-links
branch
from
August 1, 2026 17:09
337f67b to
4b20e43
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds the TUI surface for document links, taking the picker option rather than a
documents screen — the cheaper of the two candidates and the one closest to
where the need bites.
con a selected task opens a picker over every registered document, with theones the task already cites ticked, and ⏎ links or unlinks the highlighted one
in place. The picker stays open on the refreshed list so several can be toggled
in one visit, and it is reachable from all three places a task is selected: the
cockpit, the task browser, and the browser's detail popup — which it returns to
on esc with the reading scroll intact. With nothing registered it reports
voro doc addon the status line instead of opening empty.The list spans every project's documents rather than the task's own, since a
task in any project may cite any plan (DESIGN.md §3); the task's own project's
come first and the rest carry their owner's name so two plans sharing a filename
stay apart. Registration stays a CLI affair — a rarer, wordier act with no pull
toward the queue — so this picker is the whole of the TUI's librarianship and no
documents screen was built. DESIGN.md §8's scope-cut sentence is rewritten to
say exactly that.
voro-coregains no write path: the picker calls the samelink_doc/unlink_docthe CLI verbs do, so every toggle is event-logged as before, andthe existing read-only doc lines are unchanged. The picker's ticks are read from
the per-refresh link map the detail panes render, so the two cannot disagree.
Verification
cargo test --workspace(250 + 248 pass),cargo clippy --workspace --all-targets -- -D warningsclean,cargo fmt --allapplied. Four new testscover the toggle round-trip, cross-project ordering, the empty case, and the
detail-popup return. Also driven live against a scratch database in tmux:
linking from the cockpit and unlinking from the detail popup both land in
voro showand the event log.Note on the branch
feat/tui-doc-linksstacks onfeat/doc-links(task #267, PR #100), which isnot yet merged to main. It should be reviewed and merged after that one; the
diff against
feat/doc-linksis four files and touches novoro-corecode.Nothing is pushed — the branch and its worktree are local at
.claude/worktrees/task-268-tui-doc-links.