Files
jason.woltje 158205c5cc lead: commit darkwing's untracked evidence (348 files: queue-137 queue-141 queue-150 queue-162 queue-165 queue-166 queue-167 queue-169 queue-179 queue-180 queue-181 queue-182 queue-185 queue-186 queue-187 queue-188 queue-190 queue-93)
Unclaimed files left in the canonical checkout. Inventory: canonical-cleanup-inventory.md (commit-as-evidence groups). detect-secrets scan clean on 2026-11-02: hits are sha256 pins, git object ids, test sentinels already in tracked tests and unit-file lines.
2026-11-02 15:05:14 -06:00

62 lines
4.0 KiB
Diff

diff --git a/docs/TOOLS.md b/docs/TOOLS.md
index 6bce48e33..feeef21f1 100644
--- a/docs/TOOLS.md
+++ b/docs/TOOLS.md
@@ -404,7 +404,11 @@ failure that rolled back exits 1, a failed rollback exits 2, usage exits 4. Only
says so. Before it stops anything, it refuses a missing, unpushed or
unreadable copy, a busy `mosaic-bus@` instance, unit flags that differ
from the pointer, and a business file that names a plug-in kind the
- target's `KINDS` lacks (`unknown-kind-for-target`, naming each kind). Then it saves the unit files, drop-ins and wrapper under
+ target's `KINDS` lacks (`unknown-kind-for-target`, naming each kind). It
+ refuses `business-unreadable` when the target's code can't read the
+ business file: a copy older than eaeb5ebf2, which has no
+ `plugins/src/kinds.mjs`, or a file the target's loader refuses. Then it
+ saves the unit files, drop-ins and wrapper under
`state/stack-rollback/<activation>/`, stops the Console then the bus, and
reads the stopped store. A `-wal` or `-shm` beside it refuses
`store-unclean` and leaves the store alone. A migration takes an
@@ -422,9 +426,10 @@ failure that rolled back exits 1, a failed rollback exits 2, usage exits 4. Only
7. `rollback BUSINESS` returns to the copy before the pointer's, taken from
the log. When the schemas differ it needs `--restore ACTIVATION`; events
written after that backup need `--events N` with the count it prints, and
- Jason decides first. It refuses `unknown-kind-for-target` like `activate`;
- set each kind it names to `null` with `plugins set` through the live bus
- first.
+ Jason decides first. It refuses `business-unreadable` and
+ `unknown-kind-for-target` like `activate`. For the second, set each kind
+ it names to `null` through the live bus first, with the `plugins set`
+ command in step 2 of the next section.
8. Jason's plain `mosaic talk pm "..."` must print sent and a reply. Keep the
`status` output with the receipts.
@@ -443,7 +448,16 @@ copy fails its gate and rolls back. Use two phases instead (row 169, Gitea
gate check but the PM's, and writes the pointer with `pm` false and
`pmPending` true. The log's final line is `result ok` with `pm pending`.
`status` and `--plan` print the pending state and the next step.
-2. Jason sets `harness` with `plugins set` through the live bus.
+2. Jason sets `harness` with `plugins set` through the live bus. Until row
+ 175 lands, `scripts/mosaic` doesn't dispatch `plugins`, so the command is
+ `node <copy>/packages/cli/src/cli.mjs plugins set --file P --business ID`.
+ `<copy>` is the copy the bus runs from, the pointer's; the bus refuses
+ `human-required` from any other tree. P holds one patch,
+ `{"revision":"<64 hex>","plugins":{"<kind>":<value>|null}}`. The revision
+ comes from `node <copy>/packages/cli/src/cli.mjs plugins --business ID`.
+ A kind with a value is set to it, `null` removes the kind, and a kind the
+ patch doesn't name keeps its setting. Row 175's fixed `mosaic plugins
+ set` replaces this form once that row lands.
3. `pm-on BUSINESS` refuses `not-pending` without a pending pointer and
`harness-unset` unless `harness` is a non-empty list the pointer's copy
loads. It restarts the bus alone, with `--pm` on the same copy, and runs
@@ -451,8 +465,9 @@ copy fails its gate and rolls back. Use two phases instead (row 169, Gitea
puts the phase-1 bus unit back and reruns the phase-1 gate. If that
passes, the log says `pm-on-failed`, the pointer stays pending and the run
exits 1; fix `harness` and run `pm-on` again. If it fails too, both units
- stop, the log says `pm-on-down`, and the run exits 2. Neither touches the
- copy, the Console or the store.
+ stop, the log says `pm-on-down`, and the run exits 2. `pm-on` and a
+ `pm-on-failed` run leave the Console running; `pm-on-down` stops it. None
+ of them touches the copy or the store.
While the pointer is pending, `activate` refuses `pm-pending`. Run `pm-on`
or `rollback`; a rollback from pending installs the old copy with `--pm` and