@sun-asterisk/sungen 3.3.0-alpha.2 → 3.3.0-alpha.4

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.
Files changed (109) hide show
  1. package/dist/cli/commands/contract.d.ts +3 -0
  2. package/dist/cli/commands/contract.d.ts.map +1 -1
  3. package/dist/cli/commands/contract.js +34 -4
  4. package/dist/cli/commands/contract.js.map +1 -1
  5. package/dist/contract/accept-opaque-steps.d.ts +3 -0
  6. package/dist/contract/accept-opaque-steps.d.ts.map +1 -0
  7. package/dist/contract/accept-opaque-steps.js +114 -0
  8. package/dist/contract/accept-opaque-steps.js.map +1 -0
  9. package/dist/contract/approve-contract.d.ts +8 -1
  10. package/dist/contract/approve-contract.d.ts.map +1 -1
  11. package/dist/contract/approve-contract.js +6 -0
  12. package/dist/contract/approve-contract.js.map +1 -1
  13. package/dist/contract/build-contract-verdict.js +2 -2
  14. package/dist/contract/build-contract-verdict.js.map +1 -1
  15. package/dist/contract/build-trace-conformance.d.ts +5 -1
  16. package/dist/contract/build-trace-conformance.d.ts.map +1 -1
  17. package/dist/contract/build-trace-conformance.js +9 -4
  18. package/dist/contract/build-trace-conformance.js.map +1 -1
  19. package/dist/contract/classify-contract-change.d.ts +3 -2
  20. package/dist/contract/classify-contract-change.d.ts.map +1 -1
  21. package/dist/contract/classify-contract-change.js.map +1 -1
  22. package/dist/contract/classify-trace-conformance.d.ts +18 -3
  23. package/dist/contract/classify-trace-conformance.d.ts.map +1 -1
  24. package/dist/contract/classify-trace-conformance.js +64 -17
  25. package/dist/contract/classify-trace-conformance.js.map +1 -1
  26. package/dist/contract/contract-schema.d.ts +21 -0
  27. package/dist/contract/contract-schema.d.ts.map +1 -1
  28. package/dist/contract/contract-schema.js +25 -3
  29. package/dist/contract/contract-schema.js.map +1 -1
  30. package/dist/contract/contracts-lock-file.d.ts.map +1 -1
  31. package/dist/contract/contracts-lock-file.js +1 -0
  32. package/dist/contract/contracts-lock-file.js.map +1 -1
  33. package/dist/contract/project-contract-blockers.d.ts.map +1 -1
  34. package/dist/contract/project-contract-blockers.js +4 -2
  35. package/dist/contract/project-contract-blockers.js.map +1 -1
  36. package/dist/contract/record-contract-approval.d.ts +16 -1
  37. package/dist/contract/record-contract-approval.d.ts.map +1 -1
  38. package/dist/contract/record-contract-approval.js +29 -1
  39. package/dist/contract/record-contract-approval.js.map +1 -1
  40. package/dist/contract/render-free-gherkin.d.ts +2 -0
  41. package/dist/contract/render-free-gherkin.d.ts.map +1 -1
  42. package/dist/contract/render-free-gherkin.js +6 -0
  43. package/dist/contract/render-free-gherkin.js.map +1 -1
  44. package/dist/contract/trace/collect-trace-evidence.d.ts +8 -3
  45. package/dist/contract/trace/collect-trace-evidence.d.ts.map +1 -1
  46. package/dist/contract/trace/collect-trace-evidence.js +65 -34
  47. package/dist/contract/trace/collect-trace-evidence.js.map +1 -1
  48. package/dist/contract/trace/read-file-once.d.ts +20 -0
  49. package/dist/contract/trace/read-file-once.d.ts.map +1 -0
  50. package/dist/contract/trace/read-file-once.js +135 -0
  51. package/dist/contract/trace/read-file-once.js.map +1 -0
  52. package/dist/contract/trace/select-final-attempt.d.ts +2 -2
  53. package/dist/contract/trace/select-final-attempt.d.ts.map +1 -1
  54. package/dist/contract/trace/select-final-attempt.js +3 -3
  55. package/dist/contract/trace/select-final-attempt.js.map +1 -1
  56. package/dist/contract/trace/trace-file-reader.d.ts +7 -1
  57. package/dist/contract/trace/trace-file-reader.d.ts.map +1 -1
  58. package/dist/contract/trace/trace-file-reader.js +17 -41
  59. package/dist/contract/trace/trace-file-reader.js.map +1 -1
  60. package/dist/contract/trace/trace-run-record.d.ts +2 -2
  61. package/dist/contract/trace/trace-run-record.d.ts.map +1 -1
  62. package/dist/contract/trace/trace-run-record.js +3 -3
  63. package/dist/contract/trace/trace-run-record.js.map +1 -1
  64. package/dist/contract/verify-approval-decisions.d.ts.map +1 -1
  65. package/dist/contract/verify-approval-decisions.js +9 -4
  66. package/dist/contract/verify-approval-decisions.js.map +1 -1
  67. package/dist/decisions/git-head-trust.d.ts +12 -0
  68. package/dist/decisions/git-head-trust.d.ts.map +1 -1
  69. package/dist/decisions/git-head-trust.js +52 -0
  70. package/dist/decisions/git-head-trust.js.map +1 -1
  71. package/dist/decisions/legacy-waiver-migration.d.ts +6 -1
  72. package/dist/decisions/legacy-waiver-migration.d.ts.map +1 -1
  73. package/dist/decisions/legacy-waiver-migration.js +8 -2
  74. package/dist/decisions/legacy-waiver-migration.js.map +1 -1
  75. package/dist/harness/gates/in-run-decision-check.d.ts.map +1 -1
  76. package/dist/harness/gates/in-run-decision-check.js +19 -11
  77. package/dist/harness/gates/in-run-decision-check.js.map +1 -1
  78. package/dist/harness/gates/migrated-waiver-import-bounds.d.ts +13 -0
  79. package/dist/harness/gates/migrated-waiver-import-bounds.d.ts.map +1 -0
  80. package/dist/harness/gates/migrated-waiver-import-bounds.js +141 -0
  81. package/dist/harness/gates/migrated-waiver-import-bounds.js.map +1 -0
  82. package/dist/harness/gates/migrated-waiver-review.d.ts +14 -4
  83. package/dist/harness/gates/migrated-waiver-review.d.ts.map +1 -1
  84. package/dist/harness/gates/migrated-waiver-review.js +78 -80
  85. package/dist/harness/gates/migrated-waiver-review.js.map +1 -1
  86. package/package.json +3 -3
  87. package/src/cli/commands/contract.ts +35 -4
  88. package/src/contract/accept-opaque-steps.ts +114 -0
  89. package/src/contract/approve-contract.ts +10 -3
  90. package/src/contract/build-contract-verdict.ts +2 -2
  91. package/src/contract/build-trace-conformance.ts +8 -3
  92. package/src/contract/classify-contract-change.ts +3 -3
  93. package/src/contract/classify-trace-conformance.ts +76 -22
  94. package/src/contract/contract-schema.ts +31 -2
  95. package/src/contract/contracts-lock-file.ts +1 -0
  96. package/src/contract/project-contract-blockers.ts +4 -2
  97. package/src/contract/record-contract-approval.ts +41 -1
  98. package/src/contract/render-free-gherkin.ts +5 -0
  99. package/src/contract/trace/collect-trace-evidence.ts +66 -29
  100. package/src/contract/trace/read-file-once.ts +95 -0
  101. package/src/contract/trace/select-final-attempt.ts +3 -3
  102. package/src/contract/trace/trace-file-reader.ts +17 -6
  103. package/src/contract/trace/trace-run-record.ts +3 -3
  104. package/src/contract/verify-approval-decisions.ts +9 -5
  105. package/src/decisions/git-head-trust.ts +44 -0
  106. package/src/decisions/legacy-waiver-migration.ts +9 -2
  107. package/src/harness/gates/in-run-decision-check.ts +16 -12
  108. package/src/harness/gates/migrated-waiver-import-bounds.ts +103 -0
  109. package/src/harness/gates/migrated-waiver-review.ts +90 -37
