fix(orders): a pending order's age comes from the filename, not the mtime
`coord-order-done --return` rewrites the order file's mtime, and both age surfaces read mtime, so putting an order back reset the very reading that says how long it has waited. An order returned three times could never look old - on the one surface that exists precisely so a repo nobody opens still shows something. Found by reading the board right after this repo returned an order of its own, not by looking for it: a file whose name says 2026-09-02 rendered `ORDRE 1:0d` and `pending, 0d old` minutes later. Verified live after the fix: the same order now reads 1d. Two questions, two sources, and only one of them moved. A PENDING order's age is "how long has this sat with no owner" = now - delivery time, which only the filename carries and nothing rewrites. A CLAIMED order's age is "how long has it been in flight", which is the claim's own mtime and was already right. So oldest_pending_age() sits BESIDE oldest_order_age(), and pending_age_of() beside age_of() - switching FLY to the filename would answer the delivery question in the column that asks the flight question. An unparseable filename yields "?" for the whole reading, never a fabricated 0, because an unmeasured order could be the oldest one. TDD, red first: orders-selftest section 11 (110 -> 116) and board-selftest section 30 (360 -> 368), each asserting its own ground truth before anything depends on it, with controls that a freshly delivered order still reads 0d and that FLY did not move. Mutation-verified in both files: restoring the mtime read turns exactly the defect checks red and leaves every control green. Section 28's fixtures were rewritten as part of this rather than incidentally: they encoded their ages in `touch -t` while their filenames held fixed 2026-01/2026-08 dates, which a filename-based reading makes both wrong and time-dependent. They now compute their stems from `date -v` and the section asserts two ground truths, the filename for ORDRE and the mtime for FLY. Order 20260903T185736Z-1290610855 (.claude). Version 0.32.1 across all seven files; no catalog change in this session. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
a2019d44f7
commit
5316688844
13 changed files with 332 additions and 24 deletions
39
CHANGELOG.md
39
CHANGELOG.md
|
|
@ -5,6 +5,45 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [0.32.1] - 2026-09-03
|
||||
|
||||
### Fixed
|
||||
|
||||
- **A pending order's age is read from the FILENAME, never the mtime.**
|
||||
`coord-order-done --return` rewrites the order file's mtime, and both age
|
||||
surfaces read mtime, so returning an order reset the very reading that says
|
||||
how long it has waited. An order returned three times could never look old.
|
||||
Found by reading the board immediately after this repo returned an order of
|
||||
its own: a file whose name says 2026-09-02 rendered `ORDRE 1:0d` and
|
||||
`pending, 0d old` minutes later. The filename is written once, at delivery,
|
||||
and nothing rewrites it - which is exactly the fact "how long has this sat
|
||||
with no owner" is asking about.
|
||||
|
||||
Two questions, two sources, and the second one does not move: a CLAIMED
|
||||
order's age is "how long has it been in flight", which is the claim's own
|
||||
mtime and was already right. `board.sh` gains `oldest_pending_age()` beside
|
||||
`oldest_order_age()`; `coord-order-inbox.sh` gains `pending_age_of()` beside
|
||||
`age_of()`. Switching FLY to the filename would answer the delivery question
|
||||
in the column that asks the flight question.
|
||||
|
||||
An unparseable filename yields `?` for the whole reading, never a fabricated
|
||||
`0` - the same fail-safe the mtime path already carried, and for the same
|
||||
reason: an unmeasured order could be the oldest one.
|
||||
|
||||
Pinned by `orders-selftest.sh` section 11 (116 checks, up from 110) and
|
||||
`board-selftest.sh` section 30 (368, up from 360), each with its ground truth
|
||||
asserted before anything depends on it and with known-positive controls that
|
||||
a freshly delivered order still reads `0d` and that FLY did not move.
|
||||
Mutation-verified in both files: restoring the mtime read turns exactly the
|
||||
defect checks red and leaves every control green.
|
||||
|
||||
Section 28's fixtures were rewritten as part of this, not incidentally: they
|
||||
encoded their intended ages in `touch -t` with fixed 2026-01/2026-08
|
||||
filenames, which a filename-based reading makes wrong and time-dependent.
|
||||
They now compute their stems from `date -v`, and the section asserts two
|
||||
ground truths - the filename for ORDRE, the mtime for FLY - because the two
|
||||
columns no longer read the same source.
|
||||
|
||||
## [0.32.0] - 2026-09-01
|
||||
|
||||
Two commits, and the first of them was already written when this release
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue