@sun-asterisk/sungen 3.2.24-beta.1 → 3.2.24-beta.3
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/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +22 -16
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/capability.d.ts.map +1 -1
- package/dist/cli/commands/capability.js +11 -12
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/challenge.d.ts.map +1 -1
- package/dist/cli/commands/challenge.js +2 -10
- package/dist/cli/commands/challenge.js.map +1 -1
- package/dist/cli/commands/depth-lint.d.ts.map +1 -1
- package/dist/cli/commands/depth-lint.js +2 -12
- package/dist/cli/commands/depth-lint.js.map +1 -1
- package/dist/cli/commands/gate.d.ts.map +1 -1
- package/dist/cli/commands/gate.js +2 -47
- package/dist/cli/commands/gate.js.map +1 -1
- package/dist/cli/commands/journey.d.ts.map +1 -1
- package/dist/cli/commands/journey.js +2 -12
- package/dist/cli/commands/journey.js.map +1 -1
- package/dist/cli/commands/manifest.d.ts.map +1 -1
- package/dist/cli/commands/manifest.js +2 -10
- package/dist/cli/commands/manifest.js.map +1 -1
- package/dist/cli/commands/next.d.ts +14 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +130 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/index.js +34 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/resolve-unit.d.ts +22 -0
- package/dist/cli/resolve-unit.d.ts.map +1 -0
- package/dist/cli/resolve-unit.js +101 -0
- package/dist/cli/resolve-unit.js.map +1 -0
- package/dist/exporters/feature-parser.d.ts +4 -3
- package/dist/exporters/feature-parser.d.ts.map +1 -1
- package/dist/exporters/feature-parser.js +10 -4
- package/dist/exporters/feature-parser.js.map +1 -1
- package/dist/harness/audit.d.ts +9 -1
- package/dist/harness/audit.d.ts.map +1 -1
- package/dist/harness/audit.js +92 -6
- package/dist/harness/audit.js.map +1 -1
- package/dist/harness/capability-plan.d.ts +12 -1
- package/dist/harness/capability-plan.d.ts.map +1 -1
- package/dist/harness/capability-plan.js +16 -2
- package/dist/harness/capability-plan.js.map +1 -1
- package/dist/harness/capability.d.ts +12 -0
- package/dist/harness/capability.d.ts.map +1 -1
- package/dist/harness/capability.js +16 -0
- package/dist/harness/capability.js.map +1 -1
- package/dist/harness/catalog/drivers.yaml +5 -0
- package/dist/harness/flow-contract.d.ts +75 -0
- package/dist/harness/flow-contract.d.ts.map +1 -1
- package/dist/harness/flow-contract.js +122 -1
- package/dist/harness/flow-contract.js.map +1 -1
- package/dist/harness/next-step.d.ts +40 -0
- package/dist/harness/next-step.d.ts.map +1 -0
- package/dist/harness/next-step.js +242 -0
- package/dist/harness/next-step.js.map +1 -0
- package/dist/harness/spec-coverage.d.ts +20 -0
- package/dist/harness/spec-coverage.d.ts.map +1 -1
- package/dist/harness/spec-coverage.js +35 -0
- package/dist/harness/spec-coverage.js.map +1 -1
- package/dist/harness/viewpoint-ledger.d.ts +4 -0
- package/dist/harness/viewpoint-ledger.d.ts.map +1 -1
- package/dist/harness/viewpoint-ledger.js +42 -0
- package/dist/harness/viewpoint-ledger.js.map +1 -1
- package/dist/orchestrator/templates/ai-src/commands/create-test.md +27 -8
- package/dist/orchestrator/templates/ai-src/commands/run-test.md +6 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +36 -0
- package/package.json +3 -3
- package/src/cli/commands/audit.ts +22 -14
- package/src/cli/commands/capability.ts +11 -10
- package/src/cli/commands/challenge.ts +2 -8
- package/src/cli/commands/depth-lint.ts +2 -10
- package/src/cli/commands/gate.ts +2 -10
- package/src/cli/commands/journey.ts +2 -10
- package/src/cli/commands/manifest.ts +2 -8
- package/src/cli/commands/next.ts +96 -0
- package/src/cli/index.ts +31 -0
- package/src/cli/resolve-unit.ts +72 -0
- package/src/exporters/feature-parser.ts +10 -4
- package/src/harness/audit.ts +95 -11
- package/src/harness/capability-plan.ts +23 -3
- package/src/harness/capability.ts +22 -0
- package/src/harness/catalog/drivers.yaml +5 -0
- package/src/harness/flow-contract.ts +158 -1
- package/src/harness/next-step.ts +237 -0
- package/src/harness/spec-coverage.ts +38 -0
- package/src/harness/viewpoint-ledger.ts +42 -0
- package/src/orchestrator/templates/ai-src/commands/create-test.md +27 -8
- package/src/orchestrator/templates/ai-src/commands/run-test.md +6 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +36 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.registerNextCommand = registerNextCommand;
|
|
37
|
+
exports.printHandBack = printHandBack;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const next_step_1 = require("../../harness/next-step");
|
|
41
|
+
const resolve_unit_1 = require("../resolve-unit");
|
|
42
|
+
/** Every unit the project holds, so `sungen next` with no argument still answers. */
|
|
43
|
+
function allUnits(cwd) {
|
|
44
|
+
const out = [];
|
|
45
|
+
for (const [dir, kind] of [['screens', 'screen'], ['flows', 'flow'], ['api', 'api']]) {
|
|
46
|
+
const base = path.join(cwd, 'qa', dir);
|
|
47
|
+
try {
|
|
48
|
+
for (const e of fs.readdirSync(base, { withFileTypes: true })) {
|
|
49
|
+
if (e.isDirectory())
|
|
50
|
+
out.push({ name: e.name, kind, dir: path.join(base, e.name) });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch { /* the project may not use this unit kind */ }
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
function render(s) {
|
|
58
|
+
const L = console.log;
|
|
59
|
+
L('');
|
|
60
|
+
L(`━━━ Next steps: ${s.unit} (${s.kind}) ━━━`);
|
|
61
|
+
L('');
|
|
62
|
+
const held = [
|
|
63
|
+
s.hasSpec && 'spec', s.hasViewpoint && 'viewpoint',
|
|
64
|
+
s.kind === 'flow' && s.hasContract && (s.hasFlowInventory ? 'contract+inventory' : 'contract (phases only)'),
|
|
65
|
+
s.scenarioCount > 0 && `${s.scenarioCount} scenarios`,
|
|
66
|
+
s.hasSelectors && (s.selectorsArePlaceholder ? 'selectors (placeholder)' : 'selectors'),
|
|
67
|
+
s.compiled && 'compiled', s.hasResults && 'results', s.hasDeliverable && 'deliverable',
|
|
68
|
+
].filter(Boolean);
|
|
69
|
+
L(` state: ${held.length ? held.join(' · ') : '(nothing yet)'}`);
|
|
70
|
+
if (s.audit)
|
|
71
|
+
L(` audit: ${s.audit.overall}/10 [${s.audit.gateStatus}] · ${s.audit.findings.length} finding(s)`);
|
|
72
|
+
L('');
|
|
73
|
+
for (const st of s.steps) {
|
|
74
|
+
const mark = st.kind === 'blocked' ? '⛔' : st.kind === 'optional' ? '○' : '→';
|
|
75
|
+
L(` ${mark} ${st.command}`);
|
|
76
|
+
L(` ${st.because}`);
|
|
77
|
+
}
|
|
78
|
+
L('');
|
|
79
|
+
}
|
|
80
|
+
function registerNextCommand(program) {
|
|
81
|
+
program
|
|
82
|
+
.command('next [unit]')
|
|
83
|
+
.description('What to do next for a unit (or every unit), derived from the project state')
|
|
84
|
+
.option('--json', 'Machine-readable output')
|
|
85
|
+
.action((unit, o) => {
|
|
86
|
+
try {
|
|
87
|
+
const cwd = process.cwd();
|
|
88
|
+
let states;
|
|
89
|
+
if (unit) {
|
|
90
|
+
const resolved = (0, resolve_unit_1.resolveUnit)(unit, cwd);
|
|
91
|
+
if (!resolved) {
|
|
92
|
+
console.error(`Error: no unit named "${unit}" under qa/screens, qa/flows or qa/api.`);
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
states = [(0, next_step_1.readUnitState)(cwd, resolved.dir, unit, resolved.kind)];
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const units = allUnits(cwd);
|
|
99
|
+
if (units.length === 0) {
|
|
100
|
+
console.error('Error: this project holds no units yet — run `sungen add --screen <name> --path <url>` or `sungen add-flow --flow <name> --path <url>`.');
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
// A name in two places is ambiguous; report it rather than answering for one of them.
|
|
104
|
+
states = units.map((u) => {
|
|
105
|
+
if ((0, resolve_unit_1.resolveUnitCandidates)(u.name, cwd).length > 1)
|
|
106
|
+
throw new resolve_unit_1.AmbiguousUnitError(u.name, (0, resolve_unit_1.resolveUnitCandidates)(u.name, cwd));
|
|
107
|
+
return (0, next_step_1.readUnitState)(cwd, u.dir, u.name, u.kind);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
if (o.json) {
|
|
111
|
+
console.log(JSON.stringify(states.length === 1 ? states[0] : states, null, 2));
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
for (const s of states)
|
|
115
|
+
render(s);
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
console.error(`Error: ${e instanceof Error ? e.message : e}`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* The one-line hand-back every command prints last. Kept deliberately small: it points at the
|
|
125
|
+
* resolver instead of restating a next step, so no command can drift from the real state.
|
|
126
|
+
*/
|
|
127
|
+
function printHandBack(unit) {
|
|
128
|
+
console.log(`Next: sungen next${unit ? ` ${unit}` : ''}`);
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=next.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../../../src/cli/commands/next.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -28,6 +28,7 @@ const feedback_1 = require("./commands/feedback");
|
|
|
28
28
|
const qa_feedback_1 = require("./commands/qa-feedback");
|
|
29
29
|
const script_check_1 = require("./commands/script-check");
|
|
30
30
|
const trace_1 = require("./commands/trace");
|
|
31
|
+
const next_1 = require("./commands/next");
|
|
31
32
|
const challenge_1 = require("./commands/challenge");
|
|
32
33
|
const blindspot_1 = require("./commands/blindspot");
|
|
33
34
|
const capability_1 = require("./commands/capability");
|
|
@@ -70,6 +71,7 @@ async function main() {
|
|
|
70
71
|
(0, qa_feedback_1.registerQaFeedbackCommand)(program);
|
|
71
72
|
(0, script_check_1.registerScriptCheckCommand)(program);
|
|
72
73
|
(0, trace_1.registerTraceCommand)(program);
|
|
74
|
+
(0, next_1.registerNextCommand)(program);
|
|
73
75
|
(0, challenge_1.registerChallengeCommand)(program);
|
|
74
76
|
(0, blindspot_1.registerBlindspotCommand)(program);
|
|
75
77
|
(0, capability_1.registerCapabilityCommand)(program);
|
|
@@ -90,6 +92,38 @@ async function main() {
|
|
|
90
92
|
// build — `update` is the only thing that refreshes them, and nothing used to
|
|
91
93
|
// say so (stderr, so `--json` output stays parseable).
|
|
92
94
|
program.hook('preAction', () => { (0, assets_drift_1.warnAssetsDrift)(process.cwd()); });
|
|
95
|
+
// #597 — the hand-back, once, for EVERY command. It used to be hardcoded per command and only
|
|
96
|
+
// two of twenty-nine printed one, so a run that finished anywhere else finished in silence:
|
|
97
|
+
// `capability add` ended with a blank line and the session stopped mid-workflow. Adding a
|
|
98
|
+
// footer to the other twenty-seven would repeat the mistake in bulk.
|
|
99
|
+
//
|
|
100
|
+
// It hangs off `process.on('exit')` rather than a postAction hook because several commands
|
|
101
|
+
// exit with a MEANINGFUL code (`depth-lint` returns 2 when there are deepen candidates) and
|
|
102
|
+
// `process.exit` skips commander's hooks entirely — a postAction version printed for `audit`
|
|
103
|
+
// and silently not for `depth-lint`, which is the same class of gap all over again.
|
|
104
|
+
//
|
|
105
|
+
// It points at `sungen next` instead of restating a step, so it can never drift from the real
|
|
106
|
+
// project state. Skipped on a hard error (code 1): there the error message is the actionable
|
|
107
|
+
// thing, and burying it under a footer helps nobody. `--json` keeps stdout parseable.
|
|
108
|
+
let handBack = null;
|
|
109
|
+
program.hook('preAction', (_thisCommand, actionCommand) => {
|
|
110
|
+
if (actionCommand.name() === 'next')
|
|
111
|
+
return; // `next` IS the answer
|
|
112
|
+
const opts = actionCommand.opts();
|
|
113
|
+
const unit = [opts.screen, opts.flow, opts.area].find((v) => typeof v === 'string' && v)
|
|
114
|
+
?? (typeof actionCommand.args?.[0] === 'string' ? actionCommand.args[0] : undefined);
|
|
115
|
+
handBack = { unit: unit, json: opts.json === true };
|
|
116
|
+
});
|
|
117
|
+
process.on('exit', (code) => {
|
|
118
|
+
if (!handBack || code === 1)
|
|
119
|
+
return;
|
|
120
|
+
const line = `\nNext: sungen next${handBack.unit ? ` ${handBack.unit}` : ''}`;
|
|
121
|
+
// stderr under --json so the hand-back never lands in the parsed payload.
|
|
122
|
+
if (handBack.json)
|
|
123
|
+
process.stderr.write(`${line}\n`);
|
|
124
|
+
else
|
|
125
|
+
process.stdout.write(`${line}\n`);
|
|
126
|
+
});
|
|
93
127
|
await program.parseAsync(process.argv);
|
|
94
128
|
}
|
|
95
129
|
main().catch((error) => {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type UnitKind = 'screen' | 'flow' | 'api';
|
|
2
|
+
export interface ResolvedUnit {
|
|
3
|
+
dir: string;
|
|
4
|
+
kind: UnitKind;
|
|
5
|
+
/** Catalog unit id relative to qa/: `<screen>` · `flows/<f>` · `api/<a>` · `api/flows/<f>`. */
|
|
6
|
+
unitId: string;
|
|
7
|
+
}
|
|
8
|
+
/** Every unit directory this name matches, in `screens, flows, api` order. */
|
|
9
|
+
export declare function resolveUnitCandidates(name: string, cwd?: string): ResolvedUnit[];
|
|
10
|
+
export declare class AmbiguousUnitError extends Error {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly candidates: ResolvedUnit[];
|
|
13
|
+
constructor(name: string, candidates: ResolvedUnit[]);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The single unit this name means. Throws `AmbiguousUnitError` when several match; returns null
|
|
17
|
+
* when none do (callers report "unit not found" with their own guidance).
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveUnit(name: string, cwd?: string): ResolvedUnit | null;
|
|
20
|
+
/** Back-compat shape for the callers that only want the directory. */
|
|
21
|
+
export declare function findUnitDir(name: string, cwd?: string): string | null;
|
|
22
|
+
//# sourceMappingURL=resolve-unit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-unit.d.ts","sourceRoot":"","sources":["../../src/cli/resolve-unit.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAQjD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAC;IACf,+FAA+F;IAC/F,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,YAAY,EAAE,CAQvF;AAED,qBAAa,kBAAmB,SAAQ,KAAK;aACf,IAAI,EAAE,MAAM;aAAkB,UAAU,EAAE,YAAY,EAAE;gBAAxD,IAAI,EAAE,MAAM,EAAkB,UAAU,EAAE,YAAY,EAAE;CAUrF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,YAAY,GAAG,IAAI,CAIlF;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAgB,GAAG,MAAM,GAAG,IAAI,CAE5E"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.AmbiguousUnitError = void 0;
|
|
37
|
+
exports.resolveUnitCandidates = resolveUnitCandidates;
|
|
38
|
+
exports.resolveUnit = resolveUnit;
|
|
39
|
+
exports.findUnitDir = findUnitDir;
|
|
40
|
+
/**
|
|
41
|
+
* One resolver for "which unit does this name mean?", shared by every command.
|
|
42
|
+
*
|
|
43
|
+
* Seven commands each had their own copy, and all seven searched `qa/screens/` FIRST. So a
|
|
44
|
+
* directory at `qa/screens/<name>/` SHADOWED a real flow of the same name — and the failure was
|
|
45
|
+
* silent, not loud: `sungen audit` resolved to the phantom screen, found no feature file, and
|
|
46
|
+
* reported 0 scenarios with no contract and no scored axis. A run that dropped the entire quality
|
|
47
|
+
* gate looked like a suite with nothing in it.
|
|
48
|
+
*
|
|
49
|
+
* That shape is not hypothetical: the mock driver resolves its catalog from
|
|
50
|
+
* `qa/screens/<unit>/mock/mocks.yaml` only, so making a mock work for a flow means creating
|
|
51
|
+
* exactly that phantom directory (#597).
|
|
52
|
+
*
|
|
53
|
+
* A name resolving to two units is ambiguous, and ambiguity is reported rather than resolved by
|
|
54
|
+
* search order.
|
|
55
|
+
*/
|
|
56
|
+
const fs = __importStar(require("fs"));
|
|
57
|
+
const path = __importStar(require("path"));
|
|
58
|
+
const KINDS = [
|
|
59
|
+
{ kind: 'screen', dir: 'screens' },
|
|
60
|
+
{ kind: 'flow', dir: 'flows' },
|
|
61
|
+
{ kind: 'api', dir: 'api' }, // qa/api/<area> or qa/api/flows/<flow>
|
|
62
|
+
];
|
|
63
|
+
/** Every unit directory this name matches, in `screens, flows, api` order. */
|
|
64
|
+
function resolveUnitCandidates(name, cwd = process.cwd()) {
|
|
65
|
+
const out = [];
|
|
66
|
+
for (const { kind, dir } of KINDS) {
|
|
67
|
+
const p = path.join(cwd, 'qa', dir, name);
|
|
68
|
+
if (!fs.existsSync(p))
|
|
69
|
+
continue;
|
|
70
|
+
out.push({ dir: p, kind, unitId: kind === 'screen' ? name : `${dir}/${name}` });
|
|
71
|
+
}
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
class AmbiguousUnitError extends Error {
|
|
75
|
+
constructor(name, candidates) {
|
|
76
|
+
super(`"${name}" names ${candidates.length} units: ${candidates.map((c) => `qa/${c.kind === 'screen' ? 'screens/' : ''}${c.unitId}`).join(' and ')}.\n`
|
|
77
|
+
+ ' Resolving this by search order silently picks one and drops the other unit\'s feature,\n'
|
|
78
|
+
+ ' contract and scored axes — a report with 0 scenarios rather than an error. Rename one,\n'
|
|
79
|
+
+ ' or remove the directory that should not exist (a stray `qa/screens/<flow-name>/`\n'
|
|
80
|
+
+ ' created to satisfy a screen-only driver is the usual cause).');
|
|
81
|
+
this.name = name;
|
|
82
|
+
this.candidates = candidates;
|
|
83
|
+
this.name = 'AmbiguousUnitError';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.AmbiguousUnitError = AmbiguousUnitError;
|
|
87
|
+
/**
|
|
88
|
+
* The single unit this name means. Throws `AmbiguousUnitError` when several match; returns null
|
|
89
|
+
* when none do (callers report "unit not found" with their own guidance).
|
|
90
|
+
*/
|
|
91
|
+
function resolveUnit(name, cwd = process.cwd()) {
|
|
92
|
+
const found = resolveUnitCandidates(name, cwd);
|
|
93
|
+
if (found.length > 1)
|
|
94
|
+
throw new AmbiguousUnitError(name, found);
|
|
95
|
+
return found[0] ?? null;
|
|
96
|
+
}
|
|
97
|
+
/** Back-compat shape for the callers that only want the directory. */
|
|
98
|
+
function findUnitDir(name, cwd = process.cwd()) {
|
|
99
|
+
return resolveUnit(name, cwd)?.dir ?? null;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=resolve-unit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-unit.js","sourceRoot":"","sources":["../../src/cli/resolve-unit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,sDAQC;AAmBD,kCAIC;AAGD,kCAEC;AAvED;;;;;;;;;;;;;;;GAeG;AACH,uCAAyB;AACzB,2CAA6B;AAI7B,MAAM,KAAK,GAA2C;IACpD,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE;IAClC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE;IAC9B,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAQ,uCAAuC;CAC3E,CAAC;AASF,8EAA8E;AAC9E,SAAgB,qBAAqB,CAAC,IAAY,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACrE,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,SAAS;QAChC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAa,kBAAmB,SAAQ,KAAK;IAC3C,YAA4B,IAAY,EAAkB,UAA0B;QAClF,KAAK,CACH,IAAI,IAAI,WAAW,UAAU,CAAC,MAAM,WAAW,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;cAC/I,4FAA4F;cAC5F,4FAA4F;cAC5F,sFAAsF;cACtF,gEAAgE,CACnE,CAAC;QAPwB,SAAI,GAAJ,IAAI,CAAQ;QAAkB,eAAU,GAAV,UAAU,CAAgB;QAQlF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAXD,gDAWC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,IAAY,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC3D,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC1B,CAAC;AAED,sEAAsE;AACtE,SAAgB,WAAW,CAAC,IAAY,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC3D,OAAO,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;AAC7C,CAAC"}
|
|
@@ -72,9 +72,10 @@ export declare function splitVpAndName(scenarioName: string): {
|
|
|
72
72
|
*
|
|
73
73
|
* Flow ids carry the use-case decomposition (#592) and group by it, so the deliverable shows
|
|
74
74
|
* the reviewer WHICH flow each case belongs to instead of collapsing a whole journey into one
|
|
75
|
-
* "Function" block: `
|
|
76
|
-
*
|
|
77
|
-
*
|
|
75
|
+
* "Function" block: `BF` → Basic Flow, `AF0n` → Alternate Flow, `EF0n` → Exception Flow. The
|
|
76
|
+
* flat scheme keeps its old mapping (`HP`/`ER` functional, `EH` guards → Accessing).
|
|
77
|
+
* The phase may sit anywhere in the id: a project whose viewpoint declares themes writes a
|
|
78
|
+
* COMPOUND id (`VP-SEC-EF02-001`) carrying theme AND phase (#595).
|
|
78
79
|
*/
|
|
79
80
|
export declare function mapVpToCategory2(vpId: string | undefined, scenarioName?: string): string;
|
|
80
81
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-parser.d.ts","sourceRoot":"","sources":["../../src/exporters/feature-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAe,gBAAgB,EAAE,MAAM,SAAS,CAAC;AA8DzE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,eAAe,CA2B7E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAEjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAKtD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,QAAQ,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAK7D;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,QAAiE,CAAC;AAE1F;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAMzF;AAED
|
|
1
|
+
{"version":3,"file":"feature-parser.d.ts","sourceRoot":"","sources":["../../src/exporters/feature-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAe,gBAAgB,EAAE,MAAM,SAAS,CAAC;AA8DzE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,eAAe,CA2B7E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAEjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAKtD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,QAAQ,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAK7D;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,QAAiE,CAAC;AAE1F;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAMzF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAgCxF;AAOD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAQ5D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CASlE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAOpG"}
|
|
@@ -193,14 +193,20 @@ function splitVpAndName(scenarioName) {
|
|
|
193
193
|
*
|
|
194
194
|
* Flow ids carry the use-case decomposition (#592) and group by it, so the deliverable shows
|
|
195
195
|
* the reviewer WHICH flow each case belongs to instead of collapsing a whole journey into one
|
|
196
|
-
* "Function" block: `
|
|
197
|
-
*
|
|
198
|
-
*
|
|
196
|
+
* "Function" block: `BF` → Basic Flow, `AF0n` → Alternate Flow, `EF0n` → Exception Flow. The
|
|
197
|
+
* flat scheme keeps its old mapping (`HP`/`ER` functional, `EH` guards → Accessing).
|
|
198
|
+
* The phase may sit anywhere in the id: a project whose viewpoint declares themes writes a
|
|
199
|
+
* COMPOUND id (`VP-SEC-EF02-001`) carrying theme AND phase (#595).
|
|
199
200
|
*/
|
|
200
201
|
function mapVpToCategory2(vpId, scenarioName) {
|
|
201
202
|
if (!vpId)
|
|
202
203
|
return 'Function';
|
|
203
|
-
|
|
204
|
+
// The phase segment, wherever it sits in the id. A project whose viewpoint declares themes
|
|
205
|
+
// uses a COMPOUND id — `VP-SEC-EF02-001` carries both the theme (traceability) and the phase
|
|
206
|
+
// (flow) — and anchoring on `FL-` missed every one of them, so a use-case suite still grouped
|
|
207
|
+
// as Accessing/Function (#595). The phase wins over the theme here: a flow deliverable is read
|
|
208
|
+
// flow by flow.
|
|
209
|
+
const flow = vpId.match(/(?:^|-)(?:FL-)?(BF|AF|EF|HP|ER|EH|UI)\d*(?=-|$)/i);
|
|
204
210
|
if (flow) {
|
|
205
211
|
const phase = flow[1].toUpperCase();
|
|
206
212
|
if (phase === 'BF')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-parser.js","sourceRoot":"","sources":["../../src/exporters/feature-parser.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAoEH,oDA2BC;AAMD,kDAEC;AAKD,4DAEC;AAKD,0CAKC;AASD,kDAEC;AAWD,0CAKC;AAuBD,wCAMC;
|
|
1
|
+
{"version":3,"file":"feature-parser.js","sourceRoot":"","sources":["../../src/exporters/feature-parser.ts"],"names":[],"mappings":"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"}
|
package/dist/harness/audit.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ViewpointBaseline } from './viewpoint-baseline';
|
|
2
|
-
import { FlowQualityResult } from './flow-contract';
|
|
2
|
+
import { FlowQualityResult, InventoryResult } from './flow-contract';
|
|
3
3
|
import { GateResult, DepthResult, BalanceResult, DuplicateResult, TraceResult, ClaimProofResult, TaxonomyResult, AutomatableManualResult, FlowDepthResult, OracleStrengthResult } from './sensors';
|
|
4
4
|
import { IntentProfile } from './intent';
|
|
5
5
|
import { Provenance } from './provenance';
|
|
@@ -25,6 +25,8 @@ export interface AuditReport {
|
|
|
25
25
|
ledger: LedgerResult;
|
|
26
26
|
viewpointBaseline: ViewpointBaseline;
|
|
27
27
|
flowQuality?: FlowQualityResult;
|
|
28
|
+
/** #595 — coverage per DECLARED FLOW; absent when the contract declares no `flows:`. */
|
|
29
|
+
flowInventory?: InventoryResult;
|
|
28
30
|
calibration: {
|
|
29
31
|
axes: Record<string, number>;
|
|
30
32
|
weakest: {
|
|
@@ -57,6 +59,7 @@ export interface AuditReport {
|
|
|
57
59
|
weight: number;
|
|
58
60
|
applicable: boolean;
|
|
59
61
|
critical: boolean;
|
|
62
|
+
byDesign?: boolean;
|
|
60
63
|
}>;
|
|
61
64
|
formula: string;
|
|
62
65
|
};
|
|
@@ -66,6 +69,11 @@ export interface AuditReport {
|
|
|
66
69
|
provenance: Provenance;
|
|
67
70
|
spec: SpecCoverageResult;
|
|
68
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Every unit name this project holds (screens + flows + api areas). Used to answer "does the
|
|
74
|
+
* project actually contain the spec this one says its requirements come from?".
|
|
75
|
+
*/
|
|
76
|
+
export declare function projectUnitDirs(projectRoot: string): string[];
|
|
69
77
|
/** The catalog-resolution id for a unit dir (relative to qa/): screen · flows/<flow> · api/<area> · api/flows/<flow>. */
|
|
70
78
|
export declare function catalogIdFromScreenDir(screenDir: string): string;
|
|
71
79
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/harness/audit.ts"],"names":[],"mappings":"AAWA,OAAO,EAA0B,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/harness/audit.ts"],"names":[],"mappings":"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"}
|