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:
+1
-1
@@ -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, "&").replace(/</g, "<").replace(/>/g, ">");
|
||||
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);
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user