@sun-asterisk/sungen 2.6.2 → 2.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -20,7 +20,7 @@ async function main() {
20
20
  program
21
21
  .name('sungen')
22
22
  .description('Deterministic E2E Test Compiler — Gherkin + Selectors → Playwright')
23
- .version('2.6.2');
23
+ .version('2.6.3');
24
24
  // Global options
25
25
  program
26
26
  .option('-v, --verbose', 'Enable verbose logging');
@@ -1 +1 @@
1
- {"version":3,"file":"ai-rules-updater.d.ts","sourceRoot":"","sources":["../../src/orchestrator/ai-rules-updater.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,eAAO,MAAM,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAqDnD,CAAC;AAEF,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,aAAa,CAAS;gBAElB,GAAG,EAAE,MAAM;IAKjB,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAwF7C"}
1
+ {"version":3,"file":"ai-rules-updater.d.ts","sourceRoot":"","sources":["../../src/orchestrator/ai-rules-updater.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,eAAO,MAAM,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAyDnD,CAAC;AAEF,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,aAAa,CAAS;gBAElB,GAAG,EAAE,MAAM;IAKjB,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAwF7C"}
@@ -54,6 +54,7 @@ exports.AI_RULES_FILE_MAPPING = [
54
54
  ['claude-cmd-run-test.md', '.claude/commands/sungen/run-test.md'],
55
55
  ['claude-cmd-review.md', '.claude/commands/sungen/review.md'],
56
56
  ['claude-cmd-delivery.md', '.claude/commands/sungen/delivery.md'],
57
+ ['claude-cmd-dashboard.md', '.claude/commands/sungen/dashboard.md'],
57
58
  // Commands — GitHub Copilot
58
59
  ['copilot-cmd-add-screen.md', '.github/prompts/sungen-add-screen.prompt.md'],
59
60
  ['copilot-cmd-add-flow.md', '.github/prompts/sungen-add-flow.prompt.md'],
@@ -61,6 +62,7 @@ exports.AI_RULES_FILE_MAPPING = [
61
62
  ['copilot-cmd-run-test.md', '.github/prompts/sungen-run-test.prompt.md'],
62
63
  ['copilot-cmd-review.md', '.github/prompts/sungen-review.prompt.md'],
63
64
  ['copilot-cmd-delivery.md', '.github/prompts/sungen-delivery.prompt.md'],
65
+ ['copilot-cmd-dashboard.md', '.github/prompts/sungen-dashboard.prompt.md'],
64
66
  // Skills — Claude Code
65
67
  ['claude-skill-gherkin-syntax.md', '.claude/skills/sungen-gherkin-syntax/SKILL.md'],
66
68
  ['claude-skill-selector-keys.md', '.claude/skills/sungen-selector-keys/SKILL.md'],
@@ -71,6 +73,7 @@ exports.AI_RULES_FILE_MAPPING = [
71
73
  ['claude-skill-tc-review.md', '.claude/skills/sungen-tc-review/SKILL.md'],
72
74
  ['claude-skill-viewpoint.md', '.claude/skills/sungen-viewpoint/SKILL.md'],
73
75
  ['claude-skill-delivery.md', '.claude/skills/sungen-delivery/SKILL.md'],
76
+ ['claude-skill-dashboard.md', '.claude/skills/sungen-dashboard/SKILL.md'],
74
77
  ['claude-skill-capture-figma.md', '.claude/skills/sungen-capture-figma/SKILL.md'],
75
78
  ['claude-skill-capture-local.md', '.claude/skills/sungen-capture-local/SKILL.md'],
76
79
  ['claude-skill-capture-live.md', '.claude/skills/sungen-capture-live/SKILL.md'],
@@ -87,6 +90,7 @@ exports.AI_RULES_FILE_MAPPING = [
87
90
  ['github-skill-sungen-tc-review.md', '.github/skills/sungen-tc-review/SKILL.md'],
88
91
  ['github-skill-sungen-viewpoint.md', '.github/skills/sungen-viewpoint/SKILL.md'],
89
92
  ['github-skill-sungen-delivery.md', '.github/skills/sungen-delivery/SKILL.md'],
93
+ ['github-skill-sungen-dashboard.md', '.github/skills/sungen-dashboard/SKILL.md'],
90
94
  ['github-skill-sungen-capture-figma.md', '.github/skills/sungen-capture-figma/SKILL.md'],
91
95
  ['github-skill-sungen-capture-local.md', '.github/skills/sungen-capture-local/SKILL.md'],
92
96
  ['github-skill-sungen-capture-live.md', '.github/skills/sungen-capture-live/SKILL.md'],
@@ -1 +1 @@
1
- {"version":3,"file":"ai-rules-updater.js","sourceRoot":"","sources":["../../src/orchestrator/ai-rules-updater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-rules-updater.js","sourceRoot":"","sources":["../../src/orchestrator/ai-rules-updater.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: dashboard
3
+ description: 'Build a single-file HTML dashboard with test cases + pass/fail results, history trends, compare runs, and CSV/XLSX export.'
4
+ argument-hint: "[screen-name...] (omit for all)"
5
+ allowed-tools: Bash, Read, AskUserQuestion
6
+ ---
7
+
8
+ ## Role
9
+
10
+ You are a **QA Reporting Engineer**. Your job is to invoke the deterministic `sungen dashboard` CLI which builds a self-contained HTML report. The HTML is shareable as-is (open via `file://`, no server required).
11
+
12
+ ## Parameters
13
+
14
+ Parse **screens** from `$ARGUMENTS`:
15
+ - If empty → CLI will include **all** screens and flows.
16
+ - If provided → pass them through.
17
+
18
+ ## Steps
19
+
20
+ ### 1. Invoke the CLI
21
+
22
+ ```bash
23
+ npx sungen dashboard <screens>
24
+ ```
25
+
26
+ - No args → all screens + flows.
27
+ - With args → only those targets.
28
+ - Add `--open` to auto-open the rendered HTML in the user's browser.
29
+
30
+ The CLI handles:
31
+ - Discovery of `qa/screens/*` and `qa/flows/*`.
32
+ - Reuses the same parsers as `sungen delivery` (feature, spec.ts, test-data.yaml, results.json).
33
+ - Builds `DashboardSnapshot` JSON.
34
+ - Persists `qa/dashboard/history/<runId>.json` (max 10 retained, oldest pruned).
35
+ - Renders `qa/dashboard/index.html` (~1MB, single file, fully self-contained).
36
+ - Prints a summary table.
37
+
38
+ ### 2. Show the result + offer next steps
39
+
40
+ Forward the CLI's summary verbatim, then use `AskUserQuestion`:
41
+
42
+ - **Open the dashboard** — Suggest `npx sungen dashboard --open` to open in the default browser, or just open `qa/dashboard/index.html` manually.
43
+ - **Re-run after a test run** — Run `/sungen:run-test <screen>` to refresh `test-results/results.json`, then re-invoke `/sungen:dashboard`.
44
+ - **Build for a single screen** — Run `/sungen:dashboard <screen>` to scope the report.
45
+ - **Share the file** — The HTML at `qa/dashboard/index.html` can be emailed / Slacked / committed; recipients open it directly without any server.
46
+ - **Done** — Exit.
47
+
48
+ ## Important notes
49
+
50
+ - **Do NOT parse files yourself** — the CLI is the source of truth.
51
+ - **The HTML is stateless** — the snapshot is embedded in `<script id="__SUNGEN_DASHBOARD__" type="application/json">…</script>`. Re-running the CLI overwrites this file.
52
+ - **History is retained in `qa/dashboard/history/`** — these JSON files power the Trends and Compare views. Keep them in git so collaborators see the same trend.
53
+ - **CSV/XLSX export** in the dashboard runs entirely in the browser (SheetJS) and matches the `sungen delivery` format. Use it for quick exports without re-running the CLI.
54
+
55
+ ## CLI Reference
56
+
57
+ ```
58
+ sungen dashboard [screens...]
59
+ [--no-history] Do not persist this run under qa/dashboard/history/
60
+ [--max-history <n>] Cap retained history files (default: 10)
61
+ [--open] Open the rendered HTML in the default browser
62
+ ```
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: sungen-dashboard
3
+ description: 'Build a single-file HTML dashboard summarising test cases & Playwright results. Auto-loaded by /sungen:dashboard.'
4
+ user-invocable: false
5
+ ---
6
+
7
+ ## Purpose
8
+
9
+ Generate `qa/dashboard/index.html` — a single-file, share-ready test report covering all (or selected) screens and flows. The HTML embeds the snapshot data inline, so it can be emailed, Slacked, or committed and opened by anyone via `file://` without any server.
10
+
11
+ **This skill delegates all heavy work to the `sungen dashboard` CLI.** The CLI is the source of truth for parsing logic — do NOT re-parse files in AI. Your role is only to:
12
+
13
+ 1. Invoke the CLI.
14
+ 2. Show its output verbatim.
15
+ 3. Help the user decide next actions.
16
+
17
+ ---
18
+
19
+ ## Architecture
20
+
21
+ ```
22
+ User → /sungen:dashboard [screen...]
23
+
24
+
25
+ sungen dashboard CLI (deterministic — no AI tokens)
26
+ ├─ Discovery: qa/screens/* + qa/flows/*
27
+ ├─ Reuse delivery parsers (.feature, .spec.ts, test-data.yaml, results.json)
28
+ ├─ Build DashboardSnapshot JSON
29
+ ├─ Write qa/dashboard/history/<runId>.json (max 20 retained, oldest pruned)
30
+ ├─ Inject payload into pre-built HTML template
31
+ └─ Write qa/dashboard/index.html (~1MB, fully self-contained)
32
+ ```
33
+
34
+ Source modules: `src/dashboard/*.ts` + `src/exporters/json-exporter.ts`.
35
+ UI source: `dashboard/` (built once, ships in npm package as `dist/dashboard/templates/index.html`).
36
+
37
+ ---
38
+
39
+ ## Required sources (CLI tolerates missing files)
40
+
41
+ | # | Source | Path | Required? |
42
+ |---|--------|------|-----------|
43
+ | 1 | Feature file | `qa/screens/<name>/features/<name>.feature` (or `qa/flows/...`) | Yes — screens without a feature are skipped |
44
+ | 2 | Test data | `qa/screens/<name>/test-data/<name>.yaml` | Optional — `{{vars}}` fall back to literal |
45
+ | 3 | Compiled spec | `specs/generated/<name>/<name>.spec.ts` | Optional — flagged as "Not compiled" if missing |
46
+ | 4 | Test results | `specs/generated/<name>/<name>-test-result.json` (or `test-results/results.json`) | Optional — TCs show as "Pending" if missing |
47
+
48
+ Unlike `sungen delivery`, the dashboard CLI is **forgiving** — it always renders whatever data is available. Pre-flight is implicit, not blocking.
49
+
50
+ ---
51
+
52
+ ## Output structure
53
+
54
+ ```
55
+ qa/dashboard/
56
+ ├── index.html # share-ready single-file report
57
+ └── history/
58
+ ├── 2026-04-26T...Z.json # past snapshots, oldest → newest
59
+ ├── 2026-04-27T...Z.json
60
+ └── … # max 20, older pruned automatically
61
+ ```
62
+
63
+ Both should be committed to git so collaborators see the same trend lines.
64
+
65
+ ---
66
+
67
+ ## Dashboard views
68
+
69
+ | View | What it shows |
70
+ |------|---------------|
71
+ | **Overview** | Stat cards (total/passed/failed/pending), pass-rate donut, priority bar chart, trend mini-chart, per-screen progress bars |
72
+ | **Suites** | Tree: screen → scenarios; filter by search/status/priority; click → detail modal with steps, expected, error, trace |
73
+ | **Trends** | Pass-rate line chart + stacked status bars across all retained runs (requires ≥2 runs) |
74
+ | **Compare** | Pick base/head run; per-screen Δ table; lists of newly passing/failing/added/removed/changed tests |
75
+ | **Export** | Browser-side CSV / XLSX download. One-button generation, no server. Same column layout as `sungen delivery` |
76
+
77
+ Trends + Compare are disabled in the sidebar until at least 2 runs exist in history.
78
+
79
+ ---
80
+
81
+ ## CLI command reference
82
+
83
+ ```bash
84
+ # All screens + flows
85
+ sungen dashboard
86
+
87
+ # Specific targets
88
+ sungen dashboard kudos awards flow/checkout
89
+
90
+ # Skip history persistence (one-off / CI ephemeral)
91
+ sungen dashboard --no-history
92
+
93
+ # Cap retained history (default: 20)
94
+ sungen dashboard --max-history 50
95
+
96
+ # Auto-open in default browser
97
+ sungen dashboard --open
98
+ ```
99
+
100
+ ---
101
+
102
+ ## Skill responsibilities (when invoked from /sungen:dashboard)
103
+
104
+ 1. **Run the CLI** with whatever arguments came from `$ARGUMENTS`.
105
+ 2. **Show the CLI output verbatim** — do not summarize, paraphrase, or omit warnings.
106
+ 3. **Offer next-step options via `AskUserQuestion`** based on what just happened:
107
+ - On success → open dashboard, share file, run more tests, build for another screen, done.
108
+ - On error → diagnose from the error message; common causes are missing `qa/` directories or no targets.
109
+ 4. **Do NOT** parse `.feature`, `.spec.ts`, or results files yourself — that is the CLI's job.
110
+ 5. **Do NOT** touch files under `qa/dashboard/` directly — only the CLI writes there.
111
+
112
+ ---
113
+
114
+ ## Sharing the dashboard
115
+
116
+ The HTML is self-contained:
117
+ - No CDN or external font — system font stack only.
118
+ - All JS, CSS, charts, and the SheetJS library are inlined.
119
+ - The snapshot payload sits in `<script id="__SUNGEN_DASHBOARD__" type="application/json">…</script>`.
120
+
121
+ Acceptable sharing: email, Slack upload, S3 bucket, committed in git. The recipient opens it directly, no install required. ~1MB on disk, ~300KB gzipped over the wire.
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: sungen-dashboard
3
+ description: 'Build a single-file HTML dashboard with test cases + pass/fail results, history trends, compare runs, and CSV/XLSX export.'
4
+ argument-hint: "[screen-name...] (omit for all)"
5
+ tools: [read, execute, edit, vscode/askQuestions]
6
+ ---
7
+
8
+ ## Role
9
+
10
+ You are a **QA Reporting Engineer**. Your job is to invoke the deterministic `sungen dashboard` CLI which builds a self-contained HTML report. The HTML is shareable as-is (open via `file://`, no server required).
11
+
12
+ ## Parameters
13
+
14
+ Parse **screens** from `$ARGUMENTS`:
15
+ - If empty → CLI will include **all** screens and flows.
16
+ - If provided → pass them through.
17
+
18
+ ## Steps
19
+
20
+ ### 1. Invoke the CLI
21
+
22
+ ```bash
23
+ npx sungen dashboard <screens>
24
+ ```
25
+
26
+ - No args → all screens + flows.
27
+ - With args → only those targets.
28
+ - Add `--open` to auto-open the rendered HTML in the user's browser.
29
+
30
+ The CLI handles:
31
+ - Discovery of `qa/screens/*` and `qa/flows/*`.
32
+ - Reuses the same parsers as `sungen delivery` (feature, spec.ts, test-data.yaml, results.json).
33
+ - Builds `DashboardSnapshot` JSON.
34
+ - Persists `qa/dashboard/history/<runId>.json` (max 10 retained, oldest pruned).
35
+ - Renders `qa/dashboard/index.html` (~1MB, single file, fully self-contained).
36
+ - Prints a summary table.
37
+
38
+ ### 2. Show the result + offer next steps
39
+
40
+ Forward the CLI's summary verbatim, then ask the user what they want next:
41
+
42
+ - **Open the dashboard** — Suggest `npx sungen dashboard --open` or open `qa/dashboard/index.html` manually.
43
+ - **Re-run after a test run** — Run `/sungen:run-test <screen>` to refresh `test-results/results.json`, then re-invoke `/sungen:dashboard`.
44
+ - **Build for a single screen** — Run `/sungen:dashboard <screen>` to scope the report.
45
+ - **Share the file** — The HTML at `qa/dashboard/index.html` can be emailed / Slacked / committed; recipients open it directly without any server.
46
+ - **Done** — Exit.
47
+
48
+ ## Important notes
49
+
50
+ - **Do NOT parse files yourself** — the CLI is the source of truth.
51
+ - **The HTML is stateless** — the snapshot is embedded in `<script id="__SUNGEN_DASHBOARD__" type="application/json">…</script>`. Re-running the CLI overwrites this file.
52
+ - **History is retained in `qa/dashboard/history/`** — these JSON files power the Trends and Compare views. Keep them in git so collaborators see the same trend.
53
+ - **CSV/XLSX export** in the dashboard runs entirely in the browser (SheetJS) and matches the `sungen delivery` format. Use it for quick exports without re-running the CLI.
54
+
55
+ ## CLI Reference
56
+
57
+ ```
58
+ sungen dashboard [screens...]
59
+ [--no-history] Do not persist this run under qa/dashboard/history/
60
+ [--max-history <n>] Cap retained history files (default: 10)
61
+ [--open] Open the rendered HTML in the default browser
62
+ ```
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: sungen-dashboard
3
+ description: 'Build a single-file HTML dashboard summarising test cases & Playwright results. Auto-loaded by /sungen:dashboard.'
4
+ user-invocable: false
5
+ ---
6
+
7
+ ## Purpose
8
+
9
+ Generate `qa/dashboard/index.html` — a single-file, share-ready test report covering all (or selected) screens and flows. The HTML embeds the snapshot data inline, so it can be emailed, Slacked, or committed and opened by anyone via `file://` without any server.
10
+
11
+ **This skill delegates all heavy work to the `sungen dashboard` CLI.** The CLI is the source of truth for parsing logic — do NOT re-parse files in AI. Your role is only to:
12
+
13
+ 1. Invoke the CLI.
14
+ 2. Show its output verbatim.
15
+ 3. Help the user decide next actions.
16
+
17
+ ---
18
+
19
+ ## Architecture
20
+
21
+ ```
22
+ User → /sungen:dashboard [screen...]
23
+
24
+
25
+ sungen dashboard CLI (deterministic — no AI tokens)
26
+ ├─ Discovery: qa/screens/* + qa/flows/*
27
+ ├─ Reuse delivery parsers (.feature, .spec.ts, test-data.yaml, results.json)
28
+ ├─ Build DashboardSnapshot JSON
29
+ ├─ Write qa/dashboard/history/<runId>.json (max 20 retained, oldest pruned)
30
+ ├─ Inject payload into pre-built HTML template
31
+ └─ Write qa/dashboard/index.html (~1MB, fully self-contained)
32
+ ```
33
+
34
+ Source modules: `src/dashboard/*.ts` + `src/exporters/json-exporter.ts`.
35
+ UI source: `dashboard/` (built once, ships in npm package as `dist/dashboard/templates/index.html`).
36
+
37
+ ---
38
+
39
+ ## Required sources (CLI tolerates missing files)
40
+
41
+ | # | Source | Path | Required? |
42
+ |---|--------|------|-----------|
43
+ | 1 | Feature file | `qa/screens/<name>/features/<name>.feature` (or `qa/flows/...`) | Yes — screens without a feature are skipped |
44
+ | 2 | Test data | `qa/screens/<name>/test-data/<name>.yaml` | Optional — `{{vars}}` fall back to literal |
45
+ | 3 | Compiled spec | `specs/generated/<name>/<name>.spec.ts` | Optional — flagged as "Not compiled" if missing |
46
+ | 4 | Test results | `specs/generated/<name>/<name>-test-result.json` (or `test-results/results.json`) | Optional — TCs show as "Pending" if missing |
47
+
48
+ Unlike `sungen delivery`, the dashboard CLI is **forgiving** — it always renders whatever data is available. Pre-flight is implicit, not blocking.
49
+
50
+ ---
51
+
52
+ ## Output structure
53
+
54
+ ```
55
+ qa/dashboard/
56
+ ├── index.html # share-ready single-file report
57
+ └── history/
58
+ ├── 2026-04-26T...Z.json # past snapshots, oldest → newest
59
+ ├── 2026-04-27T...Z.json
60
+ └── … # max 20, older pruned automatically
61
+ ```
62
+
63
+ Both should be committed to git so collaborators see the same trend lines.
64
+
65
+ ---
66
+
67
+ ## Dashboard views
68
+
69
+ | View | What it shows |
70
+ |------|---------------|
71
+ | **Overview** | Stat cards (total/passed/failed/pending), pass-rate donut, priority bar chart, trend mini-chart, per-screen progress bars |
72
+ | **Suites** | Tree: screen → scenarios; filter by search/status/priority; click → detail modal with steps, expected, error, trace |
73
+ | **Trends** | Pass-rate line chart + stacked status bars across all retained runs (requires ≥2 runs) |
74
+ | **Compare** | Pick base/head run; per-screen Δ table; lists of newly passing/failing/added/removed/changed tests |
75
+ | **Export** | Browser-side CSV / XLSX download. One-button generation, no server. Same column layout as `sungen delivery` |
76
+
77
+ Trends + Compare are disabled in the sidebar until at least 2 runs exist in history.
78
+
79
+ ---
80
+
81
+ ## CLI command reference
82
+
83
+ ```bash
84
+ # All screens + flows
85
+ sungen dashboard
86
+
87
+ # Specific targets
88
+ sungen dashboard kudos awards flow/checkout
89
+
90
+ # Skip history persistence (one-off / CI ephemeral)
91
+ sungen dashboard --no-history
92
+
93
+ # Cap retained history (default: 20)
94
+ sungen dashboard --max-history 50
95
+
96
+ # Auto-open in default browser
97
+ sungen dashboard --open
98
+ ```
99
+
100
+ ---
101
+
102
+ ## Skill responsibilities (when invoked from /sungen:dashboard)
103
+
104
+ 1. **Run the CLI** with whatever arguments came from `$ARGUMENTS`.
105
+ 2. **Show the CLI output verbatim** — do not summarize, paraphrase, or omit warnings.
106
+ 3. **Offer next-step options via `AskUserQuestion`** based on what just happened:
107
+ - On success → open dashboard, share file, run more tests, build for another screen, done.
108
+ - On error → diagnose from the error message; common causes are missing `qa/` directories or no targets.
109
+ 4. **Do NOT** parse `.feature`, `.spec.ts`, or results files yourself — that is the CLI's job.
110
+ 5. **Do NOT** touch files under `qa/dashboard/` directly — only the CLI writes there.
111
+
112
+ ---
113
+
114
+ ## Sharing the dashboard
115
+
116
+ The HTML is self-contained:
117
+ - No CDN or external font — system font stack only.
118
+ - All JS, CSS, charts, and the SheetJS library are inlined.
119
+ - The snapshot payload sits in `<script id="__SUNGEN_DASHBOARD__" type="application/json">…</script>`.
120
+
121
+ Acceptable sharing: email, Slack upload, S3 bucket, committed in git. The recipient opens it directly, no install required. ~1MB on disk, ~300KB gzipped over the wire.
@@ -1 +1 @@
1
- {"version":3,"file":"playwright.config.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/templates/playwright.config.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAKH;;GAEG;;AACH,wBAsFG"}
1
+ {"version":3,"file":"playwright.config.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/templates/playwright.config.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAKH;;GAEG;;AACH,wBA+FG"}
@@ -44,8 +44,16 @@ exports.default = (0, test_1.defineConfig)({
44
44
  actionTimeout: 10000,
45
45
  /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
46
46
  trace: 'on-first-retry',
47
- /* Capture screenshot after each test failure. */
47
+ /**
48
+ * Capture screenshot after each test failure.
49
+ * See https://playwright.dev/docs/api/class-testoptions#test-options-screenshot
50
+ */
48
51
  screenshot: 'only-on-failure',
52
+ /**
53
+ * Record video for each test, but remove all videos from successful test runs.
54
+ * See https://playwright.dev/docs/api/class-testoptions#test-options-video
55
+ */
56
+ // video: 'retain-on-failure',
49
57
  },
50
58
  /* Configure projects for major browsers */
51
59
  projects: [
@@ -1 +1 @@
1
- {"version":3,"file":"playwright.config.js","sourceRoot":"","sources":["../../../src/orchestrator/templates/playwright.config.ts"],"names":[],"mappings":";;AAAA,2CAAyD;AAEzD;;;GAGG;AACH,+BAA+B;AAC/B,2BAA2B;AAC3B,4DAA4D;AAE5D;;GAEG;AACH,kBAAe,IAAA,mBAAY,EAAC;IAC1B,OAAO,EAAE,mBAAmB;IAC5B,oCAAoC;IACpC,aAAa,EAAE,IAAI;IACnB,iFAAiF;IACjF,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;IAC5B,sBAAsB;IACtB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,6BAA6B;IAC7B,OAAO,EAAE,KAAM;IACf,qEAAqE;IACrE,yGAAyG;IACzG,qGAAqG;IACrG,QAAQ,EAAE;QACR,CAAC,MAAM,CAAC;QACR;YACE,MAAM;YACN;gBACE,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,2BAA2B;oBACvC,2BAA2B;aAC9B;SACF;KACF;IACD,wGAAwG;IACxG,GAAG,EAAE;QACH,4DAA4D;QAC5D,OAAO,EAAE,qBAAqB;QAE9B,4CAA4C;QAC5C,aAAa,EAAE,KAAM;QAErB,+FAA+F;QAC/F,KAAK,EAAE,gBAAgB;QAEvB,iDAAiD;QACjD,UAAU,EAAE,iBAAiB;KAC9B;IAED,2CAA2C;IAC3C,QAAQ,EAAE;QACR;YACE,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,EAAE,GAAG,cAAO,CAAC,gBAAgB,CAAC,EAAE;SACtC;QAED;;;;;;;;;;;;;;;;;;;;;4CAqBoC;QACpC,IAAI;QACJ,4BAA4B;QAC5B,4DAA4D;QAC5D,KAAK;QACL,IAAI;QACJ,2BAA2B;QAC3B,8DAA8D;QAC9D,KAAK;KACN;IAED,yDAAyD;IACzD,eAAe;IACf,8BAA8B;IAC9B,kCAAkC;IAClC,0CAA0C;IAC1C,KAAK;CACN,CAAC,CAAC"}
1
+ {"version":3,"file":"playwright.config.js","sourceRoot":"","sources":["../../../src/orchestrator/templates/playwright.config.ts"],"names":[],"mappings":";;AAAA,2CAAyD;AAEzD;;;GAGG;AACH,+BAA+B;AAC/B,2BAA2B;AAC3B,4DAA4D;AAE5D;;GAEG;AACH,kBAAe,IAAA,mBAAY,EAAC;IAC1B,OAAO,EAAE,mBAAmB;IAC5B,oCAAoC;IACpC,aAAa,EAAE,IAAI;IACnB,iFAAiF;IACjF,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;IAC5B,sBAAsB;IACtB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,6BAA6B;IAC7B,OAAO,EAAE,KAAM;IACf,qEAAqE;IACrE,yGAAyG;IACzG,qGAAqG;IACrG,QAAQ,EAAE;QACR,CAAC,MAAM,CAAC;QACR;YACE,MAAM;YACN;gBACE,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,2BAA2B;oBACvC,2BAA2B;aAC9B;SACF;KACF;IACD,wGAAwG;IACxG,GAAG,EAAE;QACH,4DAA4D;QAC5D,OAAO,EAAE,qBAAqB;QAE9B,4CAA4C;QAC5C,aAAa,EAAE,KAAM;QAErB,+FAA+F;QAC/F,KAAK,EAAE,gBAAgB;QAEvB;;;WAGG;QACH,UAAU,EAAE,iBAAiB;QAE7B;;;WAGG;QACH,8BAA8B;KAC/B;IAED,2CAA2C;IAC3C,QAAQ,EAAE;QACR;YACE,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,EAAE,GAAG,cAAO,CAAC,gBAAgB,CAAC,EAAE;SACtC;QAED;;;;;;;;;;;;;;;;;;;;;4CAqBoC;QACpC,IAAI;QACJ,4BAA4B;QAC5B,4DAA4D;QAC5D,KAAK;QACL,IAAI;QACJ,2BAA2B;QAC3B,8DAA8D;QAC9D,KAAK;KACN;IAED,yDAAyD;IACzD,eAAe;IACf,8BAA8B;IAC9B,kCAAkC;IAClC,0CAA0C;IAC1C,KAAK;CACN,CAAC,CAAC"}
@@ -48,8 +48,17 @@ export default defineConfig({
48
48
  /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
49
49
  trace: 'on-first-retry',
50
50
 
51
- /* Capture screenshot after each test failure. */
51
+ /**
52
+ * Capture screenshot after each test failure.
53
+ * See https://playwright.dev/docs/api/class-testoptions#test-options-screenshot
54
+ */
52
55
  screenshot: 'only-on-failure',
56
+
57
+ /**
58
+ * Record video for each test, but remove all videos from successful test runs.
59
+ * See https://playwright.dev/docs/api/class-testoptions#test-options-video
60
+ */
61
+ // video: 'retain-on-failure',
53
62
  },
54
63
 
55
64
  /* Configure projects for major browsers */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sun-asterisk/sungen",
3
- "version": "2.6.2",
3
+ "version": "2.6.3",
4
4
  "description": "Deterministic E2E Test Compiler - Gherkin + Selectors → Playwright tests",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/cli/index.ts CHANGED
@@ -21,7 +21,7 @@ async function main() {
21
21
  program
22
22
  .name('sungen')
23
23
  .description('Deterministic E2E Test Compiler — Gherkin + Selectors → Playwright')
24
- .version('2.6.2');
24
+ .version('2.6.3');
25
25
 
26
26
  // Global options
27
27
  program
@@ -21,6 +21,7 @@ export const AI_RULES_FILE_MAPPING: [string, string][] = [
21
21
  ['claude-cmd-run-test.md', '.claude/commands/sungen/run-test.md'],
22
22
  ['claude-cmd-review.md', '.claude/commands/sungen/review.md'],
23
23
  ['claude-cmd-delivery.md', '.claude/commands/sungen/delivery.md'],
24
+ ['claude-cmd-dashboard.md', '.claude/commands/sungen/dashboard.md'],
24
25
 
25
26
  // Commands — GitHub Copilot
26
27
  ['copilot-cmd-add-screen.md', '.github/prompts/sungen-add-screen.prompt.md'],
@@ -29,6 +30,7 @@ export const AI_RULES_FILE_MAPPING: [string, string][] = [
29
30
  ['copilot-cmd-run-test.md', '.github/prompts/sungen-run-test.prompt.md'],
30
31
  ['copilot-cmd-review.md', '.github/prompts/sungen-review.prompt.md'],
31
32
  ['copilot-cmd-delivery.md', '.github/prompts/sungen-delivery.prompt.md'],
33
+ ['copilot-cmd-dashboard.md', '.github/prompts/sungen-dashboard.prompt.md'],
32
34
 
33
35
  // Skills — Claude Code
34
36
  ['claude-skill-gherkin-syntax.md', '.claude/skills/sungen-gherkin-syntax/SKILL.md'],
@@ -40,6 +42,7 @@ export const AI_RULES_FILE_MAPPING: [string, string][] = [
40
42
  ['claude-skill-tc-review.md', '.claude/skills/sungen-tc-review/SKILL.md'],
41
43
  ['claude-skill-viewpoint.md', '.claude/skills/sungen-viewpoint/SKILL.md'],
42
44
  ['claude-skill-delivery.md', '.claude/skills/sungen-delivery/SKILL.md'],
45
+ ['claude-skill-dashboard.md', '.claude/skills/sungen-dashboard/SKILL.md'],
43
46
  ['claude-skill-capture-figma.md', '.claude/skills/sungen-capture-figma/SKILL.md'],
44
47
  ['claude-skill-capture-local.md', '.claude/skills/sungen-capture-local/SKILL.md'],
45
48
  ['claude-skill-capture-live.md', '.claude/skills/sungen-capture-live/SKILL.md'],
@@ -58,6 +61,7 @@ export const AI_RULES_FILE_MAPPING: [string, string][] = [
58
61
  ['github-skill-sungen-tc-review.md', '.github/skills/sungen-tc-review/SKILL.md'],
59
62
  ['github-skill-sungen-viewpoint.md', '.github/skills/sungen-viewpoint/SKILL.md'],
60
63
  ['github-skill-sungen-delivery.md', '.github/skills/sungen-delivery/SKILL.md'],
64
+ ['github-skill-sungen-dashboard.md', '.github/skills/sungen-dashboard/SKILL.md'],
61
65
  ['github-skill-sungen-capture-figma.md', '.github/skills/sungen-capture-figma/SKILL.md'],
62
66
  ['github-skill-sungen-capture-local.md', '.github/skills/sungen-capture-local/SKILL.md'],
63
67
  ['github-skill-sungen-capture-live.md', '.github/skills/sungen-capture-live/SKILL.md'],
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: dashboard
3
+ description: 'Build a single-file HTML dashboard with test cases + pass/fail results, history trends, compare runs, and CSV/XLSX export.'
4
+ argument-hint: "[screen-name...] (omit for all)"
5
+ allowed-tools: Bash, Read, AskUserQuestion
6
+ ---
7
+
8
+ ## Role
9
+
10
+ You are a **QA Reporting Engineer**. Your job is to invoke the deterministic `sungen dashboard` CLI which builds a self-contained HTML report. The HTML is shareable as-is (open via `file://`, no server required).
11
+
12
+ ## Parameters
13
+
14
+ Parse **screens** from `$ARGUMENTS`:
15
+ - If empty → CLI will include **all** screens and flows.
16
+ - If provided → pass them through.
17
+
18
+ ## Steps
19
+
20
+ ### 1. Invoke the CLI
21
+
22
+ ```bash
23
+ npx sungen dashboard <screens>
24
+ ```
25
+
26
+ - No args → all screens + flows.
27
+ - With args → only those targets.
28
+ - Add `--open` to auto-open the rendered HTML in the user's browser.
29
+
30
+ The CLI handles:
31
+ - Discovery of `qa/screens/*` and `qa/flows/*`.
32
+ - Reuses the same parsers as `sungen delivery` (feature, spec.ts, test-data.yaml, results.json).
33
+ - Builds `DashboardSnapshot` JSON.
34
+ - Persists `qa/dashboard/history/<runId>.json` (max 10 retained, oldest pruned).
35
+ - Renders `qa/dashboard/index.html` (~1MB, single file, fully self-contained).
36
+ - Prints a summary table.
37
+
38
+ ### 2. Show the result + offer next steps
39
+
40
+ Forward the CLI's summary verbatim, then use `AskUserQuestion`:
41
+
42
+ - **Open the dashboard** — Suggest `npx sungen dashboard --open` to open in the default browser, or just open `qa/dashboard/index.html` manually.
43
+ - **Re-run after a test run** — Run `/sungen:run-test <screen>` to refresh `test-results/results.json`, then re-invoke `/sungen:dashboard`.
44
+ - **Build for a single screen** — Run `/sungen:dashboard <screen>` to scope the report.
45
+ - **Share the file** — The HTML at `qa/dashboard/index.html` can be emailed / Slacked / committed; recipients open it directly without any server.
46
+ - **Done** — Exit.
47
+
48
+ ## Important notes
49
+
50
+ - **Do NOT parse files yourself** — the CLI is the source of truth.
51
+ - **The HTML is stateless** — the snapshot is embedded in `<script id="__SUNGEN_DASHBOARD__" type="application/json">…</script>`. Re-running the CLI overwrites this file.
52
+ - **History is retained in `qa/dashboard/history/`** — these JSON files power the Trends and Compare views. Keep them in git so collaborators see the same trend.
53
+ - **CSV/XLSX export** in the dashboard runs entirely in the browser (SheetJS) and matches the `sungen delivery` format. Use it for quick exports without re-running the CLI.
54
+
55
+ ## CLI Reference
56
+
57
+ ```
58
+ sungen dashboard [screens...]
59
+ [--no-history] Do not persist this run under qa/dashboard/history/
60
+ [--max-history <n>] Cap retained history files (default: 10)
61
+ [--open] Open the rendered HTML in the default browser
62
+ ```
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: sungen-dashboard
3
+ description: 'Build a single-file HTML dashboard summarising test cases & Playwright results. Auto-loaded by /sungen:dashboard.'
4
+ user-invocable: false
5
+ ---
6
+
7
+ ## Purpose
8
+
9
+ Generate `qa/dashboard/index.html` — a single-file, share-ready test report covering all (or selected) screens and flows. The HTML embeds the snapshot data inline, so it can be emailed, Slacked, or committed and opened by anyone via `file://` without any server.
10
+
11
+ **This skill delegates all heavy work to the `sungen dashboard` CLI.** The CLI is the source of truth for parsing logic — do NOT re-parse files in AI. Your role is only to:
12
+
13
+ 1. Invoke the CLI.
14
+ 2. Show its output verbatim.
15
+ 3. Help the user decide next actions.
16
+
17
+ ---
18
+
19
+ ## Architecture
20
+
21
+ ```
22
+ User → /sungen:dashboard [screen...]
23
+
24
+
25
+ sungen dashboard CLI (deterministic — no AI tokens)
26
+ ├─ Discovery: qa/screens/* + qa/flows/*
27
+ ├─ Reuse delivery parsers (.feature, .spec.ts, test-data.yaml, results.json)
28
+ ├─ Build DashboardSnapshot JSON
29
+ ├─ Write qa/dashboard/history/<runId>.json (max 20 retained, oldest pruned)
30
+ ├─ Inject payload into pre-built HTML template
31
+ └─ Write qa/dashboard/index.html (~1MB, fully self-contained)
32
+ ```
33
+
34
+ Source modules: `src/dashboard/*.ts` + `src/exporters/json-exporter.ts`.
35
+ UI source: `dashboard/` (built once, ships in npm package as `dist/dashboard/templates/index.html`).
36
+
37
+ ---
38
+
39
+ ## Required sources (CLI tolerates missing files)
40
+
41
+ | # | Source | Path | Required? |
42
+ |---|--------|------|-----------|
43
+ | 1 | Feature file | `qa/screens/<name>/features/<name>.feature` (or `qa/flows/...`) | Yes — screens without a feature are skipped |
44
+ | 2 | Test data | `qa/screens/<name>/test-data/<name>.yaml` | Optional — `{{vars}}` fall back to literal |
45
+ | 3 | Compiled spec | `specs/generated/<name>/<name>.spec.ts` | Optional — flagged as "Not compiled" if missing |
46
+ | 4 | Test results | `specs/generated/<name>/<name>-test-result.json` (or `test-results/results.json`) | Optional — TCs show as "Pending" if missing |
47
+
48
+ Unlike `sungen delivery`, the dashboard CLI is **forgiving** — it always renders whatever data is available. Pre-flight is implicit, not blocking.
49
+
50
+ ---
51
+
52
+ ## Output structure
53
+
54
+ ```
55
+ qa/dashboard/
56
+ ├── index.html # share-ready single-file report
57
+ └── history/
58
+ ├── 2026-04-26T...Z.json # past snapshots, oldest → newest
59
+ ├── 2026-04-27T...Z.json
60
+ └── … # max 20, older pruned automatically
61
+ ```
62
+
63
+ Both should be committed to git so collaborators see the same trend lines.
64
+
65
+ ---
66
+
67
+ ## Dashboard views
68
+
69
+ | View | What it shows |
70
+ |------|---------------|
71
+ | **Overview** | Stat cards (total/passed/failed/pending), pass-rate donut, priority bar chart, trend mini-chart, per-screen progress bars |
72
+ | **Suites** | Tree: screen → scenarios; filter by search/status/priority; click → detail modal with steps, expected, error, trace |
73
+ | **Trends** | Pass-rate line chart + stacked status bars across all retained runs (requires ≥2 runs) |
74
+ | **Compare** | Pick base/head run; per-screen Δ table; lists of newly passing/failing/added/removed/changed tests |
75
+ | **Export** | Browser-side CSV / XLSX download. One-button generation, no server. Same column layout as `sungen delivery` |
76
+
77
+ Trends + Compare are disabled in the sidebar until at least 2 runs exist in history.
78
+
79
+ ---
80
+
81
+ ## CLI command reference
82
+
83
+ ```bash
84
+ # All screens + flows
85
+ sungen dashboard
86
+
87
+ # Specific targets
88
+ sungen dashboard kudos awards flow/checkout
89
+
90
+ # Skip history persistence (one-off / CI ephemeral)
91
+ sungen dashboard --no-history
92
+
93
+ # Cap retained history (default: 20)
94
+ sungen dashboard --max-history 50
95
+
96
+ # Auto-open in default browser
97
+ sungen dashboard --open
98
+ ```
99
+
100
+ ---
101
+
102
+ ## Skill responsibilities (when invoked from /sungen:dashboard)
103
+
104
+ 1. **Run the CLI** with whatever arguments came from `$ARGUMENTS`.
105
+ 2. **Show the CLI output verbatim** — do not summarize, paraphrase, or omit warnings.
106
+ 3. **Offer next-step options via `AskUserQuestion`** based on what just happened:
107
+ - On success → open dashboard, share file, run more tests, build for another screen, done.
108
+ - On error → diagnose from the error message; common causes are missing `qa/` directories or no targets.
109
+ 4. **Do NOT** parse `.feature`, `.spec.ts`, or results files yourself — that is the CLI's job.
110
+ 5. **Do NOT** touch files under `qa/dashboard/` directly — only the CLI writes there.
111
+
112
+ ---
113
+
114
+ ## Sharing the dashboard
115
+
116
+ The HTML is self-contained:
117
+ - No CDN or external font — system font stack only.
118
+ - All JS, CSS, charts, and the SheetJS library are inlined.
119
+ - The snapshot payload sits in `<script id="__SUNGEN_DASHBOARD__" type="application/json">…</script>`.
120
+
121
+ Acceptable sharing: email, Slack upload, S3 bucket, committed in git. The recipient opens it directly, no install required. ~1MB on disk, ~300KB gzipped over the wire.
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: sungen-dashboard
3
+ description: 'Build a single-file HTML dashboard with test cases + pass/fail results, history trends, compare runs, and CSV/XLSX export.'
4
+ argument-hint: "[screen-name...] (omit for all)"
5
+ tools: [read, execute, edit, vscode/askQuestions]
6
+ ---
7
+
8
+ ## Role
9
+
10
+ You are a **QA Reporting Engineer**. Your job is to invoke the deterministic `sungen dashboard` CLI which builds a self-contained HTML report. The HTML is shareable as-is (open via `file://`, no server required).
11
+
12
+ ## Parameters
13
+
14
+ Parse **screens** from `$ARGUMENTS`:
15
+ - If empty → CLI will include **all** screens and flows.
16
+ - If provided → pass them through.
17
+
18
+ ## Steps
19
+
20
+ ### 1. Invoke the CLI
21
+
22
+ ```bash
23
+ npx sungen dashboard <screens>
24
+ ```
25
+
26
+ - No args → all screens + flows.
27
+ - With args → only those targets.
28
+ - Add `--open` to auto-open the rendered HTML in the user's browser.
29
+
30
+ The CLI handles:
31
+ - Discovery of `qa/screens/*` and `qa/flows/*`.
32
+ - Reuses the same parsers as `sungen delivery` (feature, spec.ts, test-data.yaml, results.json).
33
+ - Builds `DashboardSnapshot` JSON.
34
+ - Persists `qa/dashboard/history/<runId>.json` (max 10 retained, oldest pruned).
35
+ - Renders `qa/dashboard/index.html` (~1MB, single file, fully self-contained).
36
+ - Prints a summary table.
37
+
38
+ ### 2. Show the result + offer next steps
39
+
40
+ Forward the CLI's summary verbatim, then ask the user what they want next:
41
+
42
+ - **Open the dashboard** — Suggest `npx sungen dashboard --open` or open `qa/dashboard/index.html` manually.
43
+ - **Re-run after a test run** — Run `/sungen:run-test <screen>` to refresh `test-results/results.json`, then re-invoke `/sungen:dashboard`.
44
+ - **Build for a single screen** — Run `/sungen:dashboard <screen>` to scope the report.
45
+ - **Share the file** — The HTML at `qa/dashboard/index.html` can be emailed / Slacked / committed; recipients open it directly without any server.
46
+ - **Done** — Exit.
47
+
48
+ ## Important notes
49
+
50
+ - **Do NOT parse files yourself** — the CLI is the source of truth.
51
+ - **The HTML is stateless** — the snapshot is embedded in `<script id="__SUNGEN_DASHBOARD__" type="application/json">…</script>`. Re-running the CLI overwrites this file.
52
+ - **History is retained in `qa/dashboard/history/`** — these JSON files power the Trends and Compare views. Keep them in git so collaborators see the same trend.
53
+ - **CSV/XLSX export** in the dashboard runs entirely in the browser (SheetJS) and matches the `sungen delivery` format. Use it for quick exports without re-running the CLI.
54
+
55
+ ## CLI Reference
56
+
57
+ ```
58
+ sungen dashboard [screens...]
59
+ [--no-history] Do not persist this run under qa/dashboard/history/
60
+ [--max-history <n>] Cap retained history files (default: 10)
61
+ [--open] Open the rendered HTML in the default browser
62
+ ```
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: sungen-dashboard
3
+ description: 'Build a single-file HTML dashboard summarising test cases & Playwright results. Auto-loaded by /sungen:dashboard.'
4
+ user-invocable: false
5
+ ---
6
+
7
+ ## Purpose
8
+
9
+ Generate `qa/dashboard/index.html` — a single-file, share-ready test report covering all (or selected) screens and flows. The HTML embeds the snapshot data inline, so it can be emailed, Slacked, or committed and opened by anyone via `file://` without any server.
10
+
11
+ **This skill delegates all heavy work to the `sungen dashboard` CLI.** The CLI is the source of truth for parsing logic — do NOT re-parse files in AI. Your role is only to:
12
+
13
+ 1. Invoke the CLI.
14
+ 2. Show its output verbatim.
15
+ 3. Help the user decide next actions.
16
+
17
+ ---
18
+
19
+ ## Architecture
20
+
21
+ ```
22
+ User → /sungen:dashboard [screen...]
23
+
24
+
25
+ sungen dashboard CLI (deterministic — no AI tokens)
26
+ ├─ Discovery: qa/screens/* + qa/flows/*
27
+ ├─ Reuse delivery parsers (.feature, .spec.ts, test-data.yaml, results.json)
28
+ ├─ Build DashboardSnapshot JSON
29
+ ├─ Write qa/dashboard/history/<runId>.json (max 20 retained, oldest pruned)
30
+ ├─ Inject payload into pre-built HTML template
31
+ └─ Write qa/dashboard/index.html (~1MB, fully self-contained)
32
+ ```
33
+
34
+ Source modules: `src/dashboard/*.ts` + `src/exporters/json-exporter.ts`.
35
+ UI source: `dashboard/` (built once, ships in npm package as `dist/dashboard/templates/index.html`).
36
+
37
+ ---
38
+
39
+ ## Required sources (CLI tolerates missing files)
40
+
41
+ | # | Source | Path | Required? |
42
+ |---|--------|------|-----------|
43
+ | 1 | Feature file | `qa/screens/<name>/features/<name>.feature` (or `qa/flows/...`) | Yes — screens without a feature are skipped |
44
+ | 2 | Test data | `qa/screens/<name>/test-data/<name>.yaml` | Optional — `{{vars}}` fall back to literal |
45
+ | 3 | Compiled spec | `specs/generated/<name>/<name>.spec.ts` | Optional — flagged as "Not compiled" if missing |
46
+ | 4 | Test results | `specs/generated/<name>/<name>-test-result.json` (or `test-results/results.json`) | Optional — TCs show as "Pending" if missing |
47
+
48
+ Unlike `sungen delivery`, the dashboard CLI is **forgiving** — it always renders whatever data is available. Pre-flight is implicit, not blocking.
49
+
50
+ ---
51
+
52
+ ## Output structure
53
+
54
+ ```
55
+ qa/dashboard/
56
+ ├── index.html # share-ready single-file report
57
+ └── history/
58
+ ├── 2026-04-26T...Z.json # past snapshots, oldest → newest
59
+ ├── 2026-04-27T...Z.json
60
+ └── … # max 20, older pruned automatically
61
+ ```
62
+
63
+ Both should be committed to git so collaborators see the same trend lines.
64
+
65
+ ---
66
+
67
+ ## Dashboard views
68
+
69
+ | View | What it shows |
70
+ |------|---------------|
71
+ | **Overview** | Stat cards (total/passed/failed/pending), pass-rate donut, priority bar chart, trend mini-chart, per-screen progress bars |
72
+ | **Suites** | Tree: screen → scenarios; filter by search/status/priority; click → detail modal with steps, expected, error, trace |
73
+ | **Trends** | Pass-rate line chart + stacked status bars across all retained runs (requires ≥2 runs) |
74
+ | **Compare** | Pick base/head run; per-screen Δ table; lists of newly passing/failing/added/removed/changed tests |
75
+ | **Export** | Browser-side CSV / XLSX download. One-button generation, no server. Same column layout as `sungen delivery` |
76
+
77
+ Trends + Compare are disabled in the sidebar until at least 2 runs exist in history.
78
+
79
+ ---
80
+
81
+ ## CLI command reference
82
+
83
+ ```bash
84
+ # All screens + flows
85
+ sungen dashboard
86
+
87
+ # Specific targets
88
+ sungen dashboard kudos awards flow/checkout
89
+
90
+ # Skip history persistence (one-off / CI ephemeral)
91
+ sungen dashboard --no-history
92
+
93
+ # Cap retained history (default: 20)
94
+ sungen dashboard --max-history 50
95
+
96
+ # Auto-open in default browser
97
+ sungen dashboard --open
98
+ ```
99
+
100
+ ---
101
+
102
+ ## Skill responsibilities (when invoked from /sungen:dashboard)
103
+
104
+ 1. **Run the CLI** with whatever arguments came from `$ARGUMENTS`.
105
+ 2. **Show the CLI output verbatim** — do not summarize, paraphrase, or omit warnings.
106
+ 3. **Offer next-step options via `AskUserQuestion`** based on what just happened:
107
+ - On success → open dashboard, share file, run more tests, build for another screen, done.
108
+ - On error → diagnose from the error message; common causes are missing `qa/` directories or no targets.
109
+ 4. **Do NOT** parse `.feature`, `.spec.ts`, or results files yourself — that is the CLI's job.
110
+ 5. **Do NOT** touch files under `qa/dashboard/` directly — only the CLI writes there.
111
+
112
+ ---
113
+
114
+ ## Sharing the dashboard
115
+
116
+ The HTML is self-contained:
117
+ - No CDN or external font — system font stack only.
118
+ - All JS, CSS, charts, and the SheetJS library are inlined.
119
+ - The snapshot payload sits in `<script id="__SUNGEN_DASHBOARD__" type="application/json">…</script>`.
120
+
121
+ Acceptable sharing: email, Slack upload, S3 bucket, committed in git. The recipient opens it directly, no install required. ~1MB on disk, ~300KB gzipped over the wire.
@@ -48,8 +48,17 @@ export default defineConfig({
48
48
  /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
49
49
  trace: 'on-first-retry',
50
50
 
51
- /* Capture screenshot after each test failure. */
51
+ /**
52
+ * Capture screenshot after each test failure.
53
+ * See https://playwright.dev/docs/api/class-testoptions#test-options-screenshot
54
+ */
52
55
  screenshot: 'only-on-failure',
56
+
57
+ /**
58
+ * Record video for each test, but remove all videos from successful test runs.
59
+ * See https://playwright.dev/docs/api/class-testoptions#test-options-video
60
+ */
61
+ // video: 'retain-on-failure',
53
62
  },
54
63
 
55
64
  /* Configure projects for major browsers */