feat(board): session attention, Discord rows, task attribution and relaunch activity (rows 18, 22, #1511, #1512)

One cumulative control-board, webui and seat state. The four rows edit the
same files (scan.mjs, page.html, README.md, app.js), so they land together,
each on its own receipt:

- Row 18, Discord connector rows on the board (#1509): R3 approved by
  Darkwing and Dewey, Gitea comment 26257, manifest 254403b8. Jason
  accepted the visual test.
- Row 22, board attention status (#1503): Filbert approved R1, comment
  26248, manifest e40b58ec; restart receipt 26249.
- #1511, task attribution (row 6 code phase): R2 approved by Filbert and
  Dewey, manifest d4c96395. docs/TOOLS.md carries the approved --by usage
  line (tools-usage.patch 86bcba3c).
- #1512, relaunch activity (row 6 pilot): R1 approved by Darkwing and
  Dewey, candidate manifest 47769fad. All seven source files match it.

Row 16, internal development bootstrap (#1510): the seven files outside
shared records match Filbert's R1 pins, receipt 26204 (agents/researcher/*,
scripts/test-darkwing-launch.mjs, the bootstrap plan).

packages/webui/src/public/app.js is committed at its #1512 R1 pin ce7d79a4.
The working copy holds Dewey's unreviewed return-flow candidate on top of
that, and it stays uncommitted.

Also: the four row briefs and Darkwing's evidence records under
agents/darkwing/work, including the 2026-09-26 tree manifest and the #1512
re-run against 21e3e908. Serial acceptance command: 397/397, three runs.
The failures that only show when tests run concurrently are in #1509 engine
tests, and they reproduce on clean HEAD.

Suites on the exact staged tree: config 24, task 90, foundation 43,
conductor 17, release 14, auth 15, discord 63; package union 397/397
(serial); test-darkwing-launch 5/5.

Shared records (BUILD-LOG, QUEUE, CURRENT, DEFERRED, SESSIONS, AGENTS.md,
agents/README.md) follow in Sage's records commit.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-09-26 14:54:18 -05:00
co-authored by Claude Opus 5.5
parent 21e3e908b6
commit af4203ca92
67 changed files with 2417 additions and 78 deletions
@@ -0,0 +1,17 @@
{
"issue": 1503,
"candidate": "/tmp/board-attention-r1-q_924ksh",
"files": [
"AGENTS.md",
"packages/control-board/src/scan.mjs",
"packages/control-board/README.md",
"packages/control-board/tests/scan.test.mjs",
"packages/control-board/tests/serve.test.mjs",
"packages/control-board/tests/attention.test.mjs",
"packages/control-board/tests/attention-flow.test.mjs",
"packages/webui/tests/fixture.mjs",
"docs/plans/2026-09-13_board-attention-status.md"
],
"manifestSha256": "e40b58ecb6844d407ba776dcde8f19ad21c0b78076ca1f9b3d96b0bb1c852405",
"testsPassed": 144
}
@@ -0,0 +1,14 @@
{
"at": "2026-09-14T00:19:32.409806+00:00",
"backendPid": 3204655,
"health": "ok",
"researcher": {
"agent": "researcher",
"project": "mosaic-stack",
"alive": true,
"state": "idle",
"waitingOnYou": false,
"lastActivity": "2026-09-13T21:19:57.102Z"
},
"fiveAgentProcessesUnchanged": true
}
@@ -0,0 +1,46 @@
{
"at": "2026-09-14T00:19:11.579013+00:00",
"ownerAuthorized": true,
"oldPid": 1265952,
"newPid": 3204655,
"command": [
"/usr/bin/node",
"packages/control-board/src/cli.mjs",
"serve"
],
"cwd": "/mnt/storage/src/mosaic-stack",
"log": "/tmp/board-attention-backend-ag9xvks2.log",
"agentProcessesBefore": {
"default/darkwing": [
[
"2733924",
"12863634"
]
],
"default/dewey": [
[
"934346",
"466065"
]
],
"default/filbert": [
[
"72183",
"100870"
]
],
"default/researcher": [
[
"173699",
"66404285"
]
],
"mosaic-fleet/rocko": [
[
"90599",
"128275"
]
]
},
"gracefulExitObserved": true
}
@@ -0,0 +1,28 @@
# Independent acceptance checklist, row 18
Darkwing reviews Filbert's implementation without editing its source candidate.
Dewey reviews visible connector presentation. No live connector manipulation.
- Discovery accepts only safe matching binding name/seat from private regular
files, never dereferences a token path and never serializes private fields.
- Path traversal, symlinked binding/runtime/session paths and malformed records
cannot cause arbitrary reads or an actionable/live row.
- No owner, malformed owner, dead PID, missing identity, reused PID and boot
mismatch are non-live. A positively matching live process is live.
- STOP presence is visible as braked independently of process liveness. Its
contents are not read or exposed; no STOP or lock is created or changed.
- Ordinary completed messages remain idle. No false human attention regression.
- Connector rows cannot borrow a native agent's registration for replies.
Exercise replyToRow and HTTP using a fake executable hook; every connector
attempt must be refused before that hook runs, including with forged tmux
registration. Normal-agent reply tests must still pass.
- Both existing board and WebUI distinguish the connector and brake state and
omit reply controls. Preserve escaping, including hostile binding fixtures.
- Discovery errors disclose no private JSON fields or raw contents. One bad
binding must not silently manufacture a healthy row.
- Candidate pins match before and after tests. Existing dirty attention changes
remain intact; no unrelated source integration or live operation is inferred.
After source approval, measure the real row read-only. Offline/braked behavior
uses isolated fixtures unless the operator separately approves a live-service
transition. Board replacement is its own protected gate.
@@ -0,0 +1,23 @@
{
"at": "2026-09-14T13:51:10.530662+00:00",
"backendPid": 3769124,
"health": "ok",
"row": {
"agent": "sage (discord: shared-signals)",
"project": "fleet",
"state": "idle",
"alive": true,
"connector": {
"binding": "shared-signals",
"braked": false,
"ownerState": "live",
"alive": true
},
"task": "Discord connector",
"taskSource": "connector"
},
"replyStatus": 409,
"replyError": "board replies are disabled for Discord connectors",
"fiveAgentPaneIdentitiesUnchanged": true,
"connectorServiceIdentityUnchanged": true
}
@@ -0,0 +1,2 @@
{"at": "2026-09-14T13:50:24.078636+00:00", "event": "owner-authorized-restart-intent", "oldPid": 3204655, "agents": {"default/darkwing": [["2733924", "12863634"]], "default/dewey": [["934346", "466065"]], "default/filbert": [["72183", "100870"]], "default/researcher": [["173699", "66404285"]], "mosaic-fleet/rocko": [["90599", "128275"]]}, "connectorService": [3022843, "67887873"], "manifest": "254403b89c0a2330da53e8dbad1cbeba3b1b06cf4f3efddc18451e04cb78f6de"}
{"at": "2026-09-14T13:50:24.503231+00:00", "event": "replacement-started", "oldExitedGracefully": true, "newPid": 3769124, "log": "/tmp/discord-board-backend-ovk_cahk.log"}
@@ -0,0 +1,18 @@
{
"at": "2026-09-14T01:10:19.375709+00:00",
"candidate": "/tmp/discord-board-r1-KbMrGQWF",
"manifestSha256": "5c92acc90d202727d790f3fb8d74387db1c9e5c3e43d4f4b56b40e5ae503a56a",
"verdict": "CHANGES REQUIRED",
"independentSerializedTests": 320,
"finding": {
"id": "R1-B1",
"severity": "P2",
"file": "packages/control-board/src/discord.mjs",
"issue": "STOP metadata access errors collapse to absence, falsely projecting not braked",
"reproduction": "Synthetic journal directory contains STOP, chmod directory to 000 as uid 1000, inspectDiscord returns braked:false, ownerState:invalid, alive:false. Restore permissions and remove fixture.",
"expected": "braked:null/unknown when STOP existence cannot be established; false only for verified absence",
"required": "Distinguish missing metadata from access errors and add non-root unreadable-directory regression."
},
"ux": "Dewey APPROVE on exact R1; three independent serialized browser tests passed, source/automation limitations retained",
"parallelQualification": "Two author concurrent frozen timeouts remain unresolved and are not green; serialized independent run passed."
}
@@ -0,0 +1,7 @@
{
"candidate": "R2",
"syntheticOnly": true,
"taskContainsEnvelopeAuthorId": true,
"taskContainsEnvelopeMessageId": true,
"taskSource": "first-user-message"
}
@@ -0,0 +1,18 @@
{
"at": "2026-09-14T01:26:42.688410+00:00",
"candidate": "/tmp/discord-board-r3-U9vVrlQu",
"manifestSha256": "254403b89c0a2330da53e8dbad1cbeba3b1b06cf4f3efddc18451e04cb78f6de",
"reviewer": "Darkwing",
"backendVerdict": "APPROVE AS SOURCE",
"verified": "Nine working/frozen pins, exact three-file R2-to-R3 delta, inherited attention pins and full serialized six-package suite 322/322",
"findingsClosed": [
"R1-B1: inaccessible STOP is unknown, non-root regression passes",
"R2-B2: canonical routing envelope no longer becomes connector Task; ordinary fallback retained"
],
"limitations": [
"No generalized transcript redaction",
"R1 concurrent combined frozen timeouts unresolved/not green",
"No live observation, backend restart, connector change or publication in this review"
],
"uxGate": "Await exact R3 confirmation from Dewey via agent-send"
}
@@ -0,0 +1,20 @@
{
"at": "2026-09-14T01:28:17.695Z",
"sourceApproval": 26257,
"readOnly": true,
"agent": "sage (discord: shared-signals)",
"project": "fleet",
"state": "idle",
"alive": true,
"connector": {
"binding": "shared-signals",
"braked": false,
"ownerState": "live",
"alive": true
},
"task": "Discord connector",
"taskSource": "connector",
"registrationAbsent": true,
"ownerMatchesService": true,
"discoveryErrorCount": 0
}
@@ -0,0 +1,9 @@
{
"at": "2026-09-14T00:50:35.339Z",
"sourceSha256": "dfbb7ab9374c0ac9fafa0503f495abd938f499f5d6227233de03a60ea3022927",
"fixture": "connector row with forged native registration",
"status": 200,
"fakeTransportCalls": 1,
"realTransportCalls": 0,
"gatePassed": false
}
@@ -0,0 +1,25 @@
{
"observedAt": "2026-09-13T19:56:18.961314+00:00",
"issue": 1510,
"ownerAuthorizedLiveSmoke": true,
"researcher": [
{
"session": ".pi/state/researcher/sessions/2026-09-13T19-52-28-745Z_01a09c54-0b48-7154-addd-8fdce875aa4a.jsonl",
"entryId": "64b15fd5",
"timestamp": "2026-09-13T19:52:43.079Z",
"response": "RESEARCHER_NATIVE_SMOKE_OK",
"entrySha256": "d9cbaa5ea640d2b858a86b2fa24d3240b351d9383ffaee9721dd86fcd080c329"
}
],
"rocko": {
"newLaunch": "refused by existing native launch lock",
"existingPid": 3707667,
"cwd": "/mnt/storage/src/mosaic-stack",
"nativeContextVerified": true,
"sonnetFlagVerified": true,
"socket": "mosaic-fleet",
"newModelResponseTested": false
},
"existingProcessesRestarted": false,
"homeLaunchersModified": false
}
@@ -0,0 +1,19 @@
{
"issue": 1510,
"candidate": "/tmp/internal-team-r1-i9t21yzr",
"manifestSha256": "23a27014ce6f04ce8187d8495b2efe62b814c3c7d041b027f99b1ec4d490709d",
"files": [
"AGENTS.md",
"agents/README.md",
"agents/researcher/SOUL.md",
"agents/researcher/CONTEXT.md",
"agents/researcher/README.md",
"agents/researcher/launch.sh",
"agents/researcher/validate-sessions.mjs",
"scripts/test-darkwing-launch.mjs",
"docs/plans/2026-09-13_internal-development-bootstrap.md"
],
"tests": "node --test scripts/test-darkwing-launch.mjs scripts/test-rocko-launch.mjs",
"passed": 6,
"state": "ready for independent review"
}
@@ -0,0 +1,9 @@
{
"at": "2026-09-15T00:46:26.639Z",
"issue": 1512,
"startedAt": "2026-09-11T00:00:00.000Z",
"lastActivity": "2026-09-10T00:00:00.000Z",
"lastAssistantText": "OLD_FIXTURE_REPLY",
"oldReplyStillPresented": true,
"syntheticOnly": true
}
@@ -0,0 +1,6 @@
{
"discordDependencyCommit": "1ac812d3d5f3939221e7578502a10240ac82a6af",
"verifiedTrackedDependencyFiles": 31,
"sevenWorkingAndFrozenPinsUnchanged": true,
"scope": "byte comparison, not proof of snapshot construction history"
}
@@ -0,0 +1,58 @@
# #1512 inherited engine diagnosis
Rocko returned a read-only investigation. No source correction, live connector
operation or authority transfer follows from it. Filbert's seven source pins
remain the #1512 candidate; they do not change Discord engine code.
## A. Test synchronization and cleanup
Rocko reports the tool-turn test asserts engine.busy immediately after prompt
resolution at agent_end, while busy clears on a subsequent agent_settled event.
Separate pipe reads allow the assertion to run between events. Another basic
prompt test uses the same assumption. Success-only engine.stop cleanup leaves
the fake child and pipes open after an assertion fails, hiding the final spec
report and making the test file hang.
Darkwing independently ran Rocko's scratch relay with DELAY=50 and finally cleanup.
It failed 'busy after plain resolved', true versus false, and exited in 148ms.
Log: /tmp/darkwing-1512-race-confirmation.txt. This confirms the race mechanism,
not the exact historical assertion from the earlier truncated spec log.
Rocko's scratch directory:
/tmp/claude-1000/-mnt-storage-src-mosaic-stack/0422f20f-4d8c-43fe-b429-a2730cc1ab9d/scratchpad/1512/
Includes proxy-pi.mjs, race-repro.test.mjs, hang-repro.test.mjs,
hang-noforce.txt, hang-force.txt and stress/base-prev run logs.
He reports natural busy failures at lines56/75 under contention and deterministic
hang behavior without finally cleanup. Darkwing did not repeat load stress.
## B. Timeout test synchronization
Rocko reports a 100ms timeout test reads fake-pi's command log before the child
has created it or recorded abort under contention. That assertion can also skip
success-only cleanup. He observed this in both prior and row21 code. Not the
specific failed test named in Darkwing's first run.
## C. Separate engine behavior concern
Rocko reports a next-prompt refusal after a client timeout when a done pending
entry remains, busy is false and agent_start has not yet been consumed. prompt()
then omits followUp because it considers only pending entries not marked done.
The still-streaming fake engine refuses that prompt. This is a potential real
engine defect, not merely the busy assertion race. No live incident is established.
The row21 owner retains this code. Darkwing notified orch-01 on its verified named
socket and requested ownership/disposition, not a code takeover. A focused owner
fix needs regression coverage and review. Suggested direction from Rocko: account
for unsettled pending runs when choosing followUp; do not blindly change logic
from this note alone. Test cleanup and event synchronization also need correction.
## Provenance and gates
Rocko reports frozen Discord files match row21 commit1ac812d3, not the stated
archive basec4fc8e7d in HANDOFF. Darkwing requested Filbert's construction evidence
and append-only provenance correction outside frozen R1. Do not rewrite the old
handoff or infer its base from a mutable HEAD.
The later 351/351 bounded run remains valid narrow evidence; the earlier failure
is not erased. Integration stays held for owner disposition and provenance
reconciliation. No live action, publication, operator acceptance or GateF claim.
@@ -0,0 +1 @@
{"number": 1512, "creator": "darkwing", "charter": "docs/plans/2026-09-15_relaunch-activity.md"}
@@ -0,0 +1,89 @@
1e1aef2c74434e388d61b03407cd323336d20b7ef2106893d16a39638ee12a64 packages/control-board/package.json
8966f1f98ea81b4525345fc4889db5e0e5263ca41b5132ac8dd9bd99a2c88522 packages/control-board/src/discord.mjs
d6ac9b7b9661e6c85e912612b847c14ed38b7596b7db0a86a692da202f2a9f9c packages/control-board/src/serve.mjs
3f8822e97b2ba26b7035f86cf9bac421039957faab7f4543a1ed22c4568db23d packages/control-board/tests/attention-flow.test.mjs
5429fedc72af5cd9b7ddfa3b70e31aa7ecb4c511c51e0b640a16f9773912496a packages/control-board/tests/attention.test.mjs
64a67c91021de0c0ca583b65f8eed23e7e14415f2c18677b80754a7178363d04 packages/control-board/tests/discord.test.mjs
06a7eab5fa07ca83a210c5317e99ecccff8e8085197b7f66bbbecd67a4d8d541 packages/control-board/tests/scan.test.mjs
41bcaf8685437f130edc98aad92cfdb62e8201ee1861531ee9fa99069f681885 packages/control-board/tests/serve.test.mjs
ce0d74970496f197f507741261b8bf0b8e9c89909a44627eb11221ab407a6a8b packages/discord/README.md
587e01d440096c04ca8f4ae5ea096b4eab846989824f3effde12bbd66c71c6f9 packages/discord/extension/readonly-tools.mjs
d6a144b3c396c02e069a76d0d65bcd842a84f9de618b0172f1e1f7fed42757f9 packages/discord/fixtures/binding.example.json
4bfa50b150d49086e6438625c78261b58e6afb90601a9fb7ea464cc03faa29fb packages/discord/fixtures/claim-worker.mjs
012ce50053e0a38bcb2aebc4011c24ed41a93d4d7b79790f7ba0fc0049f0bc16 packages/discord/fixtures/legacy-owner-worker.mjs
a52c6bfc9bd26a3b021d3a96bddb0f5c45845d752ca4579ef04ef60667f110f3 packages/discord/package.json
573b015bc7a929903e33657f3cf79f0c6da1e927b3f9188f842ee867ec097d3f packages/discord/src/authorize.mjs
73e96f8421b88e3eb71666fb98673f10f659d0cd3535c5ac2897d3e3d431bab3 packages/discord/src/binding.mjs
a12c5a7b41060253ee12a3019f5ec930597f7866df247eb949bdf149223e5e93 packages/discord/src/cli.mjs
ba2132fe37d8ba4c04ea32e88aef7faae27fda4d2121426ab6c373aabe8b9b21 packages/discord/src/connector.mjs
18c583cb72c33bc7e41b9904dade98777e3e3fe8ff0820a56fc85404e8505904 packages/discord/src/context.mjs
67a5aca259731763caac0f199be8cae95c2606d740083eca2dff489b59353bf3 packages/discord/src/engine-pi.mjs
917b0e6c4f100e93f056b925e38d97eacdd8b2596e39fbd3f88c0b62b973d8ed packages/discord/src/errors.mjs
2d7f7fcbe62aac7b724a66714cd24d5634bd63f7660ef5979b8d4fccb0689b08 packages/discord/src/gateway.mjs
db33880f88dc2c7708015efecd0c6db604bc40387ea0dd6259d91f621a5b022c packages/discord/src/journal.mjs
1b83781c46cc8d9437b957e8757ea64a4da15a08d80706745770a06e411e72ff packages/discord/src/rest.mjs
063bbd5b47cd9f0d8a34adde09a5c63bd52d2d88be02a381662406ab07fcbe89 packages/discord/src/tools.mjs
a4ce74917ad68c82bd7ea07d6039813a94cec724c74f18e1e65a8f762d2cb7e1 packages/discord/systemd/[email protected]
1c1629800b1f1a417bff87e51f716cdc75a6725183a3f518096d21704de39804 packages/discord/tests/authorize.test.mjs
bcead9d2a44da3a12085dab2276f0afea5fd850061ac9dd9c4b64952d07712ee packages/discord/tests/binding.test.mjs
fc6eaa88db5d56d563ac2a83ace7db70c40cb328664c9782af8aaacf4ca4e978 packages/discord/tests/connector.test.mjs
b1cbc424a44d99d5ef6782fa4e17866030953ffa9a6e9ef97bac99d6b20dd576 packages/discord/tests/context.test.mjs
cb30bb0571756c66ff8177189f4722411245bf2f9b49b5a5d219f5009e0758f5 packages/discord/tests/engine.test.mjs
0930b8d13c10febd5ac98e69795c66a5313162c4e20d0e1f446ffdfc0c73bf64 packages/discord/tests/fake-pi.mjs
2fb4d80d228591d8b537a73995403c77c4fcc35fcfab3d8d8ad2705638825c71 packages/discord/tests/gateway.test.mjs
3da0370367aa6d7dea1e0e5edcc62350ad88399577f895b2bd29965e64360e2a packages/discord/tests/helpers.mjs
c70fc1da93e4bead261b2935098918804dfafd29efbf2e4a0256fadfc13c62b4 packages/discord/tests/journal.test.mjs
6ce9e42a35145df726449b01e2b89d9a468ee6bccc4cc754175e0e67f26f43af packages/discord/tests/recover.test.mjs
2c3c9b3a38f6aadb7c490f464573df3ad0dc207457838bdb727f4fbf29b69b75 packages/discord/tests/rest.test.mjs
a1c8203fecc706ea97896eff91a07145446440a7e0ca98b36ed2b038b30d5473 packages/discord/tests/tools.test.mjs
601db1de6d4838785f334dd93dd191d444276f306e016b3a4137659eaae76561 packages/ledger/README.md
e33fc5be5cdeb69f6f443a44c5b02a7bc346ac74dd69f984538e424a8d1b5de9 packages/ledger/src/cli.mjs
fbd95e45c5753cb44e39dfead0c6e0d2a5f07859dd9411f1dd659dde98af2ffc packages/ledger/src/ledger.mjs
c836ecd64068cccf7f515ab699c6a218e5ea1618c39e7e88be21bfa74d96414e packages/ledger/tests/gitea-helper.test.mjs
8e838a5333cbe6aafda5d72b810eb2840c4439973841d9c2bf5b55bc660455a3 packages/ledger/tests/ledger.test.mjs
bfaa5eed44c9eba9c195c38008db785d9c78e58f7544be7e46fd32155708f256 packages/mosaic/README.md
12838980706273f2a3daf84a1a78d55e06018c1f78587cc9db4527a8aa8b074f packages/mosaic/package.json
dd07bea32281e66d0f7d8485595eb403305fac1ca5943daa67a73bc0666caecc packages/mosaic/src/cli/main.mjs
ed9920d465f74387566443544131226050dec8f13efefaad2d48157c8808f162 packages/mosaic/src/execution.mjs
fa5c5fe977916418e7d2c4f6ceeedb6f3bcb6ae854f680bec07f7930b937b1f4 packages/mosaic/src/fixture-store.mjs
ac64c9c32ba928cc557107a47e127350efd724a7d8cdf1f399630964fe621879 packages/mosaic/src/index.mjs
7a3e66fc20e3e51d838c66e2cb0f3c2b73047ffabccb93532bd325a8a65e68c2 packages/mosaic/src/materialize-fixture.mjs
e4d2e55e077f38c5523d0211e6ec90e301804d8f6896674de2bbeaf0b049be58 packages/mosaic/src/records.mjs
28f87b70d0d42d4f4f25a7d72f138e87dcfcd79d542b43da7fb208444f4deeb7 packages/mosaic/src/refresh-fixture.mjs
d33985227f536117bcfad1d7f5ecd777adf02c073c8a9bff634c4b32f2b85e48 packages/mosaic/src/registry.mjs
545c126314e14fb772dbe082adcec554e84bbfdef8f93e231ae825ed5b8ec845 packages/mosaic/tests/fixtures/valid/auth/accounts/openai-codex/homelab-openai/account.json
3bcf68dd33fd1e5b219ffaf3a15880718cb3751ac07f132d2466c408e2fda6f3 packages/mosaic/tests/fixtures/valid/auth/providers/ollama-remote.json
d214e39539b5de9d6f2350b5d681cfa340ff2d255c215d25499aeb10711fcd7f packages/mosaic/tests/fixtures/valid/auth/providers/openai-codex.json
e986f8fd65a5a501510dc6e706d772a5c0ddc336864ff6c41405f3901749ffe1 packages/mosaic/tests/fixtures/valid/auth/settings/research-default.json
ff1b45df2503ccd796c220364ea217c5eb1ab1eaf22ffa8094ff0851dfb20ed3 packages/mosaic/tests/fixtures/valid/harnesses/pi.json
44bcb47057dbaaff69992c8e7355b8195f3db6f8ccb7bd05bb2ea913e3940ea3 packages/mosaic/tests/materialize.test.mjs
7747bace9da600ef93776b3e473efdd3f1f57420aaa3fff207a1fd0c6c5b5e0f packages/mosaic/tests/refresh.test.mjs
1c2f018de202003ddf69f333fc1c066d265b312a431007742aebd7ccca5a93a7 packages/mosaic/tests/registry.test.mjs
1891119852df1930505bbec6e0543b95f82d4ff3834956fe433d9f58c3204645 packages/mosaic/tests/safety.test.mjs
4bb04a3188ab9c5c985206da83bc1cc6f9be042a072aad75224560e7acf57e29 packages/seat/README.md
26ee149f870ff56ad6d1c3d7c3b4b2301879c59f02d5840078c07e7964cc2175 packages/seat/package.json
a2880bd7b66cd9d6fc3588cc739eadc5db7fe806f81da86e0ac09bbff15a3099 packages/seat/src/cli.mjs
eec970961a667c9e614d1474d33c31a019b2cf1b0bf931a51458d874bca13a15 packages/seat/src/seat.mjs
c06f2fc951ce56c905a98175dc82966893a2ba801405fb407c6c59363d029288 packages/seat/tests/seat.test.mjs
6eca43194632017ffed73d62ba76c74435c4b661f4ec3fc76d8b0bae8bcf9089 packages/webui/README.md
ee81d2b902a0b250f32d997d27085b9c76a7c98acdd0a0b55c65cf9342047b4e packages/webui/package.json
20f8091e5fb3fcaba583b601ce258999d44afbe569e93c979938ace759b4eef4 packages/webui/src/cli.mjs
a30ddcd349703aff7464c34bef3fffdff405ee50c113440d7c8693c02d210972 packages/webui/src/public/assets/fonts/manrope-400.woff2
a30ddcd349703aff7464c34bef3fffdff405ee50c113440d7c8693c02d210972 packages/webui/src/public/assets/fonts/manrope-500.woff2
a30ddcd349703aff7464c34bef3fffdff405ee50c113440d7c8693c02d210972 packages/webui/src/public/assets/fonts/manrope-600.woff2
a30ddcd349703aff7464c34bef3fffdff405ee50c113440d7c8693c02d210972 packages/webui/src/public/assets/fonts/manrope-700.woff2
e01b637272e0cbdfb240184dd98ea5cc671556d9894dae2668d92ab2c906787c packages/webui/src/public/assets/fonts/manrope-OFL.txt
0d9aaaaa963b675d94d8fbee0cf47a8ecf03ea412f8b14aba96416375e5a2bb5 packages/webui/src/public/assets/fonts/manrope-sources.txt
d568df6dca14ae336db3b627639c8181c088649a21ffe992f9bfacc20b5b6238 packages/webui/src/public/brand.js
1ce47447339a274dd51c0168838a5e58e0addaf2200e04625bc1da5bc9279097 packages/webui/src/public/console.css
db055d5b8a3710f4164193550ac25b7c5d223dd890ae3e9d73daaada38849557 packages/webui/src/public/index.html
7add449911677c662a05ad5d9c2462f919e759574fe4b85bd13a705cc54f6856 packages/webui/src/public/live.css
b3e6e240fa93555e30321f897405839856b3438ef44b1cea73d2f5fbd899077e packages/webui/src/public/shared/app.css
c0c1a360ce44a7439e67eea36b9237c59621aa3fd78571a823fd23dc15a950f6 packages/webui/src/serve.mjs
b1c2860e69bb099fda476c291c41adddf736dcaf99b68620d5401ce92396336a packages/webui/tests/browser-edge.test.mjs
3ff14de07e87cc624433db6425b9d05e40d98f61e40f2bbf1fbee7431f9d73c1 packages/webui/tests/browser.mjs
01636f05a8a59e8aaf7da000e631b83718b79a5e5bbc36d5b67738215cc250a7 packages/webui/tests/browser.test.mjs
24cf26c357164857f29be4f47204812d560310ee79dfbfebd7aa48f7a84ba9b0 packages/webui/tests/discord.test.mjs
0aea0461d9a63b43e7cd2fea7cbaf335af48470b01481d3507a48bce8c355f79 packages/webui/tests/fixture.mjs
15e77422890bc50cdb700484ca7e16ac32476aa8ec61d5575a6e0a920694bc4c packages/webui/tests/serve.test.mjs
2c822c787f1e6e5779aa74a5c054845de31f5f990e5a4b97a1398b9aaa856a7e scripts/test-discord.sh
@@ -0,0 +1,17 @@
{
"recordedAt": "2026-09-15T01:13:19.864188+00:00",
"author": "Filbert",
"issue": 1512,
"kind": "append-only provenance correction; supersedes only HANDOFF archive-base statement",
"frozenCandidate": "/tmp/relaunch-activity-r1-8ckPxKjN",
"candidateManifestSHA256": "47769fada74c5684dd0ca32c41cea9dcf60e039f5a07657546e17a240af13e9d",
"incorrectEarlyCheckpoint": "c4fc8e7d7f76b2b8cda6a6a0f6fc760d37235c98",
"verifiedArchiveContentBase": "1ac812d3d5f3939221e7578502a10240ac82a6af",
"construction": "git archive HEAD | tar -x -C \"$SNAP\", then working packages/control-board, packages/webui and packages/seat overlays, charter and red log copies. HEAD was not pinned in the archive command. The earlier checkpoint was incorrectly reused in HANDOFF.",
"verification": "All 4509 archive files outside the three overlay package directories match 1ac812d3 byte-for-byte, with no differences or missing files. c4fc8e7d comparison had 21 differing files and predates additional new files. All tracked Discord files and scripts/test-discord.sh match 1ac812d3. Seven candidate hashes still match original manifest.",
"dependencyManifest": "DEPENDENCIES.sha256",
"dependencyManifestSHA256": "deae75b488b2f9172e7168bba83e442a251c294464ee6200527c23ef4599f968",
"dependencyFiles": 89,
"dependencyScope": "All files in six tested packages except seven authored candidate paths, plus scripts/test-discord.sh, pinned from frozen R1 rather than current checkout.",
"limits": "R1 and all prior evidence unchanged. Prior 351-pass serialized receipts describe this actual dependency set, not c4fc8e7d dependencies. Intermittent inherited engine/fixture failure and timeout remain recorded and not green. No source changes, live operations, publication or Gate F approval."
}
@@ -0,0 +1,43 @@
# #1512 R1 source review
Filbert author. Frozen /tmp/relaunch-activity-r1-8ckPxKjN, seven files.
CANDIDATE.sha256 manifest
47769fada74c5684dd0ca32c41cea9dcf60e039f5a07657546e17a240af13e9d.
Darkwing independently verified all seven working/frozen pins and eleven
inherited test pins, read RED.txt and reviewed the scoped scanner/CLI/UI delta.
Darkwing approves the seven source changes. Relaunch notice requires positive
row and matching-registration PID liveness, matching session path, and strictly
newer finite timestamps. Connector registration is excluded. Existing historical
fields, state, Seen, attribution and reply gates remain unchanged. CLI and both
presentations replace current activity with the notice and label retained history.
This does not establish native process-incarnation authentication or resolve old
waiting/error state.
Dewey independently APPROVED scoped UX on the same seven pins. Frozen targeted
scanner/browser suites 8/8 passed, four Chromium cases and 330 contrast samples.
Both fixture pages at 320px preserve history, show the notice without page overflow,
and resume normal presentation after new activity. Historical error label reviewed
in source; the browser fixture uses waiting, not error. No screenshot-based visual
review, real relaunch, live observation or Gate F evidence claimed.
## Verification qualification and integration hold
Darkwing's first exact serialized six-package run timed out at 120 seconds.
/tmp/darkwing-relaunch-r1-tests.txt records an inherited Discord engine test
failure, 'a run with tool turns settles once', before the hang. It is NOT green.
No test runner remained after the harness timeout. Detailed assertion output was
not captured by that reporter before the hang.
An isolated TAP diagnostic of that engine case passed, using test-force-exit and
a 5-second test timeout. This is diagnostic only, not full-suite acceptance.
/tmp/darkwing-relaunch-engine-probe.txt.
A full frozen TAP run with test-concurrency=1 and test-timeout=15000, WITHOUT
force-exit, passed 351/351, zero failed/cancelled/skipped, in 14.27 seconds.
/tmp/darkwing-relaunch-r1-diagnostic.txt. The first failure remains unexplained;
the later pass does not erase it or establish default-concurrency success.
Hold integration while Rocko performs bounded read-only diagnosis of the inherited
engine failure. No author source correction requested yet. No live changes,
publication, operator acceptance or Gate F claimed. Preserve R1 and prior freezes.
@@ -0,0 +1,95 @@
# #1512 R1 candidate re-run against HEAD, 2026-09-26
Requested by Sage over T3 on 2026-09-26. Integration was held because of the
row 21 engine test race, and `1685deb4` fixed that race. This record is new
evidence. The R1 files next to it are unchanged.
## Snapshot
- `/tmp/relaunch-activity-r1-rerun-oupRiqIC`: `git archive 21e3e908`, plus the
working `packages/control-board`, `packages/webui` and `packages/seat`
(node_modules excluded), plus a symlink to the root `node_modules`.
- `CANDIDATE.sha256` in the snapshot hashes to `47769fad…`, which is the R1
candidate manifest. All 7 candidate pins match.
- 71 of the 89 R1 dependency pins are unchanged. The other 18 are
`packages/discord/**` and `scripts/test-discord.sh`, and they equal HEAD.
`engine-pi.mjs`, `engine.test.mjs`, `fake-pi.mjs` and `helpers.mjs` in the
snapshot are byte-identical to HEAD.
- Node v26.8.1. Test union: control-board, webui, seat, mosaic, ledger and
discord tests. The count rose from 351 at R1 to 397 because rows 23 to 25
added Discord tests.
## Results
| Run | Flags | Result | Log (`/tmp/`) | sha256 prefix |
|---|---|---|---|---|
| A1 | `--test-concurrency=1 --test-timeout=15000` (R1 form) | 397/397, rc 0, 19.9 s | darkwing-1512-rerun-A1-bounded.txt | 8b34a64a660d5948 |
| A2 | same | 397/397, rc 0, 19.7 s | darkwing-1512-rerun-A2-bounded.txt | 5c8b96209f5b8b2c |
| A3 | same | 397/397, rc 0, 19.4 s | darkwing-1512-rerun-A3-bounded.txt | e9829f454bf2b63f |
| B1 | `--test-concurrency=1` | 397/397, rc 0, 19.0 s | darkwing-1512-rerun-B1-serial-notimeout.txt | bb6eaedf6250c410 |
| C1 | default concurrency | 395/397, rc 1, hung until I ended a leaked child | darkwing-1512-rerun-C1-default-concurrency.txt | 5200188e1bcd8b15 |
| C2 | default concurrency | 395/397, rc 1, hung until I ended a leaked child | darkwing-1512-rerun-C2-default-concurrency.txt | 1f244a4835000e31 |
In C1 and C2, the same two tests failed, both in `packages/discord/tests/engine.test.mjs`:
- Test 205 (line 100), "a prompt while streaming is held…": ENOENT on
`commands.jsonl`.
- Test 208 (line 146), "tool events from a run that outlived its timeout…":
`engine refused prompt: agent is streaming; specify streamingBehavior`.
Both runs stopped making progress after every test had finished and the
`after()` hook had removed the temp root. The only thing left was a `fake-pi.mjs`
child. I sent that child SIGTERM (C1 pid 3636242, C2 pid 3668771). The file
then exited and the runner printed its summary. Apart from that, I didn't
touch either run.
## Control: clean HEAD, no #1512 files
Snapshot `/tmp/darkwing-head-21e3e908-zinKkQ` (`git archive 21e3e908` only).
Same union, default concurrency:
| Run | Result | Log (`/tmp/`) | sha256 prefix |
|---|---|---|---|
| 1 | rc 124 at the 240 s cap, 178 ok, interrupted in seat and webui files | darkwing-head-default-1.txt | 799acad299d0b20e |
| 2 | rc 124 at the 240 s cap, same shape | darkwing-head-default-2.txt | e9028b28c02ffc86 |
| 3 | 369/370, rc 1, test 187 = the line 146 engine failure | darkwing-head-default-3.txt | fcd85bd474f2c210 |
| discord only | 162/162, rc 0 | darkwing-head-discord-only.txt | 5f068557caee7fc7 |
| seat + webui only | 21/21, rc 0 | darkwing-head-seat-webui.txt | 9952b57707577a92 |
`engine.test.mjs` alone in the candidate snapshot passed 5 of 5 times, 11/11
each run (`darkwing-engine-alone-{1..5}.txt`).
Dewey was running `packages/webui/tests/` from the canonical checkout during
part of this window. That added load. It doesn't explain the HEAD control, and
the two engine failures reproduce without it.
## Reading
The #1512 candidate passes its R1 acceptance command 3 of 3 times at 397/397,
and it passes the serial run with no timeout. Every default-concurrency failure
is in committed `#1509` Discord engine code, and clean HEAD fails the same way.
I found nothing that implicates the seven candidate files.
Two engine defects are exposed under load. They belong to `#1509`, not to #1512:
1. **Test race plus leak, `engine.test.mjs:100`.** The test reads the fake's
command log 20 ms after the second prompt. Under load the fake hasn't written
the file yet, so the read fails with ENOENT. The test has no `try/finally`,
so `engine.stop()` never runs, the fake-pi child stays alive, and the test
file never exits. That is the hang. The fix is the pattern `1685deb4`
already uses elsewhere: wait with `until()` and stop in `finally`. Six other
tests in the file also stop without `finally`.
2. **Engine race, `engine-pi.mjs`, seen through `engine.test.mjs:146`.**
`busy` is `state.busy || pending.some((t) => !t.done)`. Suppose a turn times
out before the engine has read pi's `agent_start`. `failTurn` marks it done,
`state.busy` is still false, and `busy` reads false. The next prompt then goes
straight to pi, and pi refuses it because it's still streaming. This fails
closed: the prompt errors and nothing is misattributed. Production timeouts
are long, so this should be rare there. It's still a real race. One option is
to count a sent turn toward `busy` until pi's own end or settle event arrives,
not only until the client gives up on it.
Rocko's finding C, a follow-up sent after a timeout, looks superseded. Since
`1685deb4`, the engine never sends a follow-up (held prompts), and the line 100
test asserts that `streamingBehavior` is absent. Defect 2 is the timeout race
that remains.
@@ -0,0 +1,18 @@
{
"at": "2026-09-15T00:11:38.757844+00:00",
"newBackend": [
3414098,
"76594640"
],
"health": true,
"pageMatchesReviewedR2": true,
"allRowsHaveAttributionField": true,
"inapplicableAttributionNull": true,
"legacyRegisteredUnknownCount": 2,
"agentPaneIdentitiesUnchanged": true,
"connectorIdentityUnchanged": true,
"allRegistrationBytesUnchanged": true,
"rocko": [],
"rockoWritePerformed": false,
"blocker": "Rocko registration PID 185602 is dead; native context/lock PID is 3707667. No identity repair authorized."
}
@@ -0,0 +1,2 @@
{"at": "2026-09-15T00:10:51.631297+00:00", "event": "owner-authorized-restart-intent", "oldBackend": [3769124, "72871926"], "agents": {"default/darkwing": [[2733924, "12863634"]], "default/dewey": [[934346, "466065"]], "default/filbert": [[72183, "100870"]], "default/researcher": [[173699, "66404285"]], "mosaic-fleet/rocko": [[90599, "128275"]]}, "connector": [3022843, "67887873"], "registrationHashes": {"seats/repo/darkwing/registration.json": "4eda287e7f3bee8967052d90d5a15fb8bb61457e25991192bfaffcaba92c6075", "seats/repo/filbert/registration.json": "efe469ed81855c7e4d4667146a2e520c3a5f953a534cf4a90d6739d2e6335767", "seats/repo/rocko/registration.json": "2195325104fdaf13e5a8d351143f6c046144b9b99865d18b21d01564ac23b327", "seats/repo/dewey/registration.json": "92960db9f3f3d5c56c5cc79d23f39b3df3f1dcdeaae61bccbf0e62d98563aa6c", "seats/repo/researcher/registration.json": "77816e560918d2a9534ff2c97ef201605fbb5b6ef8e341d4dd948684082563fa"}, "configHash": "8e6b3a4049c7ab11ab6d842d974da0bcf07985cf4db988995436ed4b94b44338", "rockoWriteBlocked": {"registeredPid": 185602, "nativePid": 3707667}, "pinsVerified": 18}
{"at": "2026-09-15T00:10:51.650299+00:00", "event": "replacement-started", "newPid": 3414098, "oldExitedGracefully": true, "log": "/tmp/task-attribution-backend-gmaofryr.log"}
@@ -0,0 +1,7 @@
{
"at": "2026-09-14T14:08:03.786Z",
"issue": 1511,
"exit": 4,
"explicitByRejected": true,
"liveFilesChanged": false
}
@@ -0,0 +1,34 @@
# Proposed #1511 local test envelope
Original proposal retained below. Jason authorized the backend update, completed
2026-09-15. Rocko's stale registration blocked that target before mutation.
Jason then explicitly authorized Filbert instead and confirmed Claude console
integration remains separate. The Filbert metadata update and live API checks
passed; operator visual acceptance is pending. Receipt: live-test.jsonl.
No Rocko registration or process was changed.
- Reverify the approved R2 pins and current backend PID/start/command/config.
Record the five native agent identities and connector service identity.
- Restart only the control-board backend on loopback 7331, using its existing
command/config. Do not restart agents, WebUI or the Discord connector.
- Verify health and that the updated reader accepts existing records. Check
actual asset loading before claiming either presentation loaded R2.
- For the visual test only, update the repository-native Rocko registration's
task to '#1511 task attribution user test', with explicit setter darkwing.
Use the reviewed seat task command and explicit repo layout. First verify the
registration matches the intended native session; a mismatch blocks the write.
- Preserve the original registration privately outside the repository. Never
print its contents. Assert only task, taskSetBy and updatedAt change, with all
identity fields and startedAt preserved. No other registration may change.
- Verify API selection and ask Jason to inspect the 'set by darkwing' tag and
caller-claim wording. Legacy registered attribution remains unknown; inferred
and connector tasks remain not applicable. Agent/connector identities unchanged.
Rollback: before any attribution write, an incompatible old reader can be restored
only from the retained prior artifact. After the one authorized write, restoring
an old reader requires restoring that record's original task metadata first, with
an exact unchanged-current-record check. If anything else changed, stop rather
than overwrite it. Keep the compatible reader while resolving the conflict.
No broad metadata migration or automatic rollback over concurrent edits.
This envelope does not authorize publication or the later Filbert behavior task.
@@ -0,0 +1,3 @@
{"at": "2026-09-15T00:36:13.204764+00:00", "event": "owner-authorized-filbert-test-write", "target": "repo/filbert", "backup": "/tmp/task-attribution-filbert-k3o7zimk/registration-before.json", "nativeIdentity": [793364, "56603274"], "backend": [3414098, "76594640"], "agents": {"default/darkwing": [[2733924, "12863634"]], "default/dewey": [[934346, "466065"]], "default/filbert": [[72183, "100870"]], "default/researcher": [[173699, "66404285"]], "mosaic-fleet/rocko": [[90599, "128275"]]}, "connector": [3022843, "67887873"], "beforeHash": "efe469ed81855c7e4d4667146a2e520c3a5f953a534cf4a90d6739d2e6335767"}
{"at": "2026-09-15T00:36:13.852595+00:00", "event": "verified", "agent": "filbert", "task": "#1511 task attribution user test", "taskSource": "registration", "taskSetBy": "darkwing", "afterHash": "1bc90238adcb0210fcd027d76ac2d87e292d5fe29e6892d4c3efad4fddb93edd", "onlyAllowedTaskMetadataChanged": true, "allOtherRegistrationsUnchanged": true, "agentAndConnectorIdentitiesUnchanged": true, "backendUnchanged": true, "operatorVisualAcceptance": "pending"}
{"at": "2026-09-15T00:47:20.173624+00:00", "event": "operator-visual-confirmed", "tableEvidence": "/tmp/pi-clipboard-afe5713e-77ed-4be6-9a24-d455178ed1f0.png", "inspectorConfirmed": "darkwing (as claimed by the caller, not verified)", "scope": "bounded local attribution delivery; publication and Gate F separate"}
@@ -0,0 +1,15 @@
d289ec7d3a45c541346ece6b32908d75efe4ca0ad47df729bcf493d9bc9be718 packages/seat/src/seat.mjs
a2880bd7b66cd9d6fc3588cc739eadc5db7fe806f81da86e0ac09bbff15a3099 packages/seat/src/cli.mjs
4bb04a3188ab9c5c985206da83bc1cc6f9be042a072aad75224560e7acf57e29 packages/seat/README.md
c06f2fc951ce56c905a98175dc82966893a2ba801405fb407c6c59363d029288 packages/seat/tests/seat.test.mjs
a40c57d011ce54956856c77e6758ca12dcd0ffd4be0d53ae2707b7d3fe3708b1 packages/control-board/src/scan.mjs
7f9b3b684e8af9f933d23cab956d32aad345b61be5001f8f6f591d3a91c57d12 packages/control-board/src/page.html
5f3bf97fd90045b2b1f08f2922ec0f6b33b3729bef39f9bfcbe0229dcd6e2080 packages/control-board/README.md
06a7eab5fa07ca83a210c5317e99ecccff8e8085197b7f66bbbecd67a4d8d541 packages/control-board/tests/scan.test.mjs
41bcaf8685437f130edc98aad92cfdb62e8201ee1861531ee9fa99069f681885 packages/control-board/tests/serve.test.mjs
64a67c91021de0c0ca583b65f8eed23e7e14415f2c18677b80754a7178363d04 packages/control-board/tests/discord.test.mjs
772d564b974de9d30df296d538e7878ceb2421f479ed07285456e7d43dfef8b9 packages/webui/src/public/app.js
0aea0461d9a63b43e7cd2fea7cbaf335af48470b01481d3507a48bce8c355f79 packages/webui/tests/fixture.mjs
d45b138bdb5a3eaf6cf2470b7b2beed16de0a635ad1868c8d25336b4040fe163 packages/webui/tests/browser.test.mjs
d39e5d1e1b7e3d4aa6689e20faabeee6691656e8661f866d98731912eb140d06 packages/webui/tests/browser-edge.test.mjs
c97fd047a970326c096a4771f9bd49496fb6ff244047ea5c1e59bdd7adaeefa2 packages/webui/tests/discord.test.mjs
@@ -0,0 +1,46 @@
# #1511 R1 combined review
Author Rocko. Frozen candidate /tmp/task-attribution-r1-frozen-sRoqqr5m.
15-file manifest: r1-manifest.sha256, SHA256
0185cc65c973f6d89c394e2e9fba67fccd794b8ad2be2720a8bb3700b2b018a3.
Darkwing independently matched every author pin against frozen and working files.
The author snapshot contains selected files, not a standalone runnable checkout.
Both independent lanes returned before correction authorization.
## Filbert backend verdict
APPROVE AS SOURCE for exact R1, subject to separate presentation review.
Reported independent serialized seat/board/WebUI 141/141 in both working tree
and dependency-complete overlay /tmp/filbert-task-attribution-review-EaqP6CYc.
Log: TASK-ATTRIBUTION-TESTS.txt in overlay. Working launcher regressions 6/6,
/tmp/filbert-task-attribution-launchers.txt. Additional invalid-environment and
control-character probes passed. All 15 pins matched after tests.
Confirmed optional v1 compatibility, precedence/refusal rules, preservation of
other fields and task-selected attribution only. No backend blocker.
Nonblocking comment correction: bounded identifier syntax does not guarantee
absence of private identifiers. Numeric IDs and email-like names still fit.
Remove that inaccurate privacy claim in a separately pinned R2.
## Dewey UX verdict
REQUEST CHANGES, R1-U1. WebUI inspector maps null/inapplicable attribution to
unknown, conflating a transcript/connector task with a legacy registered task
whose setter is unknown. Preserve null as not applicable or a missing-value
marker. Keep unknown for a selected legacy registration. Add assertions for
legacy unknown, transcript/Discord null, and transition from a known setter
without stale attribution. Existing edge expectation currently enshrines the bug.
Dewey independently ran matching working-tree browser, browser-edge and Discord
suites, 3/3 passed, 330 contrast samples. Frozen/working pins matched before and
after. No screenshots, live observation or full backend verdict claimed.
Escaping, placement and reply boundaries otherwise passed his scoped review.
## Disposition
R1 is not approved for integration. Preserve its snapshot and manifest. Rocko
corrects R1-U1 and the inaccurate comment, reruns applicable checks, and supplies
R2 with changed/inherited pins. Both review lanes then verify the exact R2.
The missing docs/TOOLS.md usage flag is required additive documentation; preserve
other owners' dirty edits when adding it. No Gate F, live change or publication.
@@ -0,0 +1,15 @@
eec970961a667c9e614d1474d33c31a019b2cf1b0bf931a51458d874bca13a15 packages/seat/src/seat.mjs
a2880bd7b66cd9d6fc3588cc739eadc5db7fe806f81da86e0ac09bbff15a3099 packages/seat/src/cli.mjs
4bb04a3188ab9c5c985206da83bc1cc6f9be042a072aad75224560e7acf57e29 packages/seat/README.md
c06f2fc951ce56c905a98175dc82966893a2ba801405fb407c6c59363d029288 packages/seat/tests/seat.test.mjs
a40c57d011ce54956856c77e6758ca12dcd0ffd4be0d53ae2707b7d3fe3708b1 packages/control-board/src/scan.mjs
7f9b3b684e8af9f933d23cab956d32aad345b61be5001f8f6f591d3a91c57d12 packages/control-board/src/page.html
5f3bf97fd90045b2b1f08f2922ec0f6b33b3729bef39f9bfcbe0229dcd6e2080 packages/control-board/README.md
06a7eab5fa07ca83a210c5317e99ecccff8e8085197b7f66bbbecd67a4d8d541 packages/control-board/tests/scan.test.mjs
41bcaf8685437f130edc98aad92cfdb62e8201ee1861531ee9fa99069f681885 packages/control-board/tests/serve.test.mjs
64a67c91021de0c0ca583b65f8eed23e7e14415f2c18677b80754a7178363d04 packages/control-board/tests/discord.test.mjs
954d98fa2e6b264ed751857f0b76bb36c966c1ef59e4b091eb0b5351e84783d7 packages/webui/src/public/app.js
0aea0461d9a63b43e7cd2fea7cbaf335af48470b01481d3507a48bce8c355f79 packages/webui/tests/fixture.mjs
01636f05a8a59e8aaf7da000e631b83718b79a5e5bbc36d5b67738215cc250a7 packages/webui/tests/browser.test.mjs
b1c2860e69bb099fda476c291c41adddf736dcaf99b68620d5401ce92396336a packages/webui/tests/browser-edge.test.mjs
24cf26c357164857f29be4f47204812d560310ee79dfbfebd7aa48f7a84ba9b0 packages/webui/tests/discord.test.mjs
@@ -0,0 +1,41 @@
# #1511 R2 source approval
Author Rocko. Frozen /tmp/task-attribution-r2-frozen-3PqORMJP.
15-file manifest r2-manifest.sha256, SHA256
d4c963952b3f2b0e1c99133b3fe3fefa4c1883b79a009dc1f8d20ef58b46ca16.
Darkwing verified all working/frozen pins and all retained R1 pins. Exactly five
changed files, ten inherited. R1 remains unchanged.
Filbert independently APPROVED backend/schema/tests as source. He verified
working/frozen/overlay pins after 141/141 serialized seat/board/WebUI checks in
both working tree and /tmp/filbert-task-attribution-r2-review-v6KDM7pv.
Log: R2-TESTS.txt there. Privacy-syntax comment finding closed.
He also approved only Darkwing's additive TOOLS usage patch, SHA256
86bcba3c2889b12151aefa1fa266fff81bb91126450b2deeb7ca519869ff2253.
Other dirty TOOLS changes are not adopted or approved by that verdict.
Dewey independently APPROVED scoped source UX. R1-U1 CLOSED. Null stays not
applicable, legacy registration unknown stays unknown, and transition assertions
remove prior setter names. Matching working-tree browser/browser-edge/Discord
checks 3/3 passed, 330 contrast samples. No screenshots or live visual observation.
He rechecked all 15 pins after tests. Dependency context was the working tree.
Darkwing additionally ran the broader working-tree command:
node --test --test-concurrency=1 packages/control-board/tests/ packages/webui/tests/ packages/seat/tests/ packages/mosaic/tests/ packages/ledger/tests/ packages/discord/tests/
344/344 passed, exit 0. Log /tmp/darkwing-task-attribution-r2-tests.txt.
This is serialized local verification, not CI or default-concurrency success.
## Reader compatibility and remaining gate
Filbert and Darkwing independently reproduced the old strict-v1 reader rejecting
a new taskSetBy field. New readers accept both old and new records.
Darkwing's synthetic-only receipt is reader-compatibility.json; no live record
was used for that probe. Optional v1 is backward-read compatible, not old-reader
forward compatible. Update cached readers before any live attribution write.
Do not roll an old reader back over new records without an approved restoration.
Source approval is complete. Live reader update, operator testing and publication
remain separate. Gate F and the Filbert stale-relaunch assignment are not started
or claimed by these approvals. No agent or connector restart is authorized here.
@@ -0,0 +1,8 @@
{
"at": "2026-09-14T14:28:14.532Z",
"oldReaderRejectsNewField": true,
"newReaderAcceptsOldAndNew": true,
"syntheticOnly": true,
"liveRegistrationReadsOrWrites": 0,
"requirement": "Update cached readers before first live attribution write; old-reader rollback is incompatible with new records."
}
@@ -0,0 +1,5 @@
--- a/docs/TOOLS.md
+++ b/docs/TOOLS.md
@@ -137 +137 @@
-scripts/mosaic seat task <seat> <text> [--layout repo|fleet|unknown] [--config PATH]
+scripts/mosaic seat task <seat> <text> [--by NAME] [--layout repo|fleet|unknown] [--config PATH]
@@ -0,0 +1,161 @@
# Darkwing dirty-tree manifest, 2026-09-26
Requested by Sage (lead) over T3 on 2026-09-26. Nothing listed here is
committed. Sage reviews this list before anything lands, because AGENTS.md,
QUEUE.md and SESSIONS.md mix edits from both of us.
Baseline: HEAD `21e3e908` (the comms commit), branch `refactor`. All seven
suites passed on this tree at 19:31Z: config 24, task 90, foundation 43,
conductor 17, release 14, auth 15, discord 63.
"Pin match" means the working file's SHA-256 equals a hash recorded in an
approval I can still read. The frozen `/tmp` review copies from 09-13 to 09-15
are gone. The pins survive in `agents/darkwing/work/*` and in my Pi session log
`.pi/state/darkwing/sessions/2026-09-12T16-44-19-503Z_*.jsonl`.
Excluded on Sage's instruction: `agents/dewey/work/wui/**`, the 23 `aws-*`
directories and other untracked `skills/**`. Also excluded, because they are
Sage's own work: `agents/sage/work/coordination/**`.
## 1. Code: rows 18, 22, #1511 and #1512 are one cumulative state
`packages/control-board`, `packages/webui` and `packages/seat` carry four
approved rows layered on each other. `scan.mjs`, `page.html`, `README.md` and
`app.js` contain edits from several rows, so the rows cannot be committed
separately without rebuilding intermediate states that no longer exist on disk.
The working tree equals the #1512 R1 frozen tree exactly for these three packages.
Recommendation: one commit covering all four rows, citing each receipt.
| Path | Rows | Pin match | Ready |
|---|---|---|---|
| packages/control-board/README.md | 22, #1511, #1512 | #1512 R1 candidate | with #1512 |
| packages/control-board/src/scan.mjs | 18, 22, #1511, #1512 | #1512 R1 candidate | with #1512 |
| packages/control-board/src/cli.mjs | 18, #1512 | #1512 R1 candidate | with #1512 |
| packages/control-board/src/page.html | 18, #1511, #1512 | #1512 R1 candidate | with #1512 |
| packages/control-board/src/serve.mjs | 18 | #1512 R1 dependency | with #1512 |
| packages/control-board/src/discord.mjs (new) | 18 | #1512 R1 dependency | with #1512 |
| packages/control-board/tests/scan.test.mjs | 22, #1511 | #1511 R2 and #1512 dep | with #1512 |
| packages/control-board/tests/serve.test.mjs | 18, 22, #1511 | #1511 R2 and #1512 dep | with #1512 |
| packages/control-board/tests/attention.test.mjs (new) | 22 | #1512 R1 dependency | with #1512 |
| packages/control-board/tests/attention-flow.test.mjs (new) | 22 | #1512 R1 dependency | with #1512 |
| packages/control-board/tests/discord.test.mjs (new) | 18 | #1511 R2 and #1512 dep | with #1512 |
| packages/control-board/tests/relaunch.test.mjs (new) | #1512 | #1512 R1 candidate | with #1512 |
| packages/webui/src/public/app.js | #1511, #1512 | #1512 R1 candidate | with #1512 |
| packages/webui/tests/fixture.mjs | 22, #1511 | #1511 R2 and #1512 dep | with #1512 |
| packages/webui/tests/browser.test.mjs | #1511 | #1511 R2 and #1512 dep | with #1512 |
| packages/webui/tests/browser-edge.test.mjs | #1511 | #1511 R2 and #1512 dep | with #1512 |
| packages/webui/tests/discord.test.mjs (new) | 18 | #1511 R2 and #1512 dep | with #1512 |
| packages/webui/tests/relaunch.test.mjs (new) | #1512 | #1512 R1 candidate | with #1512 |
| packages/seat/README.md | #1511 | #1511 R2 and #1512 dep | with #1512 |
| packages/seat/src/cli.mjs | #1511 | #1511 R2 and #1512 dep | with #1512 |
| packages/seat/src/seat.mjs | #1511 | #1511 R2 and #1512 dep | with #1512 |
| packages/seat/tests/seat.test.mjs | #1511 | #1511 R2 and #1512 dep | with #1512 |
Receipts:
- Row 18 (#1509 board row): exact R3 source approvals from Darkwing and Dewey
in Gitea comment 26257, R3 manifest `254403b8…`. Jason accepted the visual
test ("parfait"). `agents/darkwing/work/discord-board/r3-backend-review.json`.
- Row 22 (#1503 attention): Filbert approved exact R1, comment 26248, R1
manifest `e40b58ec…`. Live restart receipt 26249.
- #1511 (row 6 code phase): R2 approved by Filbert (backend) and Dewey (UX),
manifest `d4c96395…`. Operator confirmed table and inspector.
`agents/darkwing/work/task-attribution/r2-review.md`.
- #1512 (row 6 pilot): Darkwing backend and Dewey UX approved R1, candidate
manifest `47769fad…`. The seven working files reproduce that manifest hash
exactly. 71 of 89 dependency pins are unchanged. The other 18 are
`packages/discord/**` and `scripts/test-discord.sh`, which moved with
committed rows 23–25. Integration was held on the row 21 engine test race.
The re-run against HEAD is in
`agents/darkwing/work/relaunch-activity/rerun-2026-09-26.md` (new, ready
with #1512 after your review).
## 2. Row 16: internal development bootstrap (#1510)
Filbert's R1 approval (receipt 26204) pins nine files. Researcher's live check
is receipt 26216.
| Path | Pin match | Ready |
|---|---|---|
| agents/researcher/SOUL.md | R1 pin `aeb422bc` | yes |
| agents/researcher/CONTEXT.md (new) | R1 pin `caa71d37` | yes |
| agents/researcher/README.md (new) | R1 pin `e1b494f6` | yes |
| agents/researcher/launch.sh (new) | R1 pin `825b4547` | yes |
| agents/researcher/validate-sessions.mjs (new) | R1 pin `0420f136` | yes |
| scripts/test-darkwing-launch.mjs | R1 pin `d79d4611` | yes |
| docs/plans/2026-09-13_internal-development-bootstrap.md (new) | R1 pin `6ef48e9a` | yes |
| AGENTS.md | R1 pin `1f2ca52e` no longer matches | shared, see section 5 |
| agents/README.md | R1 pin `089b1c2b` no longer matches | shared, see section 5 |
### agents/sage launch files
`agents/sage/{launch.sh,README.md,SOUL.md,validate-sessions.mjs,CONTEXT.md}`
are not in the row 16 R1 pin set. SESSIONS.md (2026-09-09 01:34 UTC) records
that Codex added them on Jason's request ("Owner-corrected Sage location"). I
found no review receipt for them in my records. Row 16 covers five agents:
Darkwing, Dewey, Filbert, Rocko and Researcher. `agents/sage/CONTEXT.md` was
last written today at 14:30 local, after Jason's lead ruling, which suggests
Sage edited it. I list these files but do not claim them. They need a review
or Jason's word before they are committed. Your call.
## 3. docs/TOOLS.md (#1511)
The whole working diff against HEAD is the one-line `--by` usage flag. Its
changed lines are identical to the approved patch
`agents/darkwing/work/task-attribution/tools-usage.patch` (SHA-256
`86bcba3c…`, Filbert approved in #1511 R2). Ready, with #1511.
## 4. Briefs and evidence records
| Path | Row | Ready |
|---|---|---|
| docs/plans/2026-09-13_board-attention-status.md | 22 | yes, brief |
| docs/plans/2026-09-14_discord-board-row.md | 18 | yes, brief |
| docs/plans/2026-09-14_task-attribution.md | #1511 | yes, brief |
| docs/plans/2026-09-15_relaunch-activity.md | #1512 | yes, brief |
| agents/darkwing/work/board-attention/* (3 files) | 22 | yes |
| agents/darkwing/work/discord-board/* (8 files) | 18 | yes |
| agents/darkwing/work/internal-development-bootstrap/* (2 files) | 16 | yes |
| agents/darkwing/work/task-attribution/* (11 files) | #1511 | yes |
| agents/darkwing/work/relaunch-activity/* (8 files, including today's re-run record) | #1512 | yes |
| agents/darkwing/work/tree-manifest-2026-09-26.md (this file) | — | after Sage's review |
I scanned the evidence records and briefs for credential shapes (GitHub,
GitLab, Slack, OpenAI-style keys, bearer tokens, private keys, Discord bot
tokens). No hits. They do hold PIDs, loopback ports and `/tmp` paths, which
are the evidence.
### Older coordination records, 2026-09-08 to 09-10
29 untracked files under `docs/plans/reviews/`:
`2026-09-08_publication-trial-*` (21, #1497), `2026-09-08_skill-launcher-*`
(2, #1498), `2026-09-09_bma-foundation-pointer-handoff.md`, and
`2026-09-10_m20-*` (9, #1499/#1500). These are my review requests, snapshots
and coordination notes from before the native relaunch. None are in the
published sets `29c1defe` (#1497) or `3daee5ad` (#1500), and I can't find the
reason they were excluded. The credential scan found nothing. Not ready until
I've read them for anything that was kept out on purpose.
## 5. Shared files, both of us
| Path | Mine | Hazard |
|---|---|---|
| AGENTS.md | row 16 roster, row 22 attention convention | Sage's lead ruling edits today |
| agents/README.md | row 16 roster | Sage's edits today |
| docs/plans/QUEUE.md | rows 1, 6, 16, 18, 22 (row 5 is Dewey's) | Sage replaced my coordinator line; don't revert |
| docs/plans/CURRENT.md | row 6, 18, 22 narrative | Sage's 09-26 entry |
| docs/plans/DEFERRED.md | #1512 engine intermittency, row 18 concurrent hangs, Rocko usage notice | the #1512 entry needs the re-run outcome appended |
| docs/SESSIONS.md | my session lines | append-only, mixed authors |
| BUILD-LOG.md | entries for rows 16, 18, 22, #1511, #1512; Dewey's #1507 CHAT entries are also uncommitted | see below |
**BUILD-LOG.md would lose committed history if committed from the working
copy.** The working file is missing 119 lines that are in HEAD. They are the
three phase entries committed with rows 23, 24 and 25 (`1685deb4`, `1949ed8d`,
`43d7574d`: 36, 45 and 53 added lines). The row 23–25 commits seem to have been
built from HEAD plus their own hunks, leaving the working file behind. Staging
the working BUILD-LOG.md as it is would delete those entries, which breaks the
append-only rule. The fix is to rebuild the working file as HEAD plus the
uncommitted entries, in order. Nothing is lost. The same check on SESSIONS.md
and DEFERRED.md found zero HEAD lines missing. CURRENT.md (6), QUEUE.md (10),
AGENTS.md (4), agents/README.md (3) and TOOLS.md (1) show small differences
that look like intentional row edits. Check them before committing.