docs: BUILD-LOG for the row 148 landing; Sage SESSIONS line; P19 follow-ups 318-320 script and record
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
d4ea7e5a69
commit
625afe15f7
4 files changed
+117
No files matched your search
@@ -4957,3 +4957,13 @@ Not done: row 152 (#1646) is in review.
|
||||
- Mos ran the window on Mos's go: stamp 21:12:28Z, bus down 21:12:46Z to 21:12:54Z, Console up 21:12:58Z. P5 PRE_OK 21:12:14Z, verify-new 5 x MATCH, healthz ok, chief and pm CHECK3_PASS with land_work absent, working-refs post POST_OK before and after the smokes (main fc5b342f8 unchanged, no root ref, Jason's repo at ae0b17c9). Row 139 SMOKE A passed: decision 0f3148e1 routed to pm, not to Jason, resolved no via broker. 139 B and D and 137 B wait for Jason (Vikunja #317); 137 C skipped under Q134; 137 D at the next land-work landing. No rollback. Comments 28824, 28825, 28826 and 28828 on #1629, #1644, #1633 and #1631 record the live state.
|
||||
- Mos's observation: `talk pm` with pm down waits the 900 s default, the same as OLD, so a window plan should have chief launch pm first.
|
||||
- Row 148: Mos replaced the x2.2 rule for this and later parser diffs. No cell over 1 s at 1 MiB; a cell fails above x3 per doubling over 1 to 4 MiB or on two consecutive steps of x3.5 or more; the no-parser control is reported next to the table. Researcher's criterion-mos.md reran 130 cells: 121 pass (worst 523 ms at 1 MiB, worst x2.70, control x2.07). 9 throw RangeError in HR at markdown-preview.js:267, a backreference regex that overflows V8's regexp stack at about 2 MiB of "-" and 4 MiB of "- ", present since round 1. Under Mos's rule that is a code fix: sage-0621 sends Researcher to replace HR with a linear scan, audit every quantified-group regex at 4 MiB, record what bus.js does on a render throw, then mutants, the rerun and a fresh 756-cell table, gate and manifest. Mos told in sage-0622.
|
||||
|
||||
2026-10-16 22:25:47 UTC | Sage | row 148 landed as d4ea7e5a6 (Console spec and docs editor, #1642); Mos's decision 123 go; three follow-ups filed
|
||||
|
||||
- Before: refactor at a4779d2a5, row 148 in review on round 3 (manifest 95ae4736, patch 1b63164b, public diff 8360122b, 27 paths, base 18aee8fa1). After: d4ea7e5a6 on origin/refactor, row 148 done (queue rev 1624), #1642 closed with comment 28838.
|
||||
- Approvals: Dewey 28832 and Filbert 28835, no blocking findings. Mos checked the shas, the vendoring rule, both criterion tables, the approvals in the queue log, the round 4 gate and the drift, then gave the decision 123 go (mos-0636).
|
||||
- Evidence under Mos's rule: criterion-mos 130/130 and criterion-mos-p2 138/138 pass; worst 513 ms at 1 MiB, worst x2.50 per doubling, largest step x2.97, no-parser control x2.01. "---" + letters + none has one 2 to 4 MiB step of x3.34 (x2.62 per doubling) and passes. The 756-cell grid has 0 timeouts. Mutants 43/44, v21 equivalent.
|
||||
- Landing gate on a4779d2a5 plus the candidate in /mnt/storage/scratch/sage-r148g: manifest check OK, no drift on the 27 paths since 18aee8fa1, 25 steps all rc 0 (15 packages, 10 script suites), 22:19:24Z to 22:24:09Z, network sage-r148g_default removed, worktree removed. Push checks: fast-forward, no binaries, secrets grep clean.
|
||||
- Follow-ups in Vikunja P19, filed with agents/sage/work/vikunja-setup/file-r148-followups.mjs: 318 (Save stays off after a paint throw outside the render), 319 (the dead NUL check at bus.js:671 and :698), 320 (tracks Gitea #1650, the 1 MiB + 64 KiB buffer before the human proof). Correction to mos-0636's labels: #1650 is the buffering issue, not the NUL check.
|
||||
- Earlier the same hour: pushed 862af3079..a4779d2a5 (Dewey's and Filbert's SESSIONS lines and queue revs 1588-1623) with no gate, under Mos's 18:57Z docs rule; no test reads the live queue files.
|
||||
- Not live: the stack runs 52f35e7a0. The editor reaches the Console only through a re-pin, which needs Mos's go. Row 141 r1 is with Filbert, who holds the slot from 22:24Z for single test files.
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"at": "2026-10-16T22:20:34.989Z",
|
||||
"project": 19,
|
||||
"created": [
|
||||
{
|
||||
"title": "webui editor: Save stays disabled after a paint throw outside the render, until the next input",
|
||||
"id": 318,
|
||||
"index": 158,
|
||||
"inverse": "mark done: POST /api/v1/tasks/318 done true (pm); delete is Jason's or ops-01's",
|
||||
"readBack": 200,
|
||||
"project_back": 19,
|
||||
"due_back": "0001-01-01T00:00:00Z",
|
||||
"done": false
|
||||
},
|
||||
{
|
||||
"title": "webui bus.js: remove the dead NUL check in the editor (bus.js:671 and :698)",
|
||||
"id": 319,
|
||||
"index": 159,
|
||||
"inverse": "mark done: POST /api/v1/tasks/319 done true (pm); delete is Jason's or ops-01's",
|
||||
"readBack": 200,
|
||||
"project_back": 19,
|
||||
"due_back": "0001-01-01T00:00:00Z",
|
||||
"done": false
|
||||
},
|
||||
{
|
||||
"title": "bus: project.file.save buffers up to 1 MiB + 64 KiB before the human proof (#1650)",
|
||||
"id": 320,
|
||||
"index": 160,
|
||||
"inverse": "mark done: POST /api/v1/tasks/320 done true (pm); delete is Jason's or ops-01's",
|
||||
"readBack": 200,
|
||||
"project_back": 19,
|
||||
"due_back": "0001-01-01T00:00:00Z",
|
||||
"done": false
|
||||
}
|
||||
],
|
||||
"problems": []
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
// Sage, 2026-10-16: decision 110. Files row 148's three landing follow-ups (#1642) as tasks in project 19
|
||||
// with Sage's own key (bot user 13), as Mos asked in mos-0636. Refuses if a title already exists. The sync
|
||||
// key reads each back. No labels, no assignees, no bucket moves. Rollback is marking the task done;
|
||||
// deletion is Jason's or ops-01's. Prints no secret.
|
||||
// Usage: node file-r148-followups.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 PROJECT = 19;
|
||||
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 TASKS = [
|
||||
{ title: "webui editor: Save stays disabled after a paint throw outside the render, until the next input",
|
||||
description: p("Row 148 round 3 (#1642), note 1 from Dewey (comment 28832), repeated by Filbert (28835). Non-blocking. If paintDoc throws on a line other than the render while a save is running, Save stays off and the status is not announced until the next input. docs-browser.test.mjs asserts that behavior. Only a test can cause it today, because the render, the one line that can realistically throw, is caught and falls back to textContent.",
|
||||
"Decide whether the finally in the submit handler should also repaint Save and the status. If it changes, update the docs-browser assertion and add a mutant. Touches webui public/, so decision 123 applies.") },
|
||||
{ title: "webui bus.js: remove the dead NUL check in the editor (bus.js:671 and :698)",
|
||||
description: p("Row 148 round 3 (#1642), note 2 from Dewey (comment 28832). s.raw.includes('\\0') in packages/webui/src/public/bus.js:671 and :698 can never be true: the project read refuses a file with a NUL first (project-read-content, packages/project/src/read.mjs:14), so the page never has such a draft. Researcher disclosed it in build.md and left it as harmless.",
|
||||
"Remove it or turn it into a test-backed assertion, in the next change that touches bus.js anyway. Touches webui public/, so decision 123 applies.") },
|
||||
{ title: "bus: project.file.save buffers up to 1 MiB + 64 KiB before the human proof (#1650)",
|
||||
description: p("Row 148 (#1642) note from Researcher's build.md: the 1 MiB cap is on the HTTP JSON body, and the bus envelope for project.file.save is 1 MiB + 64 KiB. Dewey's round 1 N1 is the same point and is Gitea #1650: the bus reads the whole request line before it checks the human proof, so any peer that can reach the socket and names that verb makes the bus buffer that much before the refusal.",
|
||||
"Scope is in #1650: measure the memory and time cost per request, then decide whether to check the proof before the body or cap concurrent large reads. This task tracks #1650; close both together.") },
|
||||
];
|
||||
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 : []);
|
||||
async function existing() {
|
||||
const out = [];
|
||||
for (let page = 1; page < 20; page++) {
|
||||
const r = await api("GET", `/api/v2/projects/${PROJECT}/tasks?per_page=50&page=${page}`, undefined, sync);
|
||||
if (r.status !== 200) throw new Error(`list tasks: ${r.status}`);
|
||||
out.push(...list(r.json));
|
||||
if (list(r.json).length < 50) return out;
|
||||
}
|
||||
throw new Error("more than 19 pages");
|
||||
}
|
||||
const rec = { at: new Date().toISOString(), project: PROJECT, created: [], 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 before = await existing();
|
||||
const clash = before.filter((t) => TASKS.some((x) => x.title === t.title));
|
||||
if (clash.length) throw new Error(`exists: ${clash.map((t) => `#${t.id} ${t.title}`).join("; ")}; refusing`);
|
||||
writeFileSync(OUT, "", { flag: "wx" });
|
||||
|
||||
for (const t of TASKS) {
|
||||
rec.created.push({ title: t.title });
|
||||
save();
|
||||
const body = { title: t.title, description: t.description, ...(t.due ? { due_date: t.due } : {}) };
|
||||
const r = await api("PUT", `/api/v1/projects/${PROJECT}/tasks`, body, key);
|
||||
if (r.status >= 300 || !Number.isSafeInteger(r.json?.id)) {
|
||||
rec.problems.push(`create ${t.title}: ${r.status} ${r.json?.code ?? ""} ${r.json?.message ?? ""}`);
|
||||
break;
|
||||
}
|
||||
Object.assign(rec.created.at(-1), { id: r.json.id, index: r.json.index, inverse: `mark done: POST /api/v1/tasks/${r.json.id} done true (pm); delete is Jason's or ops-01's` });
|
||||
const back = await api("GET", `/api/v2/tasks/${r.json.id}`, undefined, sync);
|
||||
Object.assign(rec.created.at(-1), { readBack: back.status, project_back: back.json?.project_id, due_back: back.json?.due_date, done: back.json?.done });
|
||||
if (back.status !== 200 || back.json?.title !== t.title || back.json?.project_id !== PROJECT || back.json?.done) rec.problems.push(`${t.title} read-back differs`);
|
||||
}
|
||||
save();
|
||||
process.stdout.write(JSON.stringify(rec, null, 1) + "\n");
|
||||
if (rec.problems.length) process.exit(2);
|
||||
@@ -1090,3 +1090,4 @@ are never rewritten or removed; corrections are new entries.
|
||||
2026-10-16T21:22:38Z | Sage (Opus 5.5, 1ef1e4f8) | 52f35e7a0 window plan and rollback set pushed (52f35e7a0..dc12dc9c0); Mos ran the re-pin, live 21:12:54Z, no rollback; row 148 r3 back for HR stack overflow (sage-0621/0622) | POST_OK, 139 SMOKE A pass; issues 28824-28828; live 52f35e7a0
|
||||
2026-10-16T22:04:33Z | Dewey (Opus 5.5, 84fb346c) | row 148 (#1642) round 3 review, candidate 95ae4736 (sage-0628) | approve, comment 28832, queue rev 1620 (op dewey-r148-v3); s flags and isRule verified (oracle, 4 MiB, stack audit 53/53), paintDoc catch and submit finally killed by e6 and e7; r4 mutants 43/44 (v21 equivalent) and gate rc=0 checked against build.md; ran markdown-preview 19/19 and docs-browser 1/1 singly 22:03:22Z-22:03:31Z; no base drift on 27 paths; 3 non-blocking notes
|
||||
2026-10-16T22:14:10Z | Filbert (Opus 5.5, 048f3c63) | row 148 round 3 review (#1642), manifest 95ae4736 rebuilt on 18aee8fa1; 40-cell probe on Sage's slot and two single test files | approve, comment 28835, rev 1623; probe linear (max 2.2 ms at 64 KiB, isRule 266 ms at 4 MiB), 19/19 and 1/1 pass
|
||||
2026-10-16T22:25:47Z | Sage (Opus 5.5, 1ef1e4f8) | row 148 landing, #1642 | d4ea7e5a6 pushed after Mos's decision 123 go (mos-0636) and a green 25-step landing gate; row done rev 1624, #1642 closed 28838, Vikunja 318-320 filed; a4779d2a5 docs push; not live until a re-pin on Mos's go
|
||||
Reference in new issue
Block a user