@sun-asterisk/sungen 3.3.0-alpha.6 → 3.3.0-alpha.8
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/case-triage-hint.d.ts +14 -0
- package/dist/cli/case-triage-hint.d.ts.map +1 -0
- package/dist/cli/case-triage-hint.js +23 -0
- package/dist/cli/case-triage-hint.js.map +1 -0
- package/dist/cli/commands/contract-derive-command.d.ts.map +1 -1
- package/dist/cli/commands/contract-derive-command.js +4 -1
- package/dist/cli/commands/contract-derive-command.js.map +1 -1
- package/dist/cli/commands/contract.d.ts.map +1 -1
- package/dist/cli/commands/contract.js +5 -2
- package/dist/cli/commands/contract.js.map +1 -1
- package/dist/cli/commands/delivery.d.ts.map +1 -1
- package/dist/cli/commands/delivery.js +50 -16
- package/dist/cli/commands/delivery.js.map +1 -1
- package/dist/cli/commands/gate.d.ts.map +1 -1
- package/dist/cli/commands/gate.js +2 -1
- package/dist/cli/commands/gate.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +14 -2
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/journey.d.ts.map +1 -1
- package/dist/cli/commands/journey.js +4 -2
- package/dist/cli/commands/journey.js.map +1 -1
- package/dist/cli/commands/next.d.ts +7 -3
- package/dist/cli/commands/next.d.ts.map +1 -1
- package/dist/cli/commands/next.js +28 -5
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/triage.d.ts.map +1 -1
- package/dist/cli/commands/triage.js +5 -3
- package/dist/cli/commands/triage.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +6 -2
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/json-error-on-exit.d.ts +34 -0
- package/dist/cli/json-error-on-exit.d.ts.map +1 -0
- package/dist/cli/json-error-on-exit.js +63 -0
- package/dist/cli/json-error-on-exit.js.map +1 -0
- package/dist/cli/project-sungen-invocation.d.ts +6 -0
- package/dist/cli/project-sungen-invocation.d.ts.map +1 -1
- package/dist/cli/project-sungen-invocation.js +19 -0
- package/dist/cli/project-sungen-invocation.js.map +1 -1
- package/dist/cli/run-command-hints.d.ts +9 -0
- package/dist/cli/run-command-hints.d.ts.map +1 -0
- package/dist/cli/run-command-hints.js +84 -0
- package/dist/cli/run-command-hints.js.map +1 -0
- package/dist/cli/waiting-for-you-block.d.ts +18 -0
- package/dist/cli/waiting-for-you-block.d.ts.map +1 -0
- package/dist/cli/waiting-for-you-block.js +22 -0
- package/dist/cli/waiting-for-you-block.js.map +1 -0
- package/dist/contract/derive-free-feature.d.ts +2 -0
- package/dist/contract/derive-free-feature.d.ts.map +1 -1
- package/dist/contract/derive-free-feature.js +22 -0
- package/dist/contract/derive-free-feature.js.map +1 -1
- package/dist/decisions/legacy-waiver-migration.d.ts +2 -0
- package/dist/decisions/legacy-waiver-migration.d.ts.map +1 -1
- package/dist/decisions/legacy-waiver-migration.js +5 -2
- package/dist/decisions/legacy-waiver-migration.js.map +1 -1
- package/dist/exporters/csv-exporter.d.ts +11 -2
- package/dist/exporters/csv-exporter.d.ts.map +1 -1
- package/dist/exporters/csv-exporter.js +8 -4
- package/dist/exporters/csv-exporter.js.map +1 -1
- package/dist/exporters/matrix/export.d.ts +6 -1
- package/dist/exporters/matrix/export.d.ts.map +1 -1
- package/dist/exporters/matrix/export.js +11 -4
- package/dist/exporters/matrix/export.js.map +1 -1
- package/dist/exporters/xlsx-exporter.d.ts +3 -2
- package/dist/exporters/xlsx-exporter.d.ts.map +1 -1
- package/dist/exporters/xlsx-exporter.js +4 -4
- package/dist/exporters/xlsx-exporter.js.map +1 -1
- package/dist/graph/board-human-actions.d.ts +5 -0
- package/dist/graph/board-human-actions.d.ts.map +1 -0
- package/dist/graph/board-human-actions.js +83 -0
- package/dist/graph/board-human-actions.js.map +1 -0
- package/dist/graph/evaluate-graph.d.ts +18 -0
- package/dist/graph/evaluate-graph.d.ts.map +1 -1
- package/dist/graph/evaluate-graph.js +31 -6
- package/dist/graph/evaluate-graph.js.map +1 -1
- package/dist/graph/human-action.d.ts +21 -0
- package/dist/graph/human-action.d.ts.map +1 -0
- package/dist/graph/human-action.js +3 -0
- package/dist/graph/human-action.js.map +1 -0
- package/dist/graph/node-decl.d.ts +9 -0
- package/dist/graph/node-decl.d.ts.map +1 -1
- package/dist/graph/node-decl.js +4 -1
- package/dist/graph/node-decl.js.map +1 -1
- package/dist/graph/nodes/test-case-contract-nodes.d.ts.map +1 -1
- package/dist/graph/nodes/test-case-contract-nodes.js +16 -3
- package/dist/graph/nodes/test-case-contract-nodes.js.map +1 -1
- package/dist/graph/nodes/test-case-nodes.d.ts.map +1 -1
- package/dist/graph/nodes/test-case-nodes.js +16 -4
- package/dist/graph/nodes/test-case-nodes.js.map +1 -1
- package/dist/graph/nodes/unit-audit-nodes.d.ts.map +1 -1
- package/dist/graph/nodes/unit-audit-nodes.js +1 -0
- package/dist/graph/nodes/unit-audit-nodes.js.map +1 -1
- package/dist/graph/nodes/unit-contract-node.d.ts.map +1 -1
- package/dist/graph/nodes/unit-contract-node.js +8 -0
- package/dist/graph/nodes/unit-contract-node.js.map +1 -1
- package/dist/graph/unit-artifact-probes.d.ts.map +1 -1
- package/dist/graph/unit-artifact-probes.js +3 -1
- package/dist/graph/unit-artifact-probes.js.map +1 -1
- package/dist/harness/catalog/gate-rules.yaml +1 -1
- package/dist/harness/gates/audit-report-verification.d.ts +2 -0
- package/dist/harness/gates/audit-report-verification.d.ts.map +1 -1
- package/dist/harness/gates/audit-report-verification.js +8 -3
- package/dist/harness/gates/audit-report-verification.js.map +1 -1
- package/dist/harness/gates/delivery-checklist.d.ts.map +1 -1
- package/dist/harness/gates/delivery-checklist.js +9 -1
- package/dist/harness/gates/delivery-checklist.js.map +1 -1
- package/dist/harness/gates/in-run-decision-check.d.ts.map +1 -1
- package/dist/harness/gates/in-run-decision-check.js +10 -3
- package/dist/harness/gates/in-run-decision-check.js.map +1 -1
- package/dist/harness/journey.d.ts +21 -0
- package/dist/harness/journey.d.ts.map +1 -1
- package/dist/harness/journey.js +61 -11
- package/dist/harness/journey.js.map +1 -1
- package/dist/harness/next-step.d.ts +16 -0
- package/dist/harness/next-step.d.ts.map +1 -1
- package/dist/harness/next-step.js +14 -0
- package/dist/harness/next-step.js.map +1 -1
- package/dist/hooks/guard-tty-spoof-rule.d.ts +3 -2
- package/dist/hooks/guard-tty-spoof-rule.d.ts.map +1 -1
- package/dist/hooks/guard-tty-spoof-rule.js +2 -2
- package/dist/hooks/guard-tty-spoof-rule.js.map +1 -1
- package/dist/hooks/hand-back-core.d.ts +5 -2
- package/dist/hooks/hand-back-core.d.ts.map +1 -1
- package/dist/hooks/hand-back-core.js +10 -4
- package/dist/hooks/hand-back-core.js.map +1 -1
- package/dist/hooks/session-start-unit-state-hook.d.ts +2 -1
- package/dist/hooks/session-start-unit-state-hook.d.ts.map +1 -1
- package/dist/hooks/session-start-unit-state-hook.js +4 -1
- package/dist/hooks/session-start-unit-state-hook.js.map +1 -1
- package/dist/hooks/stop-next-step-hook.d.ts.map +1 -1
- package/dist/hooks/stop-next-step-hook.js +1 -0
- package/dist/hooks/stop-next-step-hook.js.map +1 -1
- package/dist/orchestrator/templates/ai-src/commands/delivery.md +2 -0
- package/dist/orchestrator/templates/ai-src/commands/review.md +2 -0
- package/dist/orchestrator/templates/ai-src/partials/waiting-for-you.claude.md +11 -0
- package/dist/orchestrator/templates/ai-src/partials/waiting-for-you.codex.md +11 -0
- package/dist/orchestrator/templates/ai-src/partials/waiting-for-you.copilot.md +11 -0
- package/package.json +3 -3
- package/src/cli/case-triage-hint.ts +31 -0
- package/src/cli/commands/contract-derive-command.ts +3 -1
- package/src/cli/commands/contract.ts +5 -2
- package/src/cli/commands/delivery.ts +49 -16
- package/src/cli/commands/gate.ts +2 -1
- package/src/cli/commands/generate.ts +13 -2
- package/src/cli/commands/journey.ts +4 -2
- package/src/cli/commands/next.ts +30 -9
- package/src/cli/commands/triage.ts +5 -3
- package/src/cli/commands/update.ts +6 -2
- package/src/cli/index.ts +4 -0
- package/src/cli/json-error-on-exit.ts +72 -0
- package/src/cli/project-sungen-invocation.ts +20 -0
- package/src/cli/run-command-hints.ts +47 -0
- package/src/cli/waiting-for-you-block.ts +27 -0
- package/src/contract/derive-free-feature.ts +21 -0
- package/src/decisions/legacy-waiver-migration.ts +5 -1
- package/src/exporters/csv-exporter.ts +12 -4
- package/src/exporters/matrix/export.ts +11 -4
- package/src/exporters/xlsx-exporter.ts +5 -4
- package/src/graph/board-human-actions.ts +80 -0
- package/src/graph/evaluate-graph.ts +39 -8
- package/src/graph/human-action.ts +33 -0
- package/src/graph/node-decl.ts +11 -0
- package/src/graph/nodes/test-case-contract-nodes.ts +20 -4
- package/src/graph/nodes/test-case-nodes.ts +19 -5
- package/src/graph/nodes/unit-audit-nodes.ts +2 -1
- package/src/graph/nodes/unit-contract-node.ts +12 -1
- package/src/graph/unit-artifact-probes.ts +3 -1
- package/src/harness/catalog/gate-rules.yaml +1 -1
- package/src/harness/gates/audit-report-verification.ts +7 -2
- package/src/harness/gates/delivery-checklist.ts +11 -1
- package/src/harness/gates/in-run-decision-check.ts +11 -4
- package/src/harness/journey.ts +79 -8
- package/src/harness/next-step.ts +27 -1
- package/src/hooks/guard-tty-spoof-rule.ts +5 -4
- package/src/hooks/hand-back-core.ts +11 -5
- package/src/hooks/session-start-unit-state-hook.ts +4 -1
- package/src/hooks/stop-next-step-hook.ts +1 -0
- package/src/orchestrator/templates/ai-src/commands/delivery.md +2 -0
- package/src/orchestrator/templates/ai-src/commands/review.md +2 -0
- package/src/orchestrator/templates/ai-src/partials/waiting-for-you.claude.md +11 -0
- package/src/orchestrator/templates/ai-src/partials/waiting-for-you.codex.md +11 -0
- package/src/orchestrator/templates/ai-src/partials/waiting-for-you.copilot.md +11 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/exporters/matrix/export.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEH,0CAoCC;AAUD,sCA4CC;
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/exporters/matrix/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import ExcelJS from 'exceljs';
|
|
15
15
|
import { ApiCatalogEntry, ApiDetailRow, ScreenSummary, TestCaseRow } from './types';
|
|
16
|
+
import { DeliverableFileOptions } from './csv-exporter';
|
|
16
17
|
import { addApiDetailSheet } from './xlsx-report-builder';
|
|
17
18
|
export { addApiDetailSheet };
|
|
18
19
|
/**
|
|
@@ -70,8 +71,8 @@ export declare function buildApiDetailRows(catalog: Record<string, ApiCatalogEnt
|
|
|
70
71
|
* to force the base (no suffix) variant.
|
|
71
72
|
*/
|
|
72
73
|
/** Where `writeXlsx` puts a unit's workbook — shared so a reader targets the identical file. */
|
|
73
|
-
export declare function deliverableXlsxPath(cwd: string, screen: string, locale?: string | null): string;
|
|
74
|
-
export declare function writeXlsx(cwd: string, screen: string, wb: ExcelJS.Workbook, locale?: string | null): Promise<string>;
|
|
74
|
+
export declare function deliverableXlsxPath(cwd: string, screen: string, locale?: string | null, opts?: DeliverableFileOptions): string;
|
|
75
|
+
export declare function writeXlsx(cwd: string, screen: string, wb: ExcelJS.Workbook, locale?: string | null, opts?: DeliverableFileOptions): Promise<string>;
|
|
75
76
|
/**
|
|
76
77
|
* Post-process the workbook buffer: extend `<a:picLocks>` on every drawing
|
|
77
78
|
* with `noMove`, `noResize`, `noSelect`. Combined with the sheet protection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx-exporter.d.ts","sourceRoot":"","sources":["../../src/exporters/xlsx-exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"xlsx-exporter.d.ts","sourceRoot":"","sources":["../../src/exporters/xlsx-exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEpF,OAAO,EAAuB,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAM7E,OAAO,EAIL,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC,uDAAuD;IACvD,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,WAAW,EAAE,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,gBAAgB,GAC3B,OAAO,CAAC,QAAQ,CAMlB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,QAAQ,CAE5E;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACxC,SAAS,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,GACnC,YAAY,EAAE,CAMhB;AAED;;;;GAIG;AACH;;;;GAIG;AACH,gGAAgG;AAChG,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,GAAE,sBAA2B,GAAG,MAAM,CAElI;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,OAAO,CAAC,QAAQ,EACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBxE"}
|
|
@@ -98,11 +98,11 @@ function buildApiDetailRows(catalog, scenarios) {
|
|
|
98
98
|
* to force the base (no suffix) variant.
|
|
99
99
|
*/
|
|
100
100
|
/** Where `writeXlsx` puts a unit's workbook — shared so a reader targets the identical file. */
|
|
101
|
-
function deliverableXlsxPath(cwd, screen, locale) {
|
|
102
|
-
return path.join(cwd, 'qa', 'deliverables', `${(0, csv_exporter_1.deliverableBasename)(screen, locale)}.xlsx`);
|
|
101
|
+
function deliverableXlsxPath(cwd, screen, locale, opts = {}) {
|
|
102
|
+
return path.join(cwd, 'qa', 'deliverables', `${(0, csv_exporter_1.deliverableBasename)(screen, locale, opts)}.xlsx`);
|
|
103
103
|
}
|
|
104
|
-
async function writeXlsx(cwd, screen, wb, locale) {
|
|
105
|
-
const outPath = deliverableXlsxPath(cwd, screen, locale);
|
|
104
|
+
async function writeXlsx(cwd, screen, wb, locale, opts = {}) {
|
|
105
|
+
const outPath = deliverableXlsxPath(cwd, screen, locale, opts);
|
|
106
106
|
const outDir = path.dirname(outPath);
|
|
107
107
|
if (!fs.existsSync(outDir))
|
|
108
108
|
fs.mkdirSync(outDir, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx-exporter.js","sourceRoot":"","sources":["../../src/exporters/xlsx-exporter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCH,gCAWC;AAqBD,oDAEC;AAYD,gDASC;AAaD,kDAEC;AAED,
|
|
1
|
+
{"version":3,"file":"xlsx-exporter.js","sourceRoot":"","sources":["../../src/exporters/xlsx-exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { UnitState } from '../harness/next-step';
|
|
2
|
+
import type { HumanAction } from './human-action';
|
|
3
|
+
/** The board's and the delivery's asks of a human for this unit. `cut`: the frontier stopped at a blocking node. */
|
|
4
|
+
export declare function boardHumanActions(projectRoot: string, unitDir: string, s: UnitState, cut: boolean): HumanAction[];
|
|
5
|
+
//# sourceMappingURL=board-human-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-human-actions.d.ts","sourceRoot":"","sources":["../../src/graph/board-human-actions.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAiDlD,oHAAoH;AACpH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,WAAW,EAAE,CASjH"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.boardHumanActions = boardHumanActions;
|
|
4
|
+
/**
|
|
5
|
+
* The human-only actions the graph does not hold ("Waiting for you", #954) — asked by the journey
|
|
6
|
+
* board and the delivery's decision check, read through THEIR functions (never restated here):
|
|
7
|
+
*
|
|
8
|
+
* waive a waiver the board re-surfaces: stale (the audit changed since) or untrusted (not
|
|
9
|
+
* in git HEAD) — readJourneyHumanAsks, the reconcile `runJourney` commits
|
|
10
|
+
* decide a gate-override that relaxes nothing because no human confirmed it (ineffective) —
|
|
11
|
+
* re-recorded with `journey --decide`, superseding it (loadUnitGateOverrides)
|
|
12
|
+
* signoff every other obligation holds — assertCanSignOff, as `journey --signoff` checks it
|
|
13
|
+
* accept-in-run a decision recorded during the run — evaluateDeliveryDecisions, as `delivery` runs it
|
|
14
|
+
* The sign-off and accept-in-run only once the frontier was not cut (the unit has run and nothing
|
|
15
|
+
* blocks before it). Read-only and advisory: whatever cannot be read adds nothing.
|
|
16
|
+
*/
|
|
17
|
+
const human_confirmation_1 = require("../decisions/human-confirmation");
|
|
18
|
+
const legacy_waiver_migration_1 = require("../decisions/legacy-waiver-migration");
|
|
19
|
+
const delivery_decision_gate_1 = require("../harness/gates/delivery-decision-gate");
|
|
20
|
+
const in_run_decision_check_1 = require("../harness/gates/in-run-decision-check");
|
|
21
|
+
const unit_gate_overrides_1 = require("../harness/gates/unit-gate-overrides");
|
|
22
|
+
const journey_1 = require("../harness/journey");
|
|
23
|
+
const unit_artifact_probes_1 = require("./unit-artifact-probes");
|
|
24
|
+
function journeyActions(projectRoot, s, cut) {
|
|
25
|
+
const asks = (0, journey_1.readJourneyHumanAsks)(projectRoot, s.unit);
|
|
26
|
+
const out = asks.redecide.map((w) => ({
|
|
27
|
+
kind: 'waive',
|
|
28
|
+
command: (0, legacy_waiver_migration_1.waiveCommand)(s.unit, w.obligation, w.reason),
|
|
29
|
+
reason: w.why === 'stale'
|
|
30
|
+
? `the waiver on "${w.title}" is stale — the evidence changed since it was given, so it no longer counts; if it still holds, a human gives it again on a terminal (or repair the obligation)`
|
|
31
|
+
: `the waiver on "${w.title}" is not in git HEAD (decision.in-run), so it is not counted — if it is yours, confirm it on a terminal`,
|
|
32
|
+
}));
|
|
33
|
+
if (!cut && asks.canSignOff && asks.signoff.status !== 'given') {
|
|
34
|
+
out.push({
|
|
35
|
+
kind: 'signoff',
|
|
36
|
+
command: (0, journey_1.signoffCommand)(s.unit),
|
|
37
|
+
reason: asks.signoff.status === 'stale'
|
|
38
|
+
? `the sign-off of ${asks.signoff.at} is stale — the suite changed since; review the queue (\`sungen journey --screen ${s.unit}\`) and sign off again`
|
|
39
|
+
: `every other obligation is satisfied or waived — the human sign-off is the one gate \`sungen gate --phase deliver\` still waits on; review the queue (\`sungen journey --screen ${s.unit}\`, ${asks.report.needsYou.length} item(s)), then sign`,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return out;
|
|
43
|
+
}
|
|
44
|
+
function unconfirmedOverrides(projectRoot, unitDir, s) {
|
|
45
|
+
return (0, unit_gate_overrides_1.loadUnitGateOverrides)(projectRoot, (0, unit_gate_overrides_1.unitScopeOfDir)(projectRoot, unitDir)).ineffective.map((o) => {
|
|
46
|
+
const { humanAccepted: _ignored, ...payload } = o.entry.payload ?? {};
|
|
47
|
+
return {
|
|
48
|
+
kind: 'decide',
|
|
49
|
+
command: (0, human_confirmation_1.formatCommand)(['sungen', 'journey', '--screen', s.unit, '--decide', 'gate-override', '--text', o.entry.text, '--reason', o.entry.reason,
|
|
50
|
+
'--payload', JSON.stringify(payload), '--supersedes', o.decisionId]),
|
|
51
|
+
reason: `the gate-override ${o.decisionId}${o.rule ? ` (${o.rule})` : ''} relaxes nothing: ${o.reason} — if it is meant, a human records it again on a terminal, superseding it`,
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function inRunActions(projectRoot, unitDir, s) {
|
|
56
|
+
const files = (0, unit_artifact_probes_1.unitResultFiles)(projectRoot, s.unit);
|
|
57
|
+
const refs = (files.length ? files : [null]).map((resultsPath) => ({ label: s.unit, unitName: s.unit, unitDir, resultsPath }));
|
|
58
|
+
const inRun = (0, delivery_decision_gate_1.evaluateDeliveryDecisions)(projectRoot, refs).inRun;
|
|
59
|
+
if (!inRun.length)
|
|
60
|
+
return [];
|
|
61
|
+
const which = inRun.slice(0, 3).map((d) => `${d.kind} ${d.id}`).join(', ');
|
|
62
|
+
return [{
|
|
63
|
+
kind: 'accept-in-run',
|
|
64
|
+
command: (0, human_confirmation_1.formatCommand)(['sungen', 'delivery', s.unit, '--accept-in-run']),
|
|
65
|
+
reason: `${inRun.length} decision(s) recorded during the run (${in_run_decision_check_1.IN_RUN_RULE}): ${which}${inRun.length > 3 ? ', …' : ''} — \`sungen delivery\` refuses them until they are committed through review and the tests re-run, or a human accepts them on a terminal`,
|
|
66
|
+
}];
|
|
67
|
+
}
|
|
68
|
+
/** The board's and the delivery's asks of a human for this unit. `cut`: the frontier stopped at a blocking node. */
|
|
69
|
+
function boardHumanActions(projectRoot, unitDir, s, cut) {
|
|
70
|
+
const out = [];
|
|
71
|
+
const add = (read) => {
|
|
72
|
+
try {
|
|
73
|
+
out.push(...read());
|
|
74
|
+
}
|
|
75
|
+
catch { /* advisory: an unreadable board or decision adds nothing */ }
|
|
76
|
+
};
|
|
77
|
+
add(() => journeyActions(projectRoot, s, cut));
|
|
78
|
+
add(() => unconfirmedOverrides(projectRoot, unitDir, s));
|
|
79
|
+
if (!cut)
|
|
80
|
+
add(() => inRunActions(projectRoot, unitDir, s));
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=board-human-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-human-actions.js","sourceRoot":"","sources":["../../src/graph/board-human-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,12 @@
|
|
|
11
11
|
* `--case <id>` (`testCase` option): the frontier is that case's test-case nodes plus the blocking
|
|
12
12
|
* unit nodes before them; non-blocking unit advice is left to the unit view. A `caseOnly` test-case
|
|
13
13
|
* node speaks only there (its unit-level decision is in the unit view already).
|
|
14
|
+
*
|
|
15
|
+
* evaluateHumanActions reads the SAME walk for "Waiting for you" (#954): the human-only actions behind
|
|
16
|
+
* the offered steps, and whether the walk was cut.
|
|
14
17
|
*/
|
|
15
18
|
import type { NextStep, UnitState } from '../harness/next-step';
|
|
19
|
+
import type { HumanAction } from './human-action';
|
|
16
20
|
import type { NodeDecl } from './node-decl';
|
|
17
21
|
import type { TestCaseState } from './test-case-state-shape';
|
|
18
22
|
export interface EvaluateOptions {
|
|
@@ -20,4 +24,18 @@ export interface EvaluateOptions {
|
|
|
20
24
|
testCase?: string;
|
|
21
25
|
}
|
|
22
26
|
export declare function evaluateGraph(nodes: readonly NodeDecl[], s: UnitState, tcStates?: TestCaseState[], opts?: EvaluateOptions): NextStep[];
|
|
27
|
+
/**
|
|
28
|
+
* The HUMAN-ONLY actions of the same frontier ("Waiting for you", #954) — never a second walk with
|
|
29
|
+
* rules of its own: each offered step's node says what a person runs (its `human` hook), and a decide
|
|
30
|
+
* step without one is its own command. `cut`: an open blocking node ended the walk, so only what does
|
|
31
|
+
* not depend on it is offered (a hard verdict that surfaces past the cut), and the board's asks that
|
|
32
|
+
* need the unit past it (sign-off, accept-in-run) wait; `heldBy` is that node's title and `heldByCommand`
|
|
33
|
+
* its offered step's command (#966: "More appear once …" names what to run).
|
|
34
|
+
*/
|
|
35
|
+
export declare function evaluateHumanActions(nodes: readonly NodeDecl[], s: UnitState, tcStates?: TestCaseState[]): {
|
|
36
|
+
actions: HumanAction[];
|
|
37
|
+
cut: boolean;
|
|
38
|
+
heldBy?: string;
|
|
39
|
+
heldByCommand?: string;
|
|
40
|
+
};
|
|
23
41
|
//# sourceMappingURL=evaluate-graph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-graph.d.ts","sourceRoot":"","sources":["../../src/graph/evaluate-graph.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"evaluate-graph.d.ts","sourceRoot":"","sources":["../../src/graph/evaluate-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAkDD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,aAAa,EAAE,EAAE,IAAI,GAAE,eAAoB,GAC/F,QAAQ,EAAE,CAEZ;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,aAAa,EAAE,GAAG;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAO5L"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.evaluateGraph = evaluateGraph;
|
|
4
|
+
exports.evaluateHumanActions = evaluateHumanActions;
|
|
4
5
|
function withMeta(node, core, testCase) {
|
|
5
6
|
return {
|
|
6
7
|
...core,
|
|
@@ -16,17 +17,20 @@ function openCases(node, s, tcStates, only) {
|
|
|
16
17
|
return [];
|
|
17
18
|
return tcStates.filter((tc) => (!only || tc.id === only) && node.active(s, tc) && !node.satisfied(s, tc));
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
+
/** The walk both answers share: the offered steps in rank order, and whether an open blocking node cut it. */
|
|
21
|
+
function walkFrontier(nodes, s, tcStates, opts) {
|
|
20
22
|
const ordered = [...nodes].sort((a, b) => a.rank - b.rank);
|
|
21
23
|
const open = new Set();
|
|
22
|
-
const
|
|
24
|
+
const offered = [];
|
|
23
25
|
let cut = false;
|
|
26
|
+
let cutBy;
|
|
24
27
|
for (const node of ordered) {
|
|
25
28
|
if (!node.appliesTo.includes(s.kind) || (node.granularity === 'test-case' && node.caseOnly && !opts.testCase))
|
|
26
29
|
continue;
|
|
27
30
|
if (cut && !node.surfacesPastCut)
|
|
28
31
|
continue;
|
|
29
32
|
let step = null;
|
|
33
|
+
let cases = [];
|
|
30
34
|
if (node.granularity === 'unit') {
|
|
31
35
|
if (!node.active(s) || node.satisfied(s) || (cut && !node.surfacesPastCut(s)))
|
|
32
36
|
continue;
|
|
@@ -34,7 +38,7 @@ function evaluateGraph(nodes, s, tcStates, opts = {}) {
|
|
|
34
38
|
step = withMeta(node, node.step(s));
|
|
35
39
|
}
|
|
36
40
|
else {
|
|
37
|
-
|
|
41
|
+
cases = openCases(node, s, tcStates, opts.testCase).filter((tc) => !cut || node.surfacesPastCut(s, tc));
|
|
38
42
|
if (!cases.length)
|
|
39
43
|
continue;
|
|
40
44
|
const single = Boolean(opts.testCase);
|
|
@@ -43,10 +47,31 @@ function evaluateGraph(nodes, s, tcStates, opts = {}) {
|
|
|
43
47
|
open.add(node.id);
|
|
44
48
|
const ready = node.requires.every((r) => !open.has(r));
|
|
45
49
|
if (step && (cut || ready || !node.blocking))
|
|
46
|
-
|
|
47
|
-
if (node.blocking && !cut)
|
|
50
|
+
offered.push({ node, step, cases });
|
|
51
|
+
if (node.blocking && !cut) {
|
|
48
52
|
cut = true;
|
|
53
|
+
cutBy = node;
|
|
54
|
+
}
|
|
49
55
|
}
|
|
50
|
-
return
|
|
56
|
+
return { offered, cut, ...(cutBy ? { cutBy } : {}) };
|
|
57
|
+
}
|
|
58
|
+
function evaluateGraph(nodes, s, tcStates, opts = {}) {
|
|
59
|
+
return walkFrontier(nodes, s, tcStates, opts).offered.map((o) => o.step);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The HUMAN-ONLY actions of the same frontier ("Waiting for you", #954) — never a second walk with
|
|
63
|
+
* rules of its own: each offered step's node says what a person runs (its `human` hook), and a decide
|
|
64
|
+
* step without one is its own command. `cut`: an open blocking node ended the walk, so only what does
|
|
65
|
+
* not depend on it is offered (a hard verdict that surfaces past the cut), and the board's asks that
|
|
66
|
+
* need the unit past it (sign-off, accept-in-run) wait; `heldBy` is that node's title and `heldByCommand`
|
|
67
|
+
* its offered step's command (#966: "More appear once …" names what to run).
|
|
68
|
+
*/
|
|
69
|
+
function evaluateHumanActions(nodes, s, tcStates) {
|
|
70
|
+
const { offered, cut, cutBy } = walkFrontier(nodes, s, tcStates, {});
|
|
71
|
+
const actions = offered.flatMap(({ node, step, cases }) => (node.human
|
|
72
|
+
? node.human(s, step, cases)
|
|
73
|
+
: step.kind === 'decide' ? [{ command: step.command, reason: step.because, kind: 'decide' }] : []));
|
|
74
|
+
const heldByCommand = cutBy ? offered.find((o) => o.node === cutBy)?.step.command : undefined;
|
|
75
|
+
return { actions, cut, ...(cutBy ? { heldBy: cutBy.title } : {}), ...(heldByCommand ? { heldByCommand } : {}) };
|
|
51
76
|
}
|
|
52
77
|
//# sourceMappingURL=evaluate-graph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-graph.js","sourceRoot":"","sources":["../../src/graph/evaluate-graph.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"evaluate-graph.js","sourceRoot":"","sources":["../../src/graph/evaluate-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A HUMAN-ONLY action of a unit — what `sungen next` lists under "Waiting for you" (#954) and `--json`
|
|
3
|
+
* carries as `humanActions`. An agent presents these and never runs them: they approve, sign, waive,
|
|
4
|
+
* classify or accept something on a person's behalf, and most refuse without a typed confirmation.
|
|
5
|
+
*
|
|
6
|
+
* `command` is canonical (`sungen …`, or a slash command); the text renders it as the project runs
|
|
7
|
+
* sungen (`npx sungen` with a local install). Placeholders a human fills are quoted (`"<name>"`, `"…"`)
|
|
8
|
+
* so a copied command never turns into a shell redirection.
|
|
9
|
+
*/
|
|
10
|
+
export type HumanActionKind = 'contract-approve' | 'accept-opaque' | 'contract-commit' | 'contract-review' | 'accept-viewpoint' | 'defect-draft' | 'rerun-environment' | 'triage-classify' | 'signoff' | 'waive' | 'decide' | 'accept-in-run';
|
|
11
|
+
export interface HumanAction {
|
|
12
|
+
command: string;
|
|
13
|
+
reason: string;
|
|
14
|
+
kind: HumanActionKind;
|
|
15
|
+
/**
|
|
16
|
+
* `command` is an instruction a person carries out by hand (commit through review, restore from git),
|
|
17
|
+
* not a command line to copy — the block marks it so, and never renders it as one.
|
|
18
|
+
*/
|
|
19
|
+
instruction?: true;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=human-action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"human-action.d.ts","sourceRoot":"","sources":["../../src/graph/human-action.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GACvB,kBAAkB,GAClB,eAAe,GACf,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,cAAc,GACd,mBAAmB,GACnB,iBAAiB,GACjB,SAAS,GACT,OAAO,GACP,QAAQ,GACR,eAAe,CAAC;AAEpB,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"human-action.js","sourceRoot":"","sources":["../../src/graph/human-action.ts"],"names":[],"mappings":""}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* `sungen next <unit> --case <id>`).
|
|
12
12
|
*/
|
|
13
13
|
import type { NextStep, UnitState } from '../harness/next-step';
|
|
14
|
+
import type { HumanAction, HumanActionKind } from './human-action';
|
|
14
15
|
import type { TestCaseState } from './test-case-state-shape';
|
|
15
16
|
export type NodeActor = 'ai' | 'human' | 'deterministic';
|
|
16
17
|
export type NodeGranularity = 'unit' | 'test-case';
|
|
@@ -32,7 +33,15 @@ interface NodeDeclBase {
|
|
|
32
33
|
gates: readonly string[];
|
|
33
34
|
/** Artifacts the step produces, for a reader of the graph. */
|
|
34
35
|
produces: readonly string[];
|
|
36
|
+
/**
|
|
37
|
+
* The HUMAN-ONLY actions behind an offered step ("Waiting for you", #954): what a person runs, with
|
|
38
|
+
* why. Without it a `decide` step is one action of kind `decide` and any other step is none. `cases`
|
|
39
|
+
* are the cases open at a test-case node (none for a unit node).
|
|
40
|
+
*/
|
|
41
|
+
human?(s: UnitState, step: StepCore, cases: TestCaseState[]): HumanAction[];
|
|
35
42
|
}
|
|
43
|
+
/** The `human` hook of a node whose decide step IS the human action: its command and reason, under `kind`. */
|
|
44
|
+
export declare const humanStep: (kind: HumanActionKind) => (_s: UnitState, step: StepCore) => HumanAction[];
|
|
36
45
|
export interface UnitNodeDecl extends NodeDeclBase {
|
|
37
46
|
granularity: 'unit';
|
|
38
47
|
active(s: UnitState): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-decl.d.ts","sourceRoot":"","sources":["../../src/graph/node-decl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,eAAe,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,CAAC;AACnD,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAEzC,kGAAkG;AAClG,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;AAEtE,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC/B,mGAAmG;IACnG,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"node-decl.d.ts","sourceRoot":"","sources":["../../src/graph/node-decl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,eAAe,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,CAAC;AACnD,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAEzC,kGAAkG;AAClG,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;AAEtE,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC/B,mGAAmG;IACnG,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B;;;;OAIG;IACH,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,CAAC;CAC7E;AAED,8GAA8G;AAC9G,eAAO,MAAM,SAAS,GAAI,MAAM,eAAe,MAAM,IAAI,SAAS,EAAE,MAAM,QAAQ,KAAG,WAAW,EACvC,CAAC;AAE1D,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACjC,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B;;;OAGG;IACH,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,WAAW,EAAE,WAAW,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC;IACjD,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC;IACpD,0GAA0G;IAC1G,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IACtE,4EAA4E;IAC5E,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC;CAC5D;AAED,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,gBAAgB,CAAC;AAEvD,iEAAiE;AACjE,eAAO,MAAM,WAAW,GAAI,MAAM,QAAQ,KAAG,MAA6E,CAAC;AAE3H,eAAO,MAAM,SAAS,EAAE,SAAS,QAAQ,EAA8B,CAAC"}
|
package/dist/graph/node-decl.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ALL_KINDS = exports.unitKindDir = void 0;
|
|
3
|
+
exports.ALL_KINDS = exports.unitKindDir = exports.humanStep = void 0;
|
|
4
|
+
/** The `human` hook of a node whose decide step IS the human action: its command and reason, under `kind`. */
|
|
5
|
+
const humanStep = (kind) => (_s, step) => [{ command: step.command, reason: step.because, kind }];
|
|
6
|
+
exports.humanStep = humanStep;
|
|
4
7
|
/** `qa/<dir>/<unit>` for the unit kind, as the steps name it. */
|
|
5
8
|
const unitKindDir = (kind) => (kind === 'screen' ? 'screens' : kind === 'flow' ? 'flows' : 'api');
|
|
6
9
|
exports.unitKindDir = unitKindDir;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-decl.js","sourceRoot":"","sources":["../../src/graph/node-decl.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"node-decl.js","sourceRoot":"","sources":["../../src/graph/node-decl.ts"],"names":[],"mappings":";;;AA8CA,8GAA8G;AACvG,MAAM,SAAS,GAAG,CAAC,IAAqB,EAAE,EAAE,CAAC,CAAC,EAAa,EAAE,IAAc,EAAiB,EAAE,CACnG,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAD7C,QAAA,SAAS,aACoC;AA+B1D,iEAAiE;AAC1D,MAAM,WAAW,GAAG,CAAC,IAAc,EAAU,EAAE,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAA9G,QAAA,WAAW,eAAmG;AAE9G,QAAA,SAAS,GAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-case-contract-nodes.d.ts","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-contract-nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"test-case-contract-nodes.d.ts","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-contract-nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAkC,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAqDhF,eAAO,MAAM,wBAAwB,EAAE,SAAS,gBAAgB,EAkB/D,CAAC"}
|
|
@@ -27,7 +27,7 @@ const classOf = (tc) => tc.contract?.class;
|
|
|
27
27
|
/** Up to three cases with the finding behind each. */
|
|
28
28
|
const withDetail = (cases) => `${cases.slice(0, 3).map((c) => (c.contract?.detail ? `${c.id}: ${c.contract.detail}` : c.id)).join('; ')}${cases.length > 3 ? '; …' : ''}`;
|
|
29
29
|
const check = (s, trace = false) => `sungen contract check --screen ${s.unit}${trace ? ' --trace' : ''}`;
|
|
30
|
-
function contractNode(id, rank, title, actor, gates, caseOnly, active, step, hard) {
|
|
30
|
+
function contractNode(id, rank, title, actor, gates, caseOnly, active, step, hard, human) {
|
|
31
31
|
return {
|
|
32
32
|
id, title, actor, granularity: 'test-case', appliesTo: node_decl_1.ALL_KINDS, blocking: false, rank, gates, step,
|
|
33
33
|
requires: caseOnly ? ['unit.gate-fail'] : ['unit.run'], produces: ['contracts.lock.yaml', 'decisions/<id>.yaml'],
|
|
@@ -35,8 +35,21 @@ function contractNode(id, rank, title, actor, gates, caseOnly, active, step, har
|
|
|
35
35
|
active: (_s, tc) => active(tc),
|
|
36
36
|
satisfied: (_s, tc) => (0, test_case_satisfied_1.exemptionOf)(tc) !== null,
|
|
37
37
|
...(hard ? { surfacesPastCut: (_s, tc) => hard(tc) } : {}),
|
|
38
|
+
...(human ? { human } : {}),
|
|
38
39
|
};
|
|
39
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* An opaque step is cleared by a QA accepting it as it reads now, never by re-approving (#923): one
|
|
43
|
+
* `--accept-opaque` per case whose only hold is the opaque step. A case held by a `low` identity is
|
|
44
|
+
* not acceptable yet (`contract check --trace` resolves it first), so it is not offered (#954).
|
|
45
|
+
*/
|
|
46
|
+
function acceptOpaque(s, _step, cases) {
|
|
47
|
+
return cases.filter((c) => classOf(c) === 'opaque' && !c.contract?.lowIdentity).map((c) => ({
|
|
48
|
+
kind: 'accept-opaque',
|
|
49
|
+
command: `sungen contract approve --screen ${s.unit} --scenario ${c.id} --accept-opaque`,
|
|
50
|
+
reason: `${c.id} carries a step sungen cannot compare${c.contract?.detail ? ` (${c.contract.detail})` : ''} — a QA reviews it verbatim with its file:line in \`${check(s)}\`, then accepts it as it reads now; until then the contract is in review and \`sungen delivery\` waits`,
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
40
53
|
const conformanceStep = (s, cases) => {
|
|
41
54
|
const low = cases.filter((c) => c.contract?.lowIdentity);
|
|
42
55
|
if (low.length) {
|
|
@@ -49,11 +62,11 @@ const conformanceStep = (s, cases) => {
|
|
|
49
62
|
return { kind: 'decide', command: check(s), because: `${cases.length} free / impl:code test case(s) carry a step sungen cannot compare (${withDetail(cases)}) — a QA reviews it in \`sungen contract check\`; until then the contract is in review and \`sungen delivery\` waits. An agent presents this and never approves it` };
|
|
50
63
|
};
|
|
51
64
|
exports.TEST_CASE_CONTRACT_NODES = [
|
|
52
|
-
contractNode('tc.contract-approve', 106, 'Re-approve this changed case', 'human', ['contract.hash-changed'], true, (tc) => classOf(tc) === 'hash-changed' && !tc.contract?.uncommitted, (s, [c]) => ({ kind: 'decide', command: `sungen contract approve --screen ${s.unit} --scenario ${c.id}`, because: `this case changed since QA approved it, not weaker${c.contract?.detail ? ` (${c.contract.detail})` : ''} — a QA re-approves this scenario on a terminal; until then review blocks \`sungen delivery\`. An agent presents it and never approves its own edit` })),
|
|
65
|
+
contractNode('tc.contract-approve', 106, 'Re-approve this changed case', 'human', ['contract.hash-changed'], true, (tc) => classOf(tc) === 'hash-changed' && !tc.contract?.uncommitted, (s, [c]) => ({ kind: 'decide', command: `sungen contract approve --screen ${s.unit} --scenario ${c.id}`, because: `this case changed since QA approved it, not weaker${c.contract?.detail ? ` (${c.contract.detail})` : ''} — a QA re-approves this scenario on a terminal; until then review blocks \`sungen delivery\`. An agent presents it and never approves its own edit` }), undefined, (0, node_decl_1.humanStep)('contract-approve')),
|
|
53
66
|
contractNode('tc.contract-check', 107, 'Restore the approved check of this case', 'human', ['contract.oracle-weakened', 'contract.target-changed', 'contract.assertion-lost', 'contract.lock-uncommitted'], true, (tc) => Boolean(tc.contract?.uncommitted) || HARD_LADDER.has(classOf(tc) ?? ''), (s, [c]) => ({ kind: 'blocked', command: check(s), because: c.contract?.uncommitted
|
|
54
67
|
? `its lock entry is not what QA approved and committed (contract.lock-uncommitted) — \`sungen next ${s.unit}\` names the repair; \`sungen delivery\` is blocked until then`
|
|
55
68
|
: `this case breaks its approved contract (${c.contract?.class}${c.contract?.detail ? `: ${c.contract.detail}` : ''}) — restore the approved check (in the .feature, or in the hand-written test of a free / impl:code case), or a QA approves the change on a terminal (\`sungen contract approve --screen ${s.unit} --scenario ${c.id}\`). \`sungen delivery\` is blocked until then; never weaken an expected value to go green` }), (tc) => Boolean(tc.contract?.uncommitted) || HARD_LADDER.has(classOf(tc) ?? '')),
|
|
56
69
|
contractNode('tc.unproven', 136, 'Prove the approved free cases with a trace', 'ai', ['contract.unproven'], false, (tc) => classOf(tc) === 'unproven', (s, cases) => ({ kind: 'do', command: `/sungen:run-test ${s.unit}${(0, test_case_nodes_1.idsArg)(cases)}`, because: `${cases.length} approved free / impl:code test case(s) have no trace that proves them (${withDetail(cases)}) — run them again with trace: 'on' and the sungen run-record reporter (run-test Phase 4 does), then \`${check(s, true)}\`. Until then \`sungen contract check\` fails (contract.unproven) and \`sungen delivery\` is blocked; re-approving or editing the .feature cannot prove them` }), (tc) => classOf(tc) === 'unproven'),
|
|
57
|
-
contractNode('tc.conformance', 138, 'Settle the traces in review', 'ai', ['contract.opaque-step', 'contract.inconclusive'], false, (tc) => classOf(tc) === 'opaque' || classOf(tc) === 'inconclusive', conformanceStep),
|
|
70
|
+
contractNode('tc.conformance', 138, 'Settle the traces in review', 'ai', ['contract.opaque-step', 'contract.inconclusive'], false, (tc) => classOf(tc) === 'opaque' || classOf(tc) === 'inconclusive', conformanceStep, undefined, acceptOpaque),
|
|
58
71
|
];
|
|
59
72
|
//# sourceMappingURL=test-case-contract-nodes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-case-contract-nodes.js","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-contract-nodes.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,
|
|
1
|
+
{"version":3,"file":"test-case-contract-nodes.js","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-contract-nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-case-nodes.d.ts","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"test-case-nodes.d.ts","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-nodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAkC,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,eAAO,MAAM,MAAM,GAAI,OAAO,aAAa,EAAE,KAAG,MAA4F,CAAC;AAC7I,sFAAsF;AACtF,eAAO,MAAM,MAAM,GAAI,OAAO,aAAa,EAAE,KAAG,MACoE,CAAC;AA6BrH,eAAO,MAAM,eAAe,EAAE,SAAS,gBAAgB,EAoCtD,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,cAAc,GAAI,GAAG,SAAS,KAAG,MACwD,CAAC;AAEvG,8GAA8G;AAC9G,eAAO,MAAM,gBAAgB,GAAI,GAAG,SAAS,KAAG,MAAsE,CAAC"}
|
|
@@ -29,14 +29,26 @@ exports.idsArg = idsArg;
|
|
|
29
29
|
const flag = (s) => (s.kind === 'api' ? '--api' : '--screen');
|
|
30
30
|
/** Up to three cases with the triage rule that judged each. */
|
|
31
31
|
const withRule = (cases) => `${cases.slice(0, 3).map((c) => `${c.id}: ${c.triage?.ruleId}`).join('; ')}${cases.length > 3 ? '; …' : ''}`;
|
|
32
|
-
function caseNode(id, need, rank, title, actor, step, produces) {
|
|
32
|
+
function caseNode(id, need, rank, title, actor, step, produces, human) {
|
|
33
33
|
return {
|
|
34
34
|
id, title, actor, granularity: 'test-case', appliesTo: node_decl_1.ALL_KINDS, requires: ['unit.run'], blocking: false, rank,
|
|
35
35
|
gates: [], produces, step,
|
|
36
36
|
active: (_s, tc) => (0, test_case_satisfied_1.triggerOf)(tc) === need,
|
|
37
37
|
satisfied: (_s, tc) => (0, test_case_satisfied_1.exemptionOf)(tc) !== null,
|
|
38
|
+
...(human ? { human } : {}),
|
|
38
39
|
};
|
|
39
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* A red triage left unclassified is a human's to classify (#928): test-defect and environment take it
|
|
43
|
+
* off the product-defect path, so they need a person on a terminal. One action per such case (#954).
|
|
44
|
+
*/
|
|
45
|
+
function classifyByHand(s, _step, cases) {
|
|
46
|
+
return cases.filter((c) => c.triage?.class === 'unclassified').map((c) => ({
|
|
47
|
+
kind: 'triage-classify',
|
|
48
|
+
command: `sungen triage ${flag(s)} ${s.unit} --case ${c.id} --as "<test-defect|environment>" --reason "…"`,
|
|
49
|
+
reason: `${c.id} failed and \`sungen triage\` left it unclassified — read its evidence (trace, error), then classify it: test-defect or environment take it off the product-defect path, so a human types them on a terminal (\`--as product\` anyone may record)`,
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
40
52
|
exports.TEST_CASE_NODES = [
|
|
41
53
|
caseNode('tc.run', 'run', 131, 'Run the cases that never ran', 'ai', (s, cases) => ({
|
|
42
54
|
kind: 'do',
|
|
@@ -55,19 +67,19 @@ exports.TEST_CASE_NODES = [
|
|
|
55
67
|
command: `sungen triage ${flag(s)} ${s.unit}`,
|
|
56
68
|
because: `${cases.length} test case(s) failed in the latest run and are not classified yet${left ? ` (${left} left unclassified by the last triage — read its evidence and classify by hand: \`sungen triage ${flag(s)} ${s.unit} --case <id> --as product|test-defect|environment --reason "…"\`; test-defect and environment are a human's call, on a terminal)` : ''} — classify each (known defect, test defect, environment, product candidate) before exporting or extending: an unexplained red in the deliverable is a finding nobody has judged`,
|
|
57
69
|
};
|
|
58
|
-
}, ['.sungen/triage/<unit>.json']),
|
|
70
|
+
}, ['.sungen/triage/<unit>.json'], classifyByHand),
|
|
59
71
|
caseNode('tc.product-candidate', 'product-candidate', 134, 'Decide on the product-defect candidates', 'human', (s, cases, single) => ({
|
|
60
72
|
kind: 'decide',
|
|
61
73
|
command: `sungen defect draft ${flag(s)} ${s.unit}${single ? ` --scenario ${cases[0].id}` : ''}`,
|
|
62
74
|
because: `${cases.length} red test case(s) look like a product defect (${(0, exports.listed)(cases)}) — the app answered and the answer differs from the oracle. A QA decides whether it is a defect to record; an agent presents it and does not draft it on its own`,
|
|
63
|
-
}), ['qa/defects/DEF-<n>-<slug>.md']),
|
|
75
|
+
}), ['qa/defects/DEF-<n>-<slug>.md'], (0, node_decl_1.humanStep)('defect-draft')),
|
|
64
76
|
// decide, not do: an agent re-running into an environment that is still down gets the same red and
|
|
65
77
|
// the same step again — a loop with no stop. A human confirms the environment first (#928 review W3).
|
|
66
78
|
caseNode('tc.rerun-environment', 'rerun-environment', 139, 'Re-run the cases the environment failed, once it is up', 'human', (s, cases) => ({
|
|
67
79
|
kind: 'decide',
|
|
68
80
|
command: `/sungen:run-test ${s.unit}${(0, exports.idsArg)(cases)}`,
|
|
69
81
|
because: `${cases.length} red test case(s) failed on the environment, not the app (${withRule(cases)}) — the run never reached a usable app, so their results say nothing about it yet. A human confirms the app, base URL, network, auth state or device is up, then they are re-run; an agent presents this and does not re-run on its own — into an environment that is still down, the same red comes back`,
|
|
70
|
-
}), ['specs/generated/<unit>/<unit>-test-result.json']),
|
|
82
|
+
}), ['specs/generated/<unit>/<unit>-test-result.json'], (0, node_decl_1.humanStep)('rerun-environment')),
|
|
71
83
|
caseNode('tc.fix-test', 'fix-test', 139.5, 'Fix the tests triaged as test defects', 'ai', (s, cases) => ({
|
|
72
84
|
kind: 'do',
|
|
73
85
|
command: `/sungen:run-test ${s.unit}${(0, exports.idsArg)(cases)}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-case-nodes.js","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-nodes.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,
|
|
1
|
+
{"version":3,"file":"test-case-nodes.js","sourceRoot":"","sources":["../../../src/graph/nodes/test-case-nodes.ts"],"names":[],"mappings":"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"}
|