fix(queue): genesis owner-not-reviewer check, assign wording, queue-commit HEAD-moved message, calendar dates (row 33, #1508)

Built by filbert, approved by darkwing in round 1 (#1508 comment 26651).
Manifest fe7da3ef, 10 paths. Suites green on an index export.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-04 01:25:06 -05:00
co-authored by Claude Opus 5.5
parent 862f865a3c
commit 6fb50cc0a8
10 changed files with 347 additions and 52 deletions
+15 -6
View File
@@ -53,9 +53,11 @@ becomes the new list. If it was narrowed (`set ID closes` with `--reason`,
or genesis from the map), it keeps the part still among the new issues, and
the receipt ends in `(kept narrowed)`.
A row's owner can't also be one of its reviewers: `add`, `set ID reviewers`
and `assign ID SEAT` each refuse rather than create that shape, since a row
can't collect its own owner's required approval.
A row's owner can't also be one of its reviewers: `add`, `set ID reviewers`,
`assign ID SEAT` and `genesis` (for a map row) each refuse rather than
create that shape, since a row can't collect its own owner's required
approval. Replay doesn't check it, so a log written before the rule still
loads.
Exit codes: 0 ok; 1 the operation failed; 2 invalid data or refused;
3 uncertain (visible or durable, not acknowledged; for a review request,
@@ -145,7 +147,10 @@ semantics 2.
- `docs/plans/queue.json`: `{version, canonicalRoot, revision, rows, log}`,
serialized deterministically. A file that doesn't re-serialize byte for
byte, or doesn't replay from genesis to its `rows`, is refused by every
verb.
verb. Times are ISO times in UTC to the millisecond; `requiredSince` and
`createdAt` may also be a bare date. Each must be a real calendar day and
time: a value that doesn't format back to itself, such as month 13 or
2026-02-30, is refused.
- `docs/plans/QUEUE.md`: hand-written header, generated body between the
markers. Each log entry records the SHA-256 of the body it rendered, so a
body is `current`, `stale` (an earlier render) or `unknown` (no render).
@@ -212,8 +217,12 @@ is swept in:
tests and `verify --snapshot` against the base.
5. to 7. Blobs, a tree from a temporary index, `commit-tree`, the guard
checks again, then `update-ref` with H as the expected old value. If the
branch moved at any point after step 1, this fails and nothing is
published.
branch moved at any point after H was recorded, nothing is published.
Each guard check compares HEAD with H before its canary and again if
the clean run fails. A move found there exits 2 with `HEAD moved since
H was recorded`, since the canary's index holds H's tree and the hook
diffs it with the live HEAD. A move after the step-7 check fails
`update-ref` (exit 1).
8. Reconcile the shared index's two queue entries with `git reset -q --
docs/plans/queue.json docs/plans/QUEUE.md`, only if HEAD is the new
commit and those entries are still H's. Otherwise exit 3 and print the