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).
55 lines
3.1 KiB
JavaScript
55 lines
3.1 KiB
JavaScript
// A repo the test builds in her layout's shape: spaces and capitals in folder names, a .canvas file
|
|
// and an unmapped top-level note. Bodies are made up; MARKER stands in for her text.
|
|
import { mkdtempSync, rmSync, mkdirSync, writeFileSync, readFileSync, symlinkSync, chmodSync } from 'node:fs';
|
|
import { tmpdir } from 'node:os';
|
|
import { dirname, join } from 'node:path';
|
|
import { execFileSync } from 'node:child_process';
|
|
import { fileURLToPath } from 'node:url';
|
|
import { checkMapping } from '../src/mapping.mjs';
|
|
|
|
export const MARKER = 'MARKER-7f3a-HER-TEXT';
|
|
export const FIXTURES = fileURLToPath(new URL('./fixtures/', import.meta.url));
|
|
export const mappingEntry = () => JSON.parse(readFileSync(join(FIXTURES, 'mapping.json'), 'utf8'));
|
|
export const mapping = (change = e => e) => checkMapping(change(mappingEntry()));
|
|
|
|
export const git = (repo, ...args) => execFileSync('git', ['-c', 'user.name=fixture', '-c', '[email protected]',
|
|
'-c', 'commit.gpgsign=false', '-c', 'core.hooksPath=/dev/null', '-C', repo, ...args], { encoding: 'utf8' }).trim();
|
|
|
|
export const BASE = {
|
|
'Book One/Characters/Mara Vell.md': [
|
|
'---', 'type: character', 'name: Mara Vell', 'appears_in: "[[Book One/Chapters/Chapter 01]]"',
|
|
'relationships:', ' - "[[Tomas]]"', ' - The Ferryman', '---', `Grey eyes. ${MARKER}`, ''].join('\n'),
|
|
'Book One/Characters/Tomas.md': ['---', 'type: character', 'name: Tomas', 'appears_in: ["[[Chapter 01]]"]', '---', MARKER, ''].join('\n'),
|
|
'Book One/Chapters/Chapter 01.md': [
|
|
'# One', `${MARKER} [[Mara Vell]] met [[Book One/Places/Harbor Town|the harbor]].`,
|
|
'See [[../Places/Harbor Town#Docks]] and [[books/Book One/Characters/Tomas]].',
|
|
'```', '[[Not A Link]]', '```', 'Inline `[[Not Either]]` and [a note](Notes.md).', ''].join('\n'),
|
|
'Book One/Places/Harbor Town.md': ['---', 'type: place', '---', `Salt. ${MARKER}`, ''].join('\n'),
|
|
'Book One/Playground/What If.md': ['---', 'name: What If', '---', `${MARKER} [[Mara Vell]]`, ''].join('\n'),
|
|
'Book One/Board.canvas': '{"nodes":[]}\n',
|
|
'Book One/Playground/Sketch.canvas': '{"nodes":[]}\n',
|
|
'Inbox Note.md': `${MARKER}\n`,
|
|
'Second World/Chapters/01.md': `# Elsewhere ${MARKER}\n`,
|
|
};
|
|
|
|
// repo({files, extra}) writes files (path -> text, or { link } / { mode, text }), commits, and
|
|
// returns { repo, commit }.
|
|
export function repo(t, files = BASE) {
|
|
const root = mkdtempSync(join(tmpdir(), 'library-'));
|
|
t.after(() => rmSync(root, { recursive: true, force: true }));
|
|
const dir = join(root, 'books');
|
|
mkdirSync(dir);
|
|
git(dir, 'init', '-q', '-b', 'main');
|
|
for (const [path, value] of Object.entries(files)) {
|
|
const file = join(dir, path);
|
|
mkdirSync(dirname(file), { recursive: true });
|
|
if (typeof value === 'object' && value.link) symlinkSync(value.link, file);
|
|
else if (typeof value === 'object' && value.bytes) writeFileSync(file, value.bytes);
|
|
else writeFileSync(file, typeof value === 'object' ? value.text : value);
|
|
if (typeof value === 'object' && value.mode) chmodSync(file, value.mode);
|
|
}
|
|
git(dir, 'add', '-A');
|
|
git(dir, 'commit', '-qm', 'fixture');
|
|
return { root, repo: dir, commit: git(dir, 'rev-parse', 'HEAD') };
|
|
}
|