Add public CLI-first acceptance gate

This commit is contained in:
Michel Paulissen 2026-07-03 23:12:37 +02:00
parent afaf918973
commit 4b323224b2
6 changed files with 143 additions and 7 deletions

View file

@ -33,6 +33,7 @@ function expect(source, name, pattern) {
const criteria = read("cli_acceptance_criteria.md");
const cli = read("crates/disasmer-cli/src/main.rs");
const coordinator = read("crates/disasmer-coordinator/src/service.rs");
const cliFirstAcceptance = read("scripts/acceptance-cli-first.sh");
const outputModeSmoke = read("scripts/cli-output-mode-smoke.js");
const errorExitSmoke = read("scripts/cli-error-exit-smoke.js");
@ -71,10 +72,64 @@ for (const line of lines) {
const openCriteria = lines.filter((line) => /\*\*Open(?::| \()/.test(line));
assert.deepStrictEqual(
openCriteria,
[
"- [ ] **Open:** Every criterion in this document is validated end-to-end or with integration-style coverage, preferably against a realistic NixOS deployment that can pretend to be live hosted infrastructure.",
],
"only the full CLI-first verification gate should remain Open while command/API facts are Partial"
[],
"CLI-first criteria should not leave Open items once the non-e2e gate exists; remaining unfinished facts stay Partial"
);
expect(
criteria,
"CLI-first non-e2e gate wording",
/scripts\/acceptance-cli-first\.sh[\s\S]*final public-release e2e remains intentionally excluded/
);
expect(
cliFirstAcceptance,
"CLI-first acceptance report",
/node scripts\/acceptance-report\.js cli-first/
);
expect(
cliFirstAcceptance,
"CLI-first acceptance refuses final e2e",
/DISASMER_PUBLIC_RELEASE_DRYRUN_E2E[\s\S]*does not run final public-release e2e/
);
expect(
cliFirstAcceptance,
"CLI-first acceptance refuses final evidence",
/DISASMER_PUBLIC_RELEASE_DRYRUN_FINAL[\s\S]*does not run final public-release evidence/
);
expect(
cliFirstAcceptance,
"CLI-first acceptance composes public API contracts",
/node scripts\/cli-output-mode-smoke\.js[\s\S]*node scripts\/cli-login-smoke\.js[\s\S]*node scripts\/cli-error-exit-smoke\.js[\s\S]*node scripts\/cli-browser-login-flow-smoke\.js/
);
expect(
cliFirstAcceptance,
"CLI-first acceptance composes service boundary checks",
/node scripts\/local-services-smoke\.js[\s\S]*node scripts\/cli-local-run-smoke\.js/
);
expect(
cliFirstAcceptance,
"CLI-first acceptance composes self-hosted checks",
/node scripts\/self-hosted-coordinator-smoke\.js/
);
expect(
cliFirstAcceptance,
"CLI-first acceptance composes debug and artifact checks",
/node scripts\/vscode-f5-smoke\.js[\s\S]*node scripts\/artifact-download-smoke\.js[\s\S]*node scripts\/artifact-export-smoke\.js/
);
expect(
cliFirstAcceptance,
"CLI-first acceptance composes DAP checks",
/node scripts\/dap-smoke\.js/
);
expect(
cliFirstAcceptance,
"CLI-first acceptance can include private hosted gate",
/DISASMER_CLI_FIRST_INCLUDE_PRIVATE[\s\S]*scripts\/acceptance-private\.sh/
);
assert.doesNotMatch(
cliFirstAcceptance,
/node scripts\/public-release-dryrun-e2e\.js|node scripts\/public-release-dryrun-final-evidence\.js/,
"CLI-first non-e2e gate must not invoke final public release e2e or final evidence verifier"
);
for (const [name, pattern] of [