@sun-asterisk/sungen 3.2.2-beta.1 → 3.2.2-beta.10
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/depth-lint.d.ts +3 -0
- package/dist/cli/commands/depth-lint.d.ts.map +1 -0
- package/dist/cli/commands/depth-lint.js +88 -0
- package/dist/cli/commands/depth-lint.js.map +1 -0
- package/dist/cli/commands/gate.d.ts +3 -0
- package/dist/cli/commands/gate.d.ts.map +1 -0
- package/dist/cli/commands/gate.js +83 -0
- package/dist/cli/commands/gate.js.map +1 -0
- package/dist/cli/commands/journey.d.ts +3 -0
- package/dist/cli/commands/journey.d.ts.map +1 -0
- package/dist/cli/commands/journey.js +96 -0
- package/dist/cli/commands/journey.js.map +1 -0
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/harness/depth-lint.d.ts +25 -0
- package/dist/harness/depth-lint.d.ts.map +1 -0
- package/dist/harness/depth-lint.js +118 -0
- package/dist/harness/depth-lint.js.map +1 -0
- package/dist/harness/journey.d.ts +68 -0
- package/dist/harness/journey.d.ts.map +1 -0
- package/dist/harness/journey.js +328 -0
- package/dist/harness/journey.js.map +1 -0
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-create-test.md +6 -0
- package/dist/orchestrator/templates/ai-instructions/claude-cmd-run-test.md +3 -0
- package/dist/orchestrator/templates/ai-instructions/claude-skill-error-mapping.md +22 -3
- package/dist/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +1 -0
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +2 -0
- package/dist/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +3 -0
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-error-mapping.md +22 -3
- package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +1 -0
- package/package.json +3 -3
- package/src/cli/commands/depth-lint.ts +51 -0
- package/src/cli/commands/gate.ts +44 -0
- package/src/cli/commands/journey.ts +59 -0
- package/src/cli/index.ts +6 -0
- package/src/harness/depth-lint.ts +122 -0
- package/src/harness/journey.ts +333 -0
- package/src/orchestrator/templates/ai-instructions/claude-cmd-create-test.md +6 -0
- package/src/orchestrator/templates/ai-instructions/claude-cmd-run-test.md +3 -0
- package/src/orchestrator/templates/ai-instructions/claude-skill-error-mapping.md +22 -3
- package/src/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +1 -0
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +2 -0
- package/src/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +3 -0
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-error-mapping.md +22 -3
- package/src/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depth-lint.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/depth-lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkC/D"}
|
|
@@ -0,0 +1,88 @@
|
|
|
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.registerDepthLintCommand = registerDepthLintCommand;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const depth_lint_1 = require("../../harness/depth-lint");
|
|
40
|
+
const unit_paths_1 = require("../../harness/unit-paths");
|
|
41
|
+
function findScreenDir(name) {
|
|
42
|
+
const candidates = [
|
|
43
|
+
path.join(process.cwd(), 'qa', 'screens', name),
|
|
44
|
+
path.join(process.cwd(), 'qa', 'flows', name),
|
|
45
|
+
path.join(process.cwd(), 'qa', 'api', name),
|
|
46
|
+
];
|
|
47
|
+
for (const c of candidates)
|
|
48
|
+
if (fs.existsSync(c))
|
|
49
|
+
return c;
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
function registerDepthLintCommand(program) {
|
|
53
|
+
program
|
|
54
|
+
.command('depth-lint')
|
|
55
|
+
.description('Harness: classify shallow business-critical scenarios → deepen-in-place (with the data-assertion template) vs cross-screen (route to a flow). Generation-time depth self-check (#384).')
|
|
56
|
+
.option('-s, --screen <name>', 'Screen or flow name to lint')
|
|
57
|
+
.option('--json', 'Output the raw JSON report')
|
|
58
|
+
.action((options) => {
|
|
59
|
+
try {
|
|
60
|
+
const name = options.screen;
|
|
61
|
+
if (!name)
|
|
62
|
+
throw new Error('Provide --screen <name>');
|
|
63
|
+
const dir = findScreenDir(name);
|
|
64
|
+
if (!dir)
|
|
65
|
+
throw new Error(`Not found: qa/screens/${name} or qa/flows/${name}`);
|
|
66
|
+
const report = (0, depth_lint_1.runDepthLint)(dir, name);
|
|
67
|
+
const outDir = path.join(process.cwd(), '.sungen', 'reports');
|
|
68
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
69
|
+
const outPath = path.join(outDir, `${(0, unit_paths_1.reportSlug)(name)}-depth-lint.json`);
|
|
70
|
+
fs.writeFileSync(outPath, JSON.stringify(report, null, 2), 'utf-8');
|
|
71
|
+
if (options.json) {
|
|
72
|
+
console.log(JSON.stringify(report, null, 2));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
(0, depth_lint_1.renderDepthLint)(report);
|
|
76
|
+
console.log(` Report: ${path.relative(process.cwd(), outPath)}`);
|
|
77
|
+
console.log('');
|
|
78
|
+
}
|
|
79
|
+
// Non-zero when there are deepen-in-place candidates the generator should fix before audit.
|
|
80
|
+
process.exit(report.deepen.length > 0 ? 2 : 0);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error('Error:', error instanceof Error ? error.message : error);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=depth-lint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depth-lint.js","sourceRoot":"","sources":["../../../src/cli/commands/depth-lint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B1D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
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.registerGateCommand = registerGateCommand;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const journey_1 = require("../../harness/journey");
|
|
40
|
+
function findScreenDir(name) {
|
|
41
|
+
const candidates = [
|
|
42
|
+
path.join(process.cwd(), 'qa', 'screens', name),
|
|
43
|
+
path.join(process.cwd(), 'qa', 'flows', name),
|
|
44
|
+
path.join(process.cwd(), 'qa', 'api', name),
|
|
45
|
+
];
|
|
46
|
+
for (const c of candidates)
|
|
47
|
+
if (fs.existsSync(c))
|
|
48
|
+
return c;
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const PHASES = ['create', 'run', 'deliver'];
|
|
52
|
+
function registerGateCommand(program) {
|
|
53
|
+
program
|
|
54
|
+
.command('gate')
|
|
55
|
+
.description('Inter-phase HALT gate (#381): a phase boundary passes only when its required obligations are satisfied or explicitly waived. Exit 2 = HALT (no silent bad output crosses the boundary).')
|
|
56
|
+
.option('-s, --screen <name>', 'Screen / flow / api unit name')
|
|
57
|
+
.option('-p, --phase <phase>', `Phase boundary: ${PHASES.join(' | ')}`)
|
|
58
|
+
.option('--json', 'Output the raw verdict')
|
|
59
|
+
.action((options) => {
|
|
60
|
+
try {
|
|
61
|
+
const name = options.screen;
|
|
62
|
+
if (!name)
|
|
63
|
+
throw new Error('Provide --screen <name>');
|
|
64
|
+
const phase = options.phase;
|
|
65
|
+
if (!PHASES.includes(phase))
|
|
66
|
+
throw new Error(`Provide --phase <${PHASES.join('|')}>`);
|
|
67
|
+
if (!findScreenDir(name))
|
|
68
|
+
throw new Error(`Not found: qa/screens/${name}, qa/flows/${name}, or qa/api/${name}`);
|
|
69
|
+
const verdict = (0, journey_1.runGate)(process.cwd(), name, phase);
|
|
70
|
+
if (options.json)
|
|
71
|
+
console.log(JSON.stringify(verdict, null, 2));
|
|
72
|
+
else
|
|
73
|
+
console.log((0, journey_1.renderGate)(verdict));
|
|
74
|
+
// Exit 2 on HALT — usable in CI / the orchestration loop to block the next phase.
|
|
75
|
+
process.exit(verdict.status === 'halt' ? 2 : 0);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error('Error:', error instanceof Error ? error.message : error);
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../../src/cli/commands/gate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,kDA0BC;AA1CD,2CAA6B;AAC7B,uCAAyB;AACzB,mDAAuE;AAEvE,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;KAC5C,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,MAAM,GAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAEzD,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yLAAyL,CAAC;SACtM,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;SAC9D,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAkB,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,cAAc,IAAI,eAAe,IAAI,EAAE,CAAC,CAAC;YAEhH,MAAM,OAAO,GAAG,IAAA,iBAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,OAAO,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;gBAC3D,OAAO,CAAC,GAAG,CAAC,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAC,CAAC;YAEtC,kFAAkF;YAClF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/journey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0C7D"}
|
|
@@ -0,0 +1,96 @@
|
|
|
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.registerJourneyCommand = registerJourneyCommand;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const journey_1 = require("../../harness/journey");
|
|
40
|
+
const unit_paths_1 = require("../../harness/unit-paths");
|
|
41
|
+
function findScreenDir(name) {
|
|
42
|
+
const candidates = [
|
|
43
|
+
path.join(process.cwd(), 'qa', 'screens', name),
|
|
44
|
+
path.join(process.cwd(), 'qa', 'flows', name),
|
|
45
|
+
path.join(process.cwd(), 'qa', 'api', name),
|
|
46
|
+
];
|
|
47
|
+
for (const c of candidates)
|
|
48
|
+
if (fs.existsSync(c))
|
|
49
|
+
return c;
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
function registerJourneyCommand(program) {
|
|
53
|
+
program
|
|
54
|
+
.command('journey')
|
|
55
|
+
.description('Durable "you are here" board (#381): obligations + what-to-review + next, synthesised read-only from the audit report + ledger already on disk.')
|
|
56
|
+
.option('-s, --screen <name>', 'Screen / flow / api unit name')
|
|
57
|
+
.option('--waive <obligation>', 'Waive an obligation (e.g. OB-coverage) — requires --reason')
|
|
58
|
+
.option('--reason <text>', 'The reason a waived obligation is acceptable (mandatory with --waive)')
|
|
59
|
+
.option('--signoff', 'Sign off the review queue — the single human gate (allowed only when every other obligation is satisfied/waived)')
|
|
60
|
+
.option('--by <name>', 'Who is signing off (recorded with --signoff)')
|
|
61
|
+
.option('--json', 'Output the raw JSON report')
|
|
62
|
+
.action((options) => {
|
|
63
|
+
try {
|
|
64
|
+
const name = options.screen;
|
|
65
|
+
if (!name)
|
|
66
|
+
throw new Error('Provide --screen <name>');
|
|
67
|
+
if (!findScreenDir(name))
|
|
68
|
+
throw new Error(`Not found: qa/screens/${name}, qa/flows/${name}, or qa/api/${name}`);
|
|
69
|
+
const report = options.waive
|
|
70
|
+
? (0, journey_1.waive)(process.cwd(), name, options.waive, options.reason || '')
|
|
71
|
+
: options.signoff
|
|
72
|
+
? (0, journey_1.signoff)(process.cwd(), name, options.by)
|
|
73
|
+
: (0, journey_1.runJourney)(process.cwd(), name);
|
|
74
|
+
const outDir = path.join(process.cwd(), '.sungen', 'journey');
|
|
75
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
76
|
+
const slug = (0, unit_paths_1.reportSlug)(name);
|
|
77
|
+
fs.writeFileSync(path.join(outDir, `${slug}.json`), JSON.stringify(report, null, 2), 'utf-8');
|
|
78
|
+
const board = (0, journey_1.renderJourneyBoard)(report);
|
|
79
|
+
fs.writeFileSync(path.join(outDir, `${slug}.board.md`), board, 'utf-8');
|
|
80
|
+
if (options.json) {
|
|
81
|
+
console.log(JSON.stringify(report, null, 2));
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
console.log('');
|
|
85
|
+
console.log(board);
|
|
86
|
+
console.log(` Board: ${path.relative(process.cwd(), path.join(outDir, `${slug}.board.md`))}`);
|
|
87
|
+
console.log('');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error('Error:', error instanceof Error ? error.message : error);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=journey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey.js","sourceRoot":"","sources":["../../../src/cli/commands/journey.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,wDA0CC;AAzDD,2CAA6B;AAC7B,uCAAyB;AACzB,mDAAuF;AACvF,yDAAsD;AAEtD,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;KAC5C,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU;QAAE,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iJAAiJ,CAAC;SAC9J,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;SAC9D,MAAM,CAAC,sBAAsB,EAAE,4DAA4D,CAAC;SAC5F,MAAM,CAAC,iBAAiB,EAAE,uEAAuE,CAAC;SAClG,MAAM,CAAC,WAAW,EAAE,kHAAkH,CAAC;SACvI,MAAM,CAAC,aAAa,EAAE,8CAA8C,CAAC;SACrE,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;SAC9C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACtD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,cAAc,IAAI,eAAe,IAAI,EAAE,CAAC,CAAC;YAEhH,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK;gBAC1B,CAAC,CAAC,IAAA,eAAK,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;gBACjE,CAAC,CAAC,OAAO,CAAC,OAAO;oBACf,CAAC,CAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC1C,CAAC,CAAC,IAAA,oBAAU,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9D,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAA,uBAAU,EAAC,IAAI,CAAC,CAAC;YAC9B,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC9F,MAAM,KAAK,GAAG,IAAA,4BAAkB,EAAC,MAAM,CAAC,CAAC;YACzC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAExE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -16,6 +16,9 @@ const figma_1 = require("./commands/figma");
|
|
|
16
16
|
const add_flow_1 = require("./commands/add-flow");
|
|
17
17
|
const dashboard_1 = require("./commands/dashboard");
|
|
18
18
|
const audit_1 = require("./commands/audit");
|
|
19
|
+
const depth_lint_1 = require("./commands/depth-lint");
|
|
20
|
+
const journey_1 = require("./commands/journey");
|
|
21
|
+
const gate_1 = require("./commands/gate");
|
|
19
22
|
const ingest_1 = require("./commands/ingest");
|
|
20
23
|
const eval_1 = require("./commands/eval");
|
|
21
24
|
const manifest_1 = require("./commands/manifest");
|
|
@@ -53,6 +56,9 @@ async function main() {
|
|
|
53
56
|
(0, add_flow_1.registerAddFlowCommand)(program);
|
|
54
57
|
(0, dashboard_1.registerDashboardCommand)(program);
|
|
55
58
|
(0, audit_1.registerAuditCommand)(program);
|
|
59
|
+
(0, depth_lint_1.registerDepthLintCommand)(program);
|
|
60
|
+
(0, journey_1.registerJourneyCommand)(program);
|
|
61
|
+
(0, gate_1.registerGateCommand)(program);
|
|
56
62
|
(0, manifest_1.registerManifestCommand)(program);
|
|
57
63
|
(0, ledger_1.registerLedgerCommand)(program);
|
|
58
64
|
(0, feedback_1.registerFeedbackCommand)(program);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AACA;;;GAGG;;AAEH,yCAAoC;AACpC,0CAAsD;AACtD,wCAAoD;AACpD,kDAA8D;AAC9D,kDAA8D;AAC9D,8CAA0D;AAC1D,kDAA8D;AAC9D,4CAAwD;AACxD,kDAA6D;AAC7D,oDAAgE;AAChE,4CAAwD;AACxD,8CAA0D;AAC1D,0CAAsD;AACtD,kDAA8D;AAC9D,8CAA0D;AAC1D,kDAA8D;AAC9D,0DAAqE;AACrE,4CAAwD;AACxD,oDAAgE;AAChE,oDAAgE;AAChE,sDAAkE;AAClE,sDAAiE;AACjE,gDAA4D;AAC5D,8CAA0D;AAC1D,uDAA8D;AAC9D,uDAA2E;AAE3E,wFAAwF;AACxF,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,oEAAoE,CAAC;SACjF,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,iBAAiB;IACjB,OAAO;SACJ,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;IAErD,oBAAoB;IACpB,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;IAC7B,IAAA,wBAAkB,EAAC,OAAO,CAAC,CAAC;IAC5B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;IAC/B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;IAC9B,IAAA,iCAAsB,EAAC,OAAO,CAAC,CAAC;IAChC,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC;IAClC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;IAC9B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;IAC/B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,yCAA0B,EAAC,OAAO,CAAC,CAAC;IACpC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;IAC9B,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC;IAClC,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC;IAClC,IAAA,sCAAyB,EAAC,OAAO,CAAC,CAAC;IACnC,IAAA,qCAAwB,EAAC,OAAO,CAAC,CAAC;IAClC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;IAChC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;IAC/B,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;IAC/B,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;IAE7B,6FAA6F;IAC7F,iFAAiF;IACjF,IAAA,0CAA+B,GAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,6BAAkB,CAAC,GAAG,EAAE,EAAE,CAAC;QAC3C,KAAK,MAAM,eAAe,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE;YAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AACA;;;GAGG;;AAEH,yCAAoC;AACpC,0CAAsD;AACtD,wCAAoD;AACpD,kDAA8D;AAC9D,kDAA8D;AAC9D,8CAA0D;AAC1D,kDAA8D;AAC9D,4CAAwD;AACxD,kDAA6D;AAC7D,oDAAgE;AAChE,4CAAwD;AACxD,sDAAiE;AACjE,gDAA4D;AAC5D,0CAAsD;AACtD,8CAA0D;AAC1D,0CAAsD;AACtD,kDAA8D;AAC9D,8CAA0D;AAC1D,kDAA8D;AAC9D,0DAAqE;AACrE,4CAAwD;AACxD,oDAAgE;AAChE,oDAAgE;AAChE,sDAAkE;AAClE,sDAAiE;AACjE,gDAA4D;AAC5D,8CAA0D;AAC1D,uDAA8D;AAC9D,uDAA2E;AAE3E,wFAAwF;AACxF,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,oEAAoE,CAAC;SACjF,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,iBAAiB;IACjB,OAAO;SACJ,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;IAErD,oBAAoB;IACpB,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;IAC7B,IAAA,wBAAkB,EAAC,OAAO,CAAC,CAAC;IAC5B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;IAC/B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;IAC9B,IAAA,iCAAsB,EAAC,OAAO,CAAC,CAAC;IAChC,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC;IAClC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;IAC9B,IAAA,qCAAwB,EAAC,OAAO,CAAC,CAAC;IAClC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;IAChC,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;IAC7B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;IAC/B,IAAA,kCAAuB,EAAC,OAAO,CAAC,CAAC;IACjC,IAAA,yCAA0B,EAAC,OAAO,CAAC,CAAC;IACpC,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;IAC9B,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC;IAClC,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC;IAClC,IAAA,sCAAyB,EAAC,OAAO,CAAC,CAAC;IACnC,IAAA,qCAAwB,EAAC,OAAO,CAAC,CAAC;IAClC,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;IAChC,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;IAC/B,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;IAC/B,IAAA,0BAAmB,EAAC,OAAO,CAAC,CAAC;IAE7B,6FAA6F;IAC7F,iFAAiF;IACjF,IAAA,0CAA+B,GAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,6BAAkB,CAAC,GAAG,EAAE,EAAE,CAAC;QAC3C,KAAK,MAAM,eAAe,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE;YAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type DepthAction = 'deepen' | 'defer';
|
|
2
|
+
export interface DepthLintItem {
|
|
3
|
+
scenario: string;
|
|
4
|
+
theme: string | null;
|
|
5
|
+
action: DepthAction;
|
|
6
|
+
/** the exact deep step to emit (deepen) or the routing hint (defer) */
|
|
7
|
+
fix: string;
|
|
8
|
+
}
|
|
9
|
+
export interface DepthLintReport {
|
|
10
|
+
screen: string;
|
|
11
|
+
pageType: string | null;
|
|
12
|
+
focus: string;
|
|
13
|
+
threshold: number;
|
|
14
|
+
bcDepthRatio: number;
|
|
15
|
+
verdict: 'pass' | 'warn' | 'fail';
|
|
16
|
+
businessCriticalTotal: number;
|
|
17
|
+
shallowTotal: number;
|
|
18
|
+
/** shallow business-critical scenarios that CAN be deepened on-screen (actionable now) */
|
|
19
|
+
deepen: DepthLintItem[];
|
|
20
|
+
/** shallow business-critical scenarios that are cross-screen → route to a flow / @manual */
|
|
21
|
+
defer: DepthLintItem[];
|
|
22
|
+
}
|
|
23
|
+
export declare function runDepthLint(screenDir: string, screenName: string, focus?: string): DepthLintReport;
|
|
24
|
+
export declare function renderDepthLint(r: DepthLintReport): void;
|
|
25
|
+
//# sourceMappingURL=depth-lint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depth-lint.d.ts","sourceRoot":"","sources":["../../src/harness/depth-lint.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,0FAA0F;IAC1F,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,4FAA4F;IAC5F,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAUD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,SAAe,GAAG,eAAe,CAiDzG;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAmBxD"}
|
|
@@ -0,0 +1,118 @@
|
|
|
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.runDepthLint = runDepthLint;
|
|
37
|
+
exports.renderDepthLint = renderDepthLint;
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const parse_1 = require("./parse");
|
|
40
|
+
const sensors_1 = require("./sensors");
|
|
41
|
+
/** Find the data-theme a scenario belongs to (precise depth.keywords, fallback theme.keywords). */
|
|
42
|
+
function matchTheme(s, dataThemes) {
|
|
43
|
+
return dataThemes.find((t) => {
|
|
44
|
+
const kws = t.depth?.keywords?.length ? t.depth.keywords : t.keywords;
|
|
45
|
+
return kws.some((k) => s.haystack.includes(k.toLowerCase()));
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function runDepthLint(screenDir, screenName, focus = 'functional') {
|
|
49
|
+
const last = screenName.split('/').pop() || screenName;
|
|
50
|
+
const featurePath = path.join(screenDir, 'features', `${last}.feature`);
|
|
51
|
+
const viewpointPath = path.join(screenDir, 'requirements', 'test-viewpoint.md');
|
|
52
|
+
const scenarios = (0, parse_1.loadScenarios)(featurePath);
|
|
53
|
+
const viewpoints = (0, parse_1.parseViewpointOverview)(viewpointPath);
|
|
54
|
+
const catalog = (0, sensors_1.loadCatalog)();
|
|
55
|
+
const gate = (0, sensors_1.viewpointGate)(scenarios, viewpoints, catalog);
|
|
56
|
+
const dataThemes = (0, sensors_1.dataThemesFor)(catalog, gate.pageType);
|
|
57
|
+
const depth = (0, sensors_1.assertionDepth)(scenarios, dataThemes, focus);
|
|
58
|
+
const byName = new Map(scenarios.map((s) => [s.name, s]));
|
|
59
|
+
const deepen = [];
|
|
60
|
+
const defer = [];
|
|
61
|
+
for (const sb of depth.shallowBusinessCritical) {
|
|
62
|
+
const s = byName.get(sb.name);
|
|
63
|
+
const theme = s ? matchTheme(s, dataThemes) : undefined;
|
|
64
|
+
const crossScreen = theme?.depth?.cross_screen ?? false;
|
|
65
|
+
if (crossScreen) {
|
|
66
|
+
defer.push({
|
|
67
|
+
scenario: sb.name,
|
|
68
|
+
theme: theme?.theme ?? null,
|
|
69
|
+
action: 'defer',
|
|
70
|
+
fix: `cross-screen — own it in a flow (sungen add-flow) or tag @manual:Mx with a reason; do not fake an on-screen data assertion`,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
deepen.push({
|
|
75
|
+
scenario: sb.name,
|
|
76
|
+
theme: theme?.theme ?? null,
|
|
77
|
+
action: 'deepen',
|
|
78
|
+
fix: theme?.depth?.template ?? `add a data assertion (\`... with {{value}}\` or \`see all ... contain {{v}}\`)`,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
screen: screenName,
|
|
84
|
+
pageType: gate.pageType,
|
|
85
|
+
focus,
|
|
86
|
+
threshold: depth.threshold,
|
|
87
|
+
bcDepthRatio: depth.bcDepthRatio,
|
|
88
|
+
verdict: depth.verdict,
|
|
89
|
+
businessCriticalTotal: depth.businessCriticalTotal,
|
|
90
|
+
shallowTotal: depth.businessCriticalShallow,
|
|
91
|
+
deepen,
|
|
92
|
+
defer,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function renderDepthLint(r) {
|
|
96
|
+
const pct = (n) => `${Math.round(n * 100)}%`;
|
|
97
|
+
console.log('');
|
|
98
|
+
console.log(`━━━ Depth lint: ${r.screen} (page-type ${r.pageType ?? 'unknown'}) ━━━`);
|
|
99
|
+
console.log('');
|
|
100
|
+
console.log(` businessDepth ${pct(r.bcDepthRatio)} (threshold ${pct(r.threshold)} · focus ${r.focus}) → ${r.verdict.toUpperCase()}`);
|
|
101
|
+
console.log(` ${r.businessCriticalTotal} business-critical · ${r.shallowTotal} shallow → ${r.deepen.length} deepen-in-place · ${r.defer.length} cross-screen`);
|
|
102
|
+
if (r.deepen.length) {
|
|
103
|
+
console.log('');
|
|
104
|
+
console.log(' ── DEEPEN IN PLACE (fix before audit) ──');
|
|
105
|
+
for (const d of r.deepen)
|
|
106
|
+
console.log(` • ${d.scenario}\n [${d.theme}] → ${d.fix}`);
|
|
107
|
+
}
|
|
108
|
+
if (r.defer.length) {
|
|
109
|
+
console.log('');
|
|
110
|
+
console.log(' ── CROSS-SCREEN (route to flow / @manual:Mx) ──');
|
|
111
|
+
for (const d of r.defer)
|
|
112
|
+
console.log(` • ${d.scenario} [${d.theme}]`);
|
|
113
|
+
}
|
|
114
|
+
if (!r.deepen.length && !r.defer.length)
|
|
115
|
+
console.log(' ✓ no shallow business-critical scenarios');
|
|
116
|
+
console.log('');
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=depth-lint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depth-lint.js","sourceRoot":"","sources":["../../src/harness/depth-lint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export type ObStatus = 'satisfied' | 'needs-work' | 'pending' | 'waived';
|
|
2
|
+
export interface Obligation {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
status: ObStatus;
|
|
6
|
+
detail: string;
|
|
7
|
+
waivedReason?: string;
|
|
8
|
+
}
|
|
9
|
+
/** S5 — a parsed anchor so an IDE can jump straight to what needs review. */
|
|
10
|
+
export interface Anchor {
|
|
11
|
+
vpId?: string;
|
|
12
|
+
file?: string;
|
|
13
|
+
line?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ReviewItem {
|
|
16
|
+
text: string;
|
|
17
|
+
anchor: Anchor;
|
|
18
|
+
}
|
|
19
|
+
export interface JourneyReport {
|
|
20
|
+
unit: string;
|
|
21
|
+
generatedFrom: string[];
|
|
22
|
+
youAreHere: string;
|
|
23
|
+
phasesDone: string[];
|
|
24
|
+
gateStatus: string | null;
|
|
25
|
+
score: number | null;
|
|
26
|
+
obligations: Obligation[];
|
|
27
|
+
needsYou: ReviewItem[];
|
|
28
|
+
nextSuggested: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The public entry: compute fresh, then RECONCILE with the persisted state —
|
|
32
|
+
* - auto-close is automatic (fresh recompute reflects the current artifacts);
|
|
33
|
+
* - an active waiver (evidence unchanged) sets status='waived' (carries the reason);
|
|
34
|
+
* - a STALE waiver (audit changed since it was waived) is re-surfaced for re-decision (anti-amnesia).
|
|
35
|
+
* Then persist the current evidence cursor.
|
|
36
|
+
*/
|
|
37
|
+
export declare function runJourney(projectRoot: string, unit: string): JourneyReport;
|
|
38
|
+
/**
|
|
39
|
+
* Waive an obligation — REQUIRES a reason (anti-amnesia: a waiver leaves a recorded "why").
|
|
40
|
+
* Records the current evidence cursor so reconcile can invalidate it if the audit changes.
|
|
41
|
+
*/
|
|
42
|
+
export declare function waive(projectRoot: string, unit: string, obId: string, reason: string): JourneyReport;
|
|
43
|
+
/**
|
|
44
|
+
* Sign off — the single human gate (S5). Allowed ONLY when every other deliver-required
|
|
45
|
+
* obligation is satisfied or waived (you cannot sign off an unclean suite). Records who/when +
|
|
46
|
+
* the evidence cursor; reconcile invalidates it (stale → re-review) if the suite later changes.
|
|
47
|
+
*/
|
|
48
|
+
export declare function signoff(projectRoot: string, unit: string, by?: string): JourneyReport;
|
|
49
|
+
export declare function renderJourneyBoard(r: JourneyReport): string;
|
|
50
|
+
export type GatePhase = 'create' | 'run' | 'deliver';
|
|
51
|
+
export interface GateVerdict {
|
|
52
|
+
unit: string;
|
|
53
|
+
phase: GatePhase;
|
|
54
|
+
status: 'pass' | 'halt';
|
|
55
|
+
required: string[];
|
|
56
|
+
blockers: {
|
|
57
|
+
id: string;
|
|
58
|
+
title: string;
|
|
59
|
+
detail: string;
|
|
60
|
+
}[];
|
|
61
|
+
waivedCredit: {
|
|
62
|
+
id: string;
|
|
63
|
+
title: string;
|
|
64
|
+
}[];
|
|
65
|
+
}
|
|
66
|
+
export declare function runGate(projectRoot: string, unit: string, phase: GatePhase): GateVerdict;
|
|
67
|
+
export declare function renderGate(v: GateVerdict): string;
|
|
68
|
+
//# sourceMappingURL=journey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey.d.ts","sourceRoot":"","sources":["../../src/harness/journey.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,6EAA6E;AAC7E,MAAM,WAAW,MAAM;IAAG,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAAE;AACxE,MAAM,WAAW,UAAU;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;CAAE;AAE7D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAkID;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAgC3E;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAepG;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,aAAa,CAYrF;AAID,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAuB3D;AASD,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1D,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C;AAWD,wBAAgB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,WAAW,CASxF;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAajD"}
|