@agile-vibe-coding/avc 0.1.1 → 0.3.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 (239) hide show
  1. package/cli/agent-loader.js +21 -0
  2. package/cli/agents/agent-selector.md +152 -0
  3. package/cli/agents/architecture-recommender.md +418 -0
  4. package/cli/agents/code-implementer.md +117 -0
  5. package/cli/agents/code-validator.md +80 -0
  6. package/cli/agents/context-reviewer-epic.md +101 -0
  7. package/cli/agents/context-reviewer-story.md +92 -0
  8. package/cli/agents/context-writer-epic.md +145 -0
  9. package/cli/agents/context-writer-story.md +111 -0
  10. package/cli/agents/database-deep-dive.md +470 -0
  11. package/cli/agents/database-recommender.md +634 -0
  12. package/cli/agents/doc-distributor.md +176 -0
  13. package/cli/agents/doc-writer-epic.md +42 -0
  14. package/cli/agents/doc-writer-story.md +43 -0
  15. package/cli/agents/documentation-updater.md +203 -0
  16. package/cli/agents/duplicate-detector.md +110 -0
  17. package/cli/agents/epic-story-decomposer.md +559 -0
  18. package/cli/agents/feature-context-generator.md +91 -0
  19. package/cli/agents/gap-checker-epic.md +52 -0
  20. package/cli/agents/impact-checker-story.md +51 -0
  21. package/cli/agents/migration-guide-generator.md +305 -0
  22. package/cli/agents/mission-scope-generator.md +143 -0
  23. package/cli/agents/mission-scope-validator.md +146 -0
  24. package/cli/agents/project-context-extractor.md +122 -0
  25. package/cli/agents/project-documentation-creator.json +226 -0
  26. package/cli/agents/project-documentation-creator.md +595 -0
  27. package/cli/agents/question-prefiller.md +269 -0
  28. package/cli/agents/refiner-epic.md +39 -0
  29. package/cli/agents/refiner-story.md +42 -0
  30. package/cli/agents/scaffolding-generator.md +99 -0
  31. package/cli/agents/seed-validator.md +71 -0
  32. package/cli/agents/story-doc-enricher.md +133 -0
  33. package/cli/agents/story-scope-reviewer.md +147 -0
  34. package/cli/agents/story-splitter.md +83 -0
  35. package/cli/agents/suggestion-business-analyst.md +88 -0
  36. package/cli/agents/suggestion-deployment-architect.md +263 -0
  37. package/cli/agents/suggestion-product-manager.md +129 -0
  38. package/cli/agents/suggestion-security-specialist.md +156 -0
  39. package/cli/agents/suggestion-technical-architect.md +269 -0
  40. package/cli/agents/suggestion-ux-researcher.md +93 -0
  41. package/cli/agents/task-subtask-decomposer.md +188 -0
  42. package/cli/agents/validator-documentation.json +183 -0
  43. package/cli/agents/validator-documentation.md +455 -0
  44. package/cli/agents/validator-selector.md +211 -0
  45. package/cli/ansi-colors.js +21 -0
  46. package/cli/api-reference-tool.js +368 -0
  47. package/cli/build-docs.js +29 -8
  48. package/cli/ceremony-history.js +369 -0
  49. package/cli/checks/catalog.json +76 -0
  50. package/cli/checks/code/quality.json +26 -0
  51. package/cli/checks/code/testing.json +14 -0
  52. package/cli/checks/code/traceability.json +26 -0
  53. package/cli/checks/cross-refs/epic.json +171 -0
  54. package/cli/checks/cross-refs/story.json +149 -0
  55. package/cli/checks/epic/api.json +114 -0
  56. package/cli/checks/epic/backend.json +126 -0
  57. package/cli/checks/epic/cloud.json +126 -0
  58. package/cli/checks/epic/data.json +102 -0
  59. package/cli/checks/epic/database.json +114 -0
  60. package/cli/checks/epic/developer.json +182 -0
  61. package/cli/checks/epic/devops.json +174 -0
  62. package/cli/checks/epic/frontend.json +162 -0
  63. package/cli/checks/epic/mobile.json +102 -0
  64. package/cli/checks/epic/qa.json +90 -0
  65. package/cli/checks/epic/security.json +184 -0
  66. package/cli/checks/epic/solution-architect.json +192 -0
  67. package/cli/checks/epic/test-architect.json +90 -0
  68. package/cli/checks/epic/ui.json +102 -0
  69. package/cli/checks/epic/ux.json +90 -0
  70. package/cli/checks/fixes/epic-fix-template.md +10 -0
  71. package/cli/checks/fixes/story-fix-template.md +10 -0
  72. package/cli/checks/story/api.json +186 -0
  73. package/cli/checks/story/backend.json +102 -0
  74. package/cli/checks/story/cloud.json +102 -0
  75. package/cli/checks/story/data.json +210 -0
  76. package/cli/checks/story/database.json +102 -0
  77. package/cli/checks/story/developer.json +168 -0
  78. package/cli/checks/story/devops.json +102 -0
  79. package/cli/checks/story/frontend.json +174 -0
  80. package/cli/checks/story/mobile.json +102 -0
  81. package/cli/checks/story/qa.json +210 -0
  82. package/cli/checks/story/security.json +198 -0
  83. package/cli/checks/story/solution-architect.json +230 -0
  84. package/cli/checks/story/test-architect.json +210 -0
  85. package/cli/checks/story/ui.json +102 -0
  86. package/cli/checks/story/ux.json +102 -0
  87. package/cli/coding-order.js +401 -0
  88. package/cli/command-logger.js +49 -12
  89. package/cli/components/static-output.js +63 -0
  90. package/cli/console-output-manager.js +94 -0
  91. package/cli/dependency-checker.js +72 -0
  92. package/cli/docs-sync.js +306 -0
  93. package/cli/epic-story-validator.js +659 -0
  94. package/cli/evaluation-prompts.js +1008 -0
  95. package/cli/execution-context.js +195 -0
  96. package/cli/generate-summary-table.js +340 -0
  97. package/cli/init-model-config.js +704 -0
  98. package/cli/init.js +1737 -278
  99. package/cli/kanban-server-manager.js +227 -0
  100. package/cli/llm-claude.js +150 -1
  101. package/cli/llm-gemini.js +109 -0
  102. package/cli/llm-local.js +493 -0
  103. package/cli/llm-mock.js +233 -0
  104. package/cli/llm-openai.js +454 -0
  105. package/cli/llm-provider.js +379 -3
  106. package/cli/llm-token-limits.js +211 -0
  107. package/cli/llm-verifier.js +662 -0
  108. package/cli/llm-xiaomi.js +143 -0
  109. package/cli/message-constants.js +49 -0
  110. package/cli/message-manager.js +334 -0
  111. package/cli/message-types.js +96 -0
  112. package/cli/messaging-api.js +291 -0
  113. package/cli/micro-check-fixer.js +335 -0
  114. package/cli/micro-check-runner.js +449 -0
  115. package/cli/micro-check-scorer.js +148 -0
  116. package/cli/micro-check-validator.js +538 -0
  117. package/cli/model-pricing.js +192 -0
  118. package/cli/model-query-engine.js +468 -0
  119. package/cli/model-recommendation-analyzer.js +495 -0
  120. package/cli/model-selector.js +270 -0
  121. package/cli/output-buffer.js +107 -0
  122. package/cli/process-manager.js +73 -2
  123. package/cli/prompt-logger.js +57 -0
  124. package/cli/repl-ink.js +4625 -1094
  125. package/cli/repl-old.js +3 -4
  126. package/cli/seed-processor.js +962 -0
  127. package/cli/sprint-planning-processor.js +4162 -0
  128. package/cli/template-processor.js +2149 -105
  129. package/cli/templates/project.md +25 -8
  130. package/cli/templates/vitepress-config.mts.template +5 -4
  131. package/cli/token-tracker.js +547 -0
  132. package/cli/tools/generate-story-validators.js +317 -0
  133. package/cli/tools/generate-validators.js +669 -0
  134. package/cli/update-checker.js +19 -17
  135. package/cli/update-notifier.js +4 -4
  136. package/cli/validation-router.js +667 -0
  137. package/cli/verification-tracker.js +563 -0
  138. package/cli/worktree-runner.js +654 -0
  139. package/kanban/README.md +386 -0
  140. package/kanban/client/README.md +205 -0
  141. package/kanban/client/components.json +20 -0
  142. package/kanban/client/dist/assets/index-D_KC5EQT.css +1 -0
  143. package/kanban/client/dist/assets/index-DjY5zqW7.js +351 -0
  144. package/kanban/client/dist/index.html +16 -0
  145. package/kanban/client/dist/vite.svg +1 -0
  146. package/kanban/client/index.html +15 -0
  147. package/kanban/client/package-lock.json +9442 -0
  148. package/kanban/client/package.json +44 -0
  149. package/kanban/client/postcss.config.js +6 -0
  150. package/kanban/client/public/vite.svg +1 -0
  151. package/kanban/client/src/App.jsx +651 -0
  152. package/kanban/client/src/components/ProjectFileEditorPopup.jsx +117 -0
  153. package/kanban/client/src/components/ceremony/AskArchPopup.jsx +420 -0
  154. package/kanban/client/src/components/ceremony/AskModelPopup.jsx +629 -0
  155. package/kanban/client/src/components/ceremony/CeremonyWorkflowModal.jsx +1133 -0
  156. package/kanban/client/src/components/ceremony/EpicStorySelectionModal.jsx +254 -0
  157. package/kanban/client/src/components/ceremony/ProviderSwitcherButton.jsx +290 -0
  158. package/kanban/client/src/components/ceremony/SponsorCallModal.jsx +686 -0
  159. package/kanban/client/src/components/ceremony/SprintPlanningModal.jsx +838 -0
  160. package/kanban/client/src/components/ceremony/steps/ArchitectureStep.jsx +150 -0
  161. package/kanban/client/src/components/ceremony/steps/CompleteStep.jsx +136 -0
  162. package/kanban/client/src/components/ceremony/steps/DatabaseStep.jsx +202 -0
  163. package/kanban/client/src/components/ceremony/steps/DeploymentStep.jsx +123 -0
  164. package/kanban/client/src/components/ceremony/steps/MissionStep.jsx +106 -0
  165. package/kanban/client/src/components/ceremony/steps/ReviewAnswersStep.jsx +329 -0
  166. package/kanban/client/src/components/ceremony/steps/RunningStep.jsx +249 -0
  167. package/kanban/client/src/components/kanban/CardDetailModal.jsx +646 -0
  168. package/kanban/client/src/components/kanban/EpicSection.jsx +146 -0
  169. package/kanban/client/src/components/kanban/FilterToolbar.jsx +222 -0
  170. package/kanban/client/src/components/kanban/GroupingSelector.jsx +63 -0
  171. package/kanban/client/src/components/kanban/KanbanBoard.jsx +211 -0
  172. package/kanban/client/src/components/kanban/KanbanCard.jsx +147 -0
  173. package/kanban/client/src/components/kanban/KanbanColumn.jsx +90 -0
  174. package/kanban/client/src/components/kanban/RefineWorkItemPopup.jsx +784 -0
  175. package/kanban/client/src/components/kanban/RunButton.jsx +162 -0
  176. package/kanban/client/src/components/kanban/SeedButton.jsx +176 -0
  177. package/kanban/client/src/components/layout/LoadingScreen.jsx +82 -0
  178. package/kanban/client/src/components/process/ProcessMonitorBar.jsx +80 -0
  179. package/kanban/client/src/components/settings/AgentEditorPopup.jsx +171 -0
  180. package/kanban/client/src/components/settings/AgentsTab.jsx +381 -0
  181. package/kanban/client/src/components/settings/ApiKeysTab.jsx +142 -0
  182. package/kanban/client/src/components/settings/CeremonyModelsTab.jsx +105 -0
  183. package/kanban/client/src/components/settings/CheckEditorPopup.jsx +507 -0
  184. package/kanban/client/src/components/settings/CostThresholdsTab.jsx +95 -0
  185. package/kanban/client/src/components/settings/ModelPricingTab.jsx +269 -0
  186. package/kanban/client/src/components/settings/OpenAIAuthSection.jsx +412 -0
  187. package/kanban/client/src/components/settings/ServersTab.jsx +121 -0
  188. package/kanban/client/src/components/settings/SettingsModal.jsx +84 -0
  189. package/kanban/client/src/components/stats/CostModal.jsx +384 -0
  190. package/kanban/client/src/components/ui/badge.jsx +27 -0
  191. package/kanban/client/src/components/ui/dialog.jsx +121 -0
  192. package/kanban/client/src/components/ui/tabs.jsx +85 -0
  193. package/kanban/client/src/hooks/__tests__/useGrouping.test.js +232 -0
  194. package/kanban/client/src/hooks/useGrouping.js +177 -0
  195. package/kanban/client/src/hooks/useWebSocket.js +120 -0
  196. package/kanban/client/src/lib/__tests__/api.test.js +196 -0
  197. package/kanban/client/src/lib/__tests__/status-grouping.test.js +94 -0
  198. package/kanban/client/src/lib/api.js +515 -0
  199. package/kanban/client/src/lib/status-grouping.js +154 -0
  200. package/kanban/client/src/lib/utils.js +11 -0
  201. package/kanban/client/src/main.jsx +10 -0
  202. package/kanban/client/src/store/__tests__/kanbanStore.test.js +164 -0
  203. package/kanban/client/src/store/ceremonyStore.js +172 -0
  204. package/kanban/client/src/store/filterStore.js +201 -0
  205. package/kanban/client/src/store/kanbanStore.js +123 -0
  206. package/kanban/client/src/store/processStore.js +65 -0
  207. package/kanban/client/src/store/sprintPlanningStore.js +33 -0
  208. package/kanban/client/src/styles/globals.css +59 -0
  209. package/kanban/client/tailwind.config.js +77 -0
  210. package/kanban/client/vite.config.js +28 -0
  211. package/kanban/client/vitest.config.js +28 -0
  212. package/kanban/dev-start.sh +47 -0
  213. package/kanban/package.json +12 -0
  214. package/kanban/server/index.js +537 -0
  215. package/kanban/server/routes/ceremony.js +454 -0
  216. package/kanban/server/routes/costs.js +163 -0
  217. package/kanban/server/routes/openai-oauth.js +366 -0
  218. package/kanban/server/routes/processes.js +50 -0
  219. package/kanban/server/routes/settings.js +736 -0
  220. package/kanban/server/routes/websocket.js +281 -0
  221. package/kanban/server/routes/work-items.js +487 -0
  222. package/kanban/server/services/CeremonyService.js +1441 -0
  223. package/kanban/server/services/FileSystemScanner.js +95 -0
  224. package/kanban/server/services/FileWatcher.js +144 -0
  225. package/kanban/server/services/HierarchyBuilder.js +196 -0
  226. package/kanban/server/services/ProcessRegistry.js +122 -0
  227. package/kanban/server/services/TaskRunnerService.js +261 -0
  228. package/kanban/server/services/WorkItemReader.js +123 -0
  229. package/kanban/server/services/WorkItemRefineService.js +510 -0
  230. package/kanban/server/start.js +49 -0
  231. package/kanban/server/utils/kanban-logger.js +132 -0
  232. package/kanban/server/utils/markdown.js +91 -0
  233. package/kanban/server/utils/status-grouping.js +107 -0
  234. package/kanban/server/workers/run-task-worker.js +121 -0
  235. package/kanban/server/workers/seed-worker.js +94 -0
  236. package/kanban/server/workers/sponsor-call-worker.js +92 -0
  237. package/kanban/server/workers/sprint-planning-worker.js +212 -0
  238. package/package.json +19 -7
  239. package/cli/agents/documentation.md +0 -302
