Workbook v0.4.3
Reports you can actually read — on the board, on the terminal, and about an
ignored ref — plus a hardened watcher socket and a stricter board Host check,
from thirteen reviewed pull requests.
Web board
- A refused change is now reported on the card it concerns and stays there until
you dismiss it, change that card again, or the board stops carrying the card.
The one-second poll used to erase the banner a refused drag wrote before
anyone could read it; when the card leaves the board the report moves to the
notice above it and names the task (#55). - A refused board change no longer discards what you have typed into an open
detail form. Untouched fields follow the task the board holds, edits in
progress stay as typed with the caret where it was, and a save in flight still
reports into the form (#61). - A card leaving a column no longer disturbs the cards below it. Departed cards
are swept before the columns are reconciled, so another clone moving one card
out of a long column no longer re-inserts — and blurs — every card under it
(#57). - The board and the task form are more compact: columns hold a minimum width and
the board scrolls sideways instead of squeezing titles over four lines, column
headers drop therefs/workbook/status/…line, card titles are no longer
underlined, the Depends On and Blocks groups and the form footer are shorter,
Create more sits directly above Save, and the Labels caption is aligned
with its input (#50).
Command line
workbook showkeeps a description's line structure instead of collapsing it
to one line. Later lines are indented by a tab, which preserves the guarantee
the collapse provided: no description line can be read as one ofshow's own
fields (#54).workbook servesays why the board moved when the default127.0.0.1:7331is
taken, naming the collision on its own line above the board banner instead of
falling back silently. An explicit--addrstill fails rather than moving
(#53).fetch,push, andsyncno longer end an ignored-ref report with blanket
git push origin --deleteadvice. Each ignored ref is classified on its own
line asno project's taskormay be another Workbook's task; every ref is
reported as kept onorigin, and the removal command is offered only for names
no project's ID format could have produced (#62).
Hardening
- The sync watcher's Unix socket is bound in a private per-user directory rather
than world-writable/tmp. Candidate directories are refused unless they are
real directories owned by the caller and writable by nobody else, the socket is
created0600with no world-connectable window, both ends of the watcher
protocol bound the line they read, and the watcher bounds the status it serves.
Exclusivity survives a change of socket path, so an older watcher still keeps
ownership across the upgrade (#51). - The board's
Hostcheck now pins the bound address on an explicit non-loopback
bind —--addr 192.168.1.5:7331is named by that address alone — and the
Origincheck is measured against the bound address too, so a page that
rebinds its own DNS name to a LAN board no longer holds same-origin read and
write on it. A wildcard bind is the one case with no host to pin; the exposure
warning now names drive-by access from off the network, and the README says so
where the claim is made (#58).
Agent skill and tests
- The Workbook agent skill says where a dependency's title comes from: resolve
eachdata.dependenciesentry withworkbook show <id> --json, never invent a
title, and report a dependency this clone cannot read by ID instead of
abandoning the task. Bad news — a blocked task, a failed command — is announced
by title like everything else. The behavioral run behind the change is recorded
underdocs/superpowers/evidence/(#52). - A capability probe that skips without the marker is now detected structurally
rather than by convention, so coverage cannot quietly disappear on a machine
missing a tool while CI reports success (#59). - The board's card-signature fast path and the detail form's Blocks-edge
orientation guard are covered by tests that fail when the line they protect is
deleted; both previously left the package green (#56, #60).