repositories / dotfiles
dotfiles
bugabingas dorkfiles
owned by admin
quickshell/nuguland/test-fixtures/ui/resource-probe.mjs
Rawimport assert from 'node:assert/strict';
import Problems from '../../system-problems.js';
import { mkdirSync, readFileSync, writeFileSync, existsSync, renameSync, unlinkSync, statSync } from 'node:fs';
// Only called inside ui-test's private namespace. The real Resources.qml runs;
// journal/systemctl and terminal dispatch receive synthetic boundary doubles.
export async function runResourceProbe({ original, env, start, stop, waitFor, ipc, screenshot, snapshot, setFixture }) {
assert.equal(process.env.NUGULAND_UI_SANDBOX, '1');
const prior = readFileSync('/project/Resources.qml', 'utf8');
const promptPath = '/project/prompts/system-repair.md';
const originalPrompt = readFileSync(promptPath, 'utf8');
const bin = '/tmp/resource-probe-bin';
const stateHome = "/home/test/state '$(literal)";
const repairDirectory = `${stateHome}/nuguland/repairs`;
mkdirSync(bin);
writeFileSync('/project/Resources.qml', original);
writeFileSync('/project/resource-probe.qml', readFileSync('/project/test-fixtures/ui/resource-probe.qml', 'utf8').replace('"../.."', '"."'));
const boot = 'a'.repeat(32);
const timestamp = Date.now() - 120000;
const records = [
{__CURSOR: 's=crash', _BOOT_ID: boot, __REALTIME_TIMESTAMP: String(timestamp * 1000), MESSAGE_ID: 'fc2e22bc6ee647b6b90729ab34a250b1', _SYSTEMD_UNIT: 'systemd-coredump@0-42-0.service', COREDUMP_COMM: 'synthetic editor', COREDUMP_EXE: '/usr/bin/editor', COREDUMP_UID: '1000', COREDUMP_PID: '123', COREDUMP_SIGNAL_NAME: 'SIGSEGV'},
{__CURSOR: 's=oom', _BOOT_ID: boot, __REALTIME_TIMESTAMP: String((timestamp - 60000) * 1000), _TRANSPORT: 'kernel', MESSAGE: 'Out of memory: Killed process 456 (worker) total-vm:1234kB'}
];
records.push(
{...records[0], __CURSOR: 's=earlier', __REALTIME_TIMESTAMP: String((timestamp - 60000) * 1000), COREDUMP_PID: '100', COREDUMP_SIGNAL_NAME: 'SIGABRT'},
{...records[0], __CURSOR: 's=oldest', __REALTIME_TIMESTAMP: String((timestamp - 120000) * 1000), COREDUMP_PID: '90'},
{...records[0], __CURSOR: 's=other-app', COREDUMP_EXE: '/opt/unrelated-editor'}
);
const journalText = records.map(row => JSON.stringify(row)).join('\n');
writeFileSync('/tmp/resource-probe-journal', journalText);
writeFileSync('/tmp/resource-probe-mode', 'records');
const programs = {
journalctl: `const mode = fs.readFileSync('/tmp/resource-probe-mode', 'utf8');
if (mode === 'denied') { console.error('journal access denied'); process.exit(1); }
if (mode === 'malformed') { console.log('{broken'); process.exit(0); }
if (mode === 'empty') process.exit(1);
console.log(fs.readFileSync('/tmp/resource-probe-journal', 'utf8'));`,
systemctl: `console.log('same.service loaded failed failed synthetic service');`,
checkupdates: `console.log('fixture-package 1 -> 2');`,
pi: `process.exit(0);`,
wezterm: `fs.appendFileSync('/evidence/resource-dispatch.jsonl', JSON.stringify(process.argv.slice(2)) + '\\n');`
};
for (const [name, body] of Object.entries(programs)) {
writeFileSync(`${bin}/${name}`, `#!/usr/bin/node\nconst fs = require('node:fs');\n${body}\n`, {mode: 0o700});
}
const child = start('qs', ['--no-color', '-p', '/project/resource-probe.qml'], 'resource-probe', {...env, PATH: `${bin}:/usr/bin`, XDG_STATE_HOME: stateHome});
setFixture('/project/resource-probe.qml', '/evidence/resource-probe.log', child);
const checks = [];
async function check(label, predicate) {
const state = await waitFor(label, () => { const s = snapshot(); return predicate(s) ? s : null; });
checks.push(label);
console.log(`pass: ${label}`);
return state;
}
function promptFromArgs(args) {
assert(args.at(-1).startsWith('@' + repairDirectory + '/.request-'));
const path = args.at(-1).slice(1);
assert.equal(statSync(path).mode & 0o777, 0o600, 'private prompt snapshot');
return readFileSync(path, 'utf8');
}
{
await waitFor('production resource probe loaded', () => readFileSync('/evidence/resource-probe.log', 'utf8').includes('Configuration Loaded'));
const state = await check('production journal groups repeated crashes but separates unrelated apps and oom', s => s.incidentStatus === 'ready' && s.issues.filter(issue => issue.context).length === 3 && s.issues.some(issue => issue.id === 'updates'));
const group = state.issues.find(issue => issue.occurrences === 3);
assert(group);
const groupId = group.id;
const groupEvents = Problems.groupIncidents(Problems.parseJournal(journalText).issues).find(issue => issue.id === groupId).events;
assert.deepEqual(groupEvents.map(event => event.cursor), ['s=crash', 's=earlier', 's=oldest']);
ipc('act', 'updates');
await check('production dispatch rejects an existing update issue', s => !s.pending && s.dispatches === 0);
assert(!existsSync('/evidence/resource-dispatch.jsonl'));
const failed = state.issues.find(issue => issue.id === 'failed-services');
assert.deepEqual(failed.action.scopes, [{scope: 'system', units: ['same.service']}, {scope: 'user', units: ['same.service']}]);
writeFileSync(promptPath, 'template without a context slot');
ipc('act', 'failed-services');
await check('invalid prompt template blocks dispatch', s => !s.pending && s.agentError === 'repair prompt unavailable or invalid' && s.dispatches === 0);
writeFileSync(promptPath, originalPrompt);
// No executable in session PATH: visible failure, no detached child.
renameSync(`${bin}/pi`, `${bin}/pi-unavailable`);
ipc('act', 'failed-services');
await check('production launch preflight rejects missing pi', s => !s.pending && s.agentError.length > 0 && s.dispatches === 0);
assert(!existsSync('/evidence/resource-dispatch.jsonl'));
renameSync(`${bin}/pi-unavailable`, `${bin}/pi`);
mkdirSync(`${stateHome}/nuguland`, {recursive: true});
writeFileSync(repairDirectory, 'owned fixture obstruction');
ipc('act', 'failed-services');
await check('unusable repair directory blocks dispatch with visible feedback', s => !s.pending && s.agentError === 'repair directory unavailable or not writable' && s.dispatches === 0);
assert.equal(readFileSync(repairDirectory, 'utf8'), 'owned fixture obstruction');
assert(!existsSync('/evidence/resource-dispatch.jsonl'));
await screenshot('system-repair-directory-unavailable');
unlinkSync(repairDirectory);
ipc('act', 'failed-services');
await check('production retry dispatches one detached terminal request', s => !s.pending && s.dispatches === 1);
await waitFor('terminal boundary received argv', () => existsSync('/evidence/resource-dispatch.jsonl'));
const args = JSON.parse(readFileSync('/evidence/resource-dispatch.jsonl', 'utf8').trim());
assert.deepEqual(args.slice(0, -1), ['start', '--cwd', repairDirectory, '--', `${bin}/pi`, '--name', 'arrrgh: 2 failed services', '--']);
const initialPrompt = promptFromArgs(args);
const snapshotData = JSON.parse(initialPrompt.split('## Diagnostic context\n\n')[1]);
assert.deepEqual(snapshotData.serviceScopes, failed.action.scopes);
assert.equal(snapshotData.machine.host, 'synthetic-probe');
assert(initialPrompt.includes('Privileged, destructive'));
assert(initialPrompt.includes('Never mark resolved without verification'));
assert(initialPrompt.includes('one Markdown report per issue'));
assert(initialPrompt.includes('Choose your own diagnostic tools'));
assert(!('suggestedReadOnlyCommands' in snapshotData));
assert(statSync(repairDirectory).isDirectory());
assert.equal(statSync(repairDirectory).mode & 0o777, 0o700);
mkdirSync(`${repairDirectory}/issues`, {mode: 0o700});
writeFileSync(`${repairDirectory}/issues/existing.md`, 'existing verified report', {mode: 0o600});
renameSync(promptPath, `${promptPath}.unavailable`);
ipc('act', groupId);
await check('missing prompt refuses cached template after prior success', s => !s.pending && s.agentError === 'repair prompt unavailable or invalid' && s.dispatches === 1);
renameSync(`${promptPath}.unavailable`, promptPath);
writeFileSync(promptPath, '<!-- revised prompt -->\n' + originalPrompt);
ipc('act', groupId);
await check('production historical action dispatches the selected crash group', s => s.dispatches === 2 && s.action.id === groupId);
await waitFor('second terminal request captured', () => readFileSync('/evidence/resource-dispatch.jsonl', 'utf8').trim().split('\n').length === 2);
const crashArgs = JSON.parse(readFileSync('/evidence/resource-dispatch.jsonl', 'utf8').trim().split('\n')[1]);
assert.equal(crashArgs[2], repairDirectory, 'all issues share the stable repair cwd');
assert.equal(readFileSync(`${repairDirectory}/issues/existing.md`, 'utf8'), 'existing verified report');
const crashPrompt = promptFromArgs(crashArgs);
assert(crashPrompt.startsWith('<!-- revised prompt -->'), 'template changes apply to the next launch without restart');
const crashData = JSON.parse(crashPrompt.split('## Diagnostic context\n\n')[1]);
assert.deepEqual(crashData.issue.events, groupEvents, 'all selected occurrences, no unrelated application');
assert.equal(crashData.issue.occurrences, 3);
assert.equal(promptFromArgs(args), initialPrompt, 'later launches preserve earlier request evidence');
assert.equal(crashData.issue.context.bootId, boot);
assert.equal(crashData.issue.context.cursor, 's=crash');
assert.equal(crashData.issue.context.metadata.comm, 'synthetic editor');
assert.strictEqual(crashData.issue.historical, true);
assert.strictEqual(crashData.issue.type, 'crash');
assert(!('suggestedReadOnlyCommands' in crashData));
const many = Array.from({length: 100}, (_, i) => ({...records[0],
__CURSOR: 's=large-' + i + ';' + 'x'.repeat(480),
__REALTIME_TIMESTAMP: String((timestamp + i * 1000) * 1000),
COREDUMP_COMM: 'editor ' + '界'.repeat(140), COREDUMP_PID: String(i + 1),
COREDUMP_UNIT: 'unit-' + 'x'.repeat(150), COREDUMP_USER_UNIT: 'user-unit-' + 'y'.repeat(150)
}));
writeFileSync('/tmp/resource-probe-journal', many.map(row => JSON.stringify(row)).join('\n'));
await check('production group retains the entire 100-record window with stable identity', s => s.issues.some(issue => issue.id === groupId && issue.occurrences === 100));
writeFileSync(`${bin}/mktemp`, '#!/bin/sh\nexit 1\n', {mode: 0o700});
ipc('act', groupId);
await check('snapshot write failure blocks dispatch without dropping occurrences', s => !s.pending && s.dispatches === 2 && s.agentError === 'repair context could not be saved');
unlinkSync(`${bin}/mktemp`);
ipc('act', groupId);
await check('large grouped prompt retries through file transport', s => !s.pending && s.dispatches === 3 && s.action.id === groupId);
await waitFor('large terminal request captured', () => readFileSync('/evidence/resource-dispatch.jsonl', 'utf8').trim().split('\n').length === 3);
const largeArgs = JSON.parse(readFileSync('/evidence/resource-dispatch.jsonl', 'utf8').trim().split('\n')[2]);
const largePrompt = promptFromArgs(largeArgs);
assert(Buffer.byteLength(largePrompt, 'utf8') > 131072, 'beyond Linux per-argument size limit');
assert(largeArgs.every(arg => Buffer.byteLength(arg, 'utf8') < 131072));
const largeData = JSON.parse(largePrompt.split('## Diagnostic context\n\n')[1]);
const expectedLarge = Problems.groupIncidents(Problems.parseJournal(many.map(row => JSON.stringify(row)).join('\n')).issues)[0];
assert.deepEqual(largeData.issue.events, expectedLarge.events, 'every byte survives stdin and file transport');
writeFileSync('/tmp/resource-probe-journal', journalText);
await check('shorter journal window recomputes crash groups without hidden state', s => s.issues.filter(issue => issue.context).length === 3 && s.issues.some(issue => issue.id === groupId && issue.occurrences === 3));
await screenshot('system-grouped-production');
writeFileSync('/tmp/resource-probe-mode', 'denied');
await check('journal permission failure retains last-good incidents', s => s.incidentStatus !== 'ready' && s.issues.filter(issue => issue.context).length === 3);
writeFileSync('/tmp/resource-probe-mode', 'records');
await check('journal availability recovers without reload', s => s.incidentStatus === 'ready');
writeFileSync('/tmp/resource-probe-mode', 'malformed');
await check('malformed journal data retains last-good incidents', s => s.incidentStatus !== 'ready' && s.issues.filter(issue => issue.context).length === 3);
writeFileSync('/tmp/resource-probe-mode', 'empty');
await check('successful empty journal refresh clears stale history', s => s.incidentStatus === 'ready' && !s.issues.some(issue => issue.context));
const notificationsBeforeScreenshot = snapshot().notifications;
await screenshot('system-production-boundaries');
await check('screenshot notification completes before probe teardown', s => s.notifications > notificationsBeforeScreenshot);
writeFileSync('/evidence/resource-probe-checks.json', JSON.stringify(checks, null, 2));
}
await stop(child);
writeFileSync(promptPath, originalPrompt);
writeFileSync('/project/Resources.qml', prior);
}