@torus-engineering/tas-kit 1.13.0 → 2.1.0

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 (100) hide show
  1. package/.tas/_platform/claude-code/settings.json +58 -46
  2. package/.tas/_platform/hooks/code-quality.js +127 -127
  3. package/.tas/_platform/hooks/session-end.js +111 -111
  4. package/.tas/agents/architect.md +53 -53
  5. package/.tas/agents/aws-reviewer.md +71 -71
  6. package/.tas/agents/build-resolver.md +89 -59
  7. package/.tas/agents/code-explorer.md +63 -63
  8. package/.tas/agents/csharp-reviewer.md +62 -62
  9. package/.tas/agents/database-reviewer.md +73 -73
  10. package/.tas/agents/doc-updater.md +68 -66
  11. package/.tas/agents/python-reviewer.md +67 -67
  12. package/.tas/agents/security-reviewer.md +79 -79
  13. package/.tas/agents/software-engineer.md +53 -0
  14. package/.tas/agents/typescript-reviewer.md +65 -65
  15. package/.tas/commands/ado-create.md +33 -28
  16. package/.tas/commands/ado-delete.md +26 -22
  17. package/.tas/commands/ado-get.md +24 -20
  18. package/.tas/commands/ado-status.md +22 -18
  19. package/.tas/commands/ado-update.md +31 -27
  20. package/.tas/commands/tas-adr.md +37 -33
  21. package/.tas/commands/tas-apitest-plan.md +177 -173
  22. package/.tas/commands/tas-apitest.md +147 -143
  23. package/.tas/commands/tas-brainstorm.md +23 -19
  24. package/.tas/commands/tas-brd.md +50 -0
  25. package/.tas/commands/tas-bug.md +127 -113
  26. package/.tas/commands/tas-checklist.md +180 -0
  27. package/.tas/commands/tas-debug.md +103 -0
  28. package/.tas/commands/tas-design.md +41 -37
  29. package/.tas/commands/tas-dev.md +225 -125
  30. package/.tas/commands/tas-e2e-mobile.md +146 -155
  31. package/.tas/commands/tas-e2e-web.md +150 -163
  32. package/.tas/commands/tas-e2e.md +289 -102
  33. package/.tas/commands/tas-feature.md +181 -47
  34. package/.tas/commands/tas-fix.md +72 -51
  35. package/.tas/commands/tas-functest-mobile.md +138 -144
  36. package/.tas/commands/tas-functest-web.md +176 -192
  37. package/.tas/commands/tas-functest.md +225 -76
  38. package/.tas/commands/tas-init.md +22 -17
  39. package/.tas/commands/tas-master-plan.md +300 -0
  40. package/.tas/commands/tas-orchestrate.md +159 -0
  41. package/.tas/commands/tas-plan.md +152 -117
  42. package/.tas/commands/tas-prd.md +57 -37
  43. package/.tas/commands/tas-review-pr.md +174 -0
  44. package/.tas/commands/tas-review.md +115 -113
  45. package/.tas/commands/tas-sad.md +47 -43
  46. package/.tas/commands/tas-security.md +91 -87
  47. package/.tas/commands/tas-spec.md +54 -50
  48. package/.tas/commands/tas-status.md +25 -16
  49. package/.tas/project-status-example.yaml +3 -1
  50. package/.tas/rules/ado-integration.md +67 -65
  51. package/.tas/rules/common/api-design.md +517 -517
  52. package/.tas/rules/common/build-debug-loop.md +233 -0
  53. package/.tas/rules/common/code-review.md +4 -0
  54. package/.tas/rules/common/feature-done.md +42 -0
  55. package/.tas/rules/common/post-implementation-review.md +4 -0
  56. package/.tas/rules/common/project-status.md +33 -16
  57. package/.tas/rules/common/sad-impact.md +81 -0
  58. package/.tas/rules/common/tdd.md +104 -89
  59. package/.tas/rules/csharp/api-testing.md +2 -2
  60. package/.tas/rules/csharp/torus-core-framework.md +128 -0
  61. package/.tas/tas-example.yaml +9 -32
  62. package/.tas/templates/AGENTS.md +13 -0
  63. package/.tas/templates/API-Test-Spec.md +5 -4
  64. package/.tas/templates/BRD.md +133 -0
  65. package/.tas/templates/Bug.md +15 -0
  66. package/.tas/templates/E2E-Execution-Report.md +8 -8
  67. package/.tas/templates/E2E-Mobile-Spec.md +6 -8
  68. package/.tas/templates/E2E-Report.md +2 -2
  69. package/.tas/templates/E2E-Scenario.md +22 -22
  70. package/.tas/templates/E2E-Test-Spec.md +274 -0
  71. package/.tas/templates/E2E-Web-Spec.md +4 -4
  72. package/.tas/templates/Feature-Technical-Part.md +69 -0
  73. package/.tas/templates/Feature-Technical-Stack.md +74 -0
  74. package/.tas/templates/Feature-Technical.md +329 -0
  75. package/.tas/templates/Feature.md +50 -26
  76. package/.tas/templates/Func-Test-Script.md +29 -56
  77. package/.tas/templates/Func-Test-Spec.md +144 -142
  78. package/.tas/templates/PRD.md +173 -142
  79. package/.tas/templates/TestChecklist.md +96 -0
  80. package/.tas/templates/torus-dotnet-bootstrap.md +223 -0
  81. package/.tas/tools/tas-ado-readme.md +24 -27
  82. package/.tas/tools/tas-ado.py +328 -25
  83. package/.tas/tools/tas-github.py +339 -0
  84. package/README.md +142 -57
  85. package/bin/cli.js +90 -90
  86. package/lib/adapters/antigravity.js +131 -131
  87. package/lib/adapters/claude-code.js +71 -35
  88. package/lib/adapters/codex.js +157 -157
  89. package/lib/adapters/cursor.js +80 -80
  90. package/lib/adapters/index.js +20 -20
  91. package/lib/adapters/utils.js +81 -81
  92. package/lib/deleted-files.json +7 -0
  93. package/lib/install.js +546 -543
  94. package/package.json +2 -2
  95. package/.tas/README.md +0 -334
  96. package/.tas/commands/tas-epic.md +0 -35
  97. package/.tas/commands/tas-story.md +0 -91
  98. package/.tas/rules/common/story-done.md +0 -30
  99. package/.tas/templates/Epic.md +0 -46
  100. package/.tas/templates/Story.md +0 -90
