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
+34
View File
@@ -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.
+33
View 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.
+6 -3
View File
@@ -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.
+8
View File
@@ -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 "$@"
+21
View File
@@ -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);
}