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,42 @@
|
||||
# Board attention status correction
|
||||
|
||||
Jason accepted discovery/reply tests 1-4, then reported Researcher still showing
|
||||
waiting after its completed reply. He approved separating idle from explicit
|
||||
requests for human input. This is a #1503 acceptance defect, not new chat scope.
|
||||
|
||||
Darkwing authors; internal Filbert independently reviews. Baseline observed on
|
||||
refactor: d9745a451004699256af32c2145df40df9f5b4a5. Preserve existing shared edits
|
||||
and Dewey's UI work. Source scope: control-board scanner, tests and README,
|
||||
AGENTS.md status guidance, the downstream packages/webui/tests/fixture.mjs waiting
|
||||
case and scoped tracking records. Dewey confirmed no overlapping ownership. No home-directory or
|
||||
fleet changes, agent restarts, new public JSON fields, approval/control authority,
|
||||
text classification service or unrelated UI changes.
|
||||
|
||||
## Rule and evidence
|
||||
|
||||
Completed normal assistant replies are idle. A completed assistant reply requests
|
||||
human attention only when its first nonblank text line is exactly prefixed
|
||||
`Input needed: ` followed by a nonempty request. This readable status convention
|
||||
is explicit, not a guess based on questions, sentiment, or turn completion.
|
||||
Quoted examples, user/tool messages and thinking blocks do not signal attention.
|
||||
Tool activity and errors retain their existing precedence. The latest message
|
||||
wins; a later ordinary completed reply clears the previous request.
|
||||
|
||||
The signal is advisory display state, never permission to perform an action.
|
||||
Agents use it only for Jason's decision/input, not a wait on another agent or a
|
||||
routine completion. Existing conversations without the signal become idle after
|
||||
normal completion. Earlier unstated human blockers cannot be inferred safely.
|
||||
|
||||
Seen acknowledges a specific waiting/error event. It hides that event from the
|
||||
attention list but does not resolve a genuine input request. New explicit requests
|
||||
reappear; ordinary completions do not. No change to existing API enum or fields.
|
||||
|
||||
Acceptance: reproduce BOARD_REPLY_OK incorrectly becoming waiting, test completed
|
||||
replies/explicit requests/quoted and stale markers/tool activity/errors/Seen,
|
||||
run scanner/server and relevant downstream regressions, and obtain exact-candidate
|
||||
independent review. Verify the corrected classification against Researcher's
|
||||
actual session without editing it. Running-board replacement and operator retest
|
||||
must be reported separately from source tests; no unattended service restart.
|
||||
|
||||
Before implementation: new attention tests reproduce two failures, including
|
||||
BOARD_REPLY_OK being classified as waiting. One precedence test already passes.
|
||||
@@ -0,0 +1,60 @@
|
||||
# Repository-native development bootstrap
|
||||
|
||||
Tracking: #1510, created and read-back verified as Darkwing. Branch `refactor`.
|
||||
Observed shared HEAD after initial checks: `dc5902aafded4042b6a919d9a6aec9f78febe935`.
|
||||
Other owners have dirty shared docs and active work; they are not adopted here.
|
||||
|
||||
Owner-authorized source work. Jason directs Darkwing to coordinate development
|
||||
through Darkwing, Dewey, Filbert, Rocko and Researcher in the canonical checkout,
|
||||
`/mnt/storage/src/mosaic-stack`. No `~/.mosaic` launcher/provisioning changes.
|
||||
No live fleet stop or migration. This assignment supersedes fleet expansion as
|
||||
the current development priority, not the retained foundation's worker policies.
|
||||
|
||||
## Delivery boundary
|
||||
|
||||
Darkwing authors; Filbert independently reviews. Keep other agents' existing
|
||||
changes and completed records, including Dewey's UI work and Sage's DYOR scope.
|
||||
|
||||
Allowed source work is the internal team documentation and Researcher's missing
|
||||
native entry/context/recovery files, the existing native launcher regression
|
||||
suite, and scoped queue/current/session/build tracking. Preserve agent.json and
|
||||
roles/contracts; explicit host mode does not widen a managed worker's authority.
|
||||
No new engine installation, credentials, home-directory launcher, native process
|
||||
launch, fleet task dispatch, deployment or unrelated runtime change.
|
||||
|
||||
Researcher uses the validated configured Pi model, the smallest consistent
|
||||
choice rather than a new provider/model decision. Darkwing/Dewey defaults,
|
||||
Filbert's pinned Codex configuration and Rocko's Sonnet wrapper are unchanged.
|
||||
|
||||
## Acceptance
|
||||
|
||||
1. All five internal agents have repository launch entry points and current
|
||||
coordination guidance. Researcher has the same per-agent validation and
|
||||
recovery behavior as the existing native Pi seats.
|
||||
2. Offline fake-engine tests cover context, registration, first/fresh/resume,
|
||||
malformed history, missing configuration/resources and duplicate-instance
|
||||
refusal. All data and registrations stay in test fixtures.
|
||||
3. Real launcher `--check` succeeds without a TUI, authentication/model request,
|
||||
seat registration or home-directory writes. This is configuration evidence,
|
||||
not actual engine/provider interoperability.
|
||||
4. No managed role/config/contract changes, no edits to `~/.mosaic`, and no
|
||||
migration or interruption of live seats. Existing unrelated diffs remain.
|
||||
5. Independent exact-candidate review before claiming source readiness. No
|
||||
deployment or unapproved publication follows automatically from this task.
|
||||
|
||||
## Current source checkpoint
|
||||
|
||||
Researcher previously had only a managed agent.json and fleet-labelled SOUL.
|
||||
Added native launcher, CONTEXT, README and the existing session validation
|
||||
behavior; changed its persona to the internal research role. Added Researcher to
|
||||
the existing isolated Pi launcher suite. All four Pi seats and Rocko's offline
|
||||
suite pass, six tests total. No real engine launched.
|
||||
|
||||
All five real launcher `--check` calls pass with no TUI, authentication request,
|
||||
model call or seat registration. Next: obtain internal Filbert's independent
|
||||
exact-candidate review. New launches read the
|
||||
updated source context; existing running sessions do not reload it implicitly.
|
||||
|
||||
The approved CHAT-01C local commit and its Git receive-pack authorization gate
|
||||
remain separate. Do not use this assignment to modify external provisioning or
|
||||
publish unrelated local commits.
|
||||
@@ -0,0 +1,65 @@
|
||||
# Discord connector board row
|
||||
|
||||
Current authorized queue item: row 18, #1509, pilot plan section 11. Jason
|
||||
assigned this to Darkwing and now explicitly requires automatic continuation to
|
||||
the next authorized item after each accepted iteration. This starts row 18,
|
||||
not unrelated gated work. Preserve the accepted row-22 attention correction.
|
||||
|
||||
## Ownership and scope
|
||||
|
||||
Filbert implements in the canonical checkout on refactor. Darkwing independently
|
||||
reviews the exact candidate; Dewey reviews any visible presentation change.
|
||||
Single writer for this implementation: Filbert. Existing dirty files remain
|
||||
owned by their authors and must not be reset, adopted or overwritten.
|
||||
|
||||
Allowed implementation paths: packages/control-board source/tests/README and
|
||||
minimal packages/webui source/tests changes needed to display the connector
|
||||
and refuse replies. No connector source, bindings, secrets, launchers, systemd
|
||||
units, live service changes or files under ~/.mosaic. No commits or publication
|
||||
by the implementer. Darkwing owns shared tracking records.
|
||||
|
||||
## Existing contract to implement
|
||||
|
||||
The original accepted connector brief supplies the interface:
|
||||
|
||||
- Discover one row per <dataRoot>/discord/<binding>.json, with 0600 regular
|
||||
non-symlink files. Project fleet, agent `<seat> (discord: <binding>)`.
|
||||
Validate only safe name/seat identity for discovery; never dereference or
|
||||
expose token paths, Discord/user/channel IDs, or the rest of the binding.
|
||||
- Sessions are under <dataRoot>/sessions/discord-<binding>.
|
||||
- Reuse the connector's read-only readPid/ownerState identity checks from
|
||||
packages/discord/src/journal.mjs. A positive live PID plus matching start
|
||||
tick and boot ID is necessary. Missing, corrupt, dead or unverifiable owners
|
||||
cannot be reported live. Do not signal, recover, unlock or rewrite anything.
|
||||
- Show STOP presence as braked without interpreting its private contents.
|
||||
Liveness and braking must be distinguishable. Existing completed-reply idle
|
||||
semantics still apply to session activity.
|
||||
- Refuse board replies server-side for connector rows even if a stale or
|
||||
forged registration claims a tmux destination. The UI must not offer reply.
|
||||
- Avoid filesystem traversal, symlink reads and disclosure of private binding
|
||||
fields. A malformed binding must not manufacture an actionable row. Report
|
||||
discovery failures safely rather than dumping private content or credentials.
|
||||
|
||||
Daily counters are optional in the original brief and excluded from this first
|
||||
row. No new ingress, controller, Discord API calls or engine/model calls.
|
||||
|
||||
## Acceptance and handoff
|
||||
|
||||
Implement and test discovery/privacy, positive and negative process identity,
|
||||
STOP/braked display, ordinary session state, server-side reply refusal and
|
||||
unchanged ordinary-agent replies. Test both board and WebUI integration with
|
||||
isolated fixtures. Preserve the accepted attention regression coverage.
|
||||
|
||||
Return an exact frozen candidate, changed paths and reproducible test results.
|
||||
The author does not self-approve. Darkwing and Dewey return scoped independent
|
||||
verdicts before integration. Source tests do not prove live service transitions.
|
||||
A read-only observation of the running connector is allowed after source review;
|
||||
no live service stop/brake/restart or backend replacement is inferred. Existing
|
||||
protected-operation and operator-acceptance gates remain in force.
|
||||
|
||||
## Continuation correction
|
||||
|
||||
Darkwing previously said he was continuing to this item but performed no action
|
||||
before ending the turn. Jason called out the violation. This entry records the
|
||||
actual start and ownership; a promise or dispatch is not completion. While the
|
||||
author works, Darkwing prepares independent acceptance and reconciles records.
|
||||
@@ -0,0 +1,45 @@
|
||||
# Task attribution, row 6 code phase
|
||||
|
||||
Jason accepted row 18 and has explicitly required automatic continuation after
|
||||
accepted iterations. This starts the next already-briefed item, row 6 of QUEUE,
|
||||
under the existing control-board MVP plan's Piece 5. The newer standing start
|
||||
instruction replaces that piece's historical Sunday start-message scheduling;
|
||||
its ordering and protected-action gates remain. Use repository-native agents,
|
||||
not fleet launchers. Rows 9-13 still wait for row 6 completion.
|
||||
|
||||
## Source assignment
|
||||
|
||||
Rocko implements the code phase from the internal agents/rocko profile in the
|
||||
canonical checkout, refactor. Filbert independently reviews backend/schema/tests;
|
||||
Dewey independently reviews presentation. Darkwing coordinates and owns tracking.
|
||||
The existing Rocko native process uses the older tmux socket; this is not a
|
||||
managed fleet worker assignment or authority to change its launcher.
|
||||
|
||||
Implement the already-approved taskSetBy requirement: mosaic seat task records
|
||||
an explicit --by NAME, otherwise MOSAIC_AGENT_NAME, otherwise unknown. Board
|
||||
serialization and both current board presentations display it by the task source.
|
||||
This is caller-supplied attribution, never authenticated identity or authorization.
|
||||
|
||||
Scope: packages/seat source/tests/docs, packages/control-board source/tests/docs,
|
||||
and minimal WebUI presentation/tests. Preserve existing attention and Discord-row
|
||||
changes exactly except the necessary additive integration. No launcher, connector,
|
||||
role, credential, home, live registration or service changes; no commits/push by
|
||||
the author. Use isolated fixtures, not actual seat task mutation during development.
|
||||
|
||||
Acceptance:
|
||||
- Explicit --by wins over environment; absent/empty environment gives unknown.
|
||||
Invalid explicit input refuses before writing. Values are bounded and escaped.
|
||||
- Existing registration records without taskSetBy still load, showing unknown.
|
||||
No breaking registration version change or implicit migration of old files.
|
||||
- Preserve unrelated registration fields and original startedAt on task updates.
|
||||
- Display attribution only for the task actually selected: no stale registration
|
||||
attribution on a transcript-derived task, and no borrowing native attribution
|
||||
for a Discord connector's fixed task. Attribution never enables replies/access.
|
||||
- Isolated CLI/schema/scanner/browser regressions, exact frozen handoff and
|
||||
independent review. Existing accepted behavior remains covered.
|
||||
|
||||
This code phase precedes the plan's specified first Filbert behavior assignment,
|
||||
Relaunched seat shows the old last message. Do not start that concurrently.
|
||||
Gate F and its human-message evidence are not claimed by this code phase; record
|
||||
actual future dates, not the old plan's anticipated 2026-09-13 measurement.
|
||||
No live backend replacement or publication follows automatically from source tests.
|
||||
@@ -0,0 +1,35 @@
|
||||
# Relaunch activity, row 6 behavior assignment
|
||||
|
||||
Jason confirmed the #1511 table tag and inspector wording. The code phase's
|
||||
bounded local delivery is accepted. Under his standing continuation mandate,
|
||||
start Piece 5's already-specified first Filbert assignment from the control-board
|
||||
MVP plan: Relaunched seat shows the old last message.
|
||||
|
||||
Filbert is sole source author. Darkwing independently reviews backend and tests;
|
||||
Dewey reviews presentation. Work in the canonical refactor checkout. Preserve
|
||||
accepted attention, Discord and task-attribution changes and all other owners'
|
||||
changes. Frozen prior candidates remain unchanged.
|
||||
|
||||
Scope: minimal packages/control-board scanner/presentation/tests/docs changes
|
||||
and corresponding WebUI presentation/tests when needed. If a live matching
|
||||
registration's startedAt is newer than recorded session activity, show
|
||||
'relaunched at X, no messages since' instead of presenting an old message as
|
||||
current activity. Preserve historical transcript data. After new session activity,
|
||||
normal presentation resumes. Stale/dead registrations must not assert a relaunch.
|
||||
No effect on connector owner identity or fixed connector task.
|
||||
|
||||
Prove the old behavior first with isolated fixtures. Cover newer launch vs old
|
||||
activity, equality, subsequent new activity, stale registration and unknown/missing
|
||||
activity. Preserve attention/Seen, task attribution and reply authorization.
|
||||
Do not silently redesign those semantics. Return an exact frozen candidate,
|
||||
changed/inherited pins and reproducible tests for both independent reviewers.
|
||||
|
||||
No launcher, Claude discovery, credential, role, home, live registration or
|
||||
service changes by the author. No commits/push or shared tracking edits by the
|
||||
author. No real seat relaunch is needed for the source fixture tests. Darkwing
|
||||
owns tracking and any separately authorized integration.
|
||||
|
||||
Publication remains a separate gate, including prior unpublished dependencies.
|
||||
Do not claim Gate F or issue closure from fixture tests. Its eventual evidence
|
||||
must use the actual assignment dates and demonstrate no direct Jason-to-Filbert
|
||||
work messages; never backdate the old plan's anticipated 2026-09-13 metric.
|
||||
Reference in New Issue
Block a user