Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7cbd025596 |
No files matched your search
@@ -0,0 +1 @@
|
||||
45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
@@ -0,0 +1,69 @@
|
||||
# P1 start 2026-10-23T18:53:29.815Z, REPO HEAD 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
# plan sha256 0c932a4ccee93252e6c91dbc171e9427bcc82fc30025f97ff48a3d85b4ebddf1, P0 recorded 0c932a4ccee93252e6c91dbc171e9427bcc82fc30025f97ff48a3d85b4ebddf1; NEW 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
# business-check.mjs sha256 eece4d4671e1ce15ba81e1654c641925ac4988b343687b062897392285a8a1a7; SCRIPTS.sha256 line: eece4d4671e1ce15ba81e1654c641925ac4988b343687b062897392285a8a1a7 business-check.mjs
|
||||
# business file sha256 1e49bdf05e62607972958f5b7298cfd600c7825812370e26d7c2a842f2af9b93, mtime 2026-10-19 20:39:58.506635141 -0500
|
||||
|
||||
## P1 status
|
||||
# start 2026-10-23T18:53:29.828Z
|
||||
# command: (cd $REPO && <clean env> scripts/stack-release.sh status mosaic-stack)
|
||||
pointer: /home/jwoltje/.mosaic-dev/state/stack-active.json
|
||||
{"copy":"464010fbe4c6925b077b9b8182a209ee2177eb9d","business":"mosaic-stack","pm":true,"claude":"/home/jwoltje/.local/bin/claude","console":["--port","7332","--public-host","mosaic.woltje.com","--auth-header","X-authentik-username","--allow-user","jason.woltje","--tester-socket"],"schema":"3n","activation":"20261023T034557Z-464010fbe4c6","at":"2026-10-23T03:46:02Z"}
|
||||
log (last five lines):
|
||||
{"at":"2026-10-22T15:06:00Z","op":"activate","from":"86f95bb27f6cb237bf9fa9ba53320bace6c4de0b","to":"84f53540dd0d21ef179ca29697e172b0246e78d1","backup":"20261022T150555Z-84f53540dd0d","activation":"20261022T150555Z-84f53540dd0d","result":"ok"}
|
||||
{"at":"2026-10-22T20:16:21Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":null,"activation":"20261022T201621Z-0cbe2e9b35e5","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-22T20:16:24Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":"20261022T201621Z-0cbe2e9b35e5","activation":"20261022T201621Z-0cbe2e9b35e5","result":"ok"}
|
||||
{"at":"2026-10-23T03:45:57Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":null,"activation":"20261023T034557Z-464010fbe4c6","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T03:46:02Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":"20261023T034557Z-464010fbe4c6","activation":"20261023T034557Z-464010fbe4c6","result":"ok"}
|
||||
check:
|
||||
bus: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
Console: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
CLI: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
result: pass
|
||||
bus status:
|
||||
host: mosaic-stack, pid 3811005, running, since 2026-10-23T03:45:59.548Z, notifier off
|
||||
socket: present
|
||||
writer.lock: pid 3811049
|
||||
boot: organization file loaded at 2026-10-23T03:45:59.547Z
|
||||
unit flags: match the pointer
|
||||
drift: 141 commit(s) on refactor since the pointer's copy
|
||||
# exit 0, end 2026-10-23T18:53:30.157Z
|
||||
|
||||
## P1 values
|
||||
# start 2026-10-23T18:53:30.159Z
|
||||
# command: (cd $REPO && <clean env> node /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/p1.mjs)
|
||||
bus.tester true
|
||||
plugins kinds ["channel","harness","usage-source"]
|
||||
plugins usage-source ["transcript"]
|
||||
plugins channel ["cli","webui"]
|
||||
plugins harness ["claude-code"]
|
||||
launch.by "chief"
|
||||
launch.instances includes assistant true
|
||||
role assistant vars.harness "claude-code"
|
||||
role chief vars.harness "claude-code"
|
||||
role coder vars.harness "claude-code"
|
||||
role cto vars.harness "claude-code"
|
||||
role pm vars.harness "claude-code"
|
||||
role reviewer vars.harness "claude-code"
|
||||
roles naming pi 0
|
||||
# exit 0, end 2026-10-23T18:53:30.186Z
|
||||
|
||||
## P1 business-check OLD
|
||||
# start 2026-10-23T18:53:30.210Z
|
||||
# command: (cd $REPO && <clean env> node /mnt/storage/src/mosaic-stack/agents/sage/work/window-plan/repin-de352dfaf/business-check.mjs 464010fbe4c6925b077b9b8182a209ee2177eb9d)
|
||||
copy 464010fbe: roles 6, projects 1, arbiters 2
|
||||
HOLDS chief instance.name yes
|
||||
HOLDS pm instance.name no
|
||||
LOAD_OK
|
||||
# exit 0, end 2026-10-23T18:53:30.254Z
|
||||
|
||||
## P1 config.json top-level key names (C1; names only)
|
||||
configVersion dataRoot environment execution
|
||||
# C1: every key is one the loader at OLD and NEW takes; console key absent, federation key absent
|
||||
|
||||
## P1 data console
|
||||
# dataRoot /home/jwoltje/.mosaic-dev
|
||||
# ls -ld $DATA/console:
|
||||
drwx------ 2 jwoltje jwoltje 4096 Oct 22 22:45 /home/jwoltje/.mosaic-dev/console
|
||||
# ls rc=0
|
||||
# tester.sock path length 45 bytes (limit 107)
|
||||
# P1 end 2026-10-23T18:53:30.336Z
|
||||
@@ -0,0 +1,11 @@
|
||||
# PLAN.md corrections (PLAN.md stays at P0's sha256 0c932a4c; corrections are appended here, never edited in)
|
||||
|
||||
- 18:51:36Z, Mos (mos-1491): 39bde4fd4 isn't Jason's. It's row 292's build (Gizmoduck, done 05:20Z), beside row
|
||||
292's release-plan docs at be4357216 and 4b612781b. Its author field reads Jason Woltje because seats commit
|
||||
under the shared git identity (131 of the 141 OLD..NEW commits do). Read the PLAN's "release fix" row and
|
||||
"Jason's 39bde4fd4" as row 292. Row 292's loader check also runs in Mos's P3 rehearse; a refusal of a live
|
||||
config key there stops the window as a finding.
|
||||
- Gate method: sage-busy-now.sh counts any running `bash <script>.sh`, so a wrapper script flags itself
|
||||
(gate.txt, 18:51:27Z to 18:51:51Z, three HOLDs, no step ran). Each step runs from the shell as
|
||||
`bash /mnt/storage/scratch/sage-busy-now.sh 2>/dev/null | head -3 > .gate; grep -q '^CLEAR' .gate && bash STEP`,
|
||||
with .gate appended to gate.txt.
|
||||
@@ -0,0 +1,204 @@
|
||||
# Re-pin window 464010fbe to 45dca69f6 (3n, no migrate)
|
||||
|
||||
Darkwing operates this window. Sage assigned it in sage-3572 (18:36:42Z 10-23, under Q173 on dragon-lin). The
|
||||
conditions are: backup first and a STATE report after. The Console 200 on 7332 and the new activation id go in the
|
||||
report. Mos ruled condition 11 in mos-1487 (D1-D4, below). The layout follows my last window's
|
||||
`window-migrate-3n/PLAN.md`. Where a step is unchanged I name it and only say what differs. There's no
|
||||
schema change this time, so the migration steps and the restore-only rollback are gone. The window's files go on
|
||||
a darkwing/* branch, never local refactor.
|
||||
|
||||
## Who, and what nobody does
|
||||
|
||||
- I operate. Mos checks each step's output before the next one. Mos runs P3 and gives the W0b-W4 go and the W5 go
|
||||
straight to me (sage-3572). Sage gives the slot: P0, D3, B0, P1, W0, P2 and P4-P6 each run only after a CLEAR
|
||||
busy check. Until then, only plan text, git reads and file prep.
|
||||
- Jason has no step. Nothing gets pruned. Nobody acts as Jason: no `--by jason`, no human shell or tmux pane,
|
||||
every bus read carries `--tester`, and `bus.tester` stays as it is. If it isn't `true`, stop at P1.
|
||||
- After W5, any Console start or restart is Mos's. I don't start, stop or restart the Console, the bus or
|
||||
mosaic-webui by hand.
|
||||
- Nothing new goes on: no `mosaic access`, no access.json (mos-1487 D3), no Gitea grant run, no `--send`, no
|
||||
`--sso`, no proof pair, no pi (#383), no federation key. dragon-lin only; .53 and .54 take nothing.
|
||||
- Status to Mos every 15 minutes while I hold the slot. A blocker goes to Mos with the exact command and its
|
||||
output.
|
||||
|
||||
## Condition 11 (row 295's revocation), mos-1487
|
||||
|
||||
The evidence, as Mos worded it (D1): "0 user threads (read-only count 18:38:22Z, 5 threads, all owned by tester),
|
||||
access not wired (no ~/.config/mosaic-dev/access.json, accessFor returns null)".
|
||||
|
||||
- D1. `c11.sh` repeats the count read-only (python3 -B, `mode=ro`): the thread total, the owner classes, the
|
||||
`user:` thread count, the `thread_claims` op='revoke' count, the session_ops and message_cancels row counts,
|
||||
and whether access.json exists (`-e` only). It runs at W0, W1 and W6 and appends to `c11.txt`. A user thread
|
||||
count other than 0 stops the step and goes to Mos.
|
||||
- D2. After activation, in W6's evidence:
|
||||
- The 5 tester threads are all still there. `tr.sh W6` against W1 checks the same ids, message counts and
|
||||
sha256 of each thread read.
|
||||
- None of them is revoked. `c11.sh W6` reads 0 user threads and the same op='revoke' count as W1. #revokeLost is
|
||||
the only writer of op='revoke', and it acts only on `user:` owners.
|
||||
- The launch log `$DATA/launches/mosaic-stack.jsonl` has 0 `"event":"thread-revoked"` lines with `at` at or
|
||||
after W5.start. It has 0 such lines in all 140 now.
|
||||
- The bus journal since W5.start has 0 lines naming `thread-revoked`, count only.
|
||||
- If any of these fails, the step stops and goes to Mos, and the rollback below applies.
|
||||
- D3. I don't create access.json and I don't run `mosaic access`. Wiring access is a human act. Mos files it as a
|
||||
Vikunja task, and it doesn't gate this window.
|
||||
- D4. This no-migrate revision. Run P0, D3, B0, P1, W0, P2 and P4-P6 on CLEAR. The W0 line with the sha and the
|
||||
backup name goes to Mos, who runs P3.
|
||||
|
||||
## Names
|
||||
|
||||
- OLD, live: `464010fbe4c6925b077b9b8182a209ee2177eb9d`, schema 3n, pointer `pm: true`, activation
|
||||
`20261023T034557Z-464010fbe4c6`. Two standing launches: chief `r28dbbc5c6b4d` (by jason, 03:46:01Z) and pm
|
||||
`ra38826f3c6e2` (by the chief, 03:47:35Z, pid 3831373, runner 3831374), which the last window's W9b left
|
||||
live. The pointer's Console flags are `--port 7332 --public-host mosaic.woltje.com --auth-header
|
||||
X-authentik-username --allow-user jason.woltje --tester-socket`. P1 reads them again from `status`; nothing
|
||||
copies them from this file.
|
||||
- NEW: `45dca69f6e4bce52834587f66f2ff33ba839ab8a`, Sage's target, 141 commits past OLD. This is not the tip at
|
||||
window start. P0 refuses unless:
|
||||
- OLD and 59f0e44f4 (row 301) are ancestors.
|
||||
- NEW's stack-release.sh blob is `2656f95b00e3`.
|
||||
- `SCHEMA_VERSION` is 3n at both OLD and NEW.
|
||||
|
||||
P0 writes `$WIN/NEW` once, and NEW is frozen for the window.
|
||||
- `WIN=agents/darkwing/work/window-repin-45dca69f6/`. `vars.sh` holds OLD, the target, the tool blob, the four
|
||||
service scripts and both standing run ids. It reads NEW and this file's sha256 from P0's files. Every step
|
||||
script sources it and is mode 755. `c11.sh` and the `r301` check in `p456.sh` are new. The rest adapt the last
|
||||
window's scripts.
|
||||
|
||||
## What NEW carries over OLD
|
||||
|
||||
These are the non-test runtime paths changed OLD..NEW (`git diff --name-only`, without tests, agents/, docs/ and
|
||||
`.md`). Sage's list names rows 272, 295, 300, 301, 306, 307, 308, 252 and the 571 docs. The range also carries
|
||||
rows 294, 302 and 219 and Jason's 39bde4fd4. All of them are in NEW, so all of them go live.
|
||||
|
||||
| Row | Commits | Paths | Live effect here |
|
||||
|---|---|---|---|
|
||||
| 252 (#1753) | 24672fd9d | bus broker, client, console-cli, human, principal, runtime, server; cli config; webui bus.mjs, cli.mjs, decision-http.mjs, public/bus.js, serve.mjs | Console inbox Approve and Deny for grant requests, human-only through a console owner proof. It needs `--send` and `--sso`, and live has neither. `/api/config` gains `decide`, which is false here. |
|
||||
| 295 (#1801, FED R4) | ff54a1556, 31da9dcb8, 24f8f5d73, 0c8f12ea2 | bus broker, runtime; cli access, launcher, config | 30 s access timer, `access.reload`, a one-transaction claim end on a loss. It acts only on `user:` threads. There are none (condition 11), and access.json is absent. |
|
||||
| 306 (#1813) | 2d0318a44 | bus broker; harness runner | `#accessRevoked` from #revokeLost; a revoked run's calls answer `thread-revoked` and its runner stops. Same trigger as 295. |
|
||||
| 302 (#1809) | 2b6111a17 | bus broker; harness runner | A released run answers `launcher-released` on calls that need the claim. |
|
||||
| 307 (#1814) | dbbda2537 | cli launcher; plugins harness kinds, claude-code, pi; seat compactions | The harness kind gains `compactions`. The launcher's ledger is the same file row 270 writes. |
|
||||
| 272 | 490f45f02, 70651f45d, f859d06d2, 0ea3db297 | bus broker; cli cli, session, thread; plugins channel cli and webui; webui chat-http, chat, public/chat.* | Session CLI and Console chat fixes. packages/seat/src/session.mjs is unchanged, at sessionsVersion 2. |
|
||||
| 294 (#1800, FED R6) | afef0ea88, 52d2a1610, 26f93fa74 | cli access, config; webui access, chat-http, chat, cli, console-bus, public app.js, federation.js, index.html, user.html, user.js, serve.mjs, sso.mjs | Granted-user sign-in. It is consulted only under `--sso` (`webui/src/cli.mjs:95-106`), and live has no `--sso`. |
|
||||
| 301 (#1808) | bb031ec84, 59f0e44f4 | webui bus.mjs, cli.mjs, console-bus.mjs | user-bus.mjs folded into bus.mjs. Row 252 re-pinned bus.mjs, so NEW's channel-proof pin is 604092cb. See "Row 301" below. |
|
||||
| 219 | 049214486 and its landing (5fdfd7275) | bus broker; cli launcher; webui chat-http, chat, public/chat.js, serve.mjs | Row 219's admission change, landed on refactor. |
|
||||
| 300 (#1807) | tests only | none | No runtime path. |
|
||||
| 308, 1.16 | 30e6bb680, 4874d1e83 | packages/tasks/requirements.json | PRD 1.17, 87 requirements (it was 1.15 and 85 at OLD). |
|
||||
| release fix | 39bde4fd4 (Jason) | scripts/stack-release.sh | config_checks now validate any key beyond configVersion, environment, dataRoot and execution with the target's loader, not only console and federation. |
|
||||
| 571 docs | docs only | none | No runtime path. |
|
||||
|
||||
These are unchanged OLD to NEW (`git diff --stat` empty): bus-service.sh, webui-service.sh, stack-copy.sh,
|
||||
common.sh, package.json, package-lock.json, packages/bus/schema.sql, the migrations, packages/seat/src/session.mjs
|
||||
and scripts/mosaic-config.mjs.
|
||||
|
||||
### Config keys (C1)
|
||||
|
||||
scripts/mosaic-config.mjs is the same at OLD and NEW. Its top-level keys are configVersion, environment, dataRoot,
|
||||
execution, console, federation, compactionReadBytes and compactionStreams (`:304`). With 39bde4fd4,
|
||||
stack-release.sh validates the live config with NEW's loader whenever it holds any key beyond the first four.
|
||||
- P1 prints the live config's top-level key names only, no values. It stops on any key outside those eight, and it
|
||||
records whether console and federation are present.
|
||||
- W0 runs NEW's `mosaic-config.mjs validate` from the NEW copy and needs exit 0.
|
||||
|
||||
### Row 301 (59f0e44f4)
|
||||
|
||||
59f0e44f4 pinned webui bus.mjs at 39fcb27c. Row 252 (24672fd9d) changed bus.mjs again and re-pinned it. So at NEW,
|
||||
channel-proof.test.mjs pins `packages/webui/src/bus.mjs` at
|
||||
`604092cb706b152d458f299ff1071f6cd488774629012f96b672f7e9a16c0b2c`. That is the sha256 of NEW's bus.mjs (git blob
|
||||
93dcbc16). `p456.sh r301 [COPY]` checks three things:
|
||||
- 59f0e44f4 is an ancestor of NEW.
|
||||
- NEW's pin equals the sha256 of NEW's bus.mjs.
|
||||
- Given a copy, the copy's bus.mjs equals the pin.
|
||||
|
||||
It prints `R301 PASS`. P5 runs it against NEW's copy after W0, and W9 runs it against the live copy.
|
||||
|
||||
## Schema and backups
|
||||
|
||||
- `SCHEMA_VERSION` is 3n at OLD, at NEW and in the live store. There's no migration and no `--migrate`.
|
||||
- NEW's `--plan` prints the following for a same-schema run (stack-release.sh at blob 2656f95b0):
|
||||
- `store schema: 3n (read from the store the running bus holds)`
|
||||
- `target schema: 3n`
|
||||
- `migration: none; the store is at the target's version`
|
||||
|
||||
It prints no `needs:` line and no decision 96 line, since those appear only with a migration. W3 stops on any
|
||||
`needs:` line or any second migration line.
|
||||
- The counts stay what the last window's W6 read: 26 tables, 97 triggers, 5 views and 28 indexes, with
|
||||
schema_version 3n. session_ops and message_cancels are append-only (their triggers refuse delete), so W6 needs
|
||||
each at no fewer rows than W1's c11 read.
|
||||
- D3 (`d3.sh`): the data-root tar with the same exclusions as last time. It expects `bus-host/sessions.json` at
|
||||
sessionsVersion 2. Plain tar.
|
||||
- BZ (`bz.sh`): the business file copy. Its sha256 must be
|
||||
1e49bdf05e62607972958f5b7298cfd600c7825812370e26d7c2a842f2af9b93, as at the last three windows. cp and
|
||||
sha256sum only; never read.
|
||||
- B0 (`b0.sh 3n`), on CLEAR: the online sqlite backup-API copy, laid out for `rehearse --backup PATH`. `SCHEMA`
|
||||
must say 3n. Its path and SHA256SUMS sha256 go to Mos with D3's in the W0 line. This is "backup first".
|
||||
- W5's activate still backs up the stopped store (`stack-release.sh:1485`; activate always runs its migrate step,
|
||||
which takes the backup before it finds nothing to migrate). The `--plan` backup line says so, and W5 records
|
||||
that backup's path, `SCHEMA` 3n and SHA256SUMS sha256.
|
||||
- Disk: /home has 35G free and backups/ is 7.7G. The last D3 is about 1.5G.
|
||||
|
||||
## Before the window (nothing stopped)
|
||||
|
||||
| # | Who | Step |
|
||||
|---|-----|------|
|
||||
| P0 | operator, git only | `p0.sh <this file's sha256>`: writes `$WIN/NEW` and `$WIN/PLAN.sha256` (see Names). |
|
||||
| D3 | operator, on CLEAR | `d3.sh`, above. |
|
||||
| BZ | operator | `bz.sh`, above. |
|
||||
| B0 | operator, on CLEAR | `b0.sh 3n`, above. |
|
||||
| P1 | operator, on CLEAR | `p1.sh`: `status` shows pointer OLD, activation `20261023T034557Z-464010fbe4c6`, 3n, the Console flags, and unit flags that match. Business file sha256 1e49bdf0 and `business-check.mjs` LOAD_OK for OLD. `$DATA/console` 0700, `tester.sock` 0600, `bus.tester` `true`. C1's key names. |
|
||||
| W0 | operator, on CLEAR | `w0.sh`: `scripts/stack-copy.sh copy $NEW`, `business-check.mjs` LOAD_OK for NEW, NEW's `mosaic-config.mjs validate` exit 0, then `c11.sh W0`. A user thread count other than 0 stops and goes to Mos (D1). Then the W0 line goes to Mos and Sage: NEW's sha, B0's path and SHA256SUMS sha256, and D3's path. |
|
||||
| P2 | operator, on CLEAR | `p2.sh` and `p2units.sh`: the two stub runs against NEW's copy with console-check.sh d068fe02, then both units rendered from REPO's service scripts and diffed against the live units. The copy path is the only difference allowed. |
|
||||
| P3 | Mos | `stack-release.sh rehearse $NEW mosaic-stack --backup <B0 path> --port 7341`. The schemas are the same, so the rehearsal doesn't migrate; Mos reads its PASS lines for `REHEARSAL_PASS`. Then `python3 -B p3/counts.py <B0>/bus/bus.sqlite <rehearsal>/data/bus/bus.sqlite`, which should show every table equal. `p3/hand-console.sh <rehearsal dir>` is there if Mos wants the hand Console read. It refuses a directory that isn't NEW's. |
|
||||
| P4 | operator, on CLEAR | `p456.sh p4`: the tunnel read. |
|
||||
| P5 | operator, on CLEAR | `p456.sh p5`: the four service scripts held at NEW with empty porcelain, then `r301` against NEW's copy. |
|
||||
| P6 | operator, on CLEAR | `p456.sh p6` as `matrix-old.txt` and `p456.sh tester` as `tester-old.txt`: the 7332 matrix (a)-(g) and the two tester-http reads, for W10. |
|
||||
|
||||
## The window, on Mos's go
|
||||
|
||||
| # | Who | Step |
|
||||
|---|-----|------|
|
||||
| W0b | operator | `wsteps.sh` runs W0b to W4 in one go and stops at the first failed check. W0b is the business file copy again. |
|
||||
| W1 | operator | Idle check (`agents --tester`, `launches list`), the start stamp from `date -u`, S1 with snapshot.mjs at 639fd28a, `--held`. The live launches allowed are the chief r28dbbc5c6b4d and the pm ra38826f3c6e2. The chief must be listed; the pm's presence is noted. Any other launch, or either one working, stops and goes to Mos. Then `c11.sh W1` and `d3.sh` again. |
|
||||
| W2 | operator | `status`: pointer OLD, `pm: true`, 3n, unit flags match. |
|
||||
| W3 | operator | `stack-release.sh activate $NEW mosaic-stack --pm --tester-socket --plan`, no `--migrate`. It must show OLD to NEW, the three schema lines above, no `needs:` line, no restore or note line, the commit count, the backup line, and a Console line with exactly OLD's flags: `--tester-socket`, no `--send`, no `--sso`, no proof pair, no drop line. Any other difference stops here. |
|
||||
| W4 | operator | The unit reads. W3 and W4 go to Mos for the W5 go. |
|
||||
| W5 | operator, on Mos's go | `w5pre.sh` right before: agents and launches again with W1's rule. A working chief or pm stops. Then `w5.sh`: the same activate without `--plan`. It needs exit 0, `activate ok`, `gate passed`, `stopped store schema: 3n`, no `migrated the store` line and no drop line. Record the activation id, the backup path, STAMP, the backup's SCHEMA (3n) and SHA256SUMS sha256, and the bus journal's `launched` lines since W5's start. Then `status` (NEW, pm true, 3n, check pass) and `rollback mosaic-stack --plan`, read only. |
|
||||
| W6 | operator, after Mos checks W5 | `w6.sh`. `status` shows NEW at 3n. A read-only python3 count on the live store gives 26 tables, 97 triggers, 5 views and 28 indexes, schema_version 3n, every 3n object by name, and session_ops and message_cancels at or above W1's counts. `agents --tester` answers. `tr.sh` thread reads match W1's. `bus-host/sessions.json` is at sessionsVersion 2. Then mos-1487 D2, as above. |
|
||||
| W7 | Mos | Any Console restart. I record the Console pid and `/proc/<pid>/cwd` before and after, and change nothing. |
|
||||
| W9 | operator | `w9.sh`: <ul><li>The Console unit active, started after W5, cwd NEW's copy (mos-1338 item 4).</li><li>Status 3n.</li><li>console-check d068fe02 CONSOLE_PASS.</li><li>The webui journal since W5 with one `proxy proof off` and no `Sign-in:`.</li><li>`tester.sock` 0600 in a 0700 `console/`.</li><li>One peercred-starts line naming NEW.</li><li>No `library:` line.</li><li>One running chief from this start, not working.</li><li>No live pm (see below).</li><li>`p456.sh r301` against the live copy, R301 PASS.</li></ul> |
|
||||
| W10 | operator | `w10.sh`: <ul><li>The matrix again as `matrix-new.txt`, lines a-g the same as `matrix-old.txt`. Line a is the Console 200 on 7332, `healthz 200 ok=true`.</li><li>The two tester-http reads. `/api/config` is P6's status and body with `"send":false,"edit":false` turned into `"send":false,"decide":false,"edit":false` (row 252, `serve.mjs:839`). `user` and `federation` appear only with a grant or a hub, and live has neither. `/api/bus/agents` is 200, with its count shown beside P6's.</li><li>No listener on 7333.</li><li>P4 again.</li><li>Console POSTs on 7332 with no session are refused (mos-1195).</li><li>The tester's `POST /api/processing` is refused 403 read-only.</li></ul> |
|
||||
| W11 | operator | <ul><li>STATE in `$WIN/STATE.md`, with the activation id, W10's line a, the condition 11 and D2 evidence, the row 301 check and the pm ending.</li><li>Comments on the issues of the rows NEW puts live, posted as darkwing and read back.</li><li>The P19 body to Sage.</li><li>The window's files and this plan committed and pushed to a darkwing/* branch.</li></ul> |
|
||||
|
||||
### The pm
|
||||
|
||||
ra38826f3c6e2 runs in the cgroup of mosaic-bus@mosaic-stack.service. W5 stops the bus, so it ends the pm the way
|
||||
the last window's W5 ended the old chief. There's no W9b this window. Nothing here sends to the chief or the pm,
|
||||
and nothing relaunches the pm. So:
|
||||
- W9 expects 0 live pm and records the old pm's entry.
|
||||
- STATE says "ended by W5".
|
||||
- The next window's W1 expects only this window's chief.
|
||||
|
||||
If Mos wants a pm on NEW, that's a separate ruling and a separate step.
|
||||
|
||||
## Steps skipped, and why
|
||||
|
||||
- W8 (the share check) is skipped: NEW adds no share path.
|
||||
- W9b is skipped: there's no pm proof this window (above).
|
||||
- There's no thread create, launch, `mosaic access` or grant run. So 295's and 306's revocation, 302's
|
||||
launcher-released answer, 252's Approve and Deny, and 294's granted-user sign-in aren't exercised on live. Their
|
||||
tests ran green in their own gates. On live they're inert: no user threads, no access.json, no `--sso`, no
|
||||
`--send`.
|
||||
|
||||
## Stop conditions and rollback
|
||||
|
||||
- The first failure stops the step and goes to Mos, together with the exact command and its output. Any restore,
|
||||
rollback, or second failure ends the window. Before W5 there's nothing to undo. Keep every copy and prune
|
||||
nothing.
|
||||
- After W5, rollback is a pointer flip to 464010fbe: `stack-release.sh rollback mosaic-stack`. The schema is 3n on
|
||||
both sides, so OLD opens the store as it is. W5 records the `--plan` of that rollback. The flip waits for Mos's
|
||||
go and ends the window. OLD and NEW share session.mjs at sessionsVersion 2. The compactions ledger is a file
|
||||
OLD's launcher writes too.
|
||||
- A D2 failure (a missing or changed tester thread, a revoke row, a thread-revoked line) is a stop to Mos with
|
||||
this rollback, per mos-1487 D2.
|
||||
- If the store is in doubt, rather than just the pointer, the restore sources are W5's stopped-store backup and
|
||||
W1's D3. Before any real restore I take an online copy with `b0.sh 3n`, so the rows the restore drops are kept.
|
||||
A restore goes to Mos first, with `rollback --plan`'s guard count.
|
||||
@@ -0,0 +1 @@
|
||||
0c932a4ccee93252e6c91dbc171e9427bcc82fc30025f97ff48a3d85b4ebddf1
|
||||
@@ -0,0 +1,293 @@
|
||||
{
|
||||
"schema": "3n",
|
||||
"tables": {
|
||||
"decision_events": {
|
||||
"rows": 22,
|
||||
"maxSeq": 22,
|
||||
"sha256": "b016d2a7cb0116252166016822c472af1cc520435a6538ecb7be5db62c6cb4b3"
|
||||
},
|
||||
"decisions": {
|
||||
"rows": 22,
|
||||
"maxSeq": 22,
|
||||
"sha256": "eafcd57d3531f7ac7c768e512632a3975df372c49ffd95abe7d858fd05ce93a8"
|
||||
},
|
||||
"deliveries": {
|
||||
"rows": 1955,
|
||||
"maxSeq": 1955,
|
||||
"sha256": "263a7a4dd5316a20a68503a00a091e6624fee5f336a6051512e4d1e9e8c49d98"
|
||||
},
|
||||
"events": {
|
||||
"rows": 2310,
|
||||
"maxSeq": 2310,
|
||||
"sha256": "b958b42712cd8fe0ec0c571d938ec3e52613c47dae3a7a7a89529ca13ed4fca5"
|
||||
},
|
||||
"gitea_grants": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"gitea_users": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"host_grants": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"hosts": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"instance_names": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"message_cancels": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"message_threads": {
|
||||
"rows": 10,
|
||||
"maxSeq": null
|
||||
},
|
||||
"messages": {
|
||||
"rows": 642,
|
||||
"maxSeq": 642
|
||||
},
|
||||
"meta": {
|
||||
"rows": 3,
|
||||
"maxSeq": null,
|
||||
"sha256": "f3b8216dbaeb799643500760f3f286ad9ecc52c86449fdf3fa60da17b9b3bfe4"
|
||||
},
|
||||
"projects": {
|
||||
"rows": 5,
|
||||
"maxSeq": 5,
|
||||
"sha256": "cdf87b72ef95a2f988c242d35f1050f9e3e310637f84a645b51694daa924650f"
|
||||
},
|
||||
"role_claims": {
|
||||
"rows": 118,
|
||||
"maxSeq": 118,
|
||||
"sha256": "ab7e91854090c255e674053b7ceb1af8b4520fa7027b0211a2717094872ca6e2"
|
||||
},
|
||||
"session_defaults": {
|
||||
"rows": 5,
|
||||
"maxSeq": 5,
|
||||
"sha256": "0fa4a532b106e963e200064d7f7464412a2fd6fce5a59a35ba7097d9bdca879c"
|
||||
},
|
||||
"session_ops": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"sessions": {
|
||||
"rows": 5,
|
||||
"maxSeq": 5,
|
||||
"sha256": "7094392718785cbaec3d5e5bd640f4b36d1e2be1fb4b7c6a9db77308de111803"
|
||||
},
|
||||
"task_comment_cursors": {
|
||||
"rows": 752,
|
||||
"maxSeq": 752,
|
||||
"sha256": "854203bd74eb66bf5b22695a9dc820971129cbc015caa76f49f9d31a52651659"
|
||||
},
|
||||
"task_snapshots": {
|
||||
"rows": 605,
|
||||
"maxSeq": 605,
|
||||
"sha256": "47947f1cf549a6e675a279806b4c3c394f0e5f191770689934af610fea907cff"
|
||||
},
|
||||
"thread_claims": {
|
||||
"rows": 10,
|
||||
"maxSeq": 10,
|
||||
"sha256": "925e82e219ca7d469a3d9d72bd7033b9f52a47f1da272ac7ae31832a24cd1b91"
|
||||
},
|
||||
"thread_opens": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"thread_shares": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"threads": {
|
||||
"rows": 5,
|
||||
"maxSeq": 5,
|
||||
"sha256": "6cc7fbd14dd1d8164dbeab1e2c2911ca206c283e722724ee2b0b0a8e22e0f533"
|
||||
},
|
||||
"usage_records": {
|
||||
"rows": 112,
|
||||
"maxSeq": 112,
|
||||
"sha256": "50e7cefdf18f913a2d0e780d7e3854e2cedb6f4cecbb0392857b4ffaae9dc277",
|
||||
"byRun": [
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r8fba7e598156",
|
||||
"input": "0",
|
||||
"output": "0",
|
||||
"unknownTurns": 1
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r4a96e2142e4d",
|
||||
"input": "2",
|
||||
"output": "52",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rc78c9700c8e9",
|
||||
"input": "14",
|
||||
"output": "1519",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r293f33bcbc63",
|
||||
"input": "2",
|
||||
"output": "44",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r34520a581318",
|
||||
"input": "6",
|
||||
"output": "323",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r7e99838f9f93",
|
||||
"input": "2",
|
||||
"output": "44",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rc964611b2092",
|
||||
"input": "4",
|
||||
"output": "120",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rbb708846b605",
|
||||
"input": "12",
|
||||
"output": "2089",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rc36b17ef3788",
|
||||
"input": "16",
|
||||
"output": "5221",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r097436c91816",
|
||||
"input": "16",
|
||||
"output": "3340",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r497f1c817d4d",
|
||||
"input": "2",
|
||||
"output": "80",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rc9e993da24cf",
|
||||
"input": "30",
|
||||
"output": "5871",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r7646a7a4a2bd",
|
||||
"input": "12",
|
||||
"output": "1448",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r4004e5e09433",
|
||||
"input": "2",
|
||||
"output": "61",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rd0b8fdb4d62d",
|
||||
"input": "18",
|
||||
"output": "1714",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r62b31aae5852",
|
||||
"input": "2",
|
||||
"output": "31",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r2cf8536da2c3",
|
||||
"input": "12",
|
||||
"output": "1420",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "re6c69f1ec1f0",
|
||||
"input": "16",
|
||||
"output": "1471",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r2c62e02f8371",
|
||||
"input": "2",
|
||||
"output": "68",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r410293d04d3d",
|
||||
"input": "10",
|
||||
"output": "1105",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r28dbbc5c6b4d",
|
||||
"input": "10",
|
||||
"output": "1137",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "ra38826f3c6e2",
|
||||
"input": "8",
|
||||
"output": "1154",
|
||||
"unknownTurns": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"untimed": [
|
||||
"gitea_grants",
|
||||
"gitea_users",
|
||||
"host_grants",
|
||||
"hosts",
|
||||
"message_threads",
|
||||
"meta",
|
||||
"task_comment_cursors"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,176 @@
|
||||
# Re-pin window 464010fbe to 45dca69f6 (schema 3n, no migration), STATE report (W11)
|
||||
|
||||
Operator and tester: Darkwing. Plan: `PLAN.md` in this directory, sha256
|
||||
0c932a4ccee93252e6c91dbc171e9427bcc82fc30025f97ff48a3d85b4ebddf1, frozen at P0. Corrections are in
|
||||
`PLAN-corrections.md`. Tool blob 2656f95b00e3 (`scripts/stack-release.sh` at NEW). P5 found the four service scripts
|
||||
the same at HEAD and NEW, with empty porcelain. OLD 464010fbe4c6925b077b9b8182a209ee2177eb9d, NEW
|
||||
45dca69f6e4bce52834587f66f2ff33ba839ab8a, 141 commits past OLD. Every stamp below comes from `date -u` or from the
|
||||
transcripts `W.txt` and `W5.txt` in this directory. dragon-lin only.
|
||||
|
||||
Sage assigned the window (sage-3572) and ruled NEW in full with every carry in scope (sage-3574). Mos ruled condition
|
||||
11 and D1 to D4 (mos-1487), corrected the 39bde4fd4 attribution (mos-1491), passed P3 with the W0b to W4 go
|
||||
(mos-1492), and gave the W5 go (mos-1493). Q173 covers every step.
|
||||
|
||||
## Outcome
|
||||
|
||||
45dca69f6 is live for mosaic-stack, and the store is still 3n. W5's activate stopped both units, backed up the
|
||||
stopped store, found nothing to migrate, and started both units on NEW. Every check from P0 to W10 passed. Nothing
|
||||
was rolled back, restored or pruned.
|
||||
|
||||
- Activation 20261023T185911Z-45dca69f6e4b. The pointer log has the usual two lines: started at 18:59:11Z (backup
|
||||
null), then ok at 18:59:17Z with the backup id.
|
||||
- W10 line a: `a 200 ok=true`, the healthz 200 on 7332. Lines a to g of `matrix-new.txt` equal `matrix-old.txt`.
|
||||
- The live store has 26 tables, 97 triggers, 5 views and 28 indexes at schema_version 3n, with nothing missing
|
||||
(W6). Events are 2313 (B0 read 2309). session_ops and message_cancels hold 0 rows, the same as W1.
|
||||
- The five tester threads read the same after W5 as before it. W1 and W6 match on ids, message counts (2 each) and
|
||||
the sha256 of each `thread read --json --tester`.
|
||||
- bus-host/sessions.json is sessionsVersion 2 with 1 session. NEW's host rewrote it at 18:59:15Z.
|
||||
- The Console (MainPID 758602) started at 18:59:13Z, after W5.start, with its cwd in NEW's copy. Nobody restarted
|
||||
it, and W7 didn't run.
|
||||
- The new standing chief is re194575ec18c, launched by the new host. Its launch is the one `launched` line in the
|
||||
bus journal since W5.start.
|
||||
|
||||
Nobody acted as Jason: no `--by jason`, no human pane, no auth header as jason, no pi. Nothing new went on: no
|
||||
`--send`, no `--sso`, no proof pair, no grant, no access.json, no `mosaic access` (mos-1487 D3). W8, W9b and W12 were
|
||||
not run.
|
||||
|
||||
## Condition 11 and D2 (mos-1487)
|
||||
|
||||
D1, condition 11: 0 user threads at every read. Access is not wired: there is no `~/.config/mosaic-dev/access.json`.
|
||||
Each `c11.sh` read is python3 -B with mode=ro.
|
||||
|
||||
| Read | Stamp (UTC) | threads | owners | user_threads | revoke_claims | session_ops | message_cancels | access.json |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| W0 | 18:53Z (`w0.txt`) | 5 | tester=5 | 0 | 0 | 0 | 0 | absent |
|
||||
| W1 | 18:57:25.086Z | 5 | tester=5 | 0 | 0 | 0 | 0 | absent |
|
||||
| W6 | 18:59:28.117Z | 5 | tester=5 | 0 | 0 | 0 | 0 | absent |
|
||||
|
||||
D2, after activation (`w6.out`, W6_PASS 18:59:28Z):
|
||||
|
||||
- All 5 tester threads are still present and none is revoked. The W6 thread reads equal W1's, and thread_claims rows
|
||||
with op `revoke` stay at 0, the same as W1.
|
||||
- 0 `thread-revoked` events in the launch log (`launches/mosaic-stack.jsonl`, 143 lines) with `at` at or after
|
||||
W5.start 18:59:11Z.
|
||||
- 0 bus journal lines naming `thread-revoked` since 18:59:11 UTC. This is a count only.
|
||||
|
||||
D3: I created no access.json and ran no `mosaic access`. Wiring access is Mos's Vikunja task and a human act.
|
||||
|
||||
## The pm
|
||||
|
||||
pm run ra38826f3c6e2 was left live by the last window's W9b. It ran in the bus unit's cgroup, and W5's bus stop
|
||||
ended it. W5 pre-read at 18:59:11Z listed it and showed it not working. W9's read of `launches list --json` shows
|
||||
`live_pm 0`, and the old pm isn't listed. There was no W9b this window and nothing relaunched a pm. The next
|
||||
window's W1 should expect only the chief re194575ec18c.
|
||||
|
||||
## Row 301 (59f0e44f4)
|
||||
|
||||
`p456.sh r301` passed twice: at P5 against NEW's copy, and at W9 (18:59:54Z) against the live copy. 59f0e44f4 is
|
||||
an ancestor of NEW. NEW's channel-proof pin on `packages/webui/src/bus.mjs` is
|
||||
604092cb706b152d458f299ff1071f6cd488774629012f96b672f7e9a16c0b2c, the sha256 of NEW's bus.mjs and of the live copy's.
|
||||
|
||||
## What went live
|
||||
|
||||
Every commit in 464010fbe..45dca69f6 (sage-3574). The table below is PLAN.md's, with row 292 for the release fix
|
||||
(mos-1491). On live, rows 252, 294, 295, 302 and 306 are inert: there are no user threads, no access.json, no
|
||||
`--sso` and no `--send`. Their tests ran green in their own gates.
|
||||
|
||||
| Row | Issue | Effect on live |
|
||||
|---|---|---|
|
||||
| 219 | #1720 | C2-09a, one thread per creative instance: broker, launcher and Console chat. |
|
||||
| 252 | #1753 | Console inbox Approve and Deny, which need `--send` and `--sso` (live has neither). `/api/config` gains `decide`, false here. |
|
||||
| 272 | #1777 | Session CLI and Console chat fixes. sessionsVersion stays 2. |
|
||||
| 292 | #1797 | config_checks validates any key beyond the first four with the target's loader. The live config has only the four. P3's rehearse passed the check. |
|
||||
| 294 | #1800 | Granted-user sign-in, consulted only under `--sso`. |
|
||||
| 295 | #1801 | Access timer and revocation, acting only on `user:` threads (none). |
|
||||
| 300 | #1807 | Tests only. |
|
||||
| 301 | #1808 | user-bus.mjs folded into bus.mjs. R301 PASS above. |
|
||||
| 302 | #1809 | A released run answers `launcher-released`. |
|
||||
| 306 | #1813 | A revoked run's calls answer `thread-revoked` and its runner stops. D2 found none. |
|
||||
| 307 | #1814 | The harness kind gains `compactions`. |
|
||||
| 308 | #1815 | requirements.json is PRD 1.17, with 87 requirements (85 at OLD). |
|
||||
|
||||
The 571 docs carry no runtime path.
|
||||
|
||||
## Deviations
|
||||
|
||||
1. The first gate wrapper (`gate.sh`) read BUSY three times on its own `bash gate.sh` process, from 18:51:27Z to
|
||||
18:51:51Z. No step ran. Every step after that gated inline in the shell (`gate.txt`). The wrapper files were
|
||||
deleted. The method is recorded in `PLAN-corrections.md`.
|
||||
2. W10's `/api/bus/agents` read 1 agent where P6 read 2. The missing one is the pm that W5 ended, as planned. The row
|
||||
left is chief re194575ec18c.
|
||||
3. W10's tester `/api/config` is P6's body with `"decide":false` added, as PLAN.md's W10 row expects (row 252).
|
||||
|
||||
## Stamps
|
||||
|
||||
| Step | Start (UTC) | Result |
|
||||
| --- | --- | --- |
|
||||
| P0 | 18:51:17Z | P0_PASS, NEW 45dca69f6, plan 0c932a4c (`p0.txt`) |
|
||||
| D3 data-root snapshot | 18:52:10Z | `backups/d3-20261023T185210Z`, 1.6G, 0 warnings, SHA256SUMS 551b08fb (`d3.txt`) |
|
||||
| BZ business file copy | 18:53:23Z | `.pre-window-20261023T185323Z`, sha256 1e49bdf0 (`bz.txt`) |
|
||||
| B0 store backup (3n) | 18:53:25Z | `backups/b0-20261023T185325Z`, events 2309, SCHEMA 3n, SHA256SUMS b057627d (`b0.txt`) |
|
||||
| P1 | 18:53:29Z | pointer OLD, check pass, unit flags match, bus.tester true, LOAD_OK, the four config keys (`p1.txt`) |
|
||||
| W0 | 18:53:36Z | copy made, LOCK_MATCH, IMPORT_OK, LOAD_OK, NEW_LOADER_OK, c11 W0 0 user threads (`w0.txt`) |
|
||||
| P2 | 18:54:17Z | P2_STUBS_PASS, P2_UNITS_PASS (`p2.txt`, `p2-units.txt`) |
|
||||
| P3 rehearsal (Mos) | 18:54:17Z to 18:54:21Z | REHEARSAL_PASS rc 0, 18 PASS lines, all 26 tables equal (mos-1492, `/mnt/storage/scratch/mos-1492`) |
|
||||
| P4, P5, P6 | 18:54:25Z | P4 PASS, P5 PASS with R301 PASS, matrix and tester reads (`p4.txt`, `p5.txt`, `matrix-old.txt`, `tester-old.txt`) |
|
||||
| W0b to W4 | 18:57:24Z to 18:58:17Z | `wsteps.sh` rc 0 (`wsteps.out`, `W.txt`) |
|
||||
| W0b | 18:57:24Z | `.pre-window-20261023T185724Z`, sha256 1e49bdf0 |
|
||||
| W1 | 18:57:25Z | chief r28dbbc5c6b4d and pm ra38826f3c6e2, neither working, no other launch; S1 a06b59f2; D3 `d3-20261023T185729Z`, 93122 members, SHA256SUMS 06ceb124 |
|
||||
| W2 status | 18:58:16Z | pointer OLD, check pass, unit flags match, drift 141 |
|
||||
| W3 plan | 18:58Z | 3n to 3n, migration none, no needs: line, 141 commits, Console line with OLD's flags exactly (`W3-plan.txt` 9a531706) |
|
||||
| W4 unit read | 18:58:17Z | OLD units, DropInPaths empty, bus `--pm`, no quote or backslash |
|
||||
| W5 pre-read (mos-1493) | 18:59:10Z | chief and pm not working, no other launch |
|
||||
| W5 activate --pm --tester-socket | 18:59:11Z to 18:59:17Z | exit 0, stopped store 3n, no migration, gate passed, activate ok (`W5.txt`) |
|
||||
| W5 status, rollback plan | 18:59:17Z | pointer NEW, pm true, 3n, check pass; `rollback --plan` reads to 464010fbe, 3n to 3n, migration none |
|
||||
| W6 with D2 | 18:59:23Z to 18:59:28Z | W6_PASS (`w6.out`) |
|
||||
| W9 checks | 18:59:53Z to 18:59:54Z | W9_CHECKS_PASS (`w9.out`) |
|
||||
| W10 | 19:00:03Z to 19:00:04Z | W10_PASS (`w10.out`, `matrix-new.txt`) |
|
||||
|
||||
W5's backup is `~/.mosaic-dev/backups/stack/20261023T185911Z-45dca69f6e4b`: STAMP 2026-10-23T18:59:11.913Z, SCHEMA
|
||||
3n, SHA256SUMS sha256 87bd93819db5f38b579d1c616b1c80ca69d4abcba690b8e43a368b682e573a50, and its sums check OK. The
|
||||
rollback set is `state/stack-rollback/20261023T185911Z-45dca69f6e4b`.
|
||||
|
||||
## W9 and W10 detail
|
||||
|
||||
- W9 Console: mosaic-webui active, pid 758602, started 18:59:13Z, cwd NEW's copy. Bus active, pid 758595, cwd NEW's
|
||||
copy. console-check.sh (d068fe02) gave CONSOLE_PASS. The webui journal since W5 has 1 `proxy proof off` and 0
|
||||
`Sign-in`. `console/` is 0700 and `tester.sock` is 0600. 1 peercred-starts line since W5 names NEW. The bus
|
||||
journal has 0 `library:` lines. One running chief is from this start, re194575ec18c, and no pm is live.
|
||||
- W10: lines a to g are unchanged, and nothing listens on 7333. The tester `/api/config` is 200 with
|
||||
`{"board":"http://127.0.0.1:7331","tester":true,"send":false,"decide":false,"edit":false}`. `/api/bus/agents` is
|
||||
200 with 1 agent. P4 PASS.
|
||||
- W10 refusals: unsigned POSTs on 7332 to `/api/seen`, `/api/reply` and `/api/processing` get 401 "sign-in
|
||||
required". The tester-socket POST to `/api/processing` gets 403 "read-only", with sent false.
|
||||
|
||||
## Rollback sources (not used)
|
||||
|
||||
The schema is 3n on both sides, so a rollback is a pointer flip to 464010fbe (`stack-release.sh rollback
|
||||
mosaic-stack`), with Mos's go first. If the store is in doubt, these are the restore sources:
|
||||
|
||||
- W5's stopped-store backup above.
|
||||
- W1's D3, `d3-20261023T185729Z` (SHA256SUMS 06ceb124).
|
||||
- B0, `b0-20261023T185325Z`.
|
||||
- The business file copies `.pre-window-20261023T185323Z` and `.pre-window-20261023T185724Z`.
|
||||
|
||||
Nothing is pruned.
|
||||
|
||||
## Scripts
|
||||
|
||||
`p0.sh` 45172f42, `p1.sh` d4959c3f, `w0.sh` 6b89c74d, `p2.sh` 65c19a68, `p2units.sh` 06b4fe5b, `p456.sh` c5036755,
|
||||
`wsteps.sh` 0d08102b, `w5pre.sh` 481e4311, `w5.sh` 1b1b41cd, `w6.sh` 0b96abfd, `w9.sh` a9804c21, `w10.sh` d3857512,
|
||||
`c11.sh` 3a7b029b, `tr.sh` 5f21580e, `d3.sh` d8d927ae, `b0.sh` cf570702, `bz.sh` f6c098e6. The thread read bodies
|
||||
stay in `.tr/` and are not committed.
|
||||
|
||||
## Gitea
|
||||
|
||||
I ran `post-gitea.sh` as darkwing from the repo, with the login checked first (`post-gitea.out`). It posted one comment on the
|
||||
issue of each row NEW put live, and each read back equal to its `comments.md` body, from 19:02:00Z to 19:02:08Z:
|
||||
|
||||
- #1720 31271 and #1753 31272.
|
||||
- #1777 31273 and #1797 31274.
|
||||
- #1800 31275 and #1801 31276.
|
||||
- #1807 31277 and #1808 31278.
|
||||
- #1809 31279 and #1813 31280.
|
||||
- #1814 31281 and #1815 31282.
|
||||
|
||||
The P19 body is in `comments.md` and went to Sage for posting.
|
||||
@@ -0,0 +1,951 @@
|
||||
# W0b-W4 start 2026-10-23T18:57:24Z
|
||||
# plan 0c932a4c, NEW 45dca69f6e4bce52834587f66f2ff33ba839ab8a, tool blob 2656f95b00e3, P5 four scripts at NEW and clean, business-check.mjs eece4d46: checked 2026-10-23T18:57:24Z
|
||||
# W0 copy present, w0.txt LOAD_OK
|
||||
# W0b: /home/jwoltje/.config/mosaic-dev/businesses/mosaic-stack.json.pre-window-20261023T185724Z, sha256 1e49bdf05e62607972958f5b7298cfd600c7825812370e26d7c2a842f2af9b93, recorded in backups.txt
|
||||
|
||||
## W1 agents --tester
|
||||
# start 2026-10-23T18:57:24.641Z
|
||||
# command: (cd $REPO && <clean env> /home/jwoltje/.npm-global/bin/mosaic agents --business mosaic-stack --tester)
|
||||
chief r28dbbc5c6b4d claude-code since 2026-10-23T03:46:01.235Z
|
||||
pm ra38826f3c6e2 claude-code since 2026-10-23T03:47:35.853Z
|
||||
# exit 0, end 2026-10-23T18:57:24.896Z
|
||||
|
||||
## W1 launches list
|
||||
# start 2026-10-23T18:57:24.900Z
|
||||
# command: (cd $REPO && <clean env> /home/jwoltje/.npm-global/bin/mosaic launches list)
|
||||
r28dbbc5c6b4d mosaic-stack/chief claude-code claude-opus-5-5 by jason since 2026-10-23T03:46:01.221Z running
|
||||
ra38826f3c6e2 mosaic-stack/pm claude-code claude-opus-5-5 by chief since 2026-10-23T03:47:35.835Z running
|
||||
# exit 0, end 2026-10-23T18:57:25.023Z
|
||||
# W1 launches: chief r28dbbc5c6b4d standing (OLD's activation), pm ra38826f3c6e2 listed (left live by the last W9b), no other launch
|
||||
W1 c11 2026-10-23T18:57:25.086Z threads 5 owners tester=5 user_threads 0 revoke_claims 0 session_ops 0 message_cancels 0 access.json absent (exit 0)
|
||||
# W1 condition 11: W1 c11 2026-10-23T18:57:25.086Z threads 5 owners tester=5 user_threads 0 revoke_claims 0 session_ops 0 message_cancels 0 access.json absent (exit 0)
|
||||
# W1 start stamp 2026-10-23T18:57:25Z
|
||||
# SNAP sha256 639fd28a checked before S1
|
||||
|
||||
## S1 snapshot --held
|
||||
# start 2026-10-23T18:57:25.092Z
|
||||
# command: (cd $REPO && <clean env> node /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-84f53540d/snapshot.mjs --store /home/jwoltje/.mosaic-dev/bus/bus.sqlite --held)
|
||||
{
|
||||
"schema": "3n",
|
||||
"tables": {
|
||||
"decision_events": {
|
||||
"rows": 22,
|
||||
"maxSeq": 22,
|
||||
"sha256": "b016d2a7cb0116252166016822c472af1cc520435a6538ecb7be5db62c6cb4b3"
|
||||
},
|
||||
"decisions": {
|
||||
"rows": 22,
|
||||
"maxSeq": 22,
|
||||
"sha256": "eafcd57d3531f7ac7c768e512632a3975df372c49ffd95abe7d858fd05ce93a8"
|
||||
},
|
||||
"deliveries": {
|
||||
"rows": 1955,
|
||||
"maxSeq": 1955,
|
||||
"sha256": "263a7a4dd5316a20a68503a00a091e6624fee5f336a6051512e4d1e9e8c49d98"
|
||||
},
|
||||
"events": {
|
||||
"rows": 2310,
|
||||
"maxSeq": 2310,
|
||||
"sha256": "b958b42712cd8fe0ec0c571d938ec3e52613c47dae3a7a7a89529ca13ed4fca5"
|
||||
},
|
||||
"gitea_grants": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"gitea_users": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"host_grants": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"hosts": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"instance_names": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"message_cancels": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"message_threads": {
|
||||
"rows": 10,
|
||||
"maxSeq": null
|
||||
},
|
||||
"messages": {
|
||||
"rows": 642,
|
||||
"maxSeq": 642
|
||||
},
|
||||
"meta": {
|
||||
"rows": 3,
|
||||
"maxSeq": null,
|
||||
"sha256": "f3b8216dbaeb799643500760f3f286ad9ecc52c86449fdf3fa60da17b9b3bfe4"
|
||||
},
|
||||
"projects": {
|
||||
"rows": 5,
|
||||
"maxSeq": 5,
|
||||
"sha256": "cdf87b72ef95a2f988c242d35f1050f9e3e310637f84a645b51694daa924650f"
|
||||
},
|
||||
"role_claims": {
|
||||
"rows": 118,
|
||||
"maxSeq": 118,
|
||||
"sha256": "ab7e91854090c255e674053b7ceb1af8b4520fa7027b0211a2717094872ca6e2"
|
||||
},
|
||||
"session_defaults": {
|
||||
"rows": 5,
|
||||
"maxSeq": 5,
|
||||
"sha256": "0fa4a532b106e963e200064d7f7464412a2fd6fce5a59a35ba7097d9bdca879c"
|
||||
},
|
||||
"session_ops": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"sessions": {
|
||||
"rows": 5,
|
||||
"maxSeq": 5,
|
||||
"sha256": "7094392718785cbaec3d5e5bd640f4b36d1e2be1fb4b7c6a9db77308de111803"
|
||||
},
|
||||
"task_comment_cursors": {
|
||||
"rows": 752,
|
||||
"maxSeq": 752,
|
||||
"sha256": "854203bd74eb66bf5b22695a9dc820971129cbc015caa76f49f9d31a52651659"
|
||||
},
|
||||
"task_snapshots": {
|
||||
"rows": 605,
|
||||
"maxSeq": 605,
|
||||
"sha256": "47947f1cf549a6e675a279806b4c3c394f0e5f191770689934af610fea907cff"
|
||||
},
|
||||
"thread_claims": {
|
||||
"rows": 10,
|
||||
"maxSeq": 10,
|
||||
"sha256": "925e82e219ca7d469a3d9d72bd7033b9f52a47f1da272ac7ae31832a24cd1b91"
|
||||
},
|
||||
"thread_opens": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"thread_shares": {
|
||||
"rows": 0,
|
||||
"maxSeq": null,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"threads": {
|
||||
"rows": 5,
|
||||
"maxSeq": 5,
|
||||
"sha256": "6cc7fbd14dd1d8164dbeab1e2c2911ca206c283e722724ee2b0b0a8e22e0f533"
|
||||
},
|
||||
"usage_records": {
|
||||
"rows": 112,
|
||||
"maxSeq": 112,
|
||||
"sha256": "50e7cefdf18f913a2d0e780d7e3854e2cedb6f4cecbb0392857b4ffaae9dc277",
|
||||
"byRun": [
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r8fba7e598156",
|
||||
"input": "0",
|
||||
"output": "0",
|
||||
"unknownTurns": 1
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r4a96e2142e4d",
|
||||
"input": "2",
|
||||
"output": "52",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rc78c9700c8e9",
|
||||
"input": "14",
|
||||
"output": "1519",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r293f33bcbc63",
|
||||
"input": "2",
|
||||
"output": "44",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r34520a581318",
|
||||
"input": "6",
|
||||
"output": "323",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r7e99838f9f93",
|
||||
"input": "2",
|
||||
"output": "44",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rc964611b2092",
|
||||
"input": "4",
|
||||
"output": "120",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rbb708846b605",
|
||||
"input": "12",
|
||||
"output": "2089",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rc36b17ef3788",
|
||||
"input": "16",
|
||||
"output": "5221",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r097436c91816",
|
||||
"input": "16",
|
||||
"output": "3340",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r497f1c817d4d",
|
||||
"input": "2",
|
||||
"output": "80",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rc9e993da24cf",
|
||||
"input": "30",
|
||||
"output": "5871",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r7646a7a4a2bd",
|
||||
"input": "12",
|
||||
"output": "1448",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r4004e5e09433",
|
||||
"input": "2",
|
||||
"output": "61",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "rd0b8fdb4d62d",
|
||||
"input": "18",
|
||||
"output": "1714",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r62b31aae5852",
|
||||
"input": "2",
|
||||
"output": "31",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r2cf8536da2c3",
|
||||
"input": "12",
|
||||
"output": "1420",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "re6c69f1ec1f0",
|
||||
"input": "16",
|
||||
"output": "1471",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r2c62e02f8371",
|
||||
"input": "2",
|
||||
"output": "68",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r410293d04d3d",
|
||||
"input": "10",
|
||||
"output": "1105",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "r28dbbc5c6b4d",
|
||||
"input": "10",
|
||||
"output": "1137",
|
||||
"unknownTurns": 0
|
||||
},
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"run": "ra38826f3c6e2",
|
||||
"input": "8",
|
||||
"output": "1154",
|
||||
"unknownTurns": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"untimed": [
|
||||
"gitea_grants",
|
||||
"gitea_users",
|
||||
"host_grants",
|
||||
"hosts",
|
||||
"message_threads",
|
||||
"meta",
|
||||
"task_comment_cursors"
|
||||
]
|
||||
}
|
||||
# exit 0, end 2026-10-23T18:57:25.158Z
|
||||
# S1.json sha256 a06b59f250e1399e3b6be62766f5092204873b13d51daea252de343e7767ac45
|
||||
|
||||
## W1 tester thread reads (tr.sh W1)
|
||||
W1 threads --tester: 5 thread(s), threads.json sha256 07c154d75d929028
|
||||
W1 thread d0ba7a66-aa3f-4918-9518-94132bce6b28 messages 2 sha256 985ac61ca9220f2f
|
||||
W1 thread 446201de-e8b5-4df3-9356-d0d5422cc899 messages 2 sha256 7e7e9eeeaa8c1e09
|
||||
W1 thread b89fcca4-6b82-48bd-9310-fb82c5ae8518 messages 2 sha256 f4e4916b9656a403
|
||||
W1 thread d9bb7ff3-7a8b-4bb8-ba12-03ca094cee4e messages 2 sha256 728ff36f3e003c63
|
||||
W1 thread b85a57fe-84f9-4785-a596-135af39e334a messages 2 sha256 727de0d9c809a41a
|
||||
# exit 0
|
||||
# W1 D3: /home/jwoltje/.mosaic-dev/backups/d3-20261023T185729Z, STAMP 2026-10-23T18:57:29.717Z, SHA256SUMS sha256 06ceb124c6f1a3dc70239132c2046e3be39a446b2cf953f4a433d80262784506, members 93122 tar exit 0 sessions.json sessionsVersion 2
|
||||
|
||||
## W2 status
|
||||
# start 2026-10-23T18:58:16.496Z
|
||||
# command: (cd $REPO && <clean env> scripts/stack-release.sh status mosaic-stack)
|
||||
pointer: /home/jwoltje/.mosaic-dev/state/stack-active.json
|
||||
{"copy":"464010fbe4c6925b077b9b8182a209ee2177eb9d","business":"mosaic-stack","pm":true,"claude":"/home/jwoltje/.local/bin/claude","console":["--port","7332","--public-host","mosaic.woltje.com","--auth-header","X-authentik-username","--allow-user","jason.woltje","--tester-socket"],"schema":"3n","activation":"20261023T034557Z-464010fbe4c6","at":"2026-10-23T03:46:02Z"}
|
||||
log (last five lines):
|
||||
{"at":"2026-10-22T15:06:00Z","op":"activate","from":"86f95bb27f6cb237bf9fa9ba53320bace6c4de0b","to":"84f53540dd0d21ef179ca29697e172b0246e78d1","backup":"20261022T150555Z-84f53540dd0d","activation":"20261022T150555Z-84f53540dd0d","result":"ok"}
|
||||
{"at":"2026-10-22T20:16:21Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":null,"activation":"20261022T201621Z-0cbe2e9b35e5","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-22T20:16:24Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":"20261022T201621Z-0cbe2e9b35e5","activation":"20261022T201621Z-0cbe2e9b35e5","result":"ok"}
|
||||
{"at":"2026-10-23T03:45:57Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":null,"activation":"20261023T034557Z-464010fbe4c6","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T03:46:02Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":"20261023T034557Z-464010fbe4c6","activation":"20261023T034557Z-464010fbe4c6","result":"ok"}
|
||||
check:
|
||||
bus: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
Console: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
CLI: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
result: pass
|
||||
bus status:
|
||||
host: mosaic-stack, pid 3811005, running, since 2026-10-23T03:45:59.548Z, notifier off
|
||||
socket: present
|
||||
writer.lock: pid 3811049
|
||||
boot: organization file loaded at 2026-10-23T03:45:59.547Z
|
||||
unit flags: match the pointer
|
||||
drift: 141 commit(s) on refactor since the pointer's copy
|
||||
# exit 0, end 2026-10-23T18:58:16.806Z
|
||||
|
||||
## W3 activate NEW --pm --tester-socket --plan
|
||||
# start 2026-10-23T18:58:16.808Z
|
||||
# command: (cd $REPO && <clean env> scripts/stack-release.sh activate 45dca69f6e4bce52834587f66f2ff33ba839ab8a mosaic-stack --pm --tester-socket --plan)
|
||||
plan: activate for mosaic-stack
|
||||
from: 464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
to: 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
store schema: 3n (read from the store the running bus holds)
|
||||
target schema: 3n
|
||||
migration: none; the store is at the target's version
|
||||
backup: the run backs up the stopped store to /home/jwoltje/.mosaic-dev/backups/stack/<activation>/ before any migration
|
||||
commits: the run adds 141 (newest first, at most 200):
|
||||
45dca69f6 sessions: Sage 10-23 Vikunja 571 W rows 309-318 filed, 571 done
|
||||
293b42fee queue: revs 3617-3636: Vikunja 571 W build rows 309-318 added (sage 3617-3626: W1, W2, W3a, W3b, W6, W3, W4b, W5, W7, W8, post-10-27, brief docs/plans/2026-10-21_q195-writing-editor.md) and owners set to unassigned (sage 3627-3636)
|
||||
369607e92 sessions: Sage 10-23 rows 308 and 252 landings, 571 Connections design amendment, Vikunja 597; Scrooge row 252 line
|
||||
59f013247 queue: revs 3589-3616: row 306 in-progress, in-review and failed request (morgana 3589, 3592-3593), request (sage 3594-3595, comment 31207), approve record (dewey 3596), note and done (sage 3599-3600); row 308 added and briefed (sage 3590-3591), claim, in-review and failed request (gosalyn 3601-3603), request (sage 3604-3605, comment 31223), approve record (webby 3606, comment 31224), note and done (sage 3613-3614, landed 30e6bb680); row 291 note and done (sage 3597-3598); row 252 issue #1753 (sage 3607), in-review and failed request (scrooge 3608-3609), request (sage 3610-3611, comment 31230), approve record (webby 3612, comment 31229), note and done (sage 3615-3616, landed 45ea3fa0d)
|
||||
e8bb13df8 docs: clarify Connections opening order and current-link filtering
|
||||
dba2ebdb8 docs: plan required Console Connections view before real import
|
||||
45ea3fa0d row 252: library-cli and thread-claims bus.mjs stubs gain the throwing consoleCall export cli.mjs now imports (Mos GO mos-1465 under mos-1272, via sage-3497)
|
||||
f69c96200 row 252: decide-sso J19 killer (a granted user's config says decide false, its decision POSTs stop at owner-only), J16 checks the config that starts without send; BUILD.md rulings, J11c and J18 equivalence, part 2 mutants (#1753)
|
||||
5b6c87814 row 252: decide-browser placements (mos-1272): the hostile grant goes in with its INSERT since decisions is append-only, and page() loads about:blank first so a same-URL visit reloads
|
||||
8c2c5303c row 252: access-boot fixture provider gains issuer https://idp.test, so consoleOwners can key the owner (Mos GO mos-1464 under mos-1272, via sage-3494)
|
||||
23e3d09fa row 252: decide-sso first-run reds placed (mos-1272): a decision transport without --send never starts, and a POST to /api/bus/decision.* meets row 74's read-only refusal; BUILD.md run notes (#1753)
|
||||
795a645e6 row 252: console-decide events() keeps the row kind as event, since an answer body's kind shadowed it (first-run red at :180, two vacuous zero counts), and a J7 killer test for the console cap release over the socket (#1753)
|
||||
076ca8d6e row 252 BUILD.md: rebase onto fe4ee8c7b, commit map and the six conflict resolutions (sage-3482)
|
||||
68be86324 row 252: mos-1321, reword the shell.test write-boundary comment so Approve and Deny is the one decision control; BUILD.md records the ruling and its channel-proof review condition
|
||||
264fad2e2 row 252 BUILD.md: channel-proof overlap with row 239 (sage-2835)
|
||||
24672fd9d row 252: Console inbox Approve and Deny for grant requests, human-only through a console owner proof, confirmation then resolve, via console with human.input before the executor (#1753, Webby N1-N5); tests not yet run
|
||||
30e6bb680 gosalyn: PRD 1.17, Case 2 story files are DOCX (row 308, sage-3516, Q235 to Q237, Q239). Applies the approved d9 text at 4607e15b8 word for word to the 1.16 text. Status, the header sentence and a 1.17 source line, the Creative library lead, REQ-LIB-1, -2, -4, -5 and -6 changed as d9 says, new REQ-LIB-8 for the writing store and REQ-LIB-9 for the Console's DOCX editor, the 1.17 notes and four risks. requirements.json goes to 1.17 with 87 ids and the d9 titles, and the tasks and bus test pins follow
|
||||
7defb58e9 sessions: Sage 10-23 rows 291 and 306 landings, row 308 launch
|
||||
9c8877bdf plans: DEFERRED row 306 N1 (revoke Set lost on broker restart) and N2 (pending limit stop answers not-holder first), landed 2d0318a44 (mos-1463)
|
||||
2d0318a44 morgana: row 306 build (#1813): #accessRevoked from #revokeLost, #agent answers thread-revoked until endLaunch, runner stops on thread-revoked, READMEs, access-revoke.test 7 7 (mos-1463)
|
||||
bd3fa2a48 morgana: row 306 red-first tests (#1813): bus revoke-window T1/T2, cli revoke-window T3 forcing test; no product code
|
||||
ab575ee55 morgana: row 306 design r2 (dewey-0918 C1-C3, sage-3483/mos-1463): T3 asserts no thread-revoked event for A, T2 limit half makes a second call, six-suite gate, access-revoke edit bounded to 7 7
|
||||
1676ad0de morgana: row 306 design r1 (#1813, sage-3478): #accessRevoked set from #revokeLost, #agent answers thread-revoked until endLaunch, runner maps it to stopped; T1-T3, M1-M3, six access-revoke asserts to Mos via Sage
|
||||
4874d1e83 gosalyn: PRD 1.16 routes library.write under REQ-LIB-6 (mos-1328, mos-1329, sage-2919, webby-0164 B2). REQ-WAIT-3 gains the routing paragraph with its bounds, creative roles only and within-role, Markdown under supporting folders a human marks, never a story file, the writing agent's live Gitea grant on the library project, one commit per write by its own account with the trailer, notice and revert. REQ-LIB-6 names the action. Status, the header, a 1.16 source line and a 1.16 note. requirements.json changes its version only, with the test pin
|
||||
e909ef51a plans: PRD 1.17 brief (Gitea #1815, Vikunja 570): Gosalyn builds d9 4607e15b8 onto 1.16 after row 291, Webby reviews, four files, Sage gates
|
||||
4607e15b8 sage: PRD 1.17 d9 r3 (02f28dec), Mos's J-b check mos-1470: J-b records N20 as confirmed, REQ-LIB-5's version tag cites Q239 for the Connections view (N21), d9 changes names both
|
||||
8b4201055 sage: PRD 1.17 d9 round 2 (b17ce386), Webby round 6 B1: REQ-LIB-5, its note, the Risks line and the A6 line take mos-1443 R3's text as written; J-b in the past tense (N19); the import-waits line cited as Mos's R3 default (N20)
|
||||
4863e2caf sage: PRD 1.17 draft 9 (7dfc52fd), d8 plus Jason's Q41 O2 (Q239, mos-1467): REQ-LIB-5 requires the Console Connections view for converted chapters, note and Risks line follow, J-b records the answer; Webby round 5 N15-N17
|
||||
7b25a6063 agents: webui runs set MOSAIC_REQUIRE_EDITOR_BUILD=1 and linked worktrees npm ci packages/webui (Vikunja 597)
|
||||
e86df37d7 sessions: Sage 272 and 307 landings, 306 design, 252 rebase check
|
||||
fe4ee8c7b queue: revs 3582-3588: row 307 in-review and failed request (gizmoduck 3582-3583), request (sage 3584-3585, comment 31189), round 1 approve record (duckworth 3586), landing note and done at d243f6b25 (sage 3587-3588); queue only
|
||||
0621c439e plans: DEFERRED gains row 307 N1 (row 270's store-unreadable doesn't stick; #1814 landed d243f6b25)
|
||||
d243f6b25 gizmoduck: row 307 run logs: capture.mjs makes each fixture's data root before sessionStore (base session.mjs:78 needs it), BUILD.md expected red adds claude-history test B (duckworth-0287), steps 1-6 results on 1f6db1589 and 1f00d4f91 with skips named and M1-M4 killed (sage-3455, sage-3465)
|
||||
869670d1b gizmoduck: row 307 BUILD.md: commits, old-test edits against mos-1459, new tests and the empty-session correction to test B, expected red on 1f6db1589, run plan with mos-1275 limits, mutants M1-M4
|
||||
dbbda2537 gizmoduck: row 307 (#1814, Vikunja 598) harness kind gains compactions: pi's stream scan and Claude-history check move to packages/plugins/harness/pi/compactions.mjs, claude-code answers harness-unsupported, core keeps the ledger and checks each answer, readLedger reads the reason only, the launcher passes the loaded module; four old-test edits under mos-1459
|
||||
a9da046f8 gizmoduck: row 307 (#1814, Vikunja 598) new tests, red first: row 270's ledgers per reason read the same count and the next collection goes through the harness module, core refuses an answer out of contract, pi answers what base scanPi read, claude-code answers harness-unsupported, a module without compactions refuses missing-export; capture.mjs checks the literals against base 1e629c892
|
||||
4a71b56ab gizmoduck: row 307 design r1 notes: seat suite whole and compactions-launch T3 run-not-skip in the gate (Duckworth C1, C2), launcher closure comment on bypassing call() (N1), line refs :301 and :302 (N2) (duckworth-0280)
|
||||
520889419 gizmoduck: row 307 (#1814, Vikunja 598) design: harness export compactions({ store, cursors, budget, streams, first }), interfaceVersion stays 1, core keeps the ledger, readLedger reads the reason, ledger compatibility table, four old-test edits for Mos (sage-3440)
|
||||
8dc132bec queue: revs 3572-3581: row 272 round 3 approve record (scrooge 3572, comment 31177), row 307 claim (gizmoduck 3573), row 272 round 4 moves (huey 3574-3576), request (sage 3577-3578, comment 31183), round 4 approve record (scrooge 3579, comment 31184), landing note and done at d33989230 (sage 3580-3581); queue only
|
||||
08b8831bc plans: DEFERRED gains row 272 N1 (user session verbs) and the row 270 N6 rebound after row 307 (#1777 landed d33989230)
|
||||
d33989230 row 272: scope unavailable-session waits to the chat area
|
||||
0ea3db297 row 272: fix session fixture authority and initial chat render
|
||||
f859d06d2 row 272: preserve granted-user default chat on denied session catalog
|
||||
70651f45d row 272: retain session recovery state on invalid selection
|
||||
490f45f02 row 272: preserve untested session CLI and Console draft (sage-3145)
|
||||
1e629c892 queue: revs 3565-3571: row 272 round 3 moves on 72690cae7 (huey 3565-3567) and request (sage 3569-3570, comment 31174); row 307 added and briefed (#1814, Vikunja 598, mos-1455 item 3; sage 3568, 3571); queue only
|
||||
84de3fbca plans: row 270 pi compaction reading moves behind the harness kind (#1814, Vikunja 598, mos-1455 item 3, Gizmoduck, reviewer Duckworth); gate template runs all five suites and sets MOSAIC_REQUIRE_EDITOR_BUILD=1 (mos-1455 item 4, mos-1453)
|
||||
1e4c1e6e9 queue: revs 3539-3564: rows 300 and 301 round 1 claims and in-review moves (launchpad 3539-3544), round 1 requests (sage 3545-3548), round 2 moves (launchpad 3549-3554), round 2 requests (sage 3555-3558), Duckworth approve records 300 (3559) and 301 (3560), landing notes and done at 07315e651 and 5b846b048 (sage 3561-3564); queue only
|
||||
5b846b048 launchpad: row 301 (#1808): library-cli and thread-claims bus.mjs fixtures export throwing busBusiness and userCaller stubs (mos-1451 under mos-1272); BUILD.md repaired with run 1 and the ruling; manifest seven paths; unrun
|
||||
59f0e44f4 launchpad: row 301 (#1808): channel-proof re-pins webui bus.mjs at 39fcb27c for the user transport fold, humanCall unchanged (mos-1449 under mos-1272); unrun
|
||||
bb031ec84 launchpad: row 301 (#1808): R6-N4, user-bus.mjs folded into bus.mjs beside humanCall, unchanged; channel-proof re-pin held for Mos's go; unrun
|
||||
07315e651 launchpad: row 300 (#1807): run 1 gate results in BUILD.md (1/0, webui 375/0, M12 killed) and Duckworth's N1; packet only
|
||||
fb04cbc43 launchpad: row 300 (#1807): run 1 first-run red placed (mos-1272), the test's call helper resolves headers again as granted-user.test does; manifest re-hashed
|
||||
9d929911c launchpad: row 300 (#1807): R6-N1, an HTTP-level test of the user-session option swap with the userRoute gate stubbed open by a load hook, and mutant M12; unrun
|
||||
bcf3c1dac queue: revs 3531-3538: row 303 landing note and done at e551cd846 (sage 3531/3532); row 304 approve record (dewey 3533), row 305 approve record (filbert 3534); row 304 landing note and done at a863015a5 (sage 3535/3536); row 305 landing note and done at d52d9f1f2 (sage 3537/3538); queue only
|
||||
d52d9f1f2 row 305 (#1812): gate run 1 evidence (sage-3374): both suites green, mutants a and b killed in both, c a known survivor
|
||||
830f3d8bf row 305 (#1812): BUILD.md notes the SIGKILL leak and its cleanup (Filbert N1)
|
||||
e48d60216 row 305 (#1812): BUILD.md with the trace, change, gate and the three mos-1445 mutants
|
||||
cabcb81d4 row 305 (#1812): each suite's network check also requires the network present under the run's project before the remove (mos-1445)
|
||||
353d65f57 row 305 (#1812, Vikunja 591) draft: per-run COMPOSE_PROJECT_NAME, exit trap removes that one network, one absent-network check per suite; for Mos through Sage before the build (mos-1272)
|
||||
2c289f6f0 SESSIONS: filbert row 305 round 1 approve (c31127, rev 3534)
|
||||
a863015a5 test: match Claude memory slug normalization under mos-1442
|
||||
e551cd846 launchpad: row 303 (#1810): R9 asserts the rehearsal directory is set before the placeholders check joins it, so a null shows the rehearsal output (mos-1422, Vikunja 589)
|
||||
c13c337e1 queue: revs 3521-3530: rows 304 and 305 claimed (rocko 3521, gizmoduck 3522); row 305 in-review on 7e8218a2e (gizmoduck 3523), request failed without a token (gizmoduck 3524), sage's request posted c31126 (3525/3526); row 304 in-review on 5e8354ebb (rocko 3527), request failed without a token (rocko 3528), sage's request posted c31128 (3529/3530); queue only
|
||||
435a7458d sage: PRD 1.17 draft 8 (343cff6f), d7 plus Mos's d8 fix list mos-1443 (R1-R14, M1-M45, J-i to J-l) and the mos-1446 choices (M10 default, M15 quotes Q235 in full, M40 both sentences); M15 and M16 cite b99ca86b9. Webby APPROVE round 5 webby-0210, no B items; N15-N17 carry to d9
|
||||
b99ca86b9 docs: align editor conversion boundary and host restore with PRD d8
|
||||
0e057e05e queue: revs 3511-3520: rows 304, 305 and 306 added and briefed (sage 3511-3516); row 272 round 2 in-review on b44332a93 (huey 3517), request failed without a token (huey 3518), sage's request posted c31120 (3519/3520); queue only (sage)
|
||||
c16e943b9 briefs: mos-1442 approvals for the 590 and 591 rows (#1811, #1812), the 295 N1 revoke-window row (#1813); DEFERRED 295 N1 (sage)
|
||||
ac1644e1c BUILD-LOG and SESSIONS: rows 302, 295 and 219 landings, the Docker pool diagnostic; DEFERRED 219 N1 (U6); brief for the Vikunja 590 and 591 rows (sage)
|
||||
90633c864 queue: revs 3495-3509: row 295 round 2 in-progress and in-review (morgana 3495-3497), sage's request posted (3498/3499), dewey approve record (3500), row 295 landing note and done at 2efd127ce (sage 3501/3502); row 219 in-review on b899095e4 (rocko 3503/3504, request failed without a token), sage's request posted c31107 (3505/3506), dewey approve record c31108 (3507), row 219 landing note and done at 5fdfd7275 (sage 3508/3509); queue only
|
||||
5fdfd7275 docs: preserve row 219 full gate on the post-295 merge
|
||||
a236dbc30 docs: preserve row 219 mos-1429 short-run evidence
|
||||
312260db7 test: prepare row 219 admission pins under mos-1429
|
||||
d7b4967ed docs: record row 219 rebase after granted-user Console
|
||||
90a3c03cf test: assert creative history in its native session store
|
||||
282f5b4e4 test: pin the compaction audit before the persona refusal
|
||||
781fd509c test: give row 219 persona fixture its explicit session
|
||||
52a73e83b docs: rebase row 219 gate packet and record run bounds
|
||||
049214486 wip: publish unverified row 219 inspection candidate
|
||||
2efd127ce morgana: row 295 r2 gate results on d68b4300d (sage-3338, sage-3340): red first, green, M8 count, whole files, suites, script limits and skips, M1-M16 killed
|
||||
fdbe95d88 morgana: row 295 r2 narrow alice grant (Dewey F1, sage-3333): aliceAccess(ref) names only the test's project, set after project.create; asserts and bindLaunch lines byte-identical; BUILD.md preservation record updated
|
||||
cb96220b5 morgana: row 295 r2 old-test setup (mos-1436 option a): message-filter's :117 and governance-pin tests get an alice collaborator access document, spec-fixtures fixture() takes an optional access (null default); asserts and bindLaunch lines byte-identical; BUILD.md gate record, assertion preservation, N1 revoke window
|
||||
6408dcec4 morgana: row 295 r2 first-run reds placed (mos-1272): claim rows spread off the store's null prototype in access-revoke and thread-revoke, demo switches the pi harness on for startBroker, Alice binds at her first call in thread-revoke
|
||||
0c8f12ea2 morgana: row 295 r2 rebase on 80793d824 (sage-3256): accessFor comment is stamp-cached (dewey-0871 N3); BUILD.md rebase note
|
||||
24f8f5d73 morgana: row 295 r2: wrap the launcher's revoked comment (dewey-0874 nit)
|
||||
31da9dcb8 morgana: row 295 r2 (dewey-0871): threadsState ends an expired grant's held claim from the cached read by access-expiry (B1, D7, M16, M11 claim row); access.reload scope as D8 (N1); bus README access.reload, revoked and revocation (N2); tests unrun
|
||||
ff54a1556 morgana: row 295 FED R4 revocation (#1801): 30 s access timer, access.reload, one-transaction claim end on a loss, threadsState revoked, launcher SIGTERM and no start, CLI reload after grant/revoke; tests unrun (no CLEAR yet)
|
||||
249d42dfc morgana: row 295 plan (FED R4 revocation, #1801): sweep on timer, access.reload and user requests; threadsState revoked; launcher skip and SIGTERM; bindLaunch and role.claim refuse thread-revoked
|
||||
07802dc57 queue: revs 3488-3494: row 302 (#1809) in-review on 2a8281a6f (gizmoduck 3488), gizmoduck's request failed without a token (3489), sage's request posted c31091 (3490/3491), dewey approve record c31092 (3492); row 302 landing note and done move at 3ed9fd754 (sage 3493/3494); queue only
|
||||
3ed9fd754 gizmoduck: row 302 (#1809) gate results: run 1 stopped on launcher-released.test:89 (d6, mos-1430); run 2 on merge 783602e06 (5b63ea323 onto 1ac655005) red as ruled, suites green, M1-M5 M7-M9 killed; RESULTS.md and logs, packet only
|
||||
c9fcf9b5a gizmoduck: row 302 (#1809) d6: launcher-released.test:89 counts only a-run's delivery rows and pins the one routed row with holder_run null; #route writes that row for every message (gizmoduck-0388, sage-3294, sage-3296, Mos ruling pending sage-3293); local, not pushed
|
||||
2b6111a17 row 302 (#1809, Vikunja 588): a run threadIdle or landRelease released answers launcher-released on every call needing the claim until it ends, role.claim refuses it (Dewey D1), and the runner exits stopped without releasing again
|
||||
4a827edb0 row 302 (#1809, Vikunja 588): red first, the final forcing tests and the four pins Mos ruled (mos-1414/1415/1416), over unfixed product files; BUILD.md d3-d5 and ASSERTION-PRESERVATION
|
||||
908f92b03 gizmoduck: row 302 design d2: threads.test pins are :392/:394/:395 (sage-3204), land-relaunch grep finds land.test:464 as a third old pin under Q1
|
||||
62470a3ec gizmoduck: row 302 BUILD.md folds Dewey's d1 approval (dewey-0875): D1 role.claim refuses a released run, landRelease reaches runner.test:742-772 so Q1 moves :771-772, Q2-Q4 and N1-N4 settled
|
||||
fee08d7ab gizmoduck: row 302 (#1809, Vikunja 588) idle-stop race design round d1 for Dewey: idle-released code from the broker's own record of threadIdle's release, runner maps it to stopped/0, forcing cli test holds the window open until a call lands, threads.test:393 is the one changed pin (sage-3200, mos-1411)
|
||||
1ac655005 BUILD-LOG and SESSIONS: row 299 gate and landing, row 303 review, 219 and 295 rebases (sage)
|
||||
8a35ffadb queue: revs 3474-3487: row 303 (#1810) in-progress and in-review on 3c3be5d3 (launchpad 3474/3475), launchpad's request failed without a token (3476), sage's request posted c31082 (3477/3478), duckworth approve record c31079 (3480); row 299 (#1806) claim (gander 3479), in-review on 277ace0b (gander 3481), gander's request failed without a token (3482), sage's request posted c31083 (3483/3484), filbert approve record c31084 (3485); row 299 landing note and done move at ffb2fedfb (sage 3486/3487); queue only
|
||||
ffb2fedfb docs(row299): record fresh timing gate and six assertion kills
|
||||
11d1e2e0c docs(row299): record clean integration on 80793d824
|
||||
ed81f6eba docs(row299): record mos-1409 preservation and static candidate
|
||||
e14164ab4 test(case): observe P10 wait directly under mos-1409
|
||||
10113b04f docs(row299): propose direct P10 wait timing for mos-1272 review
|
||||
c1f910b4c SESSIONS: filbert row 299 manifest round 1 approve (c31084, rev 3485)
|
||||
15e688cc0 BUILD-LOG and SESSIONS: row 294 rounds 3-4 and landing, R9 transient and row 303, row 219 edits 2-3 (sage)
|
||||
80793d824 queue: revs 3464-3473: row 294 (#1800) round 4 in-progress and in-review on a1ff5d67 (launchpad 3464/3465), launchpad's request without a token failed (3466), sage's request posted c31055 (3467/3468), duckworth approve record c31053 (3469); row 294 landing note and done move at d3059c2c3 (sage 3470/3471); row 303 (R9 guard, #1810, Vikunja 589, mos-1422) added and briefed (sage 3472/3473); queue only
|
||||
ad6ca7930 docs: brief for the R9 guard row (Vikunja 589, #1810, mos-1422); docs only
|
||||
d3059c2c3 launchpad: row 294 run 4 (#1800): whole gate green on 8616b9a4f (webui 365, cli 909, bus 873, 10 scripts), M1-M11 killed; M1 record names G4's first failure and G5 green (Duckworth C1); receipts in run4/
|
||||
6f0793067 launchpad: row 294 round 4 (#1800): rehearsal fixture copies carry cli access.mjs and transport.mjs, B1-B3 pin the fixture's tracker warning in full (Mos mos-1419, sage-3238); manifest round 4 (19 paths), run 3 receipts; unrun
|
||||
b01e1c9ee launchpad: row 294 round 3 (#1800): G5's baseline is coalesce(max(seq), 0), since max(seq) is NULL on the fixture's empty events table and run 2 read 0 of 22 refusal events (sage-3212, Mos ruling pending sage-3211); manifest round 3, run 2 receipts; unrun
|
||||
8716e72f2 launchpad: row 294 round 2 (#1800): browser.test pin gains /federation.js at index 2 (Mos mos-1412 (a)), G5 pins one action.refused {code: access-refused} per refused verb and every other table unchanged (sage-3194); manifest round 2 (18 paths), ASSERTION-PRESERVATION.json, run 1 receipts; unrun
|
||||
9beeeb995 launchpad: row 294 run limits from recorded durations, 3x or more (sage-3187, mos-1275)
|
||||
9e43fefe6 launchpad: row 294 BUILD.md M1 expectation corrected (Duckworth C1), review recorded with N1-N4 dispositions
|
||||
d0460ed47 launchpad: row 294 round 1 manifest (17 paths from 9450774cb) and notes with the owner-transport exception
|
||||
26f93fa74 launchpad: row 294 sage-3157, owner-transport exception written out, userOptionsFor, G9 pins no user value, M10/M11 (unrun, #1800)
|
||||
c9e67e7d2 launchpad: row 294 BUILD.md M4 kill names the moved test
|
||||
52d2a1610 launchpad: row 294 rulings sage-3153 (boot refusal line, owner transport seam G9, C7 follow-up, access.test.mjs unchanged; unrun, #1800)
|
||||
afef0ea88 launchpad: row 294 FED R6 build and plan, granted-user sign-in (unrun, #1800)
|
||||
09d0d6faf queue: revs 3457-3463: row 294 (#1800) round 3 in-progress and in-review on cb1648f3 (launchpad 3457/3458), launchpad's request without a token failed (3459), sage's request posted c31049 (3460/3461), duckworth approve record c31045 (3462); row 219 restart note on b97a3ff97 (rocko 3463); queue only
|
||||
ffbc0d7a6 BUILD-LOG and SESSIONS: row 292 landing, idle-stop race row 302 and its rulings, rows 300/301, row 294 rounds 2-3 (sage)
|
||||
756284e8e queue: revs 3448-3456: row 294 (#1800) round 2 in-progress and in-review on 7ec7b1ea (launchpad 3448/3449), launchpad's request without a token failed (3450), sage's request without a token failed (3451/3452), sage's request posted c31042 (3453/3454), duckworth approve record c31029 (3455); row 302 (#1809) in-progress (gizmoduck 3456); queue only
|
||||
0e30a85fa queue: revs 3444-3447: row 302 (idle-stop race, #1809, Vikunja 588, mos-1411) added and briefed; row 292 (#1797) landing note and done move at 6aab979e6 (sage); queue only
|
||||
6aab979e6 row 292 (#1797) gate results on 0d0021454: r2 old-test red compactions-launch:229 (exit-22 race, Vikunja 588), mos-1411 diagnostic 0/10 with one not-holder exit 22 seen in the clear test, r3 cli rerun 910/910, ten shells green, M1-M9 killed; rebase receipts (sage-3183, sage-3185, sage-3193)
|
||||
e5ffa7693 row 292 (#1797) packet: targeted mutant kill rules per sage-3152 (pattern, stack lines and text per mutant; anything else is a STOP; a survivor gets one whole-file run), short TMPDIR per stage, run plan after Duckworth's round
|
||||
bf4ba4280 row 292 (#1797) packet: rebase onto b23783f39 with the 0585b3213 resolution (row 203's console and federation text kept word for word, Gander's text for any other key), range-diff, the three patch-ids, C1/N3, mutants M1-M9 (unrun) and the run plan (sage-3146, sage-3148)
|
||||
495c12865 row 292 (#1797) C1 and N3 for duckworth-0229: a pre-270 loader stand-in of its own (C1's loader without the row 270 concat, the list before bce491715) refuses compactionReadBytes and compactionStreams on a full activate and rollback, naming the key; C1's loader reads both; the missing-loader case uses compactionStreams 1024 and checks row 203's console and federation text word for word with no loader
|
||||
4b612781b docs(release): record static approval and post-compaction review conditions
|
||||
be4357216 docs(release): record any-key config plan and static review packet
|
||||
39bde4fd4 fix(release): validate non-console config keys with target loader
|
||||
fdedc56e2 docs: idle-stop race brief records the 10-run diagnostic (not-holder seen once, run r846b8d083502); docs only
|
||||
e3ef1eaf6 docs: brief for the idle-stop race row (Vikunja 588, #1809, mos-1411); docs only
|
||||
c902a767d queue: revs 3439-3443: rocko row 219 claim (3439), sage adds rows 300 (R6-N1, #1807) and 301 (R6-N4, #1808) and briefs both; queue only
|
||||
86d5ac69b docs: R6 follow-up briefs for row 294 N1 (#1807) and N4 (#1808); docs only
|
||||
4a9c536e8 Row 293 (574) landing e51d11640 and the 3m-3n live window (activation 20261023T034557Z-464010fbe4c6): BUILD-LOG phase line, Darkwing and Sage SESSIONS lines; docs only
|
||||
83f1f854d queue: row 293 (574, #1805) landing note and done move (sage); queue only
|
||||
e51d11640 docs(row293): record green integrated trace and whole suites
|
||||
78bbe1223 docs(row293): record integrated run2 and short TMPDIR correction
|
||||
92c0ca3db docs: preserve row293 first trace run and TMPDIR stop
|
||||
d0ede15b9 docs(v574): record static approval and trace evidence requirements
|
||||
29bb1ccd4 docs(v574): audit fixture comparisons and plan trace proof
|
||||
4e22bd49f test(git): disable detached fixture maintenance per mos-1369
|
||||
bus: scripts/bus-service.sh install --copy 45dca69f6e4bce52834587f66f2ff33ba839ab8a --copies /home/jwoltje/.local/share/mosaic-stack/copies --pm --claude /home/jwoltje/.local/bin/claude
|
||||
proof: off
|
||||
send: off
|
||||
Console: scripts/webui-service.sh install --copy 45dca69f6e4bce52834587f66f2ff33ba839ab8a --copies /home/jwoltje/.local/share/mosaic-stack/copies --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket
|
||||
CLI: scripts/stack-copy.sh wrapper 45dca69f6e4bce52834587f66f2ff33ba839ab8a --copies /home/jwoltje/.local/share/mosaic-stack/copies --bin /home/jwoltje/.npm-global/bin
|
||||
interpreter: {"path":"/usr/bin/python3.14","version":[3,14,6],"dev":66308,"ino":3968163,"sha256":"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc"}
|
||||
# exit 0, end 2026-10-23T18:58:17.118Z
|
||||
# W3-plan.txt sha256 9a5317064441aa1b0bdd055bc3132322bea4e7267a5d8801ad97bbbb1d1ef7aa
|
||||
# W3 commit list lines left out of the flag checks: 141
|
||||
# W3 plan checks: OLD to NEW, 3n to 3n, migration none, no needs: line, 141 commits, backup line, Console line OLD's flags exactly, proof off, send off, no drop/sso/send/proof, bus --pm: PASS
|
||||
|
||||
## W4 bus unit (Environment omitted from the transcript)
|
||||
# start 2026-10-23T18:58:17.135Z
|
||||
# command: (cd $REPO && <clean env> systemctl --user show [email protected] -p ExecStart -p WorkingDirectory -p DropInPaths)
|
||||
DropInPaths=
|
||||
ExecStart={ path=/home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d/scripts/mosaic ; argv[]=/home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d/scripts/mosaic bus start mosaic-stack --pm ; ignore_errors=no ; start_time=[Thu 2026-10-22 22:45:59 CDT] ; stop_time=[n/a] ; pid=3811005 ; code=(null) ; status=0/0 }
|
||||
WorkingDirectory=/home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
# exit 0, end 2026-10-23T18:58:17.141Z
|
||||
|
||||
## W4 webui unit
|
||||
# start 2026-10-23T18:58:17.143Z
|
||||
# command: (cd $REPO && <clean env> systemctl --user show mosaic-webui.service -p ExecStart -p WorkingDirectory -p DropInPaths)
|
||||
DropInPaths=
|
||||
ExecStart={ path=/usr/bin/node ; argv[]=/usr/bin/node /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d/packages/webui/src/cli.mjs serve --checkout /mnt/storage/src/mosaic-stack --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket ; ignore_errors=no ; start_time=[Thu 2026-10-22 22:45:59 CDT] ; stop_time=[n/a] ; pid=3811007 ; code=(null) ; status=0/0 }
|
||||
WorkingDirectory=/home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
# exit 0, end 2026-10-23T18:58:17.149Z
|
||||
# W4 checks: DropInPaths empty on both, both ExecStart name the OLD copy, bus has --pm, no quote or backslash in either ExecStart
|
||||
# W4 bus Environment: 2 assignments; quote or backslash: none (values not recorded)
|
||||
# W0b-W4 end 2026-10-23T18:58:17Z
|
||||
# W5 pre-read start 2026-10-23T18:59:10Z
|
||||
|
||||
## W5 pre agents --tester
|
||||
# start 2026-10-23T18:59:10.829Z
|
||||
# command: (cd $REPO && <clean env> /home/jwoltje/.npm-global/bin/mosaic agents --business mosaic-stack --tester)
|
||||
chief r28dbbc5c6b4d claude-code since 2026-10-23T03:46:01.235Z
|
||||
pm ra38826f3c6e2 claude-code since 2026-10-23T03:47:35.853Z
|
||||
# exit 0, end 2026-10-23T18:59:11.087Z
|
||||
|
||||
## W5 pre launches list
|
||||
# start 2026-10-23T18:59:11.091Z
|
||||
# command: (cd $REPO && <clean env> /home/jwoltje/.npm-global/bin/mosaic launches list)
|
||||
r28dbbc5c6b4d mosaic-stack/chief claude-code claude-opus-5-5 by jason since 2026-10-23T03:46:01.221Z running
|
||||
ra38826f3c6e2 mosaic-stack/pm claude-code claude-opus-5-5 by chief since 2026-10-23T03:47:35.835Z running
|
||||
# exit 0, end 2026-10-23T18:59:11.215Z
|
||||
# W5 pre-read PASS 2026-10-23T18:59:11Z: chief r28dbbc5c6b4d standing, not working; pm ra38826f3c6e2 listed, not working; no other launch
|
||||
# W5 go mos-1493, start 2026-10-23T18:59:11Z
|
||||
# condition 3 recheck: tool blob 2656f95b00e3, plan 0c932a4c, four scripts clean, pointer on OLD, P2 stubs and units PASS
|
||||
# W5 exit 0, W5.start 2026-10-23T18:59:11Z, end 2026-10-23T18:59:17Z
|
||||
# W5: activation 20261023T185911Z-45dca69f6e4b, backup /home/jwoltje/.mosaic-dev/backups/stack/20261023T185911Z-45dca69f6e4b, STAMP 2026-10-23T18:59:11.913Z, SCHEMA 3n, SHA256SUMS sha256 87bd93819db5f38b579d1c616b1c80ca69d4abcba690b8e43a368b682e573a50 (sums check OK)
|
||||
# W5 launched lines in the bus journal since W5.start: 1: launched chief: run re194575ec18c, claude-code claude-opus-5-5
|
||||
|
||||
## W5 status
|
||||
# start 2026-10-23T18:59:17.379Z
|
||||
# command: (cd $REPO && <clean env> scripts/stack-release.sh status mosaic-stack)
|
||||
pointer: /home/jwoltje/.mosaic-dev/state/stack-active.json
|
||||
{"copy":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","business":"mosaic-stack","pm":true,"claude":"/home/jwoltje/.local/bin/claude","console":["--port","7332","--public-host","mosaic.woltje.com","--auth-header","X-authentik-username","--allow-user","jason.woltje","--tester-socket"],"schema":"3n","activation":"20261023T185911Z-45dca69f6e4b","at":"2026-10-23T18:59:17Z"}
|
||||
log (last five lines):
|
||||
{"at":"2026-10-22T20:16:24Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":"20261022T201621Z-0cbe2e9b35e5","activation":"20261022T201621Z-0cbe2e9b35e5","result":"ok"}
|
||||
{"at":"2026-10-23T03:45:57Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":null,"activation":"20261023T034557Z-464010fbe4c6","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T03:46:02Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":"20261023T034557Z-464010fbe4c6","activation":"20261023T034557Z-464010fbe4c6","result":"ok"}
|
||||
{"at":"2026-10-23T18:59:11Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":null,"activation":"20261023T185911Z-45dca69f6e4b","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T18:59:17Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":"20261023T185911Z-45dca69f6e4b","activation":"20261023T185911Z-45dca69f6e4b","result":"ok"}
|
||||
check:
|
||||
bus: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
Console: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
CLI: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
result: pass
|
||||
bus status:
|
||||
host: mosaic-stack, pid 758595, running, since 2026-10-23T18:59:13.168Z, notifier off
|
||||
socket: present
|
||||
writer.lock: pid 758858
|
||||
boot: organization file loaded at 2026-10-23T18:59:13.168Z
|
||||
unit flags: match the pointer
|
||||
drift: 0 commit(s) on refactor since the pointer's copy
|
||||
# exit 0, end 2026-10-23T18:59:17.667Z
|
||||
# W5 status: pointer NEW, pm true, 3n, check pass, unit flags match. W5_PASS 2026-10-23T18:59:17Z
|
||||
|
||||
## W5 rollback --plan (read only)
|
||||
# start 2026-10-23T18:59:17.673Z
|
||||
# command: (cd $REPO && <clean env> scripts/stack-release.sh rollback mosaic-stack --plan)
|
||||
plan: rollback for mosaic-stack
|
||||
from: 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
to: 464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
store schema: 3n (read from the store the running bus holds)
|
||||
target schema: 3n
|
||||
migration: none; the store is at the target's version
|
||||
commits: the run takes away 141 (newest first, at most 200):
|
||||
45dca69f6 sessions: Sage 10-23 Vikunja 571 W rows 309-318 filed, 571 done
|
||||
293b42fee queue: revs 3617-3636: Vikunja 571 W build rows 309-318 added (sage 3617-3626: W1, W2, W3a, W3b, W6, W3, W4b, W5, W7, W8, post-10-27, brief docs/plans/2026-10-21_q195-writing-editor.md) and owners set to unassigned (sage 3627-3636)
|
||||
369607e92 sessions: Sage 10-23 rows 308 and 252 landings, 571 Connections design amendment, Vikunja 597; Scrooge row 252 line
|
||||
59f013247 queue: revs 3589-3616: row 306 in-progress, in-review and failed request (morgana 3589, 3592-3593), request (sage 3594-3595, comment 31207), approve record (dewey 3596), note and done (sage 3599-3600); row 308 added and briefed (sage 3590-3591), claim, in-review and failed request (gosalyn 3601-3603), request (sage 3604-3605, comment 31223), approve record (webby 3606, comment 31224), note and done (sage 3613-3614, landed 30e6bb680); row 291 note and done (sage 3597-3598); row 252 issue #1753 (sage 3607), in-review and failed request (scrooge 3608-3609), request (sage 3610-3611, comment 31230), approve record (webby 3612, comment 31229), note and done (sage 3615-3616, landed 45ea3fa0d)
|
||||
e8bb13df8 docs: clarify Connections opening order and current-link filtering
|
||||
dba2ebdb8 docs: plan required Console Connections view before real import
|
||||
45ea3fa0d row 252: library-cli and thread-claims bus.mjs stubs gain the throwing consoleCall export cli.mjs now imports (Mos GO mos-1465 under mos-1272, via sage-3497)
|
||||
f69c96200 row 252: decide-sso J19 killer (a granted user's config says decide false, its decision POSTs stop at owner-only), J16 checks the config that starts without send; BUILD.md rulings, J11c and J18 equivalence, part 2 mutants (#1753)
|
||||
5b6c87814 row 252: decide-browser placements (mos-1272): the hostile grant goes in with its INSERT since decisions is append-only, and page() loads about:blank first so a same-URL visit reloads
|
||||
8c2c5303c row 252: access-boot fixture provider gains issuer https://idp.test, so consoleOwners can key the owner (Mos GO mos-1464 under mos-1272, via sage-3494)
|
||||
23e3d09fa row 252: decide-sso first-run reds placed (mos-1272): a decision transport without --send never starts, and a POST to /api/bus/decision.* meets row 74's read-only refusal; BUILD.md run notes (#1753)
|
||||
795a645e6 row 252: console-decide events() keeps the row kind as event, since an answer body's kind shadowed it (first-run red at :180, two vacuous zero counts), and a J7 killer test for the console cap release over the socket (#1753)
|
||||
076ca8d6e row 252 BUILD.md: rebase onto fe4ee8c7b, commit map and the six conflict resolutions (sage-3482)
|
||||
68be86324 row 252: mos-1321, reword the shell.test write-boundary comment so Approve and Deny is the one decision control; BUILD.md records the ruling and its channel-proof review condition
|
||||
264fad2e2 row 252 BUILD.md: channel-proof overlap with row 239 (sage-2835)
|
||||
24672fd9d row 252: Console inbox Approve and Deny for grant requests, human-only through a console owner proof, confirmation then resolve, via console with human.input before the executor (#1753, Webby N1-N5); tests not yet run
|
||||
30e6bb680 gosalyn: PRD 1.17, Case 2 story files are DOCX (row 308, sage-3516, Q235 to Q237, Q239). Applies the approved d9 text at 4607e15b8 word for word to the 1.16 text. Status, the header sentence and a 1.17 source line, the Creative library lead, REQ-LIB-1, -2, -4, -5 and -6 changed as d9 says, new REQ-LIB-8 for the writing store and REQ-LIB-9 for the Console's DOCX editor, the 1.17 notes and four risks. requirements.json goes to 1.17 with 87 ids and the d9 titles, and the tasks and bus test pins follow
|
||||
7defb58e9 sessions: Sage 10-23 rows 291 and 306 landings, row 308 launch
|
||||
9c8877bdf plans: DEFERRED row 306 N1 (revoke Set lost on broker restart) and N2 (pending limit stop answers not-holder first), landed 2d0318a44 (mos-1463)
|
||||
2d0318a44 morgana: row 306 build (#1813): #accessRevoked from #revokeLost, #agent answers thread-revoked until endLaunch, runner stops on thread-revoked, READMEs, access-revoke.test 7 7 (mos-1463)
|
||||
bd3fa2a48 morgana: row 306 red-first tests (#1813): bus revoke-window T1/T2, cli revoke-window T3 forcing test; no product code
|
||||
ab575ee55 morgana: row 306 design r2 (dewey-0918 C1-C3, sage-3483/mos-1463): T3 asserts no thread-revoked event for A, T2 limit half makes a second call, six-suite gate, access-revoke edit bounded to 7 7
|
||||
1676ad0de morgana: row 306 design r1 (#1813, sage-3478): #accessRevoked set from #revokeLost, #agent answers thread-revoked until endLaunch, runner maps it to stopped; T1-T3, M1-M3, six access-revoke asserts to Mos via Sage
|
||||
4874d1e83 gosalyn: PRD 1.16 routes library.write under REQ-LIB-6 (mos-1328, mos-1329, sage-2919, webby-0164 B2). REQ-WAIT-3 gains the routing paragraph with its bounds, creative roles only and within-role, Markdown under supporting folders a human marks, never a story file, the writing agent's live Gitea grant on the library project, one commit per write by its own account with the trailer, notice and revert. REQ-LIB-6 names the action. Status, the header, a 1.16 source line and a 1.16 note. requirements.json changes its version only, with the test pin
|
||||
e909ef51a plans: PRD 1.17 brief (Gitea #1815, Vikunja 570): Gosalyn builds d9 4607e15b8 onto 1.16 after row 291, Webby reviews, four files, Sage gates
|
||||
4607e15b8 sage: PRD 1.17 d9 r3 (02f28dec), Mos's J-b check mos-1470: J-b records N20 as confirmed, REQ-LIB-5's version tag cites Q239 for the Connections view (N21), d9 changes names both
|
||||
8b4201055 sage: PRD 1.17 d9 round 2 (b17ce386), Webby round 6 B1: REQ-LIB-5, its note, the Risks line and the A6 line take mos-1443 R3's text as written; J-b in the past tense (N19); the import-waits line cited as Mos's R3 default (N20)
|
||||
4863e2caf sage: PRD 1.17 draft 9 (7dfc52fd), d8 plus Jason's Q41 O2 (Q239, mos-1467): REQ-LIB-5 requires the Console Connections view for converted chapters, note and Risks line follow, J-b records the answer; Webby round 5 N15-N17
|
||||
7b25a6063 agents: webui runs set MOSAIC_REQUIRE_EDITOR_BUILD=1 and linked worktrees npm ci packages/webui (Vikunja 597)
|
||||
e86df37d7 sessions: Sage 272 and 307 landings, 306 design, 252 rebase check
|
||||
fe4ee8c7b queue: revs 3582-3588: row 307 in-review and failed request (gizmoduck 3582-3583), request (sage 3584-3585, comment 31189), round 1 approve record (duckworth 3586), landing note and done at d243f6b25 (sage 3587-3588); queue only
|
||||
0621c439e plans: DEFERRED gains row 307 N1 (row 270's store-unreadable doesn't stick; #1814 landed d243f6b25)
|
||||
d243f6b25 gizmoduck: row 307 run logs: capture.mjs makes each fixture's data root before sessionStore (base session.mjs:78 needs it), BUILD.md expected red adds claude-history test B (duckworth-0287), steps 1-6 results on 1f6db1589 and 1f00d4f91 with skips named and M1-M4 killed (sage-3455, sage-3465)
|
||||
869670d1b gizmoduck: row 307 BUILD.md: commits, old-test edits against mos-1459, new tests and the empty-session correction to test B, expected red on 1f6db1589, run plan with mos-1275 limits, mutants M1-M4
|
||||
dbbda2537 gizmoduck: row 307 (#1814, Vikunja 598) harness kind gains compactions: pi's stream scan and Claude-history check move to packages/plugins/harness/pi/compactions.mjs, claude-code answers harness-unsupported, core keeps the ledger and checks each answer, readLedger reads the reason only, the launcher passes the loaded module; four old-test edits under mos-1459
|
||||
a9da046f8 gizmoduck: row 307 (#1814, Vikunja 598) new tests, red first: row 270's ledgers per reason read the same count and the next collection goes through the harness module, core refuses an answer out of contract, pi answers what base scanPi read, claude-code answers harness-unsupported, a module without compactions refuses missing-export; capture.mjs checks the literals against base 1e629c892
|
||||
4a71b56ab gizmoduck: row 307 design r1 notes: seat suite whole and compactions-launch T3 run-not-skip in the gate (Duckworth C1, C2), launcher closure comment on bypassing call() (N1), line refs :301 and :302 (N2) (duckworth-0280)
|
||||
520889419 gizmoduck: row 307 (#1814, Vikunja 598) design: harness export compactions({ store, cursors, budget, streams, first }), interfaceVersion stays 1, core keeps the ledger, readLedger reads the reason, ledger compatibility table, four old-test edits for Mos (sage-3440)
|
||||
8dc132bec queue: revs 3572-3581: row 272 round 3 approve record (scrooge 3572, comment 31177), row 307 claim (gizmoduck 3573), row 272 round 4 moves (huey 3574-3576), request (sage 3577-3578, comment 31183), round 4 approve record (scrooge 3579, comment 31184), landing note and done at d33989230 (sage 3580-3581); queue only
|
||||
08b8831bc plans: DEFERRED gains row 272 N1 (user session verbs) and the row 270 N6 rebound after row 307 (#1777 landed d33989230)
|
||||
d33989230 row 272: scope unavailable-session waits to the chat area
|
||||
0ea3db297 row 272: fix session fixture authority and initial chat render
|
||||
f859d06d2 row 272: preserve granted-user default chat on denied session catalog
|
||||
70651f45d row 272: retain session recovery state on invalid selection
|
||||
490f45f02 row 272: preserve untested session CLI and Console draft (sage-3145)
|
||||
1e629c892 queue: revs 3565-3571: row 272 round 3 moves on 72690cae7 (huey 3565-3567) and request (sage 3569-3570, comment 31174); row 307 added and briefed (#1814, Vikunja 598, mos-1455 item 3; sage 3568, 3571); queue only
|
||||
84de3fbca plans: row 270 pi compaction reading moves behind the harness kind (#1814, Vikunja 598, mos-1455 item 3, Gizmoduck, reviewer Duckworth); gate template runs all five suites and sets MOSAIC_REQUIRE_EDITOR_BUILD=1 (mos-1455 item 4, mos-1453)
|
||||
1e4c1e6e9 queue: revs 3539-3564: rows 300 and 301 round 1 claims and in-review moves (launchpad 3539-3544), round 1 requests (sage 3545-3548), round 2 moves (launchpad 3549-3554), round 2 requests (sage 3555-3558), Duckworth approve records 300 (3559) and 301 (3560), landing notes and done at 07315e651 and 5b846b048 (sage 3561-3564); queue only
|
||||
5b846b048 launchpad: row 301 (#1808): library-cli and thread-claims bus.mjs fixtures export throwing busBusiness and userCaller stubs (mos-1451 under mos-1272); BUILD.md repaired with run 1 and the ruling; manifest seven paths; unrun
|
||||
59f0e44f4 launchpad: row 301 (#1808): channel-proof re-pins webui bus.mjs at 39fcb27c for the user transport fold, humanCall unchanged (mos-1449 under mos-1272); unrun
|
||||
bb031ec84 launchpad: row 301 (#1808): R6-N4, user-bus.mjs folded into bus.mjs beside humanCall, unchanged; channel-proof re-pin held for Mos's go; unrun
|
||||
07315e651 launchpad: row 300 (#1807): run 1 gate results in BUILD.md (1/0, webui 375/0, M12 killed) and Duckworth's N1; packet only
|
||||
fb04cbc43 launchpad: row 300 (#1807): run 1 first-run red placed (mos-1272), the test's call helper resolves headers again as granted-user.test does; manifest re-hashed
|
||||
9d929911c launchpad: row 300 (#1807): R6-N1, an HTTP-level test of the user-session option swap with the userRoute gate stubbed open by a load hook, and mutant M12; unrun
|
||||
bcf3c1dac queue: revs 3531-3538: row 303 landing note and done at e551cd846 (sage 3531/3532); row 304 approve record (dewey 3533), row 305 approve record (filbert 3534); row 304 landing note and done at a863015a5 (sage 3535/3536); row 305 landing note and done at d52d9f1f2 (sage 3537/3538); queue only
|
||||
d52d9f1f2 row 305 (#1812): gate run 1 evidence (sage-3374): both suites green, mutants a and b killed in both, c a known survivor
|
||||
830f3d8bf row 305 (#1812): BUILD.md notes the SIGKILL leak and its cleanup (Filbert N1)
|
||||
e48d60216 row 305 (#1812): BUILD.md with the trace, change, gate and the three mos-1445 mutants
|
||||
cabcb81d4 row 305 (#1812): each suite's network check also requires the network present under the run's project before the remove (mos-1445)
|
||||
353d65f57 row 305 (#1812, Vikunja 591) draft: per-run COMPOSE_PROJECT_NAME, exit trap removes that one network, one absent-network check per suite; for Mos through Sage before the build (mos-1272)
|
||||
2c289f6f0 SESSIONS: filbert row 305 round 1 approve (c31127, rev 3534)
|
||||
a863015a5 test: match Claude memory slug normalization under mos-1442
|
||||
e551cd846 launchpad: row 303 (#1810): R9 asserts the rehearsal directory is set before the placeholders check joins it, so a null shows the rehearsal output (mos-1422, Vikunja 589)
|
||||
c13c337e1 queue: revs 3521-3530: rows 304 and 305 claimed (rocko 3521, gizmoduck 3522); row 305 in-review on 7e8218a2e (gizmoduck 3523), request failed without a token (gizmoduck 3524), sage's request posted c31126 (3525/3526); row 304 in-review on 5e8354ebb (rocko 3527), request failed without a token (rocko 3528), sage's request posted c31128 (3529/3530); queue only
|
||||
435a7458d sage: PRD 1.17 draft 8 (343cff6f), d7 plus Mos's d8 fix list mos-1443 (R1-R14, M1-M45, J-i to J-l) and the mos-1446 choices (M10 default, M15 quotes Q235 in full, M40 both sentences); M15 and M16 cite b99ca86b9. Webby APPROVE round 5 webby-0210, no B items; N15-N17 carry to d9
|
||||
b99ca86b9 docs: align editor conversion boundary and host restore with PRD d8
|
||||
0e057e05e queue: revs 3511-3520: rows 304, 305 and 306 added and briefed (sage 3511-3516); row 272 round 2 in-review on b44332a93 (huey 3517), request failed without a token (huey 3518), sage's request posted c31120 (3519/3520); queue only (sage)
|
||||
c16e943b9 briefs: mos-1442 approvals for the 590 and 591 rows (#1811, #1812), the 295 N1 revoke-window row (#1813); DEFERRED 295 N1 (sage)
|
||||
ac1644e1c BUILD-LOG and SESSIONS: rows 302, 295 and 219 landings, the Docker pool diagnostic; DEFERRED 219 N1 (U6); brief for the Vikunja 590 and 591 rows (sage)
|
||||
90633c864 queue: revs 3495-3509: row 295 round 2 in-progress and in-review (morgana 3495-3497), sage's request posted (3498/3499), dewey approve record (3500), row 295 landing note and done at 2efd127ce (sage 3501/3502); row 219 in-review on b899095e4 (rocko 3503/3504, request failed without a token), sage's request posted c31107 (3505/3506), dewey approve record c31108 (3507), row 219 landing note and done at 5fdfd7275 (sage 3508/3509); queue only
|
||||
5fdfd7275 docs: preserve row 219 full gate on the post-295 merge
|
||||
a236dbc30 docs: preserve row 219 mos-1429 short-run evidence
|
||||
312260db7 test: prepare row 219 admission pins under mos-1429
|
||||
d7b4967ed docs: record row 219 rebase after granted-user Console
|
||||
90a3c03cf test: assert creative history in its native session store
|
||||
282f5b4e4 test: pin the compaction audit before the persona refusal
|
||||
781fd509c test: give row 219 persona fixture its explicit session
|
||||
52a73e83b docs: rebase row 219 gate packet and record run bounds
|
||||
049214486 wip: publish unverified row 219 inspection candidate
|
||||
2efd127ce morgana: row 295 r2 gate results on d68b4300d (sage-3338, sage-3340): red first, green, M8 count, whole files, suites, script limits and skips, M1-M16 killed
|
||||
fdbe95d88 morgana: row 295 r2 narrow alice grant (Dewey F1, sage-3333): aliceAccess(ref) names only the test's project, set after project.create; asserts and bindLaunch lines byte-identical; BUILD.md preservation record updated
|
||||
cb96220b5 morgana: row 295 r2 old-test setup (mos-1436 option a): message-filter's :117 and governance-pin tests get an alice collaborator access document, spec-fixtures fixture() takes an optional access (null default); asserts and bindLaunch lines byte-identical; BUILD.md gate record, assertion preservation, N1 revoke window
|
||||
6408dcec4 morgana: row 295 r2 first-run reds placed (mos-1272): claim rows spread off the store's null prototype in access-revoke and thread-revoke, demo switches the pi harness on for startBroker, Alice binds at her first call in thread-revoke
|
||||
0c8f12ea2 morgana: row 295 r2 rebase on 80793d824 (sage-3256): accessFor comment is stamp-cached (dewey-0871 N3); BUILD.md rebase note
|
||||
24f8f5d73 morgana: row 295 r2: wrap the launcher's revoked comment (dewey-0874 nit)
|
||||
31da9dcb8 morgana: row 295 r2 (dewey-0871): threadsState ends an expired grant's held claim from the cached read by access-expiry (B1, D7, M16, M11 claim row); access.reload scope as D8 (N1); bus README access.reload, revoked and revocation (N2); tests unrun
|
||||
ff54a1556 morgana: row 295 FED R4 revocation (#1801): 30 s access timer, access.reload, one-transaction claim end on a loss, threadsState revoked, launcher SIGTERM and no start, CLI reload after grant/revoke; tests unrun (no CLEAR yet)
|
||||
249d42dfc morgana: row 295 plan (FED R4 revocation, #1801): sweep on timer, access.reload and user requests; threadsState revoked; launcher skip and SIGTERM; bindLaunch and role.claim refuse thread-revoked
|
||||
07802dc57 queue: revs 3488-3494: row 302 (#1809) in-review on 2a8281a6f (gizmoduck 3488), gizmoduck's request failed without a token (3489), sage's request posted c31091 (3490/3491), dewey approve record c31092 (3492); row 302 landing note and done move at 3ed9fd754 (sage 3493/3494); queue only
|
||||
3ed9fd754 gizmoduck: row 302 (#1809) gate results: run 1 stopped on launcher-released.test:89 (d6, mos-1430); run 2 on merge 783602e06 (5b63ea323 onto 1ac655005) red as ruled, suites green, M1-M5 M7-M9 killed; RESULTS.md and logs, packet only
|
||||
c9fcf9b5a gizmoduck: row 302 (#1809) d6: launcher-released.test:89 counts only a-run's delivery rows and pins the one routed row with holder_run null; #route writes that row for every message (gizmoduck-0388, sage-3294, sage-3296, Mos ruling pending sage-3293); local, not pushed
|
||||
2b6111a17 row 302 (#1809, Vikunja 588): a run threadIdle or landRelease released answers launcher-released on every call needing the claim until it ends, role.claim refuses it (Dewey D1), and the runner exits stopped without releasing again
|
||||
4a827edb0 row 302 (#1809, Vikunja 588): red first, the final forcing tests and the four pins Mos ruled (mos-1414/1415/1416), over unfixed product files; BUILD.md d3-d5 and ASSERTION-PRESERVATION
|
||||
908f92b03 gizmoduck: row 302 design d2: threads.test pins are :392/:394/:395 (sage-3204), land-relaunch grep finds land.test:464 as a third old pin under Q1
|
||||
62470a3ec gizmoduck: row 302 BUILD.md folds Dewey's d1 approval (dewey-0875): D1 role.claim refuses a released run, landRelease reaches runner.test:742-772 so Q1 moves :771-772, Q2-Q4 and N1-N4 settled
|
||||
fee08d7ab gizmoduck: row 302 (#1809, Vikunja 588) idle-stop race design round d1 for Dewey: idle-released code from the broker's own record of threadIdle's release, runner maps it to stopped/0, forcing cli test holds the window open until a call lands, threads.test:393 is the one changed pin (sage-3200, mos-1411)
|
||||
1ac655005 BUILD-LOG and SESSIONS: row 299 gate and landing, row 303 review, 219 and 295 rebases (sage)
|
||||
8a35ffadb queue: revs 3474-3487: row 303 (#1810) in-progress and in-review on 3c3be5d3 (launchpad 3474/3475), launchpad's request failed without a token (3476), sage's request posted c31082 (3477/3478), duckworth approve record c31079 (3480); row 299 (#1806) claim (gander 3479), in-review on 277ace0b (gander 3481), gander's request failed without a token (3482), sage's request posted c31083 (3483/3484), filbert approve record c31084 (3485); row 299 landing note and done move at ffb2fedfb (sage 3486/3487); queue only
|
||||
ffb2fedfb docs(row299): record fresh timing gate and six assertion kills
|
||||
11d1e2e0c docs(row299): record clean integration on 80793d824
|
||||
ed81f6eba docs(row299): record mos-1409 preservation and static candidate
|
||||
e14164ab4 test(case): observe P10 wait directly under mos-1409
|
||||
10113b04f docs(row299): propose direct P10 wait timing for mos-1272 review
|
||||
c1f910b4c SESSIONS: filbert row 299 manifest round 1 approve (c31084, rev 3485)
|
||||
15e688cc0 BUILD-LOG and SESSIONS: row 294 rounds 3-4 and landing, R9 transient and row 303, row 219 edits 2-3 (sage)
|
||||
80793d824 queue: revs 3464-3473: row 294 (#1800) round 4 in-progress and in-review on a1ff5d67 (launchpad 3464/3465), launchpad's request without a token failed (3466), sage's request posted c31055 (3467/3468), duckworth approve record c31053 (3469); row 294 landing note and done move at d3059c2c3 (sage 3470/3471); row 303 (R9 guard, #1810, Vikunja 589, mos-1422) added and briefed (sage 3472/3473); queue only
|
||||
ad6ca7930 docs: brief for the R9 guard row (Vikunja 589, #1810, mos-1422); docs only
|
||||
d3059c2c3 launchpad: row 294 run 4 (#1800): whole gate green on 8616b9a4f (webui 365, cli 909, bus 873, 10 scripts), M1-M11 killed; M1 record names G4's first failure and G5 green (Duckworth C1); receipts in run4/
|
||||
6f0793067 launchpad: row 294 round 4 (#1800): rehearsal fixture copies carry cli access.mjs and transport.mjs, B1-B3 pin the fixture's tracker warning in full (Mos mos-1419, sage-3238); manifest round 4 (19 paths), run 3 receipts; unrun
|
||||
b01e1c9ee launchpad: row 294 round 3 (#1800): G5's baseline is coalesce(max(seq), 0), since max(seq) is NULL on the fixture's empty events table and run 2 read 0 of 22 refusal events (sage-3212, Mos ruling pending sage-3211); manifest round 3, run 2 receipts; unrun
|
||||
8716e72f2 launchpad: row 294 round 2 (#1800): browser.test pin gains /federation.js at index 2 (Mos mos-1412 (a)), G5 pins one action.refused {code: access-refused} per refused verb and every other table unchanged (sage-3194); manifest round 2 (18 paths), ASSERTION-PRESERVATION.json, run 1 receipts; unrun
|
||||
9beeeb995 launchpad: row 294 run limits from recorded durations, 3x or more (sage-3187, mos-1275)
|
||||
9e43fefe6 launchpad: row 294 BUILD.md M1 expectation corrected (Duckworth C1), review recorded with N1-N4 dispositions
|
||||
d0460ed47 launchpad: row 294 round 1 manifest (17 paths from 9450774cb) and notes with the owner-transport exception
|
||||
26f93fa74 launchpad: row 294 sage-3157, owner-transport exception written out, userOptionsFor, G9 pins no user value, M10/M11 (unrun, #1800)
|
||||
c9e67e7d2 launchpad: row 294 BUILD.md M4 kill names the moved test
|
||||
52d2a1610 launchpad: row 294 rulings sage-3153 (boot refusal line, owner transport seam G9, C7 follow-up, access.test.mjs unchanged; unrun, #1800)
|
||||
afef0ea88 launchpad: row 294 FED R6 build and plan, granted-user sign-in (unrun, #1800)
|
||||
09d0d6faf queue: revs 3457-3463: row 294 (#1800) round 3 in-progress and in-review on cb1648f3 (launchpad 3457/3458), launchpad's request without a token failed (3459), sage's request posted c31049 (3460/3461), duckworth approve record c31045 (3462); row 219 restart note on b97a3ff97 (rocko 3463); queue only
|
||||
ffbc0d7a6 BUILD-LOG and SESSIONS: row 292 landing, idle-stop race row 302 and its rulings, rows 300/301, row 294 rounds 2-3 (sage)
|
||||
756284e8e queue: revs 3448-3456: row 294 (#1800) round 2 in-progress and in-review on 7ec7b1ea (launchpad 3448/3449), launchpad's request without a token failed (3450), sage's request without a token failed (3451/3452), sage's request posted c31042 (3453/3454), duckworth approve record c31029 (3455); row 302 (#1809) in-progress (gizmoduck 3456); queue only
|
||||
0e30a85fa queue: revs 3444-3447: row 302 (idle-stop race, #1809, Vikunja 588, mos-1411) added and briefed; row 292 (#1797) landing note and done move at 6aab979e6 (sage); queue only
|
||||
6aab979e6 row 292 (#1797) gate results on 0d0021454: r2 old-test red compactions-launch:229 (exit-22 race, Vikunja 588), mos-1411 diagnostic 0/10 with one not-holder exit 22 seen in the clear test, r3 cli rerun 910/910, ten shells green, M1-M9 killed; rebase receipts (sage-3183, sage-3185, sage-3193)
|
||||
e5ffa7693 row 292 (#1797) packet: targeted mutant kill rules per sage-3152 (pattern, stack lines and text per mutant; anything else is a STOP; a survivor gets one whole-file run), short TMPDIR per stage, run plan after Duckworth's round
|
||||
bf4ba4280 row 292 (#1797) packet: rebase onto b23783f39 with the 0585b3213 resolution (row 203's console and federation text kept word for word, Gander's text for any other key), range-diff, the three patch-ids, C1/N3, mutants M1-M9 (unrun) and the run plan (sage-3146, sage-3148)
|
||||
495c12865 row 292 (#1797) C1 and N3 for duckworth-0229: a pre-270 loader stand-in of its own (C1's loader without the row 270 concat, the list before bce491715) refuses compactionReadBytes and compactionStreams on a full activate and rollback, naming the key; C1's loader reads both; the missing-loader case uses compactionStreams 1024 and checks row 203's console and federation text word for word with no loader
|
||||
4b612781b docs(release): record static approval and post-compaction review conditions
|
||||
be4357216 docs(release): record any-key config plan and static review packet
|
||||
39bde4fd4 fix(release): validate non-console config keys with target loader
|
||||
fdedc56e2 docs: idle-stop race brief records the 10-run diagnostic (not-holder seen once, run r846b8d083502); docs only
|
||||
e3ef1eaf6 docs: brief for the idle-stop race row (Vikunja 588, #1809, mos-1411); docs only
|
||||
c902a767d queue: revs 3439-3443: rocko row 219 claim (3439), sage adds rows 300 (R6-N1, #1807) and 301 (R6-N4, #1808) and briefs both; queue only
|
||||
86d5ac69b docs: R6 follow-up briefs for row 294 N1 (#1807) and N4 (#1808); docs only
|
||||
4a9c536e8 Row 293 (574) landing e51d11640 and the 3m-3n live window (activation 20261023T034557Z-464010fbe4c6): BUILD-LOG phase line, Darkwing and Sage SESSIONS lines; docs only
|
||||
83f1f854d queue: row 293 (574, #1805) landing note and done move (sage); queue only
|
||||
e51d11640 docs(row293): record green integrated trace and whole suites
|
||||
78bbe1223 docs(row293): record integrated run2 and short TMPDIR correction
|
||||
92c0ca3db docs: preserve row293 first trace run and TMPDIR stop
|
||||
d0ede15b9 docs(v574): record static approval and trace evidence requirements
|
||||
29bb1ccd4 docs(v574): audit fixture comparisons and plan trace proof
|
||||
4e22bd49f test(git): disable detached fixture maintenance per mos-1369
|
||||
bus: scripts/bus-service.sh install --copy 464010fbe4c6925b077b9b8182a209ee2177eb9d --copies /home/jwoltje/.local/share/mosaic-stack/copies --pm --claude /home/jwoltje/.local/bin/claude
|
||||
proof: off
|
||||
send: off
|
||||
Console: scripts/webui-service.sh install --copy 464010fbe4c6925b077b9b8182a209ee2177eb9d --copies /home/jwoltje/.local/share/mosaic-stack/copies --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket
|
||||
CLI: scripts/stack-copy.sh wrapper 464010fbe4c6925b077b9b8182a209ee2177eb9d --copies /home/jwoltje/.local/share/mosaic-stack/copies --bin /home/jwoltje/.npm-global/bin
|
||||
interpreter: {"path":"/usr/bin/python3.14","version":[3,14,6],"dev":66308,"ino":3968163,"sha256":"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc"}
|
||||
# exit 0, end 2026-10-23T18:59:17.999Z
|
||||
# W5 rollback plan exit 0: to: 464010fbe4c6925b077b9b8182a209ee2177eb9d store schema: 3n (read from the store the running bus holds) target schema: 3n migration: none; the store is at the target's version
|
||||
# W6 start 2026-10-23T18:59:23Z
|
||||
|
||||
## W6 status
|
||||
# start 2026-10-23T18:59:23.303Z
|
||||
# command: (cd $REPO && <clean env> scripts/stack-release.sh status mosaic-stack)
|
||||
pointer: /home/jwoltje/.mosaic-dev/state/stack-active.json
|
||||
{"copy":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","business":"mosaic-stack","pm":true,"claude":"/home/jwoltje/.local/bin/claude","console":["--port","7332","--public-host","mosaic.woltje.com","--auth-header","X-authentik-username","--allow-user","jason.woltje","--tester-socket"],"schema":"3n","activation":"20261023T185911Z-45dca69f6e4b","at":"2026-10-23T18:59:17Z"}
|
||||
log (last five lines):
|
||||
{"at":"2026-10-22T20:16:24Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":"20261022T201621Z-0cbe2e9b35e5","activation":"20261022T201621Z-0cbe2e9b35e5","result":"ok"}
|
||||
{"at":"2026-10-23T03:45:57Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":null,"activation":"20261023T034557Z-464010fbe4c6","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T03:46:02Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":"20261023T034557Z-464010fbe4c6","activation":"20261023T034557Z-464010fbe4c6","result":"ok"}
|
||||
{"at":"2026-10-23T18:59:11Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":null,"activation":"20261023T185911Z-45dca69f6e4b","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T18:59:17Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":"20261023T185911Z-45dca69f6e4b","activation":"20261023T185911Z-45dca69f6e4b","result":"ok"}
|
||||
check:
|
||||
bus: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
Console: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
CLI: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
result: pass
|
||||
bus status:
|
||||
host: mosaic-stack, pid 758595, running, since 2026-10-23T18:59:13.168Z, notifier off
|
||||
socket: present
|
||||
writer.lock: pid 758858
|
||||
boot: organization file loaded at 2026-10-23T18:59:13.168Z
|
||||
unit flags: match the pointer
|
||||
drift: 0 commit(s) on refactor since the pointer's copy
|
||||
# exit 0, end 2026-10-23T18:59:23.591Z
|
||||
# W6 status: "copy":"45dca69f6e4bce52834587f66f2ff33ba839ab8a" "pm":true "schema":"3n"
|
||||
|
||||
## W6 live store count (python3 -B, mode=ro)
|
||||
types table=26 trigger=97 view=5 index=28
|
||||
schema_version 3n
|
||||
missing none
|
||||
session_table_rows session_ops=0 message_cancels=0 W1 session_ops=0 message_cancels=0 thread_shares 0
|
||||
events 2313 maxSeq 2313
|
||||
COUNTS_OK
|
||||
# exit 0
|
||||
|
||||
## W6 agents --tester
|
||||
# start 2026-10-23T18:59:23.663Z
|
||||
# command: (cd $REPO && <clean env> /home/jwoltje/.npm-global/bin/mosaic agents --business mosaic-stack --tester)
|
||||
chief re194575ec18c claude-code since 2026-10-23T18:59:15.964Z
|
||||
# exit 0, end 2026-10-23T18:59:23.888Z
|
||||
# W6 agents: chief re194575ec18c claude-code since 2026-10-23T18:59:15.964Z;
|
||||
|
||||
## W6 tester thread reads (tr.sh W6)
|
||||
W6 threads --tester: 5 thread(s), threads.json sha256 07c154d75d929028
|
||||
W6 thread d0ba7a66-aa3f-4918-9518-94132bce6b28 messages 2 sha256 985ac61ca9220f2f
|
||||
W6 thread 446201de-e8b5-4df3-9356-d0d5422cc899 messages 2 sha256 7e7e9eeeaa8c1e09
|
||||
W6 thread b89fcca4-6b82-48bd-9310-fb82c5ae8518 messages 2 sha256 f4e4916b9656a403
|
||||
W6 thread d9bb7ff3-7a8b-4bb8-ba12-03ca094cee4e messages 2 sha256 728ff36f3e003c63
|
||||
W6 thread b85a57fe-84f9-4785-a596-135af39e334a messages 2 sha256 727de0d9c809a41a
|
||||
# exit 0
|
||||
# W6 thread reads match W1: 5 threads, same ids, message counts and sha256
|
||||
|
||||
## W6 c11.sh W6 (mos-1487 D1/D2)
|
||||
W6 c11 2026-10-23T18:59:28.117Z threads 5 owners tester=5 user_threads 0 revoke_claims 0 session_ops 0 message_cancels 0 access.json absent (exit 0)
|
||||
# W6 D2: thread_claims op=revoke 0, W1 0
|
||||
# W6 D2: launch log thread-revoked events since W5.start 2026-10-23T18:59:11Z: 0 (file lines 143)
|
||||
# W6 D2: bus journal lines naming thread-revoked since 2026-10-23 18:59:11 UTC: 0 (count only)
|
||||
# W6 bus-host/sessions.json: sessionsVersion and session count: 2 1; mtime 2026-10-23T18:59:15Z
|
||||
# W6_PASS 2026-10-23T18:59:28Z
|
||||
# W9 after W5, W5.start 2026-10-23T18:59:11Z, start 2026-10-23T18:59:53Z
|
||||
# plan 0c932a4c, tool blob 2656f95b00e3, console-check.sh d068fe02, wrapper on NEW: checked
|
||||
|
||||
## W9 Console unit (mos-1338 item 4)
|
||||
is-active active, MainPID 758602
|
||||
ExecMainStartTimestamp Fri 2026-10-23 13:59:13 CDT (2026-10-23T18:59:13Z), ps lstart Fri Oct 23 13:59:12 2026
|
||||
cwd -> /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
# Console: unit active, pid 758602, started 2026-10-23T18:59:13Z, cwd /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
# bus: unit active, pid 758595, cwd /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
|
||||
## W9 status
|
||||
# start 2026-10-23T18:59:53.568Z
|
||||
# command: (cd $REPO && <clean env> /mnt/storage/src/mosaic-stack/scripts/stack-release.sh status mosaic-stack)
|
||||
pointer: /home/jwoltje/.mosaic-dev/state/stack-active.json
|
||||
{"copy":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","business":"mosaic-stack","pm":true,"claude":"/home/jwoltje/.local/bin/claude","console":["--port","7332","--public-host","mosaic.woltje.com","--auth-header","X-authentik-username","--allow-user","jason.woltje","--tester-socket"],"schema":"3n","activation":"20261023T185911Z-45dca69f6e4b","at":"2026-10-23T18:59:17Z"}
|
||||
log (last five lines):
|
||||
{"at":"2026-10-22T20:16:24Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":"20261022T201621Z-0cbe2e9b35e5","activation":"20261022T201621Z-0cbe2e9b35e5","result":"ok"}
|
||||
{"at":"2026-10-23T03:45:57Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":null,"activation":"20261023T034557Z-464010fbe4c6","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T03:46:02Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":"20261023T034557Z-464010fbe4c6","activation":"20261023T034557Z-464010fbe4c6","result":"ok"}
|
||||
{"at":"2026-10-23T18:59:11Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":null,"activation":"20261023T185911Z-45dca69f6e4b","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T18:59:17Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":"20261023T185911Z-45dca69f6e4b","activation":"20261023T185911Z-45dca69f6e4b","result":"ok"}
|
||||
check:
|
||||
bus: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
Console: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
CLI: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
result: pass
|
||||
bus status:
|
||||
host: mosaic-stack, pid 758595, running, since 2026-10-23T18:59:13.168Z, notifier off
|
||||
socket: present
|
||||
writer.lock: pid 758858
|
||||
boot: organization file loaded at 2026-10-23T18:59:13.168Z
|
||||
unit flags: match the pointer
|
||||
drift: 0 commit(s) on refactor since the pointer's copy
|
||||
# exit 0, end 2026-10-23T18:59:53.860Z
|
||||
|
||||
## W9 console-check NEW (/mnt/storage/src/mosaic-stack/agents/sage/work/window-plan/repin-de352dfaf/console-check.sh, d068fe02)
|
||||
# start 2026-10-23T18:59:53.865Z
|
||||
# command: (cd $REPO && <clean env> bash /mnt/storage/src/mosaic-stack/agents/sage/work/window-plan/repin-de352dfaf/console-check.sh 45dca69f6e4bce52834587f66f2ff33ba839ab8a)
|
||||
PASS markdown-preview.js is served and equals the copy's
|
||||
PASS /api/config on loopback: send=false edit=false
|
||||
PASS project.files through the Console: head=ae0b17c9586e51da7bc1b7e548c6acf913a55665 files=2 spec=true error=none
|
||||
PASS project.file spec/north-star.md through the Console: commit=ae0b17c9586e51da7bc1b7e548c6acf913a55665 length=99 error=none
|
||||
PASS loopback save refused: HTTP 403 error=read-only sent=false
|
||||
CONSOLE_PASS
|
||||
# exit 0, end 2026-10-23T18:59:54.155Z
|
||||
|
||||
## W9 webui journal since 2026-10-23 18:59:11 UTC: 'Proxy: proxy proof off' and 'Sign-in:' counts
|
||||
proxy proof off 1, Sign-in 0
|
||||
# journal since W5: proxy proof off 1, Sign-in 0
|
||||
|
||||
## W9 tester socket
|
||||
console/ drwx------ jwoltje directory
|
||||
tester.sock srw------- jwoltje socket
|
||||
# console/ drwx------ jwoltje directory; tester.sock srw------- jwoltje socket
|
||||
|
||||
## W9 peercred-starts.jsonl lines since W5 naming NEW
|
||||
1 (file lines 6)
|
||||
# peercred-starts lines since W5 naming NEW: 1
|
||||
|
||||
## W9 bus journal 'library:' lines since W5
|
||||
library: 0
|
||||
# bus journal library: 0
|
||||
|
||||
## W9 launches list
|
||||
# start 2026-10-23T18:59:54.221Z
|
||||
# command: (cd $REPO && <clean env> /home/jwoltje/.npm-global/bin/mosaic launches list)
|
||||
re194575ec18c mosaic-stack/chief claude-code claude-opus-5-5 by jason since 2026-10-23T18:59:15.960Z running
|
||||
# exit 0, end 2026-10-23T18:59:54.334Z
|
||||
|
||||
## W9 launches list --json
|
||||
# start 2026-10-23T18:59:54.337Z
|
||||
# command: (cd $REPO && <clean env> /home/jwoltje/.npm-global/bin/mosaic launches list --json)
|
||||
[
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"instance": "chief",
|
||||
"run": "re194575ec18c",
|
||||
"launchedBy": "jason",
|
||||
"harness": "claude-code",
|
||||
"model": "claude-opus-5-5",
|
||||
"provider": "anthropic",
|
||||
"modelKey": "opus",
|
||||
"pid": 760669,
|
||||
"startTime": "88314611",
|
||||
"runnerPid": 760672,
|
||||
"runnerStartTime": "88314611",
|
||||
"runDir": "/home/jwoltje/.mosaic-dev/launches/mosaic-stack/re194575ec18c",
|
||||
"startedAt": "2026-10-23T18:59:15.960Z",
|
||||
"live": true
|
||||
}
|
||||
]
|
||||
# exit 0, end 2026-10-23T18:59:54.448Z
|
||||
# one running chief from this start: run re194575ec18c
|
||||
# pm: live_pm 0 ; old pm not listed
|
||||
# pm: no live pm, as expected (W5's bus stop ended ra38826f3c6e2; no W9b this window)
|
||||
|
||||
## W9 row 301 (p456.sh r301 live copy)
|
||||
# start 2026-10-23T18:59:54.499Z
|
||||
# command: (cd $REPO && <clean env> bash /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/p456.sh r301 /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a)
|
||||
# row 301 channel-proof pin 2026-10-23T18:59:54Z
|
||||
59f0e44f4 ancestor of NEW: yes; 59f0e44f4 pinned 39fcb27c, 24672fd9d (row 252) re-pinned
|
||||
NEW channel-proof pin 604092cb706b152d458f299ff1071f6cd488774629012f96b672f7e9a16c0b2c; NEW packages/webui/src/bus.mjs sha256 604092cb706b152d458f299ff1071f6cd488774629012f96b672f7e9a16c0b2c
|
||||
copy /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a packages/webui/src/bus.mjs sha256 604092cb706b152d458f299ff1071f6cd488774629012f96b672f7e9a16c0b2c
|
||||
R301 PASS
|
||||
# exit 0, end 2026-10-23T18:59:54.511Z
|
||||
|
||||
## W9 agents --tester
|
||||
# start 2026-10-23T18:59:54.514Z
|
||||
# command: (cd $REPO && <clean env> /home/jwoltje/.npm-global/bin/mosaic agents --business mosaic-stack --tester)
|
||||
chief re194575ec18c claude-code since 2026-10-23T18:59:15.964Z
|
||||
# exit 0, end 2026-10-23T18:59:54.729Z
|
||||
# W9 end 2026-10-23T18:59:54Z W9_CHECKS_PASS
|
||||
# W10 start 2026-10-23T19:00:03Z, TMPDIR /mnt/storage/scratch/tmp/gSoOdHP
|
||||
|
||||
## W10 matrix-new.txt vs matrix-old.txt (header lines differ by stamp)
|
||||
(diff exit 0)
|
||||
# matrix: a-g unchanged expected: FAIL=0
|
||||
|
||||
## W10 listeners on :7333
|
||||
count 0
|
||||
# listeners on 7333: 0
|
||||
|
||||
## W10 tester reads through /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a/packages/cli/src/tester-http.mjs
|
||||
/api/config 200 88 bytes sha256 c8b277e5aca5aa2f keys ["board","tester","send","decide","edit"] body {"board":"http://127.0.0.1:7331","tester":true,"send":false,"decide":false,"edit":false} (exit 0)
|
||||
/api/bus/agents 200 320 bytes sha256 97a587592a6b22d7 keys ["rows","at"] agents 1 (exit 0)
|
||||
# tester /api/bus/agents 200, agents 1 (P6: agents 2; the hash moves with the at field)
|
||||
# tester /api/config expected: 200 {"board":"http://127.0.0.1:7331","tester":true,"send":false,"decide":false,"edit":false}
|
||||
# tester /api/config body is P6's plus "decide":false
|
||||
|
||||
## W10 P4 again
|
||||
# P4 2026-10-23T19:00:04Z
|
||||
DropInPaths=
|
||||
ExecStart={ path=/home/jwoltje/.local/bin/chisel ; argv[]=/home/jwoltje/.local/bin/chisel client --fingerprint ce+ISFvMAhuoCRDuc7riIf+hYz87TLHk/C9C/H8QsUg= --keepalive 25s --max-retry-interval 10s http://10.1.1.227:8080 R:0.0.0.0:7332:127.0.0.1:7332 ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }
|
||||
# exit 0
|
||||
# R: specs (1): R:0.0.0.0:7332:127.0.0.1:7332
|
||||
P4 PASS: one R: spec R:0.0.0.0:7332:127.0.0.1:7332, DropInPaths empty
|
||||
(p4 exit 0)
|
||||
|
||||
## W10 unsigned writes through the main port (no session, no proxy header; must be refused)
|
||||
POST /api/seen 401 error="sign-in required"
|
||||
POST /api/reply 401 error="sign-in required"
|
||||
POST /api/processing 401 error="sign-in required"
|
||||
tester POST /api/processing 403 error="read-only" sent=false (exit 2)
|
||||
# W10 end 2026-10-23T19:00:04Z FAIL=0
|
||||
@@ -0,0 +1,14 @@
|
||||
plan: activate for mosaic-stack
|
||||
from: 464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
to: 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
store schema: 3n (read from the store the running bus holds)
|
||||
target schema: 3n
|
||||
migration: none; the store is at the target's version
|
||||
backup: the run backs up the stopped store to /home/jwoltje/.mosaic-dev/backups/stack/<activation>/ before any migration
|
||||
commits: the run adds 141 (newest first, at most 200):
|
||||
bus: scripts/bus-service.sh install --copy 45dca69f6e4bce52834587f66f2ff33ba839ab8a --copies /home/jwoltje/.local/share/mosaic-stack/copies --pm --claude /home/jwoltje/.local/bin/claude
|
||||
proof: off
|
||||
send: off
|
||||
Console: scripts/webui-service.sh install --copy 45dca69f6e4bce52834587f66f2ff33ba839ab8a --copies /home/jwoltje/.local/share/mosaic-stack/copies --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket
|
||||
CLI: scripts/stack-copy.sh wrapper 45dca69f6e4bce52834587f66f2ff33ba839ab8a --copies /home/jwoltje/.local/share/mosaic-stack/copies --bin /home/jwoltje/.npm-global/bin
|
||||
interpreter: {"path":"/usr/bin/python3.14","version":[3,14,6],"dev":66308,"ino":3968163,"sha256":"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc"}
|
||||
@@ -0,0 +1,155 @@
|
||||
plan: activate for mosaic-stack
|
||||
from: 464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
to: 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
store schema: 3n (read from the store the running bus holds)
|
||||
target schema: 3n
|
||||
migration: none; the store is at the target's version
|
||||
backup: the run backs up the stopped store to /home/jwoltje/.mosaic-dev/backups/stack/<activation>/ before any migration
|
||||
commits: the run adds 141 (newest first, at most 200):
|
||||
45dca69f6 sessions: Sage 10-23 Vikunja 571 W rows 309-318 filed, 571 done
|
||||
293b42fee queue: revs 3617-3636: Vikunja 571 W build rows 309-318 added (sage 3617-3626: W1, W2, W3a, W3b, W6, W3, W4b, W5, W7, W8, post-10-27, brief docs/plans/2026-10-21_q195-writing-editor.md) and owners set to unassigned (sage 3627-3636)
|
||||
369607e92 sessions: Sage 10-23 rows 308 and 252 landings, 571 Connections design amendment, Vikunja 597; Scrooge row 252 line
|
||||
59f013247 queue: revs 3589-3616: row 306 in-progress, in-review and failed request (morgana 3589, 3592-3593), request (sage 3594-3595, comment 31207), approve record (dewey 3596), note and done (sage 3599-3600); row 308 added and briefed (sage 3590-3591), claim, in-review and failed request (gosalyn 3601-3603), request (sage 3604-3605, comment 31223), approve record (webby 3606, comment 31224), note and done (sage 3613-3614, landed 30e6bb680); row 291 note and done (sage 3597-3598); row 252 issue #1753 (sage 3607), in-review and failed request (scrooge 3608-3609), request (sage 3610-3611, comment 31230), approve record (webby 3612, comment 31229), note and done (sage 3615-3616, landed 45ea3fa0d)
|
||||
e8bb13df8 docs: clarify Connections opening order and current-link filtering
|
||||
dba2ebdb8 docs: plan required Console Connections view before real import
|
||||
45ea3fa0d row 252: library-cli and thread-claims bus.mjs stubs gain the throwing consoleCall export cli.mjs now imports (Mos GO mos-1465 under mos-1272, via sage-3497)
|
||||
f69c96200 row 252: decide-sso J19 killer (a granted user's config says decide false, its decision POSTs stop at owner-only), J16 checks the config that starts without send; BUILD.md rulings, J11c and J18 equivalence, part 2 mutants (#1753)
|
||||
5b6c87814 row 252: decide-browser placements (mos-1272): the hostile grant goes in with its INSERT since decisions is append-only, and page() loads about:blank first so a same-URL visit reloads
|
||||
8c2c5303c row 252: access-boot fixture provider gains issuer https://idp.test, so consoleOwners can key the owner (Mos GO mos-1464 under mos-1272, via sage-3494)
|
||||
23e3d09fa row 252: decide-sso first-run reds placed (mos-1272): a decision transport without --send never starts, and a POST to /api/bus/decision.* meets row 74's read-only refusal; BUILD.md run notes (#1753)
|
||||
795a645e6 row 252: console-decide events() keeps the row kind as event, since an answer body's kind shadowed it (first-run red at :180, two vacuous zero counts), and a J7 killer test for the console cap release over the socket (#1753)
|
||||
076ca8d6e row 252 BUILD.md: rebase onto fe4ee8c7b, commit map and the six conflict resolutions (sage-3482)
|
||||
68be86324 row 252: mos-1321, reword the shell.test write-boundary comment so Approve and Deny is the one decision control; BUILD.md records the ruling and its channel-proof review condition
|
||||
264fad2e2 row 252 BUILD.md: channel-proof overlap with row 239 (sage-2835)
|
||||
24672fd9d row 252: Console inbox Approve and Deny for grant requests, human-only through a console owner proof, confirmation then resolve, via console with human.input before the executor (#1753, Webby N1-N5); tests not yet run
|
||||
30e6bb680 gosalyn: PRD 1.17, Case 2 story files are DOCX (row 308, sage-3516, Q235 to Q237, Q239). Applies the approved d9 text at 4607e15b8 word for word to the 1.16 text. Status, the header sentence and a 1.17 source line, the Creative library lead, REQ-LIB-1, -2, -4, -5 and -6 changed as d9 says, new REQ-LIB-8 for the writing store and REQ-LIB-9 for the Console's DOCX editor, the 1.17 notes and four risks. requirements.json goes to 1.17 with 87 ids and the d9 titles, and the tasks and bus test pins follow
|
||||
7defb58e9 sessions: Sage 10-23 rows 291 and 306 landings, row 308 launch
|
||||
9c8877bdf plans: DEFERRED row 306 N1 (revoke Set lost on broker restart) and N2 (pending limit stop answers not-holder first), landed 2d0318a44 (mos-1463)
|
||||
2d0318a44 morgana: row 306 build (#1813): #accessRevoked from #revokeLost, #agent answers thread-revoked until endLaunch, runner stops on thread-revoked, READMEs, access-revoke.test 7 7 (mos-1463)
|
||||
bd3fa2a48 morgana: row 306 red-first tests (#1813): bus revoke-window T1/T2, cli revoke-window T3 forcing test; no product code
|
||||
ab575ee55 morgana: row 306 design r2 (dewey-0918 C1-C3, sage-3483/mos-1463): T3 asserts no thread-revoked event for A, T2 limit half makes a second call, six-suite gate, access-revoke edit bounded to 7 7
|
||||
1676ad0de morgana: row 306 design r1 (#1813, sage-3478): #accessRevoked set from #revokeLost, #agent answers thread-revoked until endLaunch, runner maps it to stopped; T1-T3, M1-M3, six access-revoke asserts to Mos via Sage
|
||||
4874d1e83 gosalyn: PRD 1.16 routes library.write under REQ-LIB-6 (mos-1328, mos-1329, sage-2919, webby-0164 B2). REQ-WAIT-3 gains the routing paragraph with its bounds, creative roles only and within-role, Markdown under supporting folders a human marks, never a story file, the writing agent's live Gitea grant on the library project, one commit per write by its own account with the trailer, notice and revert. REQ-LIB-6 names the action. Status, the header, a 1.16 source line and a 1.16 note. requirements.json changes its version only, with the test pin
|
||||
e909ef51a plans: PRD 1.17 brief (Gitea #1815, Vikunja 570): Gosalyn builds d9 4607e15b8 onto 1.16 after row 291, Webby reviews, four files, Sage gates
|
||||
4607e15b8 sage: PRD 1.17 d9 r3 (02f28dec), Mos's J-b check mos-1470: J-b records N20 as confirmed, REQ-LIB-5's version tag cites Q239 for the Connections view (N21), d9 changes names both
|
||||
8b4201055 sage: PRD 1.17 d9 round 2 (b17ce386), Webby round 6 B1: REQ-LIB-5, its note, the Risks line and the A6 line take mos-1443 R3's text as written; J-b in the past tense (N19); the import-waits line cited as Mos's R3 default (N20)
|
||||
4863e2caf sage: PRD 1.17 draft 9 (7dfc52fd), d8 plus Jason's Q41 O2 (Q239, mos-1467): REQ-LIB-5 requires the Console Connections view for converted chapters, note and Risks line follow, J-b records the answer; Webby round 5 N15-N17
|
||||
7b25a6063 agents: webui runs set MOSAIC_REQUIRE_EDITOR_BUILD=1 and linked worktrees npm ci packages/webui (Vikunja 597)
|
||||
e86df37d7 sessions: Sage 272 and 307 landings, 306 design, 252 rebase check
|
||||
fe4ee8c7b queue: revs 3582-3588: row 307 in-review and failed request (gizmoduck 3582-3583), request (sage 3584-3585, comment 31189), round 1 approve record (duckworth 3586), landing note and done at d243f6b25 (sage 3587-3588); queue only
|
||||
0621c439e plans: DEFERRED gains row 307 N1 (row 270's store-unreadable doesn't stick; #1814 landed d243f6b25)
|
||||
d243f6b25 gizmoduck: row 307 run logs: capture.mjs makes each fixture's data root before sessionStore (base session.mjs:78 needs it), BUILD.md expected red adds claude-history test B (duckworth-0287), steps 1-6 results on 1f6db1589 and 1f00d4f91 with skips named and M1-M4 killed (sage-3455, sage-3465)
|
||||
869670d1b gizmoduck: row 307 BUILD.md: commits, old-test edits against mos-1459, new tests and the empty-session correction to test B, expected red on 1f6db1589, run plan with mos-1275 limits, mutants M1-M4
|
||||
dbbda2537 gizmoduck: row 307 (#1814, Vikunja 598) harness kind gains compactions: pi's stream scan and Claude-history check move to packages/plugins/harness/pi/compactions.mjs, claude-code answers harness-unsupported, core keeps the ledger and checks each answer, readLedger reads the reason only, the launcher passes the loaded module; four old-test edits under mos-1459
|
||||
a9da046f8 gizmoduck: row 307 (#1814, Vikunja 598) new tests, red first: row 270's ledgers per reason read the same count and the next collection goes through the harness module, core refuses an answer out of contract, pi answers what base scanPi read, claude-code answers harness-unsupported, a module without compactions refuses missing-export; capture.mjs checks the literals against base 1e629c892
|
||||
4a71b56ab gizmoduck: row 307 design r1 notes: seat suite whole and compactions-launch T3 run-not-skip in the gate (Duckworth C1, C2), launcher closure comment on bypassing call() (N1), line refs :301 and :302 (N2) (duckworth-0280)
|
||||
520889419 gizmoduck: row 307 (#1814, Vikunja 598) design: harness export compactions({ store, cursors, budget, streams, first }), interfaceVersion stays 1, core keeps the ledger, readLedger reads the reason, ledger compatibility table, four old-test edits for Mos (sage-3440)
|
||||
8dc132bec queue: revs 3572-3581: row 272 round 3 approve record (scrooge 3572, comment 31177), row 307 claim (gizmoduck 3573), row 272 round 4 moves (huey 3574-3576), request (sage 3577-3578, comment 31183), round 4 approve record (scrooge 3579, comment 31184), landing note and done at d33989230 (sage 3580-3581); queue only
|
||||
08b8831bc plans: DEFERRED gains row 272 N1 (user session verbs) and the row 270 N6 rebound after row 307 (#1777 landed d33989230)
|
||||
d33989230 row 272: scope unavailable-session waits to the chat area
|
||||
0ea3db297 row 272: fix session fixture authority and initial chat render
|
||||
f859d06d2 row 272: preserve granted-user default chat on denied session catalog
|
||||
70651f45d row 272: retain session recovery state on invalid selection
|
||||
490f45f02 row 272: preserve untested session CLI and Console draft (sage-3145)
|
||||
1e629c892 queue: revs 3565-3571: row 272 round 3 moves on 72690cae7 (huey 3565-3567) and request (sage 3569-3570, comment 31174); row 307 added and briefed (#1814, Vikunja 598, mos-1455 item 3; sage 3568, 3571); queue only
|
||||
84de3fbca plans: row 270 pi compaction reading moves behind the harness kind (#1814, Vikunja 598, mos-1455 item 3, Gizmoduck, reviewer Duckworth); gate template runs all five suites and sets MOSAIC_REQUIRE_EDITOR_BUILD=1 (mos-1455 item 4, mos-1453)
|
||||
1e4c1e6e9 queue: revs 3539-3564: rows 300 and 301 round 1 claims and in-review moves (launchpad 3539-3544), round 1 requests (sage 3545-3548), round 2 moves (launchpad 3549-3554), round 2 requests (sage 3555-3558), Duckworth approve records 300 (3559) and 301 (3560), landing notes and done at 07315e651 and 5b846b048 (sage 3561-3564); queue only
|
||||
5b846b048 launchpad: row 301 (#1808): library-cli and thread-claims bus.mjs fixtures export throwing busBusiness and userCaller stubs (mos-1451 under mos-1272); BUILD.md repaired with run 1 and the ruling; manifest seven paths; unrun
|
||||
59f0e44f4 launchpad: row 301 (#1808): channel-proof re-pins webui bus.mjs at 39fcb27c for the user transport fold, humanCall unchanged (mos-1449 under mos-1272); unrun
|
||||
bb031ec84 launchpad: row 301 (#1808): R6-N4, user-bus.mjs folded into bus.mjs beside humanCall, unchanged; channel-proof re-pin held for Mos's go; unrun
|
||||
07315e651 launchpad: row 300 (#1807): run 1 gate results in BUILD.md (1/0, webui 375/0, M12 killed) and Duckworth's N1; packet only
|
||||
fb04cbc43 launchpad: row 300 (#1807): run 1 first-run red placed (mos-1272), the test's call helper resolves headers again as granted-user.test does; manifest re-hashed
|
||||
9d929911c launchpad: row 300 (#1807): R6-N1, an HTTP-level test of the user-session option swap with the userRoute gate stubbed open by a load hook, and mutant M12; unrun
|
||||
bcf3c1dac queue: revs 3531-3538: row 303 landing note and done at e551cd846 (sage 3531/3532); row 304 approve record (dewey 3533), row 305 approve record (filbert 3534); row 304 landing note and done at a863015a5 (sage 3535/3536); row 305 landing note and done at d52d9f1f2 (sage 3537/3538); queue only
|
||||
d52d9f1f2 row 305 (#1812): gate run 1 evidence (sage-3374): both suites green, mutants a and b killed in both, c a known survivor
|
||||
830f3d8bf row 305 (#1812): BUILD.md notes the SIGKILL leak and its cleanup (Filbert N1)
|
||||
e48d60216 row 305 (#1812): BUILD.md with the trace, change, gate and the three mos-1445 mutants
|
||||
cabcb81d4 row 305 (#1812): each suite's network check also requires the network present under the run's project before the remove (mos-1445)
|
||||
353d65f57 row 305 (#1812, Vikunja 591) draft: per-run COMPOSE_PROJECT_NAME, exit trap removes that one network, one absent-network check per suite; for Mos through Sage before the build (mos-1272)
|
||||
2c289f6f0 SESSIONS: filbert row 305 round 1 approve (c31127, rev 3534)
|
||||
a863015a5 test: match Claude memory slug normalization under mos-1442
|
||||
e551cd846 launchpad: row 303 (#1810): R9 asserts the rehearsal directory is set before the placeholders check joins it, so a null shows the rehearsal output (mos-1422, Vikunja 589)
|
||||
c13c337e1 queue: revs 3521-3530: rows 304 and 305 claimed (rocko 3521, gizmoduck 3522); row 305 in-review on 7e8218a2e (gizmoduck 3523), request failed without a token (gizmoduck 3524), sage's request posted c31126 (3525/3526); row 304 in-review on 5e8354ebb (rocko 3527), request failed without a token (rocko 3528), sage's request posted c31128 (3529/3530); queue only
|
||||
435a7458d sage: PRD 1.17 draft 8 (343cff6f), d7 plus Mos's d8 fix list mos-1443 (R1-R14, M1-M45, J-i to J-l) and the mos-1446 choices (M10 default, M15 quotes Q235 in full, M40 both sentences); M15 and M16 cite b99ca86b9. Webby APPROVE round 5 webby-0210, no B items; N15-N17 carry to d9
|
||||
b99ca86b9 docs: align editor conversion boundary and host restore with PRD d8
|
||||
0e057e05e queue: revs 3511-3520: rows 304, 305 and 306 added and briefed (sage 3511-3516); row 272 round 2 in-review on b44332a93 (huey 3517), request failed without a token (huey 3518), sage's request posted c31120 (3519/3520); queue only (sage)
|
||||
c16e943b9 briefs: mos-1442 approvals for the 590 and 591 rows (#1811, #1812), the 295 N1 revoke-window row (#1813); DEFERRED 295 N1 (sage)
|
||||
ac1644e1c BUILD-LOG and SESSIONS: rows 302, 295 and 219 landings, the Docker pool diagnostic; DEFERRED 219 N1 (U6); brief for the Vikunja 590 and 591 rows (sage)
|
||||
90633c864 queue: revs 3495-3509: row 295 round 2 in-progress and in-review (morgana 3495-3497), sage's request posted (3498/3499), dewey approve record (3500), row 295 landing note and done at 2efd127ce (sage 3501/3502); row 219 in-review on b899095e4 (rocko 3503/3504, request failed without a token), sage's request posted c31107 (3505/3506), dewey approve record c31108 (3507), row 219 landing note and done at 5fdfd7275 (sage 3508/3509); queue only
|
||||
5fdfd7275 docs: preserve row 219 full gate on the post-295 merge
|
||||
a236dbc30 docs: preserve row 219 mos-1429 short-run evidence
|
||||
312260db7 test: prepare row 219 admission pins under mos-1429
|
||||
d7b4967ed docs: record row 219 rebase after granted-user Console
|
||||
90a3c03cf test: assert creative history in its native session store
|
||||
282f5b4e4 test: pin the compaction audit before the persona refusal
|
||||
781fd509c test: give row 219 persona fixture its explicit session
|
||||
52a73e83b docs: rebase row 219 gate packet and record run bounds
|
||||
049214486 wip: publish unverified row 219 inspection candidate
|
||||
2efd127ce morgana: row 295 r2 gate results on d68b4300d (sage-3338, sage-3340): red first, green, M8 count, whole files, suites, script limits and skips, M1-M16 killed
|
||||
fdbe95d88 morgana: row 295 r2 narrow alice grant (Dewey F1, sage-3333): aliceAccess(ref) names only the test's project, set after project.create; asserts and bindLaunch lines byte-identical; BUILD.md preservation record updated
|
||||
cb96220b5 morgana: row 295 r2 old-test setup (mos-1436 option a): message-filter's :117 and governance-pin tests get an alice collaborator access document, spec-fixtures fixture() takes an optional access (null default); asserts and bindLaunch lines byte-identical; BUILD.md gate record, assertion preservation, N1 revoke window
|
||||
6408dcec4 morgana: row 295 r2 first-run reds placed (mos-1272): claim rows spread off the store's null prototype in access-revoke and thread-revoke, demo switches the pi harness on for startBroker, Alice binds at her first call in thread-revoke
|
||||
0c8f12ea2 morgana: row 295 r2 rebase on 80793d824 (sage-3256): accessFor comment is stamp-cached (dewey-0871 N3); BUILD.md rebase note
|
||||
24f8f5d73 morgana: row 295 r2: wrap the launcher's revoked comment (dewey-0874 nit)
|
||||
31da9dcb8 morgana: row 295 r2 (dewey-0871): threadsState ends an expired grant's held claim from the cached read by access-expiry (B1, D7, M16, M11 claim row); access.reload scope as D8 (N1); bus README access.reload, revoked and revocation (N2); tests unrun
|
||||
ff54a1556 morgana: row 295 FED R4 revocation (#1801): 30 s access timer, access.reload, one-transaction claim end on a loss, threadsState revoked, launcher SIGTERM and no start, CLI reload after grant/revoke; tests unrun (no CLEAR yet)
|
||||
249d42dfc morgana: row 295 plan (FED R4 revocation, #1801): sweep on timer, access.reload and user requests; threadsState revoked; launcher skip and SIGTERM; bindLaunch and role.claim refuse thread-revoked
|
||||
07802dc57 queue: revs 3488-3494: row 302 (#1809) in-review on 2a8281a6f (gizmoduck 3488), gizmoduck's request failed without a token (3489), sage's request posted c31091 (3490/3491), dewey approve record c31092 (3492); row 302 landing note and done move at 3ed9fd754 (sage 3493/3494); queue only
|
||||
3ed9fd754 gizmoduck: row 302 (#1809) gate results: run 1 stopped on launcher-released.test:89 (d6, mos-1430); run 2 on merge 783602e06 (5b63ea323 onto 1ac655005) red as ruled, suites green, M1-M5 M7-M9 killed; RESULTS.md and logs, packet only
|
||||
c9fcf9b5a gizmoduck: row 302 (#1809) d6: launcher-released.test:89 counts only a-run's delivery rows and pins the one routed row with holder_run null; #route writes that row for every message (gizmoduck-0388, sage-3294, sage-3296, Mos ruling pending sage-3293); local, not pushed
|
||||
2b6111a17 row 302 (#1809, Vikunja 588): a run threadIdle or landRelease released answers launcher-released on every call needing the claim until it ends, role.claim refuses it (Dewey D1), and the runner exits stopped without releasing again
|
||||
4a827edb0 row 302 (#1809, Vikunja 588): red first, the final forcing tests and the four pins Mos ruled (mos-1414/1415/1416), over unfixed product files; BUILD.md d3-d5 and ASSERTION-PRESERVATION
|
||||
908f92b03 gizmoduck: row 302 design d2: threads.test pins are :392/:394/:395 (sage-3204), land-relaunch grep finds land.test:464 as a third old pin under Q1
|
||||
62470a3ec gizmoduck: row 302 BUILD.md folds Dewey's d1 approval (dewey-0875): D1 role.claim refuses a released run, landRelease reaches runner.test:742-772 so Q1 moves :771-772, Q2-Q4 and N1-N4 settled
|
||||
fee08d7ab gizmoduck: row 302 (#1809, Vikunja 588) idle-stop race design round d1 for Dewey: idle-released code from the broker's own record of threadIdle's release, runner maps it to stopped/0, forcing cli test holds the window open until a call lands, threads.test:393 is the one changed pin (sage-3200, mos-1411)
|
||||
1ac655005 BUILD-LOG and SESSIONS: row 299 gate and landing, row 303 review, 219 and 295 rebases (sage)
|
||||
8a35ffadb queue: revs 3474-3487: row 303 (#1810) in-progress and in-review on 3c3be5d3 (launchpad 3474/3475), launchpad's request failed without a token (3476), sage's request posted c31082 (3477/3478), duckworth approve record c31079 (3480); row 299 (#1806) claim (gander 3479), in-review on 277ace0b (gander 3481), gander's request failed without a token (3482), sage's request posted c31083 (3483/3484), filbert approve record c31084 (3485); row 299 landing note and done move at ffb2fedfb (sage 3486/3487); queue only
|
||||
ffb2fedfb docs(row299): record fresh timing gate and six assertion kills
|
||||
11d1e2e0c docs(row299): record clean integration on 80793d824
|
||||
ed81f6eba docs(row299): record mos-1409 preservation and static candidate
|
||||
e14164ab4 test(case): observe P10 wait directly under mos-1409
|
||||
10113b04f docs(row299): propose direct P10 wait timing for mos-1272 review
|
||||
c1f910b4c SESSIONS: filbert row 299 manifest round 1 approve (c31084, rev 3485)
|
||||
15e688cc0 BUILD-LOG and SESSIONS: row 294 rounds 3-4 and landing, R9 transient and row 303, row 219 edits 2-3 (sage)
|
||||
80793d824 queue: revs 3464-3473: row 294 (#1800) round 4 in-progress and in-review on a1ff5d67 (launchpad 3464/3465), launchpad's request without a token failed (3466), sage's request posted c31055 (3467/3468), duckworth approve record c31053 (3469); row 294 landing note and done move at d3059c2c3 (sage 3470/3471); row 303 (R9 guard, #1810, Vikunja 589, mos-1422) added and briefed (sage 3472/3473); queue only
|
||||
ad6ca7930 docs: brief for the R9 guard row (Vikunja 589, #1810, mos-1422); docs only
|
||||
d3059c2c3 launchpad: row 294 run 4 (#1800): whole gate green on 8616b9a4f (webui 365, cli 909, bus 873, 10 scripts), M1-M11 killed; M1 record names G4's first failure and G5 green (Duckworth C1); receipts in run4/
|
||||
6f0793067 launchpad: row 294 round 4 (#1800): rehearsal fixture copies carry cli access.mjs and transport.mjs, B1-B3 pin the fixture's tracker warning in full (Mos mos-1419, sage-3238); manifest round 4 (19 paths), run 3 receipts; unrun
|
||||
b01e1c9ee launchpad: row 294 round 3 (#1800): G5's baseline is coalesce(max(seq), 0), since max(seq) is NULL on the fixture's empty events table and run 2 read 0 of 22 refusal events (sage-3212, Mos ruling pending sage-3211); manifest round 3, run 2 receipts; unrun
|
||||
8716e72f2 launchpad: row 294 round 2 (#1800): browser.test pin gains /federation.js at index 2 (Mos mos-1412 (a)), G5 pins one action.refused {code: access-refused} per refused verb and every other table unchanged (sage-3194); manifest round 2 (18 paths), ASSERTION-PRESERVATION.json, run 1 receipts; unrun
|
||||
9beeeb995 launchpad: row 294 run limits from recorded durations, 3x or more (sage-3187, mos-1275)
|
||||
9e43fefe6 launchpad: row 294 BUILD.md M1 expectation corrected (Duckworth C1), review recorded with N1-N4 dispositions
|
||||
d0460ed47 launchpad: row 294 round 1 manifest (17 paths from 9450774cb) and notes with the owner-transport exception
|
||||
26f93fa74 launchpad: row 294 sage-3157, owner-transport exception written out, userOptionsFor, G9 pins no user value, M10/M11 (unrun, #1800)
|
||||
c9e67e7d2 launchpad: row 294 BUILD.md M4 kill names the moved test
|
||||
52d2a1610 launchpad: row 294 rulings sage-3153 (boot refusal line, owner transport seam G9, C7 follow-up, access.test.mjs unchanged; unrun, #1800)
|
||||
afef0ea88 launchpad: row 294 FED R6 build and plan, granted-user sign-in (unrun, #1800)
|
||||
09d0d6faf queue: revs 3457-3463: row 294 (#1800) round 3 in-progress and in-review on cb1648f3 (launchpad 3457/3458), launchpad's request without a token failed (3459), sage's request posted c31049 (3460/3461), duckworth approve record c31045 (3462); row 219 restart note on b97a3ff97 (rocko 3463); queue only
|
||||
ffbc0d7a6 BUILD-LOG and SESSIONS: row 292 landing, idle-stop race row 302 and its rulings, rows 300/301, row 294 rounds 2-3 (sage)
|
||||
756284e8e queue: revs 3448-3456: row 294 (#1800) round 2 in-progress and in-review on 7ec7b1ea (launchpad 3448/3449), launchpad's request without a token failed (3450), sage's request without a token failed (3451/3452), sage's request posted c31042 (3453/3454), duckworth approve record c31029 (3455); row 302 (#1809) in-progress (gizmoduck 3456); queue only
|
||||
0e30a85fa queue: revs 3444-3447: row 302 (idle-stop race, #1809, Vikunja 588, mos-1411) added and briefed; row 292 (#1797) landing note and done move at 6aab979e6 (sage); queue only
|
||||
6aab979e6 row 292 (#1797) gate results on 0d0021454: r2 old-test red compactions-launch:229 (exit-22 race, Vikunja 588), mos-1411 diagnostic 0/10 with one not-holder exit 22 seen in the clear test, r3 cli rerun 910/910, ten shells green, M1-M9 killed; rebase receipts (sage-3183, sage-3185, sage-3193)
|
||||
e5ffa7693 row 292 (#1797) packet: targeted mutant kill rules per sage-3152 (pattern, stack lines and text per mutant; anything else is a STOP; a survivor gets one whole-file run), short TMPDIR per stage, run plan after Duckworth's round
|
||||
bf4ba4280 row 292 (#1797) packet: rebase onto b23783f39 with the 0585b3213 resolution (row 203's console and federation text kept word for word, Gander's text for any other key), range-diff, the three patch-ids, C1/N3, mutants M1-M9 (unrun) and the run plan (sage-3146, sage-3148)
|
||||
495c12865 row 292 (#1797) C1 and N3 for duckworth-0229: a pre-270 loader stand-in of its own (C1's loader without the row 270 concat, the list before bce491715) refuses compactionReadBytes and compactionStreams on a full activate and rollback, naming the key; C1's loader reads both; the missing-loader case uses compactionStreams 1024 and checks row 203's console and federation text word for word with no loader
|
||||
4b612781b docs(release): record static approval and post-compaction review conditions
|
||||
be4357216 docs(release): record any-key config plan and static review packet
|
||||
39bde4fd4 fix(release): validate non-console config keys with target loader
|
||||
fdedc56e2 docs: idle-stop race brief records the 10-run diagnostic (not-holder seen once, run r846b8d083502); docs only
|
||||
e3ef1eaf6 docs: brief for the idle-stop race row (Vikunja 588, #1809, mos-1411); docs only
|
||||
c902a767d queue: revs 3439-3443: rocko row 219 claim (3439), sage adds rows 300 (R6-N1, #1807) and 301 (R6-N4, #1808) and briefs both; queue only
|
||||
86d5ac69b docs: R6 follow-up briefs for row 294 N1 (#1807) and N4 (#1808); docs only
|
||||
4a9c536e8 Row 293 (574) landing e51d11640 and the 3m-3n live window (activation 20261023T034557Z-464010fbe4c6): BUILD-LOG phase line, Darkwing and Sage SESSIONS lines; docs only
|
||||
83f1f854d queue: row 293 (574, #1805) landing note and done move (sage); queue only
|
||||
e51d11640 docs(row293): record green integrated trace and whole suites
|
||||
78bbe1223 docs(row293): record integrated run2 and short TMPDIR correction
|
||||
92c0ca3db docs: preserve row293 first trace run and TMPDIR stop
|
||||
d0ede15b9 docs(v574): record static approval and trace evidence requirements
|
||||
29bb1ccd4 docs(v574): audit fixture comparisons and plan trace proof
|
||||
4e22bd49f test(git): disable detached fixture maintenance per mos-1369
|
||||
bus: scripts/bus-service.sh install --copy 45dca69f6e4bce52834587f66f2ff33ba839ab8a --copies /home/jwoltje/.local/share/mosaic-stack/copies --pm --claude /home/jwoltje/.local/bin/claude
|
||||
proof: off
|
||||
send: off
|
||||
Console: scripts/webui-service.sh install --copy 45dca69f6e4bce52834587f66f2ff33ba839ab8a --copies /home/jwoltje/.local/share/mosaic-stack/copies --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket
|
||||
CLI: scripts/stack-copy.sh wrapper 45dca69f6e4bce52834587f66f2ff33ba839ab8a --copies /home/jwoltje/.local/share/mosaic-stack/copies --bin /home/jwoltje/.npm-global/bin
|
||||
interpreter: {"path":"/usr/bin/python3.14","version":[3,14,6],"dev":66308,"ino":3968163,"sha256":"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc"}
|
||||
@@ -0,0 +1 @@
|
||||
launched chief: run re194575ec18c, claude-code claude-opus-5-5
|
||||
@@ -0,0 +1,154 @@
|
||||
plan: rollback for mosaic-stack
|
||||
from: 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
to: 464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
store schema: 3n (read from the store the running bus holds)
|
||||
target schema: 3n
|
||||
migration: none; the store is at the target's version
|
||||
commits: the run takes away 141 (newest first, at most 200):
|
||||
45dca69f6 sessions: Sage 10-23 Vikunja 571 W rows 309-318 filed, 571 done
|
||||
293b42fee queue: revs 3617-3636: Vikunja 571 W build rows 309-318 added (sage 3617-3626: W1, W2, W3a, W3b, W6, W3, W4b, W5, W7, W8, post-10-27, brief docs/plans/2026-10-21_q195-writing-editor.md) and owners set to unassigned (sage 3627-3636)
|
||||
369607e92 sessions: Sage 10-23 rows 308 and 252 landings, 571 Connections design amendment, Vikunja 597; Scrooge row 252 line
|
||||
59f013247 queue: revs 3589-3616: row 306 in-progress, in-review and failed request (morgana 3589, 3592-3593), request (sage 3594-3595, comment 31207), approve record (dewey 3596), note and done (sage 3599-3600); row 308 added and briefed (sage 3590-3591), claim, in-review and failed request (gosalyn 3601-3603), request (sage 3604-3605, comment 31223), approve record (webby 3606, comment 31224), note and done (sage 3613-3614, landed 30e6bb680); row 291 note and done (sage 3597-3598); row 252 issue #1753 (sage 3607), in-review and failed request (scrooge 3608-3609), request (sage 3610-3611, comment 31230), approve record (webby 3612, comment 31229), note and done (sage 3615-3616, landed 45ea3fa0d)
|
||||
e8bb13df8 docs: clarify Connections opening order and current-link filtering
|
||||
dba2ebdb8 docs: plan required Console Connections view before real import
|
||||
45ea3fa0d row 252: library-cli and thread-claims bus.mjs stubs gain the throwing consoleCall export cli.mjs now imports (Mos GO mos-1465 under mos-1272, via sage-3497)
|
||||
f69c96200 row 252: decide-sso J19 killer (a granted user's config says decide false, its decision POSTs stop at owner-only), J16 checks the config that starts without send; BUILD.md rulings, J11c and J18 equivalence, part 2 mutants (#1753)
|
||||
5b6c87814 row 252: decide-browser placements (mos-1272): the hostile grant goes in with its INSERT since decisions is append-only, and page() loads about:blank first so a same-URL visit reloads
|
||||
8c2c5303c row 252: access-boot fixture provider gains issuer https://idp.test, so consoleOwners can key the owner (Mos GO mos-1464 under mos-1272, via sage-3494)
|
||||
23e3d09fa row 252: decide-sso first-run reds placed (mos-1272): a decision transport without --send never starts, and a POST to /api/bus/decision.* meets row 74's read-only refusal; BUILD.md run notes (#1753)
|
||||
795a645e6 row 252: console-decide events() keeps the row kind as event, since an answer body's kind shadowed it (first-run red at :180, two vacuous zero counts), and a J7 killer test for the console cap release over the socket (#1753)
|
||||
076ca8d6e row 252 BUILD.md: rebase onto fe4ee8c7b, commit map and the six conflict resolutions (sage-3482)
|
||||
68be86324 row 252: mos-1321, reword the shell.test write-boundary comment so Approve and Deny is the one decision control; BUILD.md records the ruling and its channel-proof review condition
|
||||
264fad2e2 row 252 BUILD.md: channel-proof overlap with row 239 (sage-2835)
|
||||
24672fd9d row 252: Console inbox Approve and Deny for grant requests, human-only through a console owner proof, confirmation then resolve, via console with human.input before the executor (#1753, Webby N1-N5); tests not yet run
|
||||
30e6bb680 gosalyn: PRD 1.17, Case 2 story files are DOCX (row 308, sage-3516, Q235 to Q237, Q239). Applies the approved d9 text at 4607e15b8 word for word to the 1.16 text. Status, the header sentence and a 1.17 source line, the Creative library lead, REQ-LIB-1, -2, -4, -5 and -6 changed as d9 says, new REQ-LIB-8 for the writing store and REQ-LIB-9 for the Console's DOCX editor, the 1.17 notes and four risks. requirements.json goes to 1.17 with 87 ids and the d9 titles, and the tasks and bus test pins follow
|
||||
7defb58e9 sessions: Sage 10-23 rows 291 and 306 landings, row 308 launch
|
||||
9c8877bdf plans: DEFERRED row 306 N1 (revoke Set lost on broker restart) and N2 (pending limit stop answers not-holder first), landed 2d0318a44 (mos-1463)
|
||||
2d0318a44 morgana: row 306 build (#1813): #accessRevoked from #revokeLost, #agent answers thread-revoked until endLaunch, runner stops on thread-revoked, READMEs, access-revoke.test 7 7 (mos-1463)
|
||||
bd3fa2a48 morgana: row 306 red-first tests (#1813): bus revoke-window T1/T2, cli revoke-window T3 forcing test; no product code
|
||||
ab575ee55 morgana: row 306 design r2 (dewey-0918 C1-C3, sage-3483/mos-1463): T3 asserts no thread-revoked event for A, T2 limit half makes a second call, six-suite gate, access-revoke edit bounded to 7 7
|
||||
1676ad0de morgana: row 306 design r1 (#1813, sage-3478): #accessRevoked set from #revokeLost, #agent answers thread-revoked until endLaunch, runner maps it to stopped; T1-T3, M1-M3, six access-revoke asserts to Mos via Sage
|
||||
4874d1e83 gosalyn: PRD 1.16 routes library.write under REQ-LIB-6 (mos-1328, mos-1329, sage-2919, webby-0164 B2). REQ-WAIT-3 gains the routing paragraph with its bounds, creative roles only and within-role, Markdown under supporting folders a human marks, never a story file, the writing agent's live Gitea grant on the library project, one commit per write by its own account with the trailer, notice and revert. REQ-LIB-6 names the action. Status, the header, a 1.16 source line and a 1.16 note. requirements.json changes its version only, with the test pin
|
||||
e909ef51a plans: PRD 1.17 brief (Gitea #1815, Vikunja 570): Gosalyn builds d9 4607e15b8 onto 1.16 after row 291, Webby reviews, four files, Sage gates
|
||||
4607e15b8 sage: PRD 1.17 d9 r3 (02f28dec), Mos's J-b check mos-1470: J-b records N20 as confirmed, REQ-LIB-5's version tag cites Q239 for the Connections view (N21), d9 changes names both
|
||||
8b4201055 sage: PRD 1.17 d9 round 2 (b17ce386), Webby round 6 B1: REQ-LIB-5, its note, the Risks line and the A6 line take mos-1443 R3's text as written; J-b in the past tense (N19); the import-waits line cited as Mos's R3 default (N20)
|
||||
4863e2caf sage: PRD 1.17 draft 9 (7dfc52fd), d8 plus Jason's Q41 O2 (Q239, mos-1467): REQ-LIB-5 requires the Console Connections view for converted chapters, note and Risks line follow, J-b records the answer; Webby round 5 N15-N17
|
||||
7b25a6063 agents: webui runs set MOSAIC_REQUIRE_EDITOR_BUILD=1 and linked worktrees npm ci packages/webui (Vikunja 597)
|
||||
e86df37d7 sessions: Sage 272 and 307 landings, 306 design, 252 rebase check
|
||||
fe4ee8c7b queue: revs 3582-3588: row 307 in-review and failed request (gizmoduck 3582-3583), request (sage 3584-3585, comment 31189), round 1 approve record (duckworth 3586), landing note and done at d243f6b25 (sage 3587-3588); queue only
|
||||
0621c439e plans: DEFERRED gains row 307 N1 (row 270's store-unreadable doesn't stick; #1814 landed d243f6b25)
|
||||
d243f6b25 gizmoduck: row 307 run logs: capture.mjs makes each fixture's data root before sessionStore (base session.mjs:78 needs it), BUILD.md expected red adds claude-history test B (duckworth-0287), steps 1-6 results on 1f6db1589 and 1f00d4f91 with skips named and M1-M4 killed (sage-3455, sage-3465)
|
||||
869670d1b gizmoduck: row 307 BUILD.md: commits, old-test edits against mos-1459, new tests and the empty-session correction to test B, expected red on 1f6db1589, run plan with mos-1275 limits, mutants M1-M4
|
||||
dbbda2537 gizmoduck: row 307 (#1814, Vikunja 598) harness kind gains compactions: pi's stream scan and Claude-history check move to packages/plugins/harness/pi/compactions.mjs, claude-code answers harness-unsupported, core keeps the ledger and checks each answer, readLedger reads the reason only, the launcher passes the loaded module; four old-test edits under mos-1459
|
||||
a9da046f8 gizmoduck: row 307 (#1814, Vikunja 598) new tests, red first: row 270's ledgers per reason read the same count and the next collection goes through the harness module, core refuses an answer out of contract, pi answers what base scanPi read, claude-code answers harness-unsupported, a module without compactions refuses missing-export; capture.mjs checks the literals against base 1e629c892
|
||||
4a71b56ab gizmoduck: row 307 design r1 notes: seat suite whole and compactions-launch T3 run-not-skip in the gate (Duckworth C1, C2), launcher closure comment on bypassing call() (N1), line refs :301 and :302 (N2) (duckworth-0280)
|
||||
520889419 gizmoduck: row 307 (#1814, Vikunja 598) design: harness export compactions({ store, cursors, budget, streams, first }), interfaceVersion stays 1, core keeps the ledger, readLedger reads the reason, ledger compatibility table, four old-test edits for Mos (sage-3440)
|
||||
8dc132bec queue: revs 3572-3581: row 272 round 3 approve record (scrooge 3572, comment 31177), row 307 claim (gizmoduck 3573), row 272 round 4 moves (huey 3574-3576), request (sage 3577-3578, comment 31183), round 4 approve record (scrooge 3579, comment 31184), landing note and done at d33989230 (sage 3580-3581); queue only
|
||||
08b8831bc plans: DEFERRED gains row 272 N1 (user session verbs) and the row 270 N6 rebound after row 307 (#1777 landed d33989230)
|
||||
d33989230 row 272: scope unavailable-session waits to the chat area
|
||||
0ea3db297 row 272: fix session fixture authority and initial chat render
|
||||
f859d06d2 row 272: preserve granted-user default chat on denied session catalog
|
||||
70651f45d row 272: retain session recovery state on invalid selection
|
||||
490f45f02 row 272: preserve untested session CLI and Console draft (sage-3145)
|
||||
1e629c892 queue: revs 3565-3571: row 272 round 3 moves on 72690cae7 (huey 3565-3567) and request (sage 3569-3570, comment 31174); row 307 added and briefed (#1814, Vikunja 598, mos-1455 item 3; sage 3568, 3571); queue only
|
||||
84de3fbca plans: row 270 pi compaction reading moves behind the harness kind (#1814, Vikunja 598, mos-1455 item 3, Gizmoduck, reviewer Duckworth); gate template runs all five suites and sets MOSAIC_REQUIRE_EDITOR_BUILD=1 (mos-1455 item 4, mos-1453)
|
||||
1e4c1e6e9 queue: revs 3539-3564: rows 300 and 301 round 1 claims and in-review moves (launchpad 3539-3544), round 1 requests (sage 3545-3548), round 2 moves (launchpad 3549-3554), round 2 requests (sage 3555-3558), Duckworth approve records 300 (3559) and 301 (3560), landing notes and done at 07315e651 and 5b846b048 (sage 3561-3564); queue only
|
||||
5b846b048 launchpad: row 301 (#1808): library-cli and thread-claims bus.mjs fixtures export throwing busBusiness and userCaller stubs (mos-1451 under mos-1272); BUILD.md repaired with run 1 and the ruling; manifest seven paths; unrun
|
||||
59f0e44f4 launchpad: row 301 (#1808): channel-proof re-pins webui bus.mjs at 39fcb27c for the user transport fold, humanCall unchanged (mos-1449 under mos-1272); unrun
|
||||
bb031ec84 launchpad: row 301 (#1808): R6-N4, user-bus.mjs folded into bus.mjs beside humanCall, unchanged; channel-proof re-pin held for Mos's go; unrun
|
||||
07315e651 launchpad: row 300 (#1807): run 1 gate results in BUILD.md (1/0, webui 375/0, M12 killed) and Duckworth's N1; packet only
|
||||
fb04cbc43 launchpad: row 300 (#1807): run 1 first-run red placed (mos-1272), the test's call helper resolves headers again as granted-user.test does; manifest re-hashed
|
||||
9d929911c launchpad: row 300 (#1807): R6-N1, an HTTP-level test of the user-session option swap with the userRoute gate stubbed open by a load hook, and mutant M12; unrun
|
||||
bcf3c1dac queue: revs 3531-3538: row 303 landing note and done at e551cd846 (sage 3531/3532); row 304 approve record (dewey 3533), row 305 approve record (filbert 3534); row 304 landing note and done at a863015a5 (sage 3535/3536); row 305 landing note and done at d52d9f1f2 (sage 3537/3538); queue only
|
||||
d52d9f1f2 row 305 (#1812): gate run 1 evidence (sage-3374): both suites green, mutants a and b killed in both, c a known survivor
|
||||
830f3d8bf row 305 (#1812): BUILD.md notes the SIGKILL leak and its cleanup (Filbert N1)
|
||||
e48d60216 row 305 (#1812): BUILD.md with the trace, change, gate and the three mos-1445 mutants
|
||||
cabcb81d4 row 305 (#1812): each suite's network check also requires the network present under the run's project before the remove (mos-1445)
|
||||
353d65f57 row 305 (#1812, Vikunja 591) draft: per-run COMPOSE_PROJECT_NAME, exit trap removes that one network, one absent-network check per suite; for Mos through Sage before the build (mos-1272)
|
||||
2c289f6f0 SESSIONS: filbert row 305 round 1 approve (c31127, rev 3534)
|
||||
a863015a5 test: match Claude memory slug normalization under mos-1442
|
||||
e551cd846 launchpad: row 303 (#1810): R9 asserts the rehearsal directory is set before the placeholders check joins it, so a null shows the rehearsal output (mos-1422, Vikunja 589)
|
||||
c13c337e1 queue: revs 3521-3530: rows 304 and 305 claimed (rocko 3521, gizmoduck 3522); row 305 in-review on 7e8218a2e (gizmoduck 3523), request failed without a token (gizmoduck 3524), sage's request posted c31126 (3525/3526); row 304 in-review on 5e8354ebb (rocko 3527), request failed without a token (rocko 3528), sage's request posted c31128 (3529/3530); queue only
|
||||
435a7458d sage: PRD 1.17 draft 8 (343cff6f), d7 plus Mos's d8 fix list mos-1443 (R1-R14, M1-M45, J-i to J-l) and the mos-1446 choices (M10 default, M15 quotes Q235 in full, M40 both sentences); M15 and M16 cite b99ca86b9. Webby APPROVE round 5 webby-0210, no B items; N15-N17 carry to d9
|
||||
b99ca86b9 docs: align editor conversion boundary and host restore with PRD d8
|
||||
0e057e05e queue: revs 3511-3520: rows 304, 305 and 306 added and briefed (sage 3511-3516); row 272 round 2 in-review on b44332a93 (huey 3517), request failed without a token (huey 3518), sage's request posted c31120 (3519/3520); queue only (sage)
|
||||
c16e943b9 briefs: mos-1442 approvals for the 590 and 591 rows (#1811, #1812), the 295 N1 revoke-window row (#1813); DEFERRED 295 N1 (sage)
|
||||
ac1644e1c BUILD-LOG and SESSIONS: rows 302, 295 and 219 landings, the Docker pool diagnostic; DEFERRED 219 N1 (U6); brief for the Vikunja 590 and 591 rows (sage)
|
||||
90633c864 queue: revs 3495-3509: row 295 round 2 in-progress and in-review (morgana 3495-3497), sage's request posted (3498/3499), dewey approve record (3500), row 295 landing note and done at 2efd127ce (sage 3501/3502); row 219 in-review on b899095e4 (rocko 3503/3504, request failed without a token), sage's request posted c31107 (3505/3506), dewey approve record c31108 (3507), row 219 landing note and done at 5fdfd7275 (sage 3508/3509); queue only
|
||||
5fdfd7275 docs: preserve row 219 full gate on the post-295 merge
|
||||
a236dbc30 docs: preserve row 219 mos-1429 short-run evidence
|
||||
312260db7 test: prepare row 219 admission pins under mos-1429
|
||||
d7b4967ed docs: record row 219 rebase after granted-user Console
|
||||
90a3c03cf test: assert creative history in its native session store
|
||||
282f5b4e4 test: pin the compaction audit before the persona refusal
|
||||
781fd509c test: give row 219 persona fixture its explicit session
|
||||
52a73e83b docs: rebase row 219 gate packet and record run bounds
|
||||
049214486 wip: publish unverified row 219 inspection candidate
|
||||
2efd127ce morgana: row 295 r2 gate results on d68b4300d (sage-3338, sage-3340): red first, green, M8 count, whole files, suites, script limits and skips, M1-M16 killed
|
||||
fdbe95d88 morgana: row 295 r2 narrow alice grant (Dewey F1, sage-3333): aliceAccess(ref) names only the test's project, set after project.create; asserts and bindLaunch lines byte-identical; BUILD.md preservation record updated
|
||||
cb96220b5 morgana: row 295 r2 old-test setup (mos-1436 option a): message-filter's :117 and governance-pin tests get an alice collaborator access document, spec-fixtures fixture() takes an optional access (null default); asserts and bindLaunch lines byte-identical; BUILD.md gate record, assertion preservation, N1 revoke window
|
||||
6408dcec4 morgana: row 295 r2 first-run reds placed (mos-1272): claim rows spread off the store's null prototype in access-revoke and thread-revoke, demo switches the pi harness on for startBroker, Alice binds at her first call in thread-revoke
|
||||
0c8f12ea2 morgana: row 295 r2 rebase on 80793d824 (sage-3256): accessFor comment is stamp-cached (dewey-0871 N3); BUILD.md rebase note
|
||||
24f8f5d73 morgana: row 295 r2: wrap the launcher's revoked comment (dewey-0874 nit)
|
||||
31da9dcb8 morgana: row 295 r2 (dewey-0871): threadsState ends an expired grant's held claim from the cached read by access-expiry (B1, D7, M16, M11 claim row); access.reload scope as D8 (N1); bus README access.reload, revoked and revocation (N2); tests unrun
|
||||
ff54a1556 morgana: row 295 FED R4 revocation (#1801): 30 s access timer, access.reload, one-transaction claim end on a loss, threadsState revoked, launcher SIGTERM and no start, CLI reload after grant/revoke; tests unrun (no CLEAR yet)
|
||||
249d42dfc morgana: row 295 plan (FED R4 revocation, #1801): sweep on timer, access.reload and user requests; threadsState revoked; launcher skip and SIGTERM; bindLaunch and role.claim refuse thread-revoked
|
||||
07802dc57 queue: revs 3488-3494: row 302 (#1809) in-review on 2a8281a6f (gizmoduck 3488), gizmoduck's request failed without a token (3489), sage's request posted c31091 (3490/3491), dewey approve record c31092 (3492); row 302 landing note and done move at 3ed9fd754 (sage 3493/3494); queue only
|
||||
3ed9fd754 gizmoduck: row 302 (#1809) gate results: run 1 stopped on launcher-released.test:89 (d6, mos-1430); run 2 on merge 783602e06 (5b63ea323 onto 1ac655005) red as ruled, suites green, M1-M5 M7-M9 killed; RESULTS.md and logs, packet only
|
||||
c9fcf9b5a gizmoduck: row 302 (#1809) d6: launcher-released.test:89 counts only a-run's delivery rows and pins the one routed row with holder_run null; #route writes that row for every message (gizmoduck-0388, sage-3294, sage-3296, Mos ruling pending sage-3293); local, not pushed
|
||||
2b6111a17 row 302 (#1809, Vikunja 588): a run threadIdle or landRelease released answers launcher-released on every call needing the claim until it ends, role.claim refuses it (Dewey D1), and the runner exits stopped without releasing again
|
||||
4a827edb0 row 302 (#1809, Vikunja 588): red first, the final forcing tests and the four pins Mos ruled (mos-1414/1415/1416), over unfixed product files; BUILD.md d3-d5 and ASSERTION-PRESERVATION
|
||||
908f92b03 gizmoduck: row 302 design d2: threads.test pins are :392/:394/:395 (sage-3204), land-relaunch grep finds land.test:464 as a third old pin under Q1
|
||||
62470a3ec gizmoduck: row 302 BUILD.md folds Dewey's d1 approval (dewey-0875): D1 role.claim refuses a released run, landRelease reaches runner.test:742-772 so Q1 moves :771-772, Q2-Q4 and N1-N4 settled
|
||||
fee08d7ab gizmoduck: row 302 (#1809, Vikunja 588) idle-stop race design round d1 for Dewey: idle-released code from the broker's own record of threadIdle's release, runner maps it to stopped/0, forcing cli test holds the window open until a call lands, threads.test:393 is the one changed pin (sage-3200, mos-1411)
|
||||
1ac655005 BUILD-LOG and SESSIONS: row 299 gate and landing, row 303 review, 219 and 295 rebases (sage)
|
||||
8a35ffadb queue: revs 3474-3487: row 303 (#1810) in-progress and in-review on 3c3be5d3 (launchpad 3474/3475), launchpad's request failed without a token (3476), sage's request posted c31082 (3477/3478), duckworth approve record c31079 (3480); row 299 (#1806) claim (gander 3479), in-review on 277ace0b (gander 3481), gander's request failed without a token (3482), sage's request posted c31083 (3483/3484), filbert approve record c31084 (3485); row 299 landing note and done move at ffb2fedfb (sage 3486/3487); queue only
|
||||
ffb2fedfb docs(row299): record fresh timing gate and six assertion kills
|
||||
11d1e2e0c docs(row299): record clean integration on 80793d824
|
||||
ed81f6eba docs(row299): record mos-1409 preservation and static candidate
|
||||
e14164ab4 test(case): observe P10 wait directly under mos-1409
|
||||
10113b04f docs(row299): propose direct P10 wait timing for mos-1272 review
|
||||
c1f910b4c SESSIONS: filbert row 299 manifest round 1 approve (c31084, rev 3485)
|
||||
15e688cc0 BUILD-LOG and SESSIONS: row 294 rounds 3-4 and landing, R9 transient and row 303, row 219 edits 2-3 (sage)
|
||||
80793d824 queue: revs 3464-3473: row 294 (#1800) round 4 in-progress and in-review on a1ff5d67 (launchpad 3464/3465), launchpad's request without a token failed (3466), sage's request posted c31055 (3467/3468), duckworth approve record c31053 (3469); row 294 landing note and done move at d3059c2c3 (sage 3470/3471); row 303 (R9 guard, #1810, Vikunja 589, mos-1422) added and briefed (sage 3472/3473); queue only
|
||||
ad6ca7930 docs: brief for the R9 guard row (Vikunja 589, #1810, mos-1422); docs only
|
||||
d3059c2c3 launchpad: row 294 run 4 (#1800): whole gate green on 8616b9a4f (webui 365, cli 909, bus 873, 10 scripts), M1-M11 killed; M1 record names G4's first failure and G5 green (Duckworth C1); receipts in run4/
|
||||
6f0793067 launchpad: row 294 round 4 (#1800): rehearsal fixture copies carry cli access.mjs and transport.mjs, B1-B3 pin the fixture's tracker warning in full (Mos mos-1419, sage-3238); manifest round 4 (19 paths), run 3 receipts; unrun
|
||||
b01e1c9ee launchpad: row 294 round 3 (#1800): G5's baseline is coalesce(max(seq), 0), since max(seq) is NULL on the fixture's empty events table and run 2 read 0 of 22 refusal events (sage-3212, Mos ruling pending sage-3211); manifest round 3, run 2 receipts; unrun
|
||||
8716e72f2 launchpad: row 294 round 2 (#1800): browser.test pin gains /federation.js at index 2 (Mos mos-1412 (a)), G5 pins one action.refused {code: access-refused} per refused verb and every other table unchanged (sage-3194); manifest round 2 (18 paths), ASSERTION-PRESERVATION.json, run 1 receipts; unrun
|
||||
9beeeb995 launchpad: row 294 run limits from recorded durations, 3x or more (sage-3187, mos-1275)
|
||||
9e43fefe6 launchpad: row 294 BUILD.md M1 expectation corrected (Duckworth C1), review recorded with N1-N4 dispositions
|
||||
d0460ed47 launchpad: row 294 round 1 manifest (17 paths from 9450774cb) and notes with the owner-transport exception
|
||||
26f93fa74 launchpad: row 294 sage-3157, owner-transport exception written out, userOptionsFor, G9 pins no user value, M10/M11 (unrun, #1800)
|
||||
c9e67e7d2 launchpad: row 294 BUILD.md M4 kill names the moved test
|
||||
52d2a1610 launchpad: row 294 rulings sage-3153 (boot refusal line, owner transport seam G9, C7 follow-up, access.test.mjs unchanged; unrun, #1800)
|
||||
afef0ea88 launchpad: row 294 FED R6 build and plan, granted-user sign-in (unrun, #1800)
|
||||
09d0d6faf queue: revs 3457-3463: row 294 (#1800) round 3 in-progress and in-review on cb1648f3 (launchpad 3457/3458), launchpad's request without a token failed (3459), sage's request posted c31049 (3460/3461), duckworth approve record c31045 (3462); row 219 restart note on b97a3ff97 (rocko 3463); queue only
|
||||
ffbc0d7a6 BUILD-LOG and SESSIONS: row 292 landing, idle-stop race row 302 and its rulings, rows 300/301, row 294 rounds 2-3 (sage)
|
||||
756284e8e queue: revs 3448-3456: row 294 (#1800) round 2 in-progress and in-review on 7ec7b1ea (launchpad 3448/3449), launchpad's request without a token failed (3450), sage's request without a token failed (3451/3452), sage's request posted c31042 (3453/3454), duckworth approve record c31029 (3455); row 302 (#1809) in-progress (gizmoduck 3456); queue only
|
||||
0e30a85fa queue: revs 3444-3447: row 302 (idle-stop race, #1809, Vikunja 588, mos-1411) added and briefed; row 292 (#1797) landing note and done move at 6aab979e6 (sage); queue only
|
||||
6aab979e6 row 292 (#1797) gate results on 0d0021454: r2 old-test red compactions-launch:229 (exit-22 race, Vikunja 588), mos-1411 diagnostic 0/10 with one not-holder exit 22 seen in the clear test, r3 cli rerun 910/910, ten shells green, M1-M9 killed; rebase receipts (sage-3183, sage-3185, sage-3193)
|
||||
e5ffa7693 row 292 (#1797) packet: targeted mutant kill rules per sage-3152 (pattern, stack lines and text per mutant; anything else is a STOP; a survivor gets one whole-file run), short TMPDIR per stage, run plan after Duckworth's round
|
||||
bf4ba4280 row 292 (#1797) packet: rebase onto b23783f39 with the 0585b3213 resolution (row 203's console and federation text kept word for word, Gander's text for any other key), range-diff, the three patch-ids, C1/N3, mutants M1-M9 (unrun) and the run plan (sage-3146, sage-3148)
|
||||
495c12865 row 292 (#1797) C1 and N3 for duckworth-0229: a pre-270 loader stand-in of its own (C1's loader without the row 270 concat, the list before bce491715) refuses compactionReadBytes and compactionStreams on a full activate and rollback, naming the key; C1's loader reads both; the missing-loader case uses compactionStreams 1024 and checks row 203's console and federation text word for word with no loader
|
||||
4b612781b docs(release): record static approval and post-compaction review conditions
|
||||
be4357216 docs(release): record any-key config plan and static review packet
|
||||
39bde4fd4 fix(release): validate non-console config keys with target loader
|
||||
fdedc56e2 docs: idle-stop race brief records the 10-run diagnostic (not-holder seen once, run r846b8d083502); docs only
|
||||
e3ef1eaf6 docs: brief for the idle-stop race row (Vikunja 588, #1809, mos-1411); docs only
|
||||
c902a767d queue: revs 3439-3443: rocko row 219 claim (3439), sage adds rows 300 (R6-N1, #1807) and 301 (R6-N4, #1808) and briefs both; queue only
|
||||
86d5ac69b docs: R6 follow-up briefs for row 294 N1 (#1807) and N4 (#1808); docs only
|
||||
4a9c536e8 Row 293 (574) landing e51d11640 and the 3m-3n live window (activation 20261023T034557Z-464010fbe4c6): BUILD-LOG phase line, Darkwing and Sage SESSIONS lines; docs only
|
||||
83f1f854d queue: row 293 (574, #1805) landing note and done move (sage); queue only
|
||||
e51d11640 docs(row293): record green integrated trace and whole suites
|
||||
78bbe1223 docs(row293): record integrated run2 and short TMPDIR correction
|
||||
92c0ca3db docs: preserve row293 first trace run and TMPDIR stop
|
||||
d0ede15b9 docs(v574): record static approval and trace evidence requirements
|
||||
29bb1ccd4 docs(v574): audit fixture comparisons and plan trace proof
|
||||
4e22bd49f test(git): disable detached fixture maintenance per mos-1369
|
||||
bus: scripts/bus-service.sh install --copy 464010fbe4c6925b077b9b8182a209ee2177eb9d --copies /home/jwoltje/.local/share/mosaic-stack/copies --pm --claude /home/jwoltje/.local/bin/claude
|
||||
proof: off
|
||||
send: off
|
||||
Console: scripts/webui-service.sh install --copy 464010fbe4c6925b077b9b8182a209ee2177eb9d --copies /home/jwoltje/.local/share/mosaic-stack/copies --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket
|
||||
CLI: scripts/stack-copy.sh wrapper 464010fbe4c6925b077b9b8182a209ee2177eb9d --copies /home/jwoltje/.local/share/mosaic-stack/copies --bin /home/jwoltje/.npm-global/bin
|
||||
interpreter: {"path":"/usr/bin/python3.14","version":[3,14,6],"dev":66308,"ino":3968163,"sha256":"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc"}
|
||||
@@ -0,0 +1,20 @@
|
||||
pointer: /home/jwoltje/.mosaic-dev/state/stack-active.json
|
||||
{"copy":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","business":"mosaic-stack","pm":true,"claude":"/home/jwoltje/.local/bin/claude","console":["--port","7332","--public-host","mosaic.woltje.com","--auth-header","X-authentik-username","--allow-user","jason.woltje","--tester-socket"],"schema":"3n","activation":"20261023T185911Z-45dca69f6e4b","at":"2026-10-23T18:59:17Z"}
|
||||
log (last five lines):
|
||||
{"at":"2026-10-22T20:16:24Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":"20261022T201621Z-0cbe2e9b35e5","activation":"20261022T201621Z-0cbe2e9b35e5","result":"ok"}
|
||||
{"at":"2026-10-23T03:45:57Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":null,"activation":"20261023T034557Z-464010fbe4c6","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T03:46:02Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":"20261023T034557Z-464010fbe4c6","activation":"20261023T034557Z-464010fbe4c6","result":"ok"}
|
||||
{"at":"2026-10-23T18:59:11Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":null,"activation":"20261023T185911Z-45dca69f6e4b","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T18:59:17Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":"20261023T185911Z-45dca69f6e4b","activation":"20261023T185911Z-45dca69f6e4b","result":"ok"}
|
||||
check:
|
||||
bus: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
Console: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
CLI: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
result: pass
|
||||
bus status:
|
||||
host: mosaic-stack, pid 758595, running, since 2026-10-23T18:59:13.168Z, notifier off
|
||||
socket: present
|
||||
writer.lock: pid 758858
|
||||
boot: organization file loaded at 2026-10-23T18:59:13.168Z
|
||||
unit flags: match the pointer
|
||||
drift: 0 commit(s) on refactor since the pointer's copy
|
||||
@@ -0,0 +1 @@
|
||||
2026-10-23T18:59:11Z
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
## W5 activate NEW --pm --tester-socket (mos-1493)
|
||||
# start 2026-10-23T18:59:11.241Z
|
||||
# command: (cd $REPO && <clean env> scripts/stack-release.sh activate 45dca69f6e4bce52834587f66f2ff33ba839ab8a mosaic-stack --pm --tester-socket)
|
||||
stack-release: interpreter: {"path":"/usr/bin/python3.14","version":[3,14,6],"dev":66308,"ino":3968163,"sha256":"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc"}
|
||||
stack-release: captured the rollback set: /home/jwoltje/.mosaic-dev/state/stack-rollback/20261023T185911Z-45dca69f6e4b
|
||||
stack-release: stopped both units
|
||||
stack-release: stopped store schema: 3n
|
||||
stack-release: backup: /home/jwoltje/.mosaic-dev/backups/stack/20261023T185911Z-45dca69f6e4b
|
||||
stack-release: installed 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
stack-release: gate passed on 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
stack-release: activate ok: 45dca69f6e4bce52834587f66f2ff33ba839ab8a is live for mosaic-stack
|
||||
# exit 0, end 2026-10-23T18:59:17.355Z
|
||||
@@ -0,0 +1,6 @@
|
||||
types table=26 trigger=97 view=5 index=28
|
||||
schema_version 3n
|
||||
missing none
|
||||
session_table_rows session_ops=0 message_cancels=0 W1 session_ops=0 message_cancels=0 thread_shares 0
|
||||
events 2313 maxSeq 2313
|
||||
COUNTS_OK
|
||||
@@ -0,0 +1,21 @@
|
||||
pointer: /home/jwoltje/.mosaic-dev/state/stack-active.json
|
||||
{"copy":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","business":"mosaic-stack","pm":true,"claude":"/home/jwoltje/.local/bin/claude","console":["--port","7332","--public-host","mosaic.woltje.com","--auth-header","X-authentik-username","--allow-user","jason.woltje","--tester-socket"],"schema":"3n","activation":"20261023T185911Z-45dca69f6e4b","at":"2026-10-23T18:59:17Z"}
|
||||
log (last five lines):
|
||||
{"at":"2026-10-22T20:16:24Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":"20261022T201621Z-0cbe2e9b35e5","activation":"20261022T201621Z-0cbe2e9b35e5","result":"ok"}
|
||||
{"at":"2026-10-23T03:45:57Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":null,"activation":"20261023T034557Z-464010fbe4c6","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T03:46:02Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":"20261023T034557Z-464010fbe4c6","activation":"20261023T034557Z-464010fbe4c6","result":"ok"}
|
||||
{"at":"2026-10-23T18:59:11Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":null,"activation":"20261023T185911Z-45dca69f6e4b","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T18:59:17Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":"20261023T185911Z-45dca69f6e4b","activation":"20261023T185911Z-45dca69f6e4b","result":"ok"}
|
||||
check:
|
||||
bus: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
Console: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
CLI: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
result: pass
|
||||
bus status:
|
||||
host: mosaic-stack, pid 758595, running, since 2026-10-23T18:59:13.168Z, notifier off
|
||||
socket: present
|
||||
writer.lock: pid 758858
|
||||
boot: organization file loaded at 2026-10-23T18:59:13.168Z
|
||||
unit flags: match the pointer
|
||||
drift: 0 commit(s) on refactor since the pointer's copy
|
||||
# exit 0
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), B0 (PLAN.md "Schema and backups"). window-migrate-3n/b0.sh with
|
||||
# WIN changed and the expected schema fixed at 3n: no step in this window changes the schema. An online copy of the
|
||||
# held live store through sqlite's backup API, read-only on the source, as in window-repin-7247d80c7/w12.sh. Laid
|
||||
# out the way `rehearse --backup PATH` reads it (stack-release.sh:2232-2235 at OLD):
|
||||
# $DATA/backups/b0-<STAMP>/bus/bus.sqlite the copy, and nothing else in bus/ (rehearse copies bus/*)
|
||||
# $DATA/backups/b0-<STAMP>/SHA256SUMS written from inside bus/, so it names bus.sqlite
|
||||
# $DATA/backups/b0-<STAMP>/SCHEMA the copy's meta schema_version, which must read the argument
|
||||
# $DATA/backups/b0-<STAMP>/CHECK integrity_check, the event count and maxSeq
|
||||
# Nothing live changes. A failed check stops the script.
|
||||
# usage: b0.sh 3n
|
||||
set -uo pipefail
|
||||
WIN=/mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6
|
||||
WANT=${1:?usage: b0.sh 3n}
|
||||
case $WANT in 3n) ;; *) echo "usage: b0.sh 3n"; exit 2 ;; esac
|
||||
DATA=$HOME/.mosaic-dev
|
||||
sha() { sha256sum < "$1" | cut -c1-64; }
|
||||
stop() { echo "STOP: $*"; exit 1; }
|
||||
|
||||
echo "B0 ($WANT) start $(date -u +%FT%T.%3NZ)"
|
||||
[ -f "$DATA/bus/bus.sqlite" ] || stop "no live store"
|
||||
STAMP=$(date -u +%Y%m%dT%H%M%SZ)
|
||||
B=$DATA/backups/b0-$STAMP
|
||||
[ ! -e "$B" ] || stop "$B exists"
|
||||
( umask 077; mkdir -p "$B/bus" ) || stop "backup dir"
|
||||
python3 -B -c '
|
||||
import sqlite3,sys
|
||||
src=sqlite3.connect("file:"+sys.argv[1]+"?mode=ro",uri=True)
|
||||
dst=sqlite3.connect(sys.argv[2])
|
||||
src.backup(dst)
|
||||
ok=dst.execute("pragma integrity_check").fetchone()[0]
|
||||
n=dst.execute("select count(*), max(seq) from events").fetchone()
|
||||
sv=dst.execute("select value from meta where key=?",("schema_version",)).fetchone()
|
||||
dst.close(); src.close()
|
||||
print(ok, "events", n[0], "maxSeq", n[1], "schema", sv[0] if sv else None)
|
||||
open(sys.argv[3],"w").write((sv[0] if sv else "")+"\n")
|
||||
sys.exit(0 if ok=="ok" else 1)' "$DATA/bus/bus.sqlite" "$B/bus/bus.sqlite" "$B/SCHEMA" > "$B/CHECK" || stop "backup or integrity_check failed: $(cat "$B/CHECK" 2>/dev/null)"
|
||||
[ "$(cat "$B/SCHEMA")" = "$WANT" ] || stop "SCHEMA reads $(cat "$B/SCHEMA"), not $WANT"
|
||||
left=$(ls -A "$B/bus")
|
||||
[ "$left" = bus.sqlite ] || stop "bus/ holds more than bus.sqlite: $(tr '\n' ' ' <<< "$left")"
|
||||
chmod 600 "$B/bus/bus.sqlite" "$B/CHECK" "$B/SCHEMA"
|
||||
( cd "$B/bus" && sha256sum bus.sqlite > ../SHA256SUMS ) || stop "SHA256SUMS"
|
||||
chmod 600 "$B/SHA256SUMS"
|
||||
# The same check rehearse makes before it reads the set.
|
||||
( cd "$B/bus" && sha256sum -c --quiet ../SHA256SUMS ) || stop "the set fails rehearse's SHA256SUMS check"
|
||||
echo "B0 ($WANT) $(date -u +%FT%TZ) store backup $B ($(cat "$B/CHECK")), SHA256SUMS sha256 $(sha "$B/SHA256SUMS")" >> $WIN/backups.txt
|
||||
ls -la "$B" "$B/bus"
|
||||
echo "SHA256SUMS: $(cat "$B/SHA256SUMS")"
|
||||
echo "SCHEMA: $(cat "$B/SCHEMA")"
|
||||
echo "CHECK: $(cat "$B/CHECK")"
|
||||
echo "B0 path $B"
|
||||
echo "B0 SHA256SUMS sha256 $(sha "$B/SHA256SUMS")"
|
||||
echo "B0 end $(date -u +%FT%T.%3NZ) B0_PASS"
|
||||
@@ -0,0 +1,21 @@
|
||||
B0 (3n) start 2026-10-23T18:53:25.006Z
|
||||
/home/jwoltje/.mosaic-dev/backups/b0-20261023T185325Z:
|
||||
total 24
|
||||
drwx------ 3 jwoltje jwoltje 4096 Oct 23 13:53 .
|
||||
drwx------ 18 jwoltje jwoltje 4096 Oct 23 13:53 ..
|
||||
drwx------ 2 jwoltje jwoltje 4096 Oct 23 13:53 bus
|
||||
-rw------- 1 jwoltje jwoltje 37 Oct 23 13:53 CHECK
|
||||
-rw------- 1 jwoltje jwoltje 3 Oct 23 13:53 SCHEMA
|
||||
-rw------- 1 jwoltje jwoltje 77 Oct 23 13:53 SHA256SUMS
|
||||
|
||||
/home/jwoltje/.mosaic-dev/backups/b0-20261023T185325Z/bus:
|
||||
total 3120
|
||||
drwx------ 2 jwoltje jwoltje 4096 Oct 23 13:53 .
|
||||
drwx------ 3 jwoltje jwoltje 4096 Oct 23 13:53 ..
|
||||
-rw------- 1 jwoltje jwoltje 3186688 Oct 23 13:53 bus.sqlite
|
||||
SHA256SUMS: 7dece4d48320156a30e27fb03431b7fa2829993c994fe0d76e5e8dda0027ec68 bus.sqlite
|
||||
SCHEMA: 3n
|
||||
CHECK: ok events 2309 maxSeq 2309 schema 3n
|
||||
B0 path /home/jwoltje/.mosaic-dev/backups/b0-20261023T185325Z
|
||||
B0 SHA256SUMS sha256 b057627d4c6611ac9f5b8e87cd91e8a4fe2310c85b4a060ff000007fcbf314f8
|
||||
B0 end 2026-10-23T18:53:25.221Z B0_PASS
|
||||
@@ -0,0 +1,6 @@
|
||||
D3 2026-10-23T18:52:51Z data-root snapshot /home/jwoltje/.mosaic-dev/backups/d3-20261023T185210Z (STAMP 2026-10-23T18:52:10.990Z, 93086 members, tar exit 0, 0 warning line(s)), SHA256SUMS sha256 551b08fb0c16930296630a0f3a258cb6b200dd7f0250e62a2489897d7d1ef259
|
||||
BZ 2026-10-23T18:53:23Z business file copy /home/jwoltje/.config/mosaic-dev/businesses/mosaic-stack.json.pre-window-20261023T185323Z sha256 1e49bdf05e62607972958f5b7298cfd600c7825812370e26d7c2a842f2af9b93 (source /home/jwoltje/.config/mosaic-dev/businesses/mosaic-stack.json sha256 1e49bdf05e62607972958f5b7298cfd600c7825812370e26d7c2a842f2af9b93)
|
||||
B0 (3n) 2026-10-23T18:53:25Z store backup /home/jwoltje/.mosaic-dev/backups/b0-20261023T185325Z (ok events 2309 maxSeq 2309 schema 3n), SHA256SUMS sha256 b057627d4c6611ac9f5b8e87cd91e8a4fe2310c85b4a060ff000007fcbf314f8
|
||||
W0b 2026-10-23T18:57:24Z business file copy /home/jwoltje/.config/mosaic-dev/businesses/mosaic-stack.json.pre-window-20261023T185724Z sha256 1e49bdf05e62607972958f5b7298cfd600c7825812370e26d7c2a842f2af9b93 (source /home/jwoltje/.config/mosaic-dev/businesses/mosaic-stack.json sha256 1e49bdf05e62607972958f5b7298cfd600c7825812370e26d7c2a842f2af9b93)
|
||||
D3 2026-10-23T18:58:16Z data-root snapshot /home/jwoltje/.mosaic-dev/backups/d3-20261023T185729Z (STAMP 2026-10-23T18:57:29.717Z, 93122 members, tar exit 0, 0 warning line(s)), SHA256SUMS sha256 06ceb124c6f1a3dc70239132c2046e3be39a446b2cf953f4a433d80262784506
|
||||
W5 2026-10-23T18:59:17Z activation 20261023T185911Z-45dca69f6e4b backup /home/jwoltje/.mosaic-dev/backups/stack/20261023T185911Z-45dca69f6e4b STAMP 2026-10-23T18:59:11.913Z SCHEMA 3n SHA256SUMS sha256 87bd93819db5f38b579d1c616b1c80ca69d4abcba690b8e43a368b682e573a50
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), the business file copy that goes with B0 (as sage-2967 A2). Plain cp and
|
||||
# sha256sum, as window-migrate-3n/bz.sh. Nothing reads the file's values.
|
||||
# usage: bz.sh
|
||||
set -uo pipefail
|
||||
WIN=/mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6
|
||||
BIZ=$HOME/.config/mosaic-dev/businesses/mosaic-stack.json
|
||||
sha() { sha256sum < "$1" | cut -c1-64; }
|
||||
stop() { echo "STOP: $*"; exit 1; }
|
||||
|
||||
[ -f "$BIZ" ] || stop "no business file"
|
||||
STAMP=$(date -u +%Y%m%dT%H%M%SZ)
|
||||
COPY=$BIZ.pre-window-$STAMP
|
||||
[ ! -e "$COPY" ] || stop "$COPY exists"
|
||||
before=$(sha "$BIZ")
|
||||
cp -p "$BIZ" "$COPY" || stop "cp"
|
||||
[ "$(sha "$COPY")" = "$before" ] && [ "$(sha "$BIZ")" = "$before" ] || stop "copy sha256 differs, or the file changed during the copy"
|
||||
echo "BZ $(date -u +%FT%TZ) business file copy $COPY sha256 $(sha "$COPY") (source $BIZ sha256 $before)" >> $WIN/backups.txt
|
||||
ls -la "$COPY"
|
||||
echo "BZ copy $COPY sha256 $(sha "$COPY") BZ_PASS"
|
||||
@@ -0,0 +1,2 @@
|
||||
-rw------- 1 jwoltje jwoltje 4304 Oct 19 20:39 /home/jwoltje/.config/mosaic-dev/businesses/mosaic-stack.json.pre-window-20261023T185323Z
|
||||
BZ copy /home/jwoltje/.config/mosaic-dev/businesses/mosaic-stack.json.pre-window-20261023T185323Z sha256 1e49bdf05e62607972958f5b7298cfd600c7825812370e26d7c2a842f2af9b93 BZ_PASS
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), row 295's condition 11 (mos-1436) and Mos's D1/D2
|
||||
# (mos-1487): a python3 -B read-only count on the live store. Prints the thread total, the count per owner
|
||||
# class (owner text up to the first ':'), the user: thread count, and thread_claims rows with op 'revoke'
|
||||
# (295's #revokeLost is the only writer) and the session_ops and message_cancels row counts. Also states whether ~/.config/mosaic-dev/access.json exists (stat
|
||||
# only). Exits 1 if the user: count isn't 0 or the read fails. Writes nothing to the store.
|
||||
# usage: c11.sh LABEL (LABEL: C11-pre, W0, W1, W6)
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
L=${1:?usage: c11.sh LABEL}
|
||||
out=$(python3 -B - "$DATA/bus/bus.sqlite" <<'PY'
|
||||
import sqlite3, sys
|
||||
c = sqlite3.connect("file:" + sys.argv[1] + "?mode=ro", uri=True)
|
||||
total = c.execute("select count(*) from threads").fetchone()[0]
|
||||
cls = c.execute("select case when instr(owner,':')>0 then substr(owner,1,instr(owner,':')-1) else owner end k, count(*) from threads group by k order by k").fetchall()
|
||||
users = c.execute("select count(*) from threads where substr(owner,1,5)='user:'").fetchone()[0]
|
||||
rev = c.execute("select count(*) from thread_claims where op='revoke'").fetchone()[0]
|
||||
so = c.execute("select count(*) from session_ops").fetchone()[0]
|
||||
mc = c.execute("select count(*) from message_cancels").fetchone()[0]
|
||||
print(f"threads {total} owners {' '.join(f'{k}={n}' for k, n in cls)} user_threads {users} revoke_claims {rev} session_ops {so} message_cancels {mc}")
|
||||
sys.exit(0 if users == 0 else 3)
|
||||
PY
|
||||
); rc=$?
|
||||
[ -e $HOME/.config/mosaic-dev/access.json ] && acc="present" || acc="absent"
|
||||
echo "$L c11 $(date -u +%FT%T.%3NZ) $out access.json $acc (exit $rc)" | tee -a $WIN/c11.txt
|
||||
[ $rc = 0 ] || { echo "STOP: $L user threads not 0 or the read failed; to Mos (mos-1487 D1)"; exit 1; }
|
||||
@@ -0,0 +1,3 @@
|
||||
W0 c11 2026-10-23T18:53:38.846Z threads 5 owners tester=5 user_threads 0 revoke_claims 0 session_ops 0 message_cancels 0 access.json absent (exit 0)
|
||||
W1 c11 2026-10-23T18:57:25.086Z threads 5 owners tester=5 user_threads 0 revoke_claims 0 session_ops 0 message_cancels 0 access.json absent (exit 0)
|
||||
W6 c11 2026-10-23T18:59:28.117Z threads 5 owners tester=5 user_threads 0 revoke_claims 0 session_ops 0 message_cancels 0 access.json absent (exit 0)
|
||||
@@ -0,0 +1,53 @@
|
||||
# W11 comment text (re-pin window 464010fbe to 45dca69f6). Gitea post: Darkwing. P19 post: Sage.
|
||||
|
||||
## Gitea #1720 (row 219)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 219's commits (049214486 and the landing 5fdfd7275) are in 45dca69f6 and now run live: C2-09a, one thread per creative instance, in broker, launcher and Console chat. P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## Gitea #1753 (row 252)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 252 (24672fd9d) now runs live. Approve and Deny need `--send` and `--sso`, and live has neither, so the inbox buttons stay off. The tester `/api/config` now carries `"decide":false`, as the PLAN expected. P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## Gitea #1777 (row 272)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 272's commits (490f45f02, 70651f45d, f859d06d2, 0ea3db297) now run live. bus-host/sessions.json is still sessionsVersion 2, written by NEW's host at 18:59:15Z. P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## Gitea #1797 (row 292)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 292 (39bde4fd4) is the release tool for this window: stack-release.sh blob 2656f95b at NEW. Its loader check passed in Mos's P3 rehearse, and the live config holds only the four base keys. P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## Gitea #1800 (row 294)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 294's commits (afef0ea88, 52d2a1610, 26f93fa74) now run live. Granted-user sign-in is consulted only under `--sso`, and live has no `--sso`, so it stays inert. P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## Gitea #1801 (row 295)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 295's commits (ff54a1556, 31da9dcb8, 24f8f5d73, 0c8f12ea2) now run live. It acts only on `user:` threads. There are none, and access.json is absent, so it is inert; wiring access is a human act (mos-1487 D3). P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## Gitea #1807 (row 300)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 300 is tests only and adds no runtime path. Its commits are in 45dca69f6. P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## Gitea #1808 (row 301)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 301 (bb031ec84, 59f0e44f4) now runs live. `p456.sh r301` passed against NEW's copy and the live copy: the channel-proof pin on webui bus.mjs is 604092cb, the sha256 of the live bus.mjs. P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## Gitea #1809 (row 302)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 302 (2b6111a17) now runs live in broker and runner. A released run answers launcher-released on calls that need the claim. P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## Gitea #1813 (row 306)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 306 (2d0318a44) now runs live. A revoked run's calls answer thread-revoked and its runner stops. With no user threads nothing is revoked: D2 counted 0 revoke claims and 0 thread-revoked lines since W5. P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## Gitea #1814 (row 307)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 307 (dbbda2537) now runs live: the harness kind carries `compactions`. The new chief re194575ec18c launched on NEW. P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## Gitea #1815 (row 308)
|
||||
|
||||
Live as of the re-pin window 464010fbe to 45dca69f6 on dragon-lin (activation 20261023T185911Z-45dca69f6e4b, pointer ok at 2026-10-23 18:59:17Z UTC). Darkwing operated under Q173 with Mos's W5 go (mos-1493). The schema is 3n on both sides, so there was no migration. W5 backed up the stopped store (SCHEMA 3n, SHA256SUMS 87bd9381). Row 308 (30e6bb680, with 4874d1e83) now runs live. packages/tasks/requirements.json in the live copy is PRD 1.17 with 87 requirements; OLD had 1.15 and 85. P0 to P6, B0, W0 to W6, W9 and W10 passed. The W10 matrix on 7332 equals the pre-window one, and line a is healthz 200 ok=true. Condition 11 held: 0 user threads at W0, W1 and W6, and no access.json. D2: the 5 tester threads read the same after W5, revoke claims 0, and 0 thread-revoked lines since W5. There was no rollback, restore or prune. STATE report: `agents/darkwing/work/window-repin-45dca69f6/STATE.md` on branch darkwing/window-repin-45dca69f6.
|
||||
|
||||
## P19 (for Sage)
|
||||
|
||||
Re-pin window 464010fbe to 45dca69f6 is done on dragon-lin, 2026-10-23, with Darkwing operating under Q173 (sage-3572; Mos rulings mos-1487, mos-1491, mos-1492, mos-1493). The activation is 20261023T185911Z-45dca69f6e4b, and the pointer went ok at 18:59:17Z UTC. The store is 3n on both sides, so there was no migration; W5's stopped-store backup is SCHEMA 3n, SHA256SUMS 87bd9381. NEW carries all 141 commits OLD..NEW: rows 219, 252, 272, 292, 294, 295, 300, 301, 302, 306, 307 and 308, plus the 571 docs. The live store reads 26 tables, 97 triggers, 5 views and 28 indexes, 3n, with nothing missing. Condition 11 held, with 0 user threads at W0, W1 and W6 and no access.json. D2 held: the 5 tester threads read the same after W5, with 0 revoke claims and 0 thread-revoked lines since W5. The Console on 7332 answers healthz 200 ok=true, the W10 matrix equals the pre-window one, and R301 passed on the live copy. The standing chief is now re194575ec18c. The pm ra38826f3c6e2 that the last window left live ended with W5's bus stop, as planned, and no pm is live. Every step passed, and there was no rollback, restore or prune. STATE: `agents/darkwing/work/window-repin-45dca69f6/STATE.md`.
|
||||
@@ -0,0 +1,16 @@
|
||||
D3 start 2026-10-23T18:57:29.717Z
|
||||
total 1607996
|
||||
drwx------ 2 jwoltje jwoltje 4096 Oct 23 13:58 .
|
||||
drwx------ 19 jwoltje jwoltje 4096 Oct 23 13:57 ..
|
||||
-rw------- 1 jwoltje jwoltje 1646551040 Oct 23 13:58 data-root.tar
|
||||
-rw------- 1 jwoltje jwoltje 57 Oct 23 13:58 MEMBERS
|
||||
-rw------- 1 jwoltje jwoltje 80 Oct 23 13:58 SHA256SUMS
|
||||
-rw------- 1 jwoltje jwoltje 25 Oct 23 13:57 STAMP
|
||||
-rw------- 1 jwoltje jwoltje 0 Oct 23 13:57 WARNINGS
|
||||
size 1.6G
|
||||
MEMBERS: members 93122 tar exit 0 sessions.json sessionsVersion 2
|
||||
WARNINGS: 0 line(s)
|
||||
D3 path /home/jwoltje/.mosaic-dev/backups/d3-20261023T185729Z
|
||||
D3 STAMP 2026-10-23T18:57:29.717Z
|
||||
D3 SHA256SUMS sha256 06ceb124c6f1a3dc70239132c2046e3be39a446b2cf953f4a433d80262784506
|
||||
D3 end 2026-10-23T18:58:16.490Z D3_PASS
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), D3: a data-root snapshot (PLAN.md "Schema and backups"), as
|
||||
# window-migrate-3n/d3.sh. Plain tar and sha256sum, so it runs outside a slot gap (sage-2970). No node, no python, no
|
||||
# store read. The live store isn't in it: a tar of a store the bus is writing isn't a consistent copy, so the
|
||||
# store comes from B0 (before the window) and from W5's own stopped-store backup (after it).
|
||||
# $DATA/backups/d3-<STAMP>/data-root.tar ~/.mosaic-dev without backups/, bus/bus.sqlite{,-wal,-shm},
|
||||
# sockets (tar skips sockets), discord/searxng (a container's
|
||||
# volume, owned by systemd-network, 4.0K) and launches/*/*/tmp
|
||||
# (old runs' sandbox scratch, which holds write-only test files)
|
||||
# $DATA/backups/d3-<STAMP>/SHA256SUMS written from inside the directory, names data-root.tar
|
||||
# $DATA/backups/d3-<STAMP>/STAMP the snapshot's start, from date -u
|
||||
# $DATA/backups/d3-<STAMP>/WARNINGS tar's stderr; "file changed as we read it" lines go to Mos
|
||||
# $DATA/backups/d3-<STAMP>/MEMBERS the member count and the checks below
|
||||
# Nothing live changes. A failed check stops the script.
|
||||
# usage: d3.sh
|
||||
set -uo pipefail
|
||||
umask 077
|
||||
WIN=/mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6
|
||||
DATA=$HOME/.mosaic-dev
|
||||
sha() { sha256sum < "$1" | cut -c1-64; }
|
||||
stop() { echo "STOP: $*"; exit 1; }
|
||||
|
||||
START=$(date -u +%FT%T.%3NZ)
|
||||
echo "D3 start $START"
|
||||
[ -d "$DATA" ] || stop "no data root"
|
||||
STAMP=$(date -u +%Y%m%dT%H%M%SZ)
|
||||
D=$DATA/backups/d3-$STAMP
|
||||
[ ! -e "$D" ] || stop "$D exists"
|
||||
mkdir -p "$D" || stop "snapshot dir"
|
||||
echo "$START" > "$D/STAMP"
|
||||
# --anchored makes each pattern match only that member path, so a rehearsal's own bus.sqlite stays in.
|
||||
# The last window's first run (d3-20261022T195816Z) stopped on tar exit 2 for 36 unreadable paths under the last
|
||||
# two excludes; that directory is kept, not removed (prune nothing).
|
||||
( tar --create --file "$D/data-root.tar" -C "$HOME" --anchored \
|
||||
--exclude=.mosaic-dev/backups \
|
||||
--exclude=.mosaic-dev/bus/bus.sqlite \
|
||||
--exclude=.mosaic-dev/bus/bus.sqlite-wal \
|
||||
--exclude=.mosaic-dev/bus/bus.sqlite-shm \
|
||||
--exclude=.mosaic-dev/discord/searxng \
|
||||
--exclude='.mosaic-dev/launches/*/*/tmp' \
|
||||
--warning=no-file-ignored \
|
||||
.mosaic-dev ) 2> "$D/WARNINGS"
|
||||
rc=$?
|
||||
# GNU tar: 0 ok, 1 some file changed while read (the archive is still written), 2 fatal.
|
||||
[ "$rc" -le 1 ] || stop "tar exit $rc: $(head -5 "$D/WARNINGS")"
|
||||
tar --list --file "$D/data-root.tar" > "$D/.list" || stop "tar --list"
|
||||
n=$(wc -l < "$D/.list")
|
||||
bad=$(grep -E '^\.mosaic-dev/(backups/|bus/bus\.sqlite(-wal|-shm)?$|discord/searxng|launches/[^/]+/[^/]+/tmp/)' "$D/.list" | head -3)
|
||||
[ -z "$bad" ] || stop "excluded member in the archive: $bad"
|
||||
for m in .mosaic-dev/bus-host/sessions.json .mosaic-dev/state/stack-active.json .mosaic-dev/state/stack-activation-log.jsonl; do
|
||||
grep -qxF "$m" "$D/.list" || stop "member missing: $m"
|
||||
done
|
||||
v=$(tar --extract --to-stdout --file "$D/data-root.tar" .mosaic-dev/bus-host/sessions.json | grep -oE '"sessionsVersion": *[0-9]+' | grep -oE '[0-9]+$')
|
||||
# sessionsVersion 2 since the 0cbe2e9b3 window; packages/seat/src/session.mjs (SESSIONS_VERSION) is the same at OLD and NEW.
|
||||
[ "$v" = 2 ] || stop "the snapshot's sessions.json is sessionsVersion ${v:-unreadable}, not 2"
|
||||
{ echo "members $n"; echo "tar exit $rc"; echo "sessions.json sessionsVersion $v"; } > "$D/MEMBERS"
|
||||
rm -f "$D/.list"
|
||||
chmod 600 "$D/data-root.tar" "$D/STAMP" "$D/WARNINGS" "$D/MEMBERS"
|
||||
( cd "$D" && sha256sum data-root.tar > SHA256SUMS ) || stop "SHA256SUMS"
|
||||
chmod 600 "$D/SHA256SUMS"
|
||||
( cd "$D" && sha256sum -c --quiet SHA256SUMS ) || stop "SHA256SUMS check"
|
||||
echo "D3 $(date -u +%FT%TZ) data-root snapshot $D (STAMP $START, $n members, tar exit $rc, $(wc -l < "$D/WARNINGS") warning line(s)), SHA256SUMS sha256 $(sha "$D/SHA256SUMS")" >> $WIN/backups.txt
|
||||
ls -la "$D"
|
||||
echo "size $(du -h "$D/data-root.tar" | cut -f1)"
|
||||
echo "MEMBERS: $(tr '\n' ' ' < "$D/MEMBERS")"
|
||||
echo "WARNINGS: $(wc -l < "$D/WARNINGS") line(s)"; head -20 "$D/WARNINGS"
|
||||
echo "D3 path $D"
|
||||
echo "D3 STAMP $START"
|
||||
echo "D3 SHA256SUMS sha256 $(sha "$D/SHA256SUMS")"
|
||||
echo "D3 end $(date -u +%FT%T.%3NZ) D3_PASS"
|
||||
@@ -0,0 +1,16 @@
|
||||
D3 start 2026-10-23T18:52:10.990Z
|
||||
total 1604820
|
||||
drwx------ 2 jwoltje jwoltje 4096 Oct 23 13:52 .
|
||||
drwx------ 17 jwoltje jwoltje 4096 Oct 23 13:52 ..
|
||||
-rw------- 1 jwoltje jwoltje 1643284480 Oct 23 13:52 data-root.tar
|
||||
-rw------- 1 jwoltje jwoltje 57 Oct 23 13:52 MEMBERS
|
||||
-rw------- 1 jwoltje jwoltje 80 Oct 23 13:52 SHA256SUMS
|
||||
-rw------- 1 jwoltje jwoltje 25 Oct 23 13:52 STAMP
|
||||
-rw------- 1 jwoltje jwoltje 0 Oct 23 13:52 WARNINGS
|
||||
size 1.6G
|
||||
MEMBERS: members 93086 tar exit 0 sessions.json sessionsVersion 2
|
||||
WARNINGS: 0 line(s)
|
||||
D3 path /home/jwoltje/.mosaic-dev/backups/d3-20261023T185210Z
|
||||
D3 STAMP 2026-10-23T18:52:10.990Z
|
||||
D3 SHA256SUMS sha256 551b08fb0c16930296630a0f3a258cb6b200dd7f0250e62a2489897d7d1ef259
|
||||
D3 end 2026-10-23T18:52:51.774Z D3_PASS
|
||||
@@ -0,0 +1,14 @@
|
||||
D3 gate 2026-10-23T18:51:27Z BUSY 556871: bash ./gate.sh D3 bash -c bash /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/d3.sh > /mnt/storage/src/mosaic-stack/agents/darkwing/w BUSY 556872: bash ./gate.sh D3 bash -c bash /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/d3.sh > /mnt/storage/src/mosaic-stack/agents/darkwing/w
|
||||
D3 gate 2026-10-23T18:51:37Z BUSY 560897: bash /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/gate.sh D3 bash -c bash /mnt/storage/src/mosaic-stack/agents/darkwing/work/window BUSY 560898: bash /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/gate.sh D3 bash -c bash /mnt/storage/src/mosaic-stack/agents/darkwing/work/window
|
||||
D3 gate 2026-10-23T18:51:51Z BUSY 565418: bash ./gate.sh D3 d3 BUSY 565419: bash ./gate.sh D3 d3
|
||||
D3 gate 2026-10-23T18:52:10Z CLEAR
|
||||
B0 gate 2026-10-23T18:53:24Z CLEAR
|
||||
P1 gate 2026-10-23T18:53:29Z CLEAR
|
||||
W0 gate 2026-10-23T18:53:36Z CLEAR
|
||||
P2 gate 2026-10-23T18:54:17Z CLEAR
|
||||
P456 gate 2026-10-23T18:54:25Z CLEAR
|
||||
W0b-W4 gate 2026-10-23T18:57:24Z CLEAR
|
||||
W5 gate 2026-10-23T18:59:10Z CLEAR
|
||||
W6 gate 2026-10-23T18:59:23Z CLEAR
|
||||
W9 gate 2026-10-23T18:59:53Z CLEAR
|
||||
W10 gate 2026-10-23T19:00:03Z CLEAR
|
||||
@@ -0,0 +1,8 @@
|
||||
# W10 matrix 2026-10-23T19:00:03Z
|
||||
a 200 ok=true
|
||||
b 401 error="sign-in required"
|
||||
c 401 error="sign-in required"
|
||||
d 403 error="proxy Host refused"
|
||||
e 403 error="tester listener required"
|
||||
f 000 non-json 0 bytes
|
||||
g 000 non-json 0 bytes
|
||||
@@ -0,0 +1,8 @@
|
||||
# P6 matrix 2026-10-23T18:54:25Z
|
||||
a 200 ok=true
|
||||
b 401 error="sign-in required"
|
||||
c 401 error="sign-in required"
|
||||
d 403 error="proxy Host refused"
|
||||
e 403 error="tester listener required"
|
||||
f 000 non-json 0 bytes
|
||||
g 000 non-json 0 bytes
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), P0 (PLAN.md P0 row; sage-3572, mos-1487). Git reads and
|
||||
# sha256sum only. NEW is Sage's target 45dca69f6, not whatever the tip is at window start. P0 refuses unless OLD
|
||||
# and 59f0e44f4 (row 301's webui bus.mjs re-pin) are ancestors, NEW's stack-release.sh blob is 2656f95b0, and
|
||||
# store.mjs's SCHEMA_VERSION is '3n' at both OLD and NEW. The plan sha256 Sage and Mos were sent is the argument;
|
||||
# PLAN.md must match it. Writes $WIN/NEW and $WIN/PLAN.sha256 once; refuses if either exists.
|
||||
# usage: p0.sh PLAN_SHA256
|
||||
set -uo pipefail
|
||||
REPO=/mnt/storage/src/mosaic-stack
|
||||
WIN=$REPO/agents/darkwing/work/window-repin-45dca69f6
|
||||
OLD=464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
NEW=45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
R301=59f0e44f4
|
||||
TOOL_BLOB=2656f95b00e3f30755394ecc20f44ebae26573f9
|
||||
WANT=${1:?usage: p0.sh PLAN_SHA256}
|
||||
stop() { echo "STOP: $*"; exit 1; }
|
||||
[ ! -e $WIN/NEW ] && [ ! -e $WIN/PLAN.sha256 ] || stop "NEW or PLAN.sha256 already written"
|
||||
{
|
||||
echo "# P0 $(date -u +%FT%TZ)"
|
||||
have=$(sha256sum < $WIN/PLAN.md | cut -c1-64)
|
||||
echo "plan sha256 $have"
|
||||
[ "$have" = "$WANT" ] || stop "PLAN.md is not $WANT"
|
||||
[ "$(git -C $REPO rev-parse --verify -q $NEW^{commit})" = "$NEW" ] || stop "NEW $NEW is not a commit here"
|
||||
echo "NEW $NEW ($(git -C $REPO log -1 --format='%cI %s' $NEW | cut -c1-120))"
|
||||
echo "refactor tip $(git -C $REPO rev-parse refactor), origin/refactor $(git -C $REPO rev-parse origin/refactor)"
|
||||
git -C $REPO merge-base --is-ancestor $OLD $NEW || stop "OLD is not an ancestor of NEW"
|
||||
git -C $REPO merge-base --is-ancestor $R301 $NEW || stop "59f0e44f4 (row 301) is not an ancestor of NEW"
|
||||
echo "row 301 webui bus.mjs re-pin $(git -C $REPO rev-parse $R301) is an ancestor of NEW"
|
||||
[ "$(git -C $REPO rev-parse $NEW:scripts/stack-release.sh)" = "$TOOL_BLOB" ] || stop "NEW's stack-release.sh is not 2656f95b0"
|
||||
for c in $OLD $NEW; do
|
||||
v=$(git -C $REPO show $c:packages/bus/src/store.mjs | sed -n "s/^export const SCHEMA_VERSION = '\([^']*\)'.*/\1/p")
|
||||
echo "SCHEMA_VERSION at ${c:0:9}: $v"
|
||||
[ "$v" = 3n ] || stop "SCHEMA_VERSION at ${c:0:9} is not 3n"
|
||||
done
|
||||
echo "commits OLD..NEW: $(git -C $REPO rev-list --count $OLD..$NEW)"
|
||||
echo "$NEW" > $WIN/NEW && echo "$WANT" > $WIN/PLAN.sha256 || stop "write"
|
||||
echo "P0_PASS NEW $NEW"
|
||||
} 2>&1 | tee -a $WIN/p0.txt
|
||||
exit ${PIPESTATUS[0]}
|
||||
@@ -0,0 +1,9 @@
|
||||
# P0 2026-10-23T18:51:17Z
|
||||
plan sha256 0c932a4ccee93252e6c91dbc171e9427bcc82fc30025f97ff48a3d85b4ebddf1
|
||||
NEW 45dca69f6e4bce52834587f66f2ff33ba839ab8a (2026-10-23T13:19:06-05:00 sessions: Sage 10-23 Vikunja 571 W rows 309-318 filed, 571 done)
|
||||
refactor tip 45dca69f6e4bce52834587f66f2ff33ba839ab8a, origin/refactor 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
row 301 webui bus.mjs re-pin 59f0e44f473af7fe8ed816f793adc0df440b29dc is an ancestor of NEW
|
||||
SCHEMA_VERSION at 464010fbe: 3n
|
||||
SCHEMA_VERSION at 45dca69f6: 3n
|
||||
commits OLD..NEW: 141
|
||||
P0_PASS NEW 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
@@ -0,0 +1,21 @@
|
||||
// Re-pin window 464010fbe to NEW (3n, no migrate) (PLAN.md), P1: the live business file, read only. Prints the plan's P1 values and nothing else:
|
||||
// bus.tester, the plug-in lists, launch.by, whether launch.instances includes assistant, and each role's
|
||||
// vars.harness and vars["fallback.harness"]. No other value from the file.
|
||||
import { readFileSync } from 'node:fs';
|
||||
const f = `${process.env.HOME}/.config/mosaic-dev/businesses/mosaic-stack.json`;
|
||||
const b = JSON.parse(readFileSync(f, 'utf8'));
|
||||
console.log(`bus.tester ${JSON.stringify(b.vars?.['bus.tester'])}`);
|
||||
const p = b.plugins ?? {};
|
||||
console.log(`plugins kinds ${JSON.stringify(Object.keys(p).sort())}`);
|
||||
for (const k of ['usage-source', 'channel', 'harness']) console.log(`plugins ${k} ${JSON.stringify(p[k])}`);
|
||||
console.log(`launch.by ${JSON.stringify(b.launch?.by)}`);
|
||||
const inst = b.launch?.instances;
|
||||
const names = Array.isArray(inst) ? inst.map((i) => (typeof i === 'string' ? i : i?.name)) : Object.keys(inst ?? {});
|
||||
console.log(`launch.instances includes assistant ${names.includes('assistant')}`);
|
||||
let pi = 0;
|
||||
for (const [r, v] of Object.entries(b.roles ?? {}).sort()) {
|
||||
const h = v?.vars?.harness, fh = v?.vars?.['fallback.harness'];
|
||||
if (h === 'pi' || fh === 'pi') pi++;
|
||||
console.log(`role ${r} vars.harness ${JSON.stringify(h)}${fh === undefined ? '' : ` fallback.harness ${JSON.stringify(fh)}`}`);
|
||||
}
|
||||
console.log(`roles naming pi ${pi}`);
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), P1 (PLAN.md P1 row; sage-3572). Read only; nothing stopped.
|
||||
# business-check.mjs runs from the repo copy, checked against SCRIPTS.sha256. From the system config this
|
||||
# prints dataRoot and the top-level key names only. C1: scripts/mosaic-config.mjs is the same blob at OLD and
|
||||
# NEW, and its top level takes configVersion, environment, dataRoot, execution, console, federation,
|
||||
# compactionReadBytes and compactionStreams (:304). Any other key stops here, as does a bus.tester other than true.
|
||||
# A console key is recorded, not stopped on.
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
S=$REPO/agents/sage/work/window-plan/repin-de352dfaf BC=$S/business-check.mjs
|
||||
B=$HOME/.config/mosaic-dev/businesses/mosaic-stack.json
|
||||
{ echo "# P1 start $(date -u +%FT%T.%3NZ), REPO HEAD $(git -C $REPO rev-parse HEAD)"
|
||||
echo "# plan sha256 $(sha $PLAN), P0 recorded $PLAN_SHA; NEW $NEW"
|
||||
echo "# business-check.mjs sha256 $(sha256sum < $BC | cut -c1-64); SCRIPTS.sha256 line: $(grep ' business-check.mjs$' $S/SCRIPTS.sha256)"
|
||||
echo "# business file sha256 $(sha256sum < $B | cut -c1-64), mtime $(stat -c %y $B)"; } | tee -a $WIN/P1.txt
|
||||
(cd $S && grep ' business-check.mjs$' SCRIPTS.sha256 | sha256sum -c -) || { echo "STOP business-check.mjs sha mismatch" | tee -a $WIN/P1.txt; exit 1; }
|
||||
$WIN/w.sh P1.txt "P1 status" scripts/stack-release.sh status mosaic-stack
|
||||
$WIN/w.sh P1.txt "P1 values" node $WIN/p1.mjs
|
||||
grep -qx 'bus.tester true' <(node $WIN/p1.mjs) || { echo "STOP bus.tester is not true" | tee -a $WIN/P1.txt; exit 2; }
|
||||
$WIN/w.sh P1.txt "P1 business-check OLD" node $BC $OLD
|
||||
[ "$(sha $PLAN)" = "$PLAN_SHA" ] || { echo "STOP plan sha256 is not P0's" | tee -a $WIN/P1.txt; exit 1; }
|
||||
KEYS=$(node -e 'const c=JSON.parse(require("fs").readFileSync(process.env.HOME+"/.config/mosaic-dev/config.json","utf8"));process.stdout.write(Object.keys(c).sort().join(" "))')
|
||||
{ echo; echo "## P1 config.json top-level key names (C1; names only)"; echo "$KEYS"; } | tee -a $WIN/P1.txt
|
||||
extra=$(tr ' ' '\n' <<< "$KEYS" | grep -vx -e configVersion -e environment -e dataRoot -e execution -e console -e federation -e compactionReadBytes -e compactionStreams | tr '\n' ' ')
|
||||
[ -z "$extra" ] || { echo "STOP config.json holds a key the loader at OLD and NEW refuses: $extra" | tee -a $WIN/P1.txt; exit 3; }
|
||||
echo "# C1: every key is one the loader at OLD and NEW takes; console key $(grep -qw console <<< "$KEYS" && echo present || echo absent), federation key $(grep -qw federation <<< "$KEYS" && echo present || echo absent)" | tee -a $WIN/P1.txt
|
||||
DATA=$(node -e 'const c=JSON.parse(require("fs").readFileSync(process.env.HOME+"/.config/mosaic-dev/config.json","utf8"));process.stdout.write(String(c.dataRoot))')
|
||||
DATA=${DATA/#\~/$HOME}
|
||||
{ echo; echo "## P1 data console"; echo "# dataRoot $DATA"
|
||||
echo "# ls -ld \$DATA/console:"; ls -ld "$DATA/console" 2>&1; echo "# ls rc=$?"
|
||||
sock="$DATA/console/tester.sock"; echo "# tester.sock path length $(printf %s "$sock" | wc -c) bytes (limit 107)"
|
||||
echo "# P1 end $(date -u +%FT%T.%3NZ)"; } | tee -a $WIN/P1.txt
|
||||
@@ -0,0 +1,58 @@
|
||||
# P1 start 2026-10-23T18:53:29.815Z, REPO HEAD 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
# plan sha256 0c932a4ccee93252e6c91dbc171e9427bcc82fc30025f97ff48a3d85b4ebddf1, P0 recorded 0c932a4ccee93252e6c91dbc171e9427bcc82fc30025f97ff48a3d85b4ebddf1; NEW 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
# business-check.mjs sha256 eece4d4671e1ce15ba81e1654c641925ac4988b343687b062897392285a8a1a7; SCRIPTS.sha256 line: eece4d4671e1ce15ba81e1654c641925ac4988b343687b062897392285a8a1a7 business-check.mjs
|
||||
# business file sha256 1e49bdf05e62607972958f5b7298cfd600c7825812370e26d7c2a842f2af9b93, mtime 2026-10-19 20:39:58.506635141 -0500
|
||||
business-check.mjs: OK
|
||||
pointer: /home/jwoltje/.mosaic-dev/state/stack-active.json
|
||||
{"copy":"464010fbe4c6925b077b9b8182a209ee2177eb9d","business":"mosaic-stack","pm":true,"claude":"/home/jwoltje/.local/bin/claude","console":["--port","7332","--public-host","mosaic.woltje.com","--auth-header","X-authentik-username","--allow-user","jason.woltje","--tester-socket"],"schema":"3n","activation":"20261023T034557Z-464010fbe4c6","at":"2026-10-23T03:46:02Z"}
|
||||
log (last five lines):
|
||||
{"at":"2026-10-22T15:06:00Z","op":"activate","from":"86f95bb27f6cb237bf9fa9ba53320bace6c4de0b","to":"84f53540dd0d21ef179ca29697e172b0246e78d1","backup":"20261022T150555Z-84f53540dd0d","activation":"20261022T150555Z-84f53540dd0d","result":"ok"}
|
||||
{"at":"2026-10-22T20:16:21Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":null,"activation":"20261022T201621Z-0cbe2e9b35e5","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-22T20:16:24Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":"20261022T201621Z-0cbe2e9b35e5","activation":"20261022T201621Z-0cbe2e9b35e5","result":"ok"}
|
||||
{"at":"2026-10-23T03:45:57Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":null,"activation":"20261023T034557Z-464010fbe4c6","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T03:46:02Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":"20261023T034557Z-464010fbe4c6","activation":"20261023T034557Z-464010fbe4c6","result":"ok"}
|
||||
check:
|
||||
bus: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
Console: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
CLI: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
result: pass
|
||||
bus status:
|
||||
host: mosaic-stack, pid 3811005, running, since 2026-10-23T03:45:59.548Z, notifier off
|
||||
socket: present
|
||||
writer.lock: pid 3811049
|
||||
boot: organization file loaded at 2026-10-23T03:45:59.547Z
|
||||
unit flags: match the pointer
|
||||
drift: 141 commit(s) on refactor since the pointer's copy
|
||||
# exit 0
|
||||
bus.tester true
|
||||
plugins kinds ["channel","harness","usage-source"]
|
||||
plugins usage-source ["transcript"]
|
||||
plugins channel ["cli","webui"]
|
||||
plugins harness ["claude-code"]
|
||||
launch.by "chief"
|
||||
launch.instances includes assistant true
|
||||
role assistant vars.harness "claude-code"
|
||||
role chief vars.harness "claude-code"
|
||||
role coder vars.harness "claude-code"
|
||||
role cto vars.harness "claude-code"
|
||||
role pm vars.harness "claude-code"
|
||||
role reviewer vars.harness "claude-code"
|
||||
roles naming pi 0
|
||||
# exit 0
|
||||
copy 464010fbe: roles 6, projects 1, arbiters 2
|
||||
HOLDS chief instance.name yes
|
||||
HOLDS pm instance.name no
|
||||
LOAD_OK
|
||||
# exit 0
|
||||
|
||||
## P1 config.json top-level key names (C1; names only)
|
||||
configVersion dataRoot environment execution
|
||||
# C1: every key is one the loader at OLD and NEW takes; console key absent, federation key absent
|
||||
|
||||
## P1 data console
|
||||
# dataRoot /home/jwoltje/.mosaic-dev
|
||||
# ls -ld $DATA/console:
|
||||
drwx------ 2 jwoltje jwoltje 4096 Oct 22 22:45 /home/jwoltje/.mosaic-dev/console
|
||||
# ls rc=0
|
||||
# tester.sock path length 45 bytes (limit 107)
|
||||
# P1 end 2026-10-23T18:53:30.336Z
|
||||
@@ -0,0 +1,49 @@
|
||||
# P2 unit diffs 2026-10-23T18:54:19Z, REPO HEAD 45dca69f6; webui-service.sh and bus-service.sh blobs equal NEW's (P5)
|
||||
## webui: scripts/webui-service.sh render --copy 45dca69f6e4bce52834587f66f2ff33ba839ab8a --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket
|
||||
# render rc=0
|
||||
2c2
|
||||
< # Rendered by scripts/webui-service.sh from packages/webui/systemd/; /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d,
|
||||
---
|
||||
> # Rendered by scripts/webui-service.sh from packages/webui/systemd/; /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a,
|
||||
4c4
|
||||
< # /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d is the read-only copy `install --copy ID` names, and the flags
|
||||
---
|
||||
> # /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a is the read-only copy `install --copy ID` names, and the flags
|
||||
18c18
|
||||
< Documentation=file:///home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d/packages/webui/README.md
|
||||
---
|
||||
> Documentation=file:///home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a/packages/webui/README.md
|
||||
24c24
|
||||
< WorkingDirectory=/home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
---
|
||||
> WorkingDirectory=/home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
29c29
|
||||
< ExecStart=/usr/bin/node /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d/packages/webui/src/cli.mjs serve --checkout /mnt/storage/src/mosaic-stack --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket
|
||||
---
|
||||
> ExecStart=/usr/bin/node /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a/packages/webui/src/cli.mjs serve --checkout /mnt/storage/src/mosaic-stack --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket
|
||||
# diff live vs render rc=1
|
||||
## webui diff with the copy path normalized (OLD id -> NEW id in the live unit)
|
||||
# normalized diff rc=0
|
||||
## bus: scripts/bus-service.sh render --copy 45dca69f6e4bce52834587f66f2ff33ba839ab8a --pm --claude /home/jwoltje/.local/bin/claude
|
||||
# render rc=0
|
||||
2c2
|
||||
< # Rendered by scripts/bus-service.sh from packages/cli/systemd/; /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d,
|
||||
---
|
||||
> # Rendered by scripts/bus-service.sh from packages/cli/systemd/; /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a,
|
||||
8c8
|
||||
< Documentation=file:///home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d/packages/cli/README.md
|
||||
---
|
||||
> Documentation=file:///home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a/packages/cli/README.md
|
||||
14c14
|
||||
< WorkingDirectory=/home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
---
|
||||
> WorkingDirectory=/home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
30c30
|
||||
< ExecStart=/home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d/scripts/mosaic bus start %i --pm
|
||||
---
|
||||
> ExecStart=/home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a/scripts/mosaic bus start %i --pm
|
||||
# diff live vs render rc=1
|
||||
## bus diff with the copy path normalized (OLD id -> NEW id in the live unit)
|
||||
# normalized diff rc=0
|
||||
# end 2026-10-23T18:54:19Z rc=0
|
||||
P2_UNITS_PASS
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), P2 stub runs (PLAN.md P2 row), as window-migrate-3n/p2.sh. Launch from /.
|
||||
# Run 1: console-stub.mjs (NEW's startServer, no tester), console-check.sh NEW PORT. Run 2: console-stub-tester.mjs
|
||||
# adds NEW's startTesterSocket on $D/console/tester.sock under a fresh scratch data root; console-check.sh again,
|
||||
# then the socket checks. Both stubs must report CALLS [] on SIGTERM. console-check.sh reads NEW's copy under
|
||||
# the real HOME (W0 made it there) and only reads. Kills only the stub pids it started.
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
S=$REPO/agents/sage/work/window-plan/repin-de352dfaf
|
||||
C=$HOME/.local/share/mosaic-stack/copies/$NEW
|
||||
[ -n "${TMPDIR:-}" ] && [[ "$TMPDIR" == /mnt/storage/scratch/tmp/* ]] || { echo "STOP TMPDIR must be under /mnt/storage/scratch/tmp"; exit 9; }
|
||||
echo "start $(date -u +%FT%TZ)"
|
||||
(cd $S && grep -E ' (console-check.sh)$' SCRIPTS.sha256 | sha256sum -c -) || { echo "STOP console-check.sh sha"; exit 1; }
|
||||
(cd $S/fixture && sha256sum -c SHA256SUMS) || { echo "STOP fixture sha"; exit 1; }
|
||||
rc=0
|
||||
start_stub() { # out-file, then node args; sets spid and port
|
||||
local o="$1"; shift
|
||||
node "$@" > "$o.out" 2> "$o.err" &
|
||||
spid=$!
|
||||
for _ in $(seq 1 50); do grep -q '^PORT ' "$o.out" && break; sleep 0.1; done
|
||||
port=$(sed -n 's/^PORT //p' "$o.out")
|
||||
[ -n "$port" ] || { echo "STOP stub did not start"; cat "$o.err"; kill -TERM $spid 2>/dev/null; wait $spid 2>/dev/null; exit 1; }
|
||||
}
|
||||
stop_stub() { kill -TERM $spid; wait $spid 2>/dev/null; cat "$1.out"; grep -qx 'CALLS \[\]' "$1.out" && echo "PASS CALLS []" || { echo "FAIL CALLS not []"; rc=1; }; }
|
||||
|
||||
echo "## run 1: console-stub.mjs, no tester"
|
||||
O1=$TMPDIR/p2-run1
|
||||
start_stub $O1 $S/fixture/console-stub.mjs $C
|
||||
echo "stub pid $spid port $port"
|
||||
out=$(bash $S/console-check.sh $NEW $port); r=$?; echo "$out"; echo "console-check rc=$r"; [ $r = 0 ] || rc=1
|
||||
stop_stub $O1
|
||||
|
||||
echo "## run 2: console-stub-tester.mjs with --tester-socket's listener under a scratch data root"
|
||||
D=$(mktemp -d /mnt/storage/scratch/tmp/p2tXXXXXX); echo "data root $D"
|
||||
O2=$TMPDIR/p2-run2
|
||||
node $S/fixture/console-stub-tester.mjs $C $D > $O2.out 2> $O2.err &
|
||||
spid=$!
|
||||
for _ in $(seq 1 50); do grep -q '^SOCK ' $O2.out && break; sleep 0.1; done
|
||||
port=$(sed -n 's/^PORT //p' $O2.out); sock=$(sed -n 's/^SOCK //p' $O2.out)
|
||||
[ -n "$port" ] && [ -n "$sock" ] || { echo "STOP tester stub did not start"; cat $O2.err; kill -TERM $spid 2>/dev/null; wait $spid 2>/dev/null; exit 1; }
|
||||
echo "stub pid $spid port $port sock $sock"
|
||||
out=$(bash $S/console-check.sh $NEW $port); r=$?; echo "$out"; echo "console-check rc=$r"; [ $r = 0 ] || rc=1
|
||||
[ "$sock" = "$D/console/tester.sock" ] && echo "PASS SOCK is \$D/console/tester.sock" || { echo "FAIL SOCK $sock"; rc=1; }
|
||||
st=$(stat -c '%F %a' "$sock"); [ "$st" = "socket 600" ] && echo "PASS sock: $st" || { echo "FAIL sock: $st"; rc=1; }
|
||||
dt=$(stat -c '%F %a' "$D/console"); [ "$dt" = "directory 700" ] && echo "PASS console dir: $dt" || { echo "FAIL console dir: $dt"; rc=1; }
|
||||
code=$(curl -s -o /dev/null -w '%{http_code}' --unix-socket "$sock" http://mosaic-tester.invalid/api/config)
|
||||
[ "$code" = 200 ] && echo "PASS tester /api/config over the socket: 200" || { echo "FAIL tester /api/config: $code"; rc=1; }
|
||||
stop_stub $O2
|
||||
[ ! -e "$sock" ] && echo "PASS socket gone after SIGTERM" || { echo "FAIL socket still there"; rc=1; }
|
||||
[ -s $O1.err ] || [ -s $O2.err ] && { echo "# stub stderr:"; cat $O1.err $O2.err; }
|
||||
left=0; for p in /proc/[0-9]*; do c=$(tr '\0' ' ' < $p/cmdline 2>/dev/null); [[ "$c" == *fixture/console-stub* ]] && { echo "LEFT ${p#/proc/} $c"; left=1; }; done
|
||||
[ $left = 0 ] && echo "sweep: no console-stub process left"
|
||||
echo "end $(date -u +%FT%TZ) rc=$rc"; [ $rc = 0 ] && echo P2_STUBS_PASS || echo P2_STUBS_FAIL
|
||||
exit $rc
|
||||
@@ -0,0 +1,42 @@
|
||||
start 2026-10-23T18:54:17Z
|
||||
console-check.sh: OK
|
||||
console-stub.mjs: OK
|
||||
console-stub-tester.mjs: OK
|
||||
## run 1: console-stub.mjs, no tester
|
||||
stub pid 618609 port 36371
|
||||
PASS markdown-preview.js is served and equals the copy's
|
||||
PASS /api/config on loopback: send=false edit=false
|
||||
PASS project.files through the Console: head=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa files=2 spec=true error=none
|
||||
PASS project.file spec/north-star.md through the Console: commit=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa length=4 error=none
|
||||
PASS loopback save refused: HTTP 403 error=read-only sent=false
|
||||
CONSOLE_PASS
|
||||
console-check rc=0
|
||||
PORT 36371
|
||||
CALLS []
|
||||
PASS CALLS []
|
||||
## run 2: console-stub-tester.mjs with --tester-socket's listener under a scratch data root
|
||||
data root /mnt/storage/scratch/tmp/p2t98u6Gq
|
||||
stub pid 618926 port 44237 sock /mnt/storage/scratch/tmp/p2t98u6Gq/console/tester.sock
|
||||
PASS markdown-preview.js is served and equals the copy's
|
||||
PASS /api/config on loopback: send=false edit=false
|
||||
PASS project.files through the Console: head=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa files=2 spec=true error=none
|
||||
PASS project.file spec/north-star.md through the Console: commit=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa length=4 error=none
|
||||
PASS loopback save refused: HTTP 403 error=read-only sent=false
|
||||
CONSOLE_PASS
|
||||
console-check rc=0
|
||||
PASS SOCK is $D/console/tester.sock
|
||||
PASS sock: socket 600
|
||||
PASS console dir: directory 700
|
||||
PASS tester /api/config over the socket: 200
|
||||
PORT 44237
|
||||
SOCK /mnt/storage/scratch/tmp/p2t98u6Gq/console/tester.sock
|
||||
CALLS []
|
||||
PASS CALLS []
|
||||
PASS socket gone after SIGTERM
|
||||
/mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/p2.sh: line 51: /proc/618721/cmdline: No such file or directory
|
||||
/mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/p2.sh: line 51: /proc/618741/cmdline: No such file or directory
|
||||
/mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/p2.sh: line 51: /proc/618899/cmdline: No such file or directory
|
||||
/mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/p2.sh: line 51: /proc/619127/cmdline: No such file or directory
|
||||
sweep: no console-stub process left
|
||||
end 2026-10-23T18:54:19Z rc=0
|
||||
P2_STUBS_PASS
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), P2 second half (PLAN.md P2 row): render both units from REPO's service
|
||||
# scripts for NEW with the pointer's flags, diff against the live units, then diff again with the live copy id
|
||||
# swapped OLD to NEW. The only difference allowed is the copy path, so the swapped diff must be empty.
|
||||
# Output follows last window's p2-units.txt. Render writes nothing and starts nothing; it only looks up node's path.
|
||||
# usage: p2units.sh > p2-units.txt
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
U=${XDG_CONFIG_HOME:-$HOME/.config}/systemd/user
|
||||
rc=0
|
||||
cd $REPO || exit 1
|
||||
git diff --quiet $NEW HEAD -- scripts/webui-service.sh scripts/bus-service.sh || { echo "STOP service scripts differ from NEW"; exit 1; }
|
||||
echo "# P2 unit diffs $(date -u +%FT%TZ), REPO HEAD $(git rev-parse --short=9 HEAD); webui-service.sh and bus-service.sh blobs equal NEW's (P5)"
|
||||
one() { # name, live unit file, render command...
|
||||
local name=$1 live=$2; shift 2
|
||||
local r; r=$(mktemp /mnt/storage/scratch/tmp/p2uXXXXXX)
|
||||
echo "## $name: $*"
|
||||
"$@" > "$r"; local x=$?; echo "# render rc=$x"; [ $x = 0 ] || rc=1
|
||||
diff "$live" "$r"; echo "# diff live vs render rc=$?"
|
||||
echo "## $name diff with the copy path normalized (OLD id -> NEW id in the live unit)"
|
||||
sed "s/$OLD/$NEW/g" "$live" | diff - "$r"; x=$?; echo "# normalized diff rc=$x"; [ $x = 0 ] || rc=1
|
||||
rm -f "$r"
|
||||
}
|
||||
one webui $U/mosaic-webui.service scripts/webui-service.sh render --copy $NEW --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket
|
||||
one bus $U/[email protected] scripts/bus-service.sh render --copy $NEW --pm --claude $HOME/.local/bin/claude
|
||||
echo "# end $(date -u +%FT%TZ) rc=$rc"; [ $rc = 0 ] && echo P2_UNITS_PASS || echo P2_UNITS_FAIL
|
||||
exit $rc
|
||||
@@ -0,0 +1,16 @@
|
||||
import sqlite3, sys, json
|
||||
def counts(p):
|
||||
c = sqlite3.connect(f"file:{p}?mode=ro", uri=True)
|
||||
t = [r[0] for r in c.execute("select name from sqlite_master where type='table' order by name")]
|
||||
out = {n: c.execute(f'select count(*) from "{n}"').fetchone()[0] for n in t}
|
||||
la = c.execute("""select count(*) from events where json_extract(body,'$.action')='action.allowed' and (
|
||||
coalesce(json_extract(body,'$.body.action'),'') like 'grant.%' or coalesce(json_extract(body,'$.body.operation'),'') like 'grant.%'
|
||||
or instr(body,'hostLineLeft')>0)""").fetchone()[0] if 'events' in t else None
|
||||
la2 = c.execute("""select count(*) from events where (json_extract(body,'$.action') like 'grant.%' or json_extract(body,'$.operation') like 'grant.%' or instr(body,'hostLineLeft')>0)""").fetchone()[0]
|
||||
return out, la, la2
|
||||
a, laa, la2a = counts(sys.argv[1]); b, lab, la2b = counts(sys.argv[2])
|
||||
for k in sorted(set(a) | set(b)):
|
||||
mark = '' if a.get(k) == b.get(k) else ' CHANGED'
|
||||
print(f"{k}: {a.get(k)} -> {b.get(k)}{mark}")
|
||||
print("lookalike_action_allowed backup", laa, "rehearsal", lab)
|
||||
print("any_grant_event backup", la2a, "rehearsal", la2b)
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), P3 hand check: start the rehearsal store's host (--no-launch) and a
|
||||
# Console on 7341 from NEW's copy against the rehearsal config, read healthz, /api/config and the tester socket,
|
||||
# then stop both and count the receipts. Touches only the rehearsal dir P3 made.
|
||||
# usage: p3/hand-console.sh REHEARSAL_DIR
|
||||
set -u
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
R=${1:?usage: p3/hand-console.sh REHEARSAL_DIR}
|
||||
case "$R" in "$DATA"/rehearsals/*-"${NEW:0:12}") ;; *) echo "STOP: $R is not a rehearsal dir for NEW"; exit 1 ;; esac
|
||||
[ -f "$R/config/config.json" ] || { echo "STOP: no $R/config/config.json"; exit 1; }
|
||||
C=$HOME/.local/share/mosaic-stack/copies/$NEW
|
||||
[ -d "$C" ] || { echo "STOP: no copy for NEW at $C"; exit 1; }
|
||||
E=(env -i HOME="$HOME" PATH="$PATH" MOSAIC_CONFIG="$R/config/config.json")
|
||||
date -u +%FT%TZ
|
||||
echo "receipt lines before: $(wc -l < "$R/data/bus/peercred-starts.jsonl")"
|
||||
"${E[@]}" "$C/scripts/mosaic" bus start mosaic-stack --no-launch > "$R/hand-host.log" 2>&1 & HP=$!
|
||||
for i in $(seq 1 30); do [ -S "$R/data/bus/broker.sock" ] && break; sleep 0.5; done
|
||||
"${E[@]}" node "$C/packages/webui/src/cli.mjs" serve --port 7341 --business mosaic-stack --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket > "$R/hand-console.log" 2>&1 & CP=$!
|
||||
for i in $(seq 1 30); do curl -s -o /dev/null http://127.0.0.1:7341/healthz && [ -S "$R/data/console/tester.sock" ] && break; sleep 0.5; done
|
||||
echo "host pid $HP console pid $CP"
|
||||
echo "healthz: $(curl -s -w ' %{http_code}' http://127.0.0.1:7341/healthz)"
|
||||
echo "api/config: $(curl -s -w ' %{http_code}' http://127.0.0.1:7341/api/config)"
|
||||
echo "api/config Host public: $(curl -s -w ' %{http_code}' -H 'Host: mosaic.woltje.com' http://127.0.0.1:7341/api/config)"
|
||||
stat -c 'socket %a %U %n' "$R/data/console/tester.sock"; stat -c 'dir %a %U %n' "$R/data/console"
|
||||
echo "tester GET /api/config: $("${E[@]}" node "$C/packages/cli/src/tester-http.mjs" GET /api/config 2>&1; echo " rc=$?")"
|
||||
echo "tester GET /api/bus/agents: $("${E[@]}" node "$C/packages/cli/src/tester-http.mjs" GET /api/bus/agents 2>&1 | cut -c1-400; echo " rc=${PIPESTATUS[0]}")"
|
||||
kill -TERM "$CP"; wait "$CP"; echo "console exit $?"
|
||||
kill -TERM "$HP"; wait "$HP"; echo "host exit $?"
|
||||
[ -e "$R/data/bus/writer.lock" ] && echo "writer.lock present" || echo "writer.lock released"
|
||||
echo "receipt lines after: $(wc -l < "$R/data/bus/peercred-starts.jsonl")"
|
||||
echo "library lines: $(grep -c 'library:' "$R/hand-host.log")"
|
||||
date -u +%FT%TZ
|
||||
@@ -0,0 +1,6 @@
|
||||
# P4 2026-10-23T18:54:25Z
|
||||
DropInPaths=
|
||||
ExecStart={ path=/home/jwoltje/.local/bin/chisel ; argv[]=/home/jwoltje/.local/bin/chisel client --fingerprint ce+ISFvMAhuoCRDuc7riIf+hYz87TLHk/C9C/H8QsUg= --keepalive 25s --max-retry-interval 10s http://10.1.1.227:8080 R:0.0.0.0:7332:127.0.0.1:7332 ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }
|
||||
# exit 0
|
||||
# R: specs (1): R:0.0.0.0:7332:127.0.0.1:7332
|
||||
P4 PASS: one R: spec R:0.0.0.0:7332:127.0.0.1:7332, DropInPaths empty
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env bash
|
||||
# P4-P6 of agents/darkwing/work/window-repin-45dca69f6/PLAN.md, from window-migrate-3n/p456.sh, read only.
|
||||
# P4 the tunnel unit, P5 the four REPO scripts against NEW plus row 301's channel-proof pin (mos-1453), P6 the
|
||||
# 7332 matrix on OLD (matrix-old.txt).
|
||||
# usage: p456.sh p4|p5|p6|tester|r301 [COPY]
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
FILES=("${FOUR[@]}")
|
||||
# The plan's <32 letters>: a fixed dummy, not a secret. matrix-new.txt uses the same value.
|
||||
PROOF=abcdefghijklmnopqrstuvwxyzabcdef
|
||||
|
||||
p4() {
|
||||
echo "# P4 $(date -u +%FT%TZ)"
|
||||
local out; out="$(systemctl --user show mosaic-preview-tunnel.service -p ExecStart -p DropInPaths)"; local rc=$?
|
||||
printf '%s\n' "$out"; echo "# exit $rc"
|
||||
local specs; specs="$(grep -oE 'R:[^ ;]+' <<<"$out")"
|
||||
local n; n="$(grep -c . <<<"$specs")"
|
||||
echo "# R: specs ($n): $(tr '\n' ' ' <<<"$specs")"
|
||||
local drop; drop="$(sed -n 's/^DropInPaths=//p' <<<"$out")"
|
||||
if [[ $rc -eq 0 && $n -eq 1 && "$specs" == "R:0.0.0.0:7332:127.0.0.1:7332" && -z "$drop" ]]; then
|
||||
echo "P4 PASS: one R: spec R:0.0.0.0:7332:127.0.0.1:7332, DropInPaths empty"
|
||||
else
|
||||
echo "P4 FAIL"; return 3
|
||||
fi
|
||||
}
|
||||
|
||||
p5() {
|
||||
echo "# P5 $(date -u +%FT%TZ); HEAD $(git -C $REPO rev-parse HEAD)"
|
||||
git -C $REPO diff --quiet $NEW HEAD -- "${FILES[@]}"; local d=$?
|
||||
echo "# git diff --quiet $NEW HEAD -- ${FILES[*]}: exit $d"
|
||||
local st; st="$(git -C $REPO status --porcelain -- "${FILES[@]}")"; local s=$?
|
||||
echo "# git status --porcelain (exit $s): [${st}]"
|
||||
for f in "${FILES[@]}"; do echo "# $f HEAD blob $(git -C $REPO rev-parse HEAD:$f) NEW blob $(git -C $REPO rev-parse $NEW:$f)"; done
|
||||
if [[ $d -eq 0 && $s -eq 0 && -z "$st" ]]; then echo "P5 PASS"; else echo "P5 FAIL"; return 3; fi
|
||||
}
|
||||
|
||||
# Row 301 (mos-1453): its channel-proof re-pin of packages/webui/src/bus.mjs is 59f0e44f4 (39fcb27c); row 252
|
||||
# (24672fd9d) re-pinned it again, so NEW's packages/bus/tests/channel-proof.test.mjs pins 604092cb. Checks
|
||||
# 59f0e44f4 is an ancestor of NEW, that NEW's pin equals the sha256 of NEW's bus.mjs, and, given a copy
|
||||
# directory, that the copy's file has that sha256 too.
|
||||
r301() {
|
||||
local copy="${1:-}" pin blob file
|
||||
echo "# row 301 channel-proof pin $(date -u +%FT%TZ)"
|
||||
git -C $REPO merge-base --is-ancestor 59f0e44f4 $NEW || { echo "R301 FAIL: 59f0e44f4 is not an ancestor of NEW"; return 3; }
|
||||
pin=$(git -C $REPO show $NEW:packages/bus/tests/channel-proof.test.mjs | sed -n 's#.*"packages/webui/src/bus.mjs": "\([0-9a-f]\{64\}\)".*#\1#p')
|
||||
blob=$(git -C $REPO show $NEW:packages/webui/src/bus.mjs | sha256sum | cut -c1-64)
|
||||
echo "59f0e44f4 ancestor of NEW: yes; 59f0e44f4 pinned 39fcb27c, 24672fd9d (row 252) re-pinned"
|
||||
echo "NEW channel-proof pin ${pin:-none}; NEW packages/webui/src/bus.mjs sha256 $blob"
|
||||
[ -n "$pin" ] && [ "$pin" = "$blob" ] || { echo "R301 FAIL: NEW's pin is not NEW's bus.mjs"; return 3; }
|
||||
if [ -n "$copy" ]; then
|
||||
file=$(sha256sum < "$copy/packages/webui/src/bus.mjs" | cut -c1-64)
|
||||
echo "copy $copy packages/webui/src/bus.mjs sha256 $file"
|
||||
[ "$file" = "$pin" ] || { echo "R301 FAIL: the copy's bus.mjs is not the pin"; return 3; }
|
||||
fi
|
||||
echo "R301 PASS"
|
||||
}
|
||||
|
||||
# one matrix line: label, then curl arguments; prints "<label> <code> <error or ok field>"
|
||||
req() {
|
||||
local label="$1"; shift
|
||||
local body; body="$(mktemp -p "${TMPDIR:-/tmp}")"
|
||||
local code; code="$(curl -s -m 10 -o "$body" -w '%{http_code}' "$@")"
|
||||
local field; field="$(node -e '
|
||||
let s = require("fs").readFileSync(process.argv[1], "utf8"), j;
|
||||
try { j = JSON.parse(s); } catch { console.log("non-json " + s.length + " bytes"); process.exit(0); }
|
||||
console.log(j.error !== undefined ? "error=" + JSON.stringify(j.error) : "ok=" + JSON.stringify(j.ok));
|
||||
' "$body")"
|
||||
rm -f "$body"
|
||||
echo "$label $code $field"
|
||||
}
|
||||
|
||||
p6() {
|
||||
req a http://127.0.0.1:7332/healthz
|
||||
req b -H 'Host: mosaic.woltje.com' http://127.0.0.1:7332/
|
||||
req c -H 'Host: mosaic.woltje.com' -H "X-Mosaic-Proof: $PROOF" http://127.0.0.1:7332/
|
||||
req d -H 'X-authentik-username: tester-probe' http://127.0.0.1:7332/
|
||||
req e -H 'x-mosaic-tester: 1' http://127.0.0.1:7332/
|
||||
req f -H 'X-authentik-username: tester-probe' http://127.0.0.1:7333/
|
||||
req g -H "X-Mosaic-Proof: $PROOF" http://127.0.0.1:7333/
|
||||
}
|
||||
|
||||
# The two tester reads on OLD, through OLD's tester-http.mjs on $DATA/console/tester.sock (7333 has no listener
|
||||
# since row 196; DEVIATIONS item 1 of the 86f95bb27 window), for W10's reads through NEW's to compare against.
|
||||
# OLD comes from vars.sh: 464010fbe, the live copy.
|
||||
# Same line shape as w10.sh: status, byte count and sha256 of the body, and for /api/config the whole body
|
||||
# (board, tester, send, edit). /api/bus/agents prints its top-level shape and the agent count only.
|
||||
tread() {
|
||||
local path="$1" out rc
|
||||
out=$(node $HOME/.local/share/mosaic-stack/copies/$OLD/packages/cli/src/tester-http.mjs GET "$path"); rc=$?
|
||||
printf '%s' "$out" | node -e '
|
||||
const r=JSON.parse(require("fs").readFileSync(0,"utf8")),s=r.text,h=require("crypto").createHash("sha256").update(s).digest("hex");
|
||||
const j=r.body,shape=Array.isArray(j)?`array(${j.length})`:j?`keys ${JSON.stringify(Object.keys(j))}`:"non-json";
|
||||
const list=j&&(Array.isArray(j)?j:Array.isArray(j.rows)?j.rows:null);
|
||||
console.log(`${process.argv[1]} ${r.status} ${Buffer.byteLength(s)} bytes sha256 ${h.slice(0,16)} ${shape}`+
|
||||
(process.argv[1]==="/api/config"?` body ${s.trim()}`:list?` agents ${list.length}`:""));' "$path" 2>&1
|
||||
echo "# exit $rc"
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
p4) p4 ;;
|
||||
p5) p5 && r301 "$HOME/.local/share/mosaic-stack/copies/$NEW" ;;
|
||||
r301) r301 "${2:-}" ;;
|
||||
p6) p6 ;;
|
||||
tester) echo "# P6 tester reads on OLD through the socket $(date -u +%FT%TZ)"; tread /api/config; tread /api/bus/agents ;;
|
||||
*) echo "usage: p456.sh p4|p5|p6|tester|r301 [COPY]" >&2; exit 2 ;;
|
||||
esac
|
||||
@@ -0,0 +1,13 @@
|
||||
# P5 2026-10-23T18:54:25Z; HEAD 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
# git diff --quiet 45dca69f6e4bce52834587f66f2ff33ba839ab8a HEAD -- scripts/stack-release.sh scripts/webui-service.sh scripts/bus-service.sh scripts/stack-copy.sh: exit 0
|
||||
# git status --porcelain (exit 0): []
|
||||
# scripts/stack-release.sh HEAD blob 2656f95b00e3f30755394ecc20f44ebae26573f9 NEW blob 2656f95b00e3f30755394ecc20f44ebae26573f9
|
||||
# scripts/webui-service.sh HEAD blob 1e4ca9681f4388cccf9964f8492de030209bbd2f NEW blob 1e4ca9681f4388cccf9964f8492de030209bbd2f
|
||||
# scripts/bus-service.sh HEAD blob 0b1d681f3515eceefea89d6b77e048c444e79a6e NEW blob 0b1d681f3515eceefea89d6b77e048c444e79a6e
|
||||
# scripts/stack-copy.sh HEAD blob 1b0d76daf1c59c1d875fc845bc24ddd0bd51131c NEW blob 1b0d76daf1c59c1d875fc845bc24ddd0bd51131c
|
||||
P5 PASS
|
||||
# row 301 channel-proof pin 2026-10-23T18:54:25Z
|
||||
59f0e44f4 ancestor of NEW: yes; 59f0e44f4 pinned 39fcb27c, 24672fd9d (row 252) re-pinned
|
||||
NEW channel-proof pin 604092cb706b152d458f299ff1071f6cd488774629012f96b672f7e9a16c0b2c; NEW packages/webui/src/bus.mjs sha256 604092cb706b152d458f299ff1071f6cd488774629012f96b672f7e9a16c0b2c
|
||||
copy /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a packages/webui/src/bus.mjs sha256 604092cb706b152d458f299ff1071f6cd488774629012f96b672f7e9a16c0b2c
|
||||
R301 PASS
|
||||
@@ -0,0 +1,13 @@
|
||||
login darkwing ok
|
||||
#1720 comment 31271 posted, read back equal 2026-10-23T19:02:00Z
|
||||
#1753 comment 31272 posted, read back equal 2026-10-23T19:02:01Z
|
||||
#1777 comment 31273 posted, read back equal 2026-10-23T19:02:02Z
|
||||
#1797 comment 31274 posted, read back equal 2026-10-23T19:02:02Z
|
||||
#1800 comment 31275 posted, read back equal 2026-10-23T19:02:03Z
|
||||
#1801 comment 31276 posted, read back equal 2026-10-23T19:02:04Z
|
||||
#1807 comment 31277 posted, read back equal 2026-10-23T19:02:04Z
|
||||
#1808 comment 31278 posted, read back equal 2026-10-23T19:02:05Z
|
||||
#1809 comment 31279 posted, read back equal 2026-10-23T19:02:06Z
|
||||
#1813 comment 31280 posted, read back equal 2026-10-23T19:02:06Z
|
||||
#1814 comment 31281 posted, read back equal 2026-10-23T19:02:07Z
|
||||
#1815 comment 31282 posted, read back equal 2026-10-23T19:02:08Z
|
||||
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate) W11: post comments.md's Gitea body on each issue named (the rows NEW
|
||||
# puts live, PLAN.md W11) as darkwing, and read each back. Stops at the first miss.
|
||||
# usage: post-gitea.sh N [N ...]
|
||||
set -uo pipefail
|
||||
REPO=/mnt/storage/src/mosaic-stack
|
||||
WIN=$REPO/agents/darkwing/work/window-repin-45dca69f6
|
||||
[ $# -ge 1 ] || { echo "usage: post-gitea.sh N [N ...]"; exit 2; }
|
||||
export MOSAIC_GITEA_CREDENTIAL_FILE=$HOME/.mosaic/fleet/agents/darkwing/secrets/gitea-mosaicstack-darkwing.token
|
||||
G=$REPO/scripts/gitea-api.sh
|
||||
$G GET user 2>/dev/null | grep -q '"login":"darkwing"' || { echo "STOP: login is not darkwing"; exit 1; }
|
||||
echo "login darkwing ok"
|
||||
for N in "$@"; do
|
||||
BODY=$(python3 -B -c '
|
||||
import re,sys
|
||||
s=open(sys.argv[1]).read()
|
||||
m=re.search(r"^## Gitea #"+sys.argv[2]+r" [^\n]*\n\n(.*?)(?=\n## |\Z)",s,re.S|re.M)
|
||||
print(m.group(1).strip().replace("\n"," "),end="")' $WIN/comments.md $N) || { echo "STOP: no body for #$N"; exit 1; }
|
||||
[ -n "$BODY" ] || { echo "STOP: empty body #$N"; exit 1; }
|
||||
J=$(node -e 'process.stdout.write(JSON.stringify({body:process.argv[1]}))' "$BODY")
|
||||
OUT=$($G POST repos/mosaicstack/stack/issues/$N/comments "$J" 2>&1) || { echo "STOP: POST #$N: $(echo "$OUT" | grep -oE 'HTTP [0-9]+')"; exit 1; }
|
||||
CID=$(echo "$OUT" | grep -oE '^\{"id":[0-9]+' | grep -oE '[0-9]+$')
|
||||
[ -n "$CID" ] || CID=$(echo "$OUT" | node -e 'let d="";process.stdin.on("data",c=>d+=c).on("end",()=>{const i=d.indexOf("{");process.stdout.write(String(JSON.parse(d.slice(i,d.lastIndexOf("}")+1)).id))})')
|
||||
BACK=$($G GET repos/mosaicstack/stack/issues/comments/$CID 2>/dev/null | node -e 'let d="";process.stdin.on("data",c=>d+=c).on("end",()=>process.stdout.write(JSON.parse(d).body))')
|
||||
[ "$BACK" = "$BODY" ] && echo "#$N comment $CID posted, read back equal $(date -u +%FT%TZ)" || { echo "STOP: #$N comment $CID read-back differs"; exit 1; }
|
||||
done
|
||||
@@ -0,0 +1,5 @@
|
||||
# P6 tester reads on OLD through the socket 2026-10-23T18:54:26Z
|
||||
/api/config 200 73 bytes sha256 e7ef9a40a725f356 keys ["board","tester","send","edit"] body {"board":"http://127.0.0.1:7331","tester":true,"send":false,"edit":false}
|
||||
# exit 0
|
||||
/api/bus/agents 200 709 bytes sha256 0da357205dd4903c keys ["rows","at"] agents 2
|
||||
# exit 0
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), the tester thread reads (PLAN.md W6: `threads --tester` and
|
||||
# `thread read --json --tester` on each existing thread). W1 takes them before W5 as the baseline, W6 again after,
|
||||
# and W6 compares. Both verbs only read: thread read pages thread.messages and writes no thread_opens row
|
||||
# (thread.mjs:146, broker.mjs thread.open is the only thread_opens writer). The bodies stay in $WIN/.tr/, which is
|
||||
# not committed; W.txt gets one line per thread: id, message count and the sha256 of the --json output.
|
||||
# usage: tr.sh W1|W6 prints the summary, exits 1 if a read fails
|
||||
set -uo pipefail
|
||||
WIN=/mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6
|
||||
MOSAIC=$HOME/.npm-global/bin/mosaic
|
||||
BZ=(--business mosaic-stack)
|
||||
P=${1:?usage: tr.sh W1|W6}
|
||||
D=$WIN/.tr/$P
|
||||
[ ! -e "$D" ] || { echo "STOP $D exists"; exit 1; }
|
||||
( umask 077; mkdir -p "$D" ) || exit 1
|
||||
E=(env -i HOME="$HOME" PATH="$HOME/.local/bin:/usr/local/bin:/usr/bin:/bin" LANG=C.UTF-8
|
||||
XDG_RUNTIME_DIR="$XDG_RUNTIME_DIR" DBUS_SESSION_BUS_ADDRESS="${DBUS_SESSION_BUS_ADDRESS:-unix:path=$XDG_RUNTIME_DIR/bus}")
|
||||
cd /mnt/storage/src/mosaic-stack || exit 1
|
||||
"${E[@]}" $MOSAIC threads "${BZ[@]}" --json --tester > "$D/threads.json" 2> "$D/threads.err" || { echo "STOP threads --json --tester: $(head -3 "$D/threads.err")"; exit 1; }
|
||||
ids=$(node -e 'for (const t of JSON.parse(require("fs").readFileSync(process.argv[1],"utf8"))) console.log(t.id)' "$D/threads.json") || { echo "STOP threads.json unreadable"; exit 1; }
|
||||
echo "$P threads --tester: $(grep -c . <<< "$ids") thread(s), threads.json sha256 $(sha256sum < "$D/threads.json" | cut -c1-16)"
|
||||
rc=0
|
||||
for id in $ids; do
|
||||
if "${E[@]}" $MOSAIC thread read "$id" "${BZ[@]}" --json --tester > "$D/$id.json" 2> "$D/$id.err"; then
|
||||
n=$(node -e 'console.log(JSON.parse(require("fs").readFileSync(process.argv[1],"utf8")).length)' "$D/$id.json")
|
||||
echo "$P thread $id messages $n sha256 $(sha256sum < "$D/$id.json" | cut -c1-16)"
|
||||
else
|
||||
echo "$P thread $id READ FAILED: $(head -3 "$D/$id.err")"; rc=1
|
||||
fi
|
||||
done
|
||||
exit $rc
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), the names every step script sources (PLAN.md "Names").
|
||||
# NEW and the plan sha come from the files P0 writes ($WIN/NEW, $WIN/PLAN.sha256); a missing or malformed one stops.
|
||||
REPO=/mnt/storage/src/mosaic-stack
|
||||
WIN=$REPO/agents/darkwing/work/window-repin-45dca69f6
|
||||
OLD=464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
TARGET=45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
TOOL_BLOB=2656f95b00e3f30755394ecc20f44ebae26573f9
|
||||
DATA=$HOME/.mosaic-dev
|
||||
PLAN=$WIN/PLAN.md
|
||||
MOSAIC=$HOME/.npm-global/bin/mosaic
|
||||
FOUR=(scripts/stack-release.sh scripts/webui-service.sh scripts/bus-service.sh scripts/stack-copy.sh)
|
||||
# The standing launches on OLD: the chief from OLD's activation and the pm the last window's W9b left live.
|
||||
CHIEF_RUN=r28dbbc5c6b4d
|
||||
PM_RUN=ra38826f3c6e2
|
||||
NEW=$(cat $WIN/NEW 2>/dev/null)
|
||||
[[ "$NEW" =~ ^[0-9a-f]{40}$ ]] || { echo "STOP: $WIN/NEW is not a full sha (P0 writes it)"; exit 1; }
|
||||
[ "$NEW" = "$TARGET" ] || { echo "STOP: $WIN/NEW is not the target $TARGET"; exit 1; }
|
||||
PLAN_SHA=$(cat $WIN/PLAN.sha256 2>/dev/null)
|
||||
[[ "$PLAN_SHA" =~ ^[0-9a-f]{64}$ ]] || { echo "STOP: $WIN/PLAN.sha256 is not a sha256 (P0 writes it)"; exit 1; }
|
||||
sha() { sha256sum < "$1" | cut -c1-64; }
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate) step wrapper (sage-3135): w.sh FILE TITLE CMD... runs CMD in REPO under a clean env (no ANTHROPIC_*, CLAUDE_*,
|
||||
# MOSAIC_* or pi variables), appends the title, command, output, exit code and date -u stamps to window/FILE,
|
||||
# prints the output, and exits with CMD's exit code.
|
||||
set -uo pipefail
|
||||
W=/mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6
|
||||
f="$W/$1"; title="$2"; shift 2
|
||||
E=(env -i HOME="$HOME" PATH="$HOME/.local/bin:/usr/local/bin:/usr/bin:/bin" LANG=C.UTF-8
|
||||
XDG_RUNTIME_DIR="$XDG_RUNTIME_DIR" DBUS_SESSION_BUS_ADDRESS="${DBUS_SESSION_BUS_ADDRESS:-unix:path=$XDG_RUNTIME_DIR/bus}")
|
||||
t0=$(date -u +%FT%T.%3NZ)
|
||||
{ echo; echo "## $title"; echo "# start $t0"; echo "# command: (cd \$REPO && <clean env> $*)"; } >> "$f"
|
||||
out=$(cd /mnt/storage/src/mosaic-stack && "${E[@]}" "$@" 2>&1); rc=$?
|
||||
printf '%s\n' "$out" >> "$f"
|
||||
echo "# exit $rc, end $(date -u +%FT%T.%3NZ)" >> "$f"
|
||||
printf '%s\n# exit %s\n' "$out" "$rc"
|
||||
exit $rc
|
||||
@@ -0,0 +1,9 @@
|
||||
npm warn deprecated [email protected]: Use your platform's native DOMException instead
|
||||
|
||||
added 128 packages in 2s
|
||||
npm warn install-scripts 3 packages had install scripts blocked because they are not covered by allowScripts:
|
||||
npm warn install-scripts @google/[email protected] (preinstall: echo 'preinstall: no-op')
|
||||
npm warn install-scripts [email protected] (postinstall: node install.js)
|
||||
npm warn install-scripts [email protected] (postinstall: node scripts/postinstall)
|
||||
npm warn install-scripts
|
||||
npm warn install-scripts Run `npm install-scripts ls` to review, or `npm install-scripts approve <pkg>` to allow.
|
||||
@@ -0,0 +1 @@
|
||||
copied: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), W0 (PLAN.md W0 row): make NEW's copy, then check it, as
|
||||
# window-migrate-3n/w0.sh: NEW's own loader validates the live system config, stdout discarded as config_checks
|
||||
# does. Added (mos-1487 D1): c11.sh W0 counts user threads again, and a count other than 0 stops to Mos.
|
||||
# Creates files under copies/ only; nothing live changes. Launch from /.
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
C=$HOME/.local/share/mosaic-stack/copies/$NEW
|
||||
BC=$REPO/agents/sage/work/window-plan/repin-de352dfaf/business-check.mjs
|
||||
fail=0
|
||||
echo "start $(date -u +%FT%TZ)"
|
||||
[ ! -e "$C" ] || { echo "STOP copy $C already exists"; exit 8; }
|
||||
(cd "$REPO" && scripts/stack-copy.sh copy $NEW) > $WIN/w0-copy.out 2> $WIN/w0-copy.err; rc=$?
|
||||
echo "stack-copy rc=$rc"; cat $WIN/w0-copy.out; cat $WIN/w0-copy.err
|
||||
[ "$rc" = 0 ] || { echo "STOP stack-copy failed"; exit 1; }
|
||||
d=$(diff <(git -C "$REPO" show $NEW:package-lock.json) "$C/package-lock.json") && echo "LOCK_MATCH (package-lock diff empty)" || { echo "LOCK_DIFF"; printf '%s\n' "$d" | sed -n 1,20p; fail=1; }
|
||||
[ -d "$C/packages/processing-control" ] && echo "processing-control present: $(ls "$C/packages/processing-control" | tr '\n' ' ')" || { echo "processing-control MISSING"; fail=1; }
|
||||
[ -d "$C/tools/unslop-hook" ] && echo "unslop-hook present: $(ls "$C/tools/unslop-hook" | tr '\n' ' ')" || { echo "unslop-hook MISSING"; fail=1; }
|
||||
want=$(git -C "$REPO" ls-tree $NEW packages/library/bin/askpass | awk '{print $1}')
|
||||
have=$(stat -c %a "$C/packages/library/bin/askpass" 2>&1)
|
||||
echo "askpass tree mode $want, copy mode $have"
|
||||
case "$want:$have" in 100755:[57][0-7][0-7]|100644:[46][0-7][0-7]) echo "ASKPASS_MODE_OK";; *) echo "ASKPASS_MODE_BAD"; fail=1;; esac
|
||||
[ -x "$C/packages/library/bin/askpass" ] && echo "askpass executable bit set" || echo "askpass executable bit not set"
|
||||
(cd "$C" && node -e 'import("oauth4webapi").then(()=>{console.log("oauth4webapi "+require("./node_modules/oauth4webapi/package.json").version);console.log("IMPORT_OK")},(e)=>{console.log("IMPORT_FAIL "+e.message);process.exit(1)})') || fail=1
|
||||
du -sh "$C"; df -h /home | tail -1
|
||||
node $BC $NEW || fail=1
|
||||
v=$(cd "$C" && node scripts/mosaic-config.mjs validate 2>&1 >/dev/null); x=$?
|
||||
[ $x = 0 ] && echo "NEW_LOADER_OK (scripts/mosaic-config.mjs validate on the live config, exit 0)" || { echo "NEW_LOADER_FAIL exit $x: $(head -1 <<< "$v")"; fail=1; }
|
||||
bash $WIN/c11.sh W0 || { echo "STOP W0 condition 11: user threads not 0 (mos-1487 D1; to Mos)"; exit 11; }
|
||||
echo "end $(date -u +%FT%TZ) fail=$fail"
|
||||
exit $fail
|
||||
@@ -0,0 +1,29 @@
|
||||
start 2026-10-23T18:53:36Z
|
||||
stack-copy rc=0
|
||||
copied: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
npm warn deprecated [email protected]: Use your platform's native DOMException instead
|
||||
|
||||
added 128 packages in 2s
|
||||
npm warn install-scripts 3 packages had install scripts blocked because they are not covered by allowScripts:
|
||||
npm warn install-scripts @google/[email protected] (preinstall: echo 'preinstall: no-op')
|
||||
npm warn install-scripts [email protected] (postinstall: node install.js)
|
||||
npm warn install-scripts [email protected] (postinstall: node scripts/postinstall)
|
||||
npm warn install-scripts
|
||||
npm warn install-scripts Run `npm install-scripts ls` to review, or `npm install-scripts approve <pkg>` to allow.
|
||||
LOCK_MATCH (package-lock diff empty)
|
||||
processing-control present: package.json README.md src tests
|
||||
unslop-hook present: claude-hook.js extension.ts lists.json README.md test-unslop-check.js unslop-check.js
|
||||
askpass tree mode 100755, copy mode 555
|
||||
ASKPASS_MODE_OK
|
||||
askpass executable bit set
|
||||
oauth4webapi 3.8.8
|
||||
IMPORT_OK
|
||||
164M /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
/dev/nvme1n1p5 458G 403G 32G 93% /home
|
||||
copy 45dca69f6: roles 6, projects 1, arbiters 2
|
||||
HOLDS chief instance.name yes
|
||||
HOLDS pm instance.name no
|
||||
LOAD_OK
|
||||
NEW_LOADER_OK (scripts/mosaic-config.mjs validate on the live config, exit 0)
|
||||
W0 c11 2026-10-23T18:53:38.846Z threads 5 owners tester=5 user_threads 0 revoke_claims 0 session_ops 0 message_cancels 0 access.json absent (exit 0)
|
||||
end 2026-10-23T18:53:38Z fail=0
|
||||
@@ -0,0 +1,18 @@
|
||||
# W10 start 2026-10-23T19:00:03Z, TMPDIR /mnt/storage/scratch/tmp/gSoOdHP
|
||||
|
||||
## W10 matrix-new.txt vs matrix-old.txt (header lines differ by stamp)
|
||||
(diff exit 0)
|
||||
# matrix: a-g unchanged expected: FAIL=0
|
||||
# listeners on 7333: 0
|
||||
/api/config 200 88 bytes sha256 c8b277e5aca5aa2f keys ["board","tester","send","decide","edit"] body {"board":"http://127.0.0.1:7331","tester":true,"send":false,"decide":false,"edit":false} (exit 0)
|
||||
/api/bus/agents 200 320 bytes sha256 97a587592a6b22d7 keys ["rows","at"] agents 1 (exit 0)
|
||||
# tester /api/bus/agents 200, agents 1 (P6: agents 2; the hash moves with the at field)
|
||||
# tester /api/config expected: 200 {"board":"http://127.0.0.1:7331","tester":true,"send":false,"decide":false,"edit":false}
|
||||
# tester /api/config body is P6's plus "decide":false
|
||||
P4 PASS: one R: spec R:0.0.0.0:7332:127.0.0.1:7332, DropInPaths empty
|
||||
POST /api/seen 401 error="sign-in required"
|
||||
POST /api/reply 401 error="sign-in required"
|
||||
POST /api/processing 401 error="sign-in required"
|
||||
tester POST /api/processing 403 error="read-only" sent=false (exit 2)
|
||||
# W10 end 2026-10-23T19:00:04Z FAIL=0
|
||||
W10_PASS
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), W10 (PLAN.md W10 row), from window-migrate-0cbe2e9b3/w10.sh: the 7332 matrix again as matrix-new.txt against
|
||||
# P6's matrix-old.txt, the two tester reads through NEW's tester-http.mjs against P6's tester-old.txt, no listener
|
||||
# on 7333, P4 again, and the unsigned-write refusal baseline (mos-1195): Console POSTs through the main port with
|
||||
# no session must be refused, /api/processing included. Then POST /api/processing through the tester socket must be
|
||||
# refused 403 read-only (PLAN.md W10): without a session the main port answers 401 before the processing route
|
||||
# runs, so the socket is the path that reaches the read-only refusal. Reads only, apart from the refused POSTs.
|
||||
# Runs after w9.sh. The agents count is compared with the one P6 read into tester-old.txt, not a fixed number
|
||||
# (mos-1344: the old text said "P6: agents 1" where P6 had read 2). /api/config: NEW's serve.mjs:839 adds
|
||||
# "decide" (false for the tester; "user" and "federation" only when granted or a hub is set, neither here), so the
|
||||
# expected body is P6's with "send":false,"edit":false turned into "send":false,"decide":false,"edit":false. Only the
|
||||
# status and body are compared; the byte count and sha move with the body.
|
||||
# usage: w10.sh
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
C=$HOME/.local/share/mosaic-stack/copies/$NEW
|
||||
W=$WIN/W.txt
|
||||
export TMPDIR=$(mktemp -d /mnt/storage/scratch/tmp/gXXXXXX)
|
||||
note() { echo "# $*" >> "$W"; echo "# $*"; }
|
||||
stop() { note "STOP: $*"; exit 1; }
|
||||
FAIL=0
|
||||
|
||||
note "W10 start $(date -u +%FT%TZ), TMPDIR $TMPDIR"
|
||||
{ echo "# W10 matrix $(date -u +%FT%TZ)"; bash $WIN/p456.sh p6; } > $WIN/matrix-new.txt
|
||||
{ echo; echo "## W10 matrix-new.txt vs matrix-old.txt (header lines differ by stamp)"; diff <(grep -v '^#' $WIN/matrix-old.txt) <(grep -v '^#' $WIN/matrix-new.txt); echo "(diff exit $?)"; } | tee -a "$W"
|
||||
# Expected: a-g all unchanged. OLD already had the socket, so f and g were 000 at P6 too; no line is named.
|
||||
for l in a b c d e f g; do
|
||||
[ "$(grep "^$l " $WIN/matrix-old.txt)" = "$(grep "^$l " $WIN/matrix-new.txt)" ] || { note "matrix line $l changed"; FAIL=1; }
|
||||
done
|
||||
note "matrix: a-g unchanged expected: FAIL=$FAIL"
|
||||
|
||||
L=$(ss -ltnH 'sport = :7333' | grep -c .)
|
||||
{ echo; echo "## W10 listeners on :7333"; ss -ltnH 'sport = :7333'; echo "count $L"; } >> "$W"
|
||||
note "listeners on 7333: $L"
|
||||
[ "$L" = 0 ] || FAIL=1
|
||||
|
||||
{ echo; echo "## W10 tester reads through $C/packages/cli/src/tester-http.mjs"; } >> "$W"
|
||||
for p in /api/config /api/bus/agents; do
|
||||
out=$(node $C/packages/cli/src/tester-http.mjs GET $p); rc=$?
|
||||
# Same line shape as p456.sh tread (tester-old.txt), computed over the response text.
|
||||
line=$(printf '%s' "$out" | node -e '
|
||||
const r=JSON.parse(require("fs").readFileSync(0,"utf8")),s=r.text,h=require("crypto").createHash("sha256").update(s).digest("hex");
|
||||
const j=r.body,shape=Array.isArray(j)?`array(${j.length})`:j?`keys ${JSON.stringify(Object.keys(j))}`:"non-json";
|
||||
const list=j&&(Array.isArray(j)?j:Array.isArray(j.rows)?j.rows:null);
|
||||
console.log(`${process.argv[1]} ${r.status} ${Buffer.byteLength(s)} bytes sha256 ${h.slice(0,16)} ${shape}`+
|
||||
(process.argv[1]==="/api/config"?` body ${s.trim()}`:list?` agents ${list.length}`:""));' $p 2>&1)
|
||||
echo "$line (exit $rc)" | tee -a "$W"
|
||||
[ $rc = 0 ] || FAIL=1
|
||||
done
|
||||
NEWCFG=$(grep '^/api/config' "$W" | tail -1 | sed 's/ (exit .*//')
|
||||
OLDCFG=$(grep '^/api/config 200 ' $WIN/tester-old.txt)
|
||||
NEWAG=$(grep '^/api/bus/agents' "$W" | tail -1)
|
||||
OLDAG=$(grep '^/api/bus/agents 200 ' $WIN/tester-old.txt | sed -n 's/.* agents \([0-9]*\).*/\1/p')
|
||||
case "$NEWAG" in "/api/bus/agents 200 "*) note "tester /api/bus/agents 200, $(sed -n 's/.* agents \([0-9]*\).*/agents \1/p' <<< "$NEWAG") (P6: agents ${OLDAG:-unread}; the hash moves with the at field)" ;; *) note "tester /api/bus/agents is not 200"; FAIL=1 ;; esac
|
||||
NEWBODY=$(sed -n 's/^\/api\/config \([0-9]*\) .* body \(.*\)$/\1 \2/p' <<< "$NEWCFG")
|
||||
WANTBODY=$(sed -n 's/^\/api\/config \([0-9]*\) .* body \(.*\)$/\1 \2/p' <<< "$OLDCFG" | sed 's/"send":false,"edit":false/"send":false,"decide":false,"edit":false/')
|
||||
note "tester /api/config expected: $WANTBODY"
|
||||
[ -n "$WANTBODY" ] && [ "$WANTBODY" != "$(sed -n 's/^\/api\/config \([0-9]*\) .* body \(.*\)$/\1 \2/p' <<< "$OLDCFG")" ] || { note "tester-old.txt /api/config body has no \"send\":false,\"edit\":false to turn"; FAIL=1; }
|
||||
[ "$NEWBODY" = "$WANTBODY" ] && note "tester /api/config body is P6's plus \"decide\":false" || { note "tester /api/config body differs from the expected one"; FAIL=1; }
|
||||
|
||||
P4=$(bash $WIN/p456.sh p4); rc=$?
|
||||
{ echo; echo "## W10 P4 again"; echo "$P4"; echo "(p4 exit $rc)"; } >> "$W"
|
||||
echo "$P4" | tail -1
|
||||
[ $rc = 0 ] || FAIL=1
|
||||
|
||||
{ echo; echo "## W10 unsigned writes through the main port (no session, no proxy header; must be refused)"; } >> "$W"
|
||||
for p in /api/seen /api/reply /api/processing; do
|
||||
code=$(curl -s -m 10 -o $TMPDIR/body -w '%{http_code}' -X POST -H 'Host: mosaic.woltje.com' -H 'Content-Type: application/json' --data '{}' http://127.0.0.1:7332$p)
|
||||
err=$(node -e 'try{const j=JSON.parse(require("fs").readFileSync(process.argv[1],"utf8"));console.log("error="+JSON.stringify(j.error))}catch{console.log("non-json")}' $TMPDIR/body)
|
||||
echo "POST $p $code $err" | tee -a "$W"
|
||||
case $code in 401|403) ;; *) FAIL=1 ;; esac
|
||||
done
|
||||
out=$(echo '{}' | node $C/packages/cli/src/tester-http.mjs POST /api/processing); rc=$?
|
||||
line=$(printf '%s' "$out" | node -e '
|
||||
try{const r=JSON.parse(require("fs").readFileSync(0,"utf8"));console.log(`${r.status} error=${JSON.stringify(r.body?.error)} sent=${JSON.stringify(r.body?.sent)}`)}catch{console.log("unreadable")}')
|
||||
echo "tester POST /api/processing $line (exit $rc)" | tee -a "$W"
|
||||
case "$line" in '403 error="read-only" '*) ;; *) FAIL=1 ;; esac
|
||||
rm -rf "$TMPDIR"
|
||||
note "W10 end $(date -u +%FT%TZ) FAIL=$FAIL"
|
||||
[ $FAIL = 0 ] && echo W10_PASS || echo W10_CHECK
|
||||
@@ -0,0 +1,16 @@
|
||||
# W5 go mos-1493, start 2026-10-23T18:59:11Z
|
||||
# condition 3 recheck: tool blob 2656f95b00e3, plan 0c932a4c, four scripts clean, pointer on OLD, P2 stubs and units PASS
|
||||
stack-release: interpreter: {"path":"/usr/bin/python3.14","version":[3,14,6],"dev":66308,"ino":3968163,"sha256":"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc"}
|
||||
stack-release: captured the rollback set: /home/jwoltje/.mosaic-dev/state/stack-rollback/20261023T185911Z-45dca69f6e4b
|
||||
stack-release: stopped both units
|
||||
stack-release: stopped store schema: 3n
|
||||
stack-release: backup: /home/jwoltje/.mosaic-dev/backups/stack/20261023T185911Z-45dca69f6e4b
|
||||
stack-release: installed 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
stack-release: gate passed on 45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
stack-release: activate ok: 45dca69f6e4bce52834587f66f2ff33ba839ab8a is live for mosaic-stack
|
||||
# exit 0
|
||||
# W5 exit 0, W5.start 2026-10-23T18:59:11Z, end 2026-10-23T18:59:17Z
|
||||
# W5: activation 20261023T185911Z-45dca69f6e4b, backup /home/jwoltje/.mosaic-dev/backups/stack/20261023T185911Z-45dca69f6e4b, STAMP 2026-10-23T18:59:11.913Z, SCHEMA 3n, SHA256SUMS sha256 87bd93819db5f38b579d1c616b1c80ca69d4abcba690b8e43a368b682e573a50 (sums check OK)
|
||||
# W5 launched lines in the bus journal since W5.start: 1: launched chief: run re194575ec18c, claude-code claude-opus-5-5
|
||||
# W5 status: pointer NEW, pm true, 3n, check pass, unit flags match. W5_PASS 2026-10-23T18:59:17Z
|
||||
# W5 rollback plan exit 0: to: 464010fbe4c6925b077b9b8182a209ee2177eb9d store schema: 3n (read from the store the running bus holds) target schema: 3n migration: none; the store is at the target's version
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), W5 (PLAN.md W5 row; window-migrate-3n/w5.sh without the
|
||||
# migration). Runs only on Mos's W5 go and Sage's CLEAR, after P2 passed. Rechecks the tool blob and the plan sha
|
||||
# first; if either moved, stop (W3 runs again and goes to Mos). Then W3's command without --plan through w.sh into
|
||||
# W5.txt. Needs exit 0, "activate ok", "gate passed" (the gate's last check is pm-launch-unconfirmed, so a pass
|
||||
# covers pm_launched), "stopped store schema: 3n" and no "migrated the store" line. Every activate backs up the
|
||||
# stopped store (stack-release.sh:1485 at NEW), so the activation id, backup path, STAMP and the backup's
|
||||
# SHA256SUMS sha256 are recorded as before, with SCHEMA 3n. Then status (schema 3n) and the bus journal's
|
||||
# launched lines. With no schema change a rollback is a pointer flip to OLD (`rollback mosaic-stack --plan`, read
|
||||
# only here, recorded). A failure stops here and goes to Mos before any rollback.
|
||||
# usage: w5.sh GO (GO is Mos's W5 go label, e.g. mos-NNNN)
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
W=$WIN/W.txt
|
||||
note() { echo "# $*" >> "$W"; echo "# $*"; }
|
||||
stop() { note "STOP: $*"; exit 1; }
|
||||
|
||||
GO=${1:?usage: w5.sh GO}
|
||||
note "W5 go $GO, start $(date -u +%FT%TZ)"
|
||||
grep -q P2_STUBS_PASS $WIN/p2.txt 2>/dev/null || stop "p2.txt has no P2_STUBS_PASS"
|
||||
grep -q P2_UNITS_PASS $WIN/p2-units.txt 2>/dev/null || stop "p2-units.txt has no P2_UNITS_PASS"
|
||||
grep -q 'W5 pre-read PASS' $W || stop "W.txt has no W5 pre-read PASS (w5pre.sh)"
|
||||
[ "$(git -C $REPO rev-parse HEAD:scripts/stack-release.sh)" = "$TOOL_BLOB" ] || stop "condition 3: tool blob moved; run W3 again and send it to Mos"
|
||||
[ "$(sha $PLAN)" = "$PLAN_SHA" ] || stop "condition 3: plan is not P0's ${PLAN_SHA:0:8}; run W3 again and send it to Mos"
|
||||
[ -z "$(git -C $REPO status --porcelain -- "${FOUR[@]}")" ] || stop "the four scripts are dirty"
|
||||
grep -q "\"copy\":\"$OLD\"" $DATA/state/stack-active.json || stop "the pointer is not on OLD"
|
||||
note "condition 3 recheck: tool blob ${TOOL_BLOB:0:12}, plan ${PLAN_SHA:0:8}, four scripts clean, pointer on OLD, P2 stubs and units PASS"
|
||||
|
||||
date -u +%FT%TZ > $WIN/W5.start
|
||||
$WIN/w.sh W5.txt "W5 activate NEW --pm --tester-socket ($GO)" scripts/stack-release.sh activate $NEW mosaic-stack --pm --tester-socket; rc=$?
|
||||
note "W5 exit $rc, W5.start $(cat $WIN/W5.start), end $(date -u +%FT%TZ)"
|
||||
[ $rc = 0 ] || stop "W5 exit $rc; to Mos before any rollback"
|
||||
grep -q "activate ok: $NEW is live for mosaic-stack" $WIN/W5.txt || stop "W5: no activate ok line"
|
||||
grep -q "gate passed on $NEW" $WIN/W5.txt || stop "W5: no gate passed line"
|
||||
grep -qx "stack-release: stopped store schema: 3n" $WIN/W5.txt || stop "W5: no stopped store schema: 3n line"
|
||||
grep -q "migrated the store" $WIN/W5.txt && stop "W5: a migrated the store line in a no-migrate window"
|
||||
grep -q -- 'drop --' $WIN/W5.txt && stop "W5: a drop line"
|
||||
|
||||
ACT=$(sed -n 's/.*"activation":"\([^"]*\)".*/\1/p' $DATA/state/stack-active.json)
|
||||
BK=$(sed -n 's/^stack-release: backup: //p' $WIN/W5.txt)
|
||||
[ -n "$ACT" ] && [ "$BK" = "$DATA/backups/stack/$ACT" ] || stop "W5: activation $ACT and backup $BK disagree"
|
||||
[ "$(cat $BK/SCHEMA)" = 3n ] || stop "W5 backup SCHEMA is not 3n"
|
||||
( cd "$BK/bus" && sha256sum -c --quiet ../SHA256SUMS ) || stop "W5 backup fails its SHA256SUMS"
|
||||
echo "W5 $(date -u +%FT%TZ) activation $ACT backup $BK STAMP $(cat $BK/STAMP) SCHEMA $(cat $BK/SCHEMA) SHA256SUMS sha256 $(sha $BK/SHA256SUMS)" >> $WIN/backups.txt
|
||||
note "W5: activation $ACT, backup $BK, STAMP $(cat $BK/STAMP), SCHEMA $(cat $BK/SCHEMA), SHA256SUMS sha256 $(sha $BK/SHA256SUMS) (sums check OK)"
|
||||
|
||||
journalctl --user -u [email protected] --since "@$(date -d "$(cat $WIN/W5.start)" +%s)" -o cat 2>/dev/null | grep '^launched ' > $WIN/W5-launched.txt
|
||||
note "W5 launched lines in the bus journal since W5.start: $(wc -l < $WIN/W5-launched.txt): $(cat $WIN/W5-launched.txt)"
|
||||
|
||||
$WIN/w.sh W.txt "W5 status" scripts/stack-release.sh status mosaic-stack > $WIN/W5-status.txt || stop "W5 status"
|
||||
sed -i '$d' $WIN/W5-status.txt
|
||||
grep -q "\"copy\":\"$NEW\"" $WIN/W5-status.txt || stop "status: pointer is not NEW"
|
||||
grep -q '"pm":true' $WIN/W5-status.txt && grep -q '"schema":"3n"' $WIN/W5-status.txt || stop "status: pm or schema"
|
||||
grep -qx ' result: pass' $WIN/W5-status.txt && grep -qx 'unit flags: match the pointer' $WIN/W5-status.txt || stop "status: check or unit flags"
|
||||
note "W5 status: pointer NEW, pm true, 3n, check pass, unit flags match. W5_PASS $(date -u +%FT%TZ)"
|
||||
|
||||
# The rollback a failure after W5 would take: a pointer flip to OLD, the same schema. Read only.
|
||||
$WIN/w.sh W.txt "W5 rollback --plan (read only)" scripts/stack-release.sh rollback mosaic-stack --plan > $WIN/W5-rollback-plan.txt; rrc=$?
|
||||
sed -i '$d' $WIN/W5-rollback-plan.txt
|
||||
note "W5 rollback plan exit $rrc: $(grep '^to: \|^migration\|^restore: \|^store schema\|^target schema' $WIN/W5-rollback-plan.txt | tr '\n' ' ')"
|
||||
@@ -0,0 +1,2 @@
|
||||
# W5 pre-read start 2026-10-23T18:59:10Z
|
||||
# W5 pre-read PASS 2026-10-23T18:59:11Z: chief r28dbbc5c6b4d standing, not working; pm ra38826f3c6e2 listed, not working; no other launch
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), the read right before W5 (as mos-1342 condition 1): agents --tester
|
||||
# and launches list again, with W1's rule. Stops on the chief working, the pm working, or any live launch other
|
||||
# than the standing chief r28dbbc5c6b4d and the pm ra38826f3c6e2 (vars.sh). Starts and stops nothing.
|
||||
# usage: w5pre.sh
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
W=$WIN/W.txt
|
||||
note() { echo "# $*" >> "$W"; echo "# $*"; }
|
||||
stop() { note "STOP: $*"; exit 1; }
|
||||
|
||||
note "W5 pre-read start $(date -u +%FT%TZ)"
|
||||
$WIN/w.sh W.txt "W5 pre agents --tester" $MOSAIC agents --business mosaic-stack --tester > $WIN/.w5pre-agents.txt || stop "W5 pre agents"
|
||||
grep -E '(^|[[:space:]])chief[[:space:]].*working' $WIN/.w5pre-agents.txt && stop "W5 pre: the chief is working (mos-1340 item 2)"
|
||||
grep -E '(^|[[:space:]])pm[[:space:]].*working' $WIN/.w5pre-agents.txt && stop "W5 pre: the pm is working (mos-1340 item 3)"
|
||||
$WIN/w.sh W.txt "W5 pre launches list" $MOSAIC launches list > $WIN/.w5pre-launches.txt || stop "W5 pre launches list"
|
||||
other=$(grep -v '^# ' $WIN/.w5pre-launches.txt | grep -v -e "^$CHIEF_RUN " -e "^$PM_RUN " | grep .)
|
||||
[ -z "$other" ] || stop "W5 pre: a live launch other than the standing chief $CHIEF_RUN and pm $PM_RUN (mos-1340 item 1): $other"
|
||||
grep -q "^$CHIEF_RUN mosaic-stack/chief " $WIN/.w5pre-launches.txt || stop "W5 pre: the standing chief launch $CHIEF_RUN is not listed"
|
||||
note "W5 pre-read PASS $(date -u +%FT%TZ): chief $CHIEF_RUN standing, not working; pm $PM_RUN $(grep -q "^$PM_RUN mosaic-stack/pm " $WIN/.w5pre-launches.txt && echo 'listed, not working' || echo 'not listed'); no other launch"
|
||||
@@ -0,0 +1,22 @@
|
||||
# W6 start 2026-10-23T18:59:23Z
|
||||
# W6 status: "copy":"45dca69f6e4bce52834587f66f2ff33ba839ab8a" "pm":true "schema":"3n"
|
||||
types table=26 trigger=97 view=5 index=28
|
||||
schema_version 3n
|
||||
missing none
|
||||
session_table_rows session_ops=0 message_cancels=0 W1 session_ops=0 message_cancels=0 thread_shares 0
|
||||
events 2313 maxSeq 2313
|
||||
COUNTS_OK
|
||||
# W6 agents: chief re194575ec18c claude-code since 2026-10-23T18:59:15.964Z;
|
||||
W6 threads --tester: 5 thread(s), threads.json sha256 07c154d75d929028
|
||||
W6 thread d0ba7a66-aa3f-4918-9518-94132bce6b28 messages 2 sha256 985ac61ca9220f2f
|
||||
W6 thread 446201de-e8b5-4df3-9356-d0d5422cc899 messages 2 sha256 7e7e9eeeaa8c1e09
|
||||
W6 thread b89fcca4-6b82-48bd-9310-fb82c5ae8518 messages 2 sha256 f4e4916b9656a403
|
||||
W6 thread d9bb7ff3-7a8b-4bb8-ba12-03ca094cee4e messages 2 sha256 728ff36f3e003c63
|
||||
W6 thread b85a57fe-84f9-4785-a596-135af39e334a messages 2 sha256 727de0d9c809a41a
|
||||
# W6 thread reads match W1: 5 threads, same ids, message counts and sha256
|
||||
W6 c11 2026-10-23T18:59:28.117Z threads 5 owners tester=5 user_threads 0 revoke_claims 0 session_ops 0 message_cancels 0 access.json absent (exit 0)
|
||||
# W6 D2: thread_claims op=revoke 0, W1 0
|
||||
# W6 D2: launch log thread-revoked events since W5.start 2026-10-23T18:59:11Z: 0 (file lines 143)
|
||||
# W6 D2: bus journal lines naming thread-revoked since 2026-10-23 18:59:11 UTC: 0 (count only)
|
||||
# W6 bus-host/sessions.json: sessionsVersion and session count: 2 1; mtime 2026-10-23T18:59:15Z
|
||||
# W6_PASS 2026-10-23T18:59:28Z
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), W6 (PLAN.md W6 row; window-migrate-3n/w6.sh without the
|
||||
# migration; mos-1342 condition 3 lets it run straight after a W5 pass). Everything here only reads:
|
||||
# status shows the pointer on NEW at 3n
|
||||
# a python3 -B read-only count of the live store: still 26 tables, 97 triggers, 5 views, 28 indexes and meta
|
||||
# schema_version 3n (no schema change OLD to NEW), every 3n object by name, and session_ops and
|
||||
# message_cancels at no fewer rows than c11.sh read at W1 (both are append-only; their triggers refuse delete)
|
||||
# agents --tester answers
|
||||
# tr.sh W6 against W1: the same thread ids, message counts and sha256 of each thread read --json
|
||||
# mos-1487 D2, row 295's revocation: the 5 tester threads still read (tr.sh above); c11.sh W6 reads 0 user:
|
||||
# threads and the same thread_claims op='revoke' count as W1; the launch log
|
||||
# ($DATA/launches/mosaic-stack.jsonl) has 0 "thread-revoked" events at or after W5.start; the bus journal since
|
||||
# W5.start has 0 lines naming thread-revoked (count only). A D2 failure is a stop to Mos, with the pointer
|
||||
# rollback to OLD per the PLAN (Mos first).
|
||||
# bus-host/sessions.json sessionsVersion 2 (it was 2 before the window; session.mjs is the same OLD to NEW);
|
||||
# only the version and the count
|
||||
# Since nothing changes, every check runs and the script lists each FAIL, then exits 1 if any failed. A failure
|
||||
# goes to Mos; nothing restores from here.
|
||||
# usage: w6.sh
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
W=$WIN/W.txt
|
||||
note() { echo "# $*" >> "$W"; echo "# $*"; }
|
||||
fails=0
|
||||
fail() { note "W6 FAIL: $*"; fails=$((fails + 1)); }
|
||||
|
||||
note "W6 start $(date -u +%FT%TZ)"
|
||||
grep -q 'W5_PASS' $W || { note "STOP: W.txt has no W5_PASS"; exit 1; }
|
||||
|
||||
$WIN/w.sh W.txt "W6 status" scripts/stack-release.sh status mosaic-stack > $WIN/W6-status.txt || fail "status exit nonzero"
|
||||
grep -q "\"copy\":\"$NEW\"" $WIN/W6-status.txt || fail "status: pointer is not NEW"
|
||||
grep -q '"schema":"3n"' $WIN/W6-status.txt || fail "status: schema is not 3n"
|
||||
grep -qx ' result: pass' $WIN/W6-status.txt || fail "status: check is not pass"
|
||||
note "W6 status: $(grep -o '"copy":"[^"]*"\|"schema":"[^"]*"\|"pm":[a-z]*' $WIN/W6-status.txt | tr '\n' ' ')"
|
||||
|
||||
W1C=$(grep '^W1 c11 ' $WIN/c11.txt | tail -1)
|
||||
W1_SO=$(sed -n 's/.* session_ops \([0-9]*\) .*/\1/p' <<< "$W1C"); W1_MC=$(sed -n 's/.* message_cancels \([0-9]*\) .*/\1/p' <<< "$W1C")
|
||||
W1_REV=$(sed -n 's/.* revoke_claims \([0-9]*\) .*/\1/p' <<< "$W1C")
|
||||
[ -n "$W1_SO" ] && [ -n "$W1_MC" ] && [ -n "$W1_REV" ] || { note "STOP: no W1 c11 line in c11.txt"; exit 1; }
|
||||
python3 -B - "$DATA/bus/bus.sqlite" "$W1_SO" "$W1_MC" > $WIN/W6-counts.txt 2>&1 <<'PY'
|
||||
import sqlite3, sys
|
||||
c = sqlite3.connect("file:" + sys.argv[1] + "?mode=ro", uri=True)
|
||||
types = dict(c.execute("select type, count(*) from sqlite_master group by type").fetchall())
|
||||
names = {r[0] for r in c.execute("select name from sqlite_master")}
|
||||
sv = c.execute("select value from meta where key='schema_version'").fetchone()
|
||||
want = ["thread_shares", "thread_shares_thread", "thread_shares_no_update", "thread_shares_no_delete", "thread_shares_no_replace",
|
||||
"session_ops", "message_cancels", "session_ops_session",
|
||||
"session_ops_no_update", "session_ops_no_delete", "session_ops_no_replace", "session_ops_one_open",
|
||||
"message_cancels_no_update", "message_cancels_no_delete", "message_cancels_no_replace"]
|
||||
def rc(t):
|
||||
return c.execute(f"select count(*) from {t}").fetchone()[0] if t in names else None
|
||||
rows = {t: rc(t) for t in ("session_ops", "message_cancels")}
|
||||
w1 = {k: int(v) for k, v in zip(("session_ops", "message_cancels"), sys.argv[2:4])}
|
||||
ev = c.execute("select count(*), max(seq) from events").fetchone()
|
||||
print("types", " ".join(f"{k}={types.get(k)}" for k in ("table", "trigger", "view", "index")))
|
||||
print("schema_version", sv[0] if sv else None)
|
||||
print("missing", " ".join(n for n in want if n not in names) or "none")
|
||||
print("session_table_rows", " ".join(f"{k}={v}" for k, v in rows.items()), "W1", " ".join(f"{k}={v}" for k, v in w1.items()), "thread_shares", rc("thread_shares"))
|
||||
print("events", ev[0], "maxSeq", ev[1])
|
||||
ok = (types.get("table"), types.get("trigger"), types.get("view"), types.get("index")) == (26, 97, 5, 28) \
|
||||
and sv and sv[0] == "3n" and all(n in names for n in want) and all(rows[k] is not None and rows[k] >= w1[k] for k in w1)
|
||||
print("COUNTS_OK" if ok else "COUNTS_BAD")
|
||||
PY
|
||||
crc=$?
|
||||
{ echo; echo "## W6 live store count (python3 -B, mode=ro)"; cat $WIN/W6-counts.txt; echo "# exit $crc"; } >> $W
|
||||
cat $WIN/W6-counts.txt
|
||||
grep -qx COUNTS_OK $WIN/W6-counts.txt || fail "store count: $(grep -v '^COUNTS' $WIN/W6-counts.txt | tr '\n' ';')"
|
||||
|
||||
$WIN/w.sh W.txt "W6 agents --tester" $MOSAIC agents --business mosaic-stack --tester > $WIN/.w6-agents.txt || fail "agents --tester exit nonzero"
|
||||
note "W6 agents: $(grep -v '^# ' $WIN/.w6-agents.txt | tr '\n' ';')"
|
||||
|
||||
bash $WIN/tr.sh W6 > $WIN/.w6-tr.txt 2>&1; trc=$?
|
||||
{ echo; echo "## W6 tester thread reads (tr.sh W6)"; cat $WIN/.w6-tr.txt; echo "# exit $trc"; } >> $W; cat $WIN/.w6-tr.txt
|
||||
[ $trc = 0 ] || fail "tr.sh W6 exit $trc"
|
||||
a=$(sed -n 's/^W1 thread //p' $WIN/.w1-tr.txt | sort); b=$(sed -n 's/^W6 thread //p' $WIN/.w6-tr.txt | sort)
|
||||
if [ -n "$a" ] && [ "$a" = "$b" ]; then
|
||||
note "W6 thread reads match W1: $(grep -c . <<< "$a") threads, same ids, message counts and sha256"
|
||||
else
|
||||
fail "thread reads differ from W1: $(diff <(echo "$a") <(echo "$b") | grep '^[<>]' | tr '\n' ';')"
|
||||
fi
|
||||
|
||||
# mos-1487 D2: no revocation since activation.
|
||||
W5_ISO=$(cat $WIN/W5.start) || exit 1
|
||||
W5_STAMP="$(date -u -d "$W5_ISO" '+%F %T') UTC"
|
||||
c11=$(bash $WIN/c11.sh W6 2>&1); c11rc=$?
|
||||
{ echo; echo "## W6 c11.sh W6 (mos-1487 D1/D2)"; echo "$c11"; } >> $W; echo "$c11"
|
||||
[ $c11rc = 0 ] || fail "D2: c11.sh W6 exit $c11rc (user threads not 0 or the read failed)"
|
||||
W6_REV=$(sed -n 's/.* revoke_claims \([0-9]*\) .*/\1/p' <<< "$c11" | head -1)
|
||||
[ "$W6_REV" = "$W1_REV" ] && note "W6 D2: thread_claims op=revoke $W6_REV, W1 $W1_REV" || fail "D2: thread_claims op=revoke ${W6_REV:-unread} at W6, $W1_REV at W1"
|
||||
LL=$DATA/launches/mosaic-stack.jsonl
|
||||
LR=$(python3 -B -c '
|
||||
import json, sys
|
||||
n = 0
|
||||
for l in open(sys.argv[1]):
|
||||
try: d = json.loads(l)
|
||||
except ValueError: continue
|
||||
if d.get("event") == "thread-revoked" and str(d.get("at", "")) >= sys.argv[2]: n += 1
|
||||
print(n)' $LL $W5_ISO 2>&1)
|
||||
note "W6 D2: launch log thread-revoked events since W5.start $W5_ISO: $LR (file lines $(wc -l < $LL))"
|
||||
[ "$LR" = 0 ] || fail "D2: launch log has $LR thread-revoked events since W5.start"
|
||||
BR=$(journalctl --user -u [email protected] --since "$W5_STAMP" --no-pager -o cat | grep -c 'thread-revoked')
|
||||
note "W6 D2: bus journal lines naming thread-revoked since $W5_STAMP: $BR (count only)"
|
||||
[ "$BR" = 0 ] || fail "D2: bus journal has $BR thread-revoked lines since W5.start"
|
||||
|
||||
sv=$(python3 -B -c '
|
||||
import json, sys
|
||||
d = json.load(open(sys.argv[1]))
|
||||
print(d.get("sessionsVersion"), len(d.get("sessions") or []))' $DATA/bus-host/sessions.json 2>&1)
|
||||
note "W6 bus-host/sessions.json: sessionsVersion and session count: $sv; mtime $(date -u -r $DATA/bus-host/sessions.json +%FT%TZ)"
|
||||
case "$sv" in "2 "*) ;; *) fail "sessions.json is not version 2: $sv" ;; esac
|
||||
|
||||
if [ $fails = 0 ]; then note "W6_PASS $(date -u +%FT%TZ)"; else note "W6 end $(date -u +%FT%TZ): $fails FAIL(s), to Mos (a D2 failure takes the pointer rollback to OLD per PLAN.md, Mos first)"; exit 1; fi
|
||||
@@ -0,0 +1,70 @@
|
||||
# W9 after W5, W5.start 2026-10-23T18:59:11Z, start 2026-10-23T18:59:53Z
|
||||
# plan 0c932a4c, tool blob 2656f95b00e3, console-check.sh d068fe02, wrapper on NEW: checked
|
||||
# Console: unit active, pid 758602, started 2026-10-23T18:59:13Z, cwd /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
# bus: unit active, pid 758595, cwd /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
pointer: /home/jwoltje/.mosaic-dev/state/stack-active.json
|
||||
{"copy":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","business":"mosaic-stack","pm":true,"claude":"/home/jwoltje/.local/bin/claude","console":["--port","7332","--public-host","mosaic.woltje.com","--auth-header","X-authentik-username","--allow-user","jason.woltje","--tester-socket"],"schema":"3n","activation":"20261023T185911Z-45dca69f6e4b","at":"2026-10-23T18:59:17Z"}
|
||||
log (last five lines):
|
||||
{"at":"2026-10-22T20:16:24Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":"20261022T201621Z-0cbe2e9b35e5","activation":"20261022T201621Z-0cbe2e9b35e5","result":"ok"}
|
||||
{"at":"2026-10-23T03:45:57Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":null,"activation":"20261023T034557Z-464010fbe4c6","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T03:46:02Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":"20261023T034557Z-464010fbe4c6","activation":"20261023T034557Z-464010fbe4c6","result":"ok"}
|
||||
{"at":"2026-10-23T18:59:11Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":null,"activation":"20261023T185911Z-45dca69f6e4b","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T18:59:17Z","op":"activate","from":"464010fbe4c6925b077b9b8182a209ee2177eb9d","to":"45dca69f6e4bce52834587f66f2ff33ba839ab8a","backup":"20261023T185911Z-45dca69f6e4b","activation":"20261023T185911Z-45dca69f6e4b","result":"ok"}
|
||||
check:
|
||||
bus: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
Console: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
CLI: /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a
|
||||
result: pass
|
||||
bus status:
|
||||
host: mosaic-stack, pid 758595, running, since 2026-10-23T18:59:13.168Z, notifier off
|
||||
socket: present
|
||||
writer.lock: pid 758858
|
||||
boot: organization file loaded at 2026-10-23T18:59:13.168Z
|
||||
unit flags: match the pointer
|
||||
drift: 0 commit(s) on refactor since the pointer's copy
|
||||
# exit 0
|
||||
PASS markdown-preview.js is served and equals the copy's
|
||||
PASS /api/config on loopback: send=false edit=false
|
||||
PASS project.files through the Console: head=ae0b17c9586e51da7bc1b7e548c6acf913a55665 files=2 spec=true error=none
|
||||
PASS project.file spec/north-star.md through the Console: commit=ae0b17c9586e51da7bc1b7e548c6acf913a55665 length=99 error=none
|
||||
PASS loopback save refused: HTTP 403 error=read-only sent=false
|
||||
CONSOLE_PASS
|
||||
# exit 0
|
||||
# journal since W5: proxy proof off 1, Sign-in 0
|
||||
# console/ drwx------ jwoltje directory; tester.sock srw------- jwoltje socket
|
||||
# peercred-starts lines since W5 naming NEW: 1
|
||||
# bus journal library: 0
|
||||
re194575ec18c mosaic-stack/chief claude-code claude-opus-5-5 by jason since 2026-10-23T18:59:15.960Z running
|
||||
# exit 0
|
||||
[
|
||||
{
|
||||
"business": "mosaic-stack",
|
||||
"instance": "chief",
|
||||
"run": "re194575ec18c",
|
||||
"launchedBy": "jason",
|
||||
"harness": "claude-code",
|
||||
"model": "claude-opus-5-5",
|
||||
"provider": "anthropic",
|
||||
"modelKey": "opus",
|
||||
"pid": 760669,
|
||||
"startTime": "88314611",
|
||||
"runnerPid": 760672,
|
||||
"runnerStartTime": "88314611",
|
||||
"runDir": "/home/jwoltje/.mosaic-dev/launches/mosaic-stack/re194575ec18c",
|
||||
"startedAt": "2026-10-23T18:59:15.960Z",
|
||||
"live": true
|
||||
}
|
||||
]
|
||||
# exit 0
|
||||
# one running chief from this start: run re194575ec18c
|
||||
# pm: live_pm 0 ; old pm not listed
|
||||
# pm: no live pm, as expected (W5's bus stop ended ra38826f3c6e2; no W9b this window)
|
||||
# row 301 channel-proof pin 2026-10-23T18:59:54Z
|
||||
59f0e44f4 ancestor of NEW: yes; 59f0e44f4 pinned 39fcb27c, 24672fd9d (row 252) re-pinned
|
||||
NEW channel-proof pin 604092cb706b152d458f299ff1071f6cd488774629012f96b672f7e9a16c0b2c; NEW packages/webui/src/bus.mjs sha256 604092cb706b152d458f299ff1071f6cd488774629012f96b672f7e9a16c0b2c
|
||||
copy /home/jwoltje/.local/share/mosaic-stack/copies/45dca69f6e4bce52834587f66f2ff33ba839ab8a packages/webui/src/bus.mjs sha256 604092cb706b152d458f299ff1071f6cd488774629012f96b672f7e9a16c0b2c
|
||||
R301 PASS
|
||||
# exit 0
|
||||
chief re194575ec18c claude-code since 2026-10-23T18:59:15.964Z
|
||||
# exit 0
|
||||
# W9 end 2026-10-23T18:59:54Z W9_CHECKS_PASS
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), W9 (PLAN.md W9 row). Taken from window-migrate-3n/w9.sh. The
|
||||
# checks are the same: mos-1338 item 4 (the Console's unit state, MainPID, start time and cwd; a miss stops and goes
|
||||
# to Mos, who restarts it, never me), status at 3n, console-check, the webui journal counts, the tester socket
|
||||
# modes, peercred-starts, the bus library: lines, one running chief from this start, and the chief not working.
|
||||
# The pm: the last window's W9b left pm ra38826f3c6e2 live in the bus unit's cgroup, and W5's bus stop ends it, as
|
||||
# it ended the old chief last window. No W9b runs this window, so W9 expects no live pm and records the old pm's
|
||||
# entry. Row 301 (59f0e44f4): p456.sh r301 against the live copy, whose webui bus.mjs must equal NEW's
|
||||
# channel-proof pin 604092cb. Every call goes through w.sh into W.txt; every bus call carries --tester. A failed
|
||||
# check stops the script.
|
||||
# usage: w9.sh
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
W5_ISO=$(cat $WIN/W5.start) || exit 1
|
||||
W5_STAMP="$(date -u -d "$W5_ISO" '+%F %T') UTC"
|
||||
W5_S=$(date -d "$W5_ISO" +%s)
|
||||
CC=$REPO/agents/sage/work/window-plan/repin-de352dfaf/console-check.sh
|
||||
CC_SHA=d068fe02da897b700110a162d13d9671fe5994f053c45aff99113fade737094c
|
||||
COPY=$HOME/.local/share/mosaic-stack/copies/$NEW
|
||||
BZ=(--business mosaic-stack)
|
||||
W=$WIN/W.txt
|
||||
note() { echo "# $*" >> "$W"; echo "# $*"; }
|
||||
stop() { note "STOP: $*"; exit 1; }
|
||||
step() { local f="$1"; shift; $WIN/w.sh W.txt "$@" > "$WIN/$f"; local rc=$?; cat "$WIN/$f"; return $rc; }
|
||||
|
||||
note "W9 after W5, W5.start $W5_ISO, start $(date -u +%FT%TZ)"
|
||||
[ "$(sha $PLAN)" = "$PLAN_SHA" ] || stop "the plan file is not P0's ${PLAN_SHA:0:8}"
|
||||
git -C $REPO rev-parse HEAD:scripts/stack-release.sh | grep -q "^$TOOL_BLOB" || stop "tool blob moved"
|
||||
[ "$(sha $CC)" = "$CC_SHA" ] || stop "console-check.sh is not d068fe02"
|
||||
grep -q "/copies/$NEW/scripts/mosaic" "$MOSAIC" || stop "the wrapper is not pinned to NEW"
|
||||
note "plan ${PLAN_SHA:0:8}, tool blob ${TOOL_BLOB:0:12}, console-check.sh d068fe02, wrapper on NEW: checked"
|
||||
|
||||
# mos-1338 item 4: the Console unit, pid, start time and cwd. A miss stops here and goes to Mos.
|
||||
U_ACTIVE=$(systemctl --user is-active mosaic-webui.service)
|
||||
CONSOLE_PID=$(systemctl --user show -p MainPID --value mosaic-webui.service)
|
||||
U_START=$(systemctl --user show -p ExecMainStartTimestamp --value mosaic-webui.service)
|
||||
U_START_S=$(date -d "$U_START" +%s 2>/dev/null || echo 0)
|
||||
P_START=$(ps -o lstart= -p "$CONSOLE_PID" 2>/dev/null)
|
||||
CWD=$(readlink /proc/$CONSOLE_PID/cwd 2>/dev/null)
|
||||
{ echo; echo "## W9 Console unit (mos-1338 item 4)"; echo "is-active $U_ACTIVE, MainPID $CONSOLE_PID"
|
||||
echo "ExecMainStartTimestamp $U_START ($(date -u -d @$U_START_S +%FT%TZ)), ps lstart $P_START"; echo "cwd -> $CWD"; } >> "$W"
|
||||
note "Console: unit $U_ACTIVE, pid $CONSOLE_PID, started $(date -u -d @$U_START_S +%FT%TZ), cwd $CWD"
|
||||
[ "$U_ACTIVE" = active ] || stop "mosaic-webui is $U_ACTIVE, not active (mos-1338 item 4; to Mos, who restarts it)"
|
||||
[ -n "$CONSOLE_PID" ] && [ "$CONSOLE_PID" != 0 ] || stop "no Console MainPID (to Mos)"
|
||||
[ "$U_START_S" -ge "$W5_S" ] || stop "the Console started $(date -u -d @$U_START_S +%FT%TZ), before W5.start $W5_ISO (mos-1338 item 4; to Mos)"
|
||||
[ "$CWD" = "$COPY" ] || stop "Console cwd is not the NEW copy (mos-1338 item 4; to Mos)"
|
||||
BUS_PID=$(systemctl --user show -p MainPID --value [email protected])
|
||||
BUS_CWD=$(readlink /proc/$BUS_PID/cwd 2>/dev/null)
|
||||
note "bus: unit $(systemctl --user is-active [email protected]), pid $BUS_PID, cwd $BUS_CWD"
|
||||
[ "$BUS_CWD" = "$COPY" ] || stop "bus cwd is not the NEW copy"
|
||||
|
||||
# The last window's W9 checks.
|
||||
step .w9-status.txt "W9 status" $REPO/scripts/stack-release.sh status mosaic-stack || stop "W9 status exit"
|
||||
grep -q "\"copy\":\"$NEW\"" $WIN/.w9-status.txt && grep -q '"pm":true' $WIN/.w9-status.txt && grep -q '"schema":"3n"' $WIN/.w9-status.txt || stop "W9 status: pointer not on NEW, pm true, 3n"
|
||||
grep -q 'unit flags: match the pointer' $WIN/.w9-status.txt || stop "W9 status: unit flags"
|
||||
grep -q 'result: pass' $WIN/.w9-status.txt || stop "W9 status: check result"
|
||||
step .w9-cc.txt "W9 console-check NEW ($CC, d068fe02)" bash $CC $NEW || stop "console-check exit"
|
||||
grep -qx CONSOLE_PASS $WIN/.w9-cc.txt || stop "console-check not CONSOLE_PASS"
|
||||
J=$(journalctl --user -u mosaic-webui.service --since "$W5_STAMP" --no-pager)
|
||||
N=$(printf '%s\n' "$J" | grep -c 'Proxy: proxy proof off'); S=$(printf '%s\n' "$J" | grep -c 'Sign-in:')
|
||||
{ echo; echo "## W9 webui journal since $W5_STAMP: 'Proxy: proxy proof off' and 'Sign-in:' counts"; echo "proxy proof off $N, Sign-in $S"; } >> "$W"
|
||||
note "journal since W5: proxy proof off $N, Sign-in $S"
|
||||
[ "$N" = 1 ] || stop "proxy proof off count is $N, not 1 (one Console start since W5)"
|
||||
[ "$S" = 0 ] || stop "Sign-in count is $S, not 0"
|
||||
SOCK_LINE=$(stat -c '%A %U %F' $DATA/console/tester.sock); DIR_LINE=$(stat -c '%A %U %F' $DATA/console)
|
||||
{ echo; echo "## W9 tester socket"; echo "console/ $DIR_LINE"; echo "tester.sock $SOCK_LINE"; } >> "$W"
|
||||
note "console/ $DIR_LINE; tester.sock $SOCK_LINE"
|
||||
[ "$SOCK_LINE" = "srw------- $USER socket" ] || stop "tester.sock is not a 0600 socket"
|
||||
[ "$DIR_LINE" = "drwx------ $USER directory" ] || stop "console/ is not 0700"
|
||||
R=$(python3 -B -c '
|
||||
import json,sys
|
||||
n=0
|
||||
for l in open(sys.argv[1]):
|
||||
d=json.loads(l)
|
||||
if d["at"]>=sys.argv[2] and sys.argv[3] in d["copy"]: n+=1
|
||||
print(n)' $DATA/bus/peercred-starts.jsonl $W5_ISO $NEW) || stop "peercred-starts.jsonl unreadable"
|
||||
{ echo; echo "## W9 peercred-starts.jsonl lines since W5 naming NEW"; echo "$R (file lines $(wc -l < $DATA/bus/peercred-starts.jsonl))"; } >> "$W"
|
||||
note "peercred-starts lines since W5 naming NEW: $R"
|
||||
[ "$R" = 1 ] || stop "peercred-starts has $R lines for this start, not 1"
|
||||
BJ=$(journalctl --user -u [email protected] --since "$W5_STAMP" --no-pager -o cat)
|
||||
L=$(printf '%s\n' "$BJ" | grep -c 'library:')
|
||||
{ echo; echo "## W9 bus journal 'library:' lines since W5"; echo "library: $L"; } >> "$W"
|
||||
note "bus journal library: $L"
|
||||
[ "$L" = 0 ] || stop "bus journal has $L library: lines"
|
||||
step .w9-launches.txt "W9 launches list" $MOSAIC launches list || stop "launches list"
|
||||
step .w9-launches.json "W9 launches list --json" $MOSAIC launches list --json || stop "launches list --json"
|
||||
sed -i '$d' $WIN/.w9-launches.json
|
||||
CHIEF=$(node -e '
|
||||
const l=JSON.parse(require("fs").readFileSync(process.argv[1],"utf8")),since=Number(process.argv[2]);
|
||||
const c=l.filter(x=>x.business==="mosaic-stack"&&x.instance==="chief"&&x.live===true);
|
||||
if(c.length!==1||!(Date.parse(c[0].startedAt)>=since)){console.error(`running chiefs ${c.length}`);process.exit(1)}
|
||||
process.stdout.write(c[0].run)' $WIN/.w9-launches.json "${W5_S}000") || stop "launches: not one running chief from this start"
|
||||
note "one running chief from this start: run $CHIEF"
|
||||
PM=$(node -e '
|
||||
const l=JSON.parse(require("fs").readFileSync(process.argv[1],"utf8"));
|
||||
const live=l.filter(x=>x.business==="mosaic-stack"&&x.instance==="pm"&&x.live===true).map(x=>x.run);
|
||||
const old=l.filter(x=>x.run===process.argv[2]).map(x=>`${x.run} live=${x.live}`);
|
||||
process.stdout.write(`live_pm ${live.length} ${live.join(",")}; old pm ${old.join(",")||"not listed"}`)' $WIN/.w9-launches.json $PM_RUN) || stop "launches: pm read"
|
||||
note "pm: $PM"
|
||||
case "$PM" in "live_pm 0 "*) ;; *) stop "pm: a live pm is listed; W5 ends $PM_RUN and nothing here starts one (to Mos)" ;; esac
|
||||
note "pm: no live pm, as expected (W5's bus stop ended $PM_RUN; no W9b this window)"
|
||||
step .w9-r301.txt "W9 row 301 (p456.sh r301 live copy)" bash $WIN/p456.sh r301 "$COPY" || stop "row 301 check exit"
|
||||
grep -q '^R301 PASS' $WIN/.w9-r301.txt || stop "row 301: the live copy's webui bus.mjs is not NEW's pin"
|
||||
step .w9-agents.txt "W9 agents --tester" $MOSAIC agents "${BZ[@]}" --tester || stop "agents"
|
||||
grep -E '(^|[[:space:]])chief[[:space:]].*working' $WIN/.w9-agents.txt && stop "the chief is working"
|
||||
note "W9 end $(date -u +%FT%TZ) W9_CHECKS_PASS"
|
||||
@@ -0,0 +1,51 @@
|
||||
# W0b-W4 start 2026-10-23T18:57:24Z
|
||||
# plan 0c932a4c, NEW 45dca69f6e4bce52834587f66f2ff33ba839ab8a, tool blob 2656f95b00e3, P5 four scripts at NEW and clean, business-check.mjs eece4d46: checked 2026-10-23T18:57:24Z
|
||||
# W0 copy present, w0.txt LOAD_OK
|
||||
# W0b: /home/jwoltje/.config/mosaic-dev/businesses/mosaic-stack.json.pre-window-20261023T185724Z, sha256 1e49bdf05e62607972958f5b7298cfd600c7825812370e26d7c2a842f2af9b93, recorded in backups.txt
|
||||
# W1 launches: chief r28dbbc5c6b4d standing (OLD's activation), pm ra38826f3c6e2 listed (left live by the last W9b), no other launch
|
||||
# W1 condition 11: W1 c11 2026-10-23T18:57:25.086Z threads 5 owners tester=5 user_threads 0 revoke_claims 0 session_ops 0 message_cancels 0 access.json absent (exit 0)
|
||||
# W1 start stamp 2026-10-23T18:57:25Z
|
||||
# SNAP sha256 639fd28a checked before S1
|
||||
# S1.json sha256 a06b59f250e1399e3b6be62766f5092204873b13d51daea252de343e7767ac45
|
||||
W1 threads --tester: 5 thread(s), threads.json sha256 07c154d75d929028
|
||||
W1 thread d0ba7a66-aa3f-4918-9518-94132bce6b28 messages 2 sha256 985ac61ca9220f2f
|
||||
W1 thread 446201de-e8b5-4df3-9356-d0d5422cc899 messages 2 sha256 7e7e9eeeaa8c1e09
|
||||
W1 thread b89fcca4-6b82-48bd-9310-fb82c5ae8518 messages 2 sha256 f4e4916b9656a403
|
||||
W1 thread d9bb7ff3-7a8b-4bb8-ba12-03ca094cee4e messages 2 sha256 728ff36f3e003c63
|
||||
W1 thread b85a57fe-84f9-4785-a596-135af39e334a messages 2 sha256 727de0d9c809a41a
|
||||
# W1 D3: /home/jwoltje/.mosaic-dev/backups/d3-20261023T185729Z, STAMP 2026-10-23T18:57:29.717Z, SHA256SUMS sha256 06ceb124c6f1a3dc70239132c2046e3be39a446b2cf953f4a433d80262784506, members 93122 tar exit 0 sessions.json sessionsVersion 2
|
||||
pointer: /home/jwoltje/.mosaic-dev/state/stack-active.json
|
||||
{"copy":"464010fbe4c6925b077b9b8182a209ee2177eb9d","business":"mosaic-stack","pm":true,"claude":"/home/jwoltje/.local/bin/claude","console":["--port","7332","--public-host","mosaic.woltje.com","--auth-header","X-authentik-username","--allow-user","jason.woltje","--tester-socket"],"schema":"3n","activation":"20261023T034557Z-464010fbe4c6","at":"2026-10-23T03:46:02Z"}
|
||||
log (last five lines):
|
||||
{"at":"2026-10-22T15:06:00Z","op":"activate","from":"86f95bb27f6cb237bf9fa9ba53320bace6c4de0b","to":"84f53540dd0d21ef179ca29697e172b0246e78d1","backup":"20261022T150555Z-84f53540dd0d","activation":"20261022T150555Z-84f53540dd0d","result":"ok"}
|
||||
{"at":"2026-10-22T20:16:21Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":null,"activation":"20261022T201621Z-0cbe2e9b35e5","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-22T20:16:24Z","op":"activate","from":"84f53540dd0d21ef179ca29697e172b0246e78d1","to":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","backup":"20261022T201621Z-0cbe2e9b35e5","activation":"20261022T201621Z-0cbe2e9b35e5","result":"ok"}
|
||||
{"at":"2026-10-23T03:45:57Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":null,"activation":"20261023T034557Z-464010fbe4c6","result":"started","interpreter":"{\"path\":\"/usr/bin/python3.14\",\"version\":[3,14,6],\"dev\":66308,\"ino\":3968163,\"sha256\":\"8735f172622a7f8d27e293fd0fd36fc55c4cb9b663b6630d33b57870e36c24cc\"}"}
|
||||
{"at":"2026-10-23T03:46:02Z","op":"activate","from":"0cbe2e9b35e51fe06dedde69c022b46e040f98c0","to":"464010fbe4c6925b077b9b8182a209ee2177eb9d","backup":"20261023T034557Z-464010fbe4c6","activation":"20261023T034557Z-464010fbe4c6","result":"ok"}
|
||||
check:
|
||||
bus: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
Console: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
CLI: /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
result: pass
|
||||
bus status:
|
||||
host: mosaic-stack, pid 3811005, running, since 2026-10-23T03:45:59.548Z, notifier off
|
||||
socket: present
|
||||
writer.lock: pid 3811049
|
||||
boot: organization file loaded at 2026-10-23T03:45:59.547Z
|
||||
unit flags: match the pointer
|
||||
drift: 141 commit(s) on refactor since the pointer's copy
|
||||
# exit 0
|
||||
# W3-plan.txt sha256 9a5317064441aa1b0bdd055bc3132322bea4e7267a5d8801ad97bbbb1d1ef7aa
|
||||
# W3 commit list lines left out of the flag checks: 141
|
||||
# W3 plan checks: OLD to NEW, 3n to 3n, migration none, no needs: line, 141 commits, backup line, Console line OLD's flags exactly, proof off, send off, no drop/sso/send/proof, bus --pm: PASS
|
||||
DropInPaths=
|
||||
ExecStart={ path=/home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d/scripts/mosaic ; argv[]=/home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d/scripts/mosaic bus start mosaic-stack --pm ; ignore_errors=no ; start_time=[Thu 2026-10-22 22:45:59 CDT] ; stop_time=[n/a] ; pid=3811005 ; code=(null) ; status=0/0 }
|
||||
WorkingDirectory=/home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
# exit 0
|
||||
DropInPaths=
|
||||
ExecStart={ path=/usr/bin/node ; argv[]=/usr/bin/node /home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d/packages/webui/src/cli.mjs serve --checkout /mnt/storage/src/mosaic-stack --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket ; ignore_errors=no ; start_time=[Thu 2026-10-22 22:45:59 CDT] ; stop_time=[n/a] ; pid=3811007 ; code=(null) ; status=0/0 }
|
||||
WorkingDirectory=/home/jwoltje/.local/share/mosaic-stack/copies/464010fbe4c6925b077b9b8182a209ee2177eb9d
|
||||
# exit 0
|
||||
# W4 checks: DropInPaths empty on both, both ExecStart name the OLD copy, bus has --pm, no quote or backslash in either ExecStart
|
||||
# W4 bus Environment: 2 assignments; quote or backslash: none (values not recorded)
|
||||
# W0b-W4 end 2026-10-23T18:58:17Z
|
||||
+118
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env bash
|
||||
# Re-pin window 464010fbe to NEW (3n, no migrate), W0b-W4 (PLAN.md, sha256 in PLAN.sha256 from P0; sage-3572,
|
||||
# mos-1487). W0 ran in prep (w0.txt). Adapted from window-migrate-3n/wsteps.sh: W1's launch rule now expects the
|
||||
# standing chief r28dbbc5c6b4d from OLD's activation and the pm ra38826f3c6e2 the last window's W9b left live (any
|
||||
# other launch goes to Mos), W1 counts user threads again (c11.sh, mos-1487 D1), and W3 runs without --migrate and
|
||||
# expects "migration: none". W1-W4 start nothing, but S1, W2 and W3 read the store, so the script runs only on
|
||||
# Sage's CLEAR. W3 and W4 go to Mos for the W5 go.
|
||||
# Nothing is stopped. Each step goes through w.sh into W.txt; a failed check stops the script.
|
||||
# usage: wsteps.sh
|
||||
set -uo pipefail
|
||||
. /mnt/storage/src/mosaic-stack/agents/darkwing/work/window-repin-45dca69f6/vars.sh
|
||||
BC=$REPO/agents/sage/work/window-plan/repin-de352dfaf/business-check.mjs
|
||||
BC_SHA=eece4d4671e1ce15ba81e1654c641925ac4988b343687b062897392285a8a1a7
|
||||
BIZ=$HOME/.config/mosaic-dev/businesses/mosaic-stack.json
|
||||
BIZ_SHA=1e49bdf05e62607972958f5b7298cfd600c7825812370e26d7c2a842f2af9b93
|
||||
SNAP=$REPO/agents/darkwing/work/window-repin-84f53540d/snapshot.mjs
|
||||
SNAP_SHA=639fd28a2674aaa03ce824e3394b4052f21cdef7d6fa49bae61a9927ed341e67
|
||||
W=$WIN/W.txt
|
||||
NCOMMITS=$(git -C $REPO rev-list --count $OLD..$NEW)
|
||||
note() { echo "# $*" >> "$W"; echo "# $*"; }
|
||||
stop() { note "STOP: $*"; exit 1; }
|
||||
|
||||
note "W0b-W4 start $(date -u +%FT%TZ)"
|
||||
[ "$(sha $PLAN)" = "$PLAN_SHA" ] || stop "the plan file is not P0's ${PLAN_SHA:0:8}"
|
||||
[ "$(git -C $REPO rev-parse HEAD:scripts/stack-release.sh)" = "$TOOL_BLOB" ] || stop "tool blob moved"
|
||||
git -C $REPO diff --quiet $NEW HEAD -- "${FOUR[@]}" || stop "P5: the four scripts differ from NEW"
|
||||
[ -z "$(git -C $REPO status --porcelain -- "${FOUR[@]}")" ] || stop "P5: the four scripts are dirty"
|
||||
[ "$(sha $BC)" = "$BC_SHA" ] || stop "business-check.mjs sha"
|
||||
note "plan ${PLAN_SHA:0:8}, NEW $NEW, tool blob ${TOOL_BLOB:0:12}, P5 four scripts at NEW and clean, business-check.mjs eece4d46: checked $(date -u +%FT%TZ)"
|
||||
|
||||
# W0 ran in prep (w0.txt): the copy must still be there with LOAD_OK recorded.
|
||||
[ -f "$HOME/.local/share/mosaic-stack/copies/$NEW/scripts/mosaic" ] || stop "W0 copy missing"
|
||||
grep -q LOAD_OK $WIN/w0.txt || stop "w0.txt has no LOAD_OK"
|
||||
note "W0 copy present, w0.txt LOAD_OK"
|
||||
|
||||
# W0b
|
||||
[ "$(sha $BIZ)" = "$BIZ_SHA" ] || stop "business file sha256 is not P1's 1e49bdf0"
|
||||
STAMP=$(date -u +%Y%m%dT%H%M%SZ)
|
||||
COPY=$BIZ.pre-window-$STAMP
|
||||
[ ! -e "$COPY" ] || stop "$COPY exists"
|
||||
cp -p "$BIZ" "$COPY" || stop "W0b cp"
|
||||
[ "$(sha "$COPY")" = "$BIZ_SHA" ] || stop "W0b copy sha256"
|
||||
echo "W0b $(date -u +%FT%TZ) business file copy $COPY sha256 $(sha "$COPY") (source $BIZ sha256 $(sha "$BIZ"))" >> $WIN/backups.txt
|
||||
note "W0b: $COPY, sha256 $(sha "$COPY"), recorded in backups.txt"
|
||||
|
||||
# W1
|
||||
$WIN/w.sh W.txt "W1 agents --tester" $MOSAIC agents --business mosaic-stack --tester > $WIN/.w1-agents.txt || stop "W1 agents"
|
||||
grep -E '(^|[[:space:]])chief[[:space:]].*working' $WIN/.w1-agents.txt && stop "W1: the chief is working (mos-1340 item 2)"
|
||||
grep -E '(^|[[:space:]])pm[[:space:]].*working' $WIN/.w1-agents.txt && stop "W1: the pm is working (mos-1340 item 3)"
|
||||
$WIN/w.sh W.txt "W1 launches list" $MOSAIC launches list > $WIN/.w1-launches.txt || stop "W1 launches list"
|
||||
# mos-1340's rule with this window's runs: r28dbbc5c6b4d is the standing chief launch from OLD's activation and
|
||||
# ra38826f3c6e2 the pm the last window's W9b left live (window-migrate-3n STATE.md). Any other live launch goes to
|
||||
# Mos before S1. Both run in the bus unit's cgroup, so W5's bus stop ends them.
|
||||
other=$(grep -v '^# ' $WIN/.w1-launches.txt | grep -v -e "^$CHIEF_RUN " -e "^$PM_RUN " | grep .)
|
||||
[ -z "$other" ] || stop "W1: a live launch other than the standing chief $CHIEF_RUN and pm $PM_RUN (mos-1340 item 1): $other"
|
||||
grep -q "^$CHIEF_RUN mosaic-stack/chief " $WIN/.w1-launches.txt || stop "W1: the standing chief launch $CHIEF_RUN is not listed"
|
||||
note "W1 launches: chief $CHIEF_RUN standing (OLD's activation), pm $PM_RUN $(grep -q "^$PM_RUN mosaic-stack/pm " $WIN/.w1-launches.txt && echo 'listed (left live by the last W9b)' || echo 'not listed'), no other launch"
|
||||
bash $WIN/c11.sh W1 >> "$W" 2>&1 || stop "W1 condition 11: user threads not 0 (mos-1487 D1; to Mos)"
|
||||
note "W1 condition 11: $(grep '^W1 c11 ' $WIN/c11.txt | tail -1)"
|
||||
note "W1 start stamp $(date -u +%FT%TZ)"
|
||||
[ "$(sha $SNAP)" = "$SNAP_SHA" ] || stop "SNAP sha before S1"
|
||||
note "SNAP sha256 639fd28a checked before S1"
|
||||
$WIN/w.sh W.txt "S1 snapshot --held" node $SNAP --store "$DATA/bus/bus.sqlite" --held > $WIN/S1.json || stop "S1"
|
||||
sed -i '$d' $WIN/S1.json # w.sh prints "# exit N" last; S1.json keeps the snapshot only
|
||||
note "S1.json sha256 $(sha $WIN/S1.json)"
|
||||
# W6's baseline: the tester thread reads before W5 (tr.sh; bodies in $WIN/.tr/W1, not committed).
|
||||
bash $WIN/tr.sh W1 > $WIN/.w1-tr.txt 2>&1; trc=$?
|
||||
{ echo; echo "## W1 tester thread reads (tr.sh W1)"; cat $WIN/.w1-tr.txt; echo "# exit $trc"; } >> "$W"; cat $WIN/.w1-tr.txt
|
||||
[ $trc = 0 ] || stop "W1 tester thread reads failed"
|
||||
# The rollback source for the data-root files as they are just before W5 (PLAN.md W1).
|
||||
bash $WIN/d3.sh > $WIN/d3-w1.txt 2>&1; drc=$?
|
||||
grep -q D3_PASS $WIN/d3-w1.txt && [ $drc = 0 ] || stop "W1 d3.sh rc $drc: $(tail -3 $WIN/d3-w1.txt)"
|
||||
note "W1 D3: $(sed -n 's/^D3 path //p' $WIN/d3-w1.txt), STAMP $(sed -n 's/^D3 STAMP //p' $WIN/d3-w1.txt), SHA256SUMS sha256 $(sed -n 's/^D3 SHA256SUMS sha256 //p' $WIN/d3-w1.txt), $(sed -n 's/^MEMBERS: //p' $WIN/d3-w1.txt)"
|
||||
|
||||
# W2
|
||||
$WIN/w.sh W.txt "W2 status" scripts/stack-release.sh status mosaic-stack || stop "W2 status"
|
||||
|
||||
# W3
|
||||
$WIN/w.sh W.txt "W3 activate NEW --pm --tester-socket --plan" scripts/stack-release.sh activate $NEW mosaic-stack --pm --tester-socket --plan > $WIN/W3-plan.txt || stop "W3 plan exit"
|
||||
sed -i '$d' $WIN/W3-plan.txt
|
||||
note "W3-plan.txt sha256 $(sha $WIN/W3-plan.txt)"
|
||||
# The plan's W3 row: OLD to NEW, "migration: none", the backup line, and a Console line with OLD's flags exactly
|
||||
# (--tester-socket, no --send, no --sso, no proof pair, no drop line). Any other difference stops here.
|
||||
P3L=$WIN/W3-plan.txt
|
||||
# The commit list holds subjects that name --sso and --send (row 273), so the flag checks read the plan without it.
|
||||
P3N=$WIN/W3-plan-nocommits.txt
|
||||
grep -v '^ [0-9a-f]\{9\} ' $P3L > $P3N
|
||||
note "W3 commit list lines left out of the flag checks: $(grep -c '^ [0-9a-f]\{9\} ' $P3L)"
|
||||
CONSOLE_WANT="Console: scripts/webui-service.sh install --copy $NEW --copies $HOME/.local/share/mosaic-stack/copies --port 7332 --public-host mosaic.woltje.com --auth-header X-authentik-username --allow-user jason.woltje --tester-socket"
|
||||
grep -qx "from: $OLD" $P3L || stop "W3: from is not OLD"
|
||||
grep -qx "to: $NEW" $P3L || stop "W3: to is not NEW"
|
||||
grep -qx "store schema: 3n (read from the store the running bus holds)" $P3L || stop "W3: store schema line"
|
||||
grep -qx "target schema: 3n" $P3L || stop "W3: target schema is not 3n"
|
||||
grep -qx "migration: none; the store is at the target's version" $P3L || stop "W3: migration line is not none"
|
||||
# No migration means no needs: lines at all, the decision 96 line included (it comes only with a migration, :1423).
|
||||
[ "$(grep -c '^needs: ' $P3N)" = 0 ] || stop "W3: a needs: line"
|
||||
[ "$(grep -c '^migration' $P3N)" = 1 ] || stop "W3: a migration line other than none"
|
||||
grep -q '^restore: \|^note: ' $P3N && stop "W3: a restore or note line"
|
||||
grep -qx "commits: the run adds $NCOMMITS (newest first, at most 200):" $P3L || stop "W3: commit count is not $NCOMMITS (git rev-list --count OLD..NEW)"
|
||||
grep -qx "backup: the run backs up the stopped store to $DATA/backups/stack/<activation>/ before any migration" $P3L || stop "W3: backup line"
|
||||
grep -qx -- "$CONSOLE_WANT" $P3L || stop "W3: Console line is not OLD's flags exactly"
|
||||
[ "$(grep -c '^Console: ' $P3L)" = 1 ] || stop "W3: more than one Console line"
|
||||
grep -q '^drop \|^sso: \|--send\|--sso\|--proof-header\|--proof-file' $P3N && stop "W3: a drop, sso, send or proof line or flag"
|
||||
grep -qx 'proof: off' $P3L && grep -qx 'send: off' $P3L || stop "W3: proof and send lines are not off"
|
||||
grep -q "^bus: scripts/bus-service.sh install --copy $NEW .* --pm " $P3L || stop "W3: bus line has no --pm on NEW"
|
||||
note "W3 plan checks: OLD to NEW, 3n to 3n, migration none, no needs: line, $NCOMMITS commits, backup line, Console line OLD's flags exactly, proof off, send off, no drop/sso/send/proof, bus --pm: PASS"
|
||||
|
||||
# W4
|
||||
$WIN/w.sh W.txt "W4 bus unit (Environment omitted from the transcript)" systemctl --user show [email protected] -p ExecStart -p WorkingDirectory -p DropInPaths || stop "W4 bus"
|
||||
$WIN/w.sh W.txt "W4 webui unit" systemctl --user show mosaic-webui.service -p ExecStart -p WorkingDirectory -p DropInPaths || stop "W4 webui"
|
||||
BUSL=$(systemctl --user show [email protected] -p ExecStart -p DropInPaths -p WorkingDirectory)
|
||||
WEBL=$(systemctl --user show mosaic-webui.service -p ExecStart -p DropInPaths -p WorkingDirectory)
|
||||
for u in BUSL WEBL; do v=${!u}; grep -qx 'DropInPaths=' <<< "$v" || stop "W4 $u DropInPaths not empty"; grep '^ExecStart=' <<< "$v" | grep -q "copies/$OLD/" || stop "W4 $u ExecStart does not name the OLD copy"; grep '^ExecStart=' <<< "$v" | grep -q "copies/$NEW" && stop "W4 $u ExecStart names NEW"; grep '^ExecStart=' <<< "$v" | grep -q "[\"'\\\\]" && stop "W4 $u ExecStart has a quote or backslash"; done
|
||||
grep '^ExecStart=' <<< "$BUSL" | grep -q -- ' --pm' || stop "W4 bus ExecStart has no --pm"
|
||||
note "W4 checks: DropInPaths empty on both, both ExecStart name the OLD copy, bus has --pm, no quote or backslash in either ExecStart"
|
||||
ENVL=$(systemctl --user show [email protected] -p Environment)
|
||||
note "W4 bus Environment: $(tr ' ' '\n' <<< "${ENVL#Environment=}" | grep -c =) assignments; quote or backslash: $(grep -q "[\"'\\\\]" <<< "$ENVL" && echo FOUND || echo none) (values not recorded)"
|
||||
note "W0b-W4 end $(date -u +%FT%TZ)"
|
||||
Reference in new issue
Block a user