update agents skill design
This commit is contained in:
53
scripts/owliver-baseline.mjs
Normal file
53
scripts/owliver-baseline.mjs
Normal file
@@ -0,0 +1,53 @@
|
||||
/**
|
||||
* Writes the Owliver behaviour baseline.
|
||||
*
|
||||
* node scripts/owliver-baseline.mjs # report drift, write nothing
|
||||
* node scripts/owliver-baseline.mjs --write # (re)generate the snapshot
|
||||
*
|
||||
* The snapshot is the existing product's behaviour, recorded before the Agent
|
||||
* layer was built and asserted by `skill-check.mjs` on every run afterwards.
|
||||
*
|
||||
* Regenerating is a deliberate act with a reason attached. A baseline rewritten
|
||||
* to make a red check go green records the regression instead of catching it,
|
||||
* which is worse than having no baseline at all — it converts a caught bug into
|
||||
* a documented one.
|
||||
*/
|
||||
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
||||
import { dirname } from 'node:path';
|
||||
import { createServer } from 'vite';
|
||||
import { BASELINE_PATH, captureBaseline } from './owliver-capture.mjs';
|
||||
|
||||
const ROOT = process.cwd();
|
||||
|
||||
const server = await createServer({
|
||||
root: ROOT,
|
||||
server: { middlewareMode: true },
|
||||
appType: 'custom',
|
||||
logLevel: 'error',
|
||||
});
|
||||
|
||||
const captured = await captureBaseline(server);
|
||||
await server.close();
|
||||
|
||||
const serialized = `${JSON.stringify(captured, null, 2)}\n`;
|
||||
|
||||
if (process.argv.includes('--write')) {
|
||||
mkdirSync(dirname(BASELINE_PATH), { recursive: true });
|
||||
writeFileSync(BASELINE_PATH, serialized);
|
||||
const pages = Object.keys(captured.contexts).length;
|
||||
console.log(`Baseline written — ${pages} contexts, ${captured.skillIds.length} skills, ${Object.keys(captured.routes).length} routes.`);
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
if (!existsSync(BASELINE_PATH)) {
|
||||
console.error('No baseline recorded. Run `node scripts/owliver-baseline.mjs --write`.');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (readFileSync(BASELINE_PATH, 'utf8') === serialized) {
|
||||
console.log('Owliver behaviour matches the baseline.');
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
console.error('Owliver behaviour has DRIFTED from the baseline. Run `npm test` for the per-page detail.');
|
||||
process.exit(1);
|
||||
Reference in New Issue
Block a user