Accelerate rules-first feedback and integrate native Strongholds

Apply user priority: save/recovery/privacy/custody assurance after all rules. Add quick types/lint, concise failure-preserving reporter, verbose mode, actual empty-execution guard, signal handling and focused verify name selection; compact canonical context/handoffs without mass moves. Tooling15, six negative CLI, named/empty source-bound smokes,206 doc links; same15-case278B vs2455B,2.35s vs2.36s no compute speedclaim. Native Advanced Ix/CHOAM47-card Stronghold profile: actual firstMentat/HMS/sixeffects,18native/four legalpolicies,five genuine2..6games3129actions/no rejection, human390px LAUDR2WNv14 bank2/personal1 plan and real battle. Earlier162/6513 checks before assurance amendment; finalquick25/build/guide pass. No new preservation/privacy audit or public/deployed/full-mode claim.
This commit is contained in:
Quintine committed 2026-10-02 09:30:52 +10:00
1 parent af6d27095c
commit e9830b6ced
27 files changed
+2339 -194

No files matched your search

+18 -2
View File
@@ -9,6 +9,7 @@ async function main() {
options: {
out: { type: 'string' },
focus: { type: 'string', multiple: true },
name: { type: 'string' },
games: { type: 'string' },
seed: { type: 'string' },
help: { type: 'boolean' },
@@ -16,7 +17,7 @@ async function main() {
});
if (values.help) {
console.log(
'Usage: node --import tsx tools/verify.ts --out /tmp/new-run check [build] [integration]\nOr: --out /tmp/new-run focused --focus fragment [--focus fragment]\nOr: --out /tmp/new-run base-games --games 20 --seed 20260913\nLogs and source-bound report.json stay outside the checkout. Commands stop on failure; changed source invalidates success.',
'Usage: node --import tsx tools/verify.ts --out /tmp/new-run check [build] [integration]\nOr: --out /tmp/new-run focused --focus fragment [--focus fragment] [--name REGEX]\nOr: --out /tmp/new-run base-games --games 20 --seed 20260913\nLogs and source-bound report.json stay outside the checkout. Commands stop on failure; changed source invalidates success.',
);
return;
}
@@ -24,6 +25,12 @@ async function main() {
throw new Error('Provide --out and verification steps; see --help.');
if (values.focus?.some((fragment) => !fragment || fragment.startsWith('-')))
throw new Error('--focus accepts filename fragments, not runner options.');
if (values.name !== undefined) {
if (!values.name) throw new Error('--name must not be empty.');
new RegExp(values.name);
if (!positionals.includes('focused'))
throw new Error('--name requires the focused step.');
}
const root = fileURLToPath(new URL('../', import.meta.url));
const steps: VerificationStep[] = positionals.map((name) => {
if (['check', 'build', 'integration'].includes(name))
@@ -33,7 +40,16 @@ async function main() {
args: ['run', name === 'integration' ? 'test:integration' : name],
};
if (name === 'focused' && values.focus?.length)
return { name, command: 'npm', args: ['test', '--', ...values.focus] };
return {
name,
command: 'npm',
args: [
'test',
'--',
...values.focus,
...(values.name !== undefined ? ['--name', values.name] : []),
],
};
if (name === 'base-games') {
const games = Number(values.games),
seed = Number(values.seed);