Say how much feedback is still unanswered, in the lists a reviewer scans #83
Loading…
Reference in a new issue
No description provided.
Delete branch "worktree-agent-a92ea79c409b34466"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
28fc6751made one thread's answered-ness visible onpatch show. That answers "is this thread done" one patch at a time, which is the wrong shape for the question a reviewer starts with: which patches have unanswered feedback. Answering it meant opening every patch.PatchState::unresolved_commentsis the one definition behind the number, andpatch list, its--json, the dashboard and the web list all call it. Putting it on the folded state is what stops a fourth divergence of the kind10bb2d84argued about ids and952390adis arguing about timestamps. It is derived rather than serialized, so it never reaches the on-disk fold cache — the same argument that keepslooks_mergedoffPatchState— and it costs a pass over aVecthe list already folded, not a second walk of the DAG.The decision the issue names
A stale claim counts as answered. A resolution keeps the revision it was pinned to, and one older than the tip is shown as
resolved by Alice at r1 — 2 revisions landed since: a hint, deliberately not a state change. Counting it as unanswered would make that state change in every list view — exactly what28fc6751refused. It would also be unactionable: staleness is a property of the pair (claim revision, current tip), not of the thread, so a revision touching an unrelated file would re-raise feedback nobody reopened, and the only way back to zero would be to re-resolve every thread on every revision. That is the noisier question "not re-confirmed against the tip", not the one a review queue asks. The caveat stays on the surface with room to spell it out.A withdrawn comment is not outstanding. A tombstone has no words left to answer; counting it would leave a row clearable only by "resolving" a comment that says nothing. A
non_blockingcomment is counted — excluding it would let the count be silenced by a flag rather than by an answer.What each surface renders
patch listappends(N unresolved), omitted at zero like(N new)beside it.--jsontakes the opposite rule and always carriesunresolved_comments, because a caller cannot tell an absent key from a zero. Full ids unchanged.!Nbetween the status and the title. The list pane is ~28 columns, so a suffix would be truncated away on every real repository.Filters
CLI
--unresolvedis a flag that composes with the status axis (--unresolved -awidens to closed). The dashboard bindsuon the patch pane, a second axis rather than a fourth value of the status cycle. The web adds?filter=unresolved, a fifth value of a single-select bar that implies open. The shapes differ because a flag composes and a link bar does not; the number means the same thing on all three. An empty result names the filter instead of claiming the repository is empty.Verification
13 new integration tests plus 8 dashboard render tests, TDD throughout. A test snapshots every collab ref across
patch list,--unresolved,--jsonand both web pages and asserts nothing moved.cargo clippy --all-targetssilent.Note:
tests/tui_review_test.rsis flaky on main independently of this change — measured 4/4 failing on a cleanmaincheckout with the same two editor-abort tests, identical to this branch.Migrated from git-collab patche
d452edbb1045a5be29e42d5b61e9ee51e5003924.Original author: a73x dev@a73x.sh.
Fixes #63
Revision 1:
51e7d5ae1d6e5f1c76a1bb39faf36a66b0213141; base15bc9a3c2f8c1622b6eb5157c6176452ba7569bb