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,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