@qa-ai-stlc/cli 0.6.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +43 -7
- package/dist/cli.js.map +1 -1
- package/dist/command-context.d.ts +5 -13
- package/dist/command-context.d.ts.map +1 -1
- package/dist/command-context.js.map +1 -1
- package/dist/commands/explore.d.ts +9 -28
- package/dist/commands/explore.d.ts.map +1 -1
- package/dist/commands/explore.js +19 -214
- package/dist/commands/explore.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/commands/approve.d.ts +0 -21
- package/dist/commands/approve.d.ts.map +0 -1
- package/dist/commands/approve.js +0 -39
- package/dist/commands/approve.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -16
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -67
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/scope.d.ts +0 -22
- package/dist/commands/scope.d.ts.map +0 -1
- package/dist/commands/scope.js +0 -81
- package/dist/commands/scope.js.map +0 -1
- package/dist/commands/validate.d.ts +0 -19
- package/dist/commands/validate.d.ts.map +0 -1
- package/dist/commands/validate.js +0 -32
- package/dist/commands/validate.js.map +0 -1
package/README.md
CHANGED
|
@@ -12,11 +12,14 @@ environment <name> --base-url <url> --allowlist <a,b,c>` and `qa config add iden
|
|
|
12
12
|
schema-validated entry instead of hand-editing `config.yaml`. `qa scope --from file --path <path>`
|
|
13
13
|
or `qa scope --from text --content <text> --label <label>` extracts requirements (one per
|
|
14
14
|
level-2 Markdown heading) into `artifacts/scope.json`, upserting by requirement id on a repeated
|
|
15
|
-
call. `qa
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
call. `qa cases add --path <path>` validates a test case written as JSON — it must link to at
|
|
16
|
+
least one requirement, and every linked id must actually exist in `artifacts/scope.json` — and
|
|
17
|
+
registers it under `artifacts/cases/<id>.json`. `qa approve <gate> --artifact <path>
|
|
18
|
+
--approved-by <name> [--note <text>]` hash-binds an approval to a pipeline gate (`scope`, `cases`,
|
|
19
|
+
approved in order); `qa validate` recomputes every gate's status from the approval ledger and
|
|
20
|
+
re-checks every registered case's requirement links, exiting non-zero for a reopened gate or an
|
|
21
|
+
unlinked case. Every command supports `--json` for machine-readable output and exits non-zero on
|
|
22
|
+
failure.
|
|
20
23
|
|
|
21
24
|
Part of [QA-AI-STLC](https://github.com/Klim-101/QA-AI-STLC). See the repository root for
|
|
22
25
|
license, contributing and security information.
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAwB,KAAK,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAa9F,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,2BAA2B,EAAE,aAAa,GAAG,MAAM,CAAC,GAAG;IAC3F,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAoBF;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsCvG"}
|
package/dist/cli.js
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
// Copyright The QA-AI-STLC Authors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import { parseArgs } from 'node:util';
|
|
4
|
-
import { PHASES, QaError } from '@qa-ai-stlc/core';
|
|
4
|
+
import { PHASES, QaError, runApprove, runCasesAdd, runDoctor, runScope, runValidate, } from '@qa-ai-stlc/core';
|
|
5
5
|
import { createCommandContext } from './command-context.js';
|
|
6
|
-
import { runApprove } from './commands/approve.js';
|
|
7
6
|
import { runConfigAddEnvironment, runConfigAddIdentity, } from './commands/config-add.js';
|
|
8
7
|
import { runConfigSet } from './commands/config-set.js';
|
|
9
|
-
import { runDoctor } from './commands/doctor.js';
|
|
10
8
|
import { runExplore } from './commands/explore.js';
|
|
11
9
|
import { runInit } from './commands/init.js';
|
|
12
|
-
import { runScope } from './commands/scope.js';
|
|
13
|
-
import { runValidate } from './commands/validate.js';
|
|
14
10
|
import { EXIT_FAILURE, EXIT_SUCCESS, EXIT_USAGE } from './exit-codes.js';
|
|
15
11
|
import { readPackageVersion } from './package-version.js';
|
|
16
12
|
const USAGE = `Usage: qa <command> [options]
|
|
@@ -22,8 +18,9 @@ Commands:
|
|
|
22
18
|
config set Change one testing.<type> scope decision after init
|
|
23
19
|
config add Add an environment or identity: "config add environment <name> ..." or "config add identity <name> ..."
|
|
24
20
|
scope Extract requirements into the scope artifact: "scope --from file --path <path>" or "scope --from text --content <text> --label <label>"
|
|
21
|
+
cases add Validate and register a test case: "cases add --path <path>"
|
|
25
22
|
approve Approve a pipeline gate: "approve <gate> --artifact <path> --approved-by <name>"
|
|
26
|
-
validate Recompute every gate's status; nonzero exit
|
|
23
|
+
validate Recompute every gate's status and every case's requirement links; nonzero exit on a reopened gate or an unlinked case
|
|
27
24
|
|
|
28
25
|
Global options:
|
|
29
26
|
--json Print machine-readable JSON instead of human text
|
|
@@ -57,6 +54,8 @@ export async function runCli(argv, dependencies) {
|
|
|
57
54
|
return await dispatchConfig(rest, dependencies);
|
|
58
55
|
case 'scope':
|
|
59
56
|
return await dispatchScope(rest, dependencies);
|
|
57
|
+
case 'cases':
|
|
58
|
+
return await dispatchCases(rest, dependencies);
|
|
60
59
|
case 'approve':
|
|
61
60
|
return await dispatchApprove(rest, dependencies);
|
|
62
61
|
case 'validate':
|
|
@@ -344,6 +343,31 @@ async function dispatchScope(rest, dependencies) {
|
|
|
344
343
|
printResult(context.io, json, 'scope', result, formatScopeResult(result));
|
|
345
344
|
return EXIT_SUCCESS;
|
|
346
345
|
}
|
|
346
|
+
async function dispatchCases(rest, dependencies) {
|
|
347
|
+
const [subcommand, ...subRest] = rest;
|
|
348
|
+
if (subcommand === 'add') {
|
|
349
|
+
return await dispatchCasesAdd(subRest, dependencies);
|
|
350
|
+
}
|
|
351
|
+
dependencies.io.stderr(`Unknown "qa cases" subcommand "${subcommand ?? ''}".\n\n${USAGE}`);
|
|
352
|
+
return EXIT_USAGE;
|
|
353
|
+
}
|
|
354
|
+
async function dispatchCasesAdd(rest, dependencies) {
|
|
355
|
+
const values = parseCommandArgs(rest, {
|
|
356
|
+
json: { type: 'boolean', default: false },
|
|
357
|
+
path: { type: 'string' },
|
|
358
|
+
});
|
|
359
|
+
const json = values.json === true;
|
|
360
|
+
const context = createCommandContext({
|
|
361
|
+
...dependencies,
|
|
362
|
+
projectRoot: dependencies.projectRoot ?? process.cwd(),
|
|
363
|
+
json,
|
|
364
|
+
});
|
|
365
|
+
const result = await runCasesAdd(context, {
|
|
366
|
+
...(typeof values.path === 'string' ? { path: values.path } : {}),
|
|
367
|
+
});
|
|
368
|
+
printResult(context.io, json, 'cases-add', result, formatCasesAddResult(result));
|
|
369
|
+
return EXIT_SUCCESS;
|
|
370
|
+
}
|
|
347
371
|
async function dispatchApprove(rest, dependencies) {
|
|
348
372
|
const { values, positionals } = parseArgs({
|
|
349
373
|
args: rest,
|
|
@@ -389,7 +413,7 @@ async function dispatchValidate(rest, dependencies) {
|
|
|
389
413
|
});
|
|
390
414
|
const report = await runValidate(context);
|
|
391
415
|
printResult(context.io, json, 'validate', report, formatValidateReport(report));
|
|
392
|
-
return report.reopened.length > 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
|
416
|
+
return report.reopened.length > 0 || report.unlinkedCases.length > 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
|
393
417
|
}
|
|
394
418
|
function printResult(io, json, command, data, humanLines) {
|
|
395
419
|
if (json) {
|
|
@@ -449,6 +473,9 @@ function formatScopeResult(result) {
|
|
|
449
473
|
`Wrote ${result.scopePath}: ${String(result.total)} requirement(s) (${String(result.added)} added, ${String(result.updated)} updated).`,
|
|
450
474
|
];
|
|
451
475
|
}
|
|
476
|
+
function formatCasesAddResult(result) {
|
|
477
|
+
return [`Registered ${result.casePath}: linked to ${result.requirementIds.join(', ')}.`];
|
|
478
|
+
}
|
|
452
479
|
function formatApproveResult(result) {
|
|
453
480
|
return [
|
|
454
481
|
`Approved "${result.gate}": ${result.state.gates[result.gate].status}.`,
|
|
@@ -462,6 +489,15 @@ function formatValidateReport(report) {
|
|
|
462
489
|
return `[${status}] ${phase}${reopened}`;
|
|
463
490
|
});
|
|
464
491
|
lines.push(`Current phase: ${report.state.currentPhase}.`);
|
|
492
|
+
if (report.unlinkedCases.length === 0) {
|
|
493
|
+
lines.push('No unlinked cases.');
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
lines.push(`${String(report.unlinkedCases.length)} unlinked case(s):`);
|
|
497
|
+
for (const unlinkedCase of report.unlinkedCases) {
|
|
498
|
+
lines.push(` ${unlinkedCase.casePath}: ${unlinkedCase.unlinkedRequirementIds.join(', ')}`);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
465
501
|
return lines;
|
|
466
502
|
}
|
|
467
503
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,13 @@
|
|
|
1
|
-
import { type BrowserLauncher, type Clock, type FileSystem, type HttpClient, type Logger, type ProcessRunner } from '@qa-ai-stlc/core';
|
|
1
|
+
import { type BrowserLauncher, type Clock, type EngineContext, type FileSystem, type HttpClient, type Logger, type ProcessRunner } from '@qa-ai-stlc/core';
|
|
2
2
|
import type { CliIO } from './cli-io.js';
|
|
3
3
|
/**
|
|
4
|
-
* Everything a command needs
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Everything a command needs: an `EngineContext` (packages/core) plus the CLI-only concerns of
|
|
5
|
+
* printing output and the `--json` flag. `runCli` builds one context per invocation from the real
|
|
6
|
+
* Node adapters; tests build one from fakes.
|
|
7
7
|
*/
|
|
8
|
-
export interface CommandContext {
|
|
9
|
-
readonly projectRoot: string;
|
|
8
|
+
export interface CommandContext extends EngineContext {
|
|
10
9
|
readonly io: CliIO;
|
|
11
10
|
readonly json: boolean;
|
|
12
|
-
readonly fs: FileSystem;
|
|
13
|
-
readonly clock: Clock;
|
|
14
|
-
readonly logger: Logger;
|
|
15
|
-
readonly processRunner: ProcessRunner;
|
|
16
|
-
readonly httpClient: HttpClient;
|
|
17
|
-
readonly browserLauncher: BrowserLauncher;
|
|
18
|
-
readonly env: Readonly<Record<string, string | undefined>>;
|
|
19
11
|
}
|
|
20
12
|
export interface CreateCommandContextOptions {
|
|
21
13
|
readonly projectRoot: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-context.d.ts","sourceRoot":"","sources":["../src/command-context.ts"],"names":[],"mappings":"AAGA,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,MAAM,EACX,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"command-context.d.ts","sourceRoot":"","sources":["../src/command-context.ts"],"names":[],"mappings":"AAGA,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,MAAM,EACX,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;IAC3C,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CAC7D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,cAAc,CAazF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-context.js","sourceRoot":"","sources":["../src/command-context.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,sCAAsC;AAEtC,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,yBAAyB,EACzB,WAAW,
|
|
1
|
+
{"version":3,"file":"command-context.js","sourceRoot":"","sources":["../src/command-context.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,sCAAsC;AAEtC,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,yBAAyB,EACzB,WAAW,GAQZ,MAAM,kBAAkB,CAAC;AA0B1B,MAAM,UAAU,oBAAoB,CAAC,OAAoC;IACvE,OAAO;QACL,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;QAC3B,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,cAAc;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,WAAW;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,UAAU;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,iBAAiB;QACzD,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,eAAe;QACjD,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,yBAAyB;QACrE,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;KAChC,CAAC;AACJ,CAAC"}
|
|
@@ -1,35 +1,16 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ExploreOptions as ExploreOperationOptions, type ExploreReport } from '@qa-ai-stlc/explorer';
|
|
2
2
|
import type { CommandContext } from '../command-context.js';
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
readonly cdpEndpointUrl?: string;
|
|
7
|
-
readonly policy?: string;
|
|
8
|
-
readonly static?: boolean;
|
|
9
|
-
/** A single URL to run pick mode against instead of crawling. */
|
|
3
|
+
export type { ExploreReport } from '@qa-ai-stlc/explorer';
|
|
4
|
+
export interface ExploreOptions extends ExploreOperationOptions {
|
|
5
|
+
/** A single URL to run pick mode against instead of crawling. Not exposed over MCP. */
|
|
10
6
|
readonly pick?: string;
|
|
11
|
-
readonly maxPages?: number;
|
|
12
|
-
/** Re-checks the stored registry's candidates live instead of building a new one. */
|
|
13
|
-
readonly verify?: boolean;
|
|
14
|
-
}
|
|
15
|
-
export interface ExploreReport {
|
|
16
|
-
readonly mode: 'explore' | 'verify';
|
|
17
|
-
readonly registryPath: string;
|
|
18
|
-
readonly elementCount: number;
|
|
19
|
-
readonly added: number;
|
|
20
|
-
readonly removed: number;
|
|
21
|
-
readonly degraded: readonly DegradedSelectorElement[];
|
|
22
|
-
readonly missingLocatorCount: number;
|
|
23
|
-
readonly blockedRequestCount: number;
|
|
24
7
|
}
|
|
25
8
|
/**
|
|
26
|
-
* `qa explore`:
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* the live page it was found on and fails (`degraded` non-empty) when one no longer resolves as
|
|
32
|
-
* well as it did when last recorded — the signal a stale selector (e.g. a renamed test ID) needs.
|
|
9
|
+
* `qa explore`: delegates to the shared `@qa-ai-stlc/explorer` operation for crawling, static
|
|
10
|
+
* analysis and `--verify` (also reachable over MCP as `qa_explore`, P2-05). `--pick <url>` stays
|
|
11
|
+
* CLI-only: it opens a headed browser for a human to click through, which an agent cannot drive
|
|
12
|
+
* over MCP's stdio transport, and shares only the registry/locator-module persistence tail
|
|
13
|
+
* (`persistExploreResult`) with the shared operation.
|
|
33
14
|
*/
|
|
34
15
|
export declare function runExplore(context: CommandContext, options?: ExploreOptions): Promise<ExploreReport>;
|
|
35
16
|
//# sourceMappingURL=explore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explore.d.ts","sourceRoot":"","sources":["../../src/commands/explore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"explore.d.ts","sourceRoot":"","sources":["../../src/commands/explore.ts"],"names":[],"mappings":"AAIA,OAAO,EAUL,KAAK,cAAc,IAAI,uBAAuB,EAC9C,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,cAAe,SAAQ,uBAAuB;IAC7D,uFAAuF;IACvF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAgCD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAiBxB"}
|
package/dist/commands/explore.js
CHANGED
|
@@ -1,116 +1,12 @@
|
|
|
1
1
|
// Copyright The QA-AI-STLC Authors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { ManifestStore,
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { readPackageVersion } from '../package-version.js';
|
|
3
|
+
import { ManifestStore, QaStore, loadConfig } from '@qa-ai-stlc/core';
|
|
4
|
+
import { capturePickModeElements, finalizeManualSelectorEntries, injectPickModeOverlay, persistExploreResult, resolveIdentity, resolvePolicy, resolveStorageState, runExplore as runExploreOperation, waitForPickModeCompletion, } from '@qa-ai-stlc/explorer';
|
|
5
|
+
import { SelectorRegistrySchema } from '@qa-ai-stlc/schemas';
|
|
7
6
|
const REGISTRY_PATH = 'selectors/registry.json';
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
// its templates are plain HTML, the same literal-attribute shape analyzeStaticSource looks for in
|
|
12
|
-
// any of the three, and the demo app (the only fixture this command is validated against) is
|
|
13
|
-
// server-rendered EJS.
|
|
14
|
-
const STATIC_SOURCE_EXTENSIONS = ['.tsx', '.jsx', '.ts', '.js', '.vue', '.html', '.ejs'];
|
|
15
|
-
function resolvePolicy(config, given) {
|
|
16
|
-
if (given === undefined) {
|
|
17
|
-
return config.selectors.policy;
|
|
18
|
-
}
|
|
19
|
-
const result = SelectorPolicySchema.safeParse(given);
|
|
20
|
-
if (!result.success) {
|
|
21
|
-
throw new QaError('EXPLORE_POLICY_INVALID', `"${given}" is not a known selector policy`, {
|
|
22
|
-
remediation: `Use one of: ${SelectorPolicySchema.options.join(', ')}.`,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
return result.data;
|
|
26
|
-
}
|
|
27
|
-
function resolveEnvironment(config, name) {
|
|
28
|
-
const names = Object.keys(config.environments);
|
|
29
|
-
if (name !== undefined) {
|
|
30
|
-
const environment = config.environments[name];
|
|
31
|
-
if (environment === undefined) {
|
|
32
|
-
throw new QaError('EXPLORE_ENVIRONMENT_UNKNOWN', `No environment named "${name}" in config.yaml`, {
|
|
33
|
-
remediation: `Use one of: ${names.join(', ')}.`,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
return { name, config: environment };
|
|
37
|
-
}
|
|
38
|
-
const [onlyEntry] = Object.entries(config.environments);
|
|
39
|
-
if (names.length === 1 && onlyEntry !== undefined) {
|
|
40
|
-
const [onlyName, onlyEnvironment] = onlyEntry;
|
|
41
|
-
return { name: onlyName, config: onlyEnvironment };
|
|
42
|
-
}
|
|
43
|
-
throw new QaError('EXPLORE_ENVIRONMENT_AMBIGUOUS', names.length === 0
|
|
44
|
-
? 'config.yaml defines no environments'
|
|
45
|
-
: 'No --environment given and config.yaml defines more than one', {
|
|
46
|
-
remediation: names.length === 0
|
|
47
|
-
? 'Add an environment to config.yaml.'
|
|
48
|
-
: `Pass --environment, one of: ${names.join(', ')}.`,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
function resolveIdentity(context, config, options) {
|
|
52
|
-
if (options.identity === undefined) {
|
|
53
|
-
return undefined;
|
|
54
|
-
}
|
|
55
|
-
const identityConfig = config.identities[options.identity];
|
|
56
|
-
if (identityConfig === undefined) {
|
|
57
|
-
throw new QaError('EXPLORE_IDENTITY_UNKNOWN', `No identity named "${options.identity}" in config.yaml`, {
|
|
58
|
-
remediation: `Use one of: ${Object.keys(config.identities).join(', ')}.`,
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
return {
|
|
62
|
-
config: identityConfig,
|
|
63
|
-
env: context.env,
|
|
64
|
-
...(options.cdpEndpointUrl !== undefined ? { cdpEndpointUrl: options.cdpEndpointUrl } : {}),
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
async function readStaticSourceFiles(fs, projectRoot, sourcePath) {
|
|
68
|
-
const absoluteSourceDir = resolveRelativePath(projectRoot, sourcePath);
|
|
69
|
-
const absolutePaths = (await fs.listFiles(absoluteSourceDir)).filter((path) => STATIC_SOURCE_EXTENSIONS.some((extension) => path.endsWith(extension)));
|
|
70
|
-
return Promise.all(absolutePaths.map(async (absolutePath) => ({
|
|
71
|
-
filePath: toRelativePath(projectRoot, absolutePath),
|
|
72
|
-
content: await fs.readFile(absolutePath),
|
|
73
|
-
})));
|
|
74
|
-
}
|
|
75
|
-
async function runCrawlAndBuild(context, config, options) {
|
|
76
|
-
const environment = resolveEnvironment(config, options.environment);
|
|
77
|
-
const identity = resolveIdentity(context, config, options);
|
|
78
|
-
const policy = resolvePolicy(config, options.policy);
|
|
79
|
-
const crawlResult = await crawl({
|
|
80
|
-
startUrl: environment.config.baseUrl,
|
|
81
|
-
allowlist: environment.config.allowlist,
|
|
82
|
-
browserLauncher: context.browserLauncher,
|
|
83
|
-
...(identity !== undefined ? { identity } : {}),
|
|
84
|
-
...(options.maxPages !== undefined ? { maxPages: options.maxPages } : {}),
|
|
85
|
-
});
|
|
86
|
-
const urls = crawlResult.routeMap.routes.map((route) => route.url);
|
|
87
|
-
const { pageModelSet, blockedRequestCount: analyzeBlocked } = await analyzePages({
|
|
88
|
-
urls,
|
|
89
|
-
browserLauncher: context.browserLauncher,
|
|
90
|
-
...(identity !== undefined ? { identity } : {}),
|
|
91
|
-
});
|
|
92
|
-
const { registry, blockedRequestCount: buildBlocked } = await buildSelectorRegistry({
|
|
93
|
-
pageModelSet,
|
|
94
|
-
browserLauncher: context.browserLauncher,
|
|
95
|
-
...(identity !== undefined ? { identity } : {}),
|
|
96
|
-
policy,
|
|
97
|
-
});
|
|
98
|
-
const elements = [...registry.elements];
|
|
99
|
-
if (options.static === true) {
|
|
100
|
-
if (config.source === undefined) {
|
|
101
|
-
throw new QaError('EXPLORE_STATIC_SOURCE_MISSING', '--static was given but config.yaml has no source.path', {
|
|
102
|
-
remediation: 'Set source.path in config.yaml to the application checkout to scan.',
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
const files = await readStaticSourceFiles(context.fs, context.projectRoot, config.source.path);
|
|
106
|
-
elements.push(...analyzeStaticSource({ files, clock: context.clock }).elements);
|
|
107
|
-
}
|
|
108
|
-
return {
|
|
109
|
-
elements,
|
|
110
|
-
blockedRequestCount: crawlResult.blockedRequestCount + analyzeBlocked + buildBlocked,
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
async function runPickModeSession(context, config, options) {
|
|
7
|
+
async function runPickModeSession(context, options) {
|
|
8
|
+
const store = new QaStore({ projectRoot: context.projectRoot, fs: context.fs });
|
|
9
|
+
const config = await loadConfig(store);
|
|
114
10
|
const identity = resolveIdentity(context, config, options);
|
|
115
11
|
const policy = resolvePolicy(config, options.policy);
|
|
116
12
|
const storageState = await resolveStorageState(context.browserLauncher, identity);
|
|
@@ -132,117 +28,26 @@ async function runPickModeSession(context, config, options) {
|
|
|
132
28
|
await browser.close();
|
|
133
29
|
}
|
|
134
30
|
}
|
|
135
|
-
async function runVerify(context, store, config, options) {
|
|
136
|
-
const exists = await store.pathExists(REGISTRY_PATH);
|
|
137
|
-
if (!exists) {
|
|
138
|
-
throw new QaError('EXPLORE_NO_REGISTRY', 'No selector registry found to verify', {
|
|
139
|
-
remediation: 'Run "qa explore" first to build a registry.',
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
const stored = await store.readJson(REGISTRY_PATH, SelectorRegistrySchema);
|
|
143
|
-
const identity = resolveIdentity(context, config, options);
|
|
144
|
-
const storageState = await resolveStorageState(context.browserLauncher, identity);
|
|
145
|
-
const checkable = stored.elements.filter((element) => element.deprecatedAt === undefined &&
|
|
146
|
-
element.pageUrl !== undefined &&
|
|
147
|
-
element.locatorCandidates.length > 0);
|
|
148
|
-
const elementsByPageUrl = new Map();
|
|
149
|
-
for (const element of checkable) {
|
|
150
|
-
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style -- filtered above
|
|
151
|
-
const pageUrl = element.pageUrl;
|
|
152
|
-
const group = elementsByPageUrl.get(pageUrl);
|
|
153
|
-
if (group === undefined) {
|
|
154
|
-
elementsByPageUrl.set(pageUrl, [element]);
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
group.push(element);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
const degraded = [];
|
|
161
|
-
const browser = await context.browserLauncher.launch();
|
|
162
|
-
try {
|
|
163
|
-
const browserContext = await browser.newContext(storageState === undefined ? {} : { storageState });
|
|
164
|
-
const page = await browserContext.newPage();
|
|
165
|
-
for (const [pageUrl, elements] of elementsByPageUrl) {
|
|
166
|
-
await page.goto(pageUrl);
|
|
167
|
-
for (const element of elements) {
|
|
168
|
-
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style -- filtered above
|
|
169
|
-
const primary = element.locatorCandidates[0];
|
|
170
|
-
const currentScore = await scoreLocatorStability(page, primary);
|
|
171
|
-
if (currentScore < element.stabilityScore) {
|
|
172
|
-
degraded.push({
|
|
173
|
-
elementId: element.elementId,
|
|
174
|
-
previousScore: element.stabilityScore,
|
|
175
|
-
currentScore,
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
finally {
|
|
182
|
-
await browser.close();
|
|
183
|
-
}
|
|
184
|
-
const missingLocatorCount = generateLocatorModule(stored, { generatorVersion: readPackageVersion() })
|
|
185
|
-
.missingLocators.length;
|
|
186
|
-
return {
|
|
187
|
-
mode: 'verify',
|
|
188
|
-
registryPath: REGISTRY_PATH,
|
|
189
|
-
elementCount: stored.elements.length,
|
|
190
|
-
added: 0,
|
|
191
|
-
removed: 0,
|
|
192
|
-
degraded,
|
|
193
|
-
missingLocatorCount,
|
|
194
|
-
blockedRequestCount: 0,
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
31
|
/**
|
|
198
|
-
* `qa explore`:
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
* the live page it was found on and fails (`degraded` non-empty) when one no longer resolves as
|
|
204
|
-
* well as it did when last recorded — the signal a stale selector (e.g. a renamed test ID) needs.
|
|
32
|
+
* `qa explore`: delegates to the shared `@qa-ai-stlc/explorer` operation for crawling, static
|
|
33
|
+
* analysis and `--verify` (also reachable over MCP as `qa_explore`, P2-05). `--pick <url>` stays
|
|
34
|
+
* CLI-only: it opens a headed browser for a human to click through, which an agent cannot drive
|
|
35
|
+
* over MCP's stdio transport, and shares only the registry/locator-module persistence tail
|
|
36
|
+
* (`persistExploreResult`) with the shared operation.
|
|
205
37
|
*/
|
|
206
38
|
export async function runExplore(context, options = {}) {
|
|
39
|
+
if (options.pick === undefined) {
|
|
40
|
+
return runExploreOperation(context, options);
|
|
41
|
+
}
|
|
207
42
|
const store = new QaStore({ projectRoot: context.projectRoot, fs: context.fs });
|
|
208
43
|
const manifest = new ManifestStore({ store, clock: context.clock });
|
|
209
|
-
const config = await loadConfig(store);
|
|
210
|
-
if (options.verify === true) {
|
|
211
|
-
return runVerify(context, store, config, options);
|
|
212
|
-
}
|
|
213
44
|
const previous = (await store.pathExists(REGISTRY_PATH))
|
|
214
45
|
? await store.readJson(REGISTRY_PATH, SelectorRegistrySchema)
|
|
215
46
|
: undefined;
|
|
216
|
-
const { elements, blockedRequestCount } =
|
|
217
|
-
|
|
218
|
-
:
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
const merged = previous === undefined ? fresh : mergeSelectorRegistry(previous, fresh, generatedAt);
|
|
222
|
-
await store.writeJson(REGISTRY_PATH, merged);
|
|
223
|
-
await manifest.register(REGISTRY_PATH, JSON.stringify(merged));
|
|
224
|
-
const moduleResult = generateLocatorModule(merged, { generatorVersion: readPackageVersion() });
|
|
225
|
-
await context.fs.mkdir(resolveRelativePath(context.projectRoot, 'tests/qa'));
|
|
226
|
-
await context.fs.writeFile(resolveRelativePath(context.projectRoot, LOCATOR_MODULE_PATH), moduleResult.source);
|
|
227
|
-
await manifest.register(LOCATOR_MODULE_PATH, moduleResult.source);
|
|
228
|
-
const missingTestIdReport = buildMissingTestIdReport(merged);
|
|
229
|
-
await store.writeJson(MISSING_TEST_ID_REPORT_PATH, missingTestIdReport);
|
|
230
|
-
await manifest.register(MISSING_TEST_ID_REPORT_PATH, JSON.stringify(missingTestIdReport));
|
|
231
|
-
// Diffed against the fresh, unmerged registry, not the merged one: a merge always keeps an
|
|
232
|
-
// element the fresh run no longer found (deprecating it in place) rather than dropping it, so
|
|
233
|
-
// diffing the merged result would never show a "removed" element at all.
|
|
234
|
-
const diff = previous === undefined
|
|
235
|
-
? { added: fresh.elements, removed: [], degraded: [] }
|
|
236
|
-
: diffSelectorRegistry(previous, fresh);
|
|
237
|
-
return {
|
|
238
|
-
mode: 'explore',
|
|
239
|
-
registryPath: REGISTRY_PATH,
|
|
240
|
-
elementCount: merged.elements.length,
|
|
241
|
-
added: diff.added.length,
|
|
242
|
-
removed: diff.removed.length,
|
|
243
|
-
degraded: diff.degraded,
|
|
244
|
-
missingLocatorCount: moduleResult.missingLocators.length,
|
|
245
|
-
blockedRequestCount,
|
|
246
|
-
};
|
|
47
|
+
const { elements, blockedRequestCount } = await runPickModeSession(context, {
|
|
48
|
+
...options,
|
|
49
|
+
pick: options.pick,
|
|
50
|
+
});
|
|
51
|
+
return persistExploreResult(context, store, manifest, previous, elements, blockedRequestCount);
|
|
247
52
|
}
|
|
248
53
|
//# sourceMappingURL=explore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explore.js","sourceRoot":"","sources":["../../src/commands/explore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"explore.js","sourceRoot":"","sources":["../../src/commands/explore.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,sCAAsC;AAEtC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,sCAAsC;AAEtC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qa-ai-stlc/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "The qa command: init, doctor and every deterministic engine operation exposed for CI and humans.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
"clean": "node ../../scripts/clean-dir.mjs dist"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@qa-ai-stlc/core": "0.
|
|
35
|
-
"@qa-ai-stlc/explorer": "0.
|
|
36
|
-
"@qa-ai-stlc/schemas": "0.
|
|
34
|
+
"@qa-ai-stlc/core": "0.9.0",
|
|
35
|
+
"@qa-ai-stlc/explorer": "0.7.0",
|
|
36
|
+
"@qa-ai-stlc/schemas": "0.8.0",
|
|
37
37
|
"yaml": "2.9.1"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { type PhaseName, type PipelineState } from '@qa-ai-stlc/schemas';
|
|
2
|
-
import type { CommandContext } from '../command-context.js';
|
|
3
|
-
export interface ApproveOptions {
|
|
4
|
-
readonly gate: string;
|
|
5
|
-
readonly artifactPath: string;
|
|
6
|
-
readonly approvedBy: string;
|
|
7
|
-
readonly note?: string;
|
|
8
|
-
}
|
|
9
|
-
export interface ApproveResult {
|
|
10
|
-
readonly gate: PhaseName;
|
|
11
|
-
readonly state: PipelineState;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* `qa approve <gate> --artifact <path> --approved-by <name>` (P2-01, ADR-003): hashes the
|
|
15
|
-
* artifact's current content and records the approval, advancing the pipeline to the next phase
|
|
16
|
-
* when `gate` is the current one. Validates `gate` and `--artifact` against their schemas here so
|
|
17
|
-
* `GateStateMachine` (packages/core) never sees a malformed value; phase-order and
|
|
18
|
-
* missing-artifact errors come from there unchanged.
|
|
19
|
-
*/
|
|
20
|
-
export declare function runApprove(context: CommandContext, options: ApproveOptions): Promise<ApproveResult>;
|
|
21
|
-
//# sourceMappingURL=approve.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"AAWA,OAAO,EAAuC,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE9G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAgCzG"}
|
package/dist/commands/approve.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
// Copyright The QA-AI-STLC Authors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { ApprovalLedgerStore, GateStateMachine, PHASES, PipelineStateStore, QaError, QaStore, } from '@qa-ai-stlc/core';
|
|
4
|
-
import { PhaseNameSchema, RelativePathSchema } from '@qa-ai-stlc/schemas';
|
|
5
|
-
import { z } from 'zod';
|
|
6
|
-
/**
|
|
7
|
-
* `qa approve <gate> --artifact <path> --approved-by <name>` (P2-01, ADR-003): hashes the
|
|
8
|
-
* artifact's current content and records the approval, advancing the pipeline to the next phase
|
|
9
|
-
* when `gate` is the current one. Validates `gate` and `--artifact` against their schemas here so
|
|
10
|
-
* `GateStateMachine` (packages/core) never sees a malformed value; phase-order and
|
|
11
|
-
* missing-artifact errors come from there unchanged.
|
|
12
|
-
*/
|
|
13
|
-
export async function runApprove(context, options) {
|
|
14
|
-
const gate = PhaseNameSchema.safeParse(options.gate);
|
|
15
|
-
if (!gate.success) {
|
|
16
|
-
throw new QaError('APPROVE_GATE_UNKNOWN', `"${options.gate}" is not a known gate`, {
|
|
17
|
-
remediation: `Use one of: ${PHASES.join(', ')}.`,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
const artifactPath = RelativePathSchema.safeParse(options.artifactPath);
|
|
21
|
-
if (!artifactPath.success) {
|
|
22
|
-
throw new QaError('APPROVE_ARTIFACT_PATH_INVALID', `"${options.artifactPath}" is not a valid artifact path:\n${z.prettifyError(artifactPath.error)}`, { remediation: 'Use a project-relative, forward-slash path with no ".." segments.' });
|
|
23
|
-
}
|
|
24
|
-
const store = new QaStore({ projectRoot: context.projectRoot, fs: context.fs });
|
|
25
|
-
const gates = new GateStateMachine({
|
|
26
|
-
store,
|
|
27
|
-
stateStore: new PipelineStateStore({ store }),
|
|
28
|
-
ledger: new ApprovalLedgerStore({ store }),
|
|
29
|
-
clock: context.clock,
|
|
30
|
-
});
|
|
31
|
-
const state = await gates.approve({
|
|
32
|
-
gate: gate.data,
|
|
33
|
-
artifactPath: artifactPath.data,
|
|
34
|
-
approvedBy: options.approvedBy,
|
|
35
|
-
...(options.note !== undefined ? { note: options.note } : {}),
|
|
36
|
-
});
|
|
37
|
-
return { gate: gate.data, state };
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=approve.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,sCAAsC;AAEtC,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,EACN,kBAAkB,EAClB,OAAO,EACP,OAAO,GACR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAsC,MAAM,qBAAqB,CAAC;AAC9G,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAuB,EAAE,OAAuB;IAC/E,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,OAAO,CAAC,sBAAsB,EAAE,IAAI,OAAO,CAAC,IAAI,uBAAuB,EAAE;YACjF,WAAW,EAAE,eAAe,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;SACjD,CAAC,CAAC;IACL,CAAC;IACD,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACxE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,OAAO,CACf,+BAA+B,EAC/B,IAAI,OAAO,CAAC,YAAY,oCAAoC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EACjG,EAAE,WAAW,EAAE,mEAAmE,EAAE,CACrF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC;QACjC,KAAK;QACL,UAAU,EAAE,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC;QAC7C,MAAM,EAAE,IAAI,mBAAmB,CAAC,EAAE,KAAK,EAAE,CAAC;QAC1C,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,YAAY,EAAE,YAAY,CAAC,IAAI;QAC/B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { type DoctorCheckResult } from '@qa-ai-stlc/core';
|
|
2
|
-
import type { CommandContext } from '../command-context.js';
|
|
3
|
-
export interface DoctorOptions {
|
|
4
|
-
readonly fix?: boolean;
|
|
5
|
-
}
|
|
6
|
-
export interface DoctorReport {
|
|
7
|
-
readonly ok: boolean;
|
|
8
|
-
readonly checks: readonly DoctorCheckResult[];
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* `qa doctor`: Node version, browser binaries, and, once a `config.yaml` exists, every
|
|
12
|
-
* identity's secret and every environment's reachability (ADR-004). `--fix` installs missing
|
|
13
|
-
* browsers through Playwright's own installer before reporting their final state.
|
|
14
|
-
*/
|
|
15
|
-
export declare function runDoctor(context: CommandContext, options?: DoctorOptions): Promise<DoctorReport>;
|
|
16
|
-
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,EAYL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC/C;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAe3G"}
|
package/dist/commands/doctor.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
// Copyright The QA-AI-STLC Authors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { QaError, QaStore, SUPPORTED_BROWSERS, checkApiContractReadable, checkBaseUrlReachable, checkBrowserInstalled, checkIdentitiesPresent, checkNodeVersion, checkSourcePathReadable, installBrowsers, loadConfig, } from '@qa-ai-stlc/core';
|
|
4
|
-
/**
|
|
5
|
-
* `qa doctor`: Node version, browser binaries, and, once a `config.yaml` exists, every
|
|
6
|
-
* identity's secret and every environment's reachability (ADR-004). `--fix` installs missing
|
|
7
|
-
* browsers through Playwright's own installer before reporting their final state.
|
|
8
|
-
*/
|
|
9
|
-
export async function runDoctor(context, options = {}) {
|
|
10
|
-
const store = new QaStore({ projectRoot: context.projectRoot, fs: context.fs });
|
|
11
|
-
let checks = [checkNodeVersion()];
|
|
12
|
-
for (const browser of SUPPORTED_BROWSERS) {
|
|
13
|
-
checks.push(await checkBrowserInstalled(context.fs, browser));
|
|
14
|
-
}
|
|
15
|
-
if (options.fix === true) {
|
|
16
|
-
checks = await fixMissingBrowsers(context, checks);
|
|
17
|
-
}
|
|
18
|
-
checks = [...checks, ...(await runConfigChecks(context, store))];
|
|
19
|
-
return { ok: checks.every((check) => check.status === 'pass'), checks };
|
|
20
|
-
}
|
|
21
|
-
async function fixMissingBrowsers(context, checks) {
|
|
22
|
-
const missing = SUPPORTED_BROWSERS.filter((browser) => checks.some((check) => check.name === `browser:${browser}` && check.status === 'fail'));
|
|
23
|
-
if (missing.length === 0) {
|
|
24
|
-
return [...checks];
|
|
25
|
-
}
|
|
26
|
-
const installResult = await installBrowsers(context.processRunner, missing);
|
|
27
|
-
const rechecked = new Map(await Promise.all(missing.map(async (browser) => [
|
|
28
|
-
`browser:${browser}`,
|
|
29
|
-
await checkBrowserInstalled(context.fs, browser),
|
|
30
|
-
])));
|
|
31
|
-
return [...checks.map((check) => rechecked.get(check.name) ?? check), installResult];
|
|
32
|
-
}
|
|
33
|
-
async function runConfigChecks(context, store) {
|
|
34
|
-
let config;
|
|
35
|
-
try {
|
|
36
|
-
config = await loadConfig(store);
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
if (error instanceof QaError) {
|
|
40
|
-
// Every QaError `loadConfig` throws (CONFIG_MISSING, CONFIG_MALFORMED, CONFIG_INVALID)
|
|
41
|
-
// sets a remediation; the cast documents that invariant instead of a defensive branch no
|
|
42
|
-
// config-loader failure can actually exercise. A `!` assertion reads more naturally here,
|
|
43
|
-
// but AGENTS.md 5.2 restricts those to tests.
|
|
44
|
-
return [
|
|
45
|
-
{
|
|
46
|
-
name: 'config',
|
|
47
|
-
status: 'fail',
|
|
48
|
-
message: error.message,
|
|
49
|
-
// eslint-disable-next-line @typescript-eslint/non-nullable-type-assertion-style
|
|
50
|
-
remediation: error.remediation,
|
|
51
|
-
},
|
|
52
|
-
];
|
|
53
|
-
}
|
|
54
|
-
throw error;
|
|
55
|
-
}
|
|
56
|
-
const identityChecks = checkIdentitiesPresent(config.identities, context.env);
|
|
57
|
-
const environmentChecks = await Promise.all(Object.entries(config.environments).map(async ([name, environment]) => {
|
|
58
|
-
const result = await checkBaseUrlReachable(environment.baseUrl, { httpClient: context.httpClient });
|
|
59
|
-
return { ...result, name: `environment:${name}` };
|
|
60
|
-
}));
|
|
61
|
-
const sourcePathChecks = await checkSourcePathReadable(context.fs, context.projectRoot, config.source);
|
|
62
|
-
const apiContractChecks = await checkApiContractReadable(context.fs, context.projectRoot, config.api, {
|
|
63
|
-
httpClient: context.httpClient,
|
|
64
|
-
});
|
|
65
|
-
return [...identityChecks, ...environmentChecks, ...sourcePathChecks, ...apiContractChecks];
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=doctor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/scope.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { CommandContext } from '../command-context.js';
|
|
2
|
-
export interface ScopeOptions {
|
|
3
|
-
readonly from: string;
|
|
4
|
-
readonly path?: string;
|
|
5
|
-
readonly content?: string;
|
|
6
|
-
readonly label?: string;
|
|
7
|
-
}
|
|
8
|
-
export interface ScopeResult {
|
|
9
|
-
readonly scopePath: string;
|
|
10
|
-
readonly added: number;
|
|
11
|
-
readonly updated: number;
|
|
12
|
-
readonly total: number;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* `qa scope --from file --path <path>` or `qa scope --from text --content <text> --label <label>`
|
|
16
|
-
* (development plan section 2.4, 2.7 step 4): deterministically extracts requirements from a
|
|
17
|
-
* local source — the framework never fetches requirements from a tracker (AGENTS.md 2.4) — and
|
|
18
|
-
* upserts them into `artifacts/scope.json` by id, so a repeated call updates rather than
|
|
19
|
-
* duplicates. The scope gate itself (`qa approve scope`, P2-01) is a separate, later step.
|
|
20
|
-
*/
|
|
21
|
-
export declare function runScope(context: CommandContext, options: ScopeOptions): Promise<ScopeResult>;
|
|
22
|
-
//# sourceMappingURL=scope.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/commands/scope.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAuBnG"}
|
package/dist/commands/scope.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
// Copyright The QA-AI-STLC Authors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { ManifestStore, QaError, QaStore, assertRelativePath, extractRequirements, mergeRequirements, resolveRelativePath, } from '@qa-ai-stlc/core';
|
|
4
|
-
import { SCHEMA_VERSION, ScopeSchema, } from '@qa-ai-stlc/schemas';
|
|
5
|
-
const SCOPE_PATH = 'artifacts/scope.json';
|
|
6
|
-
/**
|
|
7
|
-
* `qa scope --from file --path <path>` or `qa scope --from text --content <text> --label <label>`
|
|
8
|
-
* (development plan section 2.4, 2.7 step 4): deterministically extracts requirements from a
|
|
9
|
-
* local source — the framework never fetches requirements from a tracker (AGENTS.md 2.4) — and
|
|
10
|
-
* upserts them into `artifacts/scope.json` by id, so a repeated call updates rather than
|
|
11
|
-
* duplicates. The scope gate itself (`qa approve scope`, P2-01) is a separate, later step.
|
|
12
|
-
*/
|
|
13
|
-
export async function runScope(context, options) {
|
|
14
|
-
const { content, source } = await resolveSource(context, options);
|
|
15
|
-
const incoming = extractRequirements(content, source);
|
|
16
|
-
const store = new QaStore({ projectRoot: context.projectRoot, fs: context.fs });
|
|
17
|
-
const existing = await loadScope(store, context);
|
|
18
|
-
const merge = mergeRequirements(existing.requirements, incoming);
|
|
19
|
-
const scope = {
|
|
20
|
-
schemaVersion: SCHEMA_VERSION,
|
|
21
|
-
generatedAt: context.clock.now().toISOString(),
|
|
22
|
-
requirements: [...merge.requirements],
|
|
23
|
-
};
|
|
24
|
-
const serialized = JSON.stringify(scope);
|
|
25
|
-
await store.writeJson(SCOPE_PATH, scope);
|
|
26
|
-
await new ManifestStore({ store, clock: context.clock }).register(SCOPE_PATH, serialized);
|
|
27
|
-
return {
|
|
28
|
-
scopePath: SCOPE_PATH,
|
|
29
|
-
added: merge.added,
|
|
30
|
-
updated: merge.updated,
|
|
31
|
-
total: scope.requirements.length,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
async function loadScope(store, context) {
|
|
35
|
-
const exists = await store.pathExists(SCOPE_PATH);
|
|
36
|
-
if (!exists) {
|
|
37
|
-
return {
|
|
38
|
-
schemaVersion: SCHEMA_VERSION,
|
|
39
|
-
generatedAt: context.clock.now().toISOString(),
|
|
40
|
-
requirements: [],
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
return store.readJson(SCOPE_PATH, ScopeSchema);
|
|
44
|
-
}
|
|
45
|
-
async function resolveSource(context, options) {
|
|
46
|
-
if (options.from === 'file') {
|
|
47
|
-
return resolveFileSource(context, options);
|
|
48
|
-
}
|
|
49
|
-
if (options.from === 'text') {
|
|
50
|
-
return resolveTextSource(options);
|
|
51
|
-
}
|
|
52
|
-
throw new QaError('SCOPE_FROM_INVALID', `"${options.from}" is not a valid --from value`, {
|
|
53
|
-
remediation: 'Use one of: file, text.',
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
async function resolveFileSource(context, options) {
|
|
57
|
-
if (options.path === undefined) {
|
|
58
|
-
throw new QaError('SCOPE_USAGE', 'Usage: qa scope --from file --path <path>', {
|
|
59
|
-
remediation: 'Example: qa scope --from file --path docs/requirements.md',
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
const path = assertRelativePath(options.path);
|
|
63
|
-
const absolutePath = resolveRelativePath(context.projectRoot, path);
|
|
64
|
-
const exists = await context.fs.pathExists(absolutePath);
|
|
65
|
-
if (!exists) {
|
|
66
|
-
throw new QaError('SCOPE_FILE_NOT_FOUND', `"${path}" does not exist`, {
|
|
67
|
-
remediation: 'Check the --path value points at a real, readable file relative to the project root.',
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
const content = await context.fs.readFile(absolutePath);
|
|
71
|
-
return { content, source: { kind: 'file', path } };
|
|
72
|
-
}
|
|
73
|
-
function resolveTextSource(options) {
|
|
74
|
-
if (options.content === undefined || options.label === undefined) {
|
|
75
|
-
throw new QaError('SCOPE_USAGE', 'Usage: qa scope --from text --content <text> --label <label>', {
|
|
76
|
-
remediation: 'Example: qa scope --from text --content "## Item\\nbody" --label "operator input"',
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
return { content: options.content, source: { kind: 'text', label: options.label } };
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=scope.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/commands/scope.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,sCAAsC;AAEtC,OAAO,EACL,aAAa,EACb,OAAO,EACP,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,WAAW,GAIZ,MAAM,qBAAqB,CAAC;AAG7B,MAAM,UAAU,GAAiB,sBAAsB,CAAC;AAgBxD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAuB,EAAE,OAAqB;IAC3E,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEtD,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAEjE,MAAM,KAAK,GAAU;QACnB,aAAa,EAAE,cAAc;QAC7B,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QAC9C,YAAY,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;KACtC,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAE1F,OAAO;QACL,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM;KACjC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,KAAc,EAAE,OAAuB;IAC9D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,aAAa,EAAE,cAAc;YAC7B,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;YAC9C,YAAY,EAAE,EAAE;SACjB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAAuB,EACvB,OAAqB;IAErB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,IAAI,OAAO,CAAC,oBAAoB,EAAE,IAAI,OAAO,CAAC,IAAI,+BAA+B,EAAE;QACvF,WAAW,EAAE,yBAAyB;KACvC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAAuB,EACvB,OAAqB;IAErB,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE,2CAA2C,EAAE;YAC5E,WAAW,EAAE,2DAA2D;SACzE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,OAAO,CAAC,sBAAsB,EAAE,IAAI,IAAI,kBAAkB,EAAE;YACpE,WAAW,EAAE,sFAAsF;SACpG,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACxD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAqB;IAC9C,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACjE,MAAM,IAAI,OAAO,CAAC,aAAa,EAAE,8DAA8D,EAAE;YAC/F,WAAW,EAAE,mFAAmF;SACjG,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACtF,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { PhaseName, PipelineState } from '@qa-ai-stlc/schemas';
|
|
2
|
-
import type { CommandContext } from '../command-context.js';
|
|
3
|
-
export interface ValidateReport {
|
|
4
|
-
readonly state: PipelineState;
|
|
5
|
-
/**
|
|
6
|
-
* Phases with a recorded approval whose artifact no longer matches it — real tampering or an
|
|
7
|
-
* edit after approval, distinct from a phase that was simply never approved yet (also reported
|
|
8
|
-
* as `open`, but not here, and not a failure).
|
|
9
|
-
*/
|
|
10
|
-
readonly reopened: readonly PhaseName[];
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* `qa validate` (P2-01, ADR-003): recomputes every gate's status from the approval ledger and
|
|
14
|
-
* each approved artifact's current content, persists the refreshed `state.json`, and reports
|
|
15
|
-
* which gates specifically reopened since their last approval — the CLI's exit code is nonzero
|
|
16
|
-
* only for those, not for a phase still awaiting its first approval.
|
|
17
|
-
*/
|
|
18
|
-
export declare function runValidate(context: CommandContext): Promise<ValidateReport>;
|
|
19
|
-
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;CACzC;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAuBlF"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
// Copyright The QA-AI-STLC Authors
|
|
2
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { ApprovalLedgerStore, GateStateMachine, PHASES, PipelineStateStore, QaStore } from '@qa-ai-stlc/core';
|
|
4
|
-
/**
|
|
5
|
-
* `qa validate` (P2-01, ADR-003): recomputes every gate's status from the approval ledger and
|
|
6
|
-
* each approved artifact's current content, persists the refreshed `state.json`, and reports
|
|
7
|
-
* which gates specifically reopened since their last approval — the CLI's exit code is nonzero
|
|
8
|
-
* only for those, not for a phase still awaiting its first approval.
|
|
9
|
-
*/
|
|
10
|
-
export async function runValidate(context) {
|
|
11
|
-
const store = new QaStore({ projectRoot: context.projectRoot, fs: context.fs });
|
|
12
|
-
const ledger = new ApprovalLedgerStore({ store });
|
|
13
|
-
const gates = new GateStateMachine({
|
|
14
|
-
store,
|
|
15
|
-
stateStore: new PipelineStateStore({ store }),
|
|
16
|
-
ledger,
|
|
17
|
-
clock: context.clock,
|
|
18
|
-
});
|
|
19
|
-
const state = await gates.validate();
|
|
20
|
-
const reopened = [];
|
|
21
|
-
for (const phase of PHASES) {
|
|
22
|
-
if (state.gates[phase].status !== 'open') {
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
const approval = await ledger.latestForGate(phase);
|
|
26
|
-
if (approval !== undefined) {
|
|
27
|
-
reopened.push(phase);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return { state, reopened };
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=validate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,sCAAsC;AAEtC,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAc9G;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAuB;IACvD,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC;QACjC,KAAK;QACL,UAAU,EAAE,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC;QAC7C,MAAM;QACN,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACzC,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC"}
|