@@ -1,187 +1,189 @@
1
1
  ---
2
- created_date:
3
- updated_date:
4
- executor:
2
+ created_date: YYYY-MM-DD
3
+ updated_date: YYYY-MM-DD
4
+ executor: ""
5
+ reviewer: ""
5
6
  status: Draft
6
- story_id:
7
- feature_id:
8
- epic_id:
9
- platform: # mobile | web | backend
7
+ story_id: ""
8
+ feature_id: ""
9
+ epic_id: ""
10
+ platform: web
11
+ tags: []
12
+ locator_ref: /docs/NAMING_CONVENTION.md
13
+ ver: 1.0
10
14
  ---
11
15
 
12
16
  # Functional Test Specification: {Story Name}
13
17
 
14
- **Epic**: [{Epic_ID}]({Epic_LINK})
15
- **Feature**: [{Feature_ID}]({FEATURE_LINK})
16
- **Story**: [{Story_ID}]({STORY_LINK})
17
- **Platform**: {{platform}}
18
- **Author**: @[executor]
19
- **Created**: [created_date]
20
- **Status**: [status] (Draft | Ready | Implemented | Verified)
18
+ **Epic**: [{Epic_ID}] | **Feature**: [{Feature_ID}] | **Story**: [{Story_ID}]
19
+ **Author**: @{executor} | **Reviewer**: @{reviewer} | **Status**: {status}
21
20
 
22
21
  ---
23
22
 
24
- ## Test Case Naming Convention
23
+ ## 1. Story Context
25
24
 
26
- > Functional Tests use type code **FT** following TAS standard format
25
+ > 📌 Provide a brief summary of the User Story being tested. This helps QC understand **why** these test cases exist.
27
26
 
28
- ### Format
29
- ```
30
- {PROJECT}_E{EPIC}_F{FEATURE}_S{STORY}_FT_{NUMBER}_{MODIFIER}
31
- ```
27
+ | **Field** | **Detail** |
28
+ | ----------------- | --------------------------------- |
29
+ | **Story Summary** | As a [user], I want to [action] so that [benefit] |
30
+ | **Scope** | What IS covered in this spec |
31
+ | **Out of Scope** | What is NOT covered |
32
+ | **Dependencies** | Upstream stories / APIs / mocks |
33
+ | **Test Strategy** | Manual → Automation |
32
34
 
