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

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 (46) hide show
  1. package/dist/cli/commands/delivery.d.ts.map +1 -1
  2. package/dist/cli/commands/delivery.js +1 -0
  3. package/dist/cli/commands/delivery.js.map +1 -1
  4. package/dist/exporters/matrix/build.d.ts +8 -1
  5. package/dist/exporters/matrix/build.d.ts.map +1 -1
  6. package/dist/exporters/matrix/build.js +158 -22
  7. package/dist/exporters/matrix/build.js.map +1 -1
  8. package/dist/exporters/matrix/export.d.ts +2 -0
  9. package/dist/exporters/matrix/export.d.ts.map +1 -1
  10. package/dist/exporters/matrix/export.js +7 -0
  11. package/dist/exporters/matrix/export.js.map +1 -1
  12. package/dist/exporters/matrix/gates.d.ts.map +1 -1
  13. package/dist/exporters/matrix/gates.js +37 -0
  14. package/dist/exporters/matrix/gates.js.map +1 -1
  15. package/dist/exporters/matrix/map-loader.d.ts.map +1 -1
  16. package/dist/exporters/matrix/map-loader.js +18 -0
  17. package/dist/exporters/matrix/map-loader.js.map +1 -1
  18. package/dist/exporters/matrix/render-csv.d.ts +3 -2
  19. package/dist/exporters/matrix/render-csv.d.ts.map +1 -1
  20. package/dist/exporters/matrix/render-csv.js +48 -28
  21. package/dist/exporters/matrix/render-csv.js.map +1 -1
  22. package/dist/exporters/matrix/render-xlsx.d.ts +16 -8
  23. package/dist/exporters/matrix/render-xlsx.d.ts.map +1 -1
  24. package/dist/exporters/matrix/render-xlsx.js +116 -52
  25. package/dist/exporters/matrix/render-xlsx.js.map +1 -1
  26. package/dist/exporters/matrix/types.d.ts +23 -1
  27. package/dist/exporters/matrix/types.d.ts.map +1 -1
  28. package/dist/exporters/matrix/types.js.map +1 -1
  29. package/dist/exporters/matrix/wording.d.ts +45 -0
  30. package/dist/exporters/matrix/wording.d.ts.map +1 -0
  31. package/dist/exporters/matrix/wording.js +150 -0
  32. package/dist/exporters/matrix/wording.js.map +1 -0
  33. package/dist/orchestrator/templates/ai-src/commands/delivery.md +27 -1
  34. package/dist/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +31 -8
  35. package/package.json +3 -3
  36. package/src/cli/commands/delivery.ts +1 -0
  37. package/src/exporters/matrix/build.ts +160 -22
  38. package/src/exporters/matrix/export.ts +10 -0
  39. package/src/exporters/matrix/gates.ts +41 -0
  40. package/src/exporters/matrix/map-loader.ts +20 -1
  41. package/src/exporters/matrix/render-csv.ts +49 -29
  42. package/src/exporters/matrix/render-xlsx.ts +122 -55
  43. package/src/exporters/matrix/types.ts +27 -1
  44. package/src/exporters/matrix/wording.ts +157 -0
  45. package/src/orchestrator/templates/ai-src/commands/delivery.md +27 -1
  46. package/src/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +31 -8
@@ -74,11 +74,37 @@ dispositions: # scenarios intentionally NOT delivered as te
74
74
  locales.
75
75
  - MUST split: different target, intent, oracle family, category, execution mode (`@manual` vs
76
76
  auto), test layer (`@api`/`@query`), or priority tag; sequence-sensitive flows (re-Given/When
77
- after a Then) stay solo.
77
+ after a Then) stay solo. **Different risk classes never merge** — XSS and SQL injection are
78
+ separate items even though both are "injection on the same field" (different risk, action,
79
+ and oracle family); a component's visibility rule and its action/revalidation rule are two
80
+ intents, not one.
78
81
  - Every scenario must land in exactly one group **or** one disposition (Gate B enforces 100%
79
82
  disposition). Data-setup blocks (`@manual:data-setup`) → `excluded`; SPEC-GAP placeholders →
80
83
  `blocked`.
81
84
 
