From 572b58203821b9eac9fa2e7a58c76f2c1074121f Mon Sep 17 00:00:00 2001 From: "K. Isom" Date: Mon, 28 Sep 2026 14:26:52 -0700 Subject: [PATCH] docs: M5c-1 review finding 7 closed: the two flaky tests fixed Co-Authored-By: Claude Opus 5.5 (1M context) --- docs/implementer-log.md | 2 +- docs/plans/M5c1/README.md | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/implementer-log.md b/docs/implementer-log.md index 885c51a..59d74f7 100644 --- a/docs/implementer-log.md +++ b/docs/implementer-log.md @@ -904,7 +904,7 @@ do. | 4 | low | plan (tasks 11, 14) | `bxctl memory sync` showed neither a refused key nor an outage, which spec sections 10 and 13 require. | Review `3d266df`: a shared leaf-locked `Status` (refused keys, Honcho outage, `brokerd` unanswered, log unreadable) in the report; every Honcho runbook entry now says what sync shows; `tests/honcho_status.rs` | | 5 | low | plan (task 08) | One invisible character inside a key split it for the secret rules (masked to a space), so the turn was sent. | Review `bd4cf9f`: the rules also run on the text with those characters deleted; `tests/honcho_decide_hidden.rs` | | 6 | low | plan (task 11) | Any error reading a session log marked the turn failed for good, a passing I/O error included. | Review `5e57cd6`: an error other than NotFound is waited out with its own backoff and status line; a missing or damaged log still fails; `tests/honcho_worker_log.rs` | -| 7 | low | tests (M4a) | gatewayd's `brokerd_closing_first_ends_it_as_no_longer_pending` fails 2 of 10 runs on a loaded talos without any M5c-1 change: the handler can hold the answer's receiver after `Ended`. loopd's `pointers` failed once under load in task 15. | Open; listed in the plan README; tip T52 | +| 7 | low | tests (M4a) | gatewayd's `brokerd_closing_first_ends_it_as_no_longer_pending` fails 2 of 10 runs on a loaded talos without any M5c-1 change: the handler can hold the answer's receiver after `Ended`. loopd's `pointers` failed once under load in task 15. | Review `45be83b`: the handler drops the answer's receiver before it sends `Ended` (a real race: an answer in the gap was reported sent and lost), 10 of 60 failures under load before, 0 of 100 after. Review `e83b53b`: `loopd` prints every startup notice before it binds, and its serve tests wait for "serving on" instead of the socket (`tests/support/serving.rs`); 0 of 120 parallel runs failed. Tip T52 | | 8 | low | Ornith (task 12) | A "before" block did not match after its own earlier edit reordered imports; it anchored on its own line and logged no deviation. | Noted; AGENTS.md rule; tip T54 | | 9 | nit | plan (every task) | Every task said to run `git switch m5c1`, which AGENTS.md forbids and the harness refused. The gate count in every task's stop list did not say it includes the ignored `end_to_end` test, which cost tasks 03, 13 and 15 much of their time. | Tips T50, T51; AGENTS.md now defines the count | diff --git a/docs/plans/M5c1/README.md b/docs/plans/M5c1/README.md index 3c3d893..efb023c 100644 --- a/docs/plans/M5c1/README.md +++ b/docs/plans/M5c1/README.md @@ -98,13 +98,15 @@ owner's Mattermost. - Task 12 decides only; task 13 sends. Task 15 was added for the owner's decision 1 and for the matching of conclusions by peer found while writing task 13. -## Known issue +## Known issue (fixed in review) -`gatewayd`'s `gateway_sock` test `brokerd_closing_first_ends_it_as_no_longer_pending` fails now and -then on a loaded machine (2 of 10 runs without any M5c-1 change, at a load average near 10, on -talos): after `Ended` arrives, the handler can still hold the answer's receiver for a moment. It is -a timing race in the test, not in `memoryd`. Tasks 13 to 15 tell the implementer: if it is the one -test that fails, run the gate once more. To be fixed after M5c-1. +`gatewayd`'s `gateway_sock` test `brokerd_closing_first_ends_it_as_no_longer_pending` failed now +and then on a loaded machine (2 of 10 runs without any M5c-1 change, at a load average near 10, on +talos), and `loopd`'s `pointers` once in task 15. Tasks 13 to 15 told the implementer to run the +gate once more if it was the one test that failed. Both were fixed in the review (review finding +7 in `docs/implementer-log.md`): the first was a race in `gatewayd`'s handler, which said an +approval had ended while it still held the answer's receiver; the second was the serve tests +stopping `loopd` as soon as its socket appeared, before it had printed its startup lines. ## Before hand-over