Commit Graph
1989 Commits
Author SHA1 Message Date
jason.woltje 263ea8a9a3 queue: revs 2215-2219: row 66 Sage start (2215), in-review round 1 on candidate manifest e68c6bce5ec4 (8ec03b45a) and request comment 29437 (2216-2217); row 163 brief re-pinned to b1500d96ad (6020bb43a) and briefed (2218-2219) 2026-10-20 08:14:11 -05:00
jason.woltje 6020bb43ac plans: D2 brief owner is sage (row 163, #1660), and D2 lands after the Part B window (mos-0958, mos-0959) 2026-10-20 08:12:39 -05:00
jason.woltje 5487ed39d1 sage: row 188 landing record: P19 411 (N1) and comments 361-363 script and record, 409/410 description restore after a partial done update, SESSIONS line 2026-10-20 06:14:11 -05:00
jason.woltje 31e3289580 queue: revs 2209-2214: row 188 Darkwing start, in-review and request 29432 (2209-2211); Filbert approve 29433 (2212); Sage landing note (8fc0ee216, patch-id c9a56b167c07, stack-release.sh blob 2586a2a37c, gate passed) and done (2213-2214) 2026-10-20 06:12:21 -05:00
jason.woltje 23a609c5ce sessions: Filbert row 188 r1 review, approve 2026-10-20 06:08:34 -05:00
jason.woltje b9c1c9fe22 sage: Part B draft 2 A2 passed (mos-0958), row 188 launched, Vikunja comments 358-360 script and record, SESSIONS line 2026-10-20 05:36:55 -05:00
jason.woltje 525990ecb5 queue: revs 2207-2208: row 188 add and briefed (Sage), #1686, P19 409/410, gates Part B (mos-0956) 2026-10-20 05:35:36 -05:00
jason.woltje 240f21650f brief: stack-release tests for a carried proof pair and a proof file inside the repository (P19 409, 410, #1686, mos-0956) 2026-10-20 05:31:21 -05:00
jason.woltje 288ab1b5a7 sage: Part B window file for Mos's A2 check (live-copy B3 and B-R1, Q1 on J2 order), SESSIONS lines for Darkwing (row 187, 10:25:22Z) and Sage 2026-10-20 05:29:37 -05:00
jason.woltje a843ae284e sage: row 187 landing, P19 407-410 filed and P19 385 comment 357, #1685 closed (comment 29425), SESSIONS line 2026-10-20 05:24:32 -05:00
jason.woltje 652d6f3a85 queue: revs 2201-2206: row 187 Darkwing start, in-review and request comment 29423 (2201-2203); Filbert approve comment 29424 (2204); landing note (9a71e4e80, patch-id 6b57c47bc661, gate passed) and done (Sage 2205-2206) 2026-10-20 05:24:01 -05:00
darkwing 9a71e4e801 row 187 (#1685): activate sets, carries and drops the Console's proof pair
Row 178 gave the Console --proof-header NAME --proof-file PATH, but on the pinned stack only
activate --tester-port could write a new Console flag into the pointer. A hand install of the pair
would make every later activate, pm-on and rollback refuse unit-flags-drift. activate now takes
the pair, which replaces any pair in the pointer, and --no-proof, which drops it. The pair goes
after the preview flags and before --send and --tester-port, the order webui-service.sh render
writes and flags_drift compares. With neither flag, a target Console that takes --proof-header
carries the pair; a rollback to one that doesn't drops it and says so, and an activate to one
refuses proof-target unless --no-proof is given.

An activate may name the pointer's copy only when it sets a pair or drops one with --no-proof, so
Part B's B3 and its corrected rollback line B-R1 (activate <live copy> --pm --no-proof) can run;
every other activate of the live copy still refuses already-active. Before anything stops, the run
refuses proof-needs-preview, proof-header-invalid (proofOptions' own rules) and proof-file-invalid:
not absolute, a character the unit can't carry, a symlink, missing, not a regular file, inside the
repository or the copies, mode other than 600 or 400, or another owner. The file gets lstat, stat
and realpath only; the script never opens it and no line it writes holds the value. --plan prints
one proof: line. docs/TOOLS.md "Pinned stack update" lists the flags and describes the pair.

stack-release.test.mjs adds T53, eleven subtests. Each ends with a scan of every written file and
output for the proof file's sentinel and an inotify watch that counts no open or read of it. The
five brief mutants and Darkwing's two are killed. Filbert's M8 (a carried pair skips the checks)
and M9 (the repository case dropped) survive T53; both are follow-ups on P19, with a stale comment
in proof_for_target and the stale row 178 paragraph in docs/TOOLS.md.

This is step A0 of mos-0928 Part B and builds the tool only; nothing turns the proof on for the
live Console. Filbert approved round 1 on #1685.
2026-10-20 05:22:10 -05:00
jason.woltje d17328a555 sessions: Filbert row 187 r1 review, approve 2026-10-20 05:13:44 -05:00
jason.woltje 9760d4967a sage: row 186 landing, P19 404 comment 354 and SESSIONS line, with Darkwing's row 186 SESSIONS line (09:13:21Z) 2026-10-20 04:13:27 -05:00
jason.woltje 16a936c79b queue: revs 2198-2200: row 186 Filbert approve comment 29419 (2198); landing note (269134d8d, patch-id c97b9f6e25cd, gate passed) and done (Sage 2199-2200) 2026-10-20 04:11:59 -05:00
darkwing 269134d8dd row 186 (#1684): the activate plan's backup line says what the run will do
activate --plan printed the backup line whenever the store file existed. But run_steps rolls back
with store-newer or migration-needs-flag before backup_store, so in those two cases the plan said
both that the run rolls back and that it backs up the store. The plan now prints
"backup: none; the run rolls back before the backup" there. The no-store line comes first, since
with no store file the run skips the whole store block. When S_CHANGED is set the plan keeps the
backup line: a wrong backup line costs nothing, a wrong none line hides the directory a --restore
needs. run_steps, backup_store, refusals, exit codes and flags are unchanged; the diff to
stack-release.sh is inside plan only. docs/TOOLS.md "Pinned stack update" step 3 names the
backup line. These are Filbert's N1 and N2 on row 185 (P19 404).

stack-release.test.mjs updates T26's not-given case and adds T52, six activate cases that plan,
check the one backup line and that nothing was written, then run and check the backup exists
exactly when the plan said so. The three brief mutants are killed, and so is Filbert's M7 (an
S_CHANGED read counted as early, by T29). Filbert's M6 (the early test ahead of the no-store test)
survives, since no test plans a missing store with an out-of-chain pointer schema; that is a
bounded follow-up with the store-unclean reading, on P19 404.

Filbert approved round 1 in #1684 comment 29419, with two non-blocking notes.
2026-10-20 04:10:22 -05:00
jason.woltje 3c5da3a914 sessions: Filbert row 186 r1 review, approve 2026-10-20 03:59:58 -05:00
jason.woltje b367f5730a sage: rows 186-187 Vikunja comments (P19 404 351, P19 385 352-353) and SESSIONS line (mos-0954) 2026-10-20 03:45:27 -05:00
jason.woltje 5a768d82c6 queue: row 187 added and briefed (Part B A0, #1685), with Darkwing's row 186 start (rev 2193) 2026-10-20 03:43:59 -05:00
jason.woltje 6de3c86beb plans: brief for row 187, activate carries the row 178 proof pair (mos-0928 Part B A0, #1685) 2026-10-20 03:42:11 -05:00
jason.woltje 1d7fd75e23 queue: row 186 added and briefed (P19 404, #1684) 2026-10-20 03:39:33 -05:00
jason.woltje f5c72a5c3c plans: brief for row 186, the activate plan's backup line (P19 404, #1684) 2026-10-20 03:38:06 -05:00
jason.woltje b724b7b0bc sessions: Sage Part A window line, with Darkwing's 06:53:53Z and 08:28:01Z lines 2026-10-20 03:32:53 -05:00
jason.woltje 2ea05700bf plans: mos-0928 plan draft 2, NEW is the row 185 landing 490e2771d
NEW moves from the 9f5153deb candidate to 490e2771d, which lands row 185 (#1683), 52 commits past
89af38a83. The tool blob at NEW is f8051d81cc. P5 now checks that REPO's four service scripts
match NEW instead of HEAD equal to NEW, since record commits after NEW move HEAD. Sage's SESSIONS
line for the row 185 landing.
2026-10-20 02:14:16 -05:00
jason.woltje 0106660742 queue: revs 2185-2190: row 185 start and in-review on bf87dbba with request comment 29403 (Darkwing 2185-2187); Filbert approve comment 29404 (2188); landing note (490e2771d, patch-id 774cd23186d5, gate passed) and done (Sage 2189-2190) 2026-10-20 02:11:42 -05:00
darkwing 490e2771d3 row 185 (#1683): every activate backs up the stopped store
stack-release.sh activate now backs up the stopped store under its activation id on every run
with a store file, before any migration. Before this, backup_store ran only when the schemas
differed, so a same-schema activate took no backup and rollback --restore had nothing to name.
store-newer and migration-needs-flag still roll back before the backup, since those runs never
touch the store, and a missing store takes no backup.

BACKUP and TAKEN now mean two things. BACKUP is set by every backup, so the log line names it and
from_log backup finds it. TAKEN is set only right before a migration, so a gate failure after a
same-schema activate puts back the units and the wrapper and leaves the store as the failed run
left it. activate --plan prints a backup line, or "backup: none" with no store file. Rollback and
pm-on are unchanged; a same-schema rollback --restore already works through the row 181 guard.
docs/TOOLS.md "Pinned stack update" steps 5-7 say so.

stack-release.test.mjs updates T5, T11, T26 and T29 and adds T47-T51, with one fixture fault
(start-writes-row-<copy>). The three brief mutants are killed, and Filbert's two more (the backup
ahead of the schema checks, the plan line on a rollback) are killed by T6, T9 and T50.

This is the precondition for mos-0928 Part A, the re-pin from 89af38a83.

Filbert approved round 1 in #1683 comment 29404, with two non-blocking notes.
2026-10-20 02:09:49 -05:00
jason.woltje 6c88bc666f sessions: Filbert row 185 r1 review, approve 2026-10-20 02:09:31 -05:00
jason.woltje 52ce57dfe2 sessions: Sage mos-0928 plan, row 185 filed and briefed 2026-10-20 01:35:58 -05:00
jason.woltje f381869439 queue: revs 2183-2184: row 185 (#1683) added and briefed (Sage) 2026-10-20 01:35:50 -05:00
jason.woltje 10e1bb4950 plans: row 185 brief, every activate backs up the stopped store (#1683); mos-0928 window plan
A same-schema activate takes no store backup: backup_store runs only when
the schemas differ, and the two live backups (3f, 3h) don't match 3i, so
rollback --restore refuses both. Row 185 makes every activate back up the
stopped store before any migration and keeps the in-run restore
migration-only. Part A of the mos-0928 plan (re-pin 89af38a83 to the
refactor head) needs it first. Part B, the row 178 proxy proof
activation, is drafted for Jason and runs nothing.
2026-10-20 01:32:18 -05:00
jason.woltje 9f5153deb2 sessions: Dewey row 184 rebase and in-review; Sage mos-0870 assignment
Sweeps Dewey's uncommitted SESSIONS line for the row 184 rebase and in-review, and adds
Sage's line for the mos-0870 assignment (rows 177, 178, 180 and 181 and follow-ups 182-184).
Additions only. No existing line changes.
2026-10-20 01:14:37 -05:00
jason.woltje 055ca6938b queue: revs 2178-2182: row 184 in-review on e7e2c763 and request comment 29395 (Dewey 2178-2179); Filbert approve comment 29396 (2180); landing note (87aca4cb8, patch-id ad846db177b3, gate passed) and done (Sage 2181-2182) 2026-10-20 01:13:54 -05:00
dewey 87aca4cb8d row 184 (#1682): tester thread verbs in the CLI
mosaic thread create|open|read and threads take --tester and run as the tester through
tester-cli.mjs. talk --thread and follow --thread take --tester too, and the row 177 refusal of
--thread with --tester is gone. The bus already checks thread ownership (thread-not-owned), so
the CLI adds no rule of its own, and every verb it sends as the tester is in TESTER_VERBS. follow
already receives with message.receive, so a tester reply arrives without polling inbox.
docs/TOOLS.md and packages/cli/README.md list the new flags.

The new tester-threads.test.mjs runs an in-process Broker. It covers create, list, open, send,
read and follow on a tester thread; thread-not-owned on a human thread both ways; and the human
forms unchanged with no tester transport call. A real-process test runs scripts/mosaic as the
tester. thread-cli.test.mjs and tester-reads.test.mjs drop the argvs that pinned the old
refusal. Brief mutants (talk sent as the human, follow without the thread filter) are killed.

Filbert approved round 1 in #1682 comment 29396 with no findings or notes. Their run on 3da362982,
with row 182 in the broker, added one more mutant (no thread read before the first receive in
follow), and it was killed.
2026-10-20 01:12:07 -05:00
jason.woltje dd7656cbf3 sessions: Filbert row 184 r1 review, approve 2026-10-20 01:03:26 -05:00
jason.woltje 3da3629829 queue: revs 2173-2177: row 178 landing note (b2b33aee5, patch-id 88e56a8a3afd, gate passed) and done (Sage 2173, 2175); row 182 Filbert approve comment 29388 (2174), landing note (33ab5eeb9, patch-id fa9a8988ebfc, gate passed) and done (Sage 2176-2177) 2026-10-20 00:52:54 -05:00
jason.woltje ef09f8b3f9 sessions: Darkwing rows 180-182 and Rocko rows 138-178 pending lines
Sweeps lines the seats appended but didn't commit: Darkwing's SESSIONS lines for rows 180, 181
and 182, and Rocko's SESSIONS and BUILD-LOG lines for rows 138, 164, 171, 176 and 178. Additions
only, as the seats wrote them. No existing line changes.
2026-10-20 00:49:34 -05:00
jason.woltje 7fc98cf190 sessions: Filbert row 182 r1 review, approve 2026-10-20 00:37:53 -05:00
rocko b2b33aee55 row 178 (#1676, P19 385): the Console checks a proxy proof header on public Hosts
webui serve takes --proof-header NAME --proof-file PATH, only with the --public-host preview flags.
Before listen it reads the file once through O_NOFOLLOW and fstat: a regular file owned by the
Console uid, mode 0400 or 0600, at least 32 base64url bytes with one optional final LF. Any file
problem gives one fixed refusal that names neither the path nor the contents. The header name can't
collide with Host, Origin, auth or tester names.

On a public Host the guard runs before any auth header is read. It needs exactly one proof header
and compares equal-length buffers with timingSafeEqual. Missing, wrong and repeated proofs get the
same fixed 401. A proof header on another Host or on the tester listener gets 403. The existing
auth, Origin, Fetch Metadata and human write checks are unchanged.

webui-service.sh renders both flags and checks the file's metadata and canonical location without
opening it, and the send-status regex accepts the proof pair. stack-release.sh only gains a comment:
it already carries Console flags through re-pin and rollback, and new tests pin that.

This is a partial fix. Same-uid seats can still read the proof file. Activation (middleware, unit
flags, restart, smoke) is a separate Mos-checked window and isn't part of this commit.

Dewey approved round 2 in #1676 comment 29386, candidate 9300a670. Round 1 changes were in 29374.
2026-10-20 00:37:08 -05:00
dewey 3cfa333e43 sessions: Dewey row 178 r2 review, row 184 build 2026-10-20 00:28:49 -05:00
jason.woltje 02482094a9 queue: revs 2154-2172: rows 182 and 184 briefs, reviewers filbert, owners Darkwing and Dewey, briefed (Sage 2154-2161); 182 start (Darkwing 2162), 184 start (Dewey 2163); row 183 landing note (d1272e714, patch-id af1cad0940dc) and done (Sage 2164-2165); row 178 r2 in-review (Rocko 2166-2167), review request comment 29384 (Sage 2168-2169), Dewey approve comment 29386 (2170); row 182 in-review, request comment 29387 (Darkwing 2171-2172) 2026-10-20 00:28:03 -05:00
Researcher 74ce7061d6 sessions: Researcher row 183 build, review and landing 2026-10-20 00:05:52 -05:00
jason.woltje 841c56d052 plans: rows 182 and 184 briefs set owners and reviewers 2026-10-19 23:55:44 -05:00
dewey 9a3f101b05 sessions: Dewey rows 180 r2, 178 r1, 183 r1 reviews 2026-10-19 23:55:06 -05:00
jason.woltje 931651f2de queue: revs 2144-2153: row 181 Filbert approve #1679 comment 29372 (2144), landing note (ef48597d0, patch-id 1fef78100554, gate passed) and done (Sage 2151-2152); row 178 Dewey changes comment 29374 (2145), reopened (Rocko 2146); row 183 in-review (Researcher 2147-2148), review request comment 29375 (Sage 2149-2150), Dewey approve comment 29376 (2153) 2026-10-19 23:53:20 -05:00
darkwing ef48597d0e row 181 (#1679, P19 390): the restore guard counts every row a restore drops
COUNTED, next to STORE_JS, lists the 11 tables a bus writer fills without an event in the same
transaction (role_claims through usage_records, in schema order). STORE_JS count and heldcount
return events after STAMP plus each listed table after STAMP from the same open as before. A
listed table the store lacks counts 0, and one that exists but can't be read refuses
restore-mismatch.

rollback --restore refuses post-backup-events unless the total is 0 or --events equals it, and
the message names each table with rows. The in-run recount compares the same total. An
events-only store prints the old text. T46 reads every table in schema.sql and fails on a table
in no list or in two.

Filbert approved round 1 in #1679 comment 29372. Follow-ups F1 (task_comment_cursors) and F2
(the refusal text at stack-release.sh:909) are recorded in agents/darkwing/work/queue-181/BUILD.md.
2026-10-19 23:49:44 -05:00
jason.woltje d7184aeac1 sessions: Filbert row 181 r1 review, approve 2026-10-19 23:34:21 -05:00
jason.woltje cbe4c82657 queue: revs 2135-2143: row 181 round 1 in-review #1679 comment 29370 (Darkwing 2135-2136); rows 182-184 brief re-pins to 3459e01c33 (Sage 2137-2139); row 183 reviewer Dewey, owner Researcher, briefed (Sage 2140-2142), started (Researcher 2143) 2026-10-19 23:34:17 -05:00
jason.woltje 5a8c1340c4 plans: row 183 brief sets owner Researcher and reviewer Dewey 2026-10-19 23:26:14 -05:00
jason.woltje fcfb82da2c queue: revs 2129-2134: row 181 briefed (Sage 2129) and started (Darkwing 2130); row 178 round 1 in-review (Rocko 2131-2132) and review request #1676 comment 29368 (Sage 2133-2134) 2026-10-19 23:25:08 -05:00
jason.woltje 311705d5bd sessions: Sage rows 177 landing, 178 briefing, 180 landing, 181 briefing, 182-184 added 2026-10-19 22:56:34 -05:00