Four child-path tests in verbs.test.mjs for Dewey's and Filbert's round 1 survivors; the task.create README paragraph rewrapped. Code unchanged. Row 89 (ce104b27) edited tools.mjs and tools.test.mjs after round 1's base, so this round is built oncca5f23e. Mutants 25 of 25 killed; gate 15 of 15 green. Co-Authored-By: Claude Opus 5.5 <[email protected]>
108 lines
5.9 KiB
Markdown
108 lines
5.9 KiB
Markdown
# Row 63, task verbs across the tree (row B), round 2 build (Darkwing)
|
|
|
|
Issue #1556. Round 1 packet: `agents/darkwing/work/queue-63/` (candidate
|
|
manifest `ec28d736…`). Round 1 verdicts: Filbert approved with notes
|
|
(comment 27846), Dewey asked for changes (comment 27847). Sage's word for
|
|
round 2: add Dewey's five proof tests and Filbert's N1 child-path tests,
|
|
code stays as is, both build.md choices stand.
|
|
|
|
Base `cca5f23e`. Round 1 was built on `08941d8b`. Row 89 landed at
|
|
`ce104b27` after that and edits `packages/harness/src/tools.mjs` and
|
|
`packages/harness/tests/tools.test.mjs`, two of the six paths. It adds
|
|
`list_tasks` arguments and a `get_task` tool; none of them is named
|
|
`project`, so round 1's assertion that only `task_create` takes `project`
|
|
still holds. I applied the full diff to a detached worktree of `cca5f23e`
|
|
(it applied cleanly) and ran the mutants and the gate there. My added and
|
|
removed lines in both harness files are the same as round 1's; only the
|
|
context around them moved. No other commit since `08941d8b` touches the
|
|
six paths or `packages/tasks/tests/fake.mjs`.
|
|
|
|
`build.patch` is `git diff --cached --binary cca5f23e` of the six paths.
|
|
Apply it with `git apply --index` to a detached worktree of `cca5f23e`, and
|
|
`sha256sum -c candidate-manifest.sha256` then gives 6/6 OK (checked on a
|
|
fresh worktree).
|
|
|
|
## What changed since round 1
|
|
|
|
`verbs.mjs` and `tree.test.mjs` are byte for byte round 1's. In
|
|
`tools.mjs` and `tools.test.mjs` my lines are round 1's, on row 89's base.
|
|
Two files moved:
|
|
|
|
- `packages/tasks/tests/verbs.test.mjs`: four tests, and two helpers
|
|
gain a parameter. `thenFailRead(trigger, id = 1)` faults the final read
|
|
of task `id`, not always task 1. `tree(t, edit = {})` passes `edit` to
|
|
`world()` with `TREE`, so a tree world can take `thenFailRead`'s fetch.
|
|
- `packages/tasks/README.md`: the `task.create` paragraph is rewrapped.
|
|
Its line 194 was 118 characters (Dewey's non-blocking note). The words
|
|
are the same.
|
|
|
|
## The four tests
|
|
|
|
Each is a child version of a root path the round 1 suite already covered.
|
|
|
|
| Test | What it pins | From |
|
|
|---|---|---|
|
|
| a verb and a create in the child record the final read of the child's board | the final read after a create and after a verb on a child task has an etag, so it read the child's project and view and didn't fall back | Dewey's test 1 |
|
|
| a create in the child whose final read fails records the child's todo bucket | the fallback snapshot's bucket is the child's `todo`, its etag is null, and the next tick finds no external change on the new task | Dewey's test 2 and Filbert's Q2 |
|
|
| a lost answer in the child is settled by a re-read of the child's board | a state move and a close that each landed but answered 500 succeed, with the child's `in-progress` and then `done` bucket in the snapshot, and nothing is retried | Dewey's test 3 and Filbert's Q1 |
|
|
| every related task is read before authority, not only the first | a schedule whose second relation names the wrong project refuses `task-moved` and writes nothing | Dewey's test 4 |
|
|
|
|
Two of Dewey's and Filbert's tests asked for the same thing, so I merged
|
|
each pair into one test. Sage's message said five proof tests.
|
|
`proof-tests.mjs` holds four, which kill Dewey's five survivors. The
|
|
four here kill those five and Filbert's four bucket survivors, two of
|
|
which are the same sites as Dewey's.
|
|
|
|
One change from the proof tests: `tree()` makes a task in the
|
|
grandchild before the start, and the start's reconcile records it as
|
|
`task.changed.external`. Filbert's Q2 expected no external change after
|
|
the tick, so the test asserts the only one is that grandchild task's,
|
|
not the count. Dewey's `treeWith` helper isn't needed: `tree(t, edit)`
|
|
does the same with the grandchild in place.
|
|
|
|
## Mutants
|
|
|
|
`mutants.sh` here is round 1's 18, then 7 more: one for each survivor in
|
|
Dewey's and Filbert's round 1 runs, each sending a child path back to the
|
|
root's project or view, or cutting the relation read to the first
|
|
relation. It ran with a copy of
|
|
`agents/darkwing/work/queue-59-review/r1/mut.mjs` (sha256 `a1ed6bca…`,
|
|
round 1's helper) on the rebased tree, 22:35:31Z to 22:37:06Z, after a
|
|
check that exits on another seat's gate or mutant run. **25 of 25
|
|
killed** (`mutants.txt`). Every file was restored and still matches the
|
|
manifest.
|
|
|
|
Each of the 7 dies in the test written for it, and in no other:
|
|
|
|
| Mutant | Killed by |
|
|
|---|---|
|
|
| `located-first-only` | every related task is read before authority, not only the first |
|
|
| `step-reread-root` | a lost answer in the child is settled by a re-read of the child's board |
|
|
| `handle-final-root` | a verb and a create in the child record the final read of the child's board |
|
|
| `create-final-root` | a verb and a create in the child record the final read of the child's board |
|
|
| `create-fallback-root-todo` | a create in the child whose final read fails records the child's todo bucket |
|
|
| `read-done-root` | a lost answer in the child is settled by a re-read of the child's board |
|
|
| `close-done-root` | a lost answer in the child is settled by a re-read of the child's board |
|
|
|
|
Round 1's 18 are still killed, some now by more tests than before.
|
|
|
|
## Gate
|
|
|
|
`gate.sh`, run sequentially in `~/darkwing-scratch/r63/wt2` (`cca5f23e`
|
|
plus this patch, `node_modules` symlinked), 22:37:42Z to 22:40:57Z, after
|
|
the same busy check (`gate-summary.txt`). All 15 suites exited 0, 0
|
|
skipped:
|
|
|
|
- node: tasks 84 (round 1's 80 plus the four tests), harness 65, business
|
|
60, bus 108, cli 120, webui 86. Round 1 ran tasks, harness, business and
|
|
bus. I added cli and webui because both import from `packages/tasks`.
|
|
Harness and bus counts are row 89's and the rows before it; the harness
|
|
count doesn't move for this row, since its assertions sit inside an
|
|
existing test;
|
|
- scripts: auth 15, conductor 17, config 24, discord 66,
|
|
extension-package 18, foundation 44, queue 27, release 14, task 26
|
|
(`DOCKER_HOST` at a dead socket).
|
|
|
|
test-release left an empty `wt2_default` network of mine, and I removed
|
|
it.
|