docs: decisions 133 (redeploy without rows 91 and 93) and 134 (Filbert to Opus 5.5), P19 #250 close record

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-13 09:11:18 -05:00
co-authored by Claude Opus 5.5
parent 8ac8055c4d
commit bc49fb2c03
5 changed files with 128 additions and 1 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ not fleet seats. Keep changes in `/mnt/storage/src/mosaic-stack`; do not modify
| Darkwing | Hands-on engineering; collaborating seat under Sage | Pi, configured Mosaic model | `agents/darkwing/launch.sh` |
| Dewey | Frontend design, UX, accessibility, and UI implementation | Pi, configured Mosaic model | `agents/dewey/launch.sh` |
| Rocko | General development, investigation, testing, and review | T3 session (Codex, gpt-6.1-sol, thread d99326cc, lead decision 122; Claude thread b84bb264 retired 2026-10-12); launcher Claude Code, Sonnet model | `agents/rocko/launch.sh` |
| Filbert | General development, investigation, testing, and review | T3 session (Codex, gpt-6.1-sol, thread f712d8af, non-sandbox reviews only, lead decision 130; Codex thread 50342f6a retired 2026-10-13, Claude thread 9cb9731e retired 2026-10-12); launcher Pi, `openai-codex/gpt-6-astra:low`, not to be used under R26 until it changes (lead decision 69) | `agents/filbert/launch.sh` |
| Filbert | General development, investigation, testing, and review | T3 session (Claude, Opus 5.5, thread 048f3c63, non-sandbox reviews only, lead decisions 130 and 134; Codex threads f712d8af and 50342f6a retired 2026-10-13, Claude thread 9cb9731e retired 2026-10-12); launcher Pi, `openai-codex/gpt-6-astra:low`, not to be used under R26 until it changes (lead decision 69) | `agents/filbert/launch.sh` |
| Researcher | Source-grounded technical research and evidence | T3 session (Claude, Sonnet 5.5, thread 9bac0794, rows 97 and 98, lead decision 124); Haiku rows (71, 80, 84, 88, later 96) run as subagents Sage dispatches with model haiku, effort high and a worktree (lead decision 129); Haiku thread c98aaf4a retired 2026-10-13 unused; launcher Pi, configured Mosaic model | `agents/researcher/launch.sh` |
| Sage | Project lead: coordination, review, integration; earlier DYOR strategy records retained | T3 session (Claude Code); Pi launcher `zai/glm-5.3:high` retained | `agents/sage/launch.sh` |
@@ -0,0 +1,19 @@
{
"at": "2026-10-13T14:06:30.698Z",
"task": 250,
"problems": [],
"comment": {
"status": 201,
"id": 134,
"readBack": 200,
"found": true
},
"update": {
"status": 200,
"inverse": "mark undone: POST /api/v1/tasks/250 done false (sage key)",
"readBack": 200,
"done": true,
"titleSame": true,
"descriptionSame": true
}
}
@@ -0,0 +1,63 @@
// Sage, 2026-10-13: Mos's redeploy ruling (decision 133). Comments on #250 (row 94 mixed state, plain
// `mosaic inbox` fails on a pre-94 bus) and marks it done: the bus restarted on 2b2a9e14 code at
// 14:04:18Z, so the broker has the messages verb and row 99's fallback is dropped. Sage's own key (bot
// user 13). The update sends the task as the v1 GET returned it with only done changed; the sync key reads
// title, description and done back. Rollback is marking it undone. Prints no secret.
// Usage: node close-250.mjs https://tasks.woltje.com SAGE_TOKEN_FILE SYNC_TOKEN_FILE OUT_JSON
import { readFileSync, writeFileSync, existsSync } from "node:fs";
const [ORIGIN, KEY, SYNC, OUT] = process.argv.slice(2);
if (!/^https:\/\/tasks\.woltje\.com$/.test(ORIGIN)) throw new Error("tasks.woltje.com only");
if (!OUT || existsSync(OUT)) throw new Error("OUT_JSON missing or exists; refusing");
const TASK = 250;
const TITLE = "Row 94 mixed state: plain `mosaic inbox` may fail until bus restart";
const SIG = "Created by Sage (T3 1ef1e4f8) with Sage's own key (bot user 13).";
const esc = (s) => s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
const p = (...xs) => xs.map((x) => `<p>${esc(x)}</p>`).join("") + `<p>${esc(SIG)}</p>`;
const TEXT = [
"Closed by the redeploy, not by a fix row. Jason rebooted dragon-lin at 13:40Z and the bus unit, which is not enabled, stayed down. Mos ruled the planned redeploy ships now without rows 91 and 93 (decision 133).",
"Sage reinstalled the unit (adds the EnvironmentFile line) and started mosaic-bus@mosaic-stack at 14:04:18Z from the canonical checkout at 8ac8055c. That tree includes row 94 (2b2a9e14), so the running broker dispatches the messages verb (packages/bus/src/broker.mjs:983) and plain `mosaic inbox` no longer gets unknown-verb.",
"Row 99 (the text-mode fallback, Gitea #1593) is dropped and does not land. The fallback only helps against a pre-94 bus, which can now only come back through a rollback. The packet stays as evidence at agents/researcher/work/queue-99/r1/ (commit 8ac8055c).",
];
const key = readFileSync(KEY, "utf8").trim(), sync = readFileSync(SYNC, "utf8").trim();
async function api(method, path, body, auth) {
const r = await fetch(ORIGIN + path, { method, headers: { Authorization: `Bearer ${auth}`, "Content-Type": "application/json" }, body: body === undefined ? undefined : JSON.stringify(body), redirect: "error" });
const t = await r.text(); let json = null; try { json = JSON.parse(t); } catch {}
return { status: r.status, json };
}
const list = (j) => j?.items ?? (Array.isArray(j) ? j : []);
const rec = { at: new Date().toISOString(), task: TASK, problems: [] };
const save = () => {
const out = JSON.stringify(rec, null, 1) + "\n";
if (out.includes(key) || out.includes(sync)) throw new Error("secret in the record; not written");
writeFileSync(OUT, out);
};
const task = await api("GET", `/api/v2/tasks/${TASK}`, undefined, sync);
if (task.status !== 200 || task.json?.project_id !== 19 || task.json?.title !== TITLE) throw new Error(`task ${TASK}: ${task.status}, project ${task.json?.project_id}, title differs or missing`);
if (task.json.done) throw new Error(`task ${TASK} is already done; refusing`);
const before = { title: task.json.title, description: task.json.description };
writeFileSync(OUT, "", { flag: "wx" });
const c = await api("PUT", `/api/v1/tasks/${TASK}/comments`, { comment: p(...TEXT) }, key);
rec.comment = { status: c.status, id: c.json?.id ?? null };
if (c.status >= 300 || !Number.isSafeInteger(c.json?.id)) rec.problems.push(`comment: ${c.status} ${c.json?.message ?? ""}`);
else {
const back = await api("GET", `/api/v2/tasks/${TASK}/comments?per_page=50`, undefined, sync);
const found = list(back.json).find((x) => x.id === c.json.id);
Object.assign(rec.comment, { readBack: back.status, found: Boolean(found) });
if (back.status !== 200 || !found) rec.problems.push(`comment read-back: ${back.status}`);
}
save();
if (!rec.problems.length) {
const full = await api("GET", `/api/v1/tasks/${TASK}`, undefined, key);
if (full.status !== 200 || full.json?.id !== TASK) rec.problems.push(`v1 get: ${full.status}`);
else {
const u = await api("POST", `/api/v1/tasks/${TASK}`, { ...full.json, done: true }, key);
rec.update = { status: u.status, inverse: `mark undone: POST /api/v1/tasks/${TASK} done false (sage key)` };
const back = await api("GET", `/api/v2/tasks/${TASK}`, undefined, sync);
Object.assign(rec.update, { readBack: back.status, done: back.json?.done, titleSame: back.json?.title === before.title, descriptionSame: back.json?.description === before.description });
if (u.status >= 300 || back.status !== 200 || back.json?.done !== true || !rec.update.titleSame || !rec.update.descriptionSame) rec.problems.push("update or read-back differs");
}
}
save();
process.stdout.write(JSON.stringify(rec, null, 1) + "\n");
if (rec.problems.length) process.exit(2);
+1
View File
@@ -839,3 +839,4 @@ are never rewritten or removed; corrections are new entries.
2026-10-13T13:13:59Z | darkwing | row 91 round 3 (#1585): Filbert submodule escape confirmed on round 2, fixed and tested, packet agents/darkwing/work/queue-91/r3 (372651716) | in review, manifest ca570607 on 2b2a9e14, request 28133, revs 893 to 895 (3c641c08), reviewer Dewey
2026-10-13T13:18:03Z | filbert (f712d8af) | row 97 round 3 confirm-only static re-review (#1591), manifest 868f43de2d7e216bc17e8a6f17f38b844a0c753cd666a0fc5ad39d5e95e45ba6 | approve, comment 28139; reconstructed on cd976b09, 3/3 hashes matched, 72 changed lines identical to r2; new messages reads traced behind sign-out guards, 8 mutant anchors match once; no tests, mutants or queue-commit run; Sage commits verdict revision and reruns gate; no push
2026-10-13T13:20:11Z | darkwing | row 97 (#1591) round 3 confirm-only review | approve, comment 28140, manifest 868f43de, base cd976b09; patch and manifest verified, test 2 and mutants 13, 13a, 26, 27 unaffected by row 94 by reading; note on a palette stale-cache race in bus.js (outside the row); queue rev 902 in c075bd04
2026-10-13T14:11:18Z | sage (1ef1e4f8) | decision 133 redeploy: bus unit reinstall (EnvironmentFile line), start 14:04:18Z on 8ac8055c with rows 89, 90, 92, 94; row 99 dropped (rev 907, #1593 comment 28146 closed, P19 #250 comment 134 done); Darkwing and Dewey resumed; decision 134 Filbert to Opus thread 048f3c63, f712d8af retired | done; Mos enabled the unit 14:09:15Z; revs 903-907 still pending queue-commit
+44
View File
@@ -2966,3 +2966,47 @@ which stay with him. Each item names who decided it and what happened.
It takes the test slot ahead of rows 80 and 88.
- The bus restart doesn't move earlier for this. Decision 118's
order stands.
133. **The redeploy ships without rows 91 and 93 (2026-10-13, Mos's
ruling after Jason rebooted dragon-lin at 13:40:09Z).** The bus unit
stayed down after the reboot because it was never enabled. Decision
118's redeploy went ahead instead of waiting for the sandbox rows.
- Sage reinstalled the unit with `scripts/bus-service.sh install`
from canonical 8ac8055c. The only change is the
`EnvironmentFile=-%h/.config/mosaic-dev/secrets/claude-session.env`
line. Mos's pm.conf drop-in still adds `--pm`.
- Sage started the bus at 14:04:18Z. The unit is active with
NRestarts 0, /healthz on :7332 returns ok, and `launches list`
shows PM run r71a2676a33a8. The bus runs the code from rows 89,
90, 92 and 94.
- Install doesn't enable the unit and Sage didn't. Mos enabled it at
14:09:15Z without restarting it. Undo with `systemctl --user
disable mosaic-bus@mosaic-stack.service`. Whether install should
enable units is a later row, not urgent.
- Row 99 is dropped: the fallback only helps against a pre-94 bus,
which only a rollback could bring back. Queue rev 907 blocks it
with the reason (no dropped state exists, and parking needs Jason
from briefed). It stays blocked until Jason is next in the queue.
Gitea #1593 is closed (comment 28146) and Vikunja P19 #250 is done
(comment 134).
- Rows 91 and 93 need their own bus restart when they land. Sage
asks Mos for it then.
- Next: Jason's PM re-test (#228, #232). Row 85 waits on it.
134. **Filbert moves to Claude Opus 5.5 (2026-10-13, a seat change on
Jason's direct input).** Jason reported that OpenAI's cyber-risk
filter keeps blocking Filbert's reviews on gpt-6.1-sol. The thread
it blocked was the retired 50342f6a; f712d8af approved row 97 round 3
at 13:18Z without a flag. The filter would still fire on any
security-adjacent review, so the seat moves while no Filbert review
is in flight.
- New thread 048f3c63 (Claude, claude-opus-5-5). Codex thread
f712d8af is retired; nobody messages it.
- Opus roster seats are now Darkwing, Dewey and Filbert, three of
decision 45's four. Sage's own thread isn't counted.
- Cost: no GPT reviewer remains, so every review is Claude on Claude.
Decision 122 chose Codex for reviewer diversity. Rocko stays on
Codex as a builder.
- Decision 130's split stands: Filbert reviews non-sandbox rows only,
and Dewey keeps rows 91 and 93.
- Mos had no objection.