@@ -7,25 +7,40 @@
7
7
  * with that step — identically (fine), weaker (hard), stronger (strengthened), changed
8
8
  * (review); an approved check with no group or no check in its group → assertion-lost
9
9
  * overlays a step whose target identity is `low` → opaque (review, never match, red-team #4);
10
- * an opaque step → opaque with its verbatim text and file:line (contract.opaque-step)
10
+ * an opaque step → opaque with its verbatim text and file:line (contract.opaque-step) —
11
+ * unless the approved entry lists it as accepted by QA at its sha (#923, opaqueStepSha):
12
+ * then a note, not a finding. impl:code: a test.step whose only candidates are opaque is
13
+ * left to the overlay (judged on the ladder it could only read "changed"), which names the
14
+ * approved step the opaque one replaces
11
15
  * runs no admissible trace → unproven (all inconclusive → inconclusive) when APPROVED, a
12
16
  * warning while proposed (M5, M6); a trace refused beside an admissible one → a warning;
13
17
  * several admissible traces that fingerprint differently → nondeterministic (worst wins)
14
18
  */
15
19
  import { ContractFinding } from './classify-contract-change';
16
- import type { Implementation, LockEntry, ScenarioClass } from './contract-schema';
20
+ import type { ContractStep, Implementation, LockEntry, OpaqueStep, ScenarioClass } from './contract-schema';
21
+ import { RenderedStep } from './render-free-gherkin';
17
22
  import type { TraceRun } from './trace/collect-trace-evidence';
18
23
  import type { TraceFingerprint } from './trace/trace-fingerprint';
19
- /** `warnings` never change the verdict: a not-yet-approved scenario's trace problems, unused traces. */
24
+ /**
25
+ * `warnings` never change the verdict: a not-yet-approved scenario's trace problems, unused traces, an
26
+ * accepted opaque step. `opaque`: every opaque step of the admissible traces, accepted or not.
27
+ */
20
28
  export interface TraceOutcome {
21
29
  class: ScenarioClass;
22
30
  findings: ContractFinding[];
23
31
  hashes: string[];
24
32
  runs: string[];
25
33
  warnings: string[];
34
+ opaque: OpaqueStep[];
26
35
  }
27
36
  /** What an unjudgeable scenario becomes: hard when QA locked it (approved), a warning while it is proposed. */
28
37
  export declare function notJudged(id: string, approved: boolean, cls: 'unproven' | 'inconclusive', reasons: string[]): TraceOutcome;
38
+ /**
39
+ * The sha a QA acceptance binds to (#923): the opaque step as rendered — its verbatim line or request,
40
+ * check or step, the `test.step` it sits in — and as normalized, with the implementation path. Any
41
+ * change to the step gives another sha, so the old acceptance no longer covers it.
42
+ */
43
+ export declare function opaqueStepSha(implementation: Implementation, r: RenderedStep, step: ContractStep | undefined): string;
29
44
  /** How a low target identity opens its finding — `next` reads it to offer `contract check --trace`. */
30
45
  export declare const LOW_IDENTITY_FINDING = "target identity is low";
31
46
  export declare function classifyTraceRuns(id: string, implementation: Implementation, entry: LockEntry | undefined, runs: TraceRun[], fingerprints: Map<TraceRun, TraceFingerprint>): TraceOutcome;
@@ -1 +1 @@
1
- {"version":3,"file":"classify-trace-conformance.d.ts","sourceRoot":"","sources":["../../src/contract/classify-trace-conformance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAoB,eAAe,EAAuC,MAAM,4BAA4B,CAAC;AAEpH,OAAO,KAAK,EAAgB,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEhG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,wGAAwG;AACxG,MAAM,WAAW,YAAY;IAAG,KAAK,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE;AAEzI,+GAA+G;AAC/G,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,CAI1H;AAED,uGAAuG;AACvG,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AA6D7D,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GACxI,YAAY,CAoBd"}
1
+ {"version":3,"file":"classify-trace-conformance.d.ts","sourceRoot":"","sources":["../../src/contract/classify-trace-conformance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAoB,eAAe,EAAuC,MAAM,4BAA4B,CAAC;AAEpH,OAAO,KAAK,EAAsB,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEhI,OAAO,EAAQ,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAAG,KAAK,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,UAAU,EAAE,CAAA;CAAE;AAE/J,+GAA+G;AAC/G,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,CAI1H;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,cAAc,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CAErH;AAED,uGAAuG;AACvG,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AA6F7D,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GACxI,YAAY,CAyBd"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LOW_IDENTITY_FINDING = void 0;
4
4
  exports.notJudged = notJudged;
5
+ exports.opaqueStepSha = opaqueStepSha;
5
6
  exports.classifyTraceRuns = classifyTraceRuns;
6
7
  /**
7
8
  * A free / impl:code scenario's traces against its approved lock entry (DOS-14.5 – 14.6) — the SAME
@@ -12,7 +13,11 @@ exports.classifyTraceRuns = classifyTraceRuns;
12
13
  * with that step — identically (fine), weaker (hard), stronger (strengthened), changed
13
14
  * (review); an approved check with no group or no check in its group → assertion-lost
14
15
  * overlays a step whose target identity is `low` → opaque (review, never match, red-team #4);
15
- * an opaque step → opaque with its verbatim text and file:line (contract.opaque-step)
16
+ * an opaque step → opaque with its verbatim text and file:line (contract.opaque-step) —
17
+ * unless the approved entry lists it as accepted by QA at its sha (#923, opaqueStepSha):
18
+ * then a note, not a finding. impl:code: a test.step whose only candidates are opaque is
19
+ * left to the overlay (judged on the ladder it could only read "changed"), which names the
20
+ * approved step the opaque one replaces
16
21
  * runs no admissible trace → unproven (all inconclusive → inconclusive) when APPROVED, a
17
22
  * warning while proposed (M5, M6); a trace refused beside an admissible one → a warning;
18
23
  * several admissible traces that fingerprint differently → nondeterministic (worst wins)
@@ -20,30 +25,56 @@ exports.classifyTraceRuns = classifyTraceRuns;
20
25
  const classify_contract_change_1 = require("./classify-contract-change");
21
26
  const contract_hash_1 = require("./contract-hash");
22
27
  const oracle_strength_1 = require("./oracle-strength");
28
+ const render_free_gherkin_1 = require("./render-free-gherkin");
23
29
  /** What an unjudgeable scenario becomes: hard when QA locked it (approved), a warning while it is proposed. */
24
30
  function notJudged(id, approved, cls, reasons) {
25
31
  return approved
26
- ? { class: cls, findings: reasons.map((r) => (0, classify_contract_change_1.finding)(cls, r)), hashes: [], runs: [], warnings: [] }
27
- : { class: 'proposed', findings: [], hashes: [], runs: [], warnings: reasons.map((r) => `${id} (not approved yet, so a warning): ${r}`) };
32
+ ? { class: cls, findings: reasons.map((r) => (0, classify_contract_change_1.finding)(cls, r)), hashes: [], runs: [], warnings: [], opaque: [] }
33
+ : { class: 'proposed', findings: [], hashes: [], runs: [], warnings: reasons.map((r) => `${id} (not approved yet, so a warning): ${r}`), opaque: [] };
34
+ }
35
+ /**
36
+ * The sha a QA acceptance binds to (#923): the opaque step as rendered — its verbatim line or request,
37
+ * check or step, the `test.step` it sits in — and as normalized, with the implementation path. Any
38
+ * change to the step gives another sha, so the old acceptance no longer covers it.
39
+ */
40
+ function opaqueStepSha(implementation, r, step) {
41
+ return (0, contract_hash_1.sha256Hex)((0, contract_hash_1.canonicalJson)({ implementation, kind: r.kind, group: r.group ?? null, verbatim: r.opaque?.verbatim ?? null, step: step ?? null })).slice(0, 16);
28
42
  }
29
43
  /** How a low target identity opens its finding — `next` reads it to offer `contract check --trace`. */
30
44
  exports.LOW_IDENTITY_FINDING = 'target identity is low';
31
45
  const worstOf = (findings, start = 'match') => findings.reduce((acc, f) => ((0, classify_contract_change_1.severityOf)(f.class) > (0, classify_contract_change_1.severityOf)(acc) ? f.class : acc), start);
32
- function overlays(fp, used) {
33
- const out = [];
46
+ /** An approved step as a reader sees it: `see [My Account] heading with text "My Account"`. */
47
+ function approvedStepText(s) {
48
+ const refs = [s.target?.ref, ...(s.target?.also ?? [])].filter((r) => r !== undefined);
49
+ const values = (s.kind === 'assert' ? s.expected : s.value)?.split(' | ') ?? [];
50
+ let r = 0;
51
+ let v = 0;
52
+ return s.verb.replace(/\[\]/g, () => `[${refs[r++] ?? ''}]`).replace(/\{\}/g, () => (v < values.length ? `"${values[v++]}"` : '{}'));
53
+ }
54
+ function overlays(fp, implementation, accepted, used, replaces) {
55
+ const findings = [];
56
+ const opaque = [];
34
57
  fp.rendered.forEach((r, i) => {
35
58
  if (used && !used.has(i))
36
59
  return;
37
- if (r.opaque)
38
- out.push((0, classify_contract_change_1.finding)('opaque', `"${r.opaque.verbatim}"${r.opaque.where ? ` at ${r.opaque.where}` : ''} — ${r.kind === 'assert' ? 'a check' : 'a step'} sungen cannot compare; QA reviews it`, i + 1));
60
+ if (r.opaque) {
61
+ const sha = opaqueStepSha(implementation, r, fp.steps[i]);
62
+ const isAccepted = accepted.some((a) => a.step === i + 1 && a.sha === sha);
63
+ const instead = replaces?.get(i);
64
+ opaque.push({ step: i + 1, sha, kind: r.kind, verbatim: r.opaque.verbatim, ...(r.opaque.where ? { where: r.opaque.where } : {}), ...(instead ? { replaces: instead } : {}), accepted: isAccepted });
65
+ if (!isAccepted) {
66
+ findings.push((0, classify_contract_change_1.finding)('opaque', `"${r.opaque.verbatim}"${r.opaque.where ? ` at ${r.opaque.where}` : ''} — ${r.kind === 'assert' ? 'a check' : 'a step'} sungen cannot compare; QA reviews it${instead ? ` — replaces approved ${instead}` : ''}`, i + 1));
67
+ }
68
+ }
39
69
  else if (r.low)
40
- out.push((0, classify_contract_change_1.finding)('opaque', `${exports.LOW_IDENTITY_FINDING} (${r.low}) — cannot prove "${r.sentence}" acts on the approved element`, i + 1));
70
+ findings.push((0, classify_contract_change_1.finding)('opaque', `${exports.LOW_IDENTITY_FINDING} (${r.low}) — cannot prove "${r.sentence}" acts on the approved element`, i + 1));
41
71
  });
42
- return out;
72
+ return { findings, opaque };
43
73
  }
44
74
  function implCodeFindings(entry, fp) {
45
75
  const findings = [];
46
76
  const used = new Set();
77
+ const replaces = new Map();
47
78
  const taken = new Set();
48
79
  entry.steps.forEach((locked, i) => {
49
80
  const g = fp.groups.findIndex((x, gi) => !taken.has(gi) && (0, contract_hash_1.sameJson)(x.titleStep, locked));
@@ -67,6 +98,14 @@ function implCodeFindings(entry, fp) {
67
98
  return;
68
99
  }
69
100
  candidates.forEach((m) => used.add(m));
101
+ // Only steps sungen cannot compare implement this approved step: the overlay sends them to QA's
102
+ // review (#923), naming the approved step. On the ladder they could only read "changed", which
103
+ // re-approving never clears.
104
+ if (candidates.every((m) => fp.rendered[m].opaque)) {
105
+ for (const m of candidates)
106
+ replaces.set(m, `step ${i + 1} "${(0, render_free_gherkin_1.clip)(approvedStepText(locked))}"`);
107
+ return;
108
+ }
70
109
  if (locked.kind === 'action') {
71
110
  findings.push((0, classify_contract_change_1.finding)('hash-changed', `the code for "${locked.verb}" does something else: "${fp.rendered[candidates[0]].sentence}"`, i + 1));
72
111
  return;
@@ -78,17 +117,20 @@ function implCodeFindings(entry, fp) {
78
117
  });
79
118
  fp.groups.forEach((g, gi) => { if (!taken.has(gi))
80
119
  findings.push((0, classify_contract_change_1.finding)('hash-changed', `test.step "${g.title}" implements no approved step`)); });
81
- return { findings, used };
120
+ return { findings, used, replaces };
82
121
  }
83
122
  function classifyOne(id, implementation, entry, fp) {
123
+ const accepted = entry.acceptedOpaque ?? [];
84
124
  if (implementation === 'impl:code') {
85
- const { findings, used } = implCodeFindings(entry, fp);
86
- return [...findings, ...overlays(fp, used)];
125
+ const { findings, used, replaces } = implCodeFindings(entry, fp);
126
+ const o = overlays(fp, implementation, accepted, used, replaces);
127
+ return { findings: [...findings, ...o.findings], opaque: o.opaque };
87
128
  }
88
129
  const ladder = (0, classify_contract_change_1.classifyScenario)(id, entry, {
89
130
  id, implementation, steps: fp.steps, hash: fp.hash, source: { file: '', name: id, hasId: true, lines: [], outline: false },
90
131
  });
91
- return [...ladder.findings, ...overlays(fp)];
132
+ const o = overlays(fp, implementation, accepted);
133
+ return { findings: [...ladder.findings, ...o.findings], opaque: o.opaque };
92
134
  }
93
135
  const runLabel = (r) => `${r.record?.runId ?? '?'}#${r.result?.retry ?? '?'}`;
94
136
  function classifyTraceRuns(id, implementation, entry, runs, fingerprints) {
@@ -103,15 +145,20 @@ function classifyTraceRuns(id, implementation, entry, runs, fingerprints) {
103
145
  // A trace that may not speak, beside one that may: the admissible one judges, the other is a warning.
104
146
  const warnings = others.map((r) => `${id}: another trace of this scenario was not used — ${r.reason ?? r.status}`);
105
147
  if (!entry)
106
- return { class: 'proposed', findings: [], hashes, runs: labels, warnings };
148
+ return { class: 'proposed', findings: [], hashes, runs: labels, warnings, opaque: [] };
107
149
  const perRun = admissible.map((r) => classifyOne(id, implementation, entry, fingerprints.get(r)));
108
- const findings = perRun.flat();
109
- let cls = worstOf(perRun.flat());
150
+ const findings = perRun.flatMap((p) => p.findings);
151
+ const opaque = [...new Map(perRun.flatMap((p) => p.opaque).map((o) => [`${o.step}:${o.sha}`, o])).values()]
152
+ .sort((a, b) => a.step - b.step || a.sha.localeCompare(b.sha));
153
+ for (const o of opaque.filter((x) => x.accepted)) {
154
+ warnings.push(`${id}: step ${o.step} — opaque ${o.kind === 'assert' ? 'check' : 'step'} "${(0, render_free_gherkin_1.clip)(o.verbatim)}" accepted by QA (decision ${entry.decisionId}), not compared`);
155
+ }
156
+ let cls = worstOf(findings);
110
157
  if (new Set(hashes).size > 1) {
111
158
  findings.push((0, classify_contract_change_1.finding)('nondeterministic', `${new Set(hashes).size} different fingerprints across ${admissible.length} runs — the runs took different branches`));
112
159
  if ((0, classify_contract_change_1.severityOf)(cls) <= (0, classify_contract_change_1.severityOf)('strengthened'))
113
160
  cls = 'nondeterministic';
114
161
  }
115
- return { class: cls, findings, hashes, runs: labels, warnings };
162
+ return { class: cls, findings, hashes, runs: labels, warnings, opaque };
116
163
  }
117
164
  //# sourceMappingURL=classify-trace-conformance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"classify-trace-conformance.js","sourceRoot":"","sources":["../../src/contract/classify-trace-conformance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"classify-trace-conformance.js","sourceRoot":"","sources":["../../src/contract/classify-trace-conformance.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,11 @@ export interface ContractScenario {
38
38
  outline: boolean;
39
39
  };
40
40
  }
41
+ /** A reviewed opaque trace step QA accepted (#923): its 1-based position in the trace's steps and its sha (opaqueStepSha). */
42
+ export interface AcceptedOpaqueStep {
43
+ step: number;
44
+ sha: string;
45
+ }
41
46
  export interface LockEntry {
42
47
  hash: string;
43
48
  steps: ContractStep[];
@@ -45,6 +50,21 @@ export interface LockEntry {
45
50
  approvedAt: string;
46
51
  decisionId: string;
47
52
  humanApproved?: true;
53
+ /** Opaque trace steps a QA accepted on a terminal (`contract approve --accept-opaque`) — vouched for by `decisionId`. */
54
+ acceptedOpaque?: AcceptedOpaqueStep[];
55
+ }
56
+ /**
57
+ * One opaque step of a scenario's trace(s), as `contract check` reports it and `--accept-opaque` shows it.
58
+ * `replaces` (impl:code): the approved step it stands in for — `step 5 "see [Title] heading"`.
59
+ */
60
+ export interface OpaqueStep {
61
+ step: number;
62
+ sha: string;
63
+ kind: 'action' | 'assert';
64
+ verbatim: string;
65
+ where?: string;
66
+ replaces?: string;
67
+ accepted: boolean;
48
68
  }
49
69
  export declare const LOCK_SCHEMA = 1;
50
70
  export interface ContractLock {
@@ -63,6 +83,7 @@ export declare const HARD_CLASSES: ReadonlySet<string>;
63
83
  export declare const REVIEW_CLASSES: ReadonlySet<string>;
64
84
  /** The catalog rule each class is reported under (gate-rules.yaml); `strengthened` has none. */
65
85
  export declare const RULE_OF: Readonly<Partial<Record<FindingClass, string>>>;
86
+ export declare const OPAQUE_SHA_RE: RegExp;
66
87
  export declare function stepErrors(s: unknown, at: string): string[];
67
88
  /** Errors in one stored lock entry (empty = well-formed). The hash itself is checked by the reader. */
68
89
  export declare function lockEntryErrors(raw: unknown, id: string): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"contract-schema.d.ts","sourceRoot":"","sources":["../../src/contract/contract-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract-schema.d.ts","sourceRoot":"","sources":["../../src/contract/contract-schema.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isHumanApproved = exports.RULE_OF = exports.REVIEW_CLASSES = exports.HARD_CLASSES = exports.LOCK_SCHEMA = exports.IMPLEMENTATIONS = void 0;
3
+ exports.isHumanApproved = exports.OPAQUE_SHA_RE = exports.RULE_OF = exports.REVIEW_CLASSES = exports.HARD_CLASSES = exports.LOCK_SCHEMA = exports.IMPLEMENTATIONS = void 0;
4
4
  exports.stepErrors = stepErrors;
5
5
  exports.lockEntryErrors = lockEntryErrors;
6
6
  /**
@@ -8,7 +8,7 @@ exports.lockEntryErrors = lockEntryErrors;
8
8
  *
9
9
  * step {kind: action|assert, verb, target?:{ref, also?, parent?, nth?}, value?, matcher?, expected?, negated?, table?}
10
10
  * lock qa/<kind>/<unit>/contracts.lock.yaml → {schema: 1, scenarios: {<scenario id>: LockEntry}}
11
- * entry {hash, steps, implementation, approvedAt, decisionId, humanApproved?}
11
+ * entry {hash, steps, implementation, approvedAt, decisionId, humanApproved?, acceptedOpaque?}
12
12
  *
13
13
  * A stored entry is checked the way the decision layer checks its records: a wrong type or an
14
14
  * UNKNOWN key is an error, because a field outside the hash could carry meaning the hash does not
@@ -36,8 +36,10 @@ exports.RULE_OF = {
36
36
  };
37
37
  const STEP_KEYS = new Set(['kind', 'verb', 'target', 'value', 'matcher', 'expected', 'negated', 'table']);
38
38
  const TARGET_KEYS = new Set(['ref', 'also', 'parent', 'nth']);
39
- const ENTRY_KEYS = new Set(['hash', 'steps', 'implementation', 'approvedAt', 'decisionId', 'humanApproved']);
39
+ const ENTRY_KEYS = new Set(['hash', 'steps', 'implementation', 'approvedAt', 'decisionId', 'humanApproved', 'acceptedOpaque']);
40
+ const ACCEPTED_KEYS = new Set(['step', 'sha']);
40
41
  const HASH_RE = /^[0-9a-f]{12}$/;
42
+ exports.OPAQUE_SHA_RE = /^[0-9a-f]{16}$/;
41
43
  const isObject = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
42
44
  const isStringList = (v) => Array.isArray(v) && v.every((x) => typeof x === 'string');
43
45
  const unknownKeys = (o, allowed, at) => Object.keys(o).filter((k) => !allowed.has(k)).map((k) => `${at}: unknown key "${k}"`);
@@ -74,6 +76,21 @@ function stepErrors(s, at) {
74
76
  e.push(`${at}: table must be rows of strings`);
75
77
  return e;
76
78
  }
79
+ function acceptedOpaqueErrors(v, at) {
80
+ if (!Array.isArray(v) || !v.length)
81
+ return [`${at}: acceptedOpaque must be a non-empty list`];
82
+ return v.flatMap((a, i) => {
83
+ const where = `${at} acceptedOpaque ${i + 1}`;
84
+ if (!isObject(a))
85
+ return [`${where}: not a mapping`];
86
+ const e = unknownKeys(a, ACCEPTED_KEYS, where);
87
+ if (!(Number.isInteger(a.step) && a.step > 0))
88
+ e.push(`${where}: step must be a positive integer`);
89
+ if (typeof a.sha !== 'string' || !exports.OPAQUE_SHA_RE.test(a.sha))
90
+ e.push(`${where}: sha must be 16 hex characters`);
91
+ return e;
92
+ });
93
+ }
77
94
  /** Errors in one stored lock entry (empty = well-formed). The hash itself is checked by the reader. */
78
95
  function lockEntryErrors(raw, id) {
79
96
  const at = `scenario ${id}`;
@@ -90,6 +107,11 @@ function lockEntryErrors(raw, id) {
90
107
  e.push(`${at}: decisionId must be D-<16 hex>`);
91
108
  if (raw.humanApproved !== undefined && raw.humanApproved !== true)
92
109
  e.push(`${at}: humanApproved is either true or absent`);
110
+ if (raw.acceptedOpaque !== undefined) {
111
+ e.push(...acceptedOpaqueErrors(raw.acceptedOpaque, at));
112
+ if (raw.humanApproved !== true)
113
+ e.push(`${at}: acceptedOpaque needs humanApproved: true`);
114
+ }
93
115
  if (!Array.isArray(raw.steps))
94
116
  e.push(`${at}: steps must be a list`);
95
117
  else
@@ -1 +1 @@
1
- {"version":3,"file":"contract-schema.js","sourceRoot":"","sources":["../../src/contract/contract-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract-schema.js","sourceRoot":"","sources":["../../src/contract/contract-schema.ts"],"names":[],"mappings":";;;AAyHA,gCAUC;AAeD,0CAgBC;AAlKD;;;;;;;;;;GAUG;AACH,kEAA8D;AAEjD,QAAA,eAAe,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;AA0D7D,QAAA,WAAW,GAAG,CAAC,CAAC;AAS7B,kFAAkF;AACrE,QAAA,YAAY,GAAwB,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAC,CAAC;AAClJ;mGACmG;AACtF,QAAA,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;AAEvG,gGAAgG;AACnF,QAAA,OAAO,GAAoD;IACtE,cAAc,EAAE,uBAAuB;IACvC,iBAAiB,EAAE,0BAA0B;IAC7C,gBAAgB,EAAE,yBAAyB;IAC3C,gBAAgB,EAAE,yBAAyB;IAC3C,kBAAkB,EAAE,2BAA2B;IAC/C,MAAM,EAAE,sBAAsB;IAC9B,gBAAgB,EAAE,2BAA2B;IAC7C,YAAY,EAAE,uBAAuB;IACrC,QAAQ,EAAE,mBAAmB;CAC9B,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1G,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAC/H,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAC/C,MAAM,OAAO,GAAG,gBAAgB,CAAC;AACpB,QAAA,aAAa,GAAG,gBAAgB,CAAC;AAE9C,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAgC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxH,MAAM,YAAY,GAAG,CAAC,CAAU,EAAiB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AAC9G,MAAM,WAAW,GAAG,CAAC,CAA0B,EAAE,OAAoB,EAAE,EAAU,EAAY,EAAE,CAC7F,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAExF,SAAS,YAAY,CAAC,CAAU,EAAE,EAAU;IAC1C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,GAAG,EAAE,4BAA4B,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,+BAA+B,CAAC,CAAC;IAC5E,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAC;IAC1G,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC;IAC5G,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAK,CAAC,CAAC,GAAc,GAAG,CAAC,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,yCAAyC,CAAC,CAAC;IACvI,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,UAAU,CAAC,CAAU,EAAE,EAAU;IAC/C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC;IAC5F,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAC7E,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAU;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ;YAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtJ,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,oCAAoC,CAAC,CAAC;IACrG,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;IACtI,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,oBAAoB,CAAC,CAAU,EAAE,EAAU;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,EAAE,2CAA2C,CAAC,CAAC;IAC9F,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,GAAG,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,KAAK,iBAAiB,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC,IAAe,GAAG,CAAC,CAAC;YAAE,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,mCAAmC,CAAC,CAAC;QAC/G,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,qBAAa,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,iCAAiC,CAAC,CAAC;QAC/G,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uGAAuG;AACvG,SAAgB,eAAe,CAAC,GAAY,EAAE,EAAU;IACtD,MAAM,EAAE,GAAG,YAAY,EAAE,EAAE,CAAC;IAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,CAAC,CAAC;IAC7G,IAAI,CAAC,uBAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAgC,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,4BAA4B,uBAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1I,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,4CAA4C,CAAC,CAAC;IAC9I,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,gCAAc,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;IAC/H,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,GAAG,CAAC,aAAa,KAAK,IAAI;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,0CAA0C,CAAC,CAAC;IAC3H,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACrC,CAAC,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,GAAG,CAAC,aAAa,KAAK,IAAI;YAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,4CAA4C,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;;QAChE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,kGAAkG;AAC3F,MAAM,eAAe,GAAG,CAAC,KAA4B,EAAsB,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAAtG,QAAA,eAAe,mBAAuF"}
@@ -1 +1 @@
1
- {"version":3,"file":"contracts-lock-file.d.ts","sourceRoot":"","sources":["../../src/contract/contracts-lock-file.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAA6B,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAE1H,eAAO,MAAM,cAAc,wBAAwB,CAAC;AACpD,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,MAA4C,CAAC;AAK3F,qBAAa,iBAAkB,SAAQ,KAAK;aACd,MAAM,EAAE,MAAM;aAAkB,QAAQ,EAAE,MAAM,EAAE;gBAAlD,MAAM,EAAE,MAAM,EAAkB,QAAQ,EAAE,MAAM,EAAE;CAI/E;AAID;;;;GAIG;AACH,MAAM,WAAW,QAAS,SAAQ,YAAY;IAAG,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE;AAErE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAiBpE;AAED,iHAAiH;AACjH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAO1D;AASD,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAWxD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAGpE;AAED,oGAAoG;AACpG,wBAAgB,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAEpG"}
1
+ {"version":3,"file":"contracts-lock-file.d.ts","sourceRoot":"","sources":["../../src/contract/contracts-lock-file.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAA6B,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAE1H,eAAO,MAAM,cAAc,wBAAwB,CAAC;AACpD,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,MAA4C,CAAC;AAK3F,qBAAa,iBAAkB,SAAQ,KAAK;aACd,MAAM,EAAE,MAAM;aAAkB,QAAQ,EAAE,MAAM,EAAE;gBAAlD,MAAM,EAAE,MAAM,EAAkB,QAAQ,EAAE,MAAM,EAAE;CAI/E;AAID;;;;GAIG;AACH,MAAM,WAAW,QAAS,SAAQ,YAAY;IAAG,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE;AAErE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAiBpE;AAED,iHAAiH;AACjH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAO1D;AASD,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAYxD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAGpE;AAED,oGAAoG;AACpG,wBAAgB,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAEpG"}
@@ -124,6 +124,7 @@ function serializeLock(lock) {
124
124
  scenarios[id] = {
125
125
  hash: e.hash, implementation: e.implementation, approvedAt: e.approvedAt, decisionId: e.decisionId,
126
126
  ...(e.humanApproved === true ? { humanApproved: true } : {}),
127
+ ...(e.acceptedOpaque?.length ? { acceptedOpaque: e.acceptedOpaque.map((a) => ({ step: a.step, sha: a.sha })) } : {}),
127
128
  steps: e.steps.map(orderedStep),
128
129
  };
129
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"contracts-lock-file.js","sourceRoot":"","sources":["../../src/contract/contracts-lock-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts-lock-file.js","sourceRoot":"","sources":["../../src/contract/contracts-lock-file.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"project-contract-blockers.d.ts","sourceRoot":"","sources":["../../src/contract/project-contract-blockers.ts"],"names":[],"mappings":"AAWA,OAAO,EAAwB,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAK5F,MAAM,WAAW,eAAe;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AAE3G,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,EAAE,CAiBpI"}
1
+ {"version":3,"file":"project-contract-blockers.d.ts","sourceRoot":"","sources":["../../src/contract/project-contract-blockers.ts"],"names":[],"mappings":"AAYA,OAAO,EAAwB,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAM5F,MAAM,WAAW,eAAe;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AAE3G,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,EAAE,CAiBpI"}
@@ -40,12 +40,14 @@ exports.contractBlockers = contractBlockers;
40
40
  * HEAD is read once (one `git ls-tree`, bounded by the caller's timeout). A unit with no lock in the
41
41
  * working tree AND none in HEAD has no contract to break and is skipped without parsing anything.
42
42
  * Every other unit gets its verdict rebuilt by buildContractVerdict — the same function `contract
43
- * check` runs — and anything but `pass` blocks. A lock deleted from the working tree still counts
43
+ * check` runs — and anything but `pass` blocks. Its trace part gets the guard's ~3 s at most:
44
+ * SUNGEN_TRACE_VERDICT_BUDGET_MS can shorten that here, never lengthen it (#926). A lock deleted from the working tree still counts
44
45
  * while HEAD holds it. If git FAILS in a checkout that has .git while a delivered unit has a lock,
45
46
  * this throws (GitUnavailableError): the guard asks rather than calling an unverifiable lock clean.
46
47
  */
47
48
  const fs = __importStar(require("fs"));
48
49
  const build_contract_verdict_1 = require("./build-contract-verdict");
50
+ const build_trace_conformance_1 = require("./build-trace-conformance");
49
51
  const contract_git_1 = require("./contract-git");
50
52
  const contract_schema_1 = require("./contract-schema");
51
53
  const contracts_lock_file_1 = require("./contracts-lock-file");
@@ -59,7 +61,7 @@ function contractBlockers(projectRoot, units, opts = {}) {
59
61
  for (const unit of unique) {
60
62
  if (!hasWorkingLock(unit) && !snap.blobs?.has((0, contract_git_1.posixRel)(projectRoot, (0, contracts_lock_file_1.lockPathFor)(unit.dir))))
61
63
  continue;
62
- const v = (0, build_contract_verdict_1.buildContractVerdict)(projectRoot, unit, { snapshot: snap });
64
+ const v = (0, build_contract_verdict_1.buildContractVerdict)(projectRoot, unit, { snapshot: snap, traceBudgetMs: (0, build_trace_conformance_1.guardTraceBudgetMs)() });
63
65
  if (v.verdict === 'pass')
64
66
  continue;
65
67
  const worst = v.scenarios.find((s) => contract_schema_1.HARD_CLASSES.has(s.class)) ?? v.scenarios.find((s) => s.class === 'hash-changed');
@@ -1 +1 @@
1
- {"version":3,"file":"project-contract-blockers.js","sourceRoot":"","sources":["../../src/contract/project-contract-blockers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,4CAiBC;AAnCD;;;;;;;;;GASG;AACH,uCAAyB;AACzB,qEAA4F;AAC5F,iDAAiG;AACjG,uDAAiD;AACjD,+DAAoD;AAIpD,SAAgB,gBAAgB,CAAC,WAAmB,EAAE,KAAqB,EAAE,OAAkC,EAAE;IAC/G,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAA,2BAAY,EAAC,WAAW,EAAE,IAAI,CAAC,YAAY,IAAI,iCAAkB,CAAC,CAAC;IAChF,MAAM,cAAc,GAAG,CAAC,CAAe,EAAW,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAA,iCAAW,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;QAAE,MAAM,IAAI,kCAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzF,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAA,uBAAQ,EAAC,WAAW,EAAE,IAAA,iCAAW,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QACtG,MAAM,CAAC,GAAG,IAAA,6CAAoB,EAAC,WAAW,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM;YAAE,SAAS;QACnC,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,8BAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC;QACxH,MAAM,QAAQ,GAAG,KAAK;YACpB,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1F,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,aAAa,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,wCAAwC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC;QACnL,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"project-contract-blockers.js","sourceRoot":"","sources":["../../src/contract/project-contract-blockers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,4CAiBC;AArCD;;;;;;;;;;GAUG;AACH,uCAAyB;AACzB,qEAA4F;AAC5F,uEAA+D;AAC/D,iDAAiG;AACjG,uDAAiD;AACjD,+DAAoD;AAIpD,SAAgB,gBAAgB,CAAC,WAAmB,EAAE,KAAqB,EAAE,OAAkC,EAAE;IAC/G,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAA,2BAAY,EAAC,WAAW,EAAE,IAAI,CAAC,YAAY,IAAI,iCAAkB,CAAC,CAAC;IAChF,MAAM,cAAc,GAAG,CAAC,CAAe,EAAW,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAA,iCAAW,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;QAAE,MAAM,IAAI,kCAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzF,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAA,uBAAQ,EAAC,WAAW,EAAE,IAAA,iCAAW,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QACtG,MAAM,CAAC,GAAG,IAAA,6CAAoB,EAAC,WAAW,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAA,4CAAkB,GAAE,EAAE,CAAC,CAAC;QAC3G,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM;YAAE,SAAS;QACnC,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,8BAAY,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC;QACxH,MAAM,QAAQ,GAAG,KAAK;YACpB,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1F,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,aAAa,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,wCAAwC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC;QACnL,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ContractLock, ContractScenario } from './contract-schema';
1
+ import { AcceptedOpaqueStep, ContractLock, ContractScenario } from './contract-schema';
2
2
  export interface ApprovalWrite {
3
3
  projectRoot: string;
4
4
  unitDir: string;
@@ -9,6 +9,17 @@ export interface ApprovalWrite {
9
9
  lock: ContractLock | null;
10
10
  }
11
11
  export declare const DEFAULT_APPROVAL_REASON = "QA reviewed the normalized Gherkin contract";
12
+ export declare const DEFAULT_OPAQUE_REASON = "QA reviewed the opaque step(s) sungen cannot compare";
13
+ export interface OpaqueAcceptanceWrite {
14
+ projectRoot: string;
15
+ unitDir: string;
16
+ unit: string;
17
+ /** The scenario as it reads now — its hash equals its approved lock entry's. */
18
+ scenario: ContractScenario;
19
+ accepted: AcceptedOpaqueStep[];
20
+ reason?: string;
21
+ lock: ContractLock;
22
+ }
12
23
  /** The decision scope of a unit directory (`screens/login`, `api/flows/pay`…). */
13
24
  export declare function scopeOfUnitDir(projectRoot: string, unitDir: string): string;
14
25
  export declare function nextLock(w: ApprovalWrite, decisionId: string, approvedAt: string): ContractLock;
@@ -18,4 +29,8 @@ export declare function recordContractApproval(w: ApprovalWrite): {
18
29
  decisionId: string;
19
30
  lock: ContractLock;
20
31
  };
32
+ export declare function recordOpaqueAcceptance(w: OpaqueAcceptanceWrite): {
33
+ decisionId: string;
34
+ lock: ContractLock;
35
+ };
21
36
  //# sourceMappingURL=record-contract-approval.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record-contract-approval.d.ts","sourceRoot":"","sources":["../../src/contract/record-contract-approval.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAe,MAAM,mBAAmB,CAAC;AAIhF,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,uBAAuB,gDAAgD,CAAC;AAErF,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAK/F;AAED,gGAAgG;AAChG,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,aAAa,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAiBnG"}
1
+ {"version":3,"file":"record-contract-approval.d.ts","sourceRoot":"","sources":["../../src/contract/record-contract-approval.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAe,MAAM,mBAAmB,CAAC;AAIpG,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,uBAAuB,gDAAgD,CAAC;AACrF,eAAO,MAAM,qBAAqB,yDAAyD,CAAC;AAE5F,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAK/F;AAED,gGAAgG;AAChG,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,CAE3D;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,aAAa,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAiBnG;AAOD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,qBAAqB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAiB3G"}
@@ -33,11 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.DEFAULT_APPROVAL_REASON = void 0;
36
+ exports.DEFAULT_OPAQUE_REASON = exports.DEFAULT_APPROVAL_REASON = void 0;
37
37
  exports.scopeOfUnitDir = scopeOfUnitDir;
38
38
  exports.nextLock = nextLock;
39
39
  exports.checkApprovalSecrets = checkApprovalSecrets;
40
40
  exports.recordContractApproval = recordContractApproval;
41
+ exports.recordOpaqueAcceptance = recordOpaqueAcceptance;
41
42
  /**
42
43
  * What an approval writes, once a human has confirmed it (DOS-14.3, DOS-14.4, takumi T5):
43
44
  *
@@ -49,6 +50,10 @@ exports.recordContractApproval = recordContractApproval;
49
50
  * The decision goes first: a crash between the two leaves a record without a lock entry, never an
50
51
  * entry pointing at nothing. Only `sungen contract approve` calls this after its TTY confirmation;
51
52
  * the confirmation itself lives there (approve-contract.ts).
53
+ *
54
+ * `--accept-opaque` (#923, accept-opaque-steps.ts) writes the same kind of decision for ONE scenario,
55
+ * listing it at its hash WITH the opaque steps QA accepted (step + sha); its lock entry is rewritten to
56
+ * point at that decision and carries the same list, which verify-approval-decisions.ts cross-checks.
52
57
  */
53
58
  const path = __importStar(require("path"));
54
59
  const append_decision_1 = require("../decisions/append-decision");
@@ -58,6 +63,7 @@ const contract_schema_1 = require("./contract-schema");
58
63
  const contracts_lock_file_1 = require("./contracts-lock-file");
59
64
  const lock_secret_guard_1 = require("./lock-secret-guard");
60
65
  exports.DEFAULT_APPROVAL_REASON = 'QA reviewed the normalized Gherkin contract';
66
+ exports.DEFAULT_OPAQUE_REASON = 'QA reviewed the opaque step(s) sungen cannot compare';
61
67
  /** The decision scope of a unit directory (`screens/login`, `api/flows/pay`…). */
62
68
  function scopeOfUnitDir(projectRoot, unitDir) {
63
69
  const scope = path.relative(path.join(projectRoot, 'qa'), unitDir).split(path.sep).join('/');
@@ -95,4 +101,26 @@ function recordContractApproval(w) {
95
101
  (0, contracts_lock_file_1.writeLockFile)((0, contracts_lock_file_1.lockPathFor)(w.unitDir), lock);
96
102
  return { decisionId: decision.entry.id, lock };
97
103
  }
104
+ function lockWithAcceptance(w, decisionId, approvedAt) {
105
+ const entry = { ...(0, contracts_lock_file_1.lockEntryFor)(w.scenario, decisionId, approvedAt), acceptedOpaque: w.accepted.map((a) => ({ step: a.step, sha: a.sha })) };
106
+ return { schema: contract_schema_1.LOCK_SCHEMA, scenarios: { ...w.lock.scenarios, [w.scenario.id]: entry } };
107
+ }
108
+ function recordOpaqueAcceptance(w) {
109
+ const scope = scopeOfUnitDir(w.projectRoot, w.unitDir);
110
+ (0, lock_secret_guard_1.assertNoLockSecrets)([w.scenario], (0, contracts_lock_file_1.serializeLock)(lockWithAcceptance(w, 'D-0000000000000000', new Date().toISOString())));
111
+ const sc = w.scenario;
112
+ const accepted = w.accepted.map((a) => ({ step: a.step, sha: a.sha }));
113
+ const payload = {
114
+ unit: w.unit, scenarios: [{ id: sc.id, hash: sc.hash, implementation: sc.implementation, acceptedOpaque: accepted }], removed: [],
115
+ };
116
+ const decision = (0, append_decision_1.appendDecision)(w.projectRoot, scope, {
117
+ kind: 'contract-approval', anchors: [], visibility: 'internal', valid_from: new Date().toISOString(), payload,
118
+ text: `Accepted the reviewed opaque step(s) ${[...new Set(accepted.map((a) => a.step))].join(', ')} of ${sc.id} (${w.unit})`,
119
+ reason: w.reason?.trim() || exports.DEFAULT_OPAQUE_REASON,
120
+ source: { by: (0, decision_source_1.gitUserName)(w.projectRoot), where: 'cli' },
121
+ });
122
+ const lock = lockWithAcceptance(w, decision.entry.id, decision.entry.valid_from);
123
+ (0, contracts_lock_file_1.writeLockFile)((0, contracts_lock_file_1.lockPathFor)(w.unitDir), lock);
124
+ return { decisionId: decision.entry.id, lock };
125
+ }
98
126
  //# sourceMappingURL=record-contract-approval.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"record-contract-approval.js","sourceRoot":"","sources":["../../src/contract/record-contract-approval.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,wCAIC;AAED,4BAKC;AAGD,oDAEC;AAED,wDAiBC;AArED;;;;;;;;;;;GAWG;AACH,2CAA6B;AAC7B,kEAA8D;AAC9D,8DAA0D;AAE1D,kEAA2D;AAC3D,uDAAgF;AAChF,+DAAgG;AAChG,2DAA0D;AAY7C,QAAA,uBAAuB,GAAG,6CAA6C,CAAC;AAErF,kFAAkF;AAClF,SAAgB,cAAc,CAAC,WAAmB,EAAE,OAAe;IACjE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7F,IAAI,CAAC,IAAA,4BAAY,EAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,iFAAiF,CAAC,CAAC;IACvI,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,QAAQ,CAAC,CAAgB,EAAE,UAAkB,EAAE,UAAkB;IAC/E,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;IACnD,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC;IACjD,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO;QAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAA,kCAAY,EAAC,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACxF,OAAO,EAAE,MAAM,EAAE,6BAAW,EAAE,SAAS,EAAE,CAAC;AAC5C,CAAC;AAED,gGAAgG;AAChG,SAAgB,oBAAoB,CAAC,CAAgB;IACnD,IAAA,uCAAmB,EAAC,CAAC,CAAC,OAAO,EAAE,IAAA,mCAAa,EAAC,QAAQ,CAAC,CAAC,EAAE,oBAAoB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7G,CAAC;AAED,SAAgB,sBAAsB,CAAC,CAAgB;IACrD,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACvD,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,OAAO,GAA8B;QACzC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/F,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC;IACF,MAAM,QAAQ,GAAG,IAAA,gCAAc,EAAC,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE;QACpD,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO;QAC7G,IAAI,EAAE,iCAAiC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClI,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,+BAAuB;QACnD,MAAM,EAAE,EAAE,EAAE,EAAE,IAAA,6BAAW,EAAC,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;KACzD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvE,IAAA,mCAAa,EAAC,IAAA,iCAAW,EAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"record-contract-approval.js","sourceRoot":"","sources":["../../src/contract/record-contract-approval.ts"],"names":[],"mappings":"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"}