@sun-asterisk/sungen 3.2.16 → 3.2.18-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/dist/cli/commands/audit.d.ts.map +1 -1
  2. package/dist/cli/commands/audit.js +23 -0
  3. package/dist/cli/commands/audit.js.map +1 -1
  4. package/dist/cli/commands/delivery.d.ts.map +1 -1
  5. package/dist/cli/commands/delivery.js +209 -16
  6. package/dist/cli/commands/delivery.js.map +1 -1
  7. package/dist/cli/commands/ingest.d.ts.map +1 -1
  8. package/dist/cli/commands/ingest.js +56 -4
  9. package/dist/cli/commands/ingest.js.map +1 -1
  10. package/dist/cli/index.js +5 -0
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/dashboard/snapshot-builder.d.ts.map +1 -1
  13. package/dist/dashboard/snapshot-builder.js +8 -1
  14. package/dist/dashboard/snapshot-builder.js.map +1 -1
  15. package/dist/dashboard/templates/index.html +1 -1
  16. package/dist/exporters/api-environment.d.ts +11 -0
  17. package/dist/exporters/api-environment.d.ts.map +1 -0
  18. package/dist/exporters/api-environment.js +129 -0
  19. package/dist/exporters/api-environment.js.map +1 -0
  20. package/dist/exporters/feature-parser.d.ts +16 -1
  21. package/dist/exporters/feature-parser.d.ts.map +1 -1
  22. package/dist/exporters/feature-parser.js +21 -2
  23. package/dist/exporters/feature-parser.js.map +1 -1
  24. package/dist/exporters/matrix/build.d.ts +70 -0
  25. package/dist/exporters/matrix/build.d.ts.map +1 -0
  26. package/dist/exporters/matrix/build.js +516 -0
  27. package/dist/exporters/matrix/build.js.map +1 -0
  28. package/dist/exporters/matrix/export.d.ts +50 -0
  29. package/dist/exporters/matrix/export.d.ts.map +1 -0
  30. package/dist/exporters/matrix/export.js +152 -0
  31. package/dist/exporters/matrix/export.js.map +1 -0
  32. package/dist/exporters/matrix/fingerprint.d.ts +20 -0
  33. package/dist/exporters/matrix/fingerprint.d.ts.map +1 -0
  34. package/dist/exporters/matrix/fingerprint.js +83 -0
  35. package/dist/exporters/matrix/fingerprint.js.map +1 -0
  36. package/dist/exporters/matrix/gates.d.ts +21 -0
  37. package/dist/exporters/matrix/gates.d.ts.map +1 -0
  38. package/dist/exporters/matrix/gates.js +367 -0
  39. package/dist/exporters/matrix/gates.js.map +1 -0
  40. package/dist/exporters/matrix/map-loader.d.ts +22 -0
  41. package/dist/exporters/matrix/map-loader.d.ts.map +1 -0
  42. package/dist/exporters/matrix/map-loader.js +193 -0
  43. package/dist/exporters/matrix/map-loader.js.map +1 -0
  44. package/dist/exporters/matrix/render-csv.d.ts +9 -0
  45. package/dist/exporters/matrix/render-csv.d.ts.map +1 -0
  46. package/dist/exporters/matrix/render-csv.js +92 -0
  47. package/dist/exporters/matrix/render-csv.js.map +1 -0
  48. package/dist/exporters/matrix/render-xlsx.d.ts +41 -0
  49. package/dist/exporters/matrix/render-xlsx.d.ts.map +1 -0
  50. package/dist/exporters/matrix/render-xlsx.js +430 -0
  51. package/dist/exporters/matrix/render-xlsx.js.map +1 -0
  52. package/dist/exporters/matrix/types.d.ts +199 -0
  53. package/dist/exporters/matrix/types.d.ts.map +1 -0
  54. package/dist/exporters/matrix/types.js +15 -0
  55. package/dist/exporters/matrix/types.js.map +1 -0
  56. package/dist/exporters/matrix/wording.d.ts +61 -0
  57. package/dist/exporters/matrix/wording.d.ts.map +1 -0
  58. package/dist/exporters/matrix/wording.js +221 -0
  59. package/dist/exporters/matrix/wording.js.map +1 -0
  60. package/dist/exporters/scenario-merger.d.ts.map +1 -1
  61. package/dist/exporters/scenario-merger.js +2 -1
  62. package/dist/exporters/scenario-merger.js.map +1 -1
  63. package/dist/exporters/spec-parser.d.ts.map +1 -1
  64. package/dist/exporters/spec-parser.js +2 -1
  65. package/dist/exporters/spec-parser.js.map +1 -1
  66. package/dist/exporters/xlsx-report-builder.d.ts +1 -1
  67. package/dist/exporters/xlsx-report-builder.d.ts.map +1 -1
  68. package/dist/exporters/xlsx-report-builder.js +3 -3
  69. package/dist/exporters/xlsx-report-builder.js.map +1 -1
  70. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/click-action.hbs +1 -1
  71. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/click-element-with-text.hbs +1 -1
  72. package/dist/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-timeout.hbs +1 -1
  73. package/dist/generators/test-generator/utils/runtime-data-transformer.d.ts.map +1 -1
  74. package/dist/generators/test-generator/utils/runtime-data-transformer.js +28 -17
  75. package/dist/generators/test-generator/utils/runtime-data-transformer.js.map +1 -1
  76. package/dist/harness/audit.d.ts +10 -0
  77. package/dist/harness/audit.d.ts.map +1 -1
  78. package/dist/harness/audit.js +98 -16
  79. package/dist/harness/audit.js.map +1 -1
  80. package/dist/harness/blindspot.d.ts.map +1 -1
  81. package/dist/harness/blindspot.js +2 -1
  82. package/dist/harness/blindspot.js.map +1 -1
  83. package/dist/harness/capability-plan.d.ts +2 -0
  84. package/dist/harness/capability-plan.d.ts.map +1 -1
  85. package/dist/harness/capability-plan.js +17 -4
  86. package/dist/harness/capability-plan.js.map +1 -1
  87. package/dist/harness/feedback.d.ts.map +1 -1
  88. package/dist/harness/feedback.js +3 -2
  89. package/dist/harness/feedback.js.map +1 -1
  90. package/dist/harness/flow-check.d.ts.map +1 -1
  91. package/dist/harness/flow-check.js +2 -1
  92. package/dist/harness/flow-check.js.map +1 -1
  93. package/dist/harness/flow-plan.d.ts.map +1 -1
  94. package/dist/harness/flow-plan.js +3 -2
  95. package/dist/harness/flow-plan.js.map +1 -1
  96. package/dist/harness/intent.d.ts.map +1 -1
  97. package/dist/harness/intent.js +2 -1
  98. package/dist/harness/intent.js.map +1 -1
  99. package/dist/harness/journey.d.ts.map +1 -1
  100. package/dist/harness/journey.js +3 -2
  101. package/dist/harness/journey.js.map +1 -1
  102. package/dist/harness/ledger.d.ts.map +1 -1
  103. package/dist/harness/ledger.js +3 -2
  104. package/dist/harness/ledger.js.map +1 -1
  105. package/dist/harness/manifest.d.ts.map +1 -1
  106. package/dist/harness/manifest.js +4 -3
  107. package/dist/harness/manifest.js.map +1 -1
  108. package/dist/harness/parse.d.ts.map +1 -1
  109. package/dist/harness/parse.js +16 -3
  110. package/dist/harness/parse.js.map +1 -1
  111. package/dist/harness/quality-gates.d.ts.map +1 -1
  112. package/dist/harness/quality-gates.js +2 -1
  113. package/dist/harness/quality-gates.js.map +1 -1
  114. package/dist/harness/read-text.d.ts +22 -0
  115. package/dist/harness/read-text.d.ts.map +1 -0
  116. package/dist/harness/read-text.js +64 -0
  117. package/dist/harness/read-text.js.map +1 -0
  118. package/dist/harness/script-check.d.ts.map +1 -1
  119. package/dist/harness/script-check.js +3 -2
  120. package/dist/harness/script-check.js.map +1 -1
  121. package/dist/harness/sensors.d.ts +13 -1
  122. package/dist/harness/sensors.d.ts.map +1 -1
  123. package/dist/harness/sensors.js +63 -20
  124. package/dist/harness/sensors.js.map +1 -1
  125. package/dist/harness/spec-coverage.d.ts +5 -0
  126. package/dist/harness/spec-coverage.d.ts.map +1 -1
  127. package/dist/harness/spec-coverage.js +17 -7
  128. package/dist/harness/spec-coverage.js.map +1 -1
  129. package/dist/harness/trace.d.ts.map +1 -1
  130. package/dist/harness/trace.js +4 -3
  131. package/dist/harness/trace.js.map +1 -1
  132. package/dist/harness/viewpoint-baseline.d.ts +49 -0
  133. package/dist/harness/viewpoint-baseline.d.ts.map +1 -0
  134. package/dist/harness/viewpoint-baseline.js +141 -0
  135. package/dist/harness/viewpoint-baseline.js.map +1 -0
  136. package/dist/harness/viewpoint-ledger.d.ts.map +1 -1
  137. package/dist/harness/viewpoint-ledger.js +2 -1
  138. package/dist/harness/viewpoint-ledger.js.map +1 -1
  139. package/dist/ingest/legacy-parser.d.ts +3 -0
  140. package/dist/ingest/legacy-parser.d.ts.map +1 -1
  141. package/dist/ingest/legacy-parser.js +52 -3
  142. package/dist/ingest/legacy-parser.js.map +1 -1
  143. package/dist/orchestrator/assets-drift.d.ts +24 -0
  144. package/dist/orchestrator/assets-drift.d.ts.map +1 -0
  145. package/dist/orchestrator/assets-drift.js +80 -0
  146. package/dist/orchestrator/assets-drift.js.map +1 -0
  147. package/dist/orchestrator/templates/ai-src/commands/create-test.md +24 -0
  148. package/dist/orchestrator/templates/ai-src/commands/delivery.md +203 -120
  149. package/dist/orchestrator/templates/ai-src/config/claude.md +1 -1
  150. package/dist/orchestrator/templates/ai-src/config/copilot.md +1 -1
  151. package/dist/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +102 -6
  152. package/dist/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +8 -0
  153. package/dist/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +23 -0
  154. package/package.json +4 -4
  155. package/src/cli/commands/audit.ts +23 -1
  156. package/src/cli/commands/delivery.ts +240 -18
  157. package/src/cli/commands/ingest.ts +57 -5
  158. package/src/cli/index.ts +6 -0
  159. package/src/dashboard/snapshot-builder.ts +8 -1
  160. package/src/dashboard/templates/index.html +1 -1
  161. package/src/exporters/api-environment.ts +97 -0
  162. package/src/exporters/feature-parser.ts +21 -2
  163. package/src/exporters/matrix/build.ts +551 -0
  164. package/src/exporters/matrix/export.ts +149 -0
  165. package/src/exporters/matrix/fingerprint.ts +49 -0
  166. package/src/exporters/matrix/gates.ts +400 -0
  167. package/src/exporters/matrix/map-loader.ts +163 -0
  168. package/src/exporters/matrix/render-csv.ts +94 -0
  169. package/src/exporters/matrix/render-xlsx.ts +420 -0
  170. package/src/exporters/matrix/types.ts +226 -0
  171. package/src/exporters/matrix/wording.ts +221 -0
  172. package/src/exporters/scenario-merger.ts +2 -1
  173. package/src/exporters/spec-parser.ts +2 -1
  174. package/src/exporters/xlsx-report-builder.ts +3 -2
  175. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/click-action.hbs +1 -1
  176. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/click-element-with-text.hbs +1 -1
  177. package/src/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-timeout.hbs +1 -1
  178. package/src/generators/test-generator/utils/runtime-data-transformer.ts +29 -18
  179. package/src/harness/audit.ts +104 -18
  180. package/src/harness/blindspot.ts +2 -1
  181. package/src/harness/capability-plan.ts +17 -4
  182. package/src/harness/feedback.ts +3 -2
  183. package/src/harness/flow-check.ts +2 -1
  184. package/src/harness/flow-plan.ts +3 -2
  185. package/src/harness/intent.ts +2 -1
  186. package/src/harness/journey.ts +3 -2
  187. package/src/harness/ledger.ts +3 -2
  188. package/src/harness/manifest.ts +4 -3
  189. package/src/harness/parse.ts +17 -3
  190. package/src/harness/quality-gates.ts +2 -1
  191. package/src/harness/read-text.ts +28 -0
  192. package/src/harness/script-check.ts +3 -2
  193. package/src/harness/sensors.ts +55 -8
  194. package/src/harness/spec-coverage.ts +22 -7
  195. package/src/harness/trace.ts +4 -3
  196. package/src/harness/viewpoint-baseline.ts +128 -0
  197. package/src/harness/viewpoint-ledger.ts +2 -1
  198. package/src/ingest/legacy-parser.ts +48 -3
  199. package/src/orchestrator/assets-drift.ts +64 -0
  200. package/src/orchestrator/templates/ai-src/commands/create-test.md +24 -0
  201. package/src/orchestrator/templates/ai-src/commands/delivery.md +203 -120
  202. package/src/orchestrator/templates/ai-src/config/claude.md +1 -1
  203. package/src/orchestrator/templates/ai-src/config/copilot.md +1 -1
  204. package/src/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +102 -6
  205. package/src/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +8 -0
  206. package/src/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +23 -0
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.VIEWPOINT_DEPENDENT_AXES = void 0;
37
+ exports.checkViewpointBaseline = checkViewpointBaseline;
38
+ exports.acceptViewpointBaseline = acceptViewpointBaseline;
39
+ exports.readViewpointDeclaration = readViewpointDeclaration;
40
+ const crypto = __importStar(require("crypto"));
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const parse_1 = require("./parse");
44
+ /**
45
+ * Keep the yardstick from moving with the thing it measures.
46
+ *
47
+ * `test-viewpoint.md` is the project's declaration of WHAT must be tested, and two
48
+ * scored axes measure the suite against it: `traceability` (do scenarios use the
49
+ * declared viewpoint ids?) and `atomicLedger` (is every declared item covered?).
50
+ * Both are only evidence while the declaration is INDEPENDENT of the suite.
51
+ *
52
+ * A `/sungen:create-test` run rewrote a filled test-viewpoint.md, replacing the
53
+ * declared categories with exactly the ones it had just generated. Both axes read
54
+ * 100% by construction — and the performance viewpoint it dropped on the way
55
+ * (4 perf scenarios → 2) went unreported, because VP-PERF was no longer declared
56
+ * for anything to be missing from.
57
+ *
58
+ * So: remember the declaration, and when it changes, say so and stop counting the
59
+ * two axes that depend on it until a human accepts the new baseline. Same rule the
60
+ * score model already applies to an undetermined page type — absent independent
61
+ * evidence scores nothing, in either direction.
62
+ */
63
+ /** Axes whose evidence is `test-viewpoint.md` — excluded while the baseline is unconfirmed. */
64
+ exports.VIEWPOINT_DEPENDENT_AXES = ['atomicLedger', 'traceability'];
65
+ function baselinePath(projectRoot) {
66
+ return path.join(projectRoot, '.sungen', 'viewpoint-baseline.json');
67
+ }
68
+ function readBaselineFile(projectRoot) {
69
+ const p = baselinePath(projectRoot);
70
+ if (!fs.existsSync(p))
71
+ return { version: 1, units: {} };
72
+ try {
73
+ const parsed = JSON.parse(fs.readFileSync(p, 'utf-8'));
74
+ return parsed && typeof parsed === 'object' && parsed.units ? parsed : { version: 1, units: {} };
75
+ }
76
+ catch {
77
+ return { version: 1, units: {} }; // unreadable → treat as unrecorded, never throw
78
+ }
79
+ }
80
+ function writeBaselineFile(projectRoot, data) {
81
+ const p = baselinePath(projectRoot);
82
+ fs.mkdirSync(path.dirname(p), { recursive: true });
83
+ fs.writeFileSync(p, `${JSON.stringify(data, null, 2)}\n`, 'utf-8');
84
+ }
85
+ /**
86
+ * Hash the DECLARATION, not the prose: an author reflowing a sentence must not read
87
+ * as the taxonomy moving. Only the declared viewpoint ids are fingerprinted.
88
+ */
89
+ function fingerprint(ids) {
90
+ return crypto.createHash('sha1').update(ids.join('\n')).digest('hex').slice(0, 12);
91
+ }
92
+ /**
93
+ * Compare the unit's current test-viewpoint declaration to the recorded baseline.
94
+ * Read-only — recording is the caller's decision, so an audit stays a measurement
95
+ * and `--accept-viewpoint` stays the explicit human act. A first sighting reports
96
+ * `new` (nothing to compare against yet).
97
+ */
98
+ function checkViewpointBaseline(projectRoot, unitId, viewpointPath) {
99
+ if (!fs.existsSync(viewpointPath))
100
+ return { status: 'absent', hash: '', ids: [] };
101
+ const ids = (0, parse_1.parseViewpointOverview)(viewpointPath).map((v) => v.id).sort();
102
+ const hash = fingerprint(ids);
103
+ if (ids.length === 0)
104
+ return { status: 'absent', hash: '', ids: [] };
105
+ const file = readBaselineFile(projectRoot);
106
+ const recorded = file.units[unitId];
107
+ if (!recorded)
108
+ return { status: 'new', hash, ids };
109
+ if (recorded.hash === hash)
110
+ return { status: 'unchanged', hash, ids, recordedAt: recorded.recordedAt };
111
+ const before = new Set(recorded.ids ?? []);
112
+ const now = new Set(ids);
113
+ return {
114
+ status: 'changed',
115
+ hash,
116
+ ids,
117
+ added: ids.filter((i) => !before.has(i)),
118
+ removed: (recorded.ids ?? []).filter((i) => !now.has(i)),
119
+ recordedAt: recorded.recordedAt,
120
+ };
121
+ }
122
+ /** Record the current declaration as the accepted baseline (`sungen audit --accept-viewpoint`). */
123
+ function acceptViewpointBaseline(projectRoot, unitId, current) {
124
+ const file = readBaselineFile(projectRoot);
125
+ file.units[unitId] = {
126
+ hash: current.hash,
127
+ ids: current.ids,
128
+ recordedAt: new Date().toISOString(),
129
+ };
130
+ writeBaselineFile(projectRoot, file);
131
+ }
132
+ /** Read the declaration without recording anything (used by `--accept-viewpoint`). */
133
+ function readViewpointDeclaration(viewpointPath) {
134
+ if (!fs.existsSync(viewpointPath))
135
+ return null;
136
+ const ids = (0, parse_1.parseViewpointOverview)(viewpointPath).map((v) => v.id).sort();
137
+ if (ids.length === 0)
138
+ return null;
139
+ return { hash: fingerprint(ids), ids };
140
+ }
141
+ //# sourceMappingURL=viewpoint-baseline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewpoint-baseline.js","sourceRoot":"","sources":["../../src/harness/viewpoint-baseline.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"viewpoint-ledger.d.ts","sourceRoot":"","sources":["../../src/harness/viewpoint-ledger.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,WAAW,UAAU;IAAG,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE;AAE3E,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C;AAKD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CA4B1F;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CAsBnH"}
1
+ {"version":3,"file":"viewpoint-ledger.d.ts","sourceRoot":"","sources":["../../src/harness/viewpoint-ledger.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,WAAW,UAAU;IAAG,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE;AAE3E,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C;AAKD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CA4B1F;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CAsBnH"}
@@ -46,13 +46,14 @@ exports.viewpointLedger = viewpointLedger;
46
46
  * gaps that inflate a "looks-covered" score; it does not fail the gate.
47
47
  */
48
48
  const fs = __importStar(require("fs"));
49
+ const read_text_1 = require("./read-text");
49
50
  const ID_RE = /\b([A-Z]{1,5}\d{0,2}(?:[.\-][A-Za-z0-9]+)*-?\d{0,3})\b/; // VP0.Title, VP7-002, MS-HP-001, TV-01
50
51
  const GENERIC = new Set(['display', 'shown', 'value', 'field', 'input', 'page', 'screen', 'button', 'link', 'text', 'check', 'verify', 'should', 'with', 'when', 'then', 'user', 'this', 'that', 'each', 'item', 'items']);
51
52
  /** Extract atomic checklist items from a viewpoint file (format-tolerant). */
52
53
  function parseViewpointItems(viewpointPath) {
53
54
  if (!fs.existsSync(viewpointPath))
54
55
  return [];
55
- const lines = fs.readFileSync(viewpointPath, 'utf-8').split('\n');
56
+ const lines = (0, read_text_1.readTextFile)(viewpointPath).split('\n');
56
57
  const items = [];
57
58
  let inFence = false;
58
59
  for (const raw of lines) {
@@ -1 +1 @@
1
- {"version":3,"file":"viewpoint-ledger.js","sourceRoot":"","sources":["../../src/harness/viewpoint-ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"viewpoint-ledger.js","sourceRoot":"","sources":["../../src/harness/viewpoint-ledger.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,9 @@ export interface LegacyInventory {
25
25
  };
26
26
  sheets: SheetInfo[];
27
27
  testcases: LegacyTestcase[];
28
+ /** Anti-silence guards: convention mismatches that would otherwise drop data quietly
29
+ * (near-miss headers, testcase tab with 0 rows, mandatory column empty on every row). */
30
+ warnings?: string[];
28
31
  }
29
32
  export declare function parseCSV(text: string): string[][];
30
33
  export interface RawSheet {
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-parser.d.ts","sourceRoot":"","sources":["../../src/ingest/legacy-parser.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,kBAAkB,GAAG,cAAc,GAAG,SAAS,CAAC;AACrF,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAE1E,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAGD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAcjD;AA8DD,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;CAAE;AAsC5D,uEAAuE;AACvE,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAUnF;AAED;gFACgF;AAChF,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAmBnH"}
1
+ {"version":3,"file":"legacy-parser.d.ts","sourceRoot":"","sources":["../../src/ingest/legacy-parser.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,kBAAkB,GAAG,cAAc,GAAG,SAAS,CAAC;AACrF,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAE1E,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B;8FAC0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAGD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAcjD;AAkFD,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;CAAE;AAsC5D,uEAAuE;AACvE,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAUnF;AAED;gFACgF;AAChF,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAyCnH"}
@@ -82,7 +82,11 @@ function parseCSV(text) {
82
82
  }
83
83
  return rows;
84
84
  }
85
- const norm = (s) => (s || '').replace(/\*/g, '').trim().toLowerCase();
85
+ // Strip the "required" decoration `(*)` BEFORE stray asterisks: legacy workbooks
86
+ // mark mandatory columns as `Steps (*)` / `TC ID (*)`. Removing only the `*` left
87
+ // `steps ()` — classification regexes still matched (/steps?|expected/), but the
88
+ // exact-key column lookups missed and every mandatory cell came back '' silently.
89
+ const norm = (s) => (s || '').replace(/\(\s*\*\s*\)/g, '').replace(/\*/g, '').trim().toLowerCase();
86
90
  function detectSheetType(rows) {
87
91
  for (let i = 0; i < Math.min(rows.length, 40); i++) {
88
92
  const cells = rows[i].map(norm);
@@ -144,6 +148,27 @@ function parseTestcaseSheet(rows, headerRow, sheet) {
144
148
  }
145
149
  return out;
146
150
  }
151
+ /**
152
+ * exceljs's `.text` getter can THROW on a merged cell whose master value is null
153
+ * (MergeValue.toString() on null) — a `cell.text != null` guard never runs because
154
+ * READING the property explodes. Field workbook: 25 such cells across 3 tabs
155
+ * (Google-Sheets-exported merged headers). Guard on `.value` first (safe — merge
156
+ * slaves delegate to the master's value without stringifying), and keep a
157
+ * try/catch backstop for values that are non-null yet still un-stringifiable
158
+ * (e.g. a formula cell whose result is null). Never hand-stringify `.value` —
159
+ * richText/hyperlink objects would become "[object Object]"; exceljs's own
160
+ * `.text` stays the single formatter.
161
+ */
162
+ function safeCellText(cell) {
163
+ if (cell.value == null)
164
+ return '';
165
+ try {
166
+ return String(cell.text ?? '');
167
+ }
168
+ catch {
169
+ return '';
170
+ }
171
+ }
147
172
  /** Load sheets from one input file: CSV (1 sheet), XLSX (all sheets), or a JSON
148
173
  * sheet-bundle (the shape the Google-Sheets/MCP skill produces). */
149
174
  async function loadSheets(filePath) {
@@ -171,7 +196,7 @@ async function loadSheets(filePath) {
171
196
  const rows = [];
172
197
  ws.eachRow((row) => {
173
198
  const cells = [];
174
- row.eachCell({ includeEmpty: true }, (cell) => { cells.push(cell.text != null ? String(cell.text) : ''); });
199
+ row.eachCell({ includeEmpty: true }, (cell) => { cells.push(safeCellText(cell)); });
175
200
  rows.push(cells);
176
201
  });
177
202
  out.push({ name: ws.name, rows });
@@ -199,7 +224,7 @@ async function parseLegacyFile(filePaths, onlySheets) {
199
224
  const want = onlySheets && onlySheets.length ? new Set(onlySheets.map((s) => s.trim().toLowerCase())) : null;
200
225
  const inv = {
201
226
  source: { file: files.map((f) => path.basename(f)).join(', ') },
202
- sheets: [], testcases: [],
227
+ sheets: [], testcases: [], warnings: [],
203
228
  };
204
229
  for (const f of files) {
205
230
  for (const s of await loadSheets(f)) {
@@ -209,6 +234,30 @@ async function parseLegacyFile(filePaths, onlySheets) {
209
234
  let tcs = [];
210
235
  if (type === 'testcase' && headerRow >= 0)
211
236
  tcs = parseTestcaseSheet(s.rows, headerRow, s.name);
237
+ // Anti-silence guards — a convention mismatch must SAY so, never quietly drop data:
238
+ // (a) near-miss: a tab that carries a TC-ID-ish header yet classified unknown;
239
+ // (b) a testcase tab whose extraction produced ZERO rows;
240
+ // (c) rows extracted but a mandatory column resolved empty on EVERY row.
241
+ if (type === 'unknown') {
242
+ const loose = (v) => v.replace(/[^a-z0-9]/gi, '').toLowerCase();
243
+ const nearMissRow = s.rows.slice(0, 40).find((r) => r.some((c) => /tcid/.test(loose(c))));
244
+ if (nearMissRow) {
245
+ inv.warnings.push(`sheet "${s.name}": looks like a testcase sheet (TC-ID-like header found) but was NOT classified — header candidates: [${nearMissRow.filter(Boolean).slice(0, 10).join(' | ')}]`);
246
+ }
247
+ }
248
+ else if (type === 'testcase' && headerRow >= 0) {
249
+ const header = s.rows[headerRow].filter(Boolean).slice(0, 12).join(' | ');
250
+ if (tcs.length === 0) {
251
+ inv.warnings.push(`sheet "${s.name}": classified testcase but 0 rows extracted — column names may not follow the expected convention. Header row: [${header}]`);
252
+ }
253
+ else {
254
+ for (const [field, label] of [['steps', 'Steps'], ['expected', 'Expected results']]) {
255
+ if (tcs.every((t) => !t[field])) {
256
+ inv.warnings.push(`sheet "${s.name}": the "${label}" column resolved EMPTY for all ${tcs.length} extracted row(s) — check its header spelling. Header row: [${header}]`);
257
+ }
258
+ }
259
+ }
260
+ }
212
261
  inv.sheets.push({ name: s.name, type, rows: tcs.length || s.rows.length });
213
262
  inv.testcases.push(...tcs);
214
263
  }
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-parser.js","sourceRoot":"","sources":["../../src/ingest/legacy-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"legacy-parser.js","sourceRoot":"","sources":["../../src/ingest/legacy-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Are this project's AI assets (commands + skills under `.claude/` etc.) the ones
3
+ * the running sungen would write?
4
+ *
5
+ * Upgrading the npm package does NOT refresh them — `sungen update` does. Nothing
6
+ * said so, so a project kept running prompts from an older build indefinitely: a
7
+ * QA upgraded, re-ran `/sungen:create-test`, and got the OLD command (141 lines vs
8
+ * the shipped 267) with none of the newer guidance. The failure is invisible
9
+ * because everything still "works", just to an older specification.
10
+ *
11
+ * The manifest already records the version + a hash per managed file; this only
12
+ * reads it and reports.
13
+ */
14
+ export interface AssetsDrift {
15
+ recordedVersion: string;
16
+ runningVersion: string;
17
+ /** Managed files whose content no longer matches the manifest's hash. */
18
+ changed: number;
19
+ total: number;
20
+ }
21
+ export declare function checkAssetsDrift(cwd: string): AssetsDrift | null;
22
+ /** One line, on stderr so `--json` output stays machine-readable. */
23
+ export declare function warnAssetsDrift(cwd: string): void;
24
+ //# sourceMappingURL=assets-drift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-drift.d.ts","sourceRoot":"","sources":["../../src/orchestrator/assets-drift.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAwBhE;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAWjD"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.checkAssetsDrift = checkAssetsDrift;
37
+ exports.warnAssetsDrift = warnAssetsDrift;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const package_info_1 = require("../exporters/package-info");
41
+ function checkAssetsDrift(cwd) {
42
+ const manifestPath = path.join(cwd, '.sungen', 'manifest.json');
43
+ if (!fs.existsSync(manifestPath))
44
+ return null; // not a sungen project (yet)
45
+ let manifest;
46
+ try {
47
+ manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
48
+ }
49
+ catch {
50
+ return null; // unreadable → say nothing
51
+ }
52
+ const recordedVersion = manifest.version ?? '';
53
+ const runningVersion = (0, package_info_1.getPackageVersion)();
54
+ const managed = manifest.managed ?? {};
55
+ const total = Object.keys(managed).length;
56
+ if (!recordedVersion || total === 0)
57
+ return null;
58
+ // A version match is the common case — trust it and skip hashing entirely.
59
+ if (recordedVersion === runningVersion)
60
+ return null;
61
+ let changed = 0;
62
+ for (const rel of Object.keys(managed)) {
63
+ if (!fs.existsSync(path.join(cwd, rel)))
64
+ changed++;
65
+ }
66
+ return { recordedVersion, runningVersion, changed, total };
67
+ }
68
+ /** One line, on stderr so `--json` output stays machine-readable. */
69
+ function warnAssetsDrift(cwd) {
70
+ const drift = checkAssetsDrift(cwd);
71
+ if (!drift)
72
+ return;
73
+ const gray = '\x1b[90m';
74
+ const cyan = '\x1b[36m';
75
+ const reset = '\x1b[0m';
76
+ process.stderr.write(`${gray}note: this project's AI commands/skills were written by sungen ${drift.recordedVersion}, ` +
77
+ `you are running ${drift.runningVersion} — run ${cyan}sungen update${reset}${gray} to refresh them ` +
78
+ `(upgrading the package alone does not).${reset}\n`);
79
+ }
80
+ //# sourceMappingURL=assets-drift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets-drift.js","sourceRoot":"","sources":["../../src/orchestrator/assets-drift.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,4CAwBC;AAGD,0CAWC;AA/DD,uCAAyB;AACzB,2CAA6B;AAC7B,4DAA8D;AAuB9D,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAChE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC,CAAG,6BAA6B;IAE9E,IAAI,QAAgE,CAAC;IACrE,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAoC,2BAA2B;IAC7E,CAAC;IACD,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IAC/C,MAAM,cAAc,GAAG,IAAA,gCAAiB,GAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,CAAC,eAAe,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,2EAA2E;IAC3E,IAAI,eAAe,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IAEpD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;IACrD,CAAC;IACD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC7D,CAAC;AAED,qEAAqE;AACrE,SAAgB,eAAe,CAAC,GAAW;IACzC,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,IAAI,GAAG,UAAU,CAAC;IACxB,MAAM,IAAI,GAAG,UAAU,CAAC;IACxB,MAAM,KAAK,GAAG,SAAS,CAAC;IACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,kEAAkE,KAAK,CAAC,eAAe,IAAI;QAClG,mBAAmB,KAAK,CAAC,cAAc,UAAU,IAAI,gBAAgB,KAAK,GAAG,IAAI,mBAAmB;QACpG,0CAA0C,KAAK,IAAI,CACpD,CAAC;AACJ,CAAC"}
@@ -115,12 +115,16 @@ If the unit is **api-first** (`qa/api/<name>/` or `qa/api/flows/<name>/`), the d
115
115
  - **Fill test-viewpoint.md first** — I'll help you identify edge cases, known issues, and design decisions for this screen before generating tests
116
116
  - **Continue without it** — generate tests from spec and other sources only
117
117
 
118
+ **A filled `test-viewpoint.md` is an INPUT — never an output.** Do NOT rewrite, re-order, or replace its viewpoint declarations as part of generating tests. It is the yardstick two scored axes measure the suite against (`traceability`, `atomicLedger`): rewrite it to match what you just generated and both read 100% by construction, while any viewpoint you quietly dropped stops being missing from anything. If the declared taxonomy genuinely does not fit the screen, **report the mismatch and ask** — propose the diff (ids added / removed and why) and let the QA decide. `sungen audit` reports `VIEWPOINT-BASELINE-CHANGED` and stops scoring both axes when this file moves, so an unannounced rewrite lowers the score rather than raising it.
119
+
118
120
  **Context discovery (prefer an isolated agent).** Reading all sources here can flood this context. **Claude Code:** spawn the **`sungen-discovery`** sub-agent (Task tool, `subagent_type: sungen-discovery`) to read spec/figma/ui/live in isolation and return a **compact discovery report** (sources, completeness, conflicts, recommended route, key facts); use that report instead of pasting raw sources. **Copilot / no sub-agents:** do the reading inline as below.
119
121
  {{/cap}}
120
122
  {{^cap parallel-subagents}}
121
123
  - If `test-viewpoint.md` exists → read it. If it only contains HTML comments (scaffold template), ask:
122
124
  - **1) Fill test-viewpoint.md first** — identify edge cases, known issues, and design decisions before generating tests
123
125
  - **2) Continue without it** — generate tests from spec and other sources only
126
+
127
+ **A filled `test-viewpoint.md` is an INPUT — never an output.** Do NOT rewrite, re-order, or replace its viewpoint declarations while generating tests. It is the yardstick two scored axes measure the suite against (`traceability`, `atomicLedger`): rewrite it to match what you just generated and both read 100% by construction, while any viewpoint you quietly dropped stops being missing from anything. If the declared taxonomy genuinely does not fit the screen, **report the mismatch and ask** — propose the diff (ids added / removed and why) and let the QA decide. `sungen audit` reports `VIEWPOINT-BASELINE-CHANGED` and stops scoring both axes when this file moves.
124
128
  {{/cap}}
125
129
 
126
130
  **Auto-detect visual source** — do NOT ask the user to pick a source. Instead, check what already exists and use it:
@@ -256,3 +260,23 @@ If the unit is **api-first** (`qa/api/<name>/` or `qa/api/flows/<name>/`), the d
256
260
  {{^cap parallel-subagents}}
257
261
  **No selectors.yaml** — selectors are generated during `/sungen-run-test`.
258
262
  {{/cap}}
263
+
264
+ ## Finish — always hand the next step back
265
+
266
+ Do not stop after writing the files. Close every run with, in this order:
267
+
268
+ 1. **The traceability check below** — an untagged requirement becomes an uncovered gap at delivery.
269
+ 2. **The harness result in one line** — score, gate verdict, and the axis the `SCORE-CAPPED` finding
270
+ names (that finding is the single answer to "how do I raise the score").
271
+ 3. **`AskUserQuestion` with the next actions** — never end with prose alone. Offer
272
+ `/sungen:run-test <name>` (recommended once the tiers are written), re-running `create-test` to
273
+ extend, and "Done for now". A run that ends without this leaves the operator guessing.
274
+
275
+ ### Requirement traceability
276
+
277
+ Cross-check `requirements/spec.md` against the scenarios you wrote: every `FR-`/`TR-`/`NFR-` id
278
+ must either carry a `@spec:<id>` tag on the scenario that proves it, or be a conscious
279
+ out-of-scope decision you state in the summary. `sungen audit` reports `SPEC-TRACE-IMPLICIT` for
280
+ requirements it could only match by keyword — treat that list as a to-do: add the tag to the
281
+ proving scenario, do not leave the link to inference. Delivery's requirement table follows the
282
+ tag only, so an untagged requirement is later reported as an uncovered gap.