33
- ### Example
34
- ```
35
- AL_E002_F002_S001_FT_001_H - Functional Test Happy path
36
- AL_E002_F002_S001_FT_002_N - Functional Test Negative
37
- AL_E002_F002_S001_FT_003_E - Functional Test Edge case
38
- ```
35
+ ---
39
36
 
40
- ### Modifier Codes
37
+ ## 2. Environment & Data Configuration
41
38
 
42
- | Code | Modifier | Description |
43
- |------|----------|-------------|
44
- | H | Happy | Positive test - success scenario |
45
- | N | Negative | Negative test - failure scenario |
46
- | E | Edge | Edge case - boundary conditions |
47
- | S | Security | Security test |
48
- | P | Performance | Performance test |
39
+ > 🔗 **NFR Source:** This section is derived from the **Product Requirements Document (PRD) — Non-Functional Requirements** section.
40
+ > All platform targets, environment tiers, and access constraints defined here must align with the PRD NFR.
41
+ > Reference: [PRD Non-Functional Requirements](/docs/PRD.md#non-functional-requirements)
49
42
 
50
- ---
43
+ ### 2.1 Execution Environment Matrix
51
44
 
52
- ## Overview
45
+ > 📌 *Derived from PRD NFR — Platform & Compatibility requirements. Do not add platforms not listed in the PRD.*
53
46
 
54
- > Brief description of what this functional test suite validates for the Story
47
+ | **Platform / View** | **OS Version** | **Browser / Viewport** | **PRD NFR Ref** |
48
+ | ------------------- | -------------- | ---------------------- | ------------------------- |
49
+ | Desktop Web | Windows 11 | Chrome latest / 1440px | `NFR-COMPAT-01` |
50
+ | Desktop Web | macOS 14 | Safari latest / 1440px | `NFR-COMPAT-02` |
51
+ | Mobile Web | iOS 17 | Safari / 390px | `NFR-COMPAT-03` |
52
+ | Mobile Web | Android 14 | Chrome / 390px | `NFR-COMPAT-04` |
55
53
 
56
- **Scope**: {What user functionality is being tested}
57
- **Target Users**: {Clinical / Organic / Both}
54
+ ### 2.2 JSON Test Data Configuration
58
55
 
59
- ---
56
+ > 📌 *Environment tiers derived from PRD NFR — Deployment & Data Isolation requirements.*
60
57
 
61
- ## AC to Functional Test Mapping
58
+ | **Environment** | **JSON Data File ID / Path** | **PRD NFR Ref** | **Description** |
59
+ | --------------- | -------------------------------- | ----------------- | ------------------------------------------ |
60
+ | **TEST** | `data_test_S{STORY_ID}.json` | `NFR-ENV-01` | Internal test data (mock / seeded DB) |
61
+ | **STAG** | `data_stag_S{STORY_ID}.json` | `NFR-ENV-02` | Integration data for UAT |
62
+ | **PROD** | `data_prod_S{STORY_ID}.json` | `NFR-ENV-03` | Production data — Secret, read-only access |
62
63
 
63
- > IMPORTANT: Every FT case MUST reference AC-ID to ensure traceability.
64
- > When AC changes, grep by AC-ID to know which FTs need update.
64
+ ### 2.3 Test Account & Role Matrix
65
65
 
66
- | AC ID | AC Description (Given/When/Then) | FT Test ID | Test Scenario | Modifier | Priority | Status |
67
- |-------|----------------------------------|------------|---------------|----------|----------|--------|
68
- | AC-1 | {Given...When...Then...} | {PROJECT}_E{EPIC}_F{FEATURE}_S{STORY}_FT_001_H | {Happy path description} | Happy | P0 | Draft |
69
- | AC-1 | {Given...When...Then...} | {PROJECT}_E{EPIC}_F{FEATURE}_S{STORY}_FT_002_N | {Negative scenario} | Negative | P0 | Draft |
70
- | AC-1 | {Given...When...Then...} | {PROJECT}_E{EPIC}_F{FEATURE}_S{STORY}_FT_003_E | {Edge case} | Edge | P1 | Draft |
71
- | AC-2 | {Given...When...Then...} | {PROJECT}_E{EPIC}_F{FEATURE}_S{STORY}_FT_004_H | {Happy path description} | Happy | P0 | Draft |
66
+ > 📌 *Derived from PRD NFR Security & Access Control requirements.*
72
67
 
73
- ### Coverage Requirements
74
- - Each AC MUST have at minimum **1 Happy path (H)** test
75
- - Each AC SHOULD have **1 Negative (N)** test if error scenarios exist
76
- - Each AC MAY have **1 Edge case (E)** test if boundary conditions apply
68
+ | **Role** | **Username** | **Access Level** | **PRD NFR Ref** | **Notes** | **JSON Data Source** |
69
+ | ------------- | ------------------- | ---------------- | ----------------- | ------------------ | ------------------- |
70
+ | Admin | `{admin_username}` | Full | `NFR-SEC-01` | | `data_{env}_S{STORY_ID}.json#admin` |
71
+ | Standard User | `{standard_username}` | Limited | `NFR-SEC-02` | | `data_{env}_S{STORY_ID}.json#standard_user` |
72
+ | Guest | N/A | None / Public | `NFR-SEC-03` | | `data_{env}_S{STORY_ID}.json#guest` |
77
73
 
78
74
  ---
79
75
 
80
- ## Test Scenarios
81
-
82
- ### FT_001_H: {Title - Happy Path}
83
- - **AC Reference**: AC-1
84
- - **Preconditions**:
85
- - {List preconditions}
86
- - **Test Data**:
87
- - {Hardcoded values used in test}
88
- - {Env-specific: from test-data.{env}.json}
89
- - {Credentials: from .env via process.env}
90
- - **Steps**:
91
- 1. **Given** {initial state}
92
- 2. **When** {user action}
93
- 3. **Then** {expected outcome}
94
- - **Expected Result**: {Detailed expected behavior}
95
-
96
- ### FT_002_N: {Title - Negative Scenario}
97
- - **AC Reference**: AC-1
98
- - **Preconditions**:
99
- - {List preconditions}
100
- - **Test Data**:
101
- - {Invalid/error data}
102
- - **Steps**:
103
- 1. **Given** {initial state}
104
- 2. **When** {user performs invalid action}
105
- 3. **Then** {expected error handling}
106
- - **Expected Result**: {Error message, recovery option}
107
-
108
- ### FT_003_E: {Title - Edge Case}
109
- - **AC Reference**: AC-1
110
- - **Preconditions**:
111
- - {Boundary condition setup}
112
- - **Test Data**:
113
- - {Boundary values}
114
- - **Steps**:
115
- 1. **Given** {boundary state}
116
- 2. **When** {boundary action}
117
- 3. **Then** {graceful handling}
118
- - **Expected Result**: {Handled gracefully without crash}
76
+ ## 3. Acceptance Criteria Summary
77
+
78
+ > 🗒️ List each AC from the User Story. Each AC maps directly to one or more test cases below.
79
+
80
+ | **AC ID** | **Acceptance Criteria (Given / When / Then)** | **Priority** |
81
+ | -------------- | ------------------------------------------------------------------------ | ------------ |
82
+ | `{USName}-AC01` | Given … / When … / Then … | P1 – Must |
83
+ | `{USName}-AC02` | Given / When … / Then … | P2 – Should |
84
+ | `{USName}-AC03` | Given … / When … / Then … | P3 – Nice |
119
85
 
120
86
  ---
121
87
 
122
- ## Test Data Requirements
88
+ ## 4. Test Cases
89
+
90
+ > **🎯 Workflow Execution Guide (For QC Team):**
91
+ >
92
+ > * **Step 1 (Manual Testing):** Human QC reads `Logical Steps (Human)` and executes against the build. Fill in `Test Result` after each run.
93
+ > * **Step 2 (Automation Evaluation):** Set `Autoable` to `Yes` when UI/logic is stable and the TC is feasible to automate. Leave as `None` if this TC must always remain manual.
94
+ > * **Step 3 (Agent Handoff):** Use the *QC Agent UI Mapping* command. Agent scans TCs where `Autoable = Yes` and fills in `Execution Locators (Agent)`.
95
+ >
96
+ > **TC ID Format:** `[Epic_ID]-[Feat_ID]-[Story_ID]-[AC_ID]-[###]`
97
+ > **Test Types:** `Happy Path` | `Negative` | `Edge Case` | `Boundary` | `Permission` | `UI/UX` | `Performance` | `Security`
98
+ > **Test Result values:** `—` *(not run)* | `✅ Pass` | `❌ Fail` | `⛔ Blocked` | `N/A`
99
+ > **Priority values:** `🔴 High – P0` | `🟡 Med – P1` | `🟢 Low – P2`
100
+ > **Autoable values:**
101
+ > * `None` — TC is **human-only** (exploratory, visual, subjective). `Test Data` is described **inline** in this column and in `Logical Steps`. `Execution Locators` stays blank permanently.
102
+ > * `Yes` — TC **should be converted** to automation script. `Test Data` references a JSON file: `data_{env}_S{STORY_ID}.json#case_###`. Agent will fill `Execution Locators`.
103
+
104
+ ### 4.1 Happy Path Test Cases
105
+
106
+ | **TC ID** | **Test Type** | **Description** | **Pre-Condition** | **Logical Steps (Human)** | **Test Data** | **Execution Locators (Agent)** | **Expected Result** | **Test Result** | **Priority** | **Autoable** | **Traceability** |
107
+ | --------- | ------------- | --------------- | ----------------- | ------------------------- | ------------- | ------------------------------ | ------------------- | --------------- | ------------ | ------------ | ---------------- |
108
+ | `E01-F01-US01-AC01-001` | Happy Path | [Automatable — standard flow] | 1. User is logged in<br>2. Page X is loaded | 1. Navigate to …<br>2. Click …<br>3. Verify … | `data_test_S{STORY_ID}.json#case_001` | *Leave blank — Agent fills* | 1. Element Y is visible<br>2. Toast shows "…"<br>3. DB state updated | — | `🔴 High – P0` | `Yes` | `{USName}-AC01` |
109
+ | `E01-F01-US01-AC01-002` | Happy Path | [Human only — visual / exploratory check] | 1. User is logged in | 1. Open page<br>2. Visually verify layout matches Figma design<br>3. Data used: any valid account | `Any valid account — entered manually by QC at runtime` | — | Layout matches Figma spec | — | `🟡 Med – P1` | `None` | `{USName}-AC01` |
110
+
111
+ ### 4.2 Negative / Error Test Cases
112
+
113
+ | **TC ID** | **Test Type** | **Description** | **Pre-Condition** | **Logical Steps (Human)** | **Test Data** | **Execution Locators (Agent)** | **Expected Result** | **Test Result** | **Priority** | **Autoable** | **Traceability** |
114
+ | --------- | ------------- | --------------- | ----------------- | ------------------------- | ------------- | ------------------------------ | ------------------- | --------------- | ------------ | ------------ | ---------------- |
115
+ | `E01-F01-US01-AC01-003` | Negative | [Automatable — invalid input] | 1. User is logged in | 1. Navigate to …<br>2. Submit empty form | `data_test_S{STORY_ID}.json#case_002` | *Leave blank — Agent fills* | 1. Inline error message shown<br>2. Form not submitted | — | `🟡 Med – P1` | `Yes` | `{USName}-AC01` |
116
+ | `E01-F01-US01-AC01-004` | Negative | [Human only — subjective error UX review] | 1. User is logged in | 1. Trigger error state<br>2. Assess error message clarity and tone<br>3. Data used: any invalid input as judged by QC | `Any invalid input — described and entered by QC during run` | — | Error message is clear, actionable, and matches UX copy spec | — | `🟢 Low – P2` | `None` | `{USName}-AC01` |
117
+
118
+ ### 4.3 Edge Case / Boundary Test Cases
123
119
 
124
- | Data Item | Value | Source | Environment-Specific | Notes |
125
- |-----------|-------|--------|---------------------|-------|
126
- | User Email | test@example.com | test-data.{env}.json | Yes | Different per env |
127
- | User Password | (from .env) | process.env.TEST_USER_PASSWORD | Yes | NEVER hardcode |
128
- | {Entity} ID | {value} | test-data.{env}.json | Yes | Pre-seeded |
129
- | {Static Data} | {value} | Hardcoded in test | No | Same all envs |
120
+ | **TC ID** | **Test Type** | **Description** | **Pre-Condition** | **Logical Steps (Human)** | **Test Data** | **Execution Locators (Agent)** | **Expected Result** | **Test Result** | **Priority** | **Autoable** | **Traceability** |
121
+ | --------- | ------------- | --------------- | ----------------- | ------------------------- | ------------- | ------------------------------ | ------------------- | --------------- | ------------ | ------------ | ---------------- |
122
+ | `E01-F01-US01-AC02-001` | Edge Case / Boundary | [Automatable — max length input] | — | 1. Enter 256-char string<br>2. Submit | `data_test_S{STORY_ID}.json#case_003` | *Leave blank — Agent fills* | Field truncated or error shown | — | `🟢 Low – P2` | `Yes` | `{USName}-AC02` |
130
123
 
131
- ### Environment Data Files
132
- - **Dev**: `apps/{platform}/e2e/data/test-data.dev.json`
133
- - **Staging**: `apps/{platform}/e2e/data/test-data.staging.json`
134
- - **Prod**: `apps/{platform}/e2e/data/test-data.prod.json` (smoke tests only)
124
+ ### 4.4 Permission / Role-Based Test Cases
135
125
 
136
- ### Credentials
137
- > NEVER put passwords/tokens in JSON files or test code.
138
- > Always use `.env` via `process.env`.
126
+ | **TC ID** | **Test Type** | **Description** | **Pre-Condition** | **Logical Steps (Human)** | **Test Data** | **Execution Locators (Agent)** | **Expected Result** | **Test Result** | **Priority** | **Autoable** | **Traceability** |
127
+ | --------- | ------------- | --------------- | ----------------- | ------------------------- | ------------- | ------------------------------ | ------------------- | --------------------------- | ------------ | ------------ | ---------------- |
128
+ | `E01-F01-US01-AC03-001` | Permission | [Human only — access role verified manually] | User is Guest | 1. Log in as Guest (see Role Matrix §2.3 for credentials)<br>2. Navigate to /protected<br>3. Observe redirect<br>4. Data used: Guest credentials from Role Matrix | `Guest credentials — refer to Role Matrix §2.3; entered manually by QC` | — | Redirected to login page with 401 | — | `🔴 High – P0` | `None` | `{USName}-AC03` |
129
+
130
+ ### 4.5 UI / UX & Responsive Test Cases
131
+
132
+ | **TC ID** | **Test Type** | **Description** | **Pre-Condition** | **Logical Steps (Human)** | **Test Data** | **Execution Locators (Agent)** | **Expected Result** | **Test Result** | **Priority** | **Autoable** | **Traceability** |
133
+ | --------- | ------------- | --------------- | ----------------- | ------------------------- | ------------- | ------------------------------ | ------------------- | --------------- | ------------ | ------------ | ---------------- |
134
+ | `E01-F01-US01-AC01-005` | UI/UX | [Human only — responsive layout check] | Mobile 390px viewport | 1. Open page on 390px device or emulator<br>2. Scroll through full page<br>3. Check element stacking and tap targets<br>4. No specific input data required | `No data required — visual inspection only` | — | No horizontal scroll; buttons full-width; tap targets ≥ 44px | — | `🟢 Low – P2` | `None` | `{USName}-AC01` |
139
135
 
140
136
  ---
141
137
 
142
- ## Platform-Specific Implementation
143
-
144
- {{#if platform === "mobile"}}
145
- ### Mobile (Detox)
146
- - **Script Location**: `apps/mobile/e2e/features/{epic-slug}/{feature-slug}/{story-slug}.func.e2e.ts`
147
- - **Test IDs**: Import from `apps/mobile/e2e/test-ids.ts`
148
- - **Data Loader**: Import from `apps/mobile/e2e/helpers/data-loader.ts`
149
- - **Test Helpers**: Import from `apps/mobile/e2e/helpers/test-utils.ts`
150
- - **Run Command**: `yarn functest:mobile:{feature-slug}`
151
- {{/if}}
152
- {{#if platform === "web"}}
153
- ### Web (Playwright)
154
- - **Script Location**: `apps/web/e2e/features/{epic-slug}/{feature-slug}/{story-slug}.func.spec.ts`
155
- - **Selectors**: Use `data-testid` attributes
156
- - **Data Loader**: Import from `apps/web/e2e/helpers/data-loader.ts`
157
- - **Test Helpers**: Import from `apps/web/e2e/helpers/test-utils.ts`
158
- - **Run Command**: `yarn functest:web:{feature-slug}`
159
- - **Viewports**: Test mobile (375px), tablet (768px), desktop (1280px)
160
- {{/if}}
138
+ ## 5. Non-Functional Test Notes
139
+
140
+ > NFT items are tracked here for visibility. Full NFR specs live in [TEST_ENVIRONMENT_MATRIX.md](/docs/TEST_ENVIRONMENT_MATRIX.md).
141
+
142
+ | **NFT Area** | **Criteria** | **Tool / Method** | **Linked TC or Epic** |
143
+ | --------------- | ----------------------------------------------------- | --------------------- | --------------------- |
144
+ | Performance | Page load 2s on 4G / LCP ≤ 2.5s | Lighthouse / k6 | |
145
+ | Accessibility | WCAG 2.1 AA – keyboard nav, ARIA labels, contrast | axe / manual | |
146
+ | Security | No PII in URL params; XSS inputs sanitized | Manual / OWASP ZAP | |
147
+ | Localization | All strings from i18n keys; no hard-coded text | Manual review | |
161
148
 
162
149
  ---
163
150
 
164
- ## Traceability
151
+ ## 6. Requirement Coverage Matrix
152
+
153
+ | **Requirement ID** | **Acceptance Criteria Summary** | **Covered by TC IDs** | **Status** |
154
+ | ------------------ | ------------------------------- | ------------------------------------------------------------- | ----------- |
155
+ | `{USName}-AC01` | | `E01-F01-US01-AC01-001`, `E01-F01-US01-AC01-002`, `…` | Not Started |
156
+ | `{USName}-AC02` | | `E01-F01-US01-AC02-001` | Not Started |
157
+ | `{USName}-AC03` | | `E01-F01-US01-AC03-001` | Not Started |
158
+
159
+ **Coverage Summary:**
165
160
 
166
- > This section enables impact analysis when requirements change.
161
+ | **Total ACs** | **Covered** | **Not Covered** | **Coverage %** |
162
+ | ------------- | ----------- | --------------- | -------------- |
163
+ | 0 | 0 | 0 | 0% |
167
164
 
168
- ### How to find impacted tests when AC changes:
169
- 1. Note the AC-ID that changed (e.g., AC-1)
170
- 2. Search this document's "AC to Functional Test Mapping" table
171
- 3. All FT Test IDs in rows matching that AC-ID need review
172
- 4. Find corresponding script files using the FT Test ID as describe block name
165
+ **Test Run Summary:**
173
166
 
174
- ### Reverse traceability (test to requirement):
175
- Each test script `describe` block includes the AC-ID in comments:
176
- ```typescript
177
- // AC Reference: AC-1
178
- describe('{PROJECT}_E{EPIC}_F{FEATURE}_S{STORY}_FT_001_H', () => { ... });
179
- ```
167
+ | **Total TCs** | **✅ Pass** | **❌ Fail** | **⛔ Blocked** | **N/A** | **— Not Run** | **Pass Rate** |
168
+ | ------------- | ---------- | ---------- | ------------- | ------- | ------------- | ------------- |
169
+ | 0 | 0 | 0 | 0 | 0 | 0 | 0% |
180
170
 
181
171
  ---
182
172
 
183
- ## Changelog
173
+ ## 7. Risk & Assumption Log
174
+
175
+ | **ID** | **Type** | **Description** | **Impact** | **Mitigation** |
176
+ | ------- | -------------- | ------------------------------------------- | ------------ | -------------------------------- |
177
+ | `RSK-01` | Risk | API not stable during test window | High | Use mock server fallback |
178
+ | `ASM-01` | Assumption | Feature flag is ON in TEST environment | Medium | Confirm with dev before run |
179
+
180
+ ---
181
+
182
+ ## 8. Change log
183
+
184
+ > **Note:** Changes are summarized daily (Daily Summary format).
184
185
 
185
- | Date | Changes | Author |
186
- |------|---------|--------|
187
- | [created_date] | Initial functional test spec created | @[executor] |
186
+ | **Date** | **Ver** | **Daily Summary of Changes** | **Author** |
187
+ | ----------------- | ------- | ------------------------------------------------------------------------- | ------------- |
188
+ | {created_date} | 1.0 | Initial functional test spec created | @{executor} |
189
+ | {updated_date} | 1.0 | Initial functional test spec created | @{executor} |