feat(board): FLY column and free-capacity lines, no process inspection
ORDRE counted pending orders only, so a repo with one order in flight and a repo with no orders at all both printed 0 - the same digit for two opposite facts. Measured 2026-08-23: two panes stood open and idle for 45 hours holding finished orders, with full quota authorised, and no column on the board reported it. FLY counts orders/claimed/ - the same queue in its other state, never summed with ORDRE and never a fourth axis. It does NOT mean a session is alive: nothing un-claims an order when the claiming session dies, and one order on the live mailbox had been claimed for 117 hours. The legend denies the liveness reading in those words, pinned as a check on the legend text. --plan now names free capacity as ledig_antall=N plus one ledig=<repo> (<status>) line per repo with nothing owed, no pending order, nothing in flight, a clean tree, at done or deferred. All four conditions are required: measured on the real tree, 4 of 17 done/deferred repos were not free. Lines, never blocks - the plan's second consumer discards a block with no tab=, so a block would be visible to the operator and invisible to the driver. Process inspection was considered and refused; the selftest asserts the absence of pgrep/pkill/lsof structurally with a known-positive control. The full argument, and the gap left open, are in docs/2026-08-23-free-capacity-investigation.md. board-selftest: 259 -> 281 checks, all green. npm test 11/11. Order 20260823T162951Z-941745020-from-.claude Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Hfbfr8ERC63kuAfWeHYHQb
This commit is contained in:
parent
2377735554
commit
3beef2a603
12 changed files with 532 additions and 25 deletions
49
CHANGELOG.md
49
CHANGELOG.md
|
|
@ -5,6 +5,55 @@ 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.29.0] - 2026-08-23
|
||||
|
||||
Answers a question the board could not answer before: which repos are finished
|
||||
and can take more work. Ordered as an investigation, not as a column - the
|
||||
argument for what was NOT built is in
|
||||
`docs/2026-08-23-free-capacity-investigation.md`.
|
||||
|
||||
### Added
|
||||
|
||||
- **`FLY` column: orders in flight (`orders/claimed/`).** `ORDRE` counted
|
||||
pending orders only, so a repo holding one order in flight and a repo holding
|
||||
no orders at all both printed `0` - the same digit for two opposite facts.
|
||||
Measured the day this was ordered: two panes stood open and idle for 45 hours
|
||||
holding finished orders, with full quota authorised, and no column reported
|
||||
it. FLY is the same queue in its other state, never summed with ORDRE and
|
||||
never a fourth axis.
|
||||
- **`--plan` names free capacity**: `ledig_antall=N` plus one
|
||||
`ledig=<repo> (<status>)` line per repo with nothing owed, no pending order,
|
||||
nothing in flight, a clean tree, at `done` or `deferred`. Such a repo has no
|
||||
next step to open a tab for and used to fall out of the plan silently. All
|
||||
four conditions are required - measured on the real tree, 4 of 17
|
||||
done/deferred repos were not free. Emitted as LINES, never blocks: the plan's
|
||||
second consumer discards a block with no `tab=`, so a block would be visible
|
||||
to the operator and invisible to the driver. The count prints at 0, so "none
|
||||
found" and "not computed" cannot render the same.
|
||||
- **`fly=N` on a tab block** whose repo already holds a claimed order. The
|
||||
driver types into live panes.
|
||||
|
||||
### Unchanged, deliberately
|
||||
|
||||
- **No process inspection.** `pgrep`/`ps`/`lsof` were considered and refused,
|
||||
and the selftest now asserts their absence structurally with a known-positive
|
||||
control. Every other column is a durable filesystem fact reproducible in a
|
||||
fixture tree; a process column measures one instant on one machine, needs
|
||||
`lsof` to map a process to a repo, and rests on a CPU-vs-elapsed THRESHOLD -
|
||||
which would make the board decide a session is dead, the same thing the order
|
||||
queue is already forbidden from doing.
|
||||
- **FLY does not mean a session is alive**, and the on-screen legend says so.
|
||||
Nothing un-claims an order when the session that claimed it dies: one order on
|
||||
the live mailbox had been claimed for 117 hours. Selftest section 24 pins the
|
||||
denial as a check on the legend text.
|
||||
|
||||
### Known gap, stated rather than closed
|
||||
|
||||
An open, idle pane in a `planned` repo with no claimed order and no queued work
|
||||
is still invisible, and cannot be seen from the filesystem at all. Closing it
|
||||
needs a terminal-side measurement supplied inward by the driver that already
|
||||
probes panes - the same direction `--dispatch --target-pane` already uses.
|
||||
|
||||
## [0.28.0] - 2026-08-20
|
||||
|
||||
Five fixes were committed and pushed after `v0.27.0` and none of them was
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue