Manifest 4387c8d5. Rebase only: same added and removed lines, three files re-digested after rows 58, 60 and 59. Gate green, round 1 mutants all killed. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -1,3 +1,97 @@
|
|||||||
|
# Row 67 (#1560): decisions read follow-up, round 2
|
||||||
|
|
||||||
|
Filbert, 2026-10-12. Brief: `docs/plans/2026-10-11_decisions-read-follow-up.md`,
|
||||||
|
"Decisions read follow-up: seen-then-resolve, list-before-503 and full-row
|
||||||
|
tests" (blob 7674ff40, unchanged). Darkwing and Dewey review. Sage commits
|
||||||
|
after the gate. Nothing in the candidate is committed, staged or pushed.
|
||||||
|
|
||||||
|
Base f38b7f46, origin/refactor's tip when I rebased. `build.patch` applies
|
||||||
|
there with `git apply --index`, and `candidate-manifest.sha256` pins all 4
|
||||||
|
files after the patch. Round 1 was manifest `8959e615…7369` on 970ef729,
|
||||||
|
approved by Dewey (27452) and Darkwing (27627).
|
||||||
|
|
||||||
|
## Round 2: rebase only
|
||||||
|
|
||||||
|
Sage set the scope: a rebase onto the current tip, the merged hunks named
|
||||||
|
here, a fresh manifest, and a digest re-approval. Nothing new goes in, so the
|
||||||
|
round 1 description, mutants and questions below still apply. Dewey's N1 (an
|
||||||
|
assertion that test 4's new decisions are listed) is not folded in; it stays
|
||||||
|
a follow-up.
|
||||||
|
|
||||||
|
### What landed on the manifest paths
|
||||||
|
|
||||||
|
Since 970ef729, three rows changed 3 of the 4 files.
|
||||||
|
`packages/bus/tests/decisions.test.mjs` is untouched.
|
||||||
|
|
||||||
|
- Row 58 (aaf87213): the bus README, `broker.mjs` and webui `bus.test.mjs`.
|
||||||
|
- Row 60 (1771bf98): the bus README, `broker.mjs` and webui `bus.test.mjs`.
|
||||||
|
- Row 59 (a8512007): the bus README and `broker.mjs`.
|
||||||
|
|
||||||
|
### Digest check
|
||||||
|
|
||||||
|
Round 1's patch no longer applies plain (README line 205), as Darkwing found.
|
||||||
|
It applies to f38b7f46 with `git apply --index --3way` with no conflicts.
|
||||||
|
I compared the round 1 and round 2 patches:
|
||||||
|
|
||||||
|
- The added and removed lines are byte-identical (106 lines each).
|
||||||
|
- The hunk headers moved: README 205 to 235, `broker.mjs` 837 to 861, webui
|
||||||
|
`bus.test.mjs` 163 to 191. The `decisions.test.mjs` hunks are unchanged.
|
||||||
|
- One context line differs, below.
|
||||||
|
|
||||||
|
`decisions.test.mjs` keeps its digest (`9477cfa7…`). The other three have new
|
||||||
|
digests because their bases changed.
|
||||||
|
|
||||||
|
### Merged hunks
|
||||||
|
|
||||||
|
Line numbers are in the round 2 tree.
|
||||||
|
|
||||||
|
- `packages/bus/README.md`, lines 235–243: the "Every row is…" sentence is
|
||||||
|
rewritten as in round 1. In round 1 the hunk's last context line was the
|
||||||
|
`## Shared reads and adapter boundary` heading. Row 60 has since put its
|
||||||
|
`credentials` paragraph between the two, so that paragraph's first line
|
||||||
|
is the context now. The sentence and the paragraph share no lines.
|
||||||
|
- `packages/bus/src/broker.mjs`, lines 864–867: the comment above
|
||||||
|
`case 'decisions'` (line 868). Row 59's `agents` block ends above it
|
||||||
|
(line 852 on), and row 60's `case 'credentials'` follows it (line 889).
|
||||||
|
Neither touches the comment or the case.
|
||||||
|
- `packages/webui/tests/bus.test.mjs`, lines 194–198: the three no-bus
|
||||||
|
requests still follow the `/api/bus/agents` not-configured check, inside
|
||||||
|
"bus refusals map to statuses…". Row 58 and row 60's additions sit above.
|
||||||
|
|
||||||
|
### Gate (round 2)
|
||||||
|
|
||||||
|
Run in a worktree of f38b7f46 with the round 2 patch staged and
|
||||||
|
`node_modules` linked, in sequence, with `TMPDIR` in my scratch and
|
||||||
|
`DOCKER_HOST` pointed at a missing socket, 2026-10-12T01:47:57Z to 01:52:03Z.
|
||||||
|
|
||||||
|
- Packages: webui 62/0, bus 95/0, cli 114/0, control-board 124/0.
|
||||||
|
- All nine `scripts/test-*.sh` exit 0: auth 15, conductor 17, config 24,
|
||||||
|
discord 66, extension-package 18, foundation 44, queue 27, release 4,
|
||||||
|
task 26. `test-queue` skipped `verify` and `render --check`, because the
|
||||||
|
worktree isn't the queue's canonical root. `test-release` skipped its
|
||||||
|
Docker cases without a daemon.
|
||||||
|
- Afterwards `git status` showed only the four staged paths and the
|
||||||
|
`node_modules` link, and the tree checked 4/4 against the manifest.
|
||||||
|
|
||||||
|
### Mutants (round 2)
|
||||||
|
|
||||||
|
I reran round 1's nine mutants (`mut/run.mjs`) on the round 2 tree,
|
||||||
|
2026-10-12T01:52Z to 01:53Z. All nine are killed, each by the same test as in
|
||||||
|
round 1. The bus suite now has 95 tests and the webui file 9, so the counts
|
||||||
|
read 94/1, 92/3 for `view-blocking-raw` and 8/1 for `web-503-first`, where
|
||||||
|
round 1 read 80/1, 78/3 and 7/1. One edit changed: row 59 added a second
|
||||||
|
`blocking: !!d.blocking,` in the `agents` read (`broker.mjs` line 930), and
|
||||||
|
the runner refuses a target that isn't unique. So `view-blocking-raw` ran
|
||||||
|
from a copy of the runner that anchors on its whole line (line 297, inside
|
||||||
|
the decisions view), and the edit is the same. After each run `git diff` was
|
||||||
|
unchanged, and the tree checked 4/4 against the manifest afterwards.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
The round 1 packet follows unchanged: the description, files, round 1
|
||||||
|
mutants, round 1 gate and questions. Its base and line numbers are round 1's.
|
||||||
|
|
||||||
|
|
||||||
# Row 67 (#1560): decisions read follow-up, round 1
|
# Row 67 (#1560): decisions read follow-up, round 1
|
||||||
|
|
||||||
Filbert, 2026-10-11. Brief: `docs/plans/2026-10-11_decisions-read-follow-up.md`,
|
Filbert, 2026-10-11. Brief: `docs/plans/2026-10-11_decisions-read-follow-up.md`,
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
diff --git a/packages/bus/README.md b/packages/bus/README.md
|
diff --git a/packages/bus/README.md b/packages/bus/README.md
|
||||||
index 5b57b7fc..fcd0f69e 100644
|
index 08be6307..11489360 100644
|
||||||
--- a/packages/bus/README.md
|
--- a/packages/bus/README.md
|
||||||
+++ b/packages/bus/README.md
|
+++ b/packages/bus/README.md
|
||||||
@@ -205,7 +205,9 @@ decisions. It takes `{list}`, nothing else. `roles` lists the business's open
|
@@ -235,7 +235,9 @@ decisions. It takes `{list}`, nothing else. `roles` lists the business's open
|
||||||
decisions routed to a role, never to the human, oldest first. `recent` lists
|
decisions routed to a role, never to the human, oldest first. `recent` lists
|
||||||
its last `RECENT` (50) closed decisions of every route, newest close first,
|
its last `RECENT` (50) closed decisions of every route, newest close first,
|
||||||
each with `closed`, the closing `decision_events` row. Every row is the
|
each with `closed`, the closing `decision_events` row. Every row is the
|
||||||
@@ -12,12 +12,12 @@ index 5b57b7fc..fcd0f69e 100644
|
|||||||
+raise's `action.allowed` event, which `trail` also gives. So the lists add no
|
+raise's `action.allowed` event, which `trail` also gives. So the lists add no
|
||||||
data a reader couldn't already read one id at a time; they add the listing.
|
data a reader couldn't already read one id at a time; they add the listing.
|
||||||
|
|
||||||
## Shared reads and adapter boundary
|
`credentials` (row 60, #1549) is also for human and reader sessions only; a
|
||||||
diff --git a/packages/bus/src/broker.mjs b/packages/bus/src/broker.mjs
|
diff --git a/packages/bus/src/broker.mjs b/packages/bus/src/broker.mjs
|
||||||
index 84db8799..07f35114 100644
|
index 5e86c60c..5acc8329 100644
|
||||||
--- a/packages/bus/src/broker.mjs
|
--- a/packages/bus/src/broker.mjs
|
||||||
+++ b/packages/bus/src/broker.mjs
|
+++ b/packages/bus/src/broker.mjs
|
||||||
@@ -837,7 +837,10 @@ export class Broker {
|
@@ -861,7 +861,10 @@ export class Broker {
|
||||||
return this.#trail(s, identifier(a.subject));
|
return this.#trail(s, identifier(a.subject));
|
||||||
}
|
}
|
||||||
// Row 57 (#1546): the Inbox's "Routed to roles" and "Recent" lists, for human and
|
// Row 57 (#1546): the Inbox's "Routed to roles" and "Recent" lists, for human and
|
||||||
@@ -143,10 +143,10 @@ index 6626460b..069e2ef4 100644
|
|||||||
|
|
||||||
test("a role session can't list decisions, so it can't read another role's open decisions", (t) => {
|
test("a role session can't list decisions, so it can't read another role's open decisions", (t) => {
|
||||||
diff --git a/packages/webui/tests/bus.test.mjs b/packages/webui/tests/bus.test.mjs
|
diff --git a/packages/webui/tests/bus.test.mjs b/packages/webui/tests/bus.test.mjs
|
||||||
index 2d9ca6ba..86fae610 100644
|
index 46d8016c..a243ae7e 100644
|
||||||
--- a/packages/webui/tests/bus.test.mjs
|
--- a/packages/webui/tests/bus.test.mjs
|
||||||
+++ b/packages/webui/tests/bus.test.mjs
|
+++ b/packages/webui/tests/bus.test.mjs
|
||||||
@@ -163,6 +163,11 @@ test('bus refusals map to statuses and never carry a path or a stack', async t =
|
@@ -191,6 +191,11 @@ test('bus refusals map to statuses and never carry a path or a stack', async t =
|
||||||
assert.deepEqual([shape.status, (await shape.json()).error], [502, 'invalid-response']);
|
assert.deepEqual([shape.status, (await shape.json()).error], [502, 'invalid-response']);
|
||||||
const unset = await fetch(`http://127.0.0.1:${none.address().port}/api/bus/agents`);
|
const unset = await fetch(`http://127.0.0.1:${none.address().port}/api/bus/agents`);
|
||||||
assert.deepEqual([unset.status, (await unset.json()).error], [503, 'not-configured']);
|
assert.deepEqual([unset.status, (await unset.json()).error], [503, 'not-configured']);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
1d46e3f0fd0ccdb3c5a9cb6159b0f1a7031757983297d612f78209dd20740c93 packages/bus/README.md
|
3d3aa48934df0c929889fcb4f5028eb650a7ddb29a9cab8d6f911e5369037dfb packages/bus/README.md
|
||||||
9fecd3d888ce86c113b6176eb86902bdd5f606965f1c0b5c90d59016f4f6cd92 packages/bus/src/broker.mjs
|
8c53efeb3b2398882da13634f109da936546c1bafe133150c1f5a0a4e446be7c packages/bus/src/broker.mjs
|
||||||
9477cfa7411fc46b4be4c960942b9f5c912bb050b1119a635ab161d321b77b2a packages/bus/tests/decisions.test.mjs
|
9477cfa7411fc46b4be4c960942b9f5c912bb050b1119a635ab161d321b77b2a packages/bus/tests/decisions.test.mjs
|
||||||
10bc41d8a332027aa902da836ad7644cdc09ef8be26a2b8bab106c5f365e3da1 packages/webui/tests/bus.test.mjs
|
42285ef5ae5ec5464c814bbccab0205058b6c51019d4a768754caf441bb33c2c packages/webui/tests/bus.test.mjs
|
||||||
|
|||||||
Reference in New Issue
Block a user