85
+ **Wording rules for `intent`/`oracle` (customer-facing — Gate W lints these):**
86
+ - Plain product language, present simple, ~10–20 words, one behavior:
87
+ "A user can sign in with valid credentials and is redirected to the Jobs page."
88
+ - Oracle = the observable outcome as a definite assertion ("The Jobs page is displayed and the
89
+ Logout link is visible.") — no `should`, no tester actions.
90
+ - NEVER: `{{tokens}}`, `[Selector]` references, DSL phrasing (`User fill/click/see`), generator
91
+ labels (`Setup:`/`Observable:`/`Oracle:`), or vague verbs (`handles`, `surfaces`) when a precise
92
+ behavior exists. Use the visible UI label (the Login button, the Email field).
93
+ - **Preserve the source meaning exactly** — never strengthen, weaken, or reinterpret an oracle
94
+ (a security assertion especially: if the source says "the password appears ONLY in the HTTPS
95
+ POST body", do not write "no plaintext password on the network").
96
+
97
+ **Requirement coverage (`requirements:` section, optional):** `sungen delivery` scans
98
+ `requirements/spec.md` for FR-/TR-/NFR- ids; ids traced by `@spec:` tags are `covered`, the rest
99
+ are `gap` (Gate R warning). Record the reviewed status for genuine non-gaps:
100
+
101
+ ```yaml
102
+ requirements:
103
+ TR-007: { status: planned, note: Performance needs Lighthouse-style tooling }
104
+ TR-004: { status: partially_covered, note: client-side covered by VP-SEC-003; hashing needs DB verify }
105
+ # status: covered | partially_covered | covered_elsewhere | planned | gap | not_applicable
106
+ ```
107
+
82
108
  Then validate and fix any ERROR findings:
83
109
 
84
110
  ```bash
@@ -32,16 +32,39 @@ spec is `docs/spec/delivery-coverage-matrix-spec.md`.
32
32
  B mapping (every scenario in exactly one group XOR one disposition) · C aggregation (mode/layer/
33
33
  priority recomputed and equal within a group — heuristic oracle-shape/precondition mismatches are
34
34
  review-level, silenced once approved and unchanged) · D executability (precondition · condition+
35
- data · trigger · oracle all renderable; every `{{var}}` resolves) · E drift (fingerprint mismatch
36
- back to review) · G review state (proposed groups block the official render; `--preview` renders
37
- a DRAFT watermark).
38
-
39
- **Workbook**: `Testcases` sheet (parent rows + outline-level-1 variant sub-rows collapse for the
40
- customer view, expand to execute; result roll-up failedblocked→not_run→partial→passed, counts like
41
- `7/8 Passed · 1 Failed`) + `Coverage` sheet (target × category grid with explicit `—` gaps,
42
- dispositions, generation manifest). CSV is flat with a `Level` column (`item`/`variant`).
35
+ data · trigger · oracle all renderable; every `{{var}}` resolves; **no template token may survive
36
+ into a rendered cell** test-data cross-references are resolved for display) · E drift
37
+ (fingerprint mismatch → back to review) · G review state (proposed groups block the official
38
+ render; `--preview` renders a DRAFT watermark) · R requirement coverage (spec FR/TR/NFR ids with
39
+ no trace and no `requirements:` status warning) · W wording lint (map intent/oracle containing
40
+ tokens, `[Selector]` refs, DSL phrasing, or generator labelswarning).
41
+
42
+ **Wording normalization (deterministic, after semantic normalization):** DSL steps render as
43
+ controlled manual-test English without changing meaning — actions in the imperative (`User fill
44
+ [Email] field with X` → `Enter X in the Email field.`), expected results as observable assertions
45
+ (`User see [Jobs] page` → `The Jobs page is displayed.`), preconditions as states (`The user is
46
+ signed out.`). Manual `# Tester verifies:` labels become structured fields: `Setup:` →
47
+ Precondition, `Action:` → Action, `Observable:` → Expected Result, `Oracle:` → a separate
48
+ `Verification method:` line. Sequence-sensitive flows keep event order: actions numbered with
49
+ mid-flow assertions inline as `Verify: …`; only the final Then block is the Expected Result.
50
+ Empty test values render as `(empty)`.
51
+
52
+ **Workbook**: `Testcases` sheet — parent rows + outline-level-1 variant sub-rows for **every**
53
+ item (single-variant included: the sub-row carries the source VP-id, resolved data, and the
54
+ result/evidence entry). Collapse outline for the customer view, expand to execute. Variant Result
55
+ cells have a dropdown (Passed/Failed/Blocked/Pending/N/A) and the parent Result is a **live Excel
56
+ formula** over its children (failed→blocked→pending→partial→passed, e.g. `2/3 Passed · 1 Failed`)
57
+ — a parent can never contradict its variants, even after manual edits. ID + Target columns are
58
+ frozen; dates are ISO (`2026-08-04`). `Coverage` sheet — requirement coverage table (every FR/TR/
59
+ NFR id with an explicit status), target × category grid with explicit `—` gaps, dispositions,
60
+ manifest. CSV is flat with a `Level` column (`item`/`variant`) + a requirement-coverage appendix.
43
61
  `delivery_item_count` ≠ progress — variants are the execution metric.
44
62
 
63
+ **Authoring guidance the matrix rewards** (create-test side): payload/provider matrices (SQLi
64
+ payload lists, OAuth provider sets) belong in `@cases` datasets so each case is an atomic,
65
+ independently-reportable variant; keep dataset `case:` labels short and stable (`CHK-EMAIL-I1`),
66
+ with descriptions in other columns — the label is part of the variant's identity.
67
+
45
68
  ---
46
69
 
47
70
  ## Legacy mode (--legacy / --full)