Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
02ee7f6403
commit
c66c7fb71d
1 file changed
+165
@@ -0,0 +1,165 @@
|
|||||||
|
# Follow-ups from the row 146, 142 and 147 reviews (2026-10-15)
|
||||||
|
|
||||||
|
Status: written by Sage, lead. It follows `docs/plans/BRIEF-TEMPLATE.md`,
|
||||||
|
one `##` heading per row. Sources: Filbert's row 146 round 1 review
|
||||||
|
(comment 28641, `agents/filbert/work/queue-146/r1/body.md`, notes 1 and 2),
|
||||||
|
row 142 round 3 review (comment 28652) and row 147 round 1 review
|
||||||
|
(comment 28643, `agents/filbert/work/queue-147/r1/body.md`, notes 1, 2
|
||||||
|
and 4). Each note was non-blocking; these rows close them.
|
||||||
|
|
||||||
|
## Tests pin where a launch notice is routed and how talk prints it with a reply
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
Two paths from rows 146 and 142 work but no test holds them.
|
||||||
|
|
||||||
|
1. Filbert's mutant M1 routes the launch notice to the target instead of
|
||||||
|
`launch.by` (`#notice` in `packages/bus/src/broker.mjs`). It survives
|
||||||
|
launch-notice 7/7 and runner 24/24, because `message.receive` selects on
|
||||||
|
`to_role`. The only effect is the evidence: the notice's `routed` row
|
||||||
|
shows no `holder_run` while `launch.by` holds the role, and the Console's
|
||||||
|
waiting lists read those rows.
|
||||||
|
2. No test has one `mosaic talk` print row 146's "isn't running" line, then
|
||||||
|
receive a message that isn't the reply, then the reply. Filbert probed it
|
||||||
|
by hand on the row 142 candidate and it works: talk printed `sent`, the
|
||||||
|
waiting line, then only the reply, did one `message.read`, and the other
|
||||||
|
message stayed unread. Row 146's test uses a stopped role with no
|
||||||
|
incoming messages and row 142's tests use a running role.
|
||||||
|
|
||||||
|
### Owner and reviewer
|
||||||
|
|
||||||
|
- Owner: Dewey.
|
||||||
|
- Reviewer: Filbert.
|
||||||
|
|
||||||
|
### Files owned
|
||||||
|
|
||||||
|
- `packages/bus/tests/launch-notice.test.mjs`
|
||||||
|
- `packages/cli/tests/verbs.test.mjs`
|
||||||
|
|
||||||
|
### What ships
|
||||||
|
|
||||||
|
- In launch-notice test 1, after the second send with `launch.by` running,
|
||||||
|
an assertion that the latest notice's `routed` delivery has
|
||||||
|
`holder_run` equal to `launch.by`'s run. M1 must fail it.
|
||||||
|
- A verbs test: `talk` to a stopped role while `launch.by` runs prints the
|
||||||
|
waiting line once, skips a non-reply that arrives first and leaves it
|
||||||
|
unread, then prints the reply and exits 0. A mutant that drops row 142's
|
||||||
|
reply filter or row 146's `waitingLines` write must fail it.
|
||||||
|
- Mutants for both, with the kill table in BUILD.md. No product code
|
||||||
|
changes.
|
||||||
|
|
||||||
|
### Out of scope
|
||||||
|
|
||||||
|
Any change to `broker.mjs` or `cli.mjs`. Whether `waiting` says the target
|
||||||
|
is a launch instance is the next row.
|
||||||
|
|
||||||
|
### Gate
|
||||||
|
|
||||||
|
- `after` rows 146 and 142.
|
||||||
|
- Filbert approves on the row's issue naming the candidate manifest.
|
||||||
|
- bus and cli suites and every `scripts/test-*.sh` green on Sage's gate at
|
||||||
|
the landing target.
|
||||||
|
|
||||||
|
## A message to a role launch.by can't launch says so at once
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
Row 146 tells `launch.by` about every message to a stopped role. For a
|
||||||
|
target that isn't in the business's `launch.instances` (cto in a business
|
||||||
|
whose launch block doesn't list it), `launch.by` can't launch it, yet
|
||||||
|
`mosaic talk` prints "chief has been told" as if a launch may follow.
|
||||||
|
chief-of-staff's contract makes chief reply with why not, so the human
|
||||||
|
learns it one round trip late. Filbert's row 146 note 2.
|
||||||
|
|
||||||
|
### Owner and reviewer
|
||||||
|
|
||||||
|
- Owner: Dewey.
|
||||||
|
- Reviewer: Filbert.
|
||||||
|
|
||||||
|
### Files owned
|
||||||
|
|
||||||
|
- `packages/bus/src/broker.mjs`: `#waiting` and `#notice` only
|
||||||
|
- `packages/bus/tests/launch-notice.test.mjs`
|
||||||
|
- `packages/bus/README.md`
|
||||||
|
- `packages/cli/src/cli.mjs`: `waitingLines` only
|
||||||
|
- `packages/cli/tests/verbs.test.mjs`
|
||||||
|
- `docs/TOOLS.md`
|
||||||
|
|
||||||
|
### What ships
|
||||||
|
|
||||||
|
- `waiting` gains a boolean field saying whether the target is one of
|
||||||
|
`launch.instances`. Name and shape are Dewey's call, written in BUILD.md;
|
||||||
|
the field is additive, so older readers of `waiting` keep working.
|
||||||
|
- When the target isn't launchable, the broker still stores the message,
|
||||||
|
and the notice text to `launch.by` says the target isn't in its launch
|
||||||
|
block. Whether `launch.by` is told at all in that case is Dewey's call,
|
||||||
|
argued in BUILD.md with the contract text it relies on.
|
||||||
|
- `waitingLines` prints a line that says the role isn't in the launch
|
||||||
|
block, instead of "has been told".
|
||||||
|
- Tests for both cases, in and out of `launch.instances`, and mutants.
|
||||||
|
|
||||||
|
### Out of scope
|
||||||
|
|
||||||
|
Any schema change. Any change to which roles `launch.by` may launch, or to
|
||||||
|
the launch block's validation.
|
||||||
|
|
||||||
|
### Gate
|
||||||
|
|
||||||
|
- `after` the row above, which owns the same test files.
|
||||||
|
- Filbert approves on the row's issue naming the candidate manifest.
|
||||||
|
- bus, cli, business and webui suites and every `scripts/test-*.sh` green
|
||||||
|
on Sage's gate at the landing target.
|
||||||
|
|
||||||
|
## project init cleans up after a failure and refuses a nested records repo
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
Filbert's row 147 probe found two gaps and one untested refusal.
|
||||||
|
|
||||||
|
1. A failed init can't be retried. When `git commit` fails, init refuses
|
||||||
|
`project-git` but leaves `.git`, the layout and `project.json` with no
|
||||||
|
commit. A second init refuses `project-not-empty`, check reports the
|
||||||
|
project valid, and the writer refuses `project-dirty` because nothing is
|
||||||
|
tracked. The README doesn't say what to do.
|
||||||
|
2. One project's `repo` may sit inside another project's `root`.
|
||||||
|
`projectRepo` checks the overlap only against the same project's `root`,
|
||||||
|
so init accepted a records repository nested in another code checkout.
|
||||||
|
3. Mutant Q2 removes the human-author refusal and the project test still
|
||||||
|
passes 14/14.
|
||||||
|
|
||||||
|
### Owner and reviewer
|
||||||
|
|
||||||
|
- Owner: Rocko.
|
||||||
|
- Reviewer: Filbert.
|
||||||
|
|
||||||
|
### Files owned
|
||||||
|
|
||||||
|
- `packages/project/src/` and `packages/project/tests/`
|
||||||
|
- `packages/project/README.md`
|
||||||
|
- `packages/business/src/business.mjs`: `projectRepo` only
|
||||||
|
- `packages/business/tests/project-repo.test.mjs`
|
||||||
|
- `docs/TOOLS.md`
|
||||||
|
|
||||||
|
### What ships
|
||||||
|
|
||||||
|
- Init removes what it created when a later step fails, and only that: a
|
||||||
|
directory that existed and was empty before init stays. A test makes
|
||||||
|
`git commit` fail and then runs init again successfully.
|
||||||
|
- `project check` refuses a project whose records repository has no
|
||||||
|
commit, with its own code.
|
||||||
|
- `projectRepo` refuses a `repo` inside any declared project's `root`, not
|
||||||
|
only its own, with a test.
|
||||||
|
- A test that the writer refuses a human-authored record path, which Q2
|
||||||
|
must fail.
|
||||||
|
- Mutants for each change.
|
||||||
|
|
||||||
|
### Out of scope
|
||||||
|
|
||||||
|
Any change to the project layout, the record schemas or the `spec/` rule.
|
||||||
|
|
||||||
|
### Gate
|
||||||
|
|
||||||
|
- `after` row 147.
|
||||||
|
- Filbert approves on the row's issue naming the candidate manifest.
|
||||||
|
- project, business and cli suites and every `scripts/test-*.sh` green on
|
||||||
|
Sage's gate at the landing target.
|
||||||
Reference in new issue
Block a user