Skip to content

Age ready Commands out of Ready for review like ended Needs you rows - #1180

Merged
JacobStephens2 merged 5 commits into
mainfrom
issue-1083
Oct 23, 2026
Merged

JacobStephens2 merged 5 commits into
mainfrom
issue-1083

Conversation

@JacobStephens2

@JacobStephens2 JacobStephens2 commented Oct 23, 2026 •

Copy link
Copy Markdown
Owner

Summary

Ready for review now uses the same exit rule as ended Needs you rows. A ready Command stays only while no later Command on its issue has started on this machine and it ended within inbox.days. Otherwise it drops to Done, Resolved or History depending on its age. Ready dispatched Runs follow the same rule.

 // src/logs/reading/inbox.rs  list()
+held = ended-or-started within inbox.days && no later local start on its issue
-needs_you_kind = live_problem or (problem if <inline copy of the rule>)
+needs_you_kind = live_problem or (problem if held)
 group =
   NeedsYou        if needs_you_kind
-  ReadyForReview  if ready
+  ReadyForReview  if ready && held
   Landing / Working / Done (last day) / Resolved (inbox.days) / History

 // next_change(): the Console also wakes when a ready row crosses its cutoff
-skip if live || ready
+skip if live

 // src/logs/status/inbox.rs  Console rows
-drop a child that has a Ready for review row
+drop a child that has its own Inbox row, in any group   // shown once

GLOSSARY.md (Inbox), docs/guide.md (Machine status, inbox.days) and the User config template say when a Command leaves Ready for review. site/docs/index.html is regenerated from the guide.

Seams tested: thirdshift status --json / --all grouping, and the Console Inbox over HTTP, including its elapsed-time wakeup.

Evidence

  • Before: ready_commands_leave_ready_for_review_on_a_later_local_start_or_the_configured_age (tests/status.rs) failed. All three ready records (pull/10, pull/8 replaced by a later Command, and pull/7 from 8 days ago) were listed in ready for review. In ready_dispatches_leave_ready_for_review_and_are_shown_at_most_once (tests/console.rs), a replaced ready dispatched Run appeared twice in the Console (left: 2, right: 1). With the old next_change, the new ("ready for review", 1, false) case in elapsed_time_updates_inbox_groups_and_retention_without_a_file_change timed out waiting for the row to leave.
    After: all three pass. Reverting only ready && held back to ready makes the Console test fail again (tests/console.rs:697).
  • status_reads_activity_history_and_command_logs_without_stages relied on the bug: its 2026-10-02 fixture is now older than 7 days. The test now sets inbox.days = 36500 so it still covers ready detection from the Activity log.
  • Final validation on the merged head 02ac0a5: scripts/affected-tests origin/main exited 0 in 1239 s, including compilation. npm test --prefix site passed 49/49, and every cargo test target passed. cargo clippy --all-targets -- -D warnings and cargo fmt --check are clean. Locally, GIT_CONFIG_* set tag.gpgsign=false because this machine's global tag.gpgsign true breaks three worktree::synchronization_tests that run lightweight git tag. That failure is unrelated to this change.
  • The newest main (0239924, Read labelled issues without GitHub search #1176) landed after the push. It touches none of these files and git merge-tree reports a clean merge; CI covers it.

Merge Danger

Door: two-way

Only the Inbox grouping read from local records changes. No record format or GitHub call changes.

Blast Radius: Inbox

Rows that used to stay in Ready for review forever now show in Done, Resolved or only with status --all. Group names in status --json are unchanged. A pull request merged by hand still shows until its Command ages out or is replaced, as the issue scopes.

Review

Both axes reviewed a03f8fa against origin/main. Neither reviewer left any changed file unread. site/docs/index.html was confirmed as generated output (npm run docs:check --prefix site exit 0), and its hunks were also inspected. Commit 07210d1 holds the review fixes: Spec A1 (stale inbox.days paragraph; its grep command exited 1 before the fix and 0 after), Spec A2 (an old ready dispatched Run case), the GLOSSARY wording, the held rename and the test comment. The reviewers did not see 07210d1 itself. The merge commit 02ac0a5 brings in only main's changes.

Unaddressed findings

Standards

  • Duplicated retention rule between next_change and list (src/logs/reading/inbox.rs, next_change's ended.or_else(...) and list's held): declined. The duplication was already there before this change. The issue asks Ready for review to reuse the Needs you exit rule within the grouping, and held does that (problem.filter(|_| held) and facts.ready && held).
  • Shared groups(status) test helper: declined. The existing tests in tests/status.rs (around lines 452–461 and 645–656) map rows inline, and the new tests do the same.
  • GLOSSARY Inbox entry longer than "one or two sentences" (.agents/skills/domain-modeling/GLOSSARY-FORMAT.md:28): declined. The reviewer marked it soft. The added sentence matches the existing Needs you entry, and the issue asks for the exit rule "in the same terms as Needs you".
  • Test name says "the configured age" but uses the default: declined. The default inbox.days is the configured age, and the elapsed-time Console case sets inbox.days = 1 explicitly.

Spec

None. A1 and A2 were addressed in 07210d1.

Security

None. The change only regroups local run records that the Console and status already showed to the same viewer. It adds no input, endpoint, path handling or authorization decision. A Security finding waiting on a decision still goes to Needs you before the ready check.

Closes #1083

Built with claude · claude-opus-5-5 · high

Security review outcome

No unaddressed introduced findings.

A ready Command now stays in Ready for review only while no later
Command on its issue has started on this machine and it ended within
inbox.days; otherwise it falls through to Done, Resolved or History by
age. Ready dispatched Runs follow the same rule, keep their own row in
whichever group they reach, and are still shown once in the Console.
The Console now wakes when a ready row crosses its cutoff.
The manual's inbox.days paragraph still said Ready for review stays while
the outcome is ready; it now says inbox.days bounds it too. Reword the
GLOSSARY Inbox exit sentence, name the shared hold check, and cover a
ready dispatched Run older than inbox.days in the Console test.
Keep the shared retention check and all-group child deduplication from #1083 together with main's Ready, Landing and Stopping state words. Preserve the glossary's GitHub-state direction as required by #919 and ADR 0023.
@JacobStephens2
JacobStephens2 merged commit a06fc69 into main Oct 23, 2026
18 checks passed
@JacobStephens2
JacobStephens2 deleted the issue-1083 branch October 23, 2026 22:47
@JacobStephens2 JacobStephens2 mentioned this pull request Oct 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

The Inbox's Ready for review keeps Commands whose pull request was merged, forever

1 participant