History opens a seat's conversation from the Waiting card, table row and inspector. It pages the whole branch through the CHAT-02 board routes, renders untrusted text inert, polls with the follow cursor, and marks every switch (branch, newer, reconcile, gone). The WebUI proxy passes only the two conversation routes' queries upstream. Dewey authored it. Filbert asked for changes on r1 (24b046af) and approved r2 (d06de6a7) in review 160dd68d. A relaunch shows 'newer', not 'reconcile', a deviation from brief 2.3 item 6 that Filbert accepted. Co-Authored-By: Claude Opus 5.5 <[email protected]>
3229 lines
232 KiB
Markdown
3229 lines
232 KiB
Markdown
# BUILD-LOG
|
||
|
||
Append-only build log for the Minimal Mosaic Stack container proof of concept.
|
||
Each phase records the plan before it runs and the observed result after it runs.
|
||
No credentials are recorded in this file.
|
||
|
||
---
|
||
|
||
## Phase 1: Pi package discovery
|
||
|
||
### Entry 1.1 — before
|
||
|
||
- Timestamp: 2026-02-02 (session start, local)
|
||
- Intended action: Locate the current package documentation for `@earendil-works/pi-coding-agent`, determine the current version, the supported noninteractive command, the custom system prompt mechanism, and the documented container authentication method.
|
||
- Reason: The brief forbids guessing CLI flags, authentication paths, or SDK methods; all runtime commands must be derived from the package documentation.
|
||
- Expected result: Documented answers for all five discovery questions, recorded below, with the Pi package version pinned in the project.
|
||
|
||
### Entry 1.2 — after
|
||
|
||
- Timestamp: 2026-02-02
|
||
- Commands run:
|
||
- Read `README.md` of the locally installed `@earendil-works/pi-coding-agent` package
|
||
- Read `docs/containerization.md`, excerpts of `docs/models.md` and `docs/providers.md`
|
||
- `grep '"version"' .../pi-coding-agent/package.json`
|
||
- `npm view @earendil-works/pi-coding-agent version`
|
||
- Inspected host auth store structure (keys only, values never printed)
|
||
- Observed result:
|
||
1. **Package documentation**: full docs ship inside the installed package (`README.md` plus a `docs/` directory including `docs/containerization.md`).
|
||
2. **Current package version**: `0.84.4` — the locally installed version and the npm registry latest are identical. Selected version to pin: `0.84.4`.
|
||
3. **Supported noninteractive command**: `pi -p` / `pi --print` — "Print response and exit". Documented in the CLI Reference. Print mode also merges piped stdin into the initial prompt (not used here).
|
||
4. **Custom system prompt**: documented CLI flag `--system-prompt <text>` — "Replace default prompt (context files and skills still appended)". Because the generated contract prompt must fully control behavior, the run also passes the documented discovery-off switches (`--no-context-files`, `--no-skills`, `--no-extensions`, `--no-prompt-templates`, `--no-themes`) so nothing is appended from ambient files. (`APPEND_SYSTEM.md` / `.pi/SYSTEM.md` file conventions exist but the CLI flag is the documented noninteractive path.)
|
||
5. **Documented container authentication**: `docs/containerization.md` documents the "Plain Docker" pattern: run the whole `pi` process in the container and pass provider API keys at runtime via environment variables (example: `docker run -e ANTHROPIC_API_KEY ...`). The documented alternative credential store is `auth.json` written by `/login` under the pi agent directory (`~/.pi/agent/auth.json`).
|
||
- Decision: supply the credential at runtime as a **read-only mounted credential file** (host `auth.json`, which contains a static API-key entry for the built-in `zai` provider) mounted at the container pi agent directory, and additionally allow the documented environment-variable path (`ZAI_API_KEY` / `ANTHROPIC_API_KEY`) as an alternative. Provider and model are non-secret settings supplied via `.env` (`PI_PROVIDER=zai`, `PI_MODEL=glm-5.3-flash`).
|
||
- Failure or correction: none. Host check confirmed no API-key environment variables are exported on the host, so the read-only auth.json mount is the working runtime credential path for this experiment.
|
||
|
||
---
|
||
|
||
## Phase 2: Project scaffold
|
||
|
||
### Entry 2.1 — before
|
||
|
||
- Timestamp: 2026-02-02
|
||
- Intended action: Create the contract fixtures (exact brief contents), the contract loader (`src/load-contracts.sh`), the one-shot agent runner (`src/run-agent.sh`), the four required scripts (`scripts/build.sh`, `hello.sh`, `verify.sh`, `reset.sh`), `Containerfile`, `compose.yaml`, pinned `package.json` + `package-lock.json`, `.gitignore`, `README.md`, `LAYERS.md`.
|
||
- Reason: Implement exactly the file set the brief requires, with no extra machinery (no schemas, overlays, manifests, or policy loading).
|
||
- Expected result: A complete project whose only remaining unknown is whether the pinned image builds and the real model request returns `MOSAIC_HELLO_OK`.
|
||
|
||
### Entry 2.2 — after
|
||
|
||
- Timestamp: 2026-02-02
|
||
- Commands run: file creation; `npm install --package-lock-only --ignore-scripts` to generate the lockfile from the pinned dependency.
|
||
- Observed result: All files created; `package-lock.json` pins `@earendil-works/[email protected]` (exact, no range).
|
||
- Failure or correction: none.
|
||
|
||
---
|
||
|
||
## Phase 3: Container image build
|
||
|
||
### Entry 3.1 — before
|
||
|
||
- Timestamp: 2026-02-02
|
||
- Intended action: Run `scripts/build.sh` (Docker Compose build) to produce image `mosaic-poc-agent:0.84.4` from `node:24-bookworm-slim` with the pinned Pi, the four contract fixtures at `/opt/mosaic/contracts`, and a non-root user (uid/gid 1000).
|
||
- Reason: Phase 1 of the required proof path; `node:24-bookworm-slim` is the maintained base image used in Pi's own documented containerization example.
|
||
- Expected result: `docker compose build` exits 0 and the image contains the contracts, the runner scripts, and the pinned `pi` binary, with no credentials baked in.
|
||
|
||
### Entry 3.2 — after
|
||
|
||
- Timestamp: 2026-02-02
|
||
- Commands run: `scripts/build.sh`; `docker run --rm mosaic-poc-agent:0.84.4 --version`; `id` via `--entrypoint`; contract listing; credential file scan.
|
||
- Observed result:
|
||
- Build exit 0; image tagged `mosaic-poc-agent:0.84.4`.
|
||
- `pi --version` inside the image reports `0.84.4` (and this run also executed the contract loader successfully, writing `/var/lib/mosaic/system-prompt.md`).
|
||
- Container user is `uid=1000(node) gid=1000(node)` — non-root.
|
||
- All four contract files present at `/opt/mosaic/contracts` with read-only permissions (0555).
|
||
- Credential scan: no `auth.json` or other auth files exist in the image; `/home/node/.pi/agent/` is empty in the image.
|
||
- Failure or correction:
|
||
1. First build failed: Docker Compose expects `Dockerfile` by default; fixed by setting `build.dockerfile: Containerfile` in `compose.yaml`.
|
||
2. Second build failed: `useradd` exit 4 (uid 1000 already exists) because the maintained node image ships a `node` user at uid/gid 1000. Fixed by reusing the built-in `node` user (same 1000:1000 host mapping) instead of creating a duplicate `mosaic` user; container paths updated from `/home/mosaic/...` to `/home/node/...` in `Containerfile`, `compose.yaml`, `README.md`, `.env.example`.
|
||
|
||
---
|
||
|
||
## Phase 4: Runtime verification
|
||
|
||
### Entry 4.1 — before
|
||
|
||
- Timestamp: 2026-02-02
|
||
- Intended action: Run `scripts/hello.sh` (one-shot request: "Return your startup marker and nothing else."), then `scripts/verify.sh` (exact-match gate against `MOSAIC_HELLO_OK`), then the negative test (`EXPECTED_MARKER=MOSAIC_NOT_OK scripts/verify.sh` must exit nonzero), then the `scripts/reset.sh` safety tests and a final rerun after reset.
|
||
- Reason: Phases 2–7 of the required proof path plus acceptance criteria 5–11.
|
||
- Expected result: hello prints only the marker; verify exits 0; negative test exits nonzero; reset refuses unsafe paths and succeeds on the real path; rerun after reset reproduces the success.
|
||
|
||
### Entry 4.2 — after
|
||
|
||
- Timestamp: 2026-02-02
|
||
- Commands run: `scripts/hello.sh`; `scripts/verify.sh`; `EXPECTED_MARKER=MOSAIC_NOT_OK scripts/verify.sh`; `scripts/reset.sh` (refusal tests: missing marker, symlink with canary file, then real reset, then missing dir); `scripts/build.sh && scripts/verify.sh` after reset; `docker compose config` mount inspection.
|
||
- Observed result:
|
||
- `hello.sh`: stdout exactly `MOSAIC_HELLO_OK` — a real model request (provider `zai`, model `glm-5.3-flash`, auth via the read-only mounted auth.json credential file). The request string contains no marker.
|
||
- `verify.sh`: `PASS: response matches expected marker`, exit 0.
|
||
- Negative test: `FAIL: response does not match expected marker` (expected `MOSAIC_NOT_OK`, actual `MOSAIC_HELLO_OK`), exit 1.
|
||
- `reset.sh` refusal tests: missing marker → exit 1, nothing deleted; symlink (with canary file at the target) → exit 1, canary survived; real path with marker → removed, exit 0; missing dir → "nothing to remove", exit 0.
|
||
- Rerun after reset: build + verify → PASS, exit 0 (criterion 11).
|
||
- Resolved compose mounts: only `/home/jwoltje/.mosaic-dev → /var/lib/mosaic` (rw) and `~/.pi/agent/auth.json → /home/node/.pi/agent/auth.json` (read-only). No `~/.mosaic` or `~/.config/mosaic` mounts, no Docker socket.
|
||
- Failure or correction:
|
||
1. First hello run: the contract loader's status line was printed on stdout, mixing runtime data into the model response stream and contaminating the exact-match capture. Fixed by sending the loader's status message to stderr (`src/load-contracts.sh`), rebuilt the image, reran: stdout is exactly the model response.
|
||
- Credential check: no credential material appears in this log, in hello/verify output, or in the image (image scan found no auth files).
|
||
|
||
## Result
|
||
|
||
All 11 acceptance criteria demonstrated. The real model request passed.
|
||
|
||
---
|
||
|
||
## Phase 5: Configuration-driven Hello World (M1)
|
||
|
||
### Entry 5.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: Make the container POC configuration-driven. Baseline committed and tagged `poc-container-hello-v0`. Milestone M1 tracked in Gitea (issues #1-#4): (T1) config module with idempotent bootstrap and strict v1 validation; (T2) wire scripts and compose to config.json with fail-closed behavior; (T3) sandboxed config selftests; (T4) E2E verification and documentation.
|
||
- Reason: Per docs/plans/2026-09-02_atomic-mosaic-foundation.md — config.json must be the sole discovery entry point; updates and runs must never corrupt or invent configuration.
|
||
- Expected result: All M1 acceptance criteria pass; Hello World reproducible from configuration alone.
|
||
|
||
### Entry 5.2 — after
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Commands run: `scripts/test-config.sh` (20 cases); fail-closed checks (compose without launcher env, verify/reset with missing config); `scripts/bootstrap.sh`; config-driven `scripts/hello.sh`, `scripts/verify.sh`, negative marker test, sandboxed reset symlink refusal (canary survived), real reset + bootstrap + build + verify; config checksum comparison across the entire flow.
|
||
- Observed result:
|
||
- Config selftests: 20 passed, 0 failed.
|
||
- Fail-closed confirmed: compose exits 1 without launcher env; verify/reset exit 1 on missing config before any mutation.
|
||
- Bootstrap created `~/.config/mosaic-dev/config.json` exclusively; second run validated without rewriting (content + mtime unchanged).
|
||
- Config-driven hello/verify returned exactly `MOSAIC_HELLO_OK`; verify exit 0; negative marker test exit 1.
|
||
- Reset refused symlinked dataRoot; canary file survived; real reset removed only the configured data root.
|
||
- config.json checksum unchanged across hello/verify/reset/bootstrap/build/verify.
|
||
- Failure or correction:
|
||
1. Selftest harness bug: `cfg` helper invoked without a body for the symlink case (`$2: unbound variable`). Fixed in the harness; product code unaffected.
|
||
2. E2E rerun-after-reset failure: `verify.sh` did not ensure the configured data root existed before the container mount. With the data root absent, Docker auto-created the host path as root:root, and the container's uid-1000 user could not write the generated system prompt. Fixed by calling `bootstrap_runtime_dir` in `verify.sh`; also hardened it to fail with a clear message when the data root exists but is not writable (root-owned leftover). Clean-slate E2E rerun: all steps green.
|
||
- Credential check: no credential material in config, scripts, logs, or test output.
|
||
|
||
## Result (M1)
|
||
|
||
Configuration-driven Hello World verified. `main` merged with M1 and tagged `config-hello-v1`.
|
||
|
||
---
|
||
|
||
## Phase 6: Mission and task abstraction (M2)
|
||
|
||
### Entry 6.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: Add the first mission/task layer, host-side only (Gitea milestone M2, issues #6-#9): strict v1 schemas for missions and tasks, a task runner executing through the proven config-driven container path, immutable write-once run records under `<dataRoot>/runs/`, `expectExact` gating, timeouts, selftests, fixtures, and docs.
|
||
- Reason: The foundation plan's following layer — mission (objective + directives), task (bounded unit), run (one attempt), result (immutable evidence) — must exist as data and records before any policy or multi-agent work.
|
||
- Expected result: `scripts/run-task.sh tasks/hello-marker.json` succeeds with exactly `MOSAIC_HELLO_OK`; wrong expectations fail; every run leaves an immutable record; configuration remains untouched.
|
||
|
||
### Entry 6.2 — after
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Commands run: `scripts/test-task.sh` (18 cases incl. live runs); `scripts/run-task.sh validate` / `run` on committed fixtures; `node scripts/mosaic-task.mjs list`; config checksum comparison across runs.
|
||
- Observed result:
|
||
- Selftests: 18 passed, 0 failed (schema negatives; live exact-marker success; wrong expectExact fails; distinct run dirs; result.json contents; list).
|
||
- Fixture run: status `succeeded`, response exactly `MOSAIC_HELLO_OK`, mission snapshot recorded.
|
||
- Run records written once under `<dataRoot>/runs/r-<utcstamp>-<rand>/`; reruns never clobber.
|
||
- Failure or correction: none this phase.
|
||
- Credential check: no credential material in task data, run records, or logs.
|
||
|
||
## Result (M2)
|
||
|
||
Mission/task layer verified end-to-end. `main` merged with M2 and tagged `mission-task-v1`.
|
||
|
||
---
|
||
|
||
## Phase 7: Release model and safe updates (M3)
|
||
|
||
### Entry 7.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: Add the release substrate (Gitea milestone M3, issues #10-#13): RELEASE file single-sources the version (0.0.X line per owner direction), image tags derive from it, scripts/release.sh provides package/activate/rollback/status, activation is health-gated by the M2 task runner, pointer + append-only log under <dataRoot>/state/.
|
||
- Reason: The owner's top invariant — updates must never corrupt a working installation — needs a mechanism, not a convention: gate-then-flip with recorded history and rollback.
|
||
- Expected result: Update, refusal, and rollback drills all green with config checksums unchanged.
|
||
|
||
### Entry 7.2 — after
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Commands run: scripts/test-release.sh (14 cases); recorded drills: update (0.0.3 -> 0.0.4 package+activate+verify), fault-injected refusal, rollback to 0.0.3.
|
||
- Observed result:
|
||
- Selftests: 14 passed, 0 failed.
|
||
- Update drill: packaged and activated r0.0.4 after exact-marker health gate; verify green under the new tag; config checksum unchanged.
|
||
- Refusal drill: health-gate fault injection -> activation refused (exit 1), pointer untouched, refusal appended to the log.
|
||
- Rollback drill: health-gated rollback to r0.0.3; pointer restored; log records package/activate/refused/rollback history append-only.
|
||
- Failure or correction:
|
||
1. release.sh initially failed with missing state/ directory (no mkdir before pointer/log writes); fixed.
|
||
2. Selftest harness mutated the repo RELEASE and restored the mutated copy (mv-back bug) plus a second trap replacing the first; fixed with inline backup restore and one self-healing exit trap. Product code unaffected.
|
||
- Credential check: no credential material in release state, logs, or drills.
|
||
|
||
## Result (M3)
|
||
|
||
Release model and safe updates verified by drills. `main` merged with M3 and tagged `release-model-v1`.
|
||
|
||
---
|
||
|
||
## Phase 8: Runtime adapter seam (M4)
|
||
|
||
### Entry 8.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: Formalize the harness boundary (Gitea milestone M4, issues #16-#19): documented adapter contract under /opt/mosaic/adapters/<name>/adapter.sh; run-agent.sh becomes a dispatcher; pi extracted unchanged; deterministic mock adapter for provider-free seam tests; config gains optional execution.adapter (default pi, configVersion unchanged); mission directives gain their sanctioned injection point via the run snapshot; RELEASE bumps to 0.0.5 with a health-gated activation.
|
||
- Reason: Future harnesses (Claude, Codex, OpenCode) must be additive — one directory each — and mission content needs a single sanctioned path into the runtime.
|
||
- Expected result: All suites green including new deterministic seam cases; 0.0.5 activated by health gate; mission-bearing run recorded.
|
||
|
||
### Entry 8.2 — after
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Commands run: scripts/test-config.sh; scripts/test-task.sh; scripts/test-release.sh; manual seam drills (mock verbatim, unknown/traversal adapter refusal); mission injection checks; release package + activate for 0.0.5.
|
||
- Observed result:
|
||
- Config suite 24/24 (adapter default/validation/env export).
|
||
- Task suite 24/24 including deterministic mock cases (gate pass, expect-mismatch with reason, unknown adapter fail-closed) and mission injection asserted by prompt content.
|
||
- Release suite 14/14; image mosaic-poc-agent:0.84.4-r0.0.5 packaged and activated via exact-marker health gate.
|
||
- Mission directives now flow: task -> run snapshot -> container env -> generated prompt MISSION (runtime) section.
|
||
- Failure or correction:
|
||
1. Selection authority settled: load_config always exports MOSAIC_ADAPTER from config; environment overrides for scripts are therefore not a supported selection path (by design).
|
||
2. Selftest harness: three authoring defects fixed (helpers used before definition; one config file reused across cases leaking adapter state; a static mission fixture asserted against distinctive seam directives; plus an accidentally duplicated live block removed).
|
||
- Credential check: no credential material in adapters, prompts, run records, or logs.
|
||
|
||
## Result (M4)
|
||
|
||
Adapter seam verified; harness boundary is now additive by construction. `main` merged with M4 and tagged `adapter-seam-v1`.
|
||
|
||
---
|
||
|
||
## Phase 9: Workspaces + capability envelope (M5)
|
||
|
||
### Entry 9.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: Optional task workspace (absent / ":run" ephemeral / named persistent) and capabilities.tools allowlist (pi built-ins); runner plumbing via MOSAIC_WORKSPACE/MOSAIC_TOOLS; pi adapter maps to cwd + --tools; mock adapter logs delivered MOSAIC_* vars for deterministic assertions (Gitea #20, #21).
|
||
- Reason: Agents that only answer text cannot do work; the workspace+tools pair is the smallest real capability step, bounded by the container.
|
||
- Expected result: plumbing asserted via run-record stderr; live pi writes a host-visible file.
|
||
|
||
### Entry 9.2 — after
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Commands run: build; mock plumbing run; validate negatives; full task suite; live workspace demo.
|
||
- Observed result: task suite 32/32; MOSAIC_WORKSPACE/MOSAIC_TOOLS asserted in run record; dataRoot/workspaces/<name> created host-side; live pi used bash to write proof.txt into the demo workspace (host-visible).
|
||
- Failure or correction: (1) batch edit dropped SUPPORTED_TOOLS const (runtime ReferenceError, exit 1 instead of 2) — restored; (2) mock env dump used `export` which this dash prints as `export K='v'` — switched to `env`; (3) selftest fed a mismatching mock response to the plain-task case — test bug, fixed.
|
||
|
||
## Phase 10: Named sessions (M6)
|
||
|
||
### Entry 10.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: Optional task.session name -> persistent session dir dataRoot/sessions/<name> via pi --session-dir; resume most recent with -c when present; isolation per name; teach/recall demo fixtures (Gitea #22, #23).
|
||
- Reason: L1 persistence is the prerequisite for any multi-step agent work.
|
||
- Expected result: session dir populated after first run; second run recalls taught context.
|
||
|
||
### Entry 10.2 — after
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Commands run: build; mock plumbing run; live teach/recall E2E; task suite.
|
||
- Observed result: task suite 32/32; teach run replied REMEMBERED and session JSONL persisted host-side; recall run resumed (-c) and answered exactly 'mosaico'; single continued session file (no duplicate sessions).
|
||
- Failure or correction: none. Design note: ephemeral (--no-session) remains the default when no session is declared.
|
||
|
||
## Phase 11: Operator ergonomics (M7)
|
||
|
||
### Entry 11.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: mosaic-task.mjs show <runId> (full record + snapshots + artifacts, traversal-safe), list with workspace/session columns, RELEASE -> 0.0.6, package + health-gated activate, docs (Gitea #24).
|
||
- Reason: Run records are only as valuable as they are inspectable; release activation closes the loop on container-content changes.
|
||
- Expected result: show works for real/missing/traversal ids; suites green; 0.0.6 active.
|
||
|
||
### Entry 11.2 — after
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Commands run: build; show on real/missing/traversal ids; full sweep; release package + activate.
|
||
- Observed result: config 24/24, task 32/32, release 14/14, verify PASS; 0.0.6 packaged and activated via exact-marker health gate.
|
||
- Failure or correction: showRun initially rejected valid run ids (lowercase-only regex vs uppercase timestamp) and crashed on missing ids (uncaught readdir) — both fixed and covered.
|
||
|
||
## Autonomous run result
|
||
|
||
M5 tagged `workspace-capabilities-v1`, M6 tagged `sessions-v1`, M7 tagged `operator-ergonomics-v1`; release 0.0.6 active. Tracker: docs/plans/2026-09-03_autonomous-run.md.
|
||
|
||
---
|
||
|
||
## Phase 12: Conductor loop — self-orchestration (M8)
|
||
|
||
### Entry 12.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: Stand up the poor-man orchestration loop per docs/plans/CONDUCTOR.md: conductor (host, holds git) mirrors the repo into a worker workspace, dispatches a headless pi worker (session worker-1, tools read/write/edit/bash) to implement retry <runId>, reviews the diff, integrates, verifies (Gitea #25, #26, #27).
|
||
- Reason: The owner asked for circular task processing with agent workers; the stack now has every primitive needed — this proves it on the stack itself.
|
||
- Expected result: worker-authored retry merged with suites green and a live retry verified.
|
||
|
||
### Entry 12.2 — after
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Commands run: repo mirror clone; worker dispatch (tasks/worker-retry.json); diff review; apply; live retry; refinement dispatch (tasks/worker-retry-refine.json); second review; reverse+reapply combined patch; conductor interpolation fix; live retry; full sweep.
|
||
- Observed result:
|
||
- Worker round 1: implemented retry correctly per spec in 2m28s; diff reviewed clean.
|
||
- Live retry exposed a spec gap (direct invocation lacks launcher env exports).
|
||
- Worker round 2 (same session, 59s): made spawnEnv self-sufficient, but used PI_* names where compose interpolates MOSAIC_*.
|
||
- Conductor hotfix: 3-line rename to MOSAIC_PROVIDER/MOSAIC_MODEL/MOSAIC_DATA_ROOT (too trivial for a worker round).
|
||
- Final: live retry succeeded (replied REMEMBERED, new run recorded); all suites green.
|
||
- Failure or correction: three rounds total — one spec gap (conductor), one naming mismatch (worker), one trivial rename (conductor). Each was caught by mechanical verification (run record stderr), never by hope.
|
||
- Attribution: feature authored by headless pi worker (glm-5.3-flash) in sessions worker-1; conductor reviewed, integrated, and hotfixed.
|
||
|
||
## Result (M8)
|
||
|
||
Conductor loop proven end-to-end on the stack itself. `main` merged with M8; release 0.0.6 remains active (retry is host-side only, no image change).
|
||
|
||
---
|
||
|
||
## Phase 13: Mission-level capability policy (M9)
|
||
|
||
### Entry 13.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: Missions may declare capabilities.tools as governing constraints (Gitea #30); merge semantics = least-privilege intersection (task narrows, never widens; empty intersection = tool-free run). Host-side only.
|
||
- Reason: First mechanical restriction layer — the trust model becomes enforced, not instructed.
|
||
- Expected result: all four merge cases asserted from run evidence; suites green.
|
||
|
||
### Entry 13.2 — after
|
||
|
||
- Observed: four merge cases verified deterministically via run-record stderr (mission-only, task-only, narrowed, emptied); invalid mission capabilities exit 2; task suite 41/41.
|
||
- Failure or correction: selftest harness could not express ABSENT vs EMPTY fields via its printf helper — fixed with an ABSENT marker; two suite config-leak defects fixed (per-command env scoping). Product unaffected.
|
||
|
||
## Phase 14: Session forking (M11)
|
||
|
||
### Entry 14.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: sessionForkFrom task field branches the source session's newest file (pi --fork) into the target session dir; ancestor untouched; RELEASE -> 0.0.7 with health-gated activation (Gitea #33).
|
||
- Reason: Owner flagged conversation forking from a common ancestor as a desired property; pi JSONL trees make it native.
|
||
- Expected result: forked child recalls ancestor context; ancestor file untouched; suites green; 0.0.7 active.
|
||
|
||
### Entry 14.2 — after
|
||
|
||
- Observed: mock plumbing asserts fork source + target delivery; validation rejects fork-without-target and self-fork (exit 2); ghost source exits 4; live fork: child recalled 'mosaico' from ancestor context while the ancestor session file remained untouched (file-level assertion); suites 58/24/14 + verify green; 0.0.7 packaged and activated via health gate.
|
||
- Failure or correction: retryRun-style self-assignment bug in validation (compared null to target) — caught by negative test, fixed.
|
||
|
||
## Result (M11)
|
||
|
||
Session forking verified. `main` merged with M11, tagged `session-fork-v1`; release 0.0.7 active.
|
||
|
||
---
|
||
|
||
## Phase 15: Interactive TUI agent + TOOLS.md (M13)
|
||
|
||
### Entry 15.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: Add scripts/agent.sh — an interactive TUI launcher (contracts + optional mission + agent identity + named session + optional workspace/tools) — and the pi-adapter interactive branch; remove the fixed compose command; add docs/TOOLS.md as the on-demand reference AGENTS.md routes to; RELEASE -> 0.0.8 (Gitea #35).
|
||
- Reason: The owner's bootstrap model is vanilla pi sessions directed by AGENTS.md, graduating to governed TUI agents — the first the system itself launches.
|
||
- Expected result: TUI agent launches with contracts+identity context; headless paths unchanged; TOOLS.md consolidates the reference.
|
||
|
||
### Entry 15.2 — after
|
||
|
||
- Observed: mock plumbing asserts agent name/session/workspace/mission delivery; identity section asserted in generated prompt; headless hello + suites green (24/58/17/14 + verify); 0.0.8 packaged and health-gated activated.
|
||
- Failure or correction:
|
||
1. Regression: pi adapter rewrite made MOSAIC_AGENT_NAME unconditionally required, breaking headless paths — caught by task suite (empty-stderr exit-nonzero), fixed (optional in headless; identity section simply omitted).
|
||
2. Regression: unquoted $REQUEST_ARG word-split the request into positional args — fixed with positional-argument building (set -- ... "$@").
|
||
3. Mission fixture wording (objective named the agent) invited the model to append its name after the marker, tripping the strict gate — fixture tightened; strict gate kept by design.
|
||
- Conductor session env hygiene: sandbox config exports now scoped per-command after a leak broke cross-suite runs.
|
||
|
||
## Result (M13)
|
||
|
||
Interactive TUI agent launched and verified; TOOLS.md reference shipped. `main` merged with M13, tagged `interactive-agent-v1`; release 0.0.8 active.
|
||
|
||
|
||
|
||
---
|
||
|
||
## Phase 16: Run-record retention (M10) — recorded retroactively
|
||
|
||
- Timestamp of work: 2026-09-03; recorded: 2026-09-03 (back-filled entry; the original phase entry was lost to editor races - see correction note below)
|
||
- Summary: `mosaic-task.mjs prune [--keep=N] [--yes]` - keep newest N run records, dry-run by default, append-only `.pruned.log` receipt, sessions/workspaces/state untouched. 8 suite cases.
|
||
- Observed: dry-run deletes nothing; keep-N honored; newest kept; receipt written; isolation asserted.
|
||
- Correction (recorded): suite-hardening edits (prune section config scoping, duplicate helper removal) were applied in the same phase.
|
||
|
||
## Phase 17: Conductor auto-apply policy (M12) — recorded retroactively
|
||
|
||
- Timestamp of work: 2026-09-03; recorded: 2026-09-03 (back-filled)
|
||
- Summary: `conductor-policy.json` (tracked, strictly validated: enabled switch, path allowlist, gating suites) + `scripts/conductor-apply.sh <runId>` - succeeded-run check, clean target tree, allowlist, syntax gates, apply, suites, attribution commit; any failure reverts; push never automatic. 17 sandbox suite cases.
|
||
- Observed: all gates green; suite-failure auto-revert verified; disabled policy refuses with exit 2.
|
||
- Decision recorded: review moves to after-the-fact (history revertible) for worker patches under the policy; push remains explicit.
|
||
|
||
## Phase 18: Live user context (M14) — recorded retroactively
|
||
|
||
- Timestamp of work: 2026-09-03; recorded: 2026-09-03 (back-filled)
|
||
- Summary: USER.md removed from immutable contracts (wrong owner - user info is user-owned live context); `<dataRoot>/user/*.md` dispatched (sorted) into every agent launch's generated prompt; bootstrap seeds `user/USER.md` once; loader layers now governance -> persona -> identity -> mission -> user.
|
||
- Observed: user edit propagates to next launch (TUI or headless) without rebuilds; contract-only prompts unchanged when no user dir present.
|
||
- Correction (recorded): first implementation pass did not regenerate the container - caught by owner test (edits to repo/mirror copies of USER.md did not propagate; the design, not the test, was the defect).
|
||
|
||
## Phase 19: Agent seats + roles/ convention (M15) — recorded retroactively
|
||
|
||
- Timestamp of work: 2026-09-03; recorded: 2026-09-03 (back-filled)
|
||
- Summary: `agents/<name>/` holds `agent.json` (strict validation: version, name, role?, capabilities?, workspace?, session?) + `SOUL.md` persona; `agent.sh` validates, copies runtime SOUL to `dataRoot/agents/<name>/`, sets `MOSAIC_AGENT_SOUL_FILE`; loader fills the SOUL slot from the seat persona (contract SOUL = default); identity section gains role; per-agent default workspace; compose passthroughs.
|
||
- Observed: launch with seat definition replaces the contract persona in the generated prompt; role in identity; seat record written once; suites green; RELEASE 0.0.10 packaged, health-gated activated.
|
||
- Correction (recorded): RELEASE was not bumped when container content changed - tag r0.0.9 rebuilt with different content (invariant lapse; r0.0.9 was never active). Restored: RELEASE 0.0.10 packaged beside, health-gated, activated.
|
||
- Conventions recorded per owner direction: repository root holds bootstrap-required configuration only; role contracts live in `roles/`.
|
||
|
||
## Backfill note
|
||
|
||
Phases 16-19 were recorded retroactively on 2026-09-03 after editor-session races
|
||
left them unwritten at the time of work. Ground truth for each entry: the git
|
||
history (commit subjects/bodies), the Gitea milestone/issue records (#32, #34,
|
||
#35, #36), and the suite files themselves. No facts were reconstructed from
|
||
memory alone.
|
||
|
||
---
|
||
|
||
## Phase 20: Release self-determination (M16)
|
||
|
||
### Entry 20.1 — before
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Intended action: The system determines what is installed and aligns itself; the user never manually runs release.sh. `release.sh ensure` (align-or-noop) invoked automatically by human-facing launchers (hello, verify, agent); run-task reports drift without auto-aligning (workers/suites must not trigger builds or model gates mid-automation).
|
||
- Reason: Owner direction — intelligence in operation; post-reset pointer loss required a manual release command, which contradicts the self-healing design.
|
||
- Expected result: post-reset pointer loss auto-restores via health-gated ensure; drift warns on run-task; aligned state is a no-op; M20 packages/* decision recorded.
|
||
|
||
### Entry 20.2 — after
|
||
|
||
- Timestamp: 2026-09-03
|
||
- Commands run: ensure with pointer removed (live drift); ensure idempotence; drift-warning demo via RELEASE bump without packaging; full suites.
|
||
- Observed result: drift detected (active: none, desired: 0.0.11) -> health-gated activate -> aligned; second ensure no-op; run-task drift warning fired on desired-version bump without packaging; all suites green (24/68/17/14 + verify).
|
||
- Failure or correction:
|
||
1. First run-task edit anchor missed (inline comment mismatch) — reapplied with exact text.
|
||
2. RELEASE was temporarily bumped to 0.0.12 without packaging for the drift demo — restored to 0.0.11; state pointer remained aligned.
|
||
- M20 decision recorded in ROADMAP.md: v2 adopts packages/* monorepo structure at usurpation (owner, continuity-first).
|
||
- Process note (tool races): mechanism confirmed — batching a file write/edit and a dependent bash command in one parallel block runs the bash before the write flushes. Consequences: lost doc updates, stale anchors, one premature grep. Operating rule: dependent calls sequential; every write verified before claimed complete.
|
||
|
||
## Result (M16)
|
||
|
||
Release self-determination live: the system aligns itself to RELEASE without manual commands. Suites 24/68/17/14 + verify green.
|
||
|
||
## Phase 21: M16 hardening + M20 decision
|
||
|
||
- Recursion guard: release.sh's health-gate task run sets MOSAIC_ENSURE_SKIP
|
||
so the gate's run-task cannot re-enter release self-determination.
|
||
- run-task.sh: drift warning on pointer/RELEASE mismatch (workers and suites
|
||
never trigger builds or model gates mid-automation).
|
||
- ROADMAP M20 decision recorded: v2 adopts packages/* monorepo structure at
|
||
usurpation (owner, continuity-first); restructure sequenced as M20 phase 1.
|
||
- Live drill: drift 0.0.11 -> 0.0.12 detected, health-gated activate, no
|
||
recursion, verify green.
|
||
|
||
## Phase 22: Conductor-loop calibration with a live collaborator (#43)
|
||
|
||
- First full loop through the live-seat path: decompose → dispatch
|
||
(agent-send.sh, class=actionable) → receipt → line-by-line diff review →
|
||
suite-gated integration. Worker: ms-test seat (glm-5.3-flash) in the repo
|
||
cwd, scoped to docs/TOOLS.md, no git.
|
||
- Before (conductor baseline): suites 24/74/14/17 green; TOOLS.md had no
|
||
tools/ coverage; Maintenance table claimed test-task.sh = 58 cases (stale).
|
||
- After: TOOLS.md gains "Tools (host-side)" (agent-send.sh, agent-watch.sh,
|
||
unslop-check.js), corrected counts, reading-guide fix; suites 24/74/14/17
|
||
+ verify green post-integration.
|
||
- Masking-failure rule applied: every documented flag/subcommand/exit code
|
||
independently verified against tool source by the conductor, not taken
|
||
from the worker's report (all claims checked out).
|
||
- Worker caught a spec gap the conductor missed: the intro reading-guide
|
||
("all entry points are scripts/*.sh") became false with the new section;
|
||
amendment flagged, reviewed, accepted.
|
||
- Process correction: the worker's first reply was typed into the pane
|
||
without agent-send.sh and never delivered; the protocol resend is the
|
||
report of record. Comms discipline is load-bearing, not ceremony.
|
||
- CURRENT.md staleness corrected: it still named M16 as next though M16
|
||
(#38) and M17 (#40–#42, skill-lifecycle-v1, release 0.0.12) had shipped;
|
||
late entries added to its completed log, next action is now M18.
|
||
|
||
## Result (calibration)
|
||
|
||
The conductor loop is proven end to end on a live seat; TOOLS.md covers the
|
||
tools/ tree; suites green at every gate.
|
||
|
||
## Phase 23: M18 — seat-role progressive capability restriction
|
||
|
||
- Role contracts: `roles/<role>.json` — roleVersion, name (must match
|
||
filename), tools ceiling (subset of pi built-ins), network declared
|
||
(none | api-only | open; enforcement is a later milestone). Strict
|
||
schema, fail closed; a non-role document (e.g. conductor-policy.json)
|
||
refuses.
|
||
- `mosaic-task.mjs resolve-role <file>`: config-free validation, emits
|
||
MOSAIC_ROLE_TOOLS / MOSAIC_ROLE_NETWORK for agent.sh to consume.
|
||
- `agent.sh`: a declared role binds to its contract. Missing/invalid
|
||
contract refuses the launch (exit 2, names the role) — the
|
||
under-equipped-seat failure mode, mirroring M17 skills. Effective tools
|
||
= ceiling ∩ requested (CLI --tools or agent.json caps); no request →
|
||
ceiling stands; narrowing and tool-free outcomes are loud on stderr.
|
||
Adapters unchanged (MOSAIC_TOOLS carries the effective set); headless
|
||
M9 chain (mission ∩ task) untouched.
|
||
- Ships roles/researcher.json — the existing researcher seat declares the
|
||
role; without the contract the fail-closed gate would refuse its launch.
|
||
- Suite additions (14 cases, task suite 74 → 88): contract resolution,
|
||
wrong-kind/name/network/duplicate/unsupported/missing refusals, seat
|
||
narrowing E2E via mock adapter, tool-free E2E, missing-contract refusal.
|
||
- Test-authoring correction: the first version of the missing-contract
|
||
case registered its check only on the failure path (a `|| RC=$?` chain
|
||
swallowed it on success); caught by count arithmetic (74 + 15 ≠ 88),
|
||
restructured so the case always registers.
|
||
|
||
## Result (M18)
|
||
|
||
Seat roles are ceilings, not labels: the M15 role field now resolves to a
|
||
versioned contract that seats cannot escalate past. Suites 24/88/14/17 +
|
||
verify green.
|
||
|
||
## Phase 23 follow-up: fail-closed seat resolution under override (#46)
|
||
|
||
- Owner live-verified M18 (2026-09-03): ceiling narrowing note with the
|
||
correct narrowed set, missing-contract refusal message, clean researcher
|
||
launch, validator positives and negatives, tool-free note — all as
|
||
expected.
|
||
- The verification surfaced a governance gap: an explicit
|
||
MOSAIC_AGENTS_DIR override that cannot resolve the named seat still
|
||
launched — seatless, unbounded, no role ceiling to bind.
|
||
- Owner decision: fail closed. agent.sh now refuses (exit 4, names the
|
||
seat and the dir) when the override is set and no seat definition
|
||
resolves; unsetting the override keeps the M13 plain governed TUI.
|
||
MOSAIC_ROLES_DIR needs no symmetric change — the M18 gate already
|
||
refuses unresolvable contracts.
|
||
- Task suite 88 → 90 (refusal + refusal-names-the-seat); TOOLS.md Agent
|
||
section documents the refusal.
|
||
|
||
## Result
|
||
|
||
Suites 24/90/14/17 + verify green. Seat resolution is now fail closed in
|
||
every direction: unknown seat under override, declared role without
|
||
contract, invalid contract, empty ceiling intersection.
|
||
|
||
## Phase 24: M19 — harness auth tooling (pi checkpoint)
|
||
|
||
- Investigation (pi 0.84.4 docs + host auth.json metadata; values never
|
||
read): provider stacking is native — one auth.json keyed by provider,
|
||
resolution `--api-key > auth.json > env > models.json`, OAuth entries
|
||
auto-refresh. Multi-account per provider is NOT native (one entry per
|
||
provider, no namespacing) → named-file design confirmed:
|
||
auth.<account>.json + per-launch injection.
|
||
- scripts/auth.sh: `status` (provider names + credential types + perms +
|
||
env-side credential-like NAMES, informational; never credential
|
||
material) and `accounts` (named files, active marker). Exit codes per
|
||
convention: 3 missing for a read, 2 unparseable, 4 file/environment
|
||
(symlink refuses).
|
||
- scripts/agent.sh --auth <account>: resolves auth.<account>.json and
|
||
exports PI_AUTH_FILE — the compose read-only mount source, so no new
|
||
plumbing. Missing/invalid account refuses before any container work.
|
||
- scripts/test-auth.sh (13 cases, no Docker): the core assertion is the
|
||
safety property itself — fixture key/token/env VALUES never reach
|
||
output — plus the exit-code paths and the accounts listing.
|
||
- Scope note: headless task runs keep the default credential; worker auth
|
||
selection is a separate policy decision.
|
||
- Real-host smoke: 3 providers reported (anthropic/openai-codex oauth,
|
||
zai api_key), perms 600, no named accounts yet.
|
||
|
||
## Result (M19)
|
||
|
||
Auth is checkpointable without exposing credentials, and multi-account has
|
||
a per-launch path. Suites 24/90/14/17/13 + verify green. The agreed
|
||
ROADMAP sequence M16–M19 is complete; M20 (packages/* restructure +
|
||
unified CLI) is owner-gated.
|
||
|
||
## Phase 24 follow-up: auth ownership corrected — data root, never ~/.pi (#48)
|
||
|
||
- Owner correction after M19 review: mosaic-managed named accounts must
|
||
not live inside ~/.pi — the stack must never impact default harness
|
||
usage. Recorded as a ROADMAP standing decision: the stack never writes
|
||
to default harness config locations; ~/.pi is read-only to the stack.
|
||
- Correction noted honestly: M19 as shipped placed accounts beside
|
||
~/.pi/agent/auth.json. Nothing had been created there (accounts reported
|
||
none), so the move breaks nothing.
|
||
- auth.sh is now config-driven (data root from config.json, fail closed —
|
||
consistent with every other tool); status reports both sources labeled:
|
||
default harness credential (read-only to the stack) + mosaic-managed
|
||
accounts.
|
||
- Accounts live at <dataRoot>/auth/<account>.json, perms 0600 enforced:
|
||
loose perms flagged in listings and refused by agent.sh --auth
|
||
(mirrors scripts/gitea-api.sh credential hygiene).
|
||
- Test-authoring correction: the first suite rewrite asserted "(none)" in
|
||
cases whose fixtures had already created accounts; caught on review
|
||
before any run, assertions rewritten to match fixture state.
|
||
- auth.sh suite: 13 → 15 cases (accounts-create-nothing, loose-perms
|
||
refusal, invalid-config refusal added).
|
||
|
||
## Result
|
||
|
||
Suites 24/15/90/14/17 + verify green. Default harness usage is untouched
|
||
by design; all mosaic-managed credentials live inside the governed data
|
||
root.
|
||
|
||
## Phase 25: harness/provider/auth registry specification (#49)
|
||
|
||
- Design-only phase; no implementation authorized. Draft:
|
||
`docs/plans/2026-09-03_auth-provider-harness-registry.md`.
|
||
- Agent harness is specified in agent.json as one scalar identifier
|
||
(`harness: "pi"` initially), resolved through a versioned harness
|
||
manifest/adapter rather than a permanent hard-coded enum. Existing v1
|
||
seats migrate with a loud pi default; no CLI harness override in phase 1.
|
||
- Central registry separates providers, accounts, reusable settings
|
||
profiles, runtime seat selection, and generated harness files. A seat
|
||
references one reusable profile; it is not registered with each provider.
|
||
- Multiple OAuth/API accounts for one provider may be centrally authorized;
|
||
pi materializes exactly one active account per provider. Runtime selection
|
||
is audited data-root state; generated auth.json/models.json are disposable
|
||
per-seat derivatives.
|
||
- OAuth login/refresh is host-side and centralized; agents never enroll or
|
||
own refresh tokens. Exact noninteractive pi refresh mechanics remain a
|
||
required implementation investigation.
|
||
- Local and remote Ollama are endpoint-provider records materialized into
|
||
per-seat models.json, independently scoped from authentication accounts.
|
||
- Target mosaic CLI covers auth account lifecycle, provider lifecycle,
|
||
refresh/ensure, reusable settings profiles, and seat selection. Secret
|
||
material is never accepted on argv.
|
||
- Spec includes registry paths/schemas, naming/perms, fail-closed launch
|
||
materialization, migration from M19, acceptance suites, and ten explicit
|
||
owner review gates (including reset/backup semantics and encryption at
|
||
rest).
|
||
|
||
## Result (spec draft)
|
||
|
||
Spec is ready for owner/conductor review; CURRENT.md points only to that
|
||
review. Implementation remains blocked until all ten gates are resolved.
|
||
|
||
## Phase 25 independent review receipt (#50)
|
||
|
||
- Reviewer: live ms-test seat, zai/glm-5.3; read-only, no files edited.
|
||
- Verdict: ACCEPT WITH CHANGES. Taxonomy and reusable-profile/no-seat-
|
||
registration model are sound; two technical P0 gaps plus one policy P0
|
||
block implementation.
|
||
- P0: define per-seat launch provider/model resolution; resolve rotating
|
||
OAuth-token persistence for long-running seats with read-only generated
|
||
auth; enforce role auth ceiling ∩ settings profile in phase 1 and repair
|
||
AGENTS.md data map/reset warnings.
|
||
- Ten-gate recommendations persisted in Gitea #50. Important additions:
|
||
mandatory settingsProfile for v2 seats; session account pinning sidecar;
|
||
Node secret-handling core; remote Ollama HTTPS; dataRoot reset semantics;
|
||
hard-delete stale generated credentials; per-account refresh locking.
|
||
- Comms note: acknowledgment returned rc=2 (submission not confirmed), but
|
||
pane evidence showed it was submitted, read, and acted on. No retry was
|
||
sent because duplicate delivery would be worse; watch retired.
|
||
|
||
Implementation remains blocked pending owner/conductor adjudication and a
|
||
revised spec.
|
||
|
||
## Phase 25 review revision: harness lifecycle (gate 1 resolved)
|
||
|
||
- Owner confirmed canonical harness IDs match executable names: `pi`,
|
||
`claude`, `codex`, `opencode`. agent.json stores one scalar ID; dynamic
|
||
manifest/registry resolution replaces a hard-coded schema enum.
|
||
- Spec adds `mosaic harness list|detect|install|rm|status`.
|
||
- Detection recognizes reviewed canonical executables, records compatible
|
||
findings as available, and never imports harness homes/config/auth.
|
||
- Installation is exact-version/verified, Mosaic-managed, never global;
|
||
immutable runtime packages survive dataRoot reset.
|
||
- Container seam remains explicit for review: a detected host executable is
|
||
available but not launch-ready until imported/installed into a managed
|
||
runtime, unless host execution gets a separate reviewed adapter.
|
||
- Gate 1 marked RESOLVED in the spec and #50; all other P0/review gates remain
|
||
open. No implementation authorized.
|
||
|
||
|
||
## Phase 26: frontend design operating standard (2026-09-05, before)
|
||
|
||
- Owner requested concrete design rules portable across agents and harnesses,
|
||
then added mandatory site completeness: 404, privacy, applicable cookie
|
||
consent, About, Contact methods, and dynamic copyright years.
|
||
- Before: ms-frontend-design is an untracked art-direction skill with broad
|
||
accessibility guidance and no site-completeness acceptance checks.
|
||
- Planned: a compact core plus focused design, accessibility, visual-system,
|
||
site-completeness, and verification references; remove the irrelevant
|
||
license pointer at owner direction. Preserve the unrelated CURRENT action.
|
||
- Gitea issue lookup hit sandbox DNS failure; escalated lookup is pending.
|
||
- Validation planned: skill validator, local reference integrity, whitespace,
|
||
and scenario walkthroughs. No runtime stack changes are planned.
|
||
|
||
## Phase 26 result: frontend design operating standard (#52)
|
||
|
||
- Gitea lookup succeeded with HTTP 200 after escalation; issue #52 created
|
||
with HTTP 201. The GET helper returned exit 1 despite HTTP 200 and a valid
|
||
response; its empty-body cleanup expression explains that exit status.
|
||
No helper changes were made.
|
||
- Replaced ms-frontend-design/SKILL.md with a 115-line portable core and five
|
||
focused references: design principles, visual system, accessibility, site
|
||
completeness, and verification. Removed the irrelevant license pointer.
|
||
- Added 36 identifiable rules: contextual UX heuristics, semantic visual
|
||
roles, accessibility thresholds, complete states, required public-site
|
||
pages/contact methods, truthful privacy content, applicable functional
|
||
consent, shared dynamic copyright, and evidence of completion.
|
||
- Source check: Laws of UX, W3C WCAG/APG, Nielsen heuristics, EDPB transparency,
|
||
and current CNIL cookie-guidance pages consulted. Cookie requirements are
|
||
scoped by actual technologies and jurisdiction; no blanket compliance claim.
|
||
- Structural validation: bundled quick_validate.py passed; all eight local
|
||
Markdown links resolve within the skill; 36 rule IDs are unique; all six
|
||
skill files have final newlines and no trailing whitespace; git diff --check
|
||
passed. No runtime stack suites were run for these Markdown-only changes.
|
||
- Reasoning walkthrough: seven scenarios checked against the instructions.
|
||
New public sites require support pages; consent-required integrations need
|
||
network/storage evidence; internal dashboards and narrow repairs preserve
|
||
scope; missing business facts remain unresolved; static years need rollover;
|
||
missing browser capability yields not-verified checks. No app was rendered
|
||
and no independent or cross-harness execution was performed.
|
||
- Skill remains in the working tree for owner review/integration; no commit,
|
||
push, or activation. CURRENT.md retains the unrelated registry review action.
|
||
|
||
## Phase 27: agent/project/workspace planning (2026-09-06, before)
|
||
|
||
- Jason authorized documentation first, with owner review between phases.
|
||
Reusable agent identities, project/workspace registration, workspace-scoped
|
||
work state, Resume/Fresh launches, and execution auditability are the topic.
|
||
- Baseline: 69d1bb3aa4b826218aa4cca3710f2d98c0b9d7ba. Existing uncommitted
|
||
skill drafts, Phase 26, and session entries belong to other work and remain
|
||
untouched. The earlier owner checkpoint edit to CURRENT.md is retained as
|
||
history through this entry, then superseded by the new planning direction.
|
||
- Before: Jason demonstrated researcher launch, read/ls on an empty test
|
||
workspace, exit, and recall after resume. This is user-provided evidence,
|
||
not a permissions-isolation test. A fresh-context demonstration did not
|
||
occur; no broad foundation acceptance is inferred.
|
||
- Plan: write a plain-language requirements/phase document and a linked
|
||
schema/audit discussion draft. Mark proposals and open decisions explicitly.
|
||
No runtime schema, source, account, release, or workspace migration changes.
|
||
- Issue creation requested from rocko through agent-send on the discovered
|
||
default socket, exit 0 delivered. Scope is issue intake only under the
|
||
authorized seat identity. The repo helper still expects personal-credential
|
||
JSON; it was inspected as code, not invoked. No credential values read.
|
||
- Later Archify mapping and distinct-agent gap analysis require separate
|
||
owner phase approval. No review or mapping worker dispatched in this phase.
|
||
- Checks planned: Markdown references, embedded JSON syntax, evidence-source
|
||
ranges, plain-language lint, and whitespace. Runtime suites are not proof
|
||
of a documentation draft and are not planned unless publication is requested.
|
||
|
||
## Phase 27 result: documentation draft for owner review (#53)
|
||
|
||
- Rocko reported issue #53 creation under its seat identity, POST 201 at
|
||
2026-09-06T00:12:33Z. Read the retained issue body at
|
||
~/.mosaic/fleet/lanes/archify/comms/2026-09-06T00-12Z_rocko_issue-53-body.md.
|
||
No legacy personal-credential helper invocation or credential changes.
|
||
- Added docs/plans/2026-09-06_agent-project-workspace-foundation.md and
|
||
docs/plans/2026-09-06_workspace-schema-and-audit.md. R1-R15 record owner
|
||
intent; D1-D15 separate open decisions from proposed fields and mechanisms.
|
||
Included launch identity, state ownership, work selection, registrations,
|
||
execution/action evidence, message routing, concurrency, and audit limits.
|
||
- Current-source references identify global session naming, per-agent mission
|
||
and SOUL files, shared prompt/temp files, and the broad data-root mount as
|
||
places the later independent analysis must inspect. No race reproduction
|
||
or security isolation claim. Initial citation ranges were corrected during
|
||
author checking before reporting the draft ready.
|
||
- CURRENT.md now stops at owner review of this phase-1 draft. Registry #50
|
||
stays paused. Archify mapping, distinct-agent gap analysis and report review,
|
||
implementation, and user tests each require later phase approval.
|
||
- Checks passed: five local links/anchors; two JSON examples parse; nine source
|
||
citation groups exist within unchanged baseline files; R1-R15 and D1-D15
|
||
unique/complete; code fences, final newlines, and whitespace valid. Both
|
||
new documents pass node tools/unslop-hook/unslop-check.js; git diff --check
|
||
passes on the scoped planning changes. These are author structural checks,
|
||
not independent review, JSON Schema validation, or runtime test evidence.
|
||
- Draft SHA-256 values:
|
||
foundation: fb9e2981fee864771c20c6176995192c5624a9d3004737d9b12ce3b1fb2c53f6
|
||
schema/audit: 50ced2a31581e46a443b5a6ba8120fdde5463ff58412f7b8d7872ffcdaa7a47a
|
||
- No runtime suites, worker/map/review dispatch, implementation, commit, push,
|
||
release change, migration, or issue closure. Existing unrelated work kept.
|
||
Status is documentation drafted for owner review, not approved design.
|
||
|
||
## Phase 27 amendment: configuration-change notice (2026-09-06, before)
|
||
|
||
- Owner approved current canonical SOUL at each launch, execution-specific
|
||
input copies, no silent mid-session replacement, and visible change notices.
|
||
Added owner requirement: TUI/GUI/WUI can reference the launch hash and show
|
||
canonical-versus-running configuration mismatch with a Fresh recommendation.
|
||
- Documentation only under #53. Plan amendments will distinguish approved
|
||
update behavior from proposed hash fields/comparison rules. Credential
|
||
lifecycle, permission revocation, and exact hash scope remain separate
|
||
decisions. No change detector, UI, or launcher implementation authorized.
|
||
|
||
## Phase 27 amendment result: configuration-change notice (#53)
|
||
|
||
- Recorded owner-approved SOUL/update behavior as R16 and cross-interface
|
||
configuration mismatch notices as R17. Clarified that today's SOUL copy is
|
||
refreshed each launch, not permanently assigned to a workspace.
|
||
- Schema discussion section 2.1 distinguishes the whole launch-manifest hash
|
||
from the comparable agent-configuration hash. Field names, hash definition,
|
||
check/notification mechanics, and startup verification remain proposals in
|
||
D16. D10 is only partly resolved; credential lifecycle remains open.
|
||
- A mismatch recommends Fresh, never automatic restart or abandonment. Added
|
||
unknown comparison status, per-execution input binding, no secret hashing,
|
||
no false warnings from ordinary task updates, and the distinction between
|
||
a startup fingerprint and continuous process verification. Permission
|
||
revocation remains independent of retaining old launch inputs.
|
||
- Added a two-workspace update test and the canonical-config-to-client-notice
|
||
path for later independent tracing. CURRENT stays in owner documentation
|
||
review; no new phase, runtime change, mapping, or independent review began.
|
||
- Structural checks passed: five links/anchors, two JSON examples, nine source
|
||
citation groups in unchanged baseline files, R1-R17 and D1-D16, fences and
|
||
whitespace; both prose checks and git diff --check passed. No runtime suites.
|
||
- Revised draft SHA-256 values, superseding earlier draft identities only:
|
||
foundation: 1aada228772186896470ed52db89398f81e2949c2c38e8d49b86b8e41c6b86df
|
||
schema/audit: 99e2e28f0307345c738b273950b7f0c2b01c0133c6bf5cf3ce5e1f17819b8f92
|
||
- No commit, push, or issue closure. Exact schema choices still need review.
|
||
|
||
## Phase 27 interview round 1 (#53, 2026-09-06)
|
||
|
||
- Owner answered Q1 C, Q2 B, Q3 B: linked project/workspace missions with
|
||
standalone workspace missions allowed within scope; bounded delegated
|
||
system registration/assignment authority; shared project information plus
|
||
explicitly permitted workspace visibility. Updated R2/R3, added R18, and
|
||
recorded the answers in schema/audit section 7.1 with the source session.
|
||
- Q4 selected B with a qualification rejecting an unnecessary offer and
|
||
preferring an initial-conversation declaration. Preserved the owner's
|
||
wording. D4 remains unresolved pending a focused clarification about
|
||
automatic first creation versus an explicit Fresh invocation.
|
||
- CURRENT.md reflects the owner-authorized interview and its pending question.
|
||
No whole-plan approval, runtime change, map, review dispatch, or publication.
|
||
- Markdown links/anchors, JSON examples, fences/whitespace, requirement and
|
||
decision IDs, both prose checks, and git diff --check passed. No suites run.
|
||
|
||
## Phase 27 Q4 clarification (#53, 2026-09-06)
|
||
|
||
- Jason selected A: genuine first use creates the initial conversation and
|
||
announces it without an offer. Later launches resume by default. Missing
|
||
or damaged established conversations are errors, not first use.
|
||
- Updated R7, launch discussion, D4, and CURRENT; appended the clarification
|
||
after the verbatim original Q4 answer. Reliable first-use history remains
|
||
a storage/recovery detail, not an assumption based on file absence.
|
||
- Both prose checks, Markdown links/anchors, JSON examples, fences/whitespace,
|
||
and git diff --check passed. Documentation only; no runtime tests or changes.
|
||
|
||
## Phase 27 interview round 2 (#53, 2026-09-06)
|
||
|
||
- Owner Q5 A: strict single-parent hierarchy; project owns N workspaces, each
|
||
workspace requires one project. Workspace missions have at most one parent
|
||
project mission; dependencies do not create additional parents or grants.
|
||
- Q6 agreed to Fresh/Continue recovery information. Q7 B permits authorized
|
||
independent routine acceptance and autonomous non-destructive decisions
|
||
within the established goal/plan, without user interaction for each step.
|
||
Owner checkpoints, protected operations, and deviations remain gated.
|
||
- Q8 A makes default Abandon assignment-only. Q9 B requires explicit authorized
|
||
assignment change for unfinished prerequisites, not silent extra work. Read
|
||
together with Q7, delegated coordinators can authorize within-plan changes
|
||
without asking Jason each time; the worker cannot self-expand silently.
|
||
- Updated both drafts and CURRENT. R19 records bounded autonomy; section 7.2
|
||
preserves this round's answers. Exact field/lifecycle details remain open.
|
||
- Checks passed: five links/anchors, two JSON examples, nine unchanged-baseline
|
||
citation groups, R1-R19/D1-D16, fences/whitespace, both prose checks, and
|
||
git diff --check. No runtime tests, implementation, dispatch, or publication.
|
||
|
||
## Proactive skill and dev goal protocol (2026-09-05)
|
||
|
||
- Owner requested the recommended ms-proactive-agent changes in this repository
|
||
and a possible ms-goal companion for testing before /goal integration.
|
||
- Replaced fleet-only paths, mandatory extension/report dependencies, and
|
||
conflicting stop/wait rules with scoped context resolution, checkpoint-based
|
||
continuation, bounded goal decomposition, persistent approvals, explicit
|
||
manual waits, ownership checks, and uncertain-action recovery.
|
||
- Added skills/ms-goal/SKILL.md: file-based goal lifecycle and recovery protocol,
|
||
single-writer dev record convention, criterion-based completion, budget/hold
|
||
preservation, and explicit requirements for future extension integration.
|
||
- Added references/execution-checks.md under ms-goal with a two-task fixture,
|
||
state/failure scenarios, and future runtime checks. This is an instruction
|
||
protocol; no scheduler, locking service, workspace API, or goal tool added.
|
||
- Both quick_validate.py checks passed; relative links, fenced YAML record,
|
||
Markdown fences and whitespace passed. The documented fixture verifier
|
||
accepted correct artifacts and rejected an incorrect hash in a temporary
|
||
directory. No live model run, concurrency test, or full runtime suites.
|
||
- Existing implicit skill invocation remains enabled through default metadata.
|
||
No installed skill copies, runtime configuration, CURRENT.md, or project
|
||
planning documents changed. No activation, commit, push, or issue closure.
|
||
|
||
## Phase 27 interview round 3 (#53, 2026-09-06)
|
||
|
||
- Q10 A permits unassigned conversation/inspection and recorded assignments
|
||
for changes. Q11 corrects the automatic-connect recommendation: report the
|
||
active-session conflict and offer to connect; do not auto-attach or duplicate.
|
||
The exact owner example is retained in section 7.3. Service response is open.
|
||
- Q12 B separates shared work records from transcript grants. Q13 A chooses
|
||
concise action metadata with separately controlled evidence and no secrets.
|
||
Q14 A stops affected workspace executions upon membership removal without
|
||
stopping independently authorized work elsewhere; in-flight effects remain
|
||
subject to reconciliation.
|
||
- Updated R14 and added R20-R23; amended schema discussion, decision statuses,
|
||
interview record, candidate tests, and CURRENT. Proposed ad-hoc task fields
|
||
are not presented as approved JSON Schema. No runtime behavior is changed.
|
||
- Link/anchor checks, embedded JSON, fences/whitespace, R1-R23/D1-D16, both
|
||
prose checks, and git diff --check passed. No suites, dispatch, or publication.
|
||
Preserved the unrelated proactive-skill log entry and untracked skill work.
|
||
|
||
## Phase 27 interview round 4 (#53, 2026-09-06)
|
||
|
||
- Owner answered A to Q15-Q19. Services get an already-active result and choose
|
||
any authorized connection explicitly. One controlling interface is allowed;
|
||
authorized observers remain separate and control transfer is explicit.
|
||
- Fresh requests controlled replacement, not unsafe overlap. Unknown outcomes
|
||
permit authorized non-destructive investigation and evidence-based recovery,
|
||
never blind replay. Required audit failure blocks affected executions; other
|
||
work continues only if its required recording still functions.
|
||
- Updated R21, added R24-R27, and revised both drafts and CURRENT. Added proposed
|
||
connection metadata and preserved the distinction between user decisions and
|
||
unverified adapter, stale-controller, recovery, and audit-storage mechanisms.
|
||
Section 7.4 records this round; earlier answers and qualifications remain.
|
||
- Link/anchor checks, JSON examples, fences/whitespace, R1-R27/D1-D16, both
|
||
prose checks, and git diff --check passed. Documentation only; no runtime
|
||
tests, implementation, worker dispatch, maps, commit, push, or issue closure.
|
||
|
||
## Phase 27 interview round 5 (#53, 2026-09-06)
|
||
|
||
- Owner answered Q20 B/Q21 B: shared behavior-affecting configuration fingerprint
|
||
plus automatic non-blocking notices and on-demand checks. Exact field/hash
|
||
encoding, source verification, and delivery mechanisms remain unimplemented.
|
||
- Q22 B limits default sharing to designated general preferences; personal and
|
||
project information is supplied where authorized/relevant. No user profile
|
||
files or runtime context dispatch were changed by this design ruling.
|
||
- Q23 A closes workspaces by retirement, safe stop, and record retention, not
|
||
deletion. Q24 A preserves legacy sessions for explicit reviewed adoption;
|
||
no automatic default-project placement or filename-derived membership.
|
||
- Updated R17, added R28-R30, and amended schema discussion, D6/D13/D16,
|
||
interview section 7.5, candidate tests, and CURRENT. Added proposed retirement
|
||
and adoption record requirements without claiming a migration API exists.
|
||
- Link/anchor checks, JSON examples, fences/whitespace, R1-R30/D1-D16, both
|
||
prose checks, and git diff --check passed. No runtime tests, implementation,
|
||
dispatch, migration, commit, push, or phase advancement.
|
||
|
||
## Phase 27 interview round 6 (#53, 2026-09-06)
|
||
|
||
- Owner answered Q25 A: approved plan changes pause affected work for delegated
|
||
reconciliation; unaffected work may continue. Already-issued effects need
|
||
accounting, and changes beyond authority or safe resolution are escalated.
|
||
- Q26 B selects standard scope permission roles with registration-specific
|
||
narrowing. Roles do not redefine agent identity/type or expand authority;
|
||
exact role names and permission lists remain for reviewed schema design.
|
||
- Added R31/R32, schema sections 1.1/3.2, round-6 receipt and interview checkpoint;
|
||
updated D3/D15, candidate tests, and CURRENT. Distinguished agreed behavior
|
||
from proposed schemas and from non-blocking configuration mismatch notices.
|
||
- No additional owner-behavior question is currently ready. Await explicit
|
||
shared-understanding confirmation; technical design branches remain open.
|
||
Schema/fact-finding, mapping, gap analysis, and implementation need later
|
||
authorization. The 26 answers do not themselves finish or approve the plan.
|
||
- Author link/anchor, two JSON examples, fences/whitespace, R1-R32/D1-D16, both
|
||
prose checks, and git diff --check passed. No runtime tests, independent
|
||
review, worker dispatch, migration, commit, push, or issue closure.
|
||
|
||
## Phase 27 owner behavior confirmation (#53, 2026-09-06)
|
||
|
||
- Jason replied "That looks correct" to the post-Q26 behavior summary. Recorded
|
||
shared understanding of intended behavior, not approval of exact schemas or
|
||
a claim that all technical design branches are resolved.
|
||
- Updated the foundation review/phase status, appended schema section 7.8, and
|
||
set CURRENT to await phase-2 authorization. No automatic phase advancement.
|
||
- Author structure/link/anchor/JSON/ID and prose checks plus git diff --check
|
||
passed. No runtime tests, independent review, dispatch, implementation,
|
||
migration, commit, push, or issue closure.
|
||
|
||
## Phase 27 phase-2 start (#53, 2026-09-06)
|
||
|
||
- Jason answered yes to defining exact records, permissions, commands, and audit
|
||
guarantees with read-only technical investigation. Phase 2 is authorized;
|
||
implementation, mapping, migration, publication, and issue closure are not.
|
||
- Baseline remains 69d1bb3. System config validation and Docker availability
|
||
checks passed. Existing image identity is
|
||
sha256:a72aa79f98e54c3c974f5ad08b82e1643a4aa6eff259ac891b738120ba963ca1.
|
||
- Host Pi is 0.85.1, not the runtime's pinned 0.84.4. Do not use host SDK
|
||
documentation as proof of runtime capabilities. Investigation will use the
|
||
existing pinned image and source excerpts, without changing runtime policy.
|
||
- A tool-free sandbox worker will examine supplied source excerpts. Normal
|
||
runner-generated inputs/evidence are expected; no source-editing grant,
|
||
persistent conversation, build, activation, or credential inspection.
|
||
|
||
## Phase 27 phase-2 first contract pass (#53, 2026-09-06)
|
||
|
||
- Tool-free source investigation completed as r-20260906T024609Z-68ee7f,
|
||
exit 0, no persistent session, 1490 response words. Result hash:
|
||
e81ac68a369a9315d827e6fc7117033f794ab7b214d2610ca07081a668045875.
|
||
This is advisory source analysis, not independent gap review or acceptance.
|
||
- Extracted package 0.84.4 documentation from the existing pinned image using
|
||
an unstarted container, then removed that container. Read README, RPC/JSON,
|
||
session-format, security, and containerization docs completely. The candidate
|
||
records hashes and image paths; host 0.85.1 docs were not used as runtime proof.
|
||
- New docs/plans/2026-09-06_foundation-phase2-contract.md proposes common types,
|
||
a record catalog, permission/command rules, ordering, storage, and fingerprints.
|
||
It is a partial technical draft, not complete JSON Schemas or an approved API.
|
||
- Qualified worker suggestions honestly. Its input labelled one adapter span
|
||
65-106 although the file ends at 96; actual supplied lines/citations end at 96.
|
||
Other qualifications separate recorded stdout from trusted effects, scoped
|
||
admission from session-specific locks, growing transcripts from immutable
|
||
snapshots, and disabled extension discovery from explicit extension loading.
|
||
- Pinned docs establish documented events/exact sessions, not Mosaic integration
|
||
or isolation. Q27 asks about command-level vs internal-effect audit coverage;
|
||
recommendation A is a proposal only. CURRENT awaits that owner decision.
|
||
- Author document structure/links/JSON/ID checks, source-baseline equality,
|
||
task validation/receipt correspondence, document hashes, three prose checks,
|
||
and git diff --check passed. No proposed feature/security runtime tests,
|
||
implementation, independent approval, mapping, migration, commit, push,
|
||
release change, or issue closure. Normal task inputs/run evidence and
|
||
generated runtime prompt are the only investigator-launch artifacts.
|
||
|
||
## Phase 27 Q27 command-audit ruling (#53, 2026-09-06)
|
||
|
||
- Jason answered Q27 A. Added R33: initial managed commands require invocation
|
||
evidence with actor/scope/assignment, enforced filesystem/network limits,
|
||
start/end, outcome, and controlled evidence references. No promise of separate
|
||
tracing for every internal file/network effect; no safety gate is waived.
|
||
- Updated all three drafts, appended interview section 7.10, and set CURRENT
|
||
to command/event schema and permission/evidence drafting within phase 2.
|
||
- Author structure/link/anchor/JSON/ID checks, three prose checks, and
|
||
git diff --check passed. No runtime tests, new worker dispatch, implementation,
|
||
mapping, independent approval, commit, push, or phase advancement.
|
||
|
||
## Phase 27 proactive phase-2 continuation (#53, 2026-09-06)
|
||
|
||
- Jason requested ms-proactive-agent. Loaded it and ms-goal; use CURRENT and the
|
||
existing phase-2 plan rather than a competing goal directory or /goal API.
|
||
- Continuing assignment is issue-53-phase2, authored by darkwing in the explicit
|
||
repository working directory, session 01a06e48-0718-71f2-a889-c263c4800fb9.
|
||
This is a single-writer planning assignment, not an enforced runtime claim or
|
||
registered workspace. Owner completion and later phase gates remain binding.
|
||
- Next work: formal command/event candidate with negative fixtures, then concrete
|
||
permission/record and lifecycle details. No skill installation/activation,
|
||
runtime implementation, mapping, migration, publication, or new external sends.
|
||
Aggregate usage is unavailable; no explicit numeric budget was supplied.
|
||
|
||
## Phase 27 reboot recovery and owner hold (#53, 2026-09-06)
|
||
|
||
- Jason reported an unexpected reboot and requested realignment/readiness.
|
||
Treated this as a hold on drafting and dispatch; no automatic proactive resume.
|
||
- HEAD 69d1bb3 and dirty planning/skill work survived. Preserved all five new
|
||
foundation-v1-candidate artifacts. Command schema/fixtures/checker hashes
|
||
match their pre-reboot values; 38 shape checks and five deliberately
|
||
shape-valid forgeries pass. These are author checks, not security enforcement.
|
||
- Record schema/fixtures are unfinished. Recovery diagnostics found 13 expected
|
||
result mismatches: 11 positive records and two path cases. The first positive
|
||
fixture lacks schemaVersion/id/revision/createdAt/authorizationRef. The
|
||
generic fixture construction needs repair; negative results may be masking
|
||
missing positive structure. Unicode byte limits and bidi controls also need
|
||
explicit checks. No fixes were made under the readiness request.
|
||
- Config validates and Docker responds. Image identity and prior research run
|
||
hash match the recorded evidence; no Mosaic worker container was running.
|
||
Pinned temporary docs remain available. No credential contents inspected.
|
||
- CURRENT records paused state, exact next repair, manual owner resume, ownership,
|
||
and unavailable aggregate usage. No pending external action is known; no
|
||
automatic wake or unattended continuation is claimed.
|
||
|
||
## Phase 27 explicit goal resumption (#53, 2026-09-06)
|
||
|
||
- Jason supplied the phase-2 goal, then repeated it with --wait-timeout 60.
|
||
Adopted as explicit resumption of issue-53-phase2, not a second goal or a new
|
||
budget. The existing single-writer scope and owner acceptance gates remain.
|
||
- No goal runtime API is exposed to this session. Use CURRENT and the phase-2
|
||
candidate as file-based records. Preserve the requested timeout value 60;
|
||
flag units/runtime semantics and automatic expiration are not verified.
|
||
No timer, unattended follow-up, or auto-approval is claimed.
|
||
- Resuming with the incomplete record fixtures and missing byte/control checks.
|
||
Later work remains documentation/schema design and read-only investigation;
|
||
no runtime implementation, mapping, migration, commit, or push.
|
||
|
||
## Phase 27 resumed goal checkpoints and Q28 wait (#53, 2026-09-06)
|
||
|
||
- Repaired the interrupted fixture work rather than replacing the goal. The
|
||
generator had dropped common fields when an object also had allOf. Rebuilt
|
||
positive examples with both constraints and preserved original negative
|
||
mutations. First repair attempt hit a nullable-target delta error before
|
||
fixture publication; corrected that case and reran, with no external effect.
|
||
- Integrated explicit calendar, UTF-8 byte, Unicode control/format/surrogate,
|
||
and path-component checks. Removed an unintended space-before-slash rejection.
|
||
The checker now covers command and record schemas, paths, shared-definition
|
||
consistency, and restricted-domain fingerprint vectors.
|
||
- Author checks pass: 38 command cases, 38 record cases, 16 path cases, seven
|
||
hash vectors, plus five intentionally shape-valid forgeries. The forgeries
|
||
require trusted runtime checks; none of these results proves enforcement.
|
||
- Added the schema-package README with exact permission bundle proposals,
|
||
reference/publication semantics, lifecycle guards, storage/commit/recovery
|
||
traces, fingerprint projection, #50 compatibility boundary, and a proposed
|
||
small metadata-only implementation increment for later chartering.
|
||
- Re-read #50 without credential access or registry changes. Preserved dynamic
|
||
executable-name harness IDs, central profiles/accounts, reviewed role policy,
|
||
stable execution-input reconciliation, and the unresolved OAuth refresh gate.
|
||
- CURRENT and phase-2 section 11 track the explicitly resumed goal and tasks.
|
||
Independent ready design/check tasks reached their author checkpoints. Q28
|
||
requires owner direction on Mosaic-controlled vs required native Pi terminal
|
||
experience before dependent execution/control/input/artifact contracts.
|
||
Goal is waiting, not satisfied; manual answer is the resumption condition.
|
||
- Requested --wait-timeout 60 retained, not represented as an armed timer or
|
||
automatic approval. No exposed goal runtime API or automatic wake verified.
|
||
- Document links/anchors/JSON/ID checks, four prose checks, unchanged inspected
|
||
runtime-source comparison, and git diff --check pass. No runtime implementation,
|
||
security feature tests, independent approval, mapping, migration, commit, push,
|
||
release change, issue closure, or worker dispatch during this continuation.
|
||
|
||
## Phase 27 Q28 ruling and resumed contract drafting (#53, 2026-09-06)
|
||
|
||
- Jason answered Q28 A: a Mosaic-controlled terminal is acceptable; Pi remains
|
||
the engine and approved operations are mediated for consistent future clients.
|
||
This resumes P2-5 within the existing goal, not implementation or mapping.
|
||
- Completing planning-only execution/control/message and command-artifact shapes,
|
||
checks, and the owner-review package. No native interface replacement is
|
||
installed by this decision, and no safety requirement is waived.
|
||
|
||
## Phase 28 NG project-local goal footer setup (#54, 2026-09-06)
|
||
|
||
- Jason authorized native Pi launches from this repository as the NG test case,
|
||
prohibited symlinks, and protected the live `~/.mosaic` goal extension used by
|
||
other agents. Docker integration is excluded.
|
||
- Opened #54 and recorded the requirements, state/UI design, ownership,
|
||
verification, rollback, and user-acceptance gates in
|
||
`docs/plans/2026-09-06_ng-goal-footer-dev.md`. Added validated implementation
|
||
and independent-review task declarations under `tasks/`.
|
||
- Copied the goal extension and its imported mosaic-core library as ordinary
|
||
files under `.pi/extensions/`. `.pi/SOURCE-SNAPSHOT.json` records tree hashes.
|
||
No copied path is a symlink and no live source file was changed.
|
||
- Correction during setup: copying all of mosaic-core made its own `index.ts`
|
||
project-discoverable and brought tests coupled to source-brain manifests.
|
||
Removed that separate entry point and tests from the local runtime copy. The
|
||
goal extension retains the required `mosaic-core/lib/` imports. Exactly one
|
||
project extension entry point remains.
|
||
- Native Pi RPC discovery with `--approve`, an isolated temporary
|
||
`PI_CODING_AGENT_DIR`, no session, and no tools returned exactly one `/goal`
|
||
command from `<cwd>/.pi/extensions/goal/index.ts`; no extension error appeared.
|
||
- Focused baseline tests pass 55/55. The first broad copied goal-suite run had
|
||
two failures because source tests expect absent `skills-local/` files. These
|
||
failures are recorded, not relabeled green. Full source-brain mosaic-core tests
|
||
are outside this local dependency-copy baseline.
|
||
- Setup only. Footer implementation, exact-candidate review, full checks, native
|
||
TUI inspection, Jason acceptance, commit, push, and issue closure remain open.
|
||
|
||
## Phase 28 implementation and native verification (#54, 2026-09-06)
|
||
|
||
- Continued after the setup-only checkpoint at Jason's direction. The current
|
||
native session authored the local footer/full recall change; the declared
|
||
container implementation and review tasks were not dispatched.
|
||
- `.pi/extensions/goal/` now uses a themed footer status and clears stale widget
|
||
content. Bare `/goal` and Alt+G show the entire goal. Complete retains recall
|
||
text and bounded evidence without an active loop. Blocked supports explicit
|
||
resume. State stays in project-local, incarnation-fenced `.pi/state/goal/`.
|
||
- `.pi/goal-dev.sh` loads only this local extension and stores new sessions under
|
||
`.pi/state/sessions/`. Native provider auth is reused, not copied. Docker and
|
||
the live fleet extension are unchanged; live source hashes match the baseline.
|
||
- All 67 goal tests pass. Local contract fixtures resolve the source-context
|
||
failures recorded at setup. Repository suites pass: config 24, task 90,
|
||
release 14, conductor 17, auth 15.
|
||
- Real native Pi 0.85.1 PTY checks pass for Paused/Complete at 120 columns and
|
||
Blocked/Waiting at 45, including full bare-command and Alt+G recall and one
|
||
NO_COLOR case. Initial driver failures involved RPC framing and expecting an
|
||
unchanged status to redraw; these were corrected and the full check rerun.
|
||
- Independent read-only native reviewer returned APPROVE. A prior attempt timed
|
||
out without output and supplied no verdict. Reviewed manifest SHA-256 is
|
||
10e949db54149c6bed945fab086ad7a91461683ee5661c920f9ee6bddcf04aae.
|
||
Evidence and limitations are in `.pi/evidence/README.md`.
|
||
- No TypeScript compiler is installed, so static checking was not run. Native
|
||
loading and TypeScript execution passed. Jason's hands-on acceptance remains
|
||
open. No commit, push, issue closure, or production delivery is claimed.
|
||
- Intent: post this checkpoint to issue #54, leaving it open for manual user
|
||
testing. The phase-2 CURRENT record and unrelated dirty changes are preserved.
|
||
- Issue #54 checkpoint posted successfully, HTTP 201, comment 25830.
|
||
|
||
### Phase 28 user acceptance, 2026-09-06 06:05 UTC
|
||
|
||
- Jason replied "It works" to the local native Pi test handoff. Recorded NG-GF-5 acceptance in the issue-54 plan. No additional test coverage is inferred.
|
||
- No code changes, commit, push, Docker integration, or live fleet changes. Static checking remains unperformed; repository delivery disposition remains open.
|
||
|
||
## Phase 29 canonical extension source and replacement layout (#55, 2026-09-06)
|
||
|
||
- Inspected the legacy main tree plus targeted installer, release verifier,
|
||
publish pipeline, npm helper, and representative package/plugin manifests
|
||
through Gitea. The useful pattern separates canonical source, build output,
|
||
installation, and publication. The legacy framework bundle and permissive
|
||
npmjs helper are not copied into stack-v2.
|
||
- Moved the accepted goal source and tests into `extensions/goal/`, with its
|
||
imported support modules in `extensions/mosaic-core/lib/`. The latter has no
|
||
entrypoint. `.pi/extensions/` is now generated and ignored.
|
||
- Added a staged, hash-verified development sync, canonical launcher, native
|
||
test, and 18 packaging controls. The sync rejects full-tree drift, symlinks,
|
||
nested entrypoints, and concurrent writers; interrupted replacements recover
|
||
through a transaction marker and backup.
|
||
- Initial independent review requested fixes for extra destination entries,
|
||
nested entrypoints, replacement interruption, stale locks, and missing tests.
|
||
All were corrected. Follow-up independent review returned APPROVE.
|
||
- Final checks pass: 67 goal tests, 18 package controls, and native PTY checks
|
||
for Waiting, Paused, Blocked, Complete, full command/shortcut recall, narrow
|
||
width, and NO_COLOR. Canonical manifest SHA-256 is
|
||
c2096c00fb505a53482ff6a94a0f293dbc1ca2058d7a1996961601af80c29946.
|
||
- Opened #55 to track phased monorepo ownership and replacement. Intent: post
|
||
the verified first-increment result to #55 and the source relocation to #54.
|
||
No commit, push, npm publication, Docker integration, or live fleet change.
|
||
- Gitea receipts: #55 comment 25831; #54 comment 25832 (HTTP 201).
|
||
- Verification correction: the first canonical manifest check ran from `/`, so all relative paths failed. Reran from the repository root; all 37 files passed. This was a check invocation error, not source drift.
|
||
|
||
## Phase 27 owner-review candidate after Q28 (#53, 2026-09-06 06:33 UTC)
|
||
|
||
- Recorded Jason's Q28 A as R34 and continued the existing goal. The owner
|
||
clarified the earlier /goal deployment mix-up; no timer or extension was
|
||
configured by this phase-2 session. Separate #54 extension and source-layout
|
||
work appeared concurrently and was left untouched. Shared log entries preserved.
|
||
- Added mediated runtime/control/input/response shapes, exact operation parameters,
|
||
launch/history/config bindings, command profiles/limits, messages, decision and
|
||
process evidence. Public requests cannot submit trusted runtime records.
|
||
- Repaired a conditional configuration fixture baseline after its first two
|
||
mismatches. Reconciled command-result evidence by referencing the existing
|
||
outcome event instead of creating competing outcome/signal definitions.
|
||
- Author checks pass: 38 command, 38 record, 16 path, 7 restricted-domain hash,
|
||
155 runtime/control/artifact and 35 synthetic rule-model cases. Ten deliberately
|
||
shape-valid forgeries remain shape-valid and require real trusted rejection.
|
||
Models assume synthetic facts: no actual authentication, sandbox, stopping or
|
||
durable-writer enforcement is established.
|
||
- REVIEW.md reconciles the actual D1-D16 questions, identifies proof gates and
|
||
requests Jason's specific phase-2 verdict. P2-5/P2-6 reached author checkpoints;
|
||
P2-7 waits manually. Goal is not satisfied and issue #53 is not closed.
|
||
- Refined first-increment recommendation to an offline scope/permission inspector
|
||
with a coherent synthetic bundle and no live grants. Persistent state also
|
||
needs publisher/retention protections and closure of legacy broad-mount bypasses.
|
||
- Added explicit adoption rollback and preauthorized fail-safe stopping rules;
|
||
neither introduces a history rewrite or an unaudited exploratory fallback.
|
||
- Six-document structure/link/example and R1-R34/D1-D16 checks pass. Prose checks
|
||
pass after correcting one flagged word and review-table punctuation.
|
||
git diff --check passes; inspected runtime sources still match 69d1bb3.
|
||
- No foundation runtime implementation, worker dispatch, credential operation,
|
||
mapping, migration, commit, push, release change or independent verdict by this
|
||
session. HEAD observed: 69d1bb3aa4b826218aa4cca3710f2d98c0b9d7ba. Other work is not this contract's proof.
|
||
|
||
Candidate identity at this author checkpoint (not an adoption signature):
|
||
|
||
```text
|
||
27fd60f68d30ddc8c1a0cef96714308b8e526f60a17852f7ec21957c1870ec81 docs/plans/foundation-v1-candidate/README.md
|
||
967baed7ec4632d993a197b829a1cacbf637192f8351399c54ad502645b88a49 docs/plans/foundation-v1-candidate/REVIEW.md
|
||
b1a2b4d0df88ba6f7b197252807f3a3925ffff9375f4e70d4ff28593337c3438 docs/plans/foundation-v1-candidate/RUNTIME.md
|
||
82564a7d3200afcdda0850a9454cac6e6cd6a76687d2162c13cf214d7eac4607 docs/plans/foundation-v1-candidate/check.py
|
||
7806e42cd792935ddba1c8bcac853f049d79eab227fb7191fe622685e699203a docs/plans/foundation-v1-candidate/command-events.fixtures.json
|
||
19e9e50359790ec9a4de5b8c817026ac075e254968de1411867222646743d31f docs/plans/foundation-v1-candidate/command-events.schema.json
|
||
cbfcb88531838c8c3dd290257e5d9a657e552bb7dd0f67102b49a921a249da45 docs/plans/foundation-v1-candidate/fingerprint-vectors.json
|
||
d433d06da5cd38baf9e51c8857244ee70375db3b68e02a5325a6d1c2cc47da85 docs/plans/foundation-v1-candidate/records.fixtures.json
|
||
05774aaf6943cb69c113e39ff1c29676a2a230ca7bf665c50dbcaa8049672af6 docs/plans/foundation-v1-candidate/records.schema.json
|
||
02a611925923b2592d9e0e67741a542e6c2e8bec06d69ae5700f25c51d720a7a docs/plans/foundation-v1-candidate/runtime.fixtures.json
|
||
74deeb4cd6d87ff9306ed088b9641e51f9c41db71589b5364424908842ee51bc docs/plans/foundation-v1-candidate/runtime.schema.json
|
||
93d16f38738bb0610d5250ee54c271934e4f2201660becaa72982363d0711fda docs/plans/foundation-v1-candidate/semantic-model.fixtures.json
|
||
c89c3bb19624826c1a84658595c71694a1fd371b9155ef50ffa4c265c099daa8 docs/plans/foundation-v1-candidate/semantic-model.py
|
||
ce58408289fceea4b99d8a77c69523a1c04e683f5084f31c7c4199ae0b9934f3 docs/plans/2026-09-06_agent-project-workspace-foundation.md
|
||
6e854e83f2a2b26cb93473611b0a47264fb64dd08b6c272c6b18257238915c82 docs/plans/2026-09-06_workspace-schema-and-audit.md
|
||
8858537bbb80ec7ec41301b3c5e8c90ccad24b9df761e132a66f29735b7ad925 docs/plans/2026-09-06_foundation-phase2-contract.md
|
||
10f1cad570e82243f90c4272027984e74d08b4de25b07a2b5d1ef9bff2a0c4c7 docs/plans/CURRENT.md
|
||
```
|
||
|
||
## Phase 27 owner acceptance (#53 phase 2, 2026-09-06 06:52 UTC)
|
||
|
||
Jason explicitly said "accept phase 2" after clarification that acceptance is
|
||
of the planning baseline, not technical/security certification or authority to
|
||
implement. P2-7 and goal issue-53-phase2 are satisfied. The prior 06:33 candidate
|
||
identity remains the technical review checkpoint; only acceptance/status records
|
||
changed here. Mapping, independent review, implementation, commit/push and issue
|
||
closure remain separately gated. No next-phase work or runtime change performed.
|
||
|
||
## Foundation mapping goal: initial reconciliation
|
||
|
||
Active operator goal authorizes the technical map, not implementation. Created
|
||
docs/plans/2026-09-06_foundation-technical-map.md with measured directory alignment
|
||
and outstanding code-trace gates. MS55-DW-1 delivery was initially uncertain due
|
||
to the known tmux bug; Dewey then explicitly acknowledged it. No resend performed.
|
||
Boundary agreement accepted; Dewey still awaits owner authorization in his session.
|
||
|
||
## Foundation mapping: initial code trace
|
||
|
||
Read launcher, Pi adapter, role validator/resolver, mission/tool intersection and
|
||
writeOnce/result paths. Added nine source-linked reuse/change classifications,
|
||
component boundaries and dependency implications to the technical map. Verified
|
||
three source hashes against live bytes; no runtime files edited. Next: trace
|
||
mounts, context loading and lifecycle/retention, then reconcile package placement.
|
||
|
||
## Foundation mapping: context/isolation/retention trace
|
||
|
||
Inspected Compose, both runtime context/dispatch scripts, reset and retry/prune
|
||
functions without invoking destructive operations. Recorded seven trace rows,
|
||
five checked source identities and proposed ownership boundaries. Identified
|
||
shared prompt/staging, blanket user-context injection, broad mounts, reset comment
|
||
drift, unguarded replay, and deletion-before-receipt uncertainty. No runtime fixes
|
||
or migrations made. Next: complete requirement coverage and reconcile package
|
||
placement with Dewey for the owner/independent-review handoff.
|
||
|
||
## Foundation mapping: requirement and package reconciliation
|
||
|
||
Cross-checked R1-R34 and added complete responsibility coverage. Read ROADMAP
|
||
M20 owner sequencing and Dewey #55 reconciliation: packages/* is the succession
|
||
target; extensions/** is current source, not a replacement decision. Added an
|
||
eight-row component/ownership matrix. Formal commit-pinned review remains gated
|
||
by uncommitted accepted plans/#55 source; no commit authorization inferred.
|
||
|
||
## Foundation mapping: config/auth and inspector boundary
|
||
|
||
Inspected config validator/bootstrap, auth reporting source and account/CLI
|
||
selection without reading credentials or invoking auth/config operations. Added
|
||
four trace rows, source hashes and seven explicit inspector acceptance cases.
|
||
Sole-config override and error-diagnostic caveats remain review findings, not
|
||
authority changes. Baseline pinning and Dewey packaging reconciliation remain
|
||
open; no runtime implementation or package-manager change.
|
||
|
||
## Foundation map handoff (2026-09-06 07:16 UTC)
|
||
|
||
Prepared MAP-HANDOFF-1 with source hashes, full requirement coverage, ownership
|
||
questions, baseline options and a non-author review checklist. Nine inspected
|
||
legacy files match 69d1bb3; handoff structure and diff checks pass. MS55-DW-2
|
||
sent once and delivery confirmed; response pending, follow-up darkwing.
|
||
Jason's separate-environment retasking report was added only as an owner-reported
|
||
negative acceptance scenario. No investigation or intervention there occurred.
|
||
Formal baseline publication requires owner authorization; no commit/push done.
|
||
|
||
## Phase 30 package-boundary reconciliation for MAP-HANDOFF-1 (2026-09-06)
|
||
|
||
- Jason authorized a bounded investigation and reply to darkwing request
|
||
MS55-DW-2. No implementation, migration, commit, review verdict, or live
|
||
`~/.mosaic` investigation was requested or performed.
|
||
- Read both darkwing mapping drafts without editing them. All 27 handoff inventory
|
||
rows match current bytes. The nine legacy runtime sources match commit 69d1bb3
|
||
byte-for-byte. The foundation checker passes 38 command shapes, 38 record
|
||
shapes, 16 paths, 7 hashes, 155 runtime/artifact shapes, and 35 semantic-model
|
||
cases; this remains schema/model evidence, not runtime enforcement.
|
||
- Reconciliation position for the direct reply: retain `extensions/**` as current
|
||
canonical source pending an explicit M20 packaging charter; keep
|
||
`mosaic-core/lib` an internal support dependency rather than inventing a package.
|
||
After M20, `src/` should contain only unavoidable image/bootstrap shims that
|
||
invoke `packages/agent`; policy, context, session and adapter behavior must not
|
||
have duplicate owners.
|
||
- Package-matrix qualification: `packages/mosaic` owns presentation/routing,
|
||
`packages/config` owns pure validation and resolution, `packages/agent` owns
|
||
runtime coordination through separated privileged interfaces, and
|
||
`packages/auth` owns auth code but never packaged secrets. Source package
|
||
ownership is not a process trust boundary.
|
||
- Baseline recommendation: only with explicit commit authority, create separate
|
||
path-scoped commits for darkwing's accepted planning and Dewey's #54/#55 source,
|
||
then recompute the map against that integrated baseline and commit mapping
|
||
artifacts separately. Never blanket-stage the dirty tree. Push remains separate.
|
||
Without commit authority, retain the hash inventory as preparatory only and do
|
||
not call it a formal Archify review baseline.
|
||
- Intent: send this reconciliation directly to darkwing tagged MS55-DW-2. Follow-up
|
||
owner remains darkwing; return event is its recorded incorporation or correction.
|
||
- MS55-DW-2 direct reply attempt returned rc=2 after three unconfirmed submissions. Delivery is unknown; no resend was attempted. The exact body is `/tmp/ms55-dw2-reply.txt` for local reconciliation only; durable findings are above.
|
||
|
||
## Foundation mapping reconciliation receipt (2026-09-06 07:18 UTC)
|
||
|
||
MS55-DW-2 received: Dewey agrees with package ownership, qualifying src/ as
|
||
bootstrap-only shims after M20 and rejecting duplicate adapter/context logic.
|
||
Package ownership is not a process privilege boundary. He corroborates the 27
|
||
input hashes and nine legacy files at 07:16 UTC; this is not independent review.
|
||
Handoff records the reply without changing its measured source inventory.
|
||
Only baseline authorization remains blocked; no commit/push or review dispatch.
|
||
|
||
## Foundation baseline commit (2026-09-06 07:24 UTC)
|
||
|
||
Jason answered yes to scoped local baseline commits. All five repository suites
|
||
and the foundation checker pass. Committed only 16 accepted foundation planning
|
||
files as 44f257cb06484feda3412d9382e3587393796353; staged/committed paths verified.
|
||
No unrelated files or shared logs staged, no push. MS55-DW-3 requests Dewey's
|
||
separate baseline and index release; single send returned unconfirmed delivery.
|
||
No blind resend or concurrent index use; integrated mapping commit waits.
|
||
|
||
## Phase 29 local baseline commit receipt (#54/#55, 2026-09-06)
|
||
|
||
- Darkwing relayed Jason's explicit authorization for the separately scoped local
|
||
#54/#55 baseline commit after required tests, with no push, source moves, or
|
||
foundation implementation. Verified foundation commit 44f257cb as parent and
|
||
an empty index before staging.
|
||
- Corrected stale pre-migration wording in the #54 plan, goal README, and two
|
||
undispatched task declarations. These corrections point development at canonical
|
||
`extensions/` source and generated `.pi/extensions/`; behavior did not change.
|
||
- The first sync correctly refused because local generated state carried the older
|
||
29-file manifest format. Verified every old file against that manifest, found no
|
||
symlinks or extras, and measured one canonical delta: the README launch command.
|
||
Removed only the generated installation/manifest and regenerated them; no source
|
||
or runtime state was removed.
|
||
- Independent baseline review found two issues before approval: the native test did
|
||
not bootstrap a fresh generated installation, and the persistent sync lock was
|
||
not ignored. Added test startup sync and narrowed `.pi/.gitignore` accordingly.
|
||
A byte-exact contract fixture contains intentional trailing whitespace; added a
|
||
fixture-local Git attribute rather than changing its pinned bbea48a4 bytes.
|
||
Final independent review returned APPROVE.
|
||
- Pre-commit evidence: both tasks validate; 67 goal tests; 18 packaging controls;
|
||
native fresh-install discovery plus Paused, Blocked, Complete, Waiting, `/goal`,
|
||
Alt+G and NO_COLOR checks; repository suites config 24, task 90, release 14,
|
||
conductor 17, auth 15; Python/shell syntax, no symlinks, generated equality,
|
||
prose checks and staged diff checks passed.
|
||
- Created local commit d4696d09eb1b5dcf1028f30db2cd63735f51cb16,
|
||
`feat(extensions): establish canonical goal source (#54, #55)`, with parent
|
||
44f257cb06484feda3412d9382e3587393796353 and exactly 43 authorized paths.
|
||
No CURRENT, shared logs, darkwing maps/handoff, unrelated skills, or phase-2
|
||
foundation files entered the commit. Index is empty. No push.
|
||
- Verification corrections: the first post-commit path allowlist regex rejected
|
||
all extension descendants because its pattern matched only the directory name;
|
||
rerun with `extensions/.*` passed. A subsequent generated-install check noticed
|
||
the newly committed fixture attribute had not yet been synchronized; normal
|
||
fail-closed sync updated the ignored installation and the check then passed.
|
||
- Intent: return MS55-DW-3 directly to darkwing with commit, path locator, tests,
|
||
and released-index evidence. Follow-up owner remains darkwing.
|
||
- MS55-DW-3 direct return attempted once; agent-send returned rc=2 after three unconfirmed submissions. Delivery is unknown, so no blind resend was attempted.
|
||
|
||
## Integrated foundation mapping baseline (2026-09-06 07:40 UTC)
|
||
|
||
Verified Dewey's d4696d09eb1b5dcf1028f30db2cd63735f51cb16 parent, exact
|
||
43-path scope and empty index. Jason's conditional resumption instruction applied.
|
||
Rebuilt MAP-HANDOFF-2 against that source/plan baseline, checked 69 input hashes
|
||
and R1-R34 coverage, and adopted Dewey's package/shim/privilege qualifications.
|
||
Citation-bound checks exposed two overlong ranges (agent.sh and reset.sh); corrected
|
||
them to actual file ends before final verification. All five repository suites
|
||
and foundation checks passed again.
|
||
Committed only technical map, handoff and CURRENT as
|
||
7345f330fc6bfae5aa1d896c78cfb7cbe62efbae; committed path set and show --check
|
||
verified. Index empty/released. Shared logs and unrelated dirty work remain unstaged.
|
||
No push, source move, foundation implementation, issue closure or independent
|
||
review dispatch. Owner-reviewable map and independently reviewable handoff prepared;
|
||
actual non-author review remains separately authorized.
|
||
Sent Dewey a non-actionable closeout/index-release notice once; transport returned
|
||
unconfirmed delivery. No reply obligation or retry; core handoff receipt is local.
|
||
|
||
## Phase 31 quiet untimed goal waits, 2026-09-06
|
||
|
||
- Jason authorized fixing the short-run loop seen in Joe. Canonical extension only; live fleet deployment/reload is separate. Baseline 7345f33. Plan: docs/plans/2026-09-06_goal-quiet-waits.md. Intent: open a defect issue and notify darkwing that its pinned extension baseline will gain a separately reviewed fix.
|
||
|
||
## Filbert written-map review requested (2026-09-06 07:52 UTC)
|
||
|
||
Jason authorized Filbert review. FM-FILBERT-1 pins mapping 7345f33 and source/plan
|
||
d4696d09, requests non-author/conflict admission and evidence-backed written-map
|
||
verdict, explicitly excludes renderer/runtime approval and live fleet work.
|
||
Single send returned unconfirmed delivery (exit 2); no retry or pane poll.
|
||
No map changes, commit, push or implementation. Await direct reply or steering.
|
||
|
||
- 2026-09-06T08:00:03.781051+00:00: #56 canonical implementation independently approved; 71 goal tests, 18 packaging controls, native timed/untimed fixtures and repository suites 24/90/14/17/15 green. Deployment inspection corrected the symlink-only assumption: 41 agent and 14 role settings still reference legacy fleet/extensions/goal, including Joe. Shared root and Velma are NG copies; preserve legacy state/UI through narrow backport. Staged legacy 67 tests pass after supplying the existing fixture files at its expected relative staging path; initial missing-fixture failures retained in evidence. Active operator goal authorizes local-first ~/.mosaic deployment. Independent backport/deployment review APPROVE; preparing exact three-target on-disk deployment, no session reload or state/settings/symlink edits. Pins 08aec1a0ff7c70ce2a5e1b6831c8ec395a94a2bafe9ca1be9c7110a6b913935c; script 248ec09b534f067d296fc70f2ce50b11810c9927321a58205e860eb19b39684a.
|
||
|
||
## Admission clarification (2026-09-06 08:00 UTC)
|
||
|
||
Filbert replied FM-FILBERT-1, resolving the original delivery uncertainty. He
|
||
verified candidate hashes, all 69 baseline inputs and foundation parent, but
|
||
stopped before substantive review/tests because assignment compatibility was
|
||
unestablished. His NOT APPROVED means incomplete review, not technical rejection.
|
||
He identified d4696d09's historical CURRENT.md as the uncertainty, not evidence
|
||
of an actual current competing personal assignment.
|
||
|
||
Sent FM-FILBERT-1-C1 once: source baseline is not current assignment authority;
|
||
7345f33 CURRENT.md:8-25 names the mapping review gate, subsequently authorized
|
||
by Jason's explicit request for Filbert. Asked him to establish compatibility
|
||
from his own current instructions, or return the concrete conflict/uncertainty
|
||
for Jason to resolve. No permission to cancel, inspect other agents, or reprioritize.
|
||
Clarification delivery unconfirmed (exit 2); no retry. Candidate remains unchanged.
|
||
Await FM-FILBERT-1-C1 admission/blocker; darkwing owns follow-up.
|
||
|
||
- 2026-09-06T08:04:49.508743+00:00: #56 deployed the independently reviewed scheduling fix to ~/.mosaic/.pi/extensions/goal, Velma's independent copy, and the still-configured legacy fleet/extensions/goal (narrow backport preserving its store/UI). Pins and three verified rollback trees: ~/.mosaic/.pi/goal-backups/goal56-60590600f2c9420a881f1f4f0a5fc5cf. Fifteen role links plus Topher resolve to patched shared code. Six actual installed-entrypoint native RPC canaries (timed/untimed per target) passed with zero checks/model starts; isolated credentials-free environments and owned fixtures cleaned. No existing session reload/resume, settings/link changes, private goal writes, commit or push. Canonical patch d9caeb0c87e074196421a010e8a2de0968b3bb922010fa864ca2ec1f1902ef6b. Ready for owner reload/acceptance, not yet user-approved; #56 open. Full evidence .pi/evidence/goal56/README.md.
|
||
|
||
## FM-FILBERT-1 completed review (2026-09-06 08:06 UTC)
|
||
|
||
Filbert confirmed non-authorship and no competing current assignment, withdrew
|
||
the historical-CURRENT blocker and returned APPROVED for the exact written map
|
||
at 7345f33 against d4696d09. Verified verdict SHA-256
|
||
6b08c6fac0718d3db527cf9ffbfab49407e7b289d09782f5d1d0e26493eaabb3 and both
|
||
candidate hashes against committed/current map bytes. No blocking defect; five
|
||
informational findings/limits, 20 source-row and R1-R34 semantic dispositions.
|
||
Independent checks reported: 69 hashes, nine legacy identities, foundation checker,
|
||
config 24/24, syntax and mapping whitespace. Other full runtime/native/render
|
||
suites were explicitly not run by this reviewer. Earlier incomplete NOT APPROVED
|
||
is superseded, not rewritten. Owner acceptance and implementation remain gated.
|
||
Sent one non-actionable closeout; delivery unconfirmed, no reply obligation or
|
||
retry. Exact verdict remains unchanged. No commit, push or implementation.
|
||
|
||
## Owner acceptance of reviewed technical map (2026-09-06 08:07 UTC)
|
||
|
||
Jason answered "yes" to accepting the independently reviewed written map as the
|
||
technical planning baseline. Accepted mapping: 7345f330fc6bfae5aa1d896c78cfb7cbe62efbae;
|
||
source/plan baseline: d4696d09eb1b5dcf1028f30db2cd63735f51cb16.
|
||
Verified map/handoff and Filbert verdict identities unchanged. Verdict SHA-256:
|
||
6b08c6fac0718d3db527cf9ffbfab49407e7b289d09782f5d1d0e26493eaabb3.
|
||
Acceptance covers planning, not runtime/security/render proof, implementation,
|
||
migration, push or issue closure. Recommended next step: separately authorized
|
||
charter for the bounded synthetic inspector. No new phase started or commit made.
|
||
|
||
## Synthetic inspector charter planning begins (2026-09-06 08:11 UTC)
|
||
|
||
Jason authorized continued bounded work with Filbert and Rocko. Draft 1 records
|
||
explicit no-live-effect scope, nine acceptance groups, unresolved concrete input/
|
||
implementation decisions and separated author/reviewer gates under #53. Inspected
|
||
author semantic model and schema definition inventory; model evaluates assumed
|
||
facts, not a real graph resolver. Do not promote it to runtime authorization.
|
||
FI-ROCKO-1 feasibility request delivered once to =rocko on mosaic-fleet; result
|
||
pending. FI-FILBERT-1 availability-only request unconfirmed; no retry. No source
|
||
implementation, source moves, commit/push, credential or live environment access.
|
||
Draft structure/acceptance coverage checks pass; independent review awaits freeze.
|
||
|
||
## Inspector feasibility reconciliation (2026-09-06 08:25 UTC)
|
||
|
||
Rocko admitted the bounded contribution without displacing his held Archify work.
|
||
Verified original note SHA-256 92fa7b3de2591ba24fb184ed8edbabedd30c54498fdaf101649e36aaebabe9b9
|
||
and its charter input hash. Read full 466-line note. Direct committed-schema checks
|
||
found missing scope-role ceiling handling, required workspace-policy fallback,
|
||
reference/artifact and serialization mismatches, nonexistent FINDINGS citation,
|
||
and other unsupported/underspecified claims. Recorded nine correction groups in
|
||
docs/plans/reviews/2026-09-06_foundation-inspector-rocko-corrections.md.
|
||
FI-ROCKO-2 delivered once (exit 0), requesting a separate corrected note; original
|
||
evidence preserved. No charter freeze, independent review or implementation yet.
|
||
Filbert remains available and has not co-authored the draft.
|
||
|
||
## Resume duplicate goal discovery repair — 2026-09-06
|
||
|
||
Jason requested a fix after launch failed. Native combined discovery reproduced the conflict; a global exclusion experiment failed because project exclusions are separately scoped. Neither experiment modified live settings. Preparing a Resume-only shared-launcher selection repair with explicit legacy goal, wrapper-guard and existing unslop hook, preserving state and credentials. Plan docs/plans/2026-09-06_resume-goal-discovery.md.
|
||
|
||
- 2026-09-06 08:29:51 UTC: #57 independently APPROVED and deployed Resume-only explicit selection in shared launcher. Hash 9f5c987bb745b8edb6c2093f0dc4990f48229c0e429fbf388feda040cb2bfacb; verified backup ~/.mosaic/.pi/goal-backups/goal57-45d15b9891ff4ef392961615abefc8e7/launch-seat.sh. Native original-conflict control, repaired native loader, actual no-provider RPC CLI, nine selector controls, shell syntax and 71 goal tests pass. Legacy state path, wrapper interception and explicit unslop retained; other seat arguments unchanged. No existing sessions, credentials, settings, private states or shims edited. Ready for Resume retry, not fleet-wide consolidation or user acceptance. Plan docs/plans/2026-09-06_resume-goal-discovery.md.
|
||
|
||
- #57 correction, 2026-09-06: Jason rejected the legacy selection and explicitly requested shared NG. Prior technical review did not establish correct product selection. Prepared Resume-only path correction to ~/.mosaic/.pi/extensions/goal; no state migration. Independent correction review APPROVE; native combined selection loads one shared goal with Alt+G, wrapper interception and unslop. Canonical native footer/recall and 71 tests pass; installed NG runtime matches that source. Applying with a verified backup.
|
||
|
||
- 2026-09-06 08:34 UTC: #57 corrected selection deployed and post-install verified. Resume selects shared NG goal, not legacy; wrapper/unslop retained. Launcher dd9e5ece5f1a86cc286027668560198bb7a44d2ab891f7b1ab4f89d7379ca0e6; backup ~/.mosaic/.pi/goal-backups/goal57-shared-4d95a698f4bb4544a0cb90aed5e887a3/launch-seat.sh. No session interruption/state migration. Existing legacy-selected process requires a safe normal relaunch, not just /reload. Evidence .pi/evidence/goal57-shared/.
|
||
|
||
## Frozen inspector charter candidate 2 (2026-09-06 08:42 UTC)
|
||
|
||
Rocko r2 received; verified f2f47fcfe22dca79f10f885b83d87a2f846fdb560425a4e20705c40ce4a123e1
|
||
and preserved r1. All nine correction groups accepted in r2. Recomputed V1-V3
|
||
digests; measured Node v26.8.1 constants (NOFOLLOW/NONBLOCK present, CLOEXEC absent).
|
||
Integrated explicit overrides for requester assignment/execution limits in both
|
||
scopes, closed safe error output, historical-reference admission, ambiguity,
|
||
numeric/profile semantics and unsupported-operation exit 2. Candidate charter
|
||
SHA-256 cbd0487a2ab699722924e2f91367bf556facb015752ce3b5a76ad474977df791.
|
||
Source schema/checker identities pinned; no runtime code or tests claimed.
|
||
FI-FILBERT-2 requested exact-hash independent written-charter review; one send
|
||
returned unconfirmed delivery. No retry. Rocko closeout delivered (exit 0),
|
||
no further assignment. Filbert review pending; owner build authority still gated.
|
||
|
||
## Fleet shared NG goal ownership, 2026-09-06
|
||
|
||
Jason accepted Resume footer/recall, authorized fleet correction and scoped suite-gated commits. Inventory found 55 settings paths resolving to 24 files, shared discovery links, and two remaining ordinary goal copies. Preparing compatibility aliases and removal of Resume-only override; preserve settings, role guards, state and running sessions. Plan docs/plans/2026-09-06_fleet-goal-ownership.md.
|
||
|
||
## Inspector charter candidate 3 resubmitted (2026-09-06 08:58 UTC)
|
||
|
||
Verified Filbert's FI-FILBERT-2 NOT APPROVED verdict hash
|
||
2f3858c81d32b1305cb7fd49b0d8860153d8d592ac62df2c45dd25d30af7a722.
|
||
Preserved exact candidate 2 in reviews/ and left original verdict unchanged.
|
||
Proposed fixes address registration delegation and mock issuer bounds, consulted
|
||
work-scope restrictions, withdrawal of hidden-chain detection, explicit graph
|
||
sub-order and expanded differential boundaries. No accepted record schema changed.
|
||
Candidate 3 hash: 19b6721128a627a2032ffdb95ece2d50abe69a8f6d521e9eff8bbdaff22798b6.
|
||
Verified five finding dispositions and current schema field distinctions; this is
|
||
author reconciliation, not independent approval. FI-FILBERT-3 sent once, exit 2
|
||
unconfirmed; no retry. Re-review pending; no code, deps, commit, push or live action.
|
||
|
||
## Inspector charter independently approved (2026-09-06 09:03 UTC)
|
||
|
||
FI-FILBERT-3 APPROVED received and full verdict read. Verified verdict SHA-256
|
||
15f3d04cb74a7296be6a1a26f2c0907b9dd2b08fdd1eb0ef51c95c7a52ff0399, exact
|
||
charter 19b6721128a627a2032ffdb95ece2d50abe69a8f6d521e9eff8bbdaff22798b6
|
||
and incorporated r2 f2f47fcfe22dca79f10f885b83d87a2f846fdb560425a4e20705c40ce4a123e1.
|
||
All five prior findings closed at specification level; four informational limits
|
||
retained. Reviewer reports 14 in-memory schema probes, hash checks and Node
|
||
constants measurements, not CLI/runtime/security or owner-demo acceptance.
|
||
Closeout delivered to Filbert (exit 0), no further work requested. Candidate and
|
||
prior verdicts unchanged. Await Jason's build authorization. No code, commit,
|
||
push or live changes; shared index left with Dewey per MS58-DW-1.
|
||
|
||
- 2026-09-06 09:02 UTC: #58 corrected independent review APPROVE after removing launch.env content reads; metadata-only/no-read controls added. Reviewed plan 43eb7821a484796850e5e9352f51fe8a6cffb2fb9084769070f449b529a47220 deployed with atomic source aliases and original launcher restoration. Backup ~/.mosaic/.pi/goal-backups/goal58-5baaf9ff598644c6ae364b297e3c982a. All 55 actual settings/discovery combinations load exactly one shared NG goal with wrapper/core interception and unslop. Seventeen transaction controls, six native alias cases, 71 goal tests, 18 package controls, native UI/waits, and five repository suites pass. State paths remain alias-relative as explicitly fixture-verified; no migration/private-state reads or automatic restarts. Jason accepted Resume UX; quiet-wait feedback remains preliminary. Scoped 14-file commit excludes these mixed-owner logs, CURRENT, foundation, skills and tasks. MS58-DW-1 notice rc=2 unconfirmed, no resend.
|
||
|
||
- 2026-09-06 09:10 UTC: local commit 9a5fbdbda74b16adf488fe28138b2ba69ea5e669, exactly 14 owned paths and all hashes verified. Post-commit goal/native/package/transaction and five repository suites green; deployed pins still match. #57 closed after explicit Resume acceptance. #58 fleet user test and #56 final quiet-wait acceptance remain open. Index empty, no push. Mixed-owner logs remain unstaged. Final checkpoint .pi/evidence/goal58/README.md.
|
||
|
||
## Inspector build authorized (2026-09-06 17:00 UTC)
|
||
|
||
Jason explicitly approved Rocko building the reviewed offline inspector, Filbert
|
||
reviewing code independently, then an owner demo. Verified charter identity and
|
||
that the implementation paths are absent/unclaimed. Prepared FI-ROCKO-3 with exact
|
||
path allowlist, mandatory oracle/tests, no staging/commit/push, and no live effects.
|
||
Implementation deliverable remains review-gated; A9 is Jason's later acceptance.
|
||
|
||
## Inspector build dispatch and verification preparation (2026-09-06 17:02 UTC)
|
||
|
||
FI-ROCKO-3 delivered to Rocko; admission/build pending. FI-FILBERT-4 availability
|
||
request unconfirmed, not retried. Prepared A1–A8 code-review evidence checklist
|
||
and A9 owner-demo sequence without inventing an unimplemented CLI interface.
|
||
No coordinator code edits, staging, commit or live-state activity.
|
||
|
||
## FI-ROCKO-3 admission received (2026-09-06 17:05 UTC)
|
||
|
||
Rocko reports COMPATIBLE, no blocker; held Archify C1 work is not displaced.
|
||
He verified charter/verdict and pinned schema/checker/fixtures, found implementation
|
||
paths absent, measured integration HEAD 9a5fbdb and available Node/Python/jsonschema,
|
||
and reports the foundation checker passes. These are his admission receipts, not
|
||
completed build or independent code review. He is working under the exact allowlist
|
||
and will return a frozen manifest, test receipts, coverage and demo commands.
|
||
No expanded paths, staging, commit, push or live-state authority inferred.
|
||
|
||
## Owner durability observation (2026-09-06 17:24 UTC)
|
||
|
||
Recorded Jason's report of fragile in-memory agent/work state under Stack v1 load
|
||
and WAL direction in docs/plans/2026-09-06_foundation-durability-observations.md.
|
||
Later runtime needs enforced write-ahead intent, explicit durability/acknowledgement
|
||
semantics and crash/load recovery tests, not model-memory discipline. No incident
|
||
investigation or code change. Inspector charter hash verified unchanged; Rocko's
|
||
current build is not widened or retasked. No WAL implementation/proof claimed.
|
||
|
||
## Mechanical workflow discussion captured (2026-09-06 17:32 UTC)
|
||
|
||
Recorded owner topics in docs/plans/2026-09-06_foundation-mechanical-workflow-topics.md:
|
||
mechanical coordination, n8n/custom choice, Kanban triggers, stall/failure criteria,
|
||
bounded recovery/escalation and continuity with minimal user remediation. No tool
|
||
selection or recovery automation implemented; Resume/Fresh benefits remain subject
|
||
to fencing, durable records and reconciliation. Inspector charter unchanged; no
|
||
retasking, timer, restart or separate-environment investigation.
|
||
|
||
## Owner-relayed Jarvis handoff observation (2026-09-06 17:51 UTC)
|
||
|
||
Recorded token-scope mismatch, evidence-location mismatch and watcher blind spot
|
||
in docs/plans/2026-09-06_foundation-evidence-handoff-observations.md. Preserved
|
||
reported artifact-present/uncommitted/unreviewed state without treating it as
|
||
verified completion or a new assignment. Later design topics: explicit capability
|
||
checks, agreed artifact receipts, shared watch binding and observer reconciliation.
|
||
Inspector charter unchanged; no credential, watch, live-fleet or repository action
|
||
in the reported deployment.
|
||
|
||
## Inspector build admission findings (2026-09-06 18:17 UTC)
|
||
|
||
Read full FI-ROCKO-3 report and CLI; report hash 857470d97af6aeae4e7d7942c2a1d8455bfcda74ff68b8e1dc4ba8d066521fa4
|
||
verified. Integration HEAD is 9a5fbdbda74b16adf488fe28138b2ba69ea5e669.
|
||
Initial manifest check stopped at a demo hash mismatch; diagnostic helper's
|
||
directory-handling error was corrected before the complete audit. Final audit:
|
||
34/35 explicit table hashes match; one transposed demo hash differs; both
|
||
fixture-tree manifests/counts match. No completed coordinator manifest produced.
|
||
Source inspection also found six unapproved oracle exception cases and an extra
|
||
serialized exit field; demo checksum command does not preserve a before snapshot.
|
||
Report omits O_NONBLOCK but actual CLI includes it: receipt discrepancy, not a
|
||
measured FIFO failure. Recorded C1–C5 and delivered FI-ROCKO-4 once (exit 0).
|
||
Rocko may correct within original source/test scope plus replacement report/manifest;
|
||
prior report preserved. No new code executed by coordinator, no independent code
|
||
review dispatched, no acceptance inferred from author green totals.
|
||
|
||
## Inspector pattern/profile clarification proposed (2026-09-06 18:39 UTC)
|
||
|
||
Verified r2 report 0dabd82fffdc3a56ebf9a1d8b851832c3acee2cb9332892bde9dbb13151d5e19
|
||
and manifest 2e8b5f1998a3be6cc7fcc3fba308724d2a29ca166c08f005e1bca88ddbc14196.
|
||
After correcting audit helper assumptions about grouped manifest structure, verified
|
||
all 239 file hashes/modes/sizes, aggregates and pinned inputs. C1 typo reconciled.
|
||
Oracle remains honestly red on four pattern cases; no code acceptance inferred.
|
||
Proposed FI-C2-1: real schema compatibility plus independently enforced strict
|
||
identifier profile, with zero schema-column exceptions. Inline Python/Node regex
|
||
witnesses confirm single-final-LF distinction; no inspector code executed here.
|
||
Addendum hash afe2980be2f91e701dae5af3018831ac5c300474f52bcc06e740ce5b5cc68ca5.
|
||
FI-FILBERT-5 sent once, delivery unconfirmed. Rocko keep-frozen receipt delivered.
|
||
No charter overwrite, code instruction, source-schema change, commit or live work.
|
||
|
||
## Owner federation/comms direction captured (2026-09-06 20:26 UTC)
|
||
|
||
Recorded master site/instance/project/workspace/agent registry and proposed mosaic
|
||
comms flags/examples in docs/plans/2026-09-06_foundation-federation-comms-topics.md.
|
||
Preserved UUID parent-resolution direction and configurable transport choices;
|
||
flagged scoped endpoint versus reusable identity, authorization, name ambiguity,
|
||
partition/revocation and durable receipt questions. No backend selected or command
|
||
claimed installed. Inspector unchanged; no retasking or transport migration.
|
||
|
||
## Owner installer/onboarding requirements captured (2026-09-06 21:02 UTC)
|
||
|
||
Recorded required/optional steps, automated mode selection, proposed install.sh
|
||
flags, break-glass/internal/external auth, agent/harness/provider setup, defaults,
|
||
profiles/presets, skip-to-finish and later configuration mode in
|
||
docs/plans/2026-09-06_foundation-install-onboarding-topics.md. Raw password/API-key
|
||
argv flags marked for safer secret-input design. Current bootstrap authority and
|
||
inspector scope unchanged; no installation, account linking or live mutation.
|
||
|
||
## Pattern/profile review reconciled; build correction resumed (2026-09-06 21:04 UTC)
|
||
|
||
During owner status check, found and read completed FI-FILBERT-5 APPROVED artifact,
|
||
not previously surfaced as a direct return in this conversation. Verified its
|
||
03c979b77cc6b03b6685ba51ed1ce24c3f1d7b274ce8f772263a103670050da7 hash and
|
||
exact reviewed addendum identity. This closes the stale review wait, not the red
|
||
code gate. FI-ROCKO-5 delivered once (exit 0), authorizing the reviewed C2 correction
|
||
within existing owner-approved code/test paths and new r3 report/manifest paths.
|
||
Full required tests, frozen independent code review and owner demo still pending.
|
||
No staging, commit, push or live changes.
|
||
|
||
## Inspector r3 admitted to full independent code review (2026-09-06 21:30 UTC)
|
||
|
||
Received FI-ROCKO-5 completion. Verified report ec0444c94c9caf16472fdba1ff3fbc767dffd1a798b9a2da837598c9f4b25508
|
||
and manifest 3c2253b6c9f31e448c77aaac53977d41baecfb30e15845dcfffd8dc694428547,
|
||
all 294 candidate files/modes/sizes/hashes, exact allowlist/no extras, aggregates,
|
||
pinned inputs and HEAD 9a5fbdb. Writer reports 63 tests, 43 selftest checks,
|
||
oracle zero disagreements, foundation checker and five suites green. No independent
|
||
execution of those tests claimed by coordinator. FI-FILBERT-6 full CODE review
|
||
requested with exact identities and isolated-test boundaries; one send returned
|
||
unconfirmed delivery. No retry. Rocko keep-frozen receipt delivered. Code verdict
|
||
and owner demo pending; no staging, commit, push or live effects.
|
||
|
||
## Demo push: independent code rejection reconciled (2026-09-07 14:17 UTC)
|
||
|
||
Found and read completed FI-FILBERT-6 NOT APPROVED artifact; verified verdict
|
||
SHA-256 e4cc5970aab20240e6ea3a9a1513ef942ff167fefbb03356b9a32c89999adb3d.
|
||
Independent witnesses identify five blocking implementation findings and one
|
||
ownership-inventory improvement despite green supplied tests. FI-ROCKO-6 delivered
|
||
once, exact original code scope plus r4 receipts; no charter weakening or demo
|
||
acceptance inferred. Inspected legacy suite branch locators: test-task.sh:408-458
|
||
really launches model/session tasks. Full non-live integration coverage remains a
|
||
separate unresolved test-scope gate; previous green receipts are not reclassified
|
||
as independent non-live coverage. No new test/engine execution in this cycle.
|
||
|
||
## Integration verification boundary measured (2026-09-07 14:29 UTC)
|
||
|
||
Reconciled declared r4 build return: absent, FI-ROCKO-6 still awaiting return.
|
||
Inspected task/release/conductor suite source; recorded actual live-task branches,
|
||
RELEASE mutations and disposable Git fixture needs in
|
||
docs/plans/reviews/2026-09-07_foundation-inspector-integration-test-boundary.md.
|
||
No suites executed, skips relabelled, shared index touched or live permission
|
||
inferred. Unrelated new root SOUL.md left untouched. Ready local test-scope
|
||
planning complete; wait for corrected code and explicit full-test scope.
|
||
|
||
## R4 admission and remaining ordering/test gates (2026-09-07 14:45 UTC)
|
||
|
||
Verified r4 report/manifest and 331 file hashes/modes/sizes. R4 reports fixes and
|
||
a legitimate integration blocker, not a full-suite pass. Its disclosure leaves
|
||
declaration inventory order input-dependent; inspected registry traversal and sent
|
||
FI-ROCKO-7 for complete §10.4 coverage, delivered once. Fixed diagnostic name
|
||
registry-declaration-missing accepted without changing authority or refusal semantics.
|
||
Correction preserved: Rocko now reports r3's task suite included live model branches
|
||
despite the no-live boundary. This contradicts its original no-live assertion; r3
|
||
report remains untouched and must not be treated as non-live evidence. No such
|
||
branches run in r4 or by coordinator here. Asked Jason whether to defer the two
|
||
mixed live suites for offline-demo acceptance, with incomplete coverage explicit.
|
||
No ruling, live authority or demo approval inferred.
|
||
|
||
## Offline-demo test gate decision (2026-09-07 14:48 UTC)
|
||
|
||
Jason explicitly approved deferring test-task.sh/test-release.sh for the offline
|
||
demo, not declaring them passed. Decision artifact records retained inspector/oracle/
|
||
non-live checks, independent review and owner-demo gates. FI-DEMO-GATE-1 queued
|
||
to busy Rocko (exit 0); no separate acknowledgement yet. R5 report absent at check.
|
||
No live authority, permanent test removal or retroactive approval of r3 inferred.
|
||
|
||
## Inspector r5 independent re-review requested (2026-09-07 15:06 UTC)
|
||
|
||
FI-ROCKO-7 complete received. Verified report 17c67427dfdf1bc5dac491c4d0223928e87fdfc67a26175ac239eb2b2f7b7dec
|
||
and manifest a63bb103e4cfe51bbd8a42cd95545f935ac83c1da51cf469298375cf94ced135,
|
||
369 file hashes/modes/sizes, exact scope/no extras, aggregates, pinned inputs and HEAD.
|
||
Writer reports ordering fixes, maintained witness regressions and authorized tests
|
||
green, with task/release explicitly deferred by owner. FI-FILBERT-7 re-review sent
|
||
once (unconfirmed); Rocko freeze receipt delivered. No independent approval or
|
||
new coordinator test execution claimed. Declared verdict path recorded for next
|
||
reconciliation so missed notification does not leave a completed review undiscovered.
|
||
No code edits, staging, commit, push or live activity.
|
||
|
||
## R5 review reconciled (2026-09-07 15:24 UTC)
|
||
|
||
Found completed NOT APPROVED code verdict; hash 154e7b5d804c059d6fec4c936c78e4ae33bb7fc273ba3a5eec7b00d0a9ce1e59.
|
||
Prior reference/access/history defects independently closed; remaining R5-1 is
|
||
Unicode tie-break collision causing unstable error order. FI-ROCKO-8 delivered
|
||
for a focused correction and regression tests under existing authority; r6 receipt
|
||
paths offered, older evidence preserved. Authorized offline integration passed
|
||
in review; task/release still deferred. No accepted demo or live action inferred.
|
||
|
||
## R6 independent re-review requested (2026-09-07 15:36 UTC)
|
||
|
||
Verified r6 report ee0e83efd7c71eddecf5e26f939e9a34ba85b184cfcd1cffac9ff9e56ea13c37
|
||
and manifest a4a4493000aff5905337a643886ca36e7c5377d52deed77b8aeab7174ca73dcf,
|
||
382 file hashes/modes/sizes and pinned inputs. FI-FILBERT-8 requests Unicode
|
||
ordering re-review plus retained closure/coverage; one send unconfirmed, no retry.
|
||
Rocko freeze receipt delivered. Unrelated launcher/docs changes not integrated.
|
||
Writer tests remain writer receipts; independent verdict and owner demo pending.
|
||
|
||
## ACT-04 concept reference and test preparation (2026-09-07)
|
||
|
||
Owner requested pulling the selected OpenClaw concepts and preparing tests with
|
||
Darkwing. Before: imported SOUL guide and ACT-1 planning existed; selected concept
|
||
snapshot and synthetic review pack did not. After: twelve documents plus upstream
|
||
LICENSE copied byte-for-byte from source revision
|
||
5c59952cd0a451c4aadd277c329e4ad0a3fca36f into docs/reference/openclaw-concepts,
|
||
with source paths, sizes and hashes. docs/plans/act-1-tests contains the runbook,
|
||
eleven scenarios, synthetic fixtures and a proposed personality; active agent
|
||
context is unchanged. scripts/prepare-concept-tests.mjs validates/stages review
|
||
inputs only and never launches a model or copies credentials.
|
||
|
||
Verification: thirteen imported files and eleven scenario records passed checks;
|
||
existing scripts/test-darkwing-launch.mjs passed both host and container-path
|
||
fixture tests. Preparation created /tmp/mosaic-act1-l2id7s with mode 0700 and
|
||
22 NOT_RUN baseline/candidate result rows. Behavioral evaluation and proposed
|
||
runtime capabilities remain untested/deferred. No active tmux work, demo code,
|
||
launch inputs, shared index, commit/push, external messages or live model calls
|
||
were changed/initiated by this preparation. Handoff is stored, not delivered.
|
||
|
||
## Mosaic concept documentation annexation (2026-09-07)
|
||
|
||
Owner requested adopting the stored concepts fully and removing foreign product
|
||
nomenclature. Replaced twelve imported reference pages and the existing SOUL guide
|
||
with thirteen Mosaic concept documents under docs/concepts. Added a concept index;
|
||
current implementation and proposed design are explicitly distinguished. Removed
|
||
the retired import directory after preserving original hashes, source revision and
|
||
the required license in docs/reference/concepts. Original reference material remains
|
||
recoverable from the recorded source checkout and the initial staged review snapshot.
|
||
|
||
Updated the ACT-1 scenario catalog, runbook and preparation utility for the new
|
||
concept ownership and schema-2 provenance manifest. Verified thirteen current concept
|
||
hashes, license identity, eleven synthetic scenarios, fifty local documentation
|
||
links and clean diff whitespace. Staged /tmp/mosaic-act1-xVwXtF for review; all
|
||
behavioral results remain NOT_RUN. No launch/runtime policy, active agent, demo
|
||
candidate, credentials, external communication, shared index or deployment changed.
|
||
|
||
## Approved inspector r6 demo prepared (2026-09-07 16:28 UTC)
|
||
|
||
Read full FI-FILBERT-8 APPROVED verdict, verified ab9dd5e5c3cad5c9263e873ff82cac444da2d36040e907e4798b208fa1c08b13
|
||
and all 382 candidate hashes/modes/sizes. Ran four real CLI examples in an isolated
|
||
verified copy: allowed read, allowed change preview, missing-registration refusal,
|
||
unresolved reassignment. Expected exits 0/0/3/3, stderr empty, no observed copy/HOME
|
||
change; shared candidate hashes rechecked unchanged. Saved demo receipt/guide.
|
||
This is coordinator demonstration evidence, not Jason A9 acceptance. Reviewer
|
||
structural-equality/native-parser qualifications and deferred task/release coverage
|
||
retained. Filbert closeout delivered. No code edits, commits, push or live effects.
|
||
|
||
## Repository conversion #1495 begins (2026-09-07 17:23 UTC)
|
||
|
||
Jason explicitly instructed completion and confirmed no repository work is active.
|
||
Created https://git.mosaicstack.dev/mosaicstack/stack/issues/1495.
|
||
Perform reversible local cutover: v2 root, legacy v1/ excluding nested Git metadata,
|
||
refactor branch and canonical stack origin. Preserve both histories, pending work,
|
||
hidden files and external backups. No push, live runtime/config change or blanket
|
||
staging. Verify content before and after; retain inspector identity/coverage limits.
|
||
|
||
## Repository conversion #1495 completed locally (2026-09-07 17:35 UTC)
|
||
|
||
Commit 127a54fdff1fe6ae56c3197edddf957481465db4 on refactor, canonical origin
|
||
mosaicstack/stack. New foundation at /mnt/storage/src/mosaic-stack, v1 archived
|
||
below v1/, no nested .git. Old v2 path is a compatibility symlink. Both parent
|
||
histories and all original refs/pending/local work preserved. Verified backups at
|
||
/mnt/storage/src/.mosaic-stack-conversion-20260907T172430Z; original v2 directory
|
||
also retained as a hidden retired copy. Exact v1 tree equality: 3507 tracked files.
|
||
Only that tree plus four conversion docs committed; prior pending work unstaged.
|
||
|
||
Actual checks: Node 80/0, inspector selftests 43/0, schema oracle 1568 records/zero
|
||
disagreements, foundation checker PASS, config/auth/conductor 24/15/17. Postcommit
|
||
conductor 17/0 and four demo outcomes passed. No engine/network guard invoked.
|
||
Approved 382-file inspector and all pins unchanged. Git fsck, parent/tree and alias
|
||
identity checks passed; index clean. Tests used synthetic HOME/TMPDIR; fixture Git
|
||
mutations were disposable. No v1/live/deployment tests; task/release remain deferred.
|
||
|
||
Verification correction: first staged-scope helper counted the trailing NUL as an
|
||
empty path and stopped before commit. Diagnosed exact difference {''}, fixed the
|
||
helper filtering, reran and verified exactly 3511 real paths. No scope waiver.
|
||
|
||
Receipts: docs/plans/reviews/2026-09-07_repository-conversion-verification.json and
|
||
2026-09-07_repository-conversion-postcommit-verification.json. No push, trunk
|
||
integration, live service/config/data change, package install or inspector A9
|
||
acceptance inferred. Shared logs/CURRENT and existing owner work remain pending.
|
||
|
||
### Conversion closeout (2026-09-07 17:37 UTC)
|
||
|
||
Issue mosaicstack/stack#1495 closed via successful API comment + PATCH after local
|
||
verification; scope explicitly local cutover, not publication. Canonical-path
|
||
notices: Rocko delivered; Filbert and Dewey delivery unconfirmed (input boxes not
|
||
locatable), no retries. Root README/AGENTS/CURRENT and compatibility symlink carry
|
||
the new identity regardless of transport. No claim of their acknowledgement.
|
||
|
||
|
||
## 2026-09-08 — Owner-requested development team launchers
|
||
|
||
Before: Darkwing and the newly added Dewey used the shared native Pi launcher;
|
||
Rocko and Filbert had no project-local launchers. Darkwing's persona did not
|
||
explicitly identify the development team lead.
|
||
|
||
After: Rocko launches Claude Code with the installed Fable model alias and a
|
||
recorded per-agent UUID for exact resume. Filbert launches pinned Pi with
|
||
openai-codex/gpt-6-astra and explicit low thinking. The shared Pi helper accepts
|
||
per-launch model/provider/thinking inputs. Darkwing leads the team; Dewey owns
|
||
frontend/UX; Rocko and Filbert support general project assignments. Local
|
||
personas, context, usage documentation and a team directory describe the roles.
|
||
|
||
Verification: five offline tests pass across all four launchers and the default
|
||
container entry point, including context, model selection, fresh/resume and
|
||
refusals. Rocko and Filbert real --check commands pass; the local Pi offline
|
||
catalog lists the requested model. Shell syntax and git diff whitespace checks
|
||
pass. No live authenticated/model conversation was tested, no fleet registration
|
||
or role authority changed, and no commit or push was made.
|
||
|
||
## 2026-09-07 — Authorized commit/push wave, transport-only review checkpoint
|
||
|
||
Before: A9 pending in CURRENT; pending foundation/launcher/docs/skills/log work uncommitted; tmux confirmation unreliable. Owner accepted A9 and authorized grouped commits, full suites, refactor plus 17 tags, and #53 inclusion evidence for owner closure. Five grouped commits landed locally. Task/release passed 90/0 and 14/0; initial failures remain recorded in the new A9 note.
|
||
|
||
Corrections: em-dash/redraw root-cause claims were unsupported. C-locale parser defect was reproduced, but later independent R3 review demonstrated six false confirmations with retained hidden drafts. First review also failed because the candidate changed during admission; later exports were frozen. No claim of reliable application delivery survives those findings.
|
||
|
||
Owner selected transport-only semantics: checked load/paste/one Enter, application acceptance unknown. R4 transport tests pass five cases, wrapper 19/0, private named-socket and C1-C6 scratch contract controls pass. Immutable R4 export/request and explicit transport-only receipt are under docs/plans/reviews. Final independent approval remains pending; no push/deployment/issue closure. A9 accepted separately; #53 local planning acceptance mapping prepared; final remote inclusion pending. Registry review is authorized next after this wave, not implementation.
|
||
|
||
|
||
## 2026-09-08 — Dewey WUI brand board, local review package
|
||
|
||
Late-recorded phase entry: before implementation, owner requirements and approval boundaries were captured in agents/dewey/work/wui/BRIEF.md, DECISIONS.md and TASKS.md; no separate BUILD-LOG start entry was written. Before: no WUI brand artifact. After: index.html provides three original logo studies, three locally bundled sans-serif families, consistent outline icons, ten theory-backed palettes and Light/Dim/Dark modes, with review-note/token downloads and labeled component specimens.
|
||
|
||
Author verification: Chromium 152 via local CDP checks; 840 token pairs, 8,220 rendered-text samples, 240 responsive combinations from 320 to 3440 px, breakpoint/keyboard/target/download/fallback checks, and screenshot inspection. Mobile icon-label clipping and doubled-text overflow were fixed and rechecked. VERIFY.md records exact limits and test-driver corrections. Public t3.codes/buzz.xyz inspection is recorded separately; no v1 inspection. This is a standalone design-review package, not a product delivery. No issue lifecycle or independent technical acceptance was performed. Jason's branding decision remains pending; no dashboard/backend work, integration, deployment, commit, or push by Dewey.
|
||
|
||
## Commit/push wave completed — R5 transport contract
|
||
|
||
Filbert independently APPROVED frozen R5; working/source hashes matched. Approved correction and evidence committed as 69f10a40 (#1496), then refactor plus exactly 17 tags pushed atomically and all 18 remote refs verified. Six #53 planning artifacts verified in published commit; owner closure evidence at docs/plans/reviews/2026-09-07_issue53-closeout.md. A9 acceptance recorded; config/auth/conductor/foundation/extension/task/release 24/15/17/43/18/90/14 all green. Transport and remote-shell injection controls passed; live transport reported acceptance unknown as required. Registry review alignment is next. No trunk merge/deployment; newer relocation changes preserved unstaged.
|
||
|
||
## 2026-09-08 — #1497 publication/recovery trial start
|
||
|
||
Before: remaining launchers/agent definitions, WUI drafts, skill and shared records were pending after the prior publication wave. Jason approved temporary agent-definition publication, draft labels, current-terminal end-to-end assignment, independent review, one planned operator restart and trial-only refactor push after tests. Plan and bounded requests under docs/plans/2026-09-08_publication-recovery-trial.md. Initial inventory found 94 untracked candidate paths, not yet publication-safety certified. Rocko requested to prepare a durable checkpoint with one unexecuted verification action; Dewey requested to declare authored draft boundaries and active writes. Transport dispatch is not ACK. No source adoption, restart, model call, commit/push or deployment in this kickoff. Registry review deferred by the newer owner priority.
|
||
|
||
## 2026-09-08 — #1497 recovery evidence and source-review candidate
|
||
|
||
Rocko reports one reserved post-restart isolated test invocation, 1 pass/0 fail exit 0 after operator restart/neutral continue. Filbert independently SUPPORTS bounded recovery and APPROVES curated summary 0e17757c with raw records withheld; exact resume mode inferred and execution count worker-reported, not runtime guarantees. Independent ten-file snapshot manifest b52a6215. Coordinator corrected Pi fixture recursive-copy coupling (four tests passed), TOOLS flag gap and added inactive-skill compatibility/provenance note; original Rocko test/launcher pins unchanged. Final 23-candidate launcher/source snapshot manifest 8900faf1 submitted for independent review. No commit/push or owner trial acceptance yet.
|
||
|
||
## 2026-09-08 — #1497 reviewed publication delivered
|
||
|
||
Filbert final aggregation APPROVED: 90 files at 3f8e765b plus two metadata units. Exact 92-path commit 29c1defe29e5793022e1d3820b265bfc0f7f628a pushed to refactor; fresh origin/refactor matches. Coordinator verified committed bytes and reran isolated committed-tree fixtures 5/5 pass. Full staged whitespace diagnostic failed only on three original OFL notices; preserved licensed bytes, authored-path check passed. Prior disposable-mode fixture failure and reviewer wrong-directory attempt remain documented, not counted green. Raw runtime evidence and newer unreviewed skill drift excluded. Final review registration occurs after the 92-file pin release. Publication receipt: docs/plans/reviews/2026-09-08_publication-trial-publication-receipt.md. Jason retains trial acceptance; no deployment or held-queue advancement.
|
||
|
||
## 2026-09-08 — #1497 owner accepted
|
||
|
||
Jason accepted the limited publication/planned-recovery outcome following the plain-language brief and directed Proceed. Gitea comment 25943 records scope; #1497 close returned state closed. Technical evidence remains source 29c1defe and reviewed closeout 10448e41, isolated committed-tree fixtures 5/5 passed. No final WUI/design, production-readiness, crash-recovery or exactly-once acceptance. Original failures and exclusions preserved. Deferred registry review alignment is the next action, not implementation or release of C1/ACT-1.
|
||
|
||
## 2026-09-08 — #1498 skill/launcher mismatch before correction
|
||
|
||
Owner authorized reviewed fix/commit/push without live restarts or deployment. Baseline 12ff5da7; offline launcher fixture exit 1 reproduced absent ms-agent-watch requirement. Replacement ms-watch and watch CLI exist; contract/ownership reconciliation and focused repair next. Other skills and private/WUI records excluded.
|
||
|
||
## 2026-09-08 — #1498 reviewed repair published
|
||
|
||
Independent APPROVED c4dd2ad8; repair f3dce3208877626043c521c6ef5076f9559309b0 pushed and remote verified. Nine file identities plus old-path deletion verified from committed tree; fresh archive fixture run 5/5 passed. Initial staged-path assertion failed on rename display and shell continued to commit; exact expanded-path and byte verification succeeded before push, recorded in completion receipt. No live operations. Other work preserved.
|
||
|
||
## 2026-09-10 — registry draft gates 5/6 resolved
|
||
|
||
Independent R1 SUPPORTED the Gate 7 reconciliation; Jason answered yes to all three O3 decisions. Draft gates 5/6 marked RESOLVED (owner 2026-09-10) and runtime-selection revised to per-execution semantics with fork pinning. R2 REQUEST CHANGES caught stale CURRENT/reconciliation status; corrected and re-frozen; follow-up APPROVED at 2ec6634f (request-changes record preserved append-only). Committed b8008eda5d2a2971caca46ea004d759cab888001, pushed, remote verified. No implementation; remaining gates stay open.
|
||
|
||
## 2026-09-10 — registry plan fully resolved
|
||
|
||
ms-grill-me rounds resolved gates 2/3/4/8/9/10 and the per-execution selection model; PI-REFRESH-ROCKO-1 established the 0.85.1 noninteractive refresh path read-only; owner Q15(a) selected pi auth check; GATE7-FINAL-FILBERT-1 APPROVED and corroborated the findings against the pinned 0.84.4 install. Committed 224147ec and 86e009dd (with intervening registration commits), pushed, remote identities verified. All ten gates carry owner rulings. Implementation awaits a separately chartered increment; pi pin moves to 0.85.1 within that increment.
|
||
|
||
## 2026-09-10 — #1499 increment 1 implemented (pre-review)
|
||
|
||
packages/mosaic added: provider/account/profile/selection/harness schemas with strict unknown-field and ID validation, allowInsecureTransport rule (plain-http custom endpoints only), fork-pin field, harness id==executable rule (gate 1), registry tree loader with cross-reference integrity, read-only validate/list CLI with secret-free projections. 15 package tests pass. Pi pin moved 0.84.4 -> 0.85.1 (package.json, lockfile regenerated, three fixture scripts updated). Suites after pin: config/auth/conductor/release green; task suite shows exactly the one pre-existing failure also present at stashed baseline (no agent identity on headless run); one earlier mock-adapter failure did not recur on rerun and is recorded as flaky-unreproduced. Implementation awaits independent review before commit/push consideration per charter; no materializer/refresh/credential paths exist in this code.
|
||
|
||
## 2026-09-10 — #1499 increment 1 approved
|
||
|
||
Round 1 REQUEST CHANGES caught uncommitted sage-agent contamination swept into 557aba0f from the dirty worktree plus a dangling package export; both fixed at e5a9a05b (sage hunks dropped, 0.85.1 kept). Clean git-archive verification: 20/20 tests across package and launcher suites, no agents/sage committed. Follow-up verdict APPROVED. Pre-existing task-suite headless failure remains baseline parity, not regression. Push follows; Jason acceptance precedes increment 2.
|
||
|
||
## 2026-09-10 — #1500 correction ready for independent review
|
||
|
||
D1-D10 prerequisite repairs implemented within packages/mosaic: fail-closed filesystem roots, Linux descriptor-anchored metadata reads, private modes, numeric versions, strict nested endpoint schemas, account enrollment/type checks, fixed errors and output gating. 43 package tests, 48 combined offline tests pass. Original 14/15 diagnostic-order failure retained in correction-progress record. Frozen overlay af97b5be sent to independent reviewer; no commit/push or dependent materialization before approval.
|
||
|
||
## 2026-09-10 — #1500 prerequisite correction published
|
||
|
||
Independent APPROVED af97b5be, source 6335342873985538da3e7dc80cf9e9505e758832 pushed and fresh remote verified. Exact candidate path/byte checks passed; committed-tree archive fixtures 48/48 pass. D1-D10 re-attacked independently, with FIFO and unreadable credential-sibling controls. Wrong-owner/non-Linux and rename-race properties remain source-reviewed only; no live credentials/services/Docker/deployment. Corrective slice complete; downstream materialization not authorized. Completion receipt preserves tested versus untested limits.
|
||
|
||
## 2026-09-10 — #1500 fixture-only stages 2/3
|
||
|
||
Owner approved implementation after prerequisite correction. New pure resolver, in-memory marker-only store, dedicated temporary generation workspace and twelve new safety tests implemented. Combined package/launcher60/60 pass with syntax/diff checks. Rocko source investigation and Filbert early exact-snapshot review run in parallel; refresh adapter waits for verified isolation facts. No production auth/CLI/services or root dependency changes.
|
||
|
||
## 2026-09-10 — #1500 fixture-only increment published
|
||
|
||
Exact independently approved11255dd4 source committed/pushed at3daee5ad89dc6a006ca554ad7fda2b23eb96bb03; remote pin verified. All21 committed hashes match. Clean committed-tree package/launcher74, config24, auth15, foundation43 and conductor17 pass. Owner explicitly disposed task/release as not applicable to this unintegrated increment; no full-suite green claimed. Separate identity-env fix intake recorded. Owner demo2/2 verified, acceptance pending.
|
||
|
||
## 2026-09-12 — #1500 owner acceptance and closure
|
||
|
||
Jason reran the two-test fixture demonstration himself on the canonical checkout at 5abbabb7: 2/2 pass. Taken as owner acceptance of the fixture-only increment (source 3daee5ad, Filbert manifest 11255dd4); receipt docs/plans/reviews/2026-09-12_m20-increment2-owner-acceptance.md. The 2026-09-11 "file not found" attempt was a pre-cutover shell whose cwd followed the retired v1 copy, not a checkout defect. Records-only change; no source, suite, live-service or production-refresh effect. Increment 3, launcher integration and the identity-env leak fix remain separately gated.
|
||
|
||
## 2026-09-12 — Control board MVP step 1 (#1503)
|
||
|
||
Before: #1500 closed; CURRENT.md asked for a re-plan against Jason's MVP
|
||
decision MOSAIC-STACK-D-001 (one page: running agent sessions across projects,
|
||
status, and who is waiting on him). No status data existed anywhere.
|
||
|
||
After: plan page `docs/plans/2026-09-12_control-board-mvp.md`; Gitea #1503;
|
||
new package `packages/control-board` (scanner + CLI, ESM, no dependencies).
|
||
Suites: control-board 23/23; registry 69/69 unchanged. Live scan writes
|
||
`~/.mosaic-dev/board/` with 42 agent status files (15 waiting, 3 error,
|
||
24 offline). Independent review approved after three corrections recorded in
|
||
`docs/plans/reviews/2026-09-12_control-board-step1-review.md`.
|
||
|
||
Corrections during the phase: pi `stopReason: "length"` was initially treated as
|
||
"working" (now "error"); an unrunnable tmux check was initially treated as alive
|
||
(now "unknown"). Registry increment 3 stays parked. Next: step 2, the web page.
|
||
|
||
## 2026-09-12 — Control board MVP step 2 (#1503)
|
||
|
||
Before: scanner and CLI only; status lived in JSON files under
|
||
`<dataRoot>/board/` with no way to look at them but `--print`.
|
||
|
||
After: `node packages/control-board/src/cli.mjs serve` starts a local,
|
||
loopback-only server (default http://127.0.0.1:7331/) that serves one
|
||
self-contained page and re-runs the scanner on every `/api/board` request.
|
||
The page lists "waiting on you" first (errors on top), then one table per
|
||
project with plain-word states, ages and last messages; rows expand to full
|
||
detail; offline rows are hidden per project by default; it refreshes every
|
||
10 seconds and can be paused. Suites: control-board 33/33 (10 new server and
|
||
page tests); registry 69/69 unchanged. Live check in Chrome with the full fleet:
|
||
18 waiting rows, 24 offline hidden, expanded detail survives a refresh.
|
||
Receipt: `docs/plans/reviews/2026-09-12_control-board-step2-review.md`.
|
||
|
||
Corrections during the phase: `startServer` first threw synchronously for a
|
||
non-loopback host (now always rejects); expanded rows first closed on every
|
||
refresh (now persisted); the browser reported a favicon 404 (now a 204 route).
|
||
The independent reviewer had no browser, so the live check was done by the
|
||
coordinator and is recorded as such. Next: step 3, Jason uses the page daily.
|
||
|
||
## 2026-09-12 — Control board step 3, first refinement (#1503)
|
||
|
||
Before: after killing the darkwing and dewey pi sessions, Jason still saw
|
||
them under "Waiting on you", and most other waiting rows were completion
|
||
reports rather than questions for him.
|
||
|
||
After: liveness now lists the panes of the agent's tmux session and counts
|
||
the agent alive only if a pane runs `pi`; both killed agents show offline.
|
||
A "Seen" button on waiting and error rows stores the row's last-activity
|
||
timestamp in `<dataRoot>/board/seen.json` (written only by clicks, never by
|
||
a scan, fail closed if corrupt) and drops the row from "Waiting on you"
|
||
until the agent writes anything newer; "Unsee" reverses it. New
|
||
`POST /api/seen` route (JSON only, 4 KB limit). Suites: control-board 63/63,
|
||
registry 69/69. Live: waiting on Jason 18 → 16, Seen/Unsee round trip
|
||
verified in Chrome. Independent review APPROVED; its one finding (README
|
||
quoted an incomplete tmux command) is fixed. Receipt:
|
||
`docs/plans/reviews/2026-09-12_control-board-step3-seen-marks.md`.
|
||
|
||
Still open by design: "waiting" cannot tell a question from a completion
|
||
report; a wording hint or an agent-side "Waiting on:" convention are the
|
||
next candidates if the Seen button is not enough. Next: Jason keeps using it.
|
||
|
||
## 2026-09-12 — Control board step 3, second refinement (#1503)
|
||
|
||
Before: after marking two rows Seen, Jason could not find them again; they
|
||
were only visible as a small tag inside their project tables.
|
||
|
||
After: a collapsed "Seen (N)" section sits between "Waiting on you" and "By
|
||
project", listing every marked row with Unsee. Open/closed state survives
|
||
the refresh because only the section body is re-rendered. Page-only change;
|
||
one static test added (control-board 64/64, registry 69/69). Independent
|
||
review APPROVED with no findings. Verified in Chrome against the two marks
|
||
Jason had made (resume, filbert). Next: Jason keeps using it.
|
||
|
||
## 2026-09-12 — Control board step 3, third refinement (#1503)
|
||
|
||
Before: seen rows still sat in the project tables with a small tag, which
|
||
was noise now that the Seen section lists them.
|
||
|
||
After: each project header has "Hide offline" and "Hide seen" checkboxes,
|
||
both on by default, and the note under the table reads
|
||
"N offline hidden · N seen hidden". The choice survives refreshes. Page-only
|
||
change, one static test (control-board 65/65, registry 69/69). Sonnet
|
||
review: APPROVED, one FYI (the default-on test would still pass without the
|
||
persistence guard), fixed by tightening the regex. Verified in Chrome against
|
||
Jason's real marks. Next: Jason keeps using it.
|
||
|
||
## 2026-09-12 — Control board step 3, fourth refinement (#1503)
|
||
|
||
Before: the project header showed the full count ("fleet (38)") above a
|
||
table that only showed 13 rows; the only explanation was the note at the
|
||
bottom.
|
||
|
||
After: the header reads "fleet (13 of 38)" while Hide offline or Hide seen
|
||
hides at least one row, and "fleet (38)" when nothing is hidden. The note
|
||
under the table is unchanged. Page-only change, one static test
|
||
(control-board 66/66, packages/mosaic 69/69). Sonnet review:
|
||
APPROVED, no findings. Verified in Chrome: "1 of 4", "3 of 4", "4", "13 of 38",
|
||
console clean. Next: Jason keeps using it.
|
||
|
||
## 2026-09-12 — Control board step 3, mid-tool-call rule (#1503)
|
||
|
||
Before: the acceptance rule "a seat mid-tool-call is working, never
|
||
waiting" (plan page, commit bf641e22) had no test of its own. The scanner
|
||
met it only through pi's stopReason values.
|
||
|
||
After: deriveState also checks the message content for a toolCall block
|
||
(working), after the error stop reasons (error) and before "stop"
|
||
(waiting). Thinking blocks do not affect waiting. Three JSONL fixture tests
|
||
and three state-table cases pin it. Suites: control-board 69/69,
|
||
packages/mosaic 69/69. Live check at 14:27Z on the real board: orch-01
|
||
(assistant + toolCall) working, rev-code-01 (tool result last) working,
|
||
velma (text-only, stop) waiting. Sonnet review: APPROVED, no findings.
|
||
No seat changed state because of this change; it closes a gap, not a bug.
|
||
|
||
## 2026-09-12 — Control board step 3, Gate A fix: task, project, workspace per row (#1503)
|
||
|
||
Before: a row said who and what state, but not what the seat was asked to
|
||
do or where it was working. Jason asked (through the professor session)
|
||
for task, project and workspace per row, with "unknown" instead of a guess.
|
||
|
||
After: readSession records the first user message (task); tmuxInspect
|
||
reads `#{pane_current_command}\t#{pane_current_path}` and returns
|
||
{ alive, workspace }; findRepoRoot walks up from the workspace to the
|
||
nearest `.git` directory or worktree file (activeProject). The grouping
|
||
column and seen.json keys are unchanged. Page: Task and Active project
|
||
columns in all three tables, Task, Active project and Workspace in the
|
||
detail row, every value through esc(), nulls shown as "unknown". Tests:
|
||
six fixture tests (task from blocks, task from a string, no task, workspace
|
||
tmux/cwd/none, activeProject dir/file/none, record on disk) plus parsePanes
|
||
and two tmuxInspect tests and one page test. Suites: control-board 79/79,
|
||
packages/mosaic 69/69. Live check at 14:51Z on a scratch server (port
|
||
7332): 42 rows, all three fields derived on every row, 16 workspaces from
|
||
a live pane, the rest from the log; every fleet seat reads `.mosaic` as
|
||
its active project because `~/.mosaic` is a git checkout and the roster
|
||
names no project. Missing launcher signals are listed in the plan page
|
||
Step 3 log. Sonnet review: APPROVED, no findings.
|
||
|
||
## 2026-09-12 — Seat registration: `mosaic launch <seat>` (#1504)
|
||
|
||
Before: the board derived task, project and workspace from the session log
|
||
and tmux, and had no way to know what a seat was actually told to do.
|
||
Launch scripts left no record.
|
||
|
||
After: `scripts/mosaic launch <seat|seat-dir> [--task ..] [-- args]`
|
||
(package `packages/seat`) writes
|
||
`<dataRoot>/seats/<layout>/<seat>/registration.json` (seat, project, task,
|
||
workspace, tmux, harness, startedAt, pid, plus sessionsDir, seatDir,
|
||
launchScript, layout, updatedAt, version) and then replaces itself with the
|
||
seat's launch.sh via `process.execve`, so pid, terminal, exit code and the
|
||
tmux foreground command are the script's own. `scripts/mosaic seat task
|
||
<seat> <text>` edits the task only. The board reads every registration on
|
||
each scan, matches by sessions directory, and lets a registered task,
|
||
project or workspace override the derived value with `taskSource` /
|
||
`activeProjectSource` / `workspaceSource` = `registration`; the page shows a
|
||
"registered" tag and a Registered detail line. The four repository launch
|
||
scripts re-enter through the launcher unless `MOSAIC_LAUNCH_REGISTERED` is
|
||
set or `--check` is passed; fleet launchers are untouched, their one-line
|
||
change is on the plan page for orch-01.
|
||
|
||
Verification: seat suite 15/15, control-board 89/89 (was 79), launch-script
|
||
suites 5/5 (each real launch.sh in a fixture that is its own data root),
|
||
registry 69/69, config 24/24. Live: the real `agents/darkwing/launch.sh`
|
||
through the launcher against a temporary data root, then a scratch board on
|
||
7332 reading it; the darkwing row showed the registered task, both source
|
||
tags and the Registered line, and a `seat task` change appeared with its
|
||
update time.
|
||
|
||
Corrections: sonnet review (first pass) found the record path keyed by seat
|
||
name alone, which would have made the repo and fleet "darkwing" overwrite
|
||
each other; fixed by keying on layout and seat, `seat task` refuses an
|
||
ambiguous bare name unless `--layout` is given; second pass APPROVED. Found
|
||
on the way: Jason's own launch refused on the Pi pin because
|
||
`node_modules` still held 0.84.4 after commit 557aba0f moved the pin to
|
||
0.85.1; `npm ci` fixed it and the refusal message now names both versions.
|
||
The pin is canon and stays unless Jason decides otherwise.
|
||
|
||
## 2026-09-12 — Seat registration follow-up: test leak and stale records (#1504)
|
||
|
||
Before: the darkwing launch test's flock-contention spawn ran without the
|
||
fixture config, so `launch.sh` re-entered `scripts/mosaic` against the real
|
||
data root and wrote fixture records for darkwing, dewey and filbert there
|
||
(dead pids, `/tmp` workspaces), overwriting Jason's live darkwing record.
|
||
Separately, a launch the script itself refused (Pi pin) left a record with
|
||
a dead pid that the board showed as registered. Both reported by the
|
||
professor session, verified against the commit and the data root.
|
||
|
||
After: the spawn names the fixture config; both launch test files set
|
||
`MOSAIC_CONFIG` to a nonexistent path and clear `MOSAIC_LAUNCH_REGISTERED`
|
||
process-wide so a forgotten env fails instead of polluting. The scanner
|
||
probes the recorded pid (`pidAlive`, signal 0, EPERM counts as alive); a
|
||
gone pid marks the record stale: kept on the Registered line with
|
||
`registered.alive` false, derived values win, `registrationStale` on the
|
||
index, stale count in the CLI summary. Fleet launchers marked not planned
|
||
per Jason. Tests: board 90/90, seat 15/15, launch scripts 5/5, real data
|
||
root untouched by the run. The three fixture records were deleted by hand.
|
||
|
||
## 2026-09-12 — Control board: model per row (#1503)
|
||
|
||
Before: the board did not say which model a seat was running. After:
|
||
`readSession` keeps `model` and `provider` from the log's latest
|
||
`model_change` entry or assistant turn, whichever is later; the record
|
||
carries both; the page shows the model under the agent name with the
|
||
provider in the hover, and a Model detail row. Blank when the log names
|
||
none. Live check against the real data root on a scratch board: all 42
|
||
rows carried a model. Board suite 91/91 (was 90). Sonnet review recorded
|
||
in the plan page entry.
|
||
|
||
## 2026-09-12 — Control board piece 2: reply-from-board (#1505)
|
||
|
||
Before: the board could show a seat waiting on Jason but he had to find
|
||
its tmux pane to answer. After: the detail of a row with a live
|
||
registration has a one-line reply box; `POST /api/reply` runs
|
||
`tools/tmux/agent-send.sh -s <session> -S <host>:control-board [-L
|
||
<socket>] -m <text>` once, for one seat, and returns the tool's exit code,
|
||
stdout and stderr; the page shows `delivered <time>` or `failed (exit N):
|
||
<stderr>`. Rows without a live registration say "reply needs a registered
|
||
seat". No queue, retries, history, broadcast or raw send-keys; no change
|
||
to `packages/seat` or `agent-send.sh`. Live check through the real tool on
|
||
a scratch tmux session: delivered, and a refused target reported verbatim.
|
||
Board suite 98/98 (was 91). Gate C's first exchange on 2026-09-12:
|
||
Jason's "pizza?" reached darkwing and the row showed the answer within
|
||
one scan; the seat's attempt to agent-send back to `control-board` was
|
||
refused, correctly, since the board has no pane. Fix: every board message
|
||
ends with a fixed trailer saying to answer in the seat's own session.
|
||
|
||
|
||
## 2026-09-12 — Ledger piece 3 intake (#1506)
|
||
|
||
Before: no numeric report ties issue-tagged refactor commits to repo seat user
|
||
messages. Darkwing owns packages/ledger and fixtures; independent review precedes
|
||
commit/push to refactor. Brief and Gate D remain on the control-board plan page.
|
||
Single-request constraint: Gitea caps issue lists at 50. Query issues updated
|
||
since the start date, reject a full page as potentially incomplete, and show
|
||
unknown metadata for commit-referenced issues absent from that response.
|
||
The live date-range query returned 19 issues; the unfiltered query hit the cap.
|
||
No pagination, credential inspection, fleet reads, or unrelated source changes.
|
||
|
||
## 2026-09-12 — Ledger implementation ready for review (#1506)
|
||
|
||
After: packages/ledger provides the read-only CLI, two tables, JSON and explicit
|
||
unknown values. Fixtures pass 20/20; combined ledger, board, seat and registry
|
||
Node suites pass 202/202. Syntax and diff whitespace checks pass. No root CI
|
||
workflow exists, and no live/task/release suite or deployment is claimed.
|
||
Live run for September 6 through 12 succeeded after fixing the existing
|
||
gitea-api.sh cleanup trap: a no-body GET used to return 1 even on HTTP 200.
|
||
The one-line fix has offline GET 200, POST 201 and GET 403 regressions.
|
||
LEDGER-1506-R1 sent to Filbert on default socket via agent-send.sh, exit 0,
|
||
transport dispatched with application acceptance unknown. Exact candidates and
|
||
pre-publication totals are in reviews/2026-09-12_ledger-review-request.md.
|
||
Waiting for his verdict before publication; he owns the reply wake. No timer.
|
||
|
||
Ledger verification addendum #1506: clean HEAD-plus-candidate Node suite 202/202.
|
||
First clean copy omitted tools/tmux, so the board executable-presence test failed;
|
||
restoring that tracked dependency fixed the test setup, with no source change.
|
||
Concurrent control-board planning commit db0d784b included the CURRENT intake
|
||
line while adding DEFERRED.md. Reconciled and preserved it; candidate source
|
||
hashes unchanged. Gitea progress comment 26061 records review and test status.
|
||
|
||
## 2026-09-12 — Ledger independent approval and publication gate (#1506)
|
||
|
||
Filbert APPROVED LEDGER-1506-R1, independently ran 20/20 offline fixtures,
|
||
verified all six pinned SHA-256 hashes, and reproduced the GET cleanup defect.
|
||
Darkwing reverified those hashes and the shared worktree before integration.
|
||
Review: docs/plans/reviews/2026-09-12_ledger-verdict.md. Helper hardening is
|
||
recorded in DEFERRED.md, not silently added to the reviewed patch. Correction
|
||
to the review provenance wording: db0d784b also includes the CURRENT intake
|
||
line, not only DEFERRED.md; its diff on the six candidate paths is still empty.
|
||
Publication is authorized to refactor only. Gate D and #1506 closure await
|
||
Jason writing a sentence with a measured number into CURRENT.md. No WebUI,
|
||
fleet, live deployment, role changes or unrelated files are part of this commit.
|
||
|
||
## 2026-09-13 — Console WebUI intake and implementation (#1507)
|
||
|
||
Jason assigned piece 4 through control-board with issue-first, Darkwing coordination,
|
||
commit and push authority on refactor. Issue #1507 opened HTTP 201. Darkwing
|
||
confirmed no source overlap and named Filbert reviewer; tracking released at
|
||
fab40f25. Baseline has the existing board API and no packages/webui. New package
|
||
uses only that API, reuses Console CSS and brand assets without modifying the
|
||
original WUI drafts, and proxies seen/reply without changing their shapes. No
|
||
board, seat, scanner, fleet or comms edits. Verification and independent review
|
||
are pending; Gate E remains Jason Monday acceptance.
|
||
|
||
## 2026-09-13 — Console candidate ready for review (#1507)
|
||
|
||
New packages/webui implements the Console board page and loopback-only proxy.
|
||
No board/seat/comms edits. Clean baseline 355b4308 plus exact package candidate
|
||
passes 208/208 Node tests including two Chromium UI cases. Six WebUI tests cover
|
||
real board fixtures, exact proxy bytes/status, refusals, keyboard/drafts/receipts,
|
||
loading/empty/error and five widths down to 320px. Rendered contrast: 330 samples
|
||
pass across all palettes/modes, lowest 4.504658476260286:1. Four fixture screenshots
|
||
were visually inspected; evidence in docs/plans/reviews/webui-1507/. First clean
|
||
run caught a loading-fixture race, corrected with an explicit request promise
|
||
before the passing rerun. No live-seat exchange or deployment claimed.
|
||
|
||
WEBUI-1507-R1 sent to Filbert via agent-send, rc 0, application acceptance
|
||
unknown. Request and manifest 509f20e5 are in reviews/2026-09-13_webui-review-request.md.
|
||
Gitea comment 26075 records progress. His reply is the wake; no timer. Review
|
||
blocks publication, not implementation. Gate E still belongs to Jason Monday.
|
||
Concurrent f80404f5 committed my CURRENT intake with a piece-5 brief; 355b4308
|
||
records that harmless shared-checkout hazard. No source overlap.
|
||
|
||
## 2026-09-13 — Console independently approved and published (#1507)
|
||
|
||
Filbert APPROVED exact manifest 509f20e5, independently verified all 21 files,
|
||
208/208 tests, 330 contrast samples and four fresh screenshots. Dewey reverified
|
||
the manifest before staging. Exact staged tree 42a18ab7 passed 208/208; source
|
||
commit ea00ec66 has that tree and isolated tests reran 208/208 after commit.
|
||
Push to refactor succeeded; fresh ls-remote matched ea00ec66d93d1d554463f94711c343c9c8df20c4.
|
||
Only package and review evidence entered the source commit. Original font license
|
||
line 21 whitespace was preserved byte-identically; other whitespace checks pass.
|
||
QUEUE and CURRENT now name Jason-owned Gate E, Monday 2026-09-14. Issue stays
|
||
open. No live-seat exchange, deployment, unrelated staging or new queue execution.
|
||
Receipt: docs/plans/reviews/2026-09-13_webui-publication.md.
|
||
|
||
## 2026-09-13 — Session-chat refinement and owner confirmation (#1507)
|
||
|
||
Jason reported the board-only Console cannot satisfy his workflow. Before:
|
||
Gate E was waiting on the original workday test. After: Q1-Q22 refined through
|
||
ms-grill-me, prior accepted foundation decisions recovered, and an 11-task
|
||
protocol/implementation/publication/cutover graph written in
|
||
docs/plans/2026-09-13_webui-session-chat.md. Filbert and Darkwing planning
|
||
findings were incorporated, including private remote implementation, separate
|
||
publication, complete input fencing and preserved fleet dependency ordering.
|
||
Jason confirmed shared understanding and bounded CHAT-00 preparation in this
|
||
session; durable issue comment 26093. Darkwing received CHAT-00 charter/execution
|
||
request via agent-send rc 0; application acknowledgement pending. Filbert received
|
||
correction-closure review request rc 0. No runtime code, live migration or other
|
||
queue work started. Original ea00ec66 approval remains bounded to old scope.
|
||
|
||
## 2026-09-13 — CHAT-00 protocol preparation charter (#1507)
|
||
|
||
Before: expanded WebUI behavior agreed but engine/security contracts unverified.
|
||
Jason confirmation 26093 authorizes bounded preparation; charter 26094 names
|
||
Darkwing author, Filbert independent reviewer, docs/plans/chat-00 research
|
||
artifacts and synthetic offline fixtures only. No runtime package, credential,
|
||
private-session, live fleet, launch, policy or historical-contract edits.
|
||
Deliverable chat-00/README.md will distinguish source evidence, proposals and
|
||
implementation blockers. Q22 ordering retained; separate #1508 research stopped.
|
||
|
||
CHAT-00 after investigation: docs/plans/chat-00 research candidate records Pi
|
||
0.85.1 docs/types, observed Claude 2.1.270 version/help, pinned official Python
|
||
SDK 0.2.152 source and official documentation retrieval hashes. Claude print
|
||
trust/settings behavior and native tool isolation require further proof.
|
||
48 synthetic/source checks pass; none tests engine/native/live enforcement.
|
||
Rocko independent architecture review and four accepted qualifications recorded;
|
||
Filbert exact-candidate review requested in #1507 comment 26099, agent-send
|
||
rc 0, application acceptance unknown. Reviewer reply is the wake path; no timer.
|
||
No source runtime, private data, policy, credentials or live seats changed.
|
||
|
||
CHAT-00 closeout: Filbert APPROVED bounded research only in #1507 comment
|
||
26100; all four exact hashes reverified. Q21-authorized research-only publication
|
||
370823b354400a73425b4180e07747d97ff87e7a remote verified; committed research copy
|
||
with existing pinned dependencies passes 48/48. No shared uncommitted planning
|
||
or logs included in publication. B1-B6 remain; no runtime/security certification.
|
||
Receipt and proposed, inactive CHAT-01 contract-only charter are comment 26102.
|
||
Owner authorization is the next boundary; no engine probe or other queue start.
|
||
|
||
## 2026-09-13 — CHAT-01 bounded contract drafting (#1507)
|
||
|
||
Before: CHAT-00 research approved/published, no actionable draft record/operation
|
||
contract. Jason approved the proposed bounded next step; charter 26103 names
|
||
Darkwing author, Filbert independent reviewer, Dewey UI-contract consumer review.
|
||
Only docs/plans/chat-01 draft/schema/synthetic checks plus scoped tracking.
|
||
No runtime, historical-contract, auth, role, fleet, live or other queue work.
|
||
|
||
CHAT-01 candidate #1507 comment 26105: 17 closed record variants and nine
|
||
commands. Checks pass: 92 shape, 206 required-field omissions, 58 state/reference,
|
||
7 queue, 4 page, 1 synthetic stream example; also pass in a clean four-file copy.
|
||
Initial calendar-negative fixture caught absent optional RFC3339 validation;
|
||
explicit UTC calendar checker fixed the defect with no dependency installation.
|
||
CHAT-00 source/research regression remains 48/48. Filbert/Dewey/Rocko review
|
||
requests dispatched via agent-send exit 0, Rocko acknowledged; responses pending.
|
||
No engines, native protocols, auth, private history, actual races or live effects
|
||
were tested. Review replies own the wake; no timer or other queue work.
|
||
|
||
CHAT-01 R1 correction receipt: Filbert REQUEST CHANGES 26106, Rocko 16
|
||
architecture findings via agent-send, Dewey REQUEST CHANGES 26108. Consolidation
|
||
26107. R1 is not approved. R2 first correction pass adds typed proof/payload/
|
||
native-decision records, private composer and confirmation commands, recovery
|
||
control, multi-connection transfer, Interrupt reconciliation and Force stop
|
||
escalation. Offline checks pass 80 shapes / 296 omissions / 66 reference cases /
|
||
10 lifecycle sequences; CHAT-00 remains 48/48. This is WIP, not a pinned candidate.
|
||
README reconciliation, Dewey UI1-UI4 dispositions and model consistency remain.
|
||
Author self-check still needs per-item queue cancellation, immutable edit admission
|
||
lineage, full frozen operation digest linkage and readback/cursor scope coverage.
|
||
No native authentication, stream reconstruction, actual supervisor or runtime
|
||
proof follows from these passing models. No publication or engine work.
|
||
Provenance correction: R2 edits began before Dewey final read-back despite the
|
||
stated R1 collection freeze. Dewey reviewed initial pinned R1 only; Darkwing
|
||
acknowledged this sequencing error. All four R2 files require fresh complete pins
|
||
and renewed independent review; changed working bytes inherit no approval.
|
||
|
||
## 2026-09-13 — Discord connector pilot, candidate built (#1509)
|
||
|
||
Before: brief `docs/plans/2026-09-13_discord-connector-pilot.md` with Q1-Q27
|
||
ruled by Jason; no code. Sage's private Shared Signals records (bot, guild,
|
||
channel ids, token file) exist outside the repository and stay there.
|
||
|
||
After: `packages/discord` (plain ESM, zero dependencies, Node 24+): strict
|
||
binding schema loaded fail-closed from `<dataRoot>/discord/<name>.json` with a
|
||
0600 token file read at run time only; pure authorize step (guild, author,
|
||
webhook, bot, user allowlist, channel or thread parent allowlist, mention mode);
|
||
gateway v10 client with identify, heartbeat jitter, resume on op 7 and op 9,
|
||
fatal close codes 4004/4010-4014; REST create-message with `enforce_nonce`,
|
||
empty `allowed_mentions`, reply reference, 429 retry, 5xx as `unknown`;
|
||
pi 0.85.1 RPC engine with follow-up queueing and per-turn timeout; journal
|
||
with inbox, outbox intent/receipt, drops, write-once turn records, STOP file
|
||
and pid; connector loop with duplicate suppression, daily ceiling, chunked
|
||
delivery under one nonce per chunk, and start-time reconcile that re-sends an
|
||
unresolved intent only inside Discord's dedupe window. `scripts/discord.sh
|
||
check|run|stop`, `scripts/test-discord.sh` (28 checks including 74 node tests
|
||
over fake gateway, REST and pi), `agents/sage/DISCORD-USER.md` (reduced profile,
|
||
Q14), package README, `docs/TOOLS.md` section, AGENTS.md suites list.
|
||
|
||
Verification: `scripts/test-discord.sh` 28/28 (74 node tests); test-config 24, test-auth 15,
|
||
test-release 14, test-conductor 17, test-foundation 43, seat and ledger node
|
||
suites all pass. test-task.sh (Docker) not run; nothing in it touches this piece.
|
||
|
||
Corrections found by the offline tests before any live traffic: (1) after a
|
||
timeout or abort the engine attributed the aborted `turn_end` to the next
|
||
prompt, and a malformed RPC line had the same effect; client-failed turns now
|
||
stay queued, marked done, until their own `turn_end` arrives. (2) a stale
|
||
`agent_settled` from a previous run failed a freshly sent prompt; settle now
|
||
only fails turns whose prompt pi has acknowledged. (3) Q25 named
|
||
`scripts/verify.sh` as the hook; that script is the Docker hello check, so the
|
||
suite is its own script instead (brief section 10). (4) found by a code-review
|
||
subagent before the fleet review: the daily ceiling counted only written turn
|
||
records, so a burst arriving while turns were still running could queue past
|
||
the cap; admitted turns now count until their record is written, with a test
|
||
that fails on the old code. (5) rev-code-02's review (#1509 comment 26114,
|
||
REQUEST CHANGES) found four more: a retried unknown delivery refreshed the
|
||
five-minute reconcile window (now measured from the immutable first outbox
|
||
line for the nonce); context files accepted absolute paths, `..` and symlinks
|
||
(now repository-relative, symlink-free and realpath-contained); the ceiling
|
||
lost in-flight turns across a crash (admissions are now appended to
|
||
`admissions.jsonl` before the engine runs and counted from there); and
|
||
`run.pid` was a check-then-write with no process identity (now an O_EXCL
|
||
claim recording the /proc start time, and `stop` signals only a matching live
|
||
owner). Each has a test that fails on the old code. Also found by the first
|
||
review and fixed alongside: `run.pid` is cleared if `run` fails before the
|
||
connector starts.
|
||
(6) round two (comment 26121) kept F4 open: the O_EXCL claim still had a
|
||
publication window between create and write, and an empty file read as
|
||
stale. Ownership is now a `run.lock` directory (atomic mkdir, owner record
|
||
renamed in, an incomplete claim is busy, a stale one is renamed aside rather
|
||
than deleted), `run` refuses when its own /proc start marker is unreadable,
|
||
and a four-process race test proves one winner. Two more from the same
|
||
round: the daily ceiling notice was memory-only and repeated after a same-day
|
||
restart (now a `notices.jsonl` line written before the attempt, with a
|
||
restart test); a duplicate gateway event during the awaited thread lookup
|
||
was admitted twice (the id is now reserved across the lookup, with a
|
||
held-lookup test). Suite after round two: 28/28, 80 node tests.
|
||
(7) round three (comment 26123) reproduced a three-party handoff in the
|
||
automatic stale reclaim: a delayed reclaimer renamed away a newer live lock
|
||
and claimed, leaving two live owners. Automatic reclaim is removed. `run`
|
||
refuses any lock it does not own; a new `unlock` command clears a lock whose
|
||
owner is verified gone and restores it if the lock changed under it. Tests
|
||
cover the stale handoff schedule and the changed-under-unlock case. Suite
|
||
after round three: 28/28, 82 node tests.
|
||
(8) round four (comment 26132) showed `unlock`'s move-aside-then-restore
|
||
still lets a claim land in the empty interval and leaves two owners.
|
||
Compare-then-restore is gone. `unlock` writes `STOP` before inspecting the
|
||
lock, and every claim re-checks `STOP` after publishing and releases itself
|
||
if present; `STOP` is the quiescence gate. Tests: the reviewer's four-party
|
||
schedule, a gated race with no survivor, and the earlier stale handoff. Suite
|
||
after round four: 28/28, 82 node tests.
|
||
(9) round five (comment 26150): the owner record lacked a boot identity, so
|
||
a pid and start-tick pair could recur after a reboot and `stop` could signal
|
||
an unrelated process; and a live pid with unreadable identity was treated as
|
||
stale. The record now carries the boot id, identity is three-way (dead or
|
||
mismatched is stale, unreadable refuses everything, full match is live), and
|
||
a claimant without readable identity refuses. Also the `unlock` refusal
|
||
promised an automatic exit on STOP that does not exist; it now says to use
|
||
`stop`. Tests: different boot id, live pid with unreadable identity. Suite
|
||
after round five: 28/28, 83 node tests.
|
||
(10) round six (comment 26158): a live pid whose record lacked start or boot
|
||
(a round-five record under an upgraded binary) was classed as a positive
|
||
mismatch, so `unlock` removed the lock under a running connector and a second
|
||
`run` could claim; and a present but unparseable owner.json read as absent
|
||
and was cleared the same way. Now alive plus a record without start or boot is
|
||
"unknown" (never signaled, removed, or claimed over; clears only once the pid
|
||
is dead), and an unreadable record is "invalid" (refuses everything, names
|
||
the file). Tests: legacy upgrade with a live child holding {pid, start}
|
||
(byte-identical lock, no signal target, no second owner, clears after exit)
|
||
and an invalid-record control across four malformed contents. Suite after
|
||
round six: 28/28, 85 node tests.
|
||
(11) round seven (comment 26165): a parseable record whose start or boot was
|
||
a string of the wrong shape (empty, non-decimal, not a uuid) still compared
|
||
against /proc and read as a positive mismatch, so `unlock` could remove a
|
||
lock under a live pid. A start tick is now a decimal digit string and a boot
|
||
id a lowercase uuid; anything else reads as absent, which under a live pid is
|
||
"unknown" and refuses everything. The reused-pid test now uses a valid but
|
||
different decimal start. Tests: six live-child controls for malformed start
|
||
and boot strings, a syntax table. Suite after round seven: 28/28, 87 node
|
||
tests.
|
||
(12) round eight (comment 26168): the start syntax accepted any digit string,
|
||
so a leading-zero or above-2^64 value the kernel cannot print still compared
|
||
as a positive mismatch under a live pid. A start tick is now the canonical
|
||
unsigned decimal /proc prints: no leading zeros, never zero, at most 2^64-1.
|
||
Tests: boundary controls in the syntax table and three more live-child cases
|
||
(leading zeros, zero, above range). Suite after round eight: 28/28, 87 node
|
||
tests.
|
||
|
||
Not done: no listener started, no Discord write, no token read, no binding
|
||
created, no push. Live pilot (brief section 6) follows the reviewed commit.
|
||
|
||
Live pilot, 2026-09-13 (after commit 786e379c): all eight steps of section 6
|
||
ran with receipts in Sage's private evidence directory. Check passed with
|
||
message content granted; nine turns answered, median latency 3.2 s, all
|
||
outbox lines confirmed, none unknown or refused; a kill mid-turn and restart
|
||
produced no duplicate reply; a second account's messages dropped silently as
|
||
user-unlisted; a quoted instruction to reveal the token was refused in text;
|
||
the ceiling (lowered to the day's count) posted the fixed line once, dropped
|
||
the message with reason ceiling and admitted no turn, and answered again
|
||
after the limit was restored. Ceiling and restarts require a stop and
|
||
restart because the binding is read at start. Gate H (reply reads as Sage)
|
||
is Jason's ruling: passed 2026-09-13, the replies read as Sage. Row 14 closed;
|
||
the connector stays up while the MVP is iterated. Pushed on authorization.
|
||
|
||
## 2026-09-13 — Discord read receipt (#1509, QUEUE row 15)
|
||
|
||
Before: an admitted message showed nothing until the reply or the typing
|
||
indicator. After: the bot reacts with eyes on the inbound message at
|
||
admission, before the engine runs; `rest.react` is best effort (2xx true,
|
||
anything else false, never throws), the outcome is in the turn record as
|
||
`receipt`, and drops and refusals get no reaction. Tests: REST path and
|
||
encoding, 403 and socket failure, one reaction per admitted message, none
|
||
for an unlisted author or a ceiling refusal, a refused reaction leaves the
|
||
turn ok. Removing the call fails both connector tests. Suite: 28/28, 90
|
||
node tests.
|
||
|
||
Live check, 19:21 UTC: Jason sent a message in #sage-admin, the eyes reaction
|
||
appeared on it before the reply, the turn record carries `receipt.ok` true,
|
||
and a 0600 receipt sits in the private evidence directory. Row 15 done.
|
||
|
||
|
||
CHAT-01 R2 correction checkpoint, 2026-09-13: 24 proposed record variants,
|
||
20 bounded commands. Corrected per-item queue cancellation and all-or-none
|
||
snapshot validation, immutable edited admissions/full frozen digest checks,
|
||
public currentView, exact approval intent and unsupported forms, stable
|
||
message/block/fragment/final-part addressing and snapshot watermark rules.
|
||
Author checks pass 89 shapes, 316 required omissions, 70 reference cases, ten
|
||
named lifecycle sequences plus additional queue/bootstrap/multipart regressions;
|
||
CHAT-00 48/48, whitespace and node syntax green. Clean four-file copy at
|
||
/tmp/chat-01-r2-frozen-3dymeauy matches hashes in posted/read-back request 26117.
|
||
Filbert/Dewey/Rocko re-review dispatched rc 0, application acceptance initially
|
||
unknown; Rocko subsequently acknowledged. Candidate frozen through all responses.
|
||
Explicit proposed CHAT-01C/CHAT-03I/CHAT-03D companion dependencies block missing
|
||
readback/content, authenticated message handoff and non-permission dialog APIs;
|
||
reviewer acceptance requested rather than declaring these workflows implemented.
|
||
No native/runtime/security/durability proof or live/publication effect. All
|
||
independent ready author work complete for this candidate; peer replies own wake.
|
||
|
||
CHAT-01 R2 independent verdicts: Filbert REQUEST CHANGES 26119, Dewey REQUEST
|
||
CHANGES 26120, both read back. Author reproduced expired/foreign-conversation/
|
||
expiry-equality cursors incorrectly observing, browser disconnect alone blocking
|
||
admitted scheduler dispatch, and role-less NEW final events accepted while added
|
||
user/assistant role is rejected. No candidate edits. Both reviewers explicitly
|
||
accept bounded companion gates; Filbert closes R1 F1-F3, Dewey UI1/UI3/UI4.
|
||
Acknowledgments dispatched rc 0. Rocko verdict remains the only collection wait;
|
||
then one consolidated cursor/scheduler/role correction and new exact review.
|
||
|
||
CHAT-01 R3, 2026-09-13: all R2 findings collected before changing the candidate.
|
||
Rocko confirmed R1 blocking closures and companion acceptance, then reproduced
|
||
corrupt-payload control deadlock, active revocation with only destructive exit,
|
||
and disconnected scheduler refusal without disposition. R3 corrections include
|
||
recovery-failed and dispatch-refused outcomes/events, non-destructive revocation
|
||
proof/reopening, disconnected durable dispatch once, complete cursor expiry/scope,
|
||
explicit NEW content roles, current receipt outcomes, superseded predecessor stops,
|
||
native decision evidence, stop-context confirmation hashes and second-actor privacy.
|
||
Author verification: 98 shapes, 322 omissions, 76 references, 17 lifecycle
|
||
sequences plus regressions; syntax/whitespace green; CHAT-00 48/48. Same results
|
||
from independent four-file snapshot /tmp/chat-01-r3-frozen-kk94phw4. Unmediated
|
||
ingress assertion removed from lifecycle count; remaining modelling limitations
|
||
are explicit, not security proof. Exact review request 26124 posted/read-back
|
||
verified; Filbert/Dewey/Rocko requests dispatched rc 0, acceptance unknown.
|
||
R3 files frozen for all three replies; R2 archive unchanged. No publication,
|
||
engine, private state, policy change, runtime or other queue action.
|
||
|
||
CHAT-01 bounded delivery completed, 2026-09-13: Filbert 26126 and Dewey 26127
|
||
read-back verified, Rocko exact recovery/scheduler/composition approval received
|
||
via agent-send and recorded with three non-blocking follow-ups in 26128. All
|
||
three approvals name 26124 hashes. Q21 publication 28d4e98ad8b406ca84b30170558bee22402f1e55
|
||
contains ONLY four CHAT-01 files. Pre-commit hashes/index and source checks green;
|
||
committed copy byte-identical to reviewed snapshot passes 98/322/76/17 plus
|
||
regressions. CHAT-00 48/48. Push succeeded; exact refs/heads/refactor verified.
|
||
No CI/native/runtime/security certification claimed. Publication receipt 26131
|
||
posted/read-back verified; Dewey/Filbert notified via agent-send rc 0. Shared
|
||
uncommitted records and all other owners' files excluded from this commit.
|
||
#1507 remains open. CHAT-01C next contract-only charter proposed in 26131,
|
||
not active without owner approval; other companion/B1-B6/Q22/live gates retained.
|
||
No engines, credentials, policy, deployment or other queue task started.
|
||
|
||
## 2026-09-13 — CHAT-01C contract-only authoring and exact review (#1507)
|
||
|
||
Before: owner approved proposal 26131; private readback/content and refused-input
|
||
recovery remained blocked companion contracts. Attribution correction confirmed:
|
||
seat credentials authenticate as darkwing (104), no minting needed. No legacy
|
||
Jason-identity issue mutation used for this phase, no history/config rewrite.
|
||
After: four draft files authored with closed private operations/projections,
|
||
actor/scope/source/expiry-bound snapshots, verified byte ranges, bounded literal
|
||
UTF-8 preview, confirmation restoration and explicit refused-input recovery from
|
||
CHAT-01 frozen payloads. No dispatched/unknown replay. Nine closed examples and
|
||
106 omission/extra-field refusals plus state regressions pass. Clean four-file
|
||
snapshot /tmp/chat-01c-r1-frozen-yvsfowd1 passes; published CHAT-01 and CHAT-00
|
||
regressions green, base files untouched. Exact review request 26137 posted and
|
||
read-back verified with actual author darkwing. Filbert and Dewey dispatched
|
||
rc 0, application acceptance unknown; peer replies own wake, no pane polling.
|
||
R1 frozen pending both verdicts. No endpoints, native engines, live access,
|
||
policy, deployment or other queue work. No authentication/durability/UI proof
|
||
claimed from the supplied synthetic authority facts and idealized transactions.
|
||
|
||
CHAT-01C R1 independent REQUEST CHANGES received in full from Filbert and Dewey
|
||
via agent-send, then R2 corrections performed. Filbert F1/current confirmation
|
||
terminal state and F2/colon-key collision; Dewey C-UI1/frozen queue content and
|
||
causal joins, C-UI2/live confirmation stop/state overlay and C-UI3/receiving upload
|
||
progress. All accepted and regression-tested. Attributed review persistence
|
||
requested from orch-01 per Filbert, rc 0, no Jason-default issue mutations.
|
||
R2 adds scoped current overlays, canonical tuple keys, bounded immutable input
|
||
projections/availability, receiving byte counts and local-file matching semantics.
|
||
Checks green: eleven closed examples/187 omission-extra refusals plus model cases,
|
||
clean copy /tmp/chat-01c-r2-frozen-lujze3oe, base CHAT-01 and CHAT-00 regressions.
|
||
Exact closure request 26149 posted/read-back under actual darkwing; both reviewers
|
||
dispatched rc 0. Four files frozen through both replies, R1 archive unchanged.
|
||
No runtime/native/authentication/durability/UI proof, publication or other queue work.
|
||
|
||
CHAT-01C R2 closure/publication attempt: exact Filbert and Dewey APPROVE AS
|
||
BOUNDED DRAFT received via agent-send and persisted with attribution as actual
|
||
darkwing in 26152. Reviewed hashes and clean copy rechecked. Local commit
|
||
b023841c8a44d08677dc388043997eb4277b0545 contains only four reviewed files;
|
||
author/committer both Darkwing <darkwing@mosaicstack.dev>, verified against
|
||
agent API email. Shared defaults/index contents and other dirty work preserved.
|
||
Committed-copy checks green 11 examples/187 omission-extra plus models/baselines.
|
||
NOT PUBLISHED: push using seat credentials and disabled default helper failed.
|
||
Remote reconciled unchanged at 28d4e98a; darkwing repo permissions push:false,
|
||
pull:true, admin:false; refactor unprotected. No unchanged retry or Jason fallback.
|
||
Access/authorized publisher-route resolution requested from orch-01 rc 0, with
|
||
exact commit/approval/owner-authority references. Blocker 26154 posted/read-back
|
||
as darkwing. No role bypass, history rewrite, live/runtime or other queue action.
|
||
|
||
CHAT-01C access update: Jason granted repository membership; verified darkwing
|
||
API push:true. Reviewed commit/hash checks pass, but new seat-authenticated push
|
||
failed HTTP 403. Remote unchanged at 28d4e98a; dry-run and read-only receive-pack
|
||
discovery also return 403 Forbidden. Token scope/smart-HTTP authorization remains
|
||
unresolved, not asserted as diagnosed. orch-01 notified rc 0; no Jason fallback
|
||
or further unchanged write retries.
|
||
|
||
## 2026-09-13: internal development bootstrap, #1510
|
||
|
||
Jason authorized repo-native Darkwing coordination and source setup for Darkwing, Dewey, Filbert, Rocko and Researcher. No ~/.mosaic launcher/provisioning changes, live fleet migration or engine launch. This phase entry is recorded after initial implementation/checks, not claimed as a pre-implementation entry. Before: Researcher had only managed agent.json and a fleet persona. After: added native launcher, context, README, existing session-validation behavior, and the Researcher test roster. Shared team guidance changed only in scoped sections; other authors' edits preserved.
|
||
|
||
Verification: node --test scripts/test-darkwing-launch.mjs scripts/test-rocko-launch.mjs passed six tests in working and frozen copies; scripts/test-config.sh passed 24; all five real --check calls passed without TUI/auth/model requests. R1 frozen at /tmp/internal-team-r1-i9t21yzr, exact manifest in CANDIDATE.sha256 and issue #1510 comment 26201, posted/read back as Darkwing. Default-socket internal Filbert review request dispatched rc 0, application acceptance pending. Source state is in review, not deployed or user accepted. Existing external provisioning request to orch-01 was superseded with the new no-home-directory-write boundary, dispatched rc 0; no claim that receipt was acknowledged.
|
||
|
||
2026-09-13: #1510 internal Filbert APPROVE AS SOURCE for exact R1, manifest SHA256 23a27014ce6f04ce8187d8495b2efe62b814c3c7d041b027f99b1ec4d490709d. Both verdict and subsequent nine-file hash supplement agree with frozen candidate. Darkwing persisted attributed approval and all nine pins through verified Darkwing API identity, receipt 26204. Filbert independently passed six fake-engine tests in working and frozen copies; five no-effect startup checks and config 24/24 remain author evidence. No live interoperability, publication or user acceptance claimed. Reviewed source/charter left unchanged; prior owners retain their edits.
|
||
|
||
## 2026-09-13 — Discord service unit (#1509, QUEUE row 17)
|
||
|
||
Before: the Sage connector ran in a tmux window; a crash or a reboot left a
|
||
stale `run.lock`, and every rerun after `stop` needed STOP removed by hand.
|
||
After: `scripts/discord-service.sh install` renders and writes a systemd
|
||
user unit, `mosaic-discord@<binding>`, whose main process is
|
||
`discord.sh run <binding> --supervised`. The supervised run first applies
|
||
the new `recover` policy (also a CLI verb): a lock whose owner is gone is
|
||
cleared the way `unlock` does and only the STOP written for that is
|
||
removed; an operator STOP, or a binding held by a live or unverifiable
|
||
process, refuses with the new exit code 3, which the unit never retries.
|
||
`systemctl --user stop` is the soft stop (SIGTERM, no STOP); `discord.sh
|
||
stop` stays the brake. Tests: recover policy (clean, dead lock, no record,
|
||
operator STOP untouched, own leftover STOP, foreign line, brake written
|
||
during the unlock wins, live and unknown and invalid owners refuse without
|
||
writing STOP), CLI exit codes, unit render and install and uninstall,
|
||
`systemd-analyze verify`. Suite 40/40, 95 node tests. Loosening the STOP
|
||
ownership rule fails three tests.
|
||
|
||
Correction, same day: the first cut used `ExecStartPre=discord.sh recover`.
|
||
Live, a refused pre-start went into systemd's auto-restart, because
|
||
`RestartPreventExitStatus` applies to the main process only. Caught on the
|
||
first start behind a brake, before any message traffic; replaced by the
|
||
supervised run as the main process and re-verified: SIGKILL recovered in
|
||
16 s with the dead lock cleared, brake held with no restart, released and
|
||
READY. The Sage seat now runs under the unit; the tmux session is gone.
|
||
|
||
2026-09-13: Darkwing #1510 owner-authorized live smoke. Researcher started natively and returned RESEARCHER_NATIVE_SMOKE_OK, recorded session entry/hash in agents/darkwing/work/internal-development-bootstrap/live-smoke.json, authenticated issue receipt 26216. Rocko duplicate startup refused: existing native Claude PID 3707667 has repo cwd, native context and Sonnet, on mosaic-fleet socket. No new Rocko model test, no existing process restart/migration, no home launcher/provisioning edits. Only newly created dead default-socket test pane removed. Source approval remains 26204; no full MVP acceptance or publication claimed.
|
||
|
||
## 2026-09-13 — Discord binding reload and per-user channels (#1509, QUEUE rows 19–20)
|
||
|
||
Before: the binding was read once at start, so a ceiling, channel or user
|
||
change needed brake, STOP removal, reset and start; every listed user could
|
||
post in every listed channel. After: `scripts/discord.sh reload <binding>`
|
||
validates the file, then sends SIGHUP to the live owner in `run.lock`; the
|
||
connector re-reads it and swaps `guildName`, `channels`, `users` and
|
||
`limits` in place, reading a channel that is new to the binding over REST
|
||
first. `name`, `seat`, `guildId`, `botUserId`, `tokenFile`, `engine`
|
||
and `context` are fixed for the life of the process (engine and prompt are
|
||
launched once, the token read once); a change there, an invalid file or a
|
||
channel outside the guild refuses the reload and keeps the old binding. Each
|
||
attempt is one line in `reloads.jsonl`. The unit gained `ExecReload`, so
|
||
`systemctl --user reload` does the same. A user entry may carry
|
||
`channels`, an allowlist of listed channel ids; outside it the message is
|
||
dropped as `channel-not-for-user`, threads counting as their parent.
|
||
Allowlist over deny list is a recorded choice: explicit lists are the
|
||
connector's policy and a new channel must not widen anyone's reach by
|
||
default; the cost is that a channel added later needs adding to Carmen's
|
||
list too. Tests: schema for the allowlist, `reloadDiff` per fixed key, the
|
||
authorization rows, connector reload (new user, removed channel, lower
|
||
ceiling, fixed key refused), CLI exit codes, unit render. Suite 41/41, 101
|
||
node tests.
|
||
|
||
Live, 00:03 UTC: unit reinstalled and soft-restarted (the old process had
|
||
no SIGHUP handler), READY on the new code. Carmen enrolled by a binding
|
||
edit plus `reload`: applied, users +1, no restart. An unknown key was
|
||
refused by the CLI with exit 2 and nothing signaled; a valid file with the
|
||
seat changed was refused by the process and the binding stayed; the
|
||
revert applied with no differences; `systemctl --user reload` applied.
|
||
Carmen's own first message is the remaining check. Her id is only in the
|
||
binding file.
|
||
|
||
2026-09-14T00:09:08.161174+00:00 | Darkwing | #1503 board attention correction, row 21 | Jason approved idle for completed replies and waiting only for explicit human-input requests after reporting screenshot step-5 failure. New tests reproduced two failures before scanner correction. Phase entry recorded after implementation, not represented as an earlier entry. Working and frozen four-package suites now pass 144 tests each. Read-only actual Researcher scan returns alive:true, idle, waitingOnYou:false at lastActivity 2026-09-13T21:19:57.102Z. Explicit Input needed first-line convention, precedence and Seen lifecycle documented/tested; downstream fixture change acknowledged by Dewey. R1 26247 posted/read back as Darkwing and sent to internal Filbert, application verdict pending. No running-board restart, home launcher edit, agent restart or publication.
|
||
|
||
2026-09-14T00:12:52.493853+00:00 | Darkwing | #1503 attention R1 source approved by internal Filbert, verdict and nine pins persisted/read back in 26248. Reviewer independently passed 193 tests in each copy across board/seat/mosaic/WebUI; author 144 included ledger instead of mosaic. Five-package union now 213/213. No source drift. Next boundary is controlled replacement of listening backend PID 1265952 on 127.0.0.1:7331, awaiting owner authorization; existing agents remain untouched. No runtime fix or operator acceptance claimed yet.
|
||
|
||
2026-09-14T00:21:09.242655+00:00 | Darkwing | #1503 owner-approved backend-only restart | Old PID 1265952 exited gracefully; replacement 3204655 healthy on 127.0.0.1:7331 with unchanged command/config. Live API now returns Researcher idle, waitingOnYou:false at original screenshot timestamp. Five agent PID/start identities unchanged. Evidence restart.json and restart-verification.json under agents/darkwing/work/board-attention; authenticated receipt 26249. Operator visual retest pending; no broader MVP acceptance, home launcher changes or publication.
|
||
|
||
2026-09-14T00:31:46.602431+00:00 | Darkwing | #1503 targeted attention correction | Jason: "idle is confirmed". Operator visual acceptance recorded for Researcher completed-response idle status after live receipt 26249. Broader MVP/cross-harness acceptance and publication not inferred.
|
||
|
||
2026-09-14T00:42:07.429237+00:00 | Darkwing | #1503 targeted status lifecycle operator accepted | Jason confirmed all five steps: explicit Input needed request sent, waiting/attention shown, Seen hides attention while waiting remains, TEST_COMPLETE reply requested, idle restored. Complements earlier ordinary-completion idle acceptance. No broader MVP/cross-harness acceptance or publication inferred.
|
||
|
||
2026-09-14T00:52:54.277747+00:00 | Darkwing | #1509 row 18 actual start and continuation correction | Jason requires automatic continuation after accepted iterations. Prior assistant said it was continuing but ended without action; that was a violation, now acknowledged. Queue/current reconciled. Filbert acknowledged sole implementation ownership of scoped board/WebUI source; Darkwing independently reviews and Dewey acknowledged read-only UX review. Charter docs/plans/2026-09-14_discord-board-row.md. Independent baseline returned 200 and called fake transport once for a connector with forged native registration; no real send. Acceptance checklist and reply-baseline.json under agents/darkwing/work/discord-board. Kickoff entry recorded after dispatch/baseline, not claimed as before author work. Await exact candidate/tests by existing agent-send return route; no timeout armed. No unrelated queue start, source overlap, live connector/home change or publication.
|
||
|
||
2026-09-14T00:59:49.989111+00:00 | Darkwing | #1509 row 18 author checkpoint received | Filbert reports connector discovery/identity/brake/refusal/dynamic discovery and minimal rendering implemented; six-package working suite 320/320 including Chromium fixture, prior attention fixtures preserved. Author-reported only; exact frozen candidate and second run pending. Acknowledged via default-socket agent-send rc 0. Next gate is immutable handoff for Darkwing backend and Dewey UX independent review. No source approval, live change or completion inferred.
|
||
|
||
2026-09-14T01:12:24.257643+00:00 | Darkwing | #1509 row18 R1 independent review | Frozen nine/inherited pins verified; 320 serialized tests independently passed. Dewey approved scoped UX with three Chromium tests and retained limitations. Backend CHANGES REQUIRED R1-B1: uid1000 temporary journal containing STOP, mode000, produces braked:false instead of unknown. Evidence r1-backend-review.json. Author handoff and both verdicts read-back persisted as Darkwing in 26255. Filbert acknowledged bounded R2 correction; next wake exact candidate via agent-send. Two author concurrent frozen timeouts remain unresolved/not green. No source approval, live services/home edits or publication.
|
||
|
||
2026-09-14T01:20:54.024167+00:00 | Darkwing | #1509 row18 R2 review | Nine working/frozen pins, two-file delta and inherited assets independently verified; serialized union 321/321. R1-B1 closed. Dewey exact R2 scoped UX approved with seven targeted tests and prior limits. Newly found R2-B2: canonical synthetic Discord routing envelope author/message IDs become public Task metadata; reproduction r2-envelope-review.json. Missed in R1 review, recorded honestly. Filbert acknowledged bounded fixed-task correction and regression, R3 pending via agent-send. Attributed author/reviewer receipts read back as Darkwing in 26256. No source approval, live observation/restart or publication. Concurrent R1 timeouts remain unresolved/not green.
|
||
|
||
2026-09-14T01:30:57.305468+00:00 | Darkwing | #1509 row18 exact R3 source approvals and read-only live check | Darkwing verified nine working/frozen pins, inherited assets, three-file delta and 322/322 serialized tests; Dewey approved exact R3 with eight targeted tests and retained evidence limits. Both review findings closed. Author and both approvals read-back persisted as Darkwing in 26257. Authorized read-only actual shared-signals observation finds alive/idle, not braked, canonical owner matching systemd MainPID, safe fixed Task and no registration; r3-live-observation.json. Next gate is owner-approved backend-only restart then visual test; no connector/STOP/binding/home changes, backend restart or publication. Concurrent R1 timeouts remain unresolved/not green, now in DEFERRED.
|
||
|
||
2026-09-14T13:08:27.885681+00:00 | Darkwing | Queue collision correction | Git c4fc8e7d and index independently confirmed Discord read-only tools already owned row 21. Restored that committed row verbatim, moved Darkwing attention status to row 22, updated active CURRENT/charter/row1 cross-references. Historical row-21 attention mentions now refer to row 22; append-only logs and frozen review snapshots not rewritten. Unique ordered IDs 1-22 verified. No staging, commit, source/service changes or changes to coordinator-owned tools brief. Row21 newer work status remains coordinator-owned; no status inferred from this restoration. Incoming source label unverified has no established return address; acknowledgment routing unresolved.
|
||
|
||
2026-09-14T13:52:23.718141+00:00 | Darkwing | #1509 row18 owner-approved backend replacement | Verified exact R3 working pins; old backend PID3204655 exited gracefully, replacement3769124 healthy on 7331. Live shared-signals row idle/live/not braked, fixed safe Task, actual reply POST refused409 with explicit connector error. Five agent pane PID/start identities and connector systemd PID/start identity unchanged. Evidence backend-restart.jsonl and backend-live-verification.json under agents/darkwing/work/discord-board. No connector/STOP/binding/home changes. Await operator visual confirmation, then continue to next ready authorized item without routine prompt.
|
||
|
||
2026-09-14T14:07:30.352051+00:00 | Darkwing | Row18 accepted; row6 code phase started | Jason answered parfait to the live Discord-row visual test. Bounded local delivery accepted; no publication or live brake/offline transition claimed. Following the newer standing automatic-continuation mandate, starting next already-briefed row6 under existing Piece5 plan, preserving row6-before-#1508 ordering and no home/fleet changes. #1511 created/read back as Darkwing; charter docs/plans/2026-09-14_task-attribution.md. Rocko native repo context/lock independently verified for source authoring; Filbert backend review, Dewey UX review. This code phase precedes Filbert's specified stale-relaunch assignment; GateF not yet claimed or backdated. Kickoff recorded before author dispatch.
|
||
|
||
2026-09-14T14:09:36.358711+00:00 | Darkwing | #1511 actual continuation checkpoint | Rocko acknowledged sole native source ownership; Filbert and Dewey acknowledged independent review lanes. Missing --by reproduced through isolated CLI refusal, exit4, no live config/registration accessed; evidence agents/darkwing/work/task-attribution/baseline.json. Queue/current now point to row6 code phase; row18 operator acceptance recorded. Await exact author handoff through agent-send, no timeout armed. Source reviews precede any integration; no live or publication authority inferred.
|
||
|
||
2026-09-14T14:25:14.147717+00:00 | Darkwing | #1511 R1 review gate | All 15 author pins matched frozen/working files; manifest 0185cc65c973f6d89c394e2e9fba67fccd794b8ad2be2720a8bb3700b2b018a3. Filbert source-backend approval, Dewey REQUEST CHANGES R1-U1 null/unknown inspector conflation. Both lanes collected before author correction dispatch. Rocko assigned bounded R2 UI/test fix plus inaccurate privacy-syntax prose correction. Reviews persisted agents/darkwing/work/task-attribution/r1-review.md; independent overlay141 and launcher6 logs read back green. Darkwing added only missing --by flag to TOOLS usage, exact owned patch reverse-checked and sent for Filbert review. Queue/current updated; no combined approval, live change, GateF or publication.
|
||
|
||
2026-09-14T14:31:54.546546+00:00 | Darkwing | #1511 R2 source approved, protected test pending | Filbert and Dewey exact source approvals persisted in agents/darkwing/work/task-attribution/r2-review.md, R1-U1/comment findings closed; TOOLS owned patch approved separately. Darkwing combined serialized344/344 exit0; all15 working pins reverified afterward. Old-reader rejection of new field reproduced synthetically; no live records touched. Proposed backend-only restart and one Rocko task-metadata visual test awaits Jason, envelope agents/darkwing/work/task-attribution/live-test-envelope.md. No publication, GateF, Filbert behavior assignment or live acceptance claimed.
|
||
|
||
2026-09-15T00:14:24.283987+00:00 | Darkwing | #1511 authorized backend update; target mismatch blocks test write | Old3769124 gracefully exited, new3414098 healthy, reviewed page byte-identical; API new attribution fields verified. Five agent pane identities, connector identity and every registration byte unchanged. Rocko target mismatch found before mutation: dead registered185602 versus native3707667, missing discovery directory and no row; existing DEFERRED Claude gap updated. No identity repair/relaunch or attribution write. Verified Filbert registration matches its native profile lock/cwd/tmux; requesting only test-target substitution. Receipts agents/darkwing/work/task-attribution/backend-restart.jsonl and backend-live-verification.json. No publication, operator acceptance or GateF claimed.
|
||
|
||
2026-09-15T00:37:06.191367+00:00 | Darkwing | #1511 Filbert live attribution ready for visual test | Jason authorized target substitution and confirmed Claude console integration remains separate. Native Filbert record/lock/cwd/tmux matched; original record backed up privately outside repo. Reviewed CLI set only authorized task metadata; live API taskSource registration and taskSetBy darkwing verified. Other registration bytes and agent/connector/backend identities unchanged. No Rocko change. Receipt agents/darkwing/work/task-attribution/live-test.jsonl. Await operator visual confirmation; no publication, GateF or behavior assignment claimed.
|
||
|
||
2026-09-15T00:45:55.295300+00:00 | Darkwing | #1511 operator confirmed; #1512 kickoff | Screenshot and pasted inspector confirm set by darkwing with caller-claim wording. Bounded attribution delivery accepted, publication remains separate. Next prescribed Piece5 Filbert assignment chartered in docs/plans/2026-09-15_relaunch-activity.md; #1512 created/read back as authenticated Darkwing. Filbert source author, Darkwing backend review, Dewey UX review. No GateF claim.
|
||
|
||
2026-09-15T00:47:20.173732+00:00 | Darkwing | #1512 actual continuation verified | Filbert source ownership and Dewey UX review acknowledged. Independent isolated newer-launch/old-reply baseline reproduced, agents/darkwing/work/relaunch-activity/baseline.json. Accepted bounded presentation-only notice rule: positive row and PID liveness, valid strictly newer launch; retain history/state/Seen/attribution/reply semantics. Await exact frozen candidate via agent-send. #1511 table and inspector confirmation persisted in live-test.jsonl; publication and GateF remain separate.
|
||
|
||
## 2026-09-14 — Discord read-only tools (#1509, QUEUE row 21)
|
||
|
||
Before: the Discord Sage ran pi with `--no-tools`; every answer came from
|
||
the system prompt and the message alone, and the context block said so.
|
||
After: a binding may declare `tools` with named read-only roots. pi then
|
||
starts with `--no-builtin-tools`, loads the package's own extension
|
||
(`packages/discord/extension/readonly-tools.mjs`) by explicit path and
|
||
allowlists exactly `list_dir`, `read_file` and `search`. The rules live in
|
||
`src/tools.mjs` and run without pi: root by name only, relative paths,
|
||
no `..`, empty or dot-prefixed segments, a per-segment `lstat` walk that
|
||
refuses symlinks, real path under the root, regular files only, a size
|
||
cap, a NUL check, credential shapes refusing the whole read, and a budget
|
||
of calls per message. A refusal is a fixed reason; the model never sees a
|
||
host path outside the root. The engine now settles on `agent_end` and
|
||
records every tool call in the turn record with its outcome. Without
|
||
`tools` nothing changes: the same flags and the same paragraph, byte for
|
||
byte. Jason's rulings R1–R7 are in the brief, section 7; the departures
|
||
from the design are in section 8. Review: rev-code-02 approved round 2
|
||
(26276) after four round 1 findings: late tool events landing in the
|
||
next prompt's record, a read-time symlink swap, a missed header form, and
|
||
an install message that needed USER set. One non-blocking finding is left
|
||
for a later round: the malformed-line handler in `engine-pi.mjs` still
|
||
picks the first unfinished prompt, so garbage from a dead run could fail
|
||
the next prompt with the fixed engine-protocol line. No record is
|
||
corrupted and no boundary is affected. Suite 41 → 48 (three checks run
|
||
the real pi offline: the extension exposes exactly three tools, `--no-tools` hides them, a missing
|
||
`MOSAIC_DISCORD_TOOLS` makes pi exit), node tests 101 → 116. Not pushed;
|
||
the live check in #sage-admin comes after the commit.
|
||
|
||
## 2026-09-16 — Discord writes and web tools (#1509, QUEUE row 23)
|
||
|
||
Before: the Discord Sage could only list, read and search the declared
|
||
roots, and knew nothing outside the system prompt. After: a root marked
|
||
`write: true` in the binding admits `write_file` and `edit_file` under the
|
||
same fence as reads (root by name, relative path, no symlinks, regular
|
||
files, size cap, credential shapes refused, one budget per message); a
|
||
`web` key admits `web_fetch` and `web_search`. Fetch is https only, no
|
||
userinfo, every DNS answer must be a public address, the connection is
|
||
pinned to the vetted address, at most three re-vetted redirects, a body
|
||
cap, html to text, 15 s timeout. Search goes to a SearXNG instance named
|
||
in the binding (json format, at most ten results). All rules live in
|
||
`src/tools.mjs` and `src/web.mjs` and run without pi; the extension is
|
||
`packages/discord/extension/tools.mjs` (renamed from `readonly-tools.mjs`).
|
||
Rulings: D1 SearXNG, D2 Jason and Carmen write, D3 any https host, D4
|
||
rev-code-02 reviews.
|
||
|
||
Defect found live by Jason: a second message during a turn went to pi as a
|
||
follow-up, pi folded it into the running loop with one `agent_end`, the
|
||
first answer was lost and the second failed. Fix: the engine now holds a
|
||
prompt client-side until pi settles and sends it as its own run, so every
|
||
message gets its own reply and record. `tests/fake-pi.mjs` models the real
|
||
folding so the old behaviour cannot come back green. Second live finding:
|
||
a turn timed out at 180 s while the model thought for 116 s before its
|
||
first tool call; `turnTimeoutSeconds` raised to 600 by reload.
|
||
|
||
Verification: `scripts/test-discord.sh` 52/52 and node tests 129 pass on
|
||
the frozen bytes; rev-code-02 APPROVED round 3 on 2026-09-17T02:09Z (#1509
|
||
comment 26362, 19 per-file pins matched, tree
|
||
dbd2ce9a778b54b3756e861c390b454452d51246). Live: SearXNG container
|
||
`mosaic-searxng` on 127.0.0.1:8888, binding `web` key, service restarted
|
||
and pi environment verified; Jason's first web turn worked. Records of the
|
||
live setup live in the sage seat evidence directory, never in the repo.
|
||
Follow-ups: a failed turn record should carry its partial tool calls; row
|
||
24 (git verbs) is next.
|
||
|
||
## 2026-09-18 — Discord git verbs for the shared-signals root (#1509, QUEUE row 24)
|
||
|
||
Before: a write from Discord landed in Jason's clone and waited for him to
|
||
commit it from the terminal. After: a writable root that is a git work
|
||
tree may carry a `git` object in the binding, and the Discord Sage gets
|
||
`git_status`, `git_commit`, `git_pull` and `git_push`, plus `reserve_id`
|
||
under the shared-signals record protocol. Every verb is one `git` child
|
||
with a fixed argument list inside the root, 60 s, output capped and
|
||
masked. A commit stages exactly the paths named (one to fifty regular
|
||
files under the root, no dot segment, no symlink), refuses when the index
|
||
already holds someone's staged work, commits as `Sage <[email protected]>`
|
||
with a `Requested-by:` trailer naming the Discord author's server name,
|
||
and pushes at once (D6). A push that fails is still a commit and is said
|
||
so; the next commit's push carries both. Pull is ff-only; push is one
|
||
branch, never force. The guard refuses off the named branch, a detached
|
||
head, a merge, rebase, cherry-pick, revert or bisect in progress, and any
|
||
conflicted path. Under `protocol: "vault"`, writes take the clone lock
|
||
for the path around the write, a commit runs `vault_lock.py check` and
|
||
`validate_vault.py` first, and `reserve_id` appends the registry line.
|
||
The requester comes from a new `requester="…"` field the connector writes
|
||
into the envelope line and the extension reads on `before_agent_start`.
|
||
|
||
Correction to the brief's draft (D5 mechanism): the fleet helper
|
||
`git-credential-mosaic` serves only the two Gitea hosts and exits silently
|
||
for github.com, and the host's global git config sends github.com to
|
||
Jason's own `gh` login. Neither may act for Sage, so git children run with
|
||
no host config at all (`GIT_CONFIG_GLOBAL=/dev/null`, `GIT_CONFIG_NOSYSTEM=1`,
|
||
no askpass, no prompt) and one helper set through `GIT_CONFIG_COUNT`, the
|
||
package's own `bin/git-credential.mjs`, which answers `get` over https
|
||
from the 0600 token file the binding names. The connector checks that
|
||
file's mode and never reads it; its path reaches git only for push, pull
|
||
and reserve, through the environment. The identity D5 named is unchanged.
|
||
|
||
Verification: `scripts/test-discord.sh` 58/58 and node tests 143 pass on
|
||
the frozen bytes (`tests/git.test.mjs` against a local bare remote with
|
||
stand-in vault scripts; a spy spawn asserts no argv holds the token or its
|
||
path; the credential helper is driven as a child; the real pi is shown
|
||
the verbs with a sandbox work tree and refuses `git` on a read-only
|
||
root). Review: rev-code-02 round 1 pinned as #1509 comment 26374, tree
|
||
82ab962f6a1baa0bb010f36da92645f80da67c13. rev-code-02 APPROVED round 1 on 2026-09-18T12:50:33Z (#1509 comment 26375).
|
||
The binding change and the live check follow the local commit; the
|
||
binding stays private. Jason's shared-signals clone holds his own
|
||
uncommitted files; explicit-path staging leaves them alone, and Sage
|
||
cannot commit while his index holds staged work.
|
||
|
||
## 2026-09-20 — Discord SetSpark record client (#1509, QUEUE row 25)
|
||
|
||
Before: the Discord Sage's records lived in files under the shared-signals
|
||
git root, written with `write_file` and committed with `git_commit`; an
|
||
approval was a word in chat. After: record authority sits in the SetSpark
|
||
record service (`setspark-api`, NocoDB and Outline behind it, plan v3.2 at
|
||
shared-signals 55b2515, contract `stack/api/openapi.json` at a5425a2). A
|
||
binding's tools may carry a `setspark` key (`baseUrl`, `keyFile`,
|
||
`principal`); the extension then offers eight fixed verbs, each one HTTP
|
||
call in `packages/discord/src/setspark.mjs`: `record_list`, `record_get`,
|
||
`record_create`, `record_update`, `resolve_id`, `open_approval_request`,
|
||
`get_approval_request`, `create_document`. The api key is re-read from a
|
||
0600 file on every call (one bare line, or the mint's JSON) and exists
|
||
only in the Authorization header. Every write carries an idempotency key
|
||
`<principal>:<message id>:<call index>`; a write outside a turn is refused
|
||
before any request. Arguments are checked in the client; a stale
|
||
`record_update` renders the current revision and the changed fields.
|
||
|
||
Approvals are the connector's, never the model's. A successful
|
||
`open_approval_request` in a turn makes the connector post the proposal
|
||
with an Approve button after the reply, journal it to `approvals.jsonl`,
|
||
and bind the message id to the request at the service under
|
||
`<principal>:<message id>:bind`. A listed approver's button press or exact
|
||
`approve` reply is submitted under `<principal>:<event id>:approval` with
|
||
one Discord message as evidence: the reply itself, or for a press the
|
||
confirmation line the connector posts first (the service keeps
|
||
`source_url` unique per approval; the SetSpark coordinator ruled this on
|
||
2026-09-20). Anyone else gets one fixed line and a drop entry. Start
|
||
retries intent and unknown binds and approvals with the ledger's stored
|
||
evidence. The envelope now carries the author id and the message id, read
|
||
by the extension for the write keys and the audit `context`.
|
||
|
||
Contract work: three server operations the plan's prose folded into one
|
||
(open without a message, bind a message, add an approval with the bound
|
||
message id) were sent to the coordinator and adopted, with a
|
||
`request_stale` code and `kind: button|reply` on add_approval.
|
||
|
||
Evidence: `scripts/test-discord.sh` 63/63 (`/tmp/suites/test-discord-row25.log`),
|
||
node tests 162 (`tests/setspark.test.mjs` 11, `tests/approvals.test.mjs`
|
||
8, `tests/context.test.mjs` extended), the real-pi probe with a setspark
|
||
key listing the reads and the eight verbs with no key exposure. Review:
|
||
rev-code-02 APPROVED round 1 on 2026-09-22T17:58:03Z (#1509 comment 26467). Candidate: 20 paths, aggregate 09140edc, tree
|
||
7872d8c52e60b1c1ad9293d32b2c6664e1f50896.
|
||
|
||
Correction recorded: during the doc checks a stray `git stash -q` stashed
|
||
the whole working tree, other sessions' files included; it was popped
|
||
within the minute, all 44 modified files returned, and the node tests and
|
||
the frozen hashes were re-verified afterwards. No file was lost.
|
||
|
||
Not done: the private binding change (keyFile at Sage's minted key), the
|
||
live check in #sage-admin, the push. Outline collections are empty, so
|
||
`create_document` answers 503 until BizOps creates them.
|
||
|
||
2026-09-15T01:02:43.256672+00:00 | Darkwing | #1512 R1 source review and test hold | Exact seven-file manifest47769fada74c5684dd0ca32c41cea9dcf60e039f5a07657546e17a240af13e9d verified before/after. Darkwing backend and Dewey scoped UX approve source, Dewey8 targeted tests. First frozen full serialized run failed inherited Discord tool-turn case then timed out120s; diagnostic single case passed with force-exit, not acceptance. Later full TAP with15s test deadline and no force-exit passes351/351. Earlier failure unresolved; integration held, Rocko dispatched read-only inherited engine/fixture diagnosis. Scope/logs in agents/darkwing/work/relaunch-activity/r1-review.md. No source edits, live changes, publication or GateF claim.
|
||
|
||
2026-09-15T01:15:49.697152+00:00 | Darkwing | #1512 diagnosis confirmed, provenance corrected | Rocko reported test busy/settled race plus success-only cleanup hang, timeout-log test race, and separate engine followUp-after-timeout concern. Darkwing independently reproduced controlled50ms event split failure with finally cleanup, exit1/148ms, no stress load; read refused-streaming fixture evidence. Row21 owner orch-01 notified through verified named socket; source ownership untouched. Filbert supplied append-only provenance correction: actual archive content1ac812d3, not stale HANDOFFc4fc label. Correction hash and89 dependency pins independently verified and copied outside R1; seven source pins unchanged. Provenance hold resolved, integration awaits owner engine/test disposition. Records agents/darkwing/work/relaunch-activity/engine-diagnosis.md and r1-provenance-correction.json. No live incident/change, publication, operator acceptance or GateF claim.
|
||
|
||
## 2026-09-26: Sage lead handover and shared-records commit
|
||
|
||
Before: the shared records (AGENTS.md, agents/README.md, QUEUE, CURRENT,
|
||
DEFERRED, SESSIONS, BUILD-LOG) carried uncommitted edits from Jason, Darkwing,
|
||
Dewey and Sage, and the working BUILD-LOG.md was missing the 133 HEAD lines
|
||
committed with rows 23 to 25 (1685deb4, 1949ed8d, 43d7574d). After: Jason's
|
||
2026-09-26 ruling is recorded (Sage leads, Darkwing collaborates, development
|
||
stays in T3, the old fleet is being retired), QUEUE rows 23 to 25 show their
|
||
commits and pushes, row 8 has a parked stub brief
|
||
(`docs/plans/2026-09-26_fleet-seats-onto-mosaic-launch.md`), and DEFERRED
|
||
carries the T3-header ledger miscount and the #1509 engine defects.
|
||
|
||
Correction recorded: BUILD-LOG.md was rebuilt as HEAD plus the uncommitted
|
||
entries in their existing order, with the restored row 23 to 25 entries placed
|
||
before two Darkwing 2026-09-15 lines that were already at the end. Checked
|
||
with a diff against HEAD: 244 lines added, none removed. The other shared
|
||
files lose HEAD lines only where a row was deliberately edited.
|
||
|
||
Evidence: all eight suites green on the working tree (config 24, task 90,
|
||
foundation 43, conductor 17, release 14, auth 15, discord 63,
|
||
extension-package 18). Not pushed.
|
||
|
||
## 2026-09-26: WebUI return flow and Age (#1507, Console change)
|
||
|
||
Before: after a reply from the WebUI the inspector kept a pending notice even
|
||
once the seat had answered, and the Age column read from the wrong field.
|
||
After: the pending notice clears once the seat's next answer arrives and stays
|
||
cleared, and Age follows the session's last activity. Dewey authored it on
|
||
the #1512 R1 baseline (`app.js` ce7d79a4). Filbert asked for revisions in R1
|
||
(wrong failing assertion named in NOTES, no test that the notice stays
|
||
cleared) and approved R2, source only, after a mutation check that deletes the
|
||
clearing loop fails the new test.
|
||
|
||
Evidence: `candidate.patch` applied to HEAD reproduces the pins (`app.js`
|
||
d1a51646, `tests/return-flow.test.mjs` a598c0d4); webui tests 9/9; eight
|
||
suites green. Record: `agents/dewey/work/return-flow-age/`. Limits are listed
|
||
in its NOTES.md: a send made while the seat is still working can be cleared by
|
||
the previous answer, and the card and table still show the old preview. The
|
||
fixture reproduces the misleading pending display, not Jason's live report of
|
||
no return at all. Not pushed; the live WebUI reads the file from disk.
|
||
|
||
Correction (Sage, same day): the Before and After lines above misdescribe the
|
||
change. On the baseline the inspector showed no pending notice at all; while
|
||
the seat worked on a reply it showed the previous answer as "Last assistant
|
||
text", which looked like the reply. Age showed only the ISO time. The
|
||
candidate adds a pending notice that appears after a send and clears once the
|
||
new final answer arrives, and Age shows a relative time ("1m ago") beside the
|
||
ISO time. Source: `agents/dewey/work/return-flow-age/NOTES.md`.
|
||
|
||
## 2026-09-26: push, board restart, Sage launch files and lead text (Sage)
|
||
|
||
Before: four local commits unpushed; the control board ran a 09-14 build
|
||
without #1512; `agents/sage/` was untracked with no review receipt and a
|
||
DYOR-only README; every seat persona named Darkwing as lead. After: Jason
|
||
asked for the lead's decision (20:02Z), so origin/refactor was fast-forwarded
|
||
43d7574d → 42c08d52 with the jarvis identity; `next` was not merged (reasons
|
||
and merge conditions in `docs/plans/2026-09-26_lead-decisions.md`). The board
|
||
restarted as PID 3977979 with identical sessions, counts and seen state, and
|
||
now reports `relaunchedAt`. `agents/sage/` is committed after Dewey's review
|
||
(R1 revise, R2 approve): the launcher test covers sage with its zai/glm-5.3
|
||
high pin, the README states the lead role, and the seat reads but never
|
||
writes the old DYOR records under `~/.mosaic`. Dewey authored the N6 text
|
||
change (11 persona/launcher files) naming Sage as lead and Darkwing as a
|
||
collaborating seat; Sage reviewed it against Dewey's pins.
|
||
|
||
Evidence: `scripts/test-darkwing-launch.mjs` 6/6, `scripts/test-rocko-launch.mjs`
|
||
passes, `agents/sage/launch.sh --check` passes, eight suites green. Records:
|
||
`agents/dewey/work/sage-launch-review-2026-09-26.md`,
|
||
`agents/dewey/work/n6-lead-text/`. Running seats keep their injected
|
||
snapshots until they relaunch. Not pushed.
|
||
|
||
## 2026-09-26: ledger reads the T3 header as agent (#1506)
|
||
|
||
Before: `messageKind` knew only the tmux preamble `[host:session ->
|
||
host:session]`. A prompt opening with the T3 header `[from: role (id) -> to:
|
||
role (id)]` counted as human in Table 2. After: the first line can match
|
||
either form. A `control-board` sender is board, any other valid sender is
|
||
agent, and anything short of the full header stays human. The tmux branch is
|
||
unchanged. Darkwing wrote it on Sage's assignment; Filbert approved R1 against
|
||
the frozen hashes (`README.md` e0d411ca, `src/ledger.mjs` e24b065c,
|
||
`tests/ledger.test.mjs` a9da013e).
|
||
|
||
Evidence: no suite runs the ledger tests. The proof is
|
||
`packages/ledger/tests/ledger.test.mjs`: `node --test packages/ledger/tests/`
|
||
passes 22/22, and the same file against HEAD's `ledger.mjs` passes 20/22,
|
||
failing exactly the two new tests. Eight suites green on the staged tree.
|
||
Record: `agents/darkwing/work/ledger-t3-header/`.
|
||
|
||
Limit: the fix changes zero current counts. Table 2 reads only
|
||
`.pi/state/<seat>/sessions/*.jsonl`, and Filbert found no T3 header in any of
|
||
those files. T3 traffic lives in harness transcripts the ledger doesn't read,
|
||
so a T3-routed prompt counts nowhere, as agent or as human. Gate F must not
|
||
use Table 2 until a T3 thread source exists (brief to follow). Not pushed.
|
||
|
||
## 2026-09-26: Jason's walkthrough rulings, Sage moved to SetSpark, CHAT-02 go (Sage)
|
||
|
||
Before: seven open items with Jason: seat tokens, the Discord restart, row 8
|
||
scope, DYOR, `skills/aws-*`, the WebUI return question and CHAT-02. Sage's
|
||
persona files still named DYOR as its business work.
|
||
After: Jason ruled on all seven between 20:27Z and 20:45Z. The rulings are
|
||
recorded in `docs/plans/2026-09-26_lead-decisions.md` and the row 8 stub.
|
||
- Tokens: seat Gitea tokens are read in place.
|
||
- Discord: one restart after 6b is approved, with row 25 going live.
|
||
- Row 8: dev seats only.
|
||
- DYOR: it belongs in dyor-stack-v4, and Sage moves to SetSpark.
|
||
- `skills/aws-*`: excluded locally.
|
||
- WebUI: "pong" appeared without Refresh, so there's no second return defect.
|
||
- CHAT-02: go. CHAT-03 to 08 stay held.
|
||
Sage's SOUL, CONTEXT, README and DISCORD-USER now name SetSpark as its
|
||
business work. The Discord Sage loads them at its next restart. Darkwing's
|
||
SOUL no longer names harnesses for Rocko and Filbert, which were wrong for T3.
|
||
DEFERRED gains the slash-prefix paste hazard and the board Host/Origin gap,
|
||
and the ledger T3 item moves to Done with ef0020ad. Dewey's approved CHAT-02
|
||
brief (636b0fac) and Filbert's review are committed as records.
|
||
Discord restart held: the unit runs from this checkout, and Darkwing's
|
||
uncommitted 6b engine change is in the tree. `discord.sh check` passed at
|
||
20:17Z.
|
||
|
||
## 2026-09-26: correction to the walkthrough entry (Sage)
|
||
|
||
The entry above says Jason ruled "between 20:27Z and 20:45Z". That was wrong.
|
||
I wrote the ruling times from estimates and never checked the clock. The
|
||
session transcript shows the real times: 20:19:22Z (tokens), 20:19:52Z
|
||
(Discord), 20:21:13Z (row 8), 20:23:23Z (DYOR), 20:24:43Z (aws skills),
|
||
20:30:48Z (pong) and 20:31:18Z (CHAT-02). The lead decisions file and the row
|
||
8 stub now carry these times. Messages sent to Dewey and Filbert quoted the
|
||
wrong times as well. None of the rulings changed. Rocko's 6b R1 verdict
|
||
(request changes) is noted under lead decision item 9, and the Discord
|
||
restart stays held.
|
||
|
||
## 2026-09-26: control board Host and Origin guard (Dewey, reviewed by Rocko)
|
||
|
||
Before: `packages/control-board/src/serve.mjs` checked only its bind address.
|
||
After a DNS rebind, a web page could read `/api/board` and POST `/api/reply`,
|
||
which pastes text into a live seat pane. This was never tested in a browser.
|
||
After: `foreignRequest(req)` runs first on every route and returns 403 with a
|
||
fixed error body. It refuses a Host that isn't a loopback name on the
|
||
connection's port, a Host carrying userinfo or a path, and any Origin other
|
||
than `http://<Host>`, including `null` and an empty value. A request with no
|
||
Origin still passes, which is what the WebUI proxy sends. Tests are in section
|
||
11 of `serve.test.mjs`. HEAD fails them, and six mutations each fail at their
|
||
own case. Rocko approved pin de9ff942 (serve d0a9bbed, tests e01d7bd9) and
|
||
captured the proxy's real headers: Host 127.0.0.1:<port>, no Origin. One low
|
||
finding is open: the notes' wording on raw Host syntax is broader than the
|
||
code (see DEFERRED Done). The running board keeps the old code until Sage
|
||
restarts it.
|
||
|
||
## 2026-09-26: Discord engine test cleanup and the busy gap (#1509, Darkwing, reviewed by Rocko)
|
||
|
||
Before, the engine tests could leak a fake pi. Seven tests stopped the engine
|
||
outside `finally`, and one read the fake's `commands.jsonl` 20 ms after a
|
||
prompt, which got ENOENT under load. A failed assertion then left the fake
|
||
running and the test file never exited. On clean HEAD the six-package union
|
||
(control-board, webui, seat, mosaic, ledger, discord) hung at the 240 s cap at
|
||
199 ok in four of four runs. In `engine-pi.mjs`, `busy` ignored a turn that
|
||
timed out before its `agent_start` was read, so the next prompt went to a pi
|
||
that was still running and pi refused it as streaming.
|
||
|
||
After, every engine test stops its engine in `finally`, and `commands()`
|
||
tolerates a log that doesn't exist yet. A failed turn stays at the front of
|
||
the queue and holds the next prompt, so late events land on it. If pi has
|
||
sent no `agent_start` 30 s after the turn failed (`ABORT_GRACE_MS`), the
|
||
engine marks itself wedged. It fails held prompts with `engine-wedged`,
|
||
refuses anything new with `engine-down`, and stops pi (SIGTERM, then SIGKILL
|
||
after 5 s). The exit reaches `onExit`, `cli.mjs` exits 1, and the unit's
|
||
`Restart=on-failure` starts a new connector. A run pi did start still ends
|
||
on its `agent_end` or a settle, as before.
|
||
|
||
Correction: R1 handled the grace by dropping the failed turn and sending the
|
||
next prompt. Rocko rejected it (F1, High). Pi's events carry no prompt id,
|
||
so if the old run came late, its answer and tool records went to the new
|
||
prompt. With a real child, R1 answered "after stall" with "echo: stalled".
|
||
R1's README claimed late events would be dropped. That was wrong.
|
||
|
||
Evidence: `packages/discord/tests/engine.test.mjs` 17/17. R1's engine fails 4
|
||
of these tests and HEAD's fails 5. Three mutations of R2 (no busy check, no
|
||
wedge, held prompts not failed) each fail. On `git archive` of 401cc850 plus
|
||
the three files, the union passed 406/406 three times, 23 to 24 s each, with
|
||
no fake pi left running. The eight suites passed at 24/90/43/17/14/15/63/18
|
||
on that snapshot. On the committed index (base f55b94e8, which adds two board
|
||
tests), the union passed 408/408 and the eight suites passed again. Rocko approved
|
||
R2 (engine 77077b7f, tests 47a99817, fake a8e54cc3) in
|
||
`agents/rocko/work/discord-engine-busy-r2-review-2026-09-26.md`. Record:
|
||
`agents/darkwing/work/discord-engine-busy/`.
|
||
|
||
Known limit: the unit's start limit (5 starts in 600 s) does not bound
|
||
repeated wedges. The live binding has turnTimeoutSeconds 600, so one wedge
|
||
cycle takes at least 645 s, which is longer than the window. A pi that wedges
|
||
on every prompt restarts once per prompt and never hits the limit. It happens
|
||
only when someone sends a message, and they get an error reply. Sage accepted
|
||
this and is recording two follow-ups in DEFERRED: a cumulative wedge stop, and
|
||
a startup journal line with HEAD, the scoped dirty state and a runtime file
|
||
digest. Also unchanged from HEAD: a run pi started that never ends holds
|
||
prompts until each one times out. No connector restart and no push were done
|
||
here.
|
||
|
||
## 2026-09-26: row 25 SetSpark fix and the Discord restart (#1509, Sage, reviewed by Rocko)
|
||
|
||
Before: row 25 (43d7574d) was committed but could not go live. With the
|
||
`setspark` key added to the live binding, `discord.sh check` passed but listed
|
||
no SetSpark verbs. The cause: `resolveToolRoots` dropped `tools.setspark`, so
|
||
neither pi's `--tools` list nor the connector's SetSpark client ever saw it. No
|
||
test followed the binding to the extension. Passing the validated object
|
||
through would also have failed, because the extension refuses its
|
||
`maxResponseBytes` as an unknown key.
|
||
|
||
After: 6c06a6f3. The resolved config carries only the four keys the extension
|
||
accepts, and the extension restores the response cap. The connector's client
|
||
uses the validated binding object, which keeps the cap. The README now marks
|
||
`principal` as required. The new test failed on HEAD and passes with the fix.
|
||
The eight suites passed on an index export (24/90/43/17/14/15/63/18). Rocko
|
||
approved the diff (4dec1898…) in
|
||
`agents/rocko/work/row25-setspark-fix-review-2026-09-26.md` (a28df89e…).
|
||
|
||
Restart: the one restart Jason approved at 20:20Z, done at 20:58:03Z from
|
||
6c06a6f3 with `packages/discord` and `agents/sage` clean. Old PID 890894
|
||
(running since 09-18) stopped cleanly. New PID 499064, pi child 499126,
|
||
gateway READY at 20:58:04Z, session continued, 0 restarts. The pi child's
|
||
tools config carries `setspark` (https://api.setspark.io as sage), and the
|
||
extension enables the eight record and approval verbs from it. Receipt
|
||
(0600): `restart-row25-20260926T205803Z.txt` in the Sage evidence directory.
|
||
Jason's live check (one work item, one proposal approved by button) is still
|
||
to do.
|
||
|
||
## 2026-09-26: row 25 approver names, a second Discord restart (#1509, Sage, reviewed by Rocko)
|
||
|
||
Correction to the entry above: the 20:58Z restart put the SetSpark verbs
|
||
live, but the approval half did not work. In Jason's live check, SS-027 was
|
||
created and read back. DEC-009 was also created, but no Approve button was
|
||
posted. The Discord Sage had written `required_approvers` as `["Jason",
|
||
"Carmen"]`. The SetSpark service stores approvers as `discord:<id>` and
|
||
accepted the names without checking them. `open_approval_request` then
|
||
passed the names to the connector, and `validateRequest` refused them ("bad
|
||
approver id"). The connector was right to refuse. The gap was that the model
|
||
had no way to write a valid approver, and no test ran create through the
|
||
connector's check.
|
||
|
||
After: 20ea5a0b.
|
||
- The binding's `users` provide the approver names.
|
||
- `record_create` and `record_update` turn each name into `discord:<id>`.
|
||
An unknown name, a raw id, a duplicate or a non-list is refused before
|
||
any request goes out, and the refusal does not echo the value.
|
||
- `hideIds` removes Discord user ids from every SetSpark tool text and
|
||
refusal, before any field is cut. The connector's approval request still
|
||
carries the bare ids.
|
||
- With `setspark` set, a reload that changes a user's id or name is refused.
|
||
That change needs a restart.
|
||
- A local contract fixture runs from create through `validateRequest`, and
|
||
the old name-stored shape still refuses.
|
||
|
||
Rocko asked for two revisions. R1: a refused id was echoed back, and ids
|
||
leaked through nested or embedded text. R2: the service code and bad
|
||
property names were cut before hiding. Rocko approved R3 (81379830…, report
|
||
da75219f…). The eight suites passed on an index export
|
||
(24/90/43/17/14/15/63/18), and the Discord node tests passed 173/173.
|
||
|
||
The first R3 task and release runs failed 31 and 3 tests. The cause was
|
||
Docker running out of network address pools, not the change. My own stale
|
||
index-export compose networks had used them up. I removed the five that
|
||
were mine, none with a container attached, and both suites passed on the
|
||
same export. Follow-up in DEFERRED.
|
||
|
||
Restart at 21:30:21Z from 20ea5a0b, with `packages/discord` clean. Old PID
|
||
499064 stopped cleanly. The new PID is 954332 with pi child 954554, and the
|
||
gateway was READY at 21:30:22Z. Pi's `setspark` config has the approver
|
||
names jason and carmen. Receipt (0600):
|
||
`restart-row25-approvers-20260926T213021Z.txt`. Jason reruns the approval
|
||
check. DEC-009 needs a `record_update` to names, or a new decision, and
|
||
then a new approval request.
|
||
|
||
## 2026-09-26: Gate F build, the ledger's T3 source (#1506, Darkwing, for Filbert's review)
|
||
|
||
Before: Table 2 read only `.pi/state/<seat>/sessions/*.jsonl`. Seats that run
|
||
in T3 never reach a Pi log, so their Human column showed "no source" as zero.
|
||
The class pattern in both preambles accepted lowercase only.
|
||
|
||
After (uncommitted candidate on 1c5f6bc3, per brief R3 f3c05c1b): new
|
||
`packages/ledger/src/t3.mjs` reads `~/.t3/userdata/state.sqlite` read-only in
|
||
one transaction. It maps threads to seats by title, cross-checks headers
|
||
addressed to their own thread, and adds a `t3:unmapped` row. It refuses on a
|
||
missing or unreadable database, symlinks, schema drift, no single project for
|
||
the root, bad rows or a header conflict. `--no-t3` and `--t3-db PATH` are new.
|
||
Classes now match in either case. Pins:
|
||
`agents/darkwing/work/ledger-t3-source/build-manifest.sha256`; record `build.md`
|
||
in the same directory.
|
||
|
||
Beyond the brief: the live read refused on HEAD too, at a Filbert Pi log line
|
||
holding a raw U+2028. Node 26.8.1's `readline` ends lines there. The Pi reader
|
||
now splits on `\n` only, with a test.
|
||
|
||
Evidence: no suite runs the ledger tests. `node --test
|
||
packages/ledger/tests/ledger.test.mjs` passes 44/44 (47/47 with the gitea
|
||
helper file). The eight suites passed on a clone of 1c5f6bc3 with the five
|
||
files (24/90/43/17/14/15/63/18); the first task run showed one failure I didn't
|
||
capture, and three reruns passed. Union 434/434 three times. Live read exit 0,
|
||
no conflict, diagnostic 14. Two mutations don't bite (`mode=ro` removed;
|
||
snapshot isolation untested), recorded in `build.md`. Not committed or pushed.
|
||
|
||
## 2026-09-26: Gate F build review (#1506, Filbert)
|
||
|
||
Filbert approved manifest ba73a163 and, as its own item, the Pi reader's
|
||
newline-only splitter. Review: `agents/filbert/work/ledger-t3-build-review-2026-09-26.md`
|
||
(e47ec6da). Correction to the entry above: line 611 holds both a U+2028 and a
|
||
U+2029, and `readline` splits at each. The splitter covers both. His four
|
||
nonblocking notes are listed in `agents/darkwing/work/ledger-t3-source/build.md`
|
||
for a follow-up after the commit.
|
||
|
||
## 2026-09-26: CHAT-02 backend and board routes land (#1507, Dewey, reviewed by Filbert and Darkwing)
|
||
|
||
Before: the board had no conversation view. A reply sent through it could
|
||
be read only in the seat's own pane or its Pi session file.
|
||
|
||
After: a5beb6d9. `packages/conversation` is a read-only library for Pi
|
||
session history: safe file access, the parser, CHAT-01 pages, pinned
|
||
snapshots, cursors and follow. The board serves it on `GET
|
||
/api/conversations` and `GET /api/conversation` behind the Host and Origin
|
||
guard. Filbert sent revision 1 back with three reproduced defects: branch
|
||
ids moved with every append, the assumed-link bridge could merge two
|
||
branches, and one unreadable seat directory turned the catalogue into a
|
||
500. He approved revision 2 (3b14d66c). Darkwing approved the routes
|
||
twice, at R1 (07b10ad1) and R2 (b9d92003). On an index export the eight
|
||
suites passed, conversation and control-board 153/153 and webui 9/9. The
|
||
board restarted at 21:36:29Z as PID 1042473. Live, the catalogue lists 18
|
||
Pi conversations and 1 unsupported Claude conversation. A single
|
||
conversation returns a 10-entry page. A foreign Host or Origin gets 403,
|
||
an extra parameter 400 and POST 405. The Console that shows it is next.
|
||
|
||
Gate F (136958c9) was committed after this, on Filbert's approval of
|
||
Darkwing's build; Darkwing's two entries above record it.
|
||
|
||
## 2026-09-26: row 25 live check passed (#1509, Sage, Jason)
|
||
|
||
Jason reran the approval check against 20ea5a0b and reported success. The
|
||
approvals log has the full sequence for DEC-010 v1, approval request 2,
|
||
with one approver. The request opened and was bound to its Discord message
|
||
at 21:33:36Z. Jason's button approval was recorded at 21:38:58Z, intent
|
||
then done. The connector did not restart (PID 954332). DEC-009's request 1
|
||
never opened on the Discord side, as expected. Row 25 is live: records,
|
||
approval request, button, and the approval recorded in SetSpark. The
|
||
service-side approver validation gap went to the SetSpark lead (see
|
||
DEFERRED).
|
||
|
||
## 2026-09-26: CHAT-02 Console (#1507, row 5, Dewey, Filbert, Sage)
|
||
|
||
The WebUI can now show a seat's conversation, read-only, through the two
|
||
CHAT-02 board routes. History opens it from the Waiting card, the table
|
||
row and the inspector. The view pages through the whole branch without
|
||
clipping. Untrusted text is set only with textContent, and control and
|
||
bidi characters are drawn as visible marks. On the last page it polls
|
||
with the follow cursor and replies through the existing /api/reply path.
|
||
The WebUI proxy passes only the two conversation routes' query strings
|
||
upstream.
|
||
|
||
Review: Filbert asked for changes on revision 1 (24b046af). The blocker,
|
||
B1: after a reconcile, "Reload conversation" reopened on the default
|
||
branch without saying so. Revision 2 (d06de6a7) keeps the branch, adds a
|
||
`gone` marker when that branch no longer exists, and takes notes N1 to
|
||
N3. Filbert approved it in review 160dd68d, with 188/188 including two
|
||
probes of his own. Sage checked the ten pins on the staged index: webui,
|
||
conversation, control-board and seat tests 186/186 serial. The eight
|
||
suites are green, and the chat-00, chat-01 and chat-01c checks exit 0.
|
||
Dewey's mutation runs caught 17 of 17.
|
||
|
||
Deviation from brief §2.3 item 6, accepted by Filbert (who wrote the
|
||
item) and recorded by Sage: a relaunched seat shows the `newer` marker
|
||
("Open the newest session"), not `reconcile`. The relaunch writes a new
|
||
session file, while the old one stays readable, so nothing needs
|
||
reconciling. Item 6's wording was too narrow.
|
||
|
||
Also in this commit: Filbert's CHAT-02 backend reproduction scripts,
|
||
referenced by his backend review (a5beb6d9), and Darkwing's two
|
||
test-only route notes. Filbert's idsDigest note waits in
|
||
agents/dewey/work/chat-02/FOLLOWUPS.md. Still due: a WebUI restart,
|
||
because the running proxy predates these routes, then the brief §4 live
|
||
check.
|