Lands Gosalyn's round 3 candidate,a2c72ac95(commit candidate, basec771a36f4), approved by Webby (29979, rev 2731). 21 paths: the new packages/library (src, tests, fixtures, package.json, README), scripts/stack-copy.sh (packages/library/src in COPY_PATHS), packages/cli/tests/stack-copy.test.mjs, scripts/mosaic and agents/gosalyn/work/queue-212/BUILD.md. The 21-path patch-id, ea84d3e35470, equals the candidate's. Evidence: Gosalyn's slot run on round 3: 20 files 451 pass, 0 fail; test-queue 28/0 (gosalyn-0086). Landing gate (Sage, 08:51-09:03Z, base4ced5e63d) on a tree that also held row 197's 32 paths: GATE_PASSED, node tests 981 pass 0 fail (library 39, cli 681, control-board 38, harness 16, webui 51, plus the scripts/test-*.sh node suites), selftests 429 passed 0 failed. Row 212 lands alone (mos-1162); row 197 waits for an r6 after its lane proof stopped. No 212 path changed betweenc771a36f4and this commit's parent. `queue review verify-commit 212` -> ok row 212 round 3:a2c72ac95matches the commit candidate (21 paths).
28 lines
1.3 KiB
JavaScript
28 lines
1.3 KiB
JavaScript
// Errors and the R-rule problems of design 1.3. A problem never holds back a commit: it names a
|
|
// path and, where there is one, a line, and the index leaves the file or link out.
|
|
export class LibraryError extends Error {
|
|
constructor(code, message) { super(`${code}: ${message}`); this.code = code; }
|
|
}
|
|
export const raise = (code, message) => { throw new LibraryError(code, message); };
|
|
|
|
export const RULES = Object.freeze({
|
|
R1: 'not a regular blob up to 1 MiB of UTF-8 text',
|
|
R2: 'path is unmapped',
|
|
R3: 'front matter not fully parsed',
|
|
R4: 'link resolves to no file or to more than one',
|
|
R5: 'canon file refers into the playground',
|
|
R6: 'canon file refers into another universe',
|
|
R7: 'paths differ only in case',
|
|
});
|
|
|
|
export function problem(code, path, line, message = RULES[code]) {
|
|
if (!Object.hasOwn(RULES, code)) raise('library-problem-code', `unknown problem code ${code}`);
|
|
return Object.freeze({ code, path, ...(Number.isSafeInteger(line) ? { line } : {}), message });
|
|
}
|
|
|
|
// Stable order for status output and tests: path, then line, then code.
|
|
export function sortProblems(list) {
|
|
return [...list].sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1
|
|
: (a.line ?? 0) - (b.line ?? 0) || (a.code < b.code ? -1 : a.code > b.code ? 1 : 0));
|
|
}
|