docs(labels): the evidence clock names what the sweep actually reads

"a comment, a review or a commit" is the ruling nudge's house phrasing and
false on the issue surface twice over: there is no review or commit fact in
what the sweep reads, and an assignment is no longer counted here. Say
what is read, and say what does not buy another 7 days of silence.

Refs #254
This commit is contained in:
cndgrr 2026-08-03 23:40:48 +00:00
parent d4a82707f2
commit fd9da98abf
3 changed files with 16 additions and 10 deletions

View file

@ -69,12 +69,15 @@ that the claim is released and that triage owes a follow-up naming the owner
and wake condition for completion. Triage writes that full transition comment and wake condition for completion. Triage writes that full transition comment
in the same tick when it or the operator makes the move by hand. The sweep in the same tick when it or the operator makes the move by hand. The sweep
never reclaims `post-merge`: weeks of quiet can be the state working. It does never reclaims `post-merge`: weeks of quiet can be the state working. It does
make the quiet visible — after 7 days without a comment, a review or a commit make the quiet visible — after 7 days with no comment on the issue, the sweep
the sweep posts one nudge naming the triage actor, saying the wake evidence is posts one nudge naming the triage actor, saying the wake evidence is owed and
owed and linking the item. Which criterion starved is prose the machine never linking the item. Only a comment resets that clock: label churn does not, and
judges; the link is the payload. Like the ruling nudge it carries no neither does an assignment, which is the claim clock's fact and on this queue
idempotency marker on purpose — the comment is itself activity, so the rule state is the invalid composition flagged below. Which criterion starved is
self-rate-limits to one nudge per 7 quiet days — and it writes no label. prose the machine never judges; the link is the payload. Like the ruling nudge
it carries no idempotency marker on purpose — the comment is itself activity,
so the rule self-rate-limits to one nudge per 7 quiet days — and it writes no
label.
`post-merge` never composes with `blocked`; the transition comment carries the `post-merge` never composes with `blocked`; the transition comment carries the
wait. It never composes with `attention`, because releasing the claim clears wait. It never composes with `attention`, because releasing the claim clears

View file

@ -1,9 +1,11 @@
### Added ### Added
- A `post-merge` item with no comment, review or commit for 7 days now draws - A `post-merge` item with no comment for 7 days now draws one nudge from the
one nudge from the issue sweep: the wake evidence is owed. A starving issue sweep: the wake evidence is owed. A starving criterion used to be
criterion used to be found only when someone happened to run the right read found only when someone happened to run the right read (#254).
(#254). - Label churn does not reset that clock, and neither does an assignment: on
`post-merge` an assignee is an invalid composition, not activity, and it
must not buy the item another 7 days of silence (#254).
- The nudge names the triage actor from `triage-actors=`, not the human - The nudge names the triage actor from `triage-actors=`, not the human
reviewer: `post-merge` is triage's completion queue, so the starved wake reviewer: `post-merge` is triage's completion queue, so the starved wake
condition is triage's to answer (#254). condition is triage's to answer (#254).

View file

@ -749,6 +749,7 @@ check "the claim clock counts the assignment, the evidence clock the comment" 0
"$((INOW - 3600)) $((INOW - 5 * 86400))" printf '%s\n' "$two_clocks" "$((INOW - 3600)) $((INOW - 5 * 86400))" printf '%s\n' "$two_clocks"
# One body, two callers: a second activity computation is the drift the # One body, two callers: a second activity computation is the drift the
# reuse exists to prevent, so the timeline read has exactly one spelling. # reuse exists to prevent, so the timeline read has exactly one spelling.
# shellcheck disable=SC2016 # the read is asserted as a literal, unexpanded
check "the timeline read is not respelled for the evidence clock" 0 "1" \ check "the timeline read is not respelled for the evidence clock" 0 "1" \
grep -c 'issues/\$n/timeline' \ grep -c 'issues/\$n/timeline' \
"$ROOT/actions/issueflow-reconcile/issueflow-reconcile.sh" "$ROOT/actions/issueflow-reconcile/issueflow-reconcile.sh"