I3608 — An open review says how old it is, and lapses when nobody can answer it any more
Give every mesh review its age on every surface that lists it, and lapse an open review whose requesting session has closed or expired, or that has stood unanswered past a declared bound, with the reason recorded, so the open list holds only questions someone can still act on.
READY wave 0 · p2 · implementation profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3608 will be accepted.
Objective
Give every mesh review its age on every surface that lists it, and lapse an open review whose requesting session has closed or expired, or that has stood unanswered past a declared bound, with the reason recorded, so the open list holds only questions someone can still act on.
Why
On 2026-10-20, majordomus_mesh_state kind=reviews open=true listed 20 open reviews, the oldest from 2026-10-17 (r-182b4e75e8df, r-19732de5ba2e, about v0.29.0), none answered. They name releases that have shipped and sessions that are gone, next to one live question (r-2780b7196cce, PR #1748). A reader cannot tell the live one from the dead ones without opening each, which is the stale claim winning, in the review queue.
Current state
A review is open until it is answered or withdrawn. The listing carries no request time, nothing lapses it, and a requester whose session closed leaves its reviews open forever.
Desired state
Each review carries requested_at and its age on mesh state, the brief and /ui/mesh. An open review lapses, recorded as lapsed with its reason, when its requesting session has closed or expired, or when it stands unanswered past the bound declared in the mesh configuration. A lapsed review is still readable and is not counted as open.
Scope
- apps/majordomus-cli/src/mesh/journal.rs
- apps/majordomus-cli/src/mesh/cooperation.rs
- apps/majordomus-cli/src/mesh/config.rs
- docs/MESH.md
Out of scope
- Answering or withdrawing a review on someone's behalf
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- Every listed review carries requested_at, and the open list is ordered by it
- An open review whose requesting session closed lapses with reason session_closed, on every runtime that holds it
- An open review unanswered past the declared bound lapses with reason unanswered, and the bound is read from the mesh configuration, not pinned
- A lapsed review is readable by its key and is not counted as open
Validation
- bin/majordomus plan validate
- cargo test --lib mesh::journal
Evidence required
- an_open_review_lapses_test
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I3608.yaml. Read it back with majordomus plan show I3608.