diff --git a/docs/agents/prompts/client-reliability.md b/docs/agents/prompts/client-reliability.md index 9d6e9785..56c83dc0 100644 --- a/docs/agents/prompts/client-reliability.md +++ b/docs/agents/prompts/client-reliability.md @@ -1,6 +1,14 @@ # Area: Client reliability (client-reliability) -## Current assignment: client-reliability-5 — active probe investigation +## Current assignment: client-reliability-5 — prevent orphaned mirror continuation + +Investigation at0c1dd7e8 found a narrow defect, independently reproduced by dispatch at47953970 (administrative roster only): after last-owner disposal during active primary media, primary error starts1 fresh mirror HEAD(expected0). /tmp/bitvid-dispatch-5-active-url.mjs mirror-disposed --expect-no-obsolete-head exits1 after cleanup/retry; mirror-shared control exits0/healthy,resources0/slots0. Bounded active retention/success caching itself is intentional and not a defect. + +Implement controller-only lifecycle guard before next mirror request: temporary ownership js/ui/urlHealthController.js, focused tests/url-health-lifecycle.test.mjs and your unique integrity/evidence notes. Existing ownership hook is sufficient. Do not change observer/app/shared cache/HEAD-media-HLS-torrent abort,TTLs/limits/mirror order. Ensure cancellation settles with explicit cancelled outcome, no negative cache, no stale UI or newer inflight deletion. Preserve shared/rejoining live owners and ordered mirrors, active healthy cache and normal timeout/retry behavior. No competing writers: storage-cors owns only storage helper; playback-qa product read-only. + +Read current rules/test integrity before edits; retain actual observer/controller/cache regression with controlled external IO and mock clock, no sleeps/retries. Test disposed active failure starts0 mirror HEAD; shared/rejoin owner continues; active success cache,timeout/retry and inflight identity preserved. Every new scenario needs reverted failing mutant. Relevant focused tests/lint/build; coordinate full suite/normal queue through dispatch before expensive run (roster full gate currently underway). QA initially owns shared browser: do not launch browser until dispatch allocates it; request availability and use only your own server/port. No blanket prior-suite reruns for administrative edits. Commit item5, merge unstable (never rebase), unchanged gate/durable ancestry before close. CLI/agent/lander launch must unset inherited NODE_TEST_CONTEXT test transport (operational environment correction, no assertion/gate change). Send blocker/product landing/final events with exact checks/counts/gaps. Dispatch owns preview3000 refresh. No subagents/kit/scheduler/external operations. Continue next actions via dispatch routing under existing owner direction. + +## Archived investigation: client-reliability-5 Interpreter checkpoint2026-10-20 confirms continuing development under existing direction. Claim item5 after non-destructive merge of unstable. Read RULE-CHANGES, KNOWN_ISSUES, PROGRAM, and performance-efficiency-plan Stage3. Items3/4 are completed: queued torrent/URL cancellation shipped; do not repeat their full qualification. diff --git a/fleet/LOG.md b/fleet/LOG.md index 5a783dd4..bc699e62 100644 --- a/fleet/LOG.md +++ b/fleet/LOG.md @@ -67,3 +67,6 @@ - Owner parallel-trial approval relayed by interpreter and recorded verbatim in PROGRAM. Keep item5 client-reliability; add storage-cors-1 offline existing-origin preservation reproduction and playback-qa-1 independent local fallback qualification. Preflight public open PR count0. Inspection confirms helper constructs requested-origin-only PutBucketCors; QA gap documented in Stage3 and prior item4 report. Neither task assumes a new product defect. - Three worker target, disjoint branches/worktrees/files. QA browser first; focused offline work overlaps; full suites/product gates coordinated one at a time. Measure pickup latency, real outputs, gate/browser/tool stalls and durable queue outcomes. No credentialed cloud/live peers/production activity. Launch pending roster landing. + +- Trial intervention: original roster47953970 gate rejected13:28:15 at118th file,1047831-byte log with8877 binary0xff markers. Inherited NODE_TEST_CONTEXT=child-v8 emits Node test protocol; spawnSync default capture cap reproduced as ENOBUFS/SIGTERM. Clean diagnostic reached101 file starts with no failure markers then was intentionally stopped(exit143) to avoid overlapping full gates. Resubmitted unchanged roster13:30:35 with NODE_TEST_CONTEXT unset; log now plain text/no binary markers, normal gate unchanged. Original rejection evidence retained in trial notes. MCP deadline/read fallback and worker wake/claim delay also observed; item5 pickup confirmed13:27:49. +- Item5 independently reproduced disposed active error starting1 obsolete mirror HEAD(expected0); shared-owner control exit0/healthy/resources0. Route same worker to controller-only mirror-continuation guard and focused regression; no active abort or policy changes. Waiting for first roster gate before new worker launch; no launch claimed yet. diff --git a/fleet/RULE-CHANGES.md b/fleet/RULE-CHANGES.md index 74217760..b1e920d0 100644 --- a/fleet/RULE-CHANGES.md +++ b/fleet/RULE-CHANGES.md @@ -9,6 +9,9 @@ a landing rule changes. ## 2026-10-20 +- Item5 narrow fix routed after worker+dispatch reproduction: prevent fresh mirror HEAD after disposed last-owner active-media error; controller+focused URL lifecycle tests only. Preserve bounded active/cache/shared/rejoin/timeout semantics, no active abort. Parallel trial CLI/agent/lander launches clear inherited NODE_TEST_CONTEXT transport; exact gate/assertions unchanged. Original roster gate hit binary capture cap, not identified product assertion. No kit patch. + + - Owner authorizes bounded parallel trial via interpreter: dispatch plus existing client-reliability and two new areas storage-cors/playback-qa. Separate worktrees/disjoint write ownership; no competing app/grid/URL writers. QA initially owns browser; one expensive full gate at a time coordinated through dispatch. Each worker sends read/next-action and timed contention/evidence events. No new external authority or scheduler changes. diff --git a/test_logs/TEST_LOG_2026-10-20_13-31-00_dispatch-trial.md b/test_logs/TEST_LOG_2026-10-20_13-31-00_dispatch-trial.md new file mode 100644 index 00000000..12f4f658 --- /dev/null +++ b/test_logs/TEST_LOG_2026-10-20_13-31-00_dispatch-trial.md @@ -0,0 +1,6 @@ +# Parallel trial setup and item5 reproduction + +- Open PR preflight count0. Roster47953970 normal gate rejected13:28:15 exit1; no product assertion found. Gate log stopped118th file nip17-send-gift-wrap,1047831 bytes,8877 binary markers. Launcher NODE_TEST_CONTEXT=child-v8; host controlled spawnSync output2MiB gives ENOBUFS/SIGTERM/default cap. Original rejection stored here before same-SHA retry overwrites durable result: gate exit1, hashtag-preferences/relay diagnostics tail without failing assertion. +- Clean-env diagnostic npm test with60s/file bound reached101 files with no failure lines; stopped own process group only,exit143, not a passing full-suite claim. Roster resubmitted with env -u NODE_TEST_CONTEXT; unmodified gate running, plain-text log0 binary markers. No kit/test/gate changes. +- env -u NODE_TEST_CONTEXT node /tmp/bitvid-dispatch-5-active-url.mjs mirror-disposed --expect-no-obsolete-head: exit1 after cleanup/retry, obsoleteHeads1 expected0; HEAD1->2 after disposed primary error, resources1->0/slots1->0; final settles/null cache; later retry succeeds. +- Same diagnostic mirror-shared:exit0, live healthy/old checking, shared1 initial HEAD/promise, mirror success/cache/retry reuse, final resources0/slots0. Actual observer/controller/cache; external fetch/media controlled, mock clock. Native decoding/playback/peers/CPU-RSS not qualified.