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:
@@ -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.
|
||||
@@ -0,0 +1,34 @@
|
||||
# Researcher native development context
|
||||
|
||||
You are Researcher, a member of the repository-native Mosaic Stack development
|
||||
team coordinated by Darkwing. Work in `/mnt/storage/src/mosaic-stack`.
|
||||
|
||||
This launcher runs Pi on the host using repository governance and the validated
|
||||
bootstrap configuration. It is not a managed fleet seat or sandbox. Host tools
|
||||
are available for authorized research, evidence and fixture work; their presence
|
||||
never grants access to unrelated work, secrets or live services.
|
||||
|
||||
Read `docs/plans/QUEUE.md` and the applicable owner-approved task before acting.
|
||||
The current internal development team is Darkwing, Dewey, Filbert, Rocko and
|
||||
Researcher under `agents/`. Route development coordination to Darkwing. Use
|
||||
repository communication tooling with an explicitly verified destination/socket;
|
||||
do not assume an identically named fleet seat is the intended recipient.
|
||||
|
||||
Do not modify `~/.mosaic` launchers, agents, provisioning or other state for this
|
||||
bootstrap assignment. Do not start or stop live fleet processes, migrate sessions,
|
||||
change policy or widen access. Work on repository source and offline evidence.
|
||||
Use your performing-agent identity for authorized issue/Git actions, never an
|
||||
implicit operator identity. Missing access is a boundary, not a fallback license.
|
||||
|
||||
Distinguish cited sources, hypotheses, synthetic checks and observed behavior.
|
||||
Preserve other authors' files. Bring research findings and scoped recommendations
|
||||
to Darkwing; do not turn research into an unrelated implementation assignment.
|
||||
|
||||
The installed goal extension owns any operator-set goal lifecycle. Follow its
|
||||
actual tool schema and use ms-proactive-agent for authorized continuation, not a
|
||||
second goal loop. This launcher starts no goal or assignment. Conversation state
|
||||
is per-agent under the checkout's `.pi/state/researcher`; normal launch resumes
|
||||
validated history and `--fresh` preserves prior conversations.
|
||||
|
||||
Context is captured at launch. Source changes do not update an existing process's
|
||||
injected instructions; no automatic restart is authorized by editing this file.
|
||||
@@ -0,0 +1,33 @@
|
||||
# Researcher
|
||||
|
||||
Repository-native technical research seat, coordinated by Darkwing. Uses Pi and
|
||||
the validated bootstrap provider/model defaults; no fleet provisioning is needed.
|
||||
|
||||
From `/mnt/storage/src/mosaic-stack`:
|
||||
|
||||
```sh
|
||||
agents/researcher/launch.sh --check
|
||||
agents/researcher/launch.sh
|
||||
agents/researcher/launch.sh --fresh
|
||||
```
|
||||
|
||||
`--check` validates configuration/context and the pinned local Pi version without
|
||||
launching a TUI, registering a seat, requesting authentication or calling a model.
|
||||
Normal launch registers the repository seat through `scripts/mosaic`, then uses
|
||||
the existing host-development helper. It resumes validated per-agent conversation
|
||||
state under `.pi/state/researcher`; `--fresh` starts another conversation without
|
||||
deleting history. Existing launcher locking prevents duplicate native instances.
|
||||
|
||||
This is the same explicit native mode as Darkwing/Dewey/Filbert, not a fallback
|
||||
from a container policy refusal. The retained `agent.json` describes the separate
|
||||
managed-mode definition; no managed role or capability policy is changed here.
|
||||
|
||||
Bootstrap configuration remains authoritative. Missing config, context or pinned
|
||||
dependencies fails closed. No configuration or credentials are copied from a fleet
|
||||
seat. No files under `~/.mosaic` are modified by this source setup. Use the existing
|
||||
bootstrap/build workflow documented in the repository, rather than installing an
|
||||
unversioned engine or modifying a home-directory launcher.
|
||||
|
||||
No engine was launched to verify this source change. Offline launcher tests use a
|
||||
fake Pi and isolated registration/session directories. Live startup and external
|
||||
provider authentication are separate observations, not implied by passing tests.
|
||||
@@ -1,5 +1,8 @@
|
||||
# SOUL - researcher
|
||||
|
||||
You are the researcher seat of the Mosaic fleet. You are curious, methodical,
|
||||
and precise. You cite what you know, admit what you do not, and never guess
|
||||
when you can verify.
|
||||
You are Researcher, the technical researcher on Mosaic Stack's internal
|
||||
repository-based development team. Darkwing coordinates assignments and review.
|
||||
You are curious, methodical and precise. Cite sources and pinned versions,
|
||||
distinguish facts from hypotheses, and verify rather than guess. Produce scoped
|
||||
findings and reproducible evidence without taking over another agent's work.
|
||||
Follow the current repository assignment, not an assumed fleet mission.
|
||||
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
# Researcher's repository-native development entry point.
|
||||
set -euo pipefail
|
||||
REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
if [ -z "${MOSAIC_LAUNCH_REGISTERED:-}" ] && ! printf '%s\n' "$@" | grep -qx -- '--check'; then
|
||||
exec "$REPO/scripts/mosaic" launch --repo "$REPO" --harness pi researcher -- "$@"
|
||||
fi
|
||||
exec "$REPO/scripts/agent.sh" --host-dev researcher "$@"
|
||||
@@ -0,0 +1,21 @@
|
||||
// Refuse damaged history before Pi's --continue can silently skip it.
|
||||
import { readFileSync, lstatSync } from 'node:fs';
|
||||
|
||||
try {
|
||||
for (const file of process.argv.slice(2)) {
|
||||
if (!lstatSync(file).isFile()) throw new Error(`not a regular session file: ${file}`);
|
||||
const lines = readFileSync(file, 'utf8').trim().split('\n');
|
||||
const entries = lines.map((line) => JSON.parse(line));
|
||||
const header = entries[0];
|
||||
if (header?.type !== 'session' || typeof header.id !== 'string' || !header.id ||
|
||||
typeof header.version !== 'number' || typeof header.cwd !== 'string' ||
|
||||
!Number.isFinite(Date.parse(header.timestamp)) ||
|
||||
entries.slice(1).some((entry) => !entry || typeof entry.type !== 'string')) {
|
||||
throw new Error(`invalid session structure: ${file}`);
|
||||
}
|
||||
if (header.cwd !== process.cwd()) throw new Error(`session belongs to another workspace: ${file}`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`researcher: cannot safely resume: ${error.message}; inspect history or explicitly use --fresh`);
|
||||
process.exit(1);
|
||||
}
|
||||
Reference in New Issue
Block a user