@@ -0,0 +1,198 @@
1
+ {
2
+ "perspective": "security",
3
+ "scope": "story",
4
+ "checks": [
5
+ {
6
+ "id": "sec-story-01",
7
+ "tier": 1,
8
+ "perspective": "security",
9
+ "severity": "major",
10
+ "category": "authentication-session-security",
11
+ "universal": false,
12
+ "applicabilityQuestion": "Does this story involve authentication or session management? (Does it handle login, cookies, tokens, or sessions?)",
13
+ "question": "Do cookies use httpOnly, SameSite=Strict (or Lax with documented reason), and Secure?",
14
+ "failDescription": "Cookie security attributes are not specified or incomplete",
15
+ "failSuggestion": "Specify cookie attributes: httpOnly (prevents JS access), SameSite=Strict, Secure (HTTPS only)"
16
+ },
17
+ {
18
+ "id": "sec-story-02",
19
+ "tier": 1,
20
+ "perspective": "security",
21
+ "severity": "major",
22
+ "category": "authentication-session-security",
23
+ "universal": false,
24
+ "applicabilityQuestion": "Does this story have state-mutating cookie-authenticated endpoints?",
25
+ "question": "Is CSRF protection stated for any state-mutating cookie-authenticated endpoint?",
26
+ "failDescription": "CSRF protection is not stated for state-mutating endpoints",
27
+ "failSuggestion": "State CSRF protection strategy: SameSite cookies alone are insufficient for all browsers — add CSRF token or double-submit"
28
+ },
29
+ {
30
+ "id": "sec-story-03",
31
+ "tier": 1,
32
+ "perspective": "security",
33
+ "severity": "major",
34
+ "category": "authentication-session-security",
35
+ "universal": false,
36
+ "applicabilityQuestion": "Does this story involve sessions or tokens that can be invalidated?",
37
+ "question": "Is the token/session revocation condition stated (what invalidates a session)?",
38
+ "failDescription": "Session revocation condition is not stated — unclear what invalidates a session",
39
+ "failSuggestion": "State revocation conditions: deactivation, explicit logout, token rotation, or administrative revocation"
40
+ },
41
+ {
42
+ "id": "sec-story-04",
43
+ "tier": 1,
44
+ "perspective": "security",
45
+ "severity": "major",
46
+ "category": "authentication-session-security",
47
+ "universal": false,
48
+ "applicabilityQuestion": "Does this story involve public (unauthenticated) login or credential endpoints?",
49
+ "question": "Is brute-force/rate-limit protection specified for public login/credential endpoints?",
50
+ "failDescription": "Brute-force protection is not specified for public login endpoints",
51
+ "failSuggestion": "Specify rate limiting for public auth endpoints: e.g. '5 attempts per minute per IP, lockout after 10 failures'"
52
+ },
53
+ {
54
+ "id": "sec-story-05",
55
+ "tier": 1,
56
+ "perspective": "security",
57
+ "severity": "critical",
58
+ "category": "authorization-access-control",
59
+ "universal": false,
60
+ "applicabilityQuestion": "Does this story involve accessing user-owned resources? (Can user A potentially access user B's data?)",
61
+ "question": "Is IDOR/BOLA risk addressed — does the story define per-record ownership checks?",
62
+ "failDescription": "IDOR/BOLA risk is not addressed — no per-record ownership check defined",
63
+ "failSuggestion": "Define per-record ownership check: verify requesting user owns the resource, return 404 if not owner"
64
+ },
65
+ {
66
+ "id": "sec-story-06",
67
+ "tier": 1,
68
+ "perspective": "security",
69
+ "severity": "major",
70
+ "category": "authorization-access-control",
71
+ "universal": false,
72
+ "applicabilityQuestion": "Does this story involve role-based operations? (Does it have different behavior for different roles?)",
73
+ "question": "Is horizontal privilege escalation prevented — can staff elevate to admin via parameter tampering?",
74
+ "failDescription": "Horizontal privilege escalation prevention is not addressed",
75
+ "failSuggestion": "Prevent privilege escalation: validate role from JWT claims server-side, reject role changes via request parameters"
76
+ },
77
+ {
78
+ "id": "sec-story-07",
79
+ "tier": 1,
80
+ "perspective": "security",
81
+ "severity": "major",
82
+ "category": "authorization-access-control",
83
+ "universal": false,
84
+ "applicabilityQuestion": "Does this story involve endpoints that return different responses based on authorization?",
85
+ "question": "Is the 403 vs 404 decision documented (existence-hiding uses 404, known-forbidden uses 403)?",
86
+ "failDescription": "403 vs 404 decision is not documented — unclear whether to hide resource existence",
87
+ "failSuggestion": "Document the 403 vs 404 decision: use 404 to hide existence, use 403 when caller knows resource exists"
88
+ },
89
+ {
90
+ "id": "sec-story-08",
91
+ "tier": 1,
92
+ "perspective": "security",
93
+ "severity": "major",
94
+ "category": "authorization-access-control",
95
+ "universal": false,
96
+ "applicabilityQuestion": "Does this story describe access control using role-based phrases?",
97
+ "question": "Are all role boundaries stated precisely (no 'permitted users' — exact condition required)?",
98
+ "failDescription": "Role boundaries use vague phrases — exact role conditions are required",
99
+ "failSuggestion": "Replace 'permitted users' with exact conditions: e.g. 'users with role === admin'"
100
+ },
101
+ {
102
+ "id": "sec-story-09",
103
+ "tier": 1,
104
+ "perspective": "security",
105
+ "severity": "major",
106
+ "category": "input-validation-injection",
107
+ "universal": false,
108
+ "applicabilityQuestion": "Does this story accept user input? (Does it have form fields, query parameters, or request bodies?)",
109
+ "question": "Are all user-supplied fields validated server-side with type, format, and length constraints in ACs?",
110
+ "failDescription": "Server-side input validation constraints are missing from acceptance criteria",
111
+ "failSuggestion": "Add server-side validation: type (string, number), format (email, E.164), length (min/max) for all user-supplied fields"
112
+ },
113
+ {
114
+ "id": "sec-story-10",
115
+ "tier": 1,
116
+ "perspective": "security",
117
+ "severity": "major",
118
+ "category": "input-validation-injection",
119
+ "universal": false,
120
+ "applicabilityQuestion": "Does this story accept user input that could be used for injection attacks?",
121
+ "question": "Are injection vectors addressed for the story's data type (SQL injection, path traversal, XSS)?",
122
+ "failDescription": "Injection vectors are not addressed for the story's data type",
123
+ "failSuggestion": "Address injection vectors: parameterized queries (SQL injection), path sanitization (traversal), output encoding (XSS)"
124
+ },
125
+ {
126
+ "id": "sec-story-11",
127
+ "tier": 1,
128
+ "perspective": "security",
129
+ "severity": "minor",
130
+ "category": "input-validation-injection",
131
+ "universal": false,
132
+ "applicabilityQuestion": "Does this story accept input that could have multiple formats? (e.g. phone numbers, emails, URLs)",
133
+ "question": "Are normalization rules explicit (e.g. phone to E.164, email to lowercase)?",
134
+ "failDescription": "Normalization rules are not explicit — bypass via alternate formats is possible",
135
+ "failSuggestion": "Define normalization rules: e.g. email -> lowercase, phone -> E.164 format before validation"
136
+ },
137
+ {
138
+ "id": "sec-story-12",
139
+ "tier": 1,
140
+ "perspective": "security",
141
+ "severity": "minor",
142
+ "category": "data-protection-privacy",
143
+ "universal": false,
144
+ "applicabilityQuestion": "Does this story return PII or user data in API responses?",
145
+ "question": "Are PII fields minimized in responses — only returning what the caller needs?",
146
+ "failDescription": "PII fields may not be minimized in responses",
147
+ "failSuggestion": "Minimize PII in responses: only return fields the caller needs, exclude unnecessary personal data"
148
+ },
149
+ {
150
+ "id": "sec-story-13",
151
+ "tier": 1,
152
+ "perspective": "security",
153
+ "severity": "critical",
154
+ "category": "data-protection-privacy",
155
+ "universal": false,
156
+ "applicabilityQuestion": "Does this story handle passwords, tokens, or secret keys?",
157
+ "question": "Are sensitive fields (passwords, tokens) never returned in responses?",
158
+ "failDescription": "Sensitive fields may be returned in API responses",
159
+ "failSuggestion": "Ensure passwords, tokens, and secret keys are never included in API responses"
160
+ },
161
+ {
162
+ "id": "sec-story-14",
163
+ "tier": 1,
164
+ "perspective": "security",
165
+ "severity": "minor",
166
+ "category": "data-protection-privacy",
167
+ "universal": false,
168
+ "applicabilityQuestion": "Does this story involve logging or audit trails?",
169
+ "question": "Is log redaction addressed — secrets and PII not written to application logs?",
170
+ "failDescription": "Log redaction is not addressed — secrets or PII may be written to logs",
171
+ "failSuggestion": "Address log redaction: ensure passwords, tokens, and PII are not written to application logs"
172
+ },
173
+ {
174
+ "id": "sec-story-15",
175
+ "tier": 1,
176
+ "perspective": "security",
177
+ "severity": "minor",
178
+ "category": "security-testing-completeness",
179
+ "universal": false,
180
+ "applicabilityQuestion": "Does this story involve security-sensitive operations?",
181
+ "question": "Does at least one AC cover an abuse/attack scenario (wrong credentials, forged token, unauthorized access)?",
182
+ "failDescription": "No AC covers an abuse or attack scenario",
183
+ "failSuggestion": "Add at least one abuse scenario AC: wrong credentials, forged token, unauthorized resource access, or injection attempt"
184
+ },
185
+ {
186
+ "id": "sec-story-16",
187
+ "tier": 1,
188
+ "perspective": "security",
189
+ "severity": "minor",
190
+ "category": "security-testing-completeness",
191
+ "universal": false,
192
+ "applicabilityQuestion": "Does this story return error responses?",
193
+ "question": "Do error responses avoid leaking implementation details (no stack traces, no user enumeration)?",
194
+ "failDescription": "Error responses may leak implementation details",
195
+ "failSuggestion": "Ensure error responses use generic messages: no stack traces, consistent error format, no user enumeration via 404 vs 401"
196
+ }
197
+ ]
198
+ }
@@ -0,0 +1,230 @@
1
+ {
2
+ "perspective": "solution-architect",
3
+ "scope": "story",
4
+ "checks": [
5
+ {
6
+ "id": "sa-story-01",
7
+ "tier": 1,
8
+ "perspective": "solution-architect",
9
+ "severity": "critical",
10
+ "category": "api-contract-completeness",
11
+ "universal": false,
12
+ "applicabilityQuestion": "Does this story define or modify API endpoints? (Does it involve HTTP requests, REST endpoints, or API operations?)",
13
+ "question": "Does every API endpoint in this story have: HTTP method + path + success status code + key response fields?",
14
+ "failDescription": "API endpoint contract is incomplete — missing HTTP method, path, status code, or response fields",
15
+ "failSuggestion": "Complete the API contract for every endpoint: HTTP method, path pattern, success status code, and key response field names"
16
+ },
17
+ {
18
+ "id": "sa-story-02",
19
+ "tier": 1,
20
+ "perspective": "solution-architect",
21
+ "severity": "major",
22
+ "category": "api-contract-completeness",
23
+ "universal": false,
24
+ "applicabilityQuestion": "Does this story define or modify API endpoints?",
25
+ "question": "Does at least one error scenario per endpoint specify a status code and error body shape (e.g. { error: 'CODE' })?",
26
+ "failDescription": "Error scenarios lack specific status codes and error body shapes",
27
+ "failSuggestion": "Add at least one error scenario per endpoint with status code and error body shape: e.g. 422 { error: 'VALIDATION_ERROR', field: 'email' }"
28
+ },
29
+ {
30
+ "id": "sa-story-03",
31
+ "tier": 1,
32
+ "perspective": "solution-architect",
33
+ "severity": "critical",
34
+ "category": "api-contract-completeness",
35
+ "universal": false,
36
+ "applicabilityQuestion": "Does this story define access control or authorization rules for endpoints?",
37
+ "question": "Is the authorization rule precise — exact role(s), what restricted callers receive (403 vs 404), and what unauthenticated callers receive (401)?",
38
+ "failDescription": "Authorization rule is imprecise — missing exact roles, 403/404 decision, or 401 response for unauthenticated callers",
39
+ "failSuggestion": "Specify authorization precisely: exact role names, what restricted callers receive (403 or 404), and unauthenticated callers receive 401"
40
+ },
41
+ {
42
+ "id": "sa-story-04",
43
+ "tier": 1,
44
+ "perspective": "solution-architect",
45
+ "severity": "major",
46
+ "category": "api-contract-completeness",
47
+ "universal": false,
48
+ "applicabilityQuestion": "Does this story describe access control using role-based phrases?",
49
+ "question": "Does the story avoid vague authorization phrases ('permitted users', 'authorized staff', 'users with access') and instead use exact conditions?",
50
+ "failDescription": "Story uses vague authorization phrases that are unimplementable — exact role names required",
51
+ "failSuggestion": "Replace vague phrases with exact conditions: instead of 'permitted users', use 'users with role admin or staff'"
52
+ },
53
+ {
54
+ "id": "sa-story-05",
55
+ "tier": 1,
56
+ "perspective": "solution-architect",
57
+ "severity": "major",
58
+ "category": "auth-session-stories",
59
+ "universal": false,
60
+ "applicabilityQuestion": "Does this story involve tokens or sessions? (Does it handle login, session creation, refresh tokens, or cookies?)",
61
+ "question": "Does the story state cookie attributes (httpOnly, SameSite, Secure, Path)?",
62
+ "failDescription": "Cookie attributes are not stated for auth/session story",
63
+ "failSuggestion": "State cookie attributes: httpOnly; SameSite=Strict; Secure; Path=/"
64
+ },
65
+ {
66
+ "id": "sa-story-06",
67
+ "tier": 1,
68
+ "perspective": "solution-architect",
69
+ "severity": "major",
70
+ "category": "auth-session-stories",
71
+ "universal": false,
72
+ "applicabilityQuestion": "Does this story involve tokens or sessions?",
73
+ "question": "Are token lifetimes explicit (e.g. '15-min JWT access token', '7-day refresh token')?",
74
+ "failDescription": "Token lifetimes are not explicit",
75
+ "failSuggestion": "State explicit token lifetimes: e.g. '15-min JWT access token', '7-day refresh token'"
76
+ },
77
+ {
78
+ "id": "sa-story-07",
79
+ "tier": 1,
80
+ "perspective": "solution-architect",
81
+ "severity": "major",
82
+ "category": "auth-session-stories",
83
+ "universal": false,
84
+ "applicabilityQuestion": "Does this story involve JWT tokens?",
85
+ "question": "Are JWT claims enumerated (e.g. { sub: userId, role: 'admin'|'staff', exp })?",
86
+ "failDescription": "JWT claims are not enumerated",
87
+ "failSuggestion": "Enumerate JWT claims: e.g. { sub: userId, role: 'admin'|'staff', iat, exp }"
88
+ },
89
+ {
90
+ "id": "sa-story-08",
91
+ "tier": 1,
92
+ "perspective": "solution-architect",
93
+ "severity": "major",
94
+ "category": "auth-session-stories",
95
+ "universal": false,
96
+ "applicabilityQuestion": "Does this story involve session management or token revocation?",
97
+ "question": "Is the session revocation condition specified (e.g. tokens issued before user.deactivated_at result in 401)?",
98
+ "failDescription": "Session revocation condition is not specified",
99
+ "failSuggestion": "Specify session revocation: e.g. 'tokens issued before user.deactivated_at return 401 SESSION_REVOKED'"
100
+ },
101
+ {
102
+ "id": "sa-story-09",
103
+ "tier": 1,
104
+ "perspective": "solution-architect",
105
+ "severity": "minor",
106
+ "category": "auth-session-stories",
107
+ "universal": false,
108
+ "applicabilityQuestion": "Does this story involve refresh tokens?",
109
+ "question": "Is concurrent session handling or token rotation behavior specified for refresh stories?",
110
+ "failDescription": "Concurrent session handling or token rotation behavior is not specified",
111
+ "failSuggestion": "Specify concurrent session handling: allow multiple sessions, or rotate tokens (invalidate old on refresh)"
112
+ },
113
+ {
114
+ "id": "sa-story-10",
115
+ "tier": 1,
116
+ "perspective": "solution-architect",
117
+ "severity": "major",
118
+ "category": "paginated-list-stories",
119
+ "universal": false,
120
+ "applicabilityQuestion": "Does this story return a paginated list? (Does it involve listing, searching, or paginating through collections?)",
121
+ "question": "Does the story specify cursor field and encoding (e.g. opaque base64 of (createdAt, id))?",
122
+ "failDescription": "Cursor field and encoding are not specified for paginated list",
123
+ "failSuggestion": "Specify cursor encoding: e.g. 'opaque base64 of (createdAt, id)' for cursor-based pagination"
124
+ },
125
+ {
126
+ "id": "sa-story-11",
127
+ "tier": 1,
128
+ "perspective": "solution-architect",
129
+ "severity": "major",
130
+ "category": "paginated-list-stories",
131
+ "universal": false,
132
+ "applicabilityQuestion": "Does this story return a paginated list?",
133
+ "question": "Are default and maximum page size stated?",
134
+ "failDescription": "Default and maximum page size are not stated",
135
+ "failSuggestion": "State pagination limits: e.g. 'default: 20, max: 100'"
136
+ },
137
+ {
138
+ "id": "sa-story-12",
139
+ "tier": 1,
140
+ "perspective": "solution-architect",
141
+ "severity": "minor",
142
+ "category": "paginated-list-stories",
143
+ "universal": false,
144
+ "applicabilityQuestion": "Does this story return a paginated list?",
145
+ "question": "Are stable sort column(s) defined to prevent row skips on insert between pages?",
146
+ "failDescription": "Stable sort columns are not defined — pagination may skip or duplicate rows",
147
+ "failSuggestion": "Define stable sort: e.g. 'ORDER BY createdAt DESC, id DESC' to ensure deterministic pagination"
148
+ },
149
+ {
150
+ "id": "sa-story-13",
151
+ "tier": 1,
152
+ "perspective": "solution-architect",
153
+ "severity": "minor",
154
+ "category": "paginated-list-stories",
155
+ "universal": false,
156
+ "applicabilityQuestion": "Does this story return a paginated list?",
157
+ "question": "Is the invalid/tampered cursor error specified (e.g. 422 { error: 'INVALID_CURSOR' })?",
158
+ "failDescription": "Invalid cursor error response is not specified",
159
+ "failSuggestion": "Specify invalid cursor response: 422 { error: 'INVALID_CURSOR' }"
160
+ },
161
+ {
162
+ "id": "sa-story-14",
163
+ "tier": 1,
164
+ "perspective": "solution-architect",
165
+ "severity": "minor",
166
+ "category": "paginated-list-stories",
167
+ "universal": false,
168
+ "applicabilityQuestion": "Does this story return a paginated list?",
169
+ "question": "Is the empty result shape specified (e.g. { data: [], nextCursor: null })?",
170
+ "failDescription": "Empty result shape is not specified",
171
+ "failSuggestion": "Specify empty result shape: { data: [], nextCursor: null }"
172
+ },
173
+ {
174
+ "id": "sa-story-15",
175
+ "tier": 1,
176
+ "perspective": "solution-architect",
177
+ "severity": "major",
178
+ "category": "acceptance-criteria-testability",
179
+ "universal": true,
180
+ "question": "Does each acceptance criterion define exactly one observable, deterministic outcome?",
181
+ "failDescription": "One or more acceptance criteria define multiple outcomes or are non-deterministic",
182
+ "failSuggestion": "Split compound ACs into single-outcome criteria: each AC should have exactly one testable, deterministic result"
183
+ },
184
+ {
185
+ "id": "sa-story-16",
186
+ "tier": 1,
187
+ "perspective": "solution-architect",
188
+ "severity": "major",
189
+ "category": "acceptance-criteria-testability",
190
+ "universal": false,
191
+ "applicabilityQuestion": "Does this story define error scenarios for API endpoints?",
192
+ "question": "Do error ACs include status code AND error body shape (not just 'returns error')?",
193
+ "failDescription": "Error ACs are vague — missing status code or error body shape",
194
+ "failSuggestion": "Specify error ACs with status code and body shape: e.g. '422 { error: \"INVALID_EMAIL\", field: \"email\" }'"
195
+ },
196
+ {
197
+ "id": "sa-story-17",
198
+ "tier": 1,
199
+ "perspective": "solution-architect",
200
+ "severity": "minor",
201
+ "category": "acceptance-criteria-testability",
202
+ "universal": true,
203
+ "question": "Are edge cases covered (invalid IDs -> 404/422, empty datasets -> 200 with empty array, concurrent writes -> conflict or idempotent result)?",
204
+ "failDescription": "Edge cases are not covered in acceptance criteria",
205
+ "failSuggestion": "Add edge case ACs: invalid IDs (404/422), empty datasets (200 []), concurrent writes (409 or idempotent)"
206
+ },
207
+ {
208
+ "id": "sa-story-18",
209
+ "tier": 1,
210
+ "perspective": "solution-architect",
211
+ "severity": "minor",
212
+ "category": "scope-dependencies",
213
+ "universal": true,
214
+ "question": "Is the story feasibly implementable (not requiring months of work)?",
215
+ "failDescription": "Story scope appears too large for feasible implementation",
216
+ "failSuggestion": "Reduce story scope to a single cohesive capability — split broader work into multiple focused stories"
217
+ },
218
+ {
219
+ "id": "sa-story-19",
220
+ "tier": 1,
221
+ "perspective": "solution-architect",
222
+ "severity": "minor",
223
+ "category": "scope-dependencies",
224
+ "universal": true,
225
+ "question": "Do dependencies reference specific story IDs and what contract they provide?",
226
+ "failDescription": "Dependencies do not reference specific story IDs or contracts",
227
+ "failSuggestion": "Reference specific story IDs in dependencies and state what contract each provides"
228
+ }
229
+ ]
230
+ }
@@ -0,0 +1,210 @@
1
+ {
2
+ "perspective": "test-architect",
3
+ "scope": "story",
4
+ "checks": [
5
+ {
6
+ "id": "ta-story-01",
7
+ "tier": 1,
8
+ "perspective": "test-architect",
9
+ "severity": "critical",
10
+ "category": "acceptance-criteria-quality",
11
+ "universal": false,
12
+ "applicabilityQuestion": "Does this story define acceptance criteria that require test architecture review?",
13
+ "question": "Is each acceptance criterion testable and measurable with deterministic, automatable assertions?",
14
+ "failDescription": "Acceptance criteria lack deterministic, automatable assertions — test architect cannot design reliable test suites",
15
+ "failSuggestion": "Rewrite each AC with automatable assertions: exact HTTP codes, specific UI element states, precise database record changes"
16
+ },
17
+ {
18
+ "id": "ta-story-02",
19
+ "tier": 1,
20
+ "perspective": "test-architect",
21
+ "severity": "critical",
22
+ "category": "acceptance-criteria-quality",
23
+ "universal": false,
24
+ "applicabilityQuestion": "Does this story involve functionality with multiple execution paths?",
25
+ "question": "Do criteria cover happy path, edge cases, and error scenarios with enough detail for comprehensive test coverage?",
26
+ "failDescription": "Criteria do not cover sufficient paths for comprehensive test coverage design",
27
+ "failSuggestion": "Add ACs for each path: happy path (normal flow), edge cases (boundary values, concurrent access), error scenarios (validation, timeout, permission)"
28
+ },
29
+ {
30
+ "id": "ta-story-03",
31
+ "tier": 1,
32
+ "perspective": "test-architect",
33
+ "severity": "critical",
34
+ "category": "acceptance-criteria-quality",
35
+ "universal": false,
36
+ "applicabilityQuestion": "Does this story have multiple acceptance criteria that could overlap?",
37
+ "question": "Are acceptance criteria independent and non-overlapping — can each be mapped to a distinct test suite?",
38
+ "failDescription": "Acceptance criteria overlap — cannot map to distinct, non-redundant test suites",
39
+ "failSuggestion": "Refactor ACs so each maps to one test suite: separate functional, integration, and non-functional criteria"
40
+ },
41
+ {
42
+ "id": "ta-story-04",
43
+ "tier": 1,
44
+ "perspective": "test-architect",
45
+ "severity": "critical",
46
+ "category": "acceptance-criteria-quality",
47
+ "universal": false,
48
+ "applicabilityQuestion": "Does this story have test architecture requirements (test strategy, framework, or infrastructure)?",
49
+ "question": "Are test architecture requirements explicitly stated — test framework, test infrastructure, and test strategy decisions?",
50
+ "failDescription": "Test architecture requirements are not explicitly stated",
51
+ "failSuggestion": "State test architecture needs: test framework choice, required test infrastructure (containers, mocks, fixtures), and test strategy (pyramid, diamond)"
52
+ },
53
+ {
54
+ "id": "ta-story-05",
55
+ "tier": 1,
56
+ "perspective": "test-architect",
57
+ "severity": "major",
58
+ "category": "implementation-clarity",
59
+ "universal": false,
60
+ "applicabilityQuestion": "Does this story require test architecture design decisions?",
61
+ "question": "Does the story provide enough detail for test architecture design — component boundaries, integration points, and mock requirements?",
62
+ "failDescription": "Insufficient detail for test architecture design — component boundaries or integration points are unclear",
63
+ "failSuggestion": "Add test architecture details: component boundaries for unit test isolation, integration points requiring test doubles, and external service mock requirements"
64
+ },
65
+ {
66
+ "id": "ta-story-06",
67
+ "tier": 1,
68
+ "perspective": "test-architect",
69
+ "severity": "major",
70
+ "category": "implementation-clarity",
71
+ "universal": false,
72
+ "applicabilityQuestion": "Does this story have technical constraints affecting test design?",
73
+ "question": "Are technical constraints and assumptions explicit — performance baselines, concurrency requirements, and infrastructure dependencies?",
74
+ "failDescription": "Technical constraints are not explicit — cannot design performance or load tests",
75
+ "failSuggestion": "State technical constraints: response time baselines, concurrent user targets, infrastructure dependencies, and resource limits"
76
+ },
77
+ {
78
+ "id": "ta-story-07",
79
+ "tier": 1,
80
+ "perspective": "test-architect",
81
+ "severity": "major",
82
+ "category": "implementation-clarity",
83
+ "universal": false,
84
+ "applicabilityQuestion": "Does this story involve test patterns or approaches that need architectural guidance?",
85
+ "question": "Are test architecture patterns and approaches specified — test pyramid levels, contract testing, snapshot testing, or property-based testing?",
86
+ "failDescription": "Test architecture patterns are not specified — unclear which testing approaches to use",
87
+ "failSuggestion": "Specify test patterns: test pyramid level allocation, contract testing for APIs, snapshot testing for UI, property-based testing for data transformations"
88
+ },
89
+ {
90
+ "id": "ta-story-08",
91
+ "tier": 1,
92
+ "perspective": "test-architect",
93
+ "severity": "major",
94
+ "category": "testability",
95
+ "universal": false,
96
+ "applicabilityQuestion": "Does this story have functionality testable at multiple levels?",
97
+ "question": "Can the story be tested at multiple levels with clear test boundaries — unit (isolated logic), integration (component interaction), e2e (user workflow)?",
98
+ "failDescription": "Test boundaries between unit, integration, and e2e levels are unclear",
99
+ "failSuggestion": "Define test boundaries: unit tests for pure business logic, integration tests for DB/API interactions, e2e tests for complete user workflows"
100
+ },
101
+ {
102
+ "id": "ta-story-09",
103
+ "tier": 1,
104
+ "perspective": "test-architect",
105
+ "severity": "major",
106
+ "category": "testability",
107
+ "universal": false,
108
+ "applicabilityQuestion": "Does this story require test data management?",
109
+ "question": "Are test data requirements clear — fixture design, factory patterns, seed data, and data isolation between test runs?",
110
+ "failDescription": "Test data requirements are unclear — no fixture design, factory patterns, or data isolation strategy",
111
+ "failSuggestion": "Define test data strategy: fixture/factory patterns, seed data scripts, test data isolation (per-test DB, transactions), and cleanup procedures"
112
+ },
113
+ {
114
+ "id": "ta-story-10",
115
+ "tier": 1,
116
+ "perspective": "test-architect",
117
+ "severity": "major",
118
+ "category": "testability",
119
+ "universal": false,
120
+ "applicabilityQuestion": "Does this story produce outcomes that need test verification?",
121
+ "question": "Are expected outcomes precisely defined — deterministic assertions, tolerance ranges for async operations, and observable state changes?",
122
+ "failDescription": "Expected outcomes are not precisely defined — cannot write deterministic test assertions",
123
+ "failSuggestion": "Define precise outcomes: deterministic assertions (exact values), tolerance ranges (async timing), observable state changes (DB records, events, UI states)"
124
+ },
125
+ {
126
+ "id": "ta-story-11",
127
+ "tier": 1,
128
+ "perspective": "test-architect",
129
+ "severity": "minor",
130
+ "category": "scope-dependencies",
131
+ "universal": false,
132
+ "applicabilityQuestion": "Does this story involve test architecture work that could span multiple days?",
133
+ "question": "Is the story appropriately scoped — test architecture effort focused on a single cohesive capability including test design, infrastructure, and implementation?",
134
+ "failDescription": "Story may be too broad — test architecture effort spans too many concerns",
135
+ "failSuggestion": "Split large stories: separate test infrastructure setup, test framework configuration, and test implementation into individual stories"
136
+ },
137
+ {
138
+ "id": "ta-story-12",
139
+ "tier": 1,
140
+ "perspective": "test-architect",
141
+ "severity": "minor",
142
+ "category": "scope-dependencies",
143
+ "universal": false,
144
+ "applicabilityQuestion": "Does this story depend on test infrastructure, frameworks, or other stories?",
145
+ "question": "Are dependencies on test infrastructure, CI/CD pipelines, or other stories explicitly identified?",
146
+ "failDescription": "Dependencies on test infrastructure or CI/CD pipelines are not explicitly identified",
147
+ "failSuggestion": "List all dependencies: test framework versions, CI/CD pipeline requirements, prerequisite test infrastructure, and external service test environments"
148
+ },
149
+ {
150
+ "id": "ta-story-13",
151
+ "tier": 1,
152
+ "perspective": "test-architect",
153
+ "severity": "minor",
154
+ "category": "scope-dependencies",
155
+ "universal": false,
156
+ "applicabilityQuestion": "Does this story deliver test architecture incrementally?",
157
+ "question": "Is the story independent enough to be delivered incrementally without breaking existing test suites?",
158
+ "failDescription": "Story may not be independently deliverable — risk of breaking existing test suites",
159
+ "failSuggestion": "Ensure backward compatibility: verify existing test suites still pass, define migration plan for test framework changes"
160
+ },
161
+ {
162
+ "id": "ta-story-14",
163
+ "tier": 1,
164
+ "perspective": "test-architect",
165
+ "severity": "minor",
166
+ "category": "best-practices",
167
+ "universal": false,
168
+ "applicabilityQuestion": "Does this story involve test architecture implementation?",
169
+ "question": "Does the story follow test architecture best practices — test isolation, deterministic tests, fast feedback loops, and maintainable test code?",
170
+ "failDescription": "Story does not address test architecture best practices",
171
+ "failSuggestion": "Address best practices: test isolation (no shared state), deterministic tests (no flaky assertions), fast feedback (parallel execution), maintainable code (page objects, builders)"
172
+ },
173
+ {
174
+ "id": "ta-story-15",
175
+ "tier": 1,
176
+ "perspective": "test-architect",
177
+ "severity": "minor",
178
+ "category": "best-practices",
179
+ "universal": false,
180
+ "applicabilityQuestion": "Does this story have test approaches that could lead to anti-patterns?",
181
+ "question": "Does the story avoid test architecture anti-patterns — no ice-cream cone testing, no shared mutable test state, no sleep-based waits?",
182
+ "failDescription": "Story may contain test architecture anti-patterns",
183
+ "failSuggestion": "Check for anti-patterns: ice-cream cone (too many e2e, too few unit), shared mutable state (use fixtures), sleep-based waits (use polling/events)"
184
+ },
185
+ {
186
+ "id": "ta-story-16",
187
+ "tier": 1,
188
+ "perspective": "test-architect",
189
+ "severity": "major",
190
+ "category": "acceptance-criteria-quality",
191
+ "universal": false,
192
+ "applicabilityQuestion": "Does this story use vague language in its acceptance criteria?",
193
+ "question": "Do all ACs avoid vague phrases ('handle gracefully', 'validate properly', 'appropriate response') without specifying concrete outcomes?",
194
+ "failDescription": "ACs use vague language without specifying concrete, automatable test outcomes",
195
+ "failSuggestion": "Replace vague phrases with automatable outcomes: instead of 'handle errors gracefully', specify 'return { error: \"INVALID_INPUT\", code: 422 }'"
196
+ },
197
+ {
198
+ "id": "ta-story-17",
199
+ "tier": 1,
200
+ "perspective": "test-architect",
201
+ "severity": "major",
202
+ "category": "testability",
203
+ "universal": false,
204
+ "applicabilityQuestion": "Does this story have logic paths that need testing?",
205
+ "question": "Does at least one AC explicitly list concrete test scenarios (named test cases, boundary values, or error paths)?",
206
+ "failDescription": "Story lacks a test-boundary AC — no AC names the specific scenarios a developer must test",
207
+ "failSuggestion": "Add one AC: 'Developer tests must cover: (1) happy path, (2) missing required field, (3) domain-specific error, (4) authentication failure, (5) authorization failure'"
208
+ }
209
+ ]
210
+ }