raise-cli 2.2.1__py3-none-any.whl

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 (264) hide show
  1. raise_cli/__init__.py +38 -0
  2. raise_cli/__main__.py +30 -0
  3. raise_cli/adapters/__init__.py +91 -0
  4. raise_cli/adapters/declarative/__init__.py +26 -0
  5. raise_cli/adapters/declarative/adapter.py +267 -0
  6. raise_cli/adapters/declarative/discovery.py +94 -0
  7. raise_cli/adapters/declarative/expressions.py +150 -0
  8. raise_cli/adapters/declarative/reference/__init__.py +1 -0
  9. raise_cli/adapters/declarative/reference/github.yaml +143 -0
  10. raise_cli/adapters/declarative/schema.py +98 -0
  11. raise_cli/adapters/filesystem.py +299 -0
  12. raise_cli/adapters/mcp_bridge.py +10 -0
  13. raise_cli/adapters/mcp_confluence.py +246 -0
  14. raise_cli/adapters/mcp_jira.py +405 -0
  15. raise_cli/adapters/models.py +205 -0
  16. raise_cli/adapters/protocols.py +180 -0
  17. raise_cli/adapters/registry.py +90 -0
  18. raise_cli/adapters/sync.py +149 -0
  19. raise_cli/agents/__init__.py +14 -0
  20. raise_cli/agents/antigravity.yaml +8 -0
  21. raise_cli/agents/claude.yaml +8 -0
  22. raise_cli/agents/copilot.yaml +8 -0
  23. raise_cli/agents/copilot_plugin.py +124 -0
  24. raise_cli/agents/cursor.yaml +7 -0
  25. raise_cli/agents/roo.yaml +8 -0
  26. raise_cli/agents/windsurf.yaml +8 -0
  27. raise_cli/artifacts/__init__.py +30 -0
  28. raise_cli/artifacts/models.py +43 -0
  29. raise_cli/artifacts/reader.py +55 -0
  30. raise_cli/artifacts/renderer.py +104 -0
  31. raise_cli/artifacts/story_design.py +69 -0
  32. raise_cli/artifacts/writer.py +45 -0
  33. raise_cli/backlog/__init__.py +1 -0
  34. raise_cli/backlog/sync.py +115 -0
  35. raise_cli/cli/__init__.py +3 -0
  36. raise_cli/cli/commands/__init__.py +3 -0
  37. raise_cli/cli/commands/_resolve.py +153 -0
  38. raise_cli/cli/commands/adapters.py +362 -0
  39. raise_cli/cli/commands/artifact.py +137 -0
  40. raise_cli/cli/commands/backlog.py +333 -0
  41. raise_cli/cli/commands/base.py +31 -0
  42. raise_cli/cli/commands/discover.py +551 -0
  43. raise_cli/cli/commands/docs.py +130 -0
  44. raise_cli/cli/commands/doctor.py +177 -0
  45. raise_cli/cli/commands/gate.py +223 -0
  46. raise_cli/cli/commands/graph.py +1086 -0
  47. raise_cli/cli/commands/info.py +81 -0
  48. raise_cli/cli/commands/init.py +746 -0
  49. raise_cli/cli/commands/journal.py +167 -0
  50. raise_cli/cli/commands/mcp.py +524 -0
  51. raise_cli/cli/commands/memory.py +467 -0
  52. raise_cli/cli/commands/pattern.py +348 -0
  53. raise_cli/cli/commands/profile.py +59 -0
  54. raise_cli/cli/commands/publish.py +80 -0
  55. raise_cli/cli/commands/release.py +338 -0
  56. raise_cli/cli/commands/session.py +528 -0
  57. raise_cli/cli/commands/signal.py +410 -0
  58. raise_cli/cli/commands/skill.py +350 -0
  59. raise_cli/cli/commands/skill_set.py +145 -0
  60. raise_cli/cli/error_handler.py +158 -0
  61. raise_cli/cli/main.py +163 -0
  62. raise_cli/compat.py +66 -0
  63. raise_cli/config/__init__.py +41 -0
  64. raise_cli/config/agent_plugin.py +105 -0
  65. raise_cli/config/agent_registry.py +233 -0
  66. raise_cli/config/agents.py +120 -0
  67. raise_cli/config/ide.py +32 -0
  68. raise_cli/config/paths.py +379 -0
  69. raise_cli/config/settings.py +180 -0
  70. raise_cli/context/__init__.py +42 -0
  71. raise_cli/context/analyzers/__init__.py +16 -0
  72. raise_cli/context/analyzers/models.py +36 -0
  73. raise_cli/context/analyzers/protocol.py +43 -0
  74. raise_cli/context/analyzers/python.py +292 -0
  75. raise_cli/context/builder.py +1569 -0
  76. raise_cli/context/diff.py +213 -0
  77. raise_cli/context/extractors/__init__.py +13 -0
  78. raise_cli/context/extractors/skills.py +121 -0
  79. raise_cli/core/__init__.py +37 -0
  80. raise_cli/core/files.py +66 -0
  81. raise_cli/core/text.py +174 -0
  82. raise_cli/core/tools.py +441 -0
  83. raise_cli/discovery/__init__.py +50 -0
  84. raise_cli/discovery/analyzer.py +691 -0
  85. raise_cli/discovery/drift.py +355 -0
  86. raise_cli/discovery/scanner.py +1687 -0
  87. raise_cli/doctor/__init__.py +4 -0
  88. raise_cli/doctor/checks/__init__.py +1 -0
  89. raise_cli/doctor/checks/environment.py +110 -0
  90. raise_cli/doctor/checks/project.py +238 -0
  91. raise_cli/doctor/fix.py +80 -0
  92. raise_cli/doctor/models.py +56 -0
  93. raise_cli/doctor/protocol.py +43 -0
  94. raise_cli/doctor/registry.py +100 -0
  95. raise_cli/doctor/report.py +141 -0
  96. raise_cli/doctor/runner.py +95 -0
  97. raise_cli/engines/__init__.py +3 -0
  98. raise_cli/exceptions.py +215 -0
  99. raise_cli/gates/__init__.py +19 -0
  100. raise_cli/gates/builtin/__init__.py +1 -0
  101. raise_cli/gates/builtin/coverage.py +52 -0
  102. raise_cli/gates/builtin/lint.py +48 -0
  103. raise_cli/gates/builtin/tests.py +48 -0
  104. raise_cli/gates/builtin/types.py +48 -0
  105. raise_cli/gates/models.py +40 -0
  106. raise_cli/gates/protocol.py +41 -0
  107. raise_cli/gates/registry.py +141 -0
  108. raise_cli/governance/__init__.py +11 -0
  109. raise_cli/governance/extractor.py +412 -0
  110. raise_cli/governance/models.py +134 -0
  111. raise_cli/governance/parsers/__init__.py +35 -0
  112. raise_cli/governance/parsers/_convert.py +38 -0
  113. raise_cli/governance/parsers/adr.py +274 -0
  114. raise_cli/governance/parsers/backlog.py +356 -0
  115. raise_cli/governance/parsers/constitution.py +119 -0
  116. raise_cli/governance/parsers/epic.py +323 -0
  117. raise_cli/governance/parsers/glossary.py +316 -0
  118. raise_cli/governance/parsers/guardrails.py +345 -0
  119. raise_cli/governance/parsers/prd.py +112 -0
  120. raise_cli/governance/parsers/roadmap.py +118 -0
  121. raise_cli/governance/parsers/vision.py +116 -0
  122. raise_cli/graph/__init__.py +1 -0
  123. raise_cli/graph/backends/__init__.py +57 -0
  124. raise_cli/graph/backends/api.py +137 -0
  125. raise_cli/graph/backends/dual.py +139 -0
  126. raise_cli/graph/backends/pending.py +84 -0
  127. raise_cli/handlers/__init__.py +3 -0
  128. raise_cli/hooks/__init__.py +54 -0
  129. raise_cli/hooks/builtin/__init__.py +1 -0
  130. raise_cli/hooks/builtin/backlog.py +216 -0
  131. raise_cli/hooks/builtin/gate_bridge.py +83 -0
  132. raise_cli/hooks/builtin/jira_sync.py +127 -0
  133. raise_cli/hooks/builtin/memory.py +117 -0
  134. raise_cli/hooks/builtin/telemetry.py +72 -0
  135. raise_cli/hooks/emitter.py +184 -0
  136. raise_cli/hooks/events.py +262 -0
  137. raise_cli/hooks/protocol.py +38 -0
  138. raise_cli/hooks/registry.py +117 -0
  139. raise_cli/mcp/__init__.py +33 -0
  140. raise_cli/mcp/bridge.py +218 -0
  141. raise_cli/mcp/models.py +43 -0
  142. raise_cli/mcp/registry.py +77 -0
  143. raise_cli/mcp/schema.py +41 -0
  144. raise_cli/memory/__init__.py +58 -0
  145. raise_cli/memory/loader.py +247 -0
  146. raise_cli/memory/migration.py +241 -0
  147. raise_cli/memory/models.py +169 -0
  148. raise_cli/memory/writer.py +598 -0
  149. raise_cli/onboarding/__init__.py +103 -0
  150. raise_cli/onboarding/bootstrap.py +324 -0
  151. raise_cli/onboarding/claudemd.py +17 -0
  152. raise_cli/onboarding/conventions.py +742 -0
  153. raise_cli/onboarding/detection.py +374 -0
  154. raise_cli/onboarding/governance.py +443 -0
  155. raise_cli/onboarding/instructions.py +672 -0
  156. raise_cli/onboarding/manifest.py +201 -0
  157. raise_cli/onboarding/memory_md.py +399 -0
  158. raise_cli/onboarding/migration.py +207 -0
  159. raise_cli/onboarding/profile.py +624 -0
  160. raise_cli/onboarding/skill_conflict.py +100 -0
  161. raise_cli/onboarding/skill_manifest.py +176 -0
  162. raise_cli/onboarding/skills.py +437 -0
  163. raise_cli/onboarding/workflows.py +101 -0
  164. raise_cli/output/__init__.py +28 -0
  165. raise_cli/output/console.py +394 -0
  166. raise_cli/output/formatters/__init__.py +9 -0
  167. raise_cli/output/formatters/adapters.py +135 -0
  168. raise_cli/output/formatters/discover.py +439 -0
  169. raise_cli/output/formatters/skill.py +298 -0
  170. raise_cli/publish/__init__.py +3 -0
  171. raise_cli/publish/changelog.py +80 -0
  172. raise_cli/publish/check.py +179 -0
  173. raise_cli/publish/version.py +172 -0
  174. raise_cli/rai_base/__init__.py +22 -0
  175. raise_cli/rai_base/framework/__init__.py +7 -0
  176. raise_cli/rai_base/framework/methodology.yaml +233 -0
  177. raise_cli/rai_base/governance/__init__.py +1 -0
  178. raise_cli/rai_base/governance/architecture/__init__.py +1 -0
  179. raise_cli/rai_base/governance/architecture/domain-model.md +20 -0
  180. raise_cli/rai_base/governance/architecture/system-context.md +34 -0
  181. raise_cli/rai_base/governance/architecture/system-design.md +24 -0
  182. raise_cli/rai_base/governance/backlog.md +8 -0
  183. raise_cli/rai_base/governance/guardrails.md +17 -0
  184. raise_cli/rai_base/governance/prd.md +25 -0
  185. raise_cli/rai_base/governance/vision.md +16 -0
  186. raise_cli/rai_base/identity/__init__.py +8 -0
  187. raise_cli/rai_base/identity/core.md +119 -0
  188. raise_cli/rai_base/identity/perspective.md +119 -0
  189. raise_cli/rai_base/memory/__init__.py +7 -0
  190. raise_cli/rai_base/memory/patterns-base.jsonl +55 -0
  191. raise_cli/schemas/__init__.py +3 -0
  192. raise_cli/schemas/journal.py +49 -0
  193. raise_cli/schemas/session_state.py +117 -0
  194. raise_cli/session/__init__.py +5 -0
  195. raise_cli/session/bundle.py +820 -0
  196. raise_cli/session/close.py +268 -0
  197. raise_cli/session/journal.py +119 -0
  198. raise_cli/session/resolver.py +126 -0
  199. raise_cli/session/state.py +187 -0
  200. raise_cli/skills/__init__.py +44 -0
  201. raise_cli/skills/locator.py +141 -0
  202. raise_cli/skills/name_checker.py +199 -0
  203. raise_cli/skills/parser.py +145 -0
  204. raise_cli/skills/scaffold.py +212 -0
  205. raise_cli/skills/schema.py +132 -0
  206. raise_cli/skills/skillsets.py +195 -0
  207. raise_cli/skills/validator.py +197 -0
  208. raise_cli/skills_base/__init__.py +80 -0
  209. raise_cli/skills_base/contract-template.md +60 -0
  210. raise_cli/skills_base/preamble.md +37 -0
  211. raise_cli/skills_base/rai-architecture-review/SKILL.md +137 -0
  212. raise_cli/skills_base/rai-debug/SKILL.md +171 -0
  213. raise_cli/skills_base/rai-discover/SKILL.md +167 -0
  214. raise_cli/skills_base/rai-discover-document/SKILL.md +128 -0
  215. raise_cli/skills_base/rai-discover-scan/SKILL.md +147 -0
  216. raise_cli/skills_base/rai-discover-start/SKILL.md +145 -0
  217. raise_cli/skills_base/rai-discover-validate/SKILL.md +142 -0
  218. raise_cli/skills_base/rai-docs-update/SKILL.md +142 -0
  219. raise_cli/skills_base/rai-doctor/SKILL.md +120 -0
  220. raise_cli/skills_base/rai-epic-close/SKILL.md +165 -0
  221. raise_cli/skills_base/rai-epic-close/templates/retrospective.md +68 -0
  222. raise_cli/skills_base/rai-epic-design/SKILL.md +146 -0
  223. raise_cli/skills_base/rai-epic-design/templates/design.md +24 -0
  224. raise_cli/skills_base/rai-epic-design/templates/scope.md +76 -0
  225. raise_cli/skills_base/rai-epic-plan/SKILL.md +153 -0
  226. raise_cli/skills_base/rai-epic-plan/_references/sequencing-strategies.md +67 -0
  227. raise_cli/skills_base/rai-epic-plan/templates/plan-section.md +49 -0
  228. raise_cli/skills_base/rai-epic-run/SKILL.md +208 -0
  229. raise_cli/skills_base/rai-epic-start/SKILL.md +136 -0
  230. raise_cli/skills_base/rai-epic-start/templates/brief.md +34 -0
  231. raise_cli/skills_base/rai-mcp-add/SKILL.md +176 -0
  232. raise_cli/skills_base/rai-mcp-remove/SKILL.md +120 -0
  233. raise_cli/skills_base/rai-mcp-status/SKILL.md +147 -0
  234. raise_cli/skills_base/rai-problem-shape/SKILL.md +138 -0
  235. raise_cli/skills_base/rai-project-create/SKILL.md +144 -0
  236. raise_cli/skills_base/rai-project-onboard/SKILL.md +162 -0
  237. raise_cli/skills_base/rai-quality-review/SKILL.md +189 -0
  238. raise_cli/skills_base/rai-research/SKILL.md +143 -0
  239. raise_cli/skills_base/rai-research/references/research-prompt-template.md +317 -0
  240. raise_cli/skills_base/rai-session-close/SKILL.md +176 -0
  241. raise_cli/skills_base/rai-session-start/SKILL.md +110 -0
  242. raise_cli/skills_base/rai-story-close/SKILL.md +198 -0
  243. raise_cli/skills_base/rai-story-design/SKILL.md +203 -0
  244. raise_cli/skills_base/rai-story-design/references/tech-design-story-v2.md +293 -0
  245. raise_cli/skills_base/rai-story-implement/SKILL.md +115 -0
  246. raise_cli/skills_base/rai-story-plan/SKILL.md +135 -0
  247. raise_cli/skills_base/rai-story-review/SKILL.md +178 -0
  248. raise_cli/skills_base/rai-story-run/SKILL.md +282 -0
  249. raise_cli/skills_base/rai-story-start/SKILL.md +166 -0
  250. raise_cli/skills_base/rai-story-start/templates/story.md +38 -0
  251. raise_cli/skills_base/rai-welcome/SKILL.md +134 -0
  252. raise_cli/telemetry/__init__.py +42 -0
  253. raise_cli/telemetry/schemas.py +285 -0
  254. raise_cli/telemetry/writer.py +217 -0
  255. raise_cli/tier/__init__.py +0 -0
  256. raise_cli/tier/context.py +134 -0
  257. raise_cli/viz/__init__.py +7 -0
  258. raise_cli/viz/generator.py +406 -0
  259. raise_cli-2.2.1.dist-info/METADATA +433 -0
  260. raise_cli-2.2.1.dist-info/RECORD +264 -0
  261. raise_cli-2.2.1.dist-info/WHEEL +4 -0
  262. raise_cli-2.2.1.dist-info/entry_points.txt +40 -0
  263. raise_cli-2.2.1.dist-info/licenses/LICENSE +190 -0
  264. raise_cli-2.2.1.dist-info/licenses/NOTICE +4 -0
@@ -0,0 +1,189 @@
1
+ ---
2
+ name: rai-quality-review
3
+ description: >
4
+ Critical code review with external auditor perspective. Catches what linters,
5
+ type checkers, and coverage gates miss: semantic bugs, type lies, test muda,
6
+ API design issues, and security concerns.
7
+
8
+ license: MIT
9
+
10
+ metadata:
11
+ raise.work_cycle: story
12
+ raise.frequency: on-demand
13
+ raise.prerequisites: story-implement
14
+ raise.version: "1.0.0"
15
+ raise.visibility: internal
16
+ ---
17
+
18
+ # Quality Review
19
+
20
+ ## Purpose
21
+
22
+ Act as an external auditor reviewing code that passed all automated gates. Find what the machines missed — semantic bugs account for 51% of all missed bugs in code review (ICSE, arxiv 2205.09428).
23
+
24
+ ## Mastery Levels (ShuHaRi)
25
+
26
+ - **Shu**: Apply all audit categories systematically, explain each finding
27
+ - **Ha**: Focus on highest-risk areas (type honesty, test muda), skip low-risk
28
+ - **Ri**: Pattern-match to known vulnerability classes, minimal ceremony
29
+
30
+ ## Context
31
+
32
+ | Condition | Action |
33
+ |-----------|--------|
34
+ | After `/rai-story-implement`, all gates pass | Run quality review |
35
+ | Before `/rai-story-review` | Catch issues before retrospective |
36
+ | Code feels "too clean" | Assumptions may be hiding — review |
37
+
38
+ **Inputs:** Story ID (to find changed files), passing gates (language-appropriate linters, type checkers, test runners).
39
+
40
+ ## Steps
41
+
42
+ ### Step 0: Detect Project Language
43
+
44
+ Determine the primary language and toolchain using this priority chain:
45
+
46
+ 1. **Check `.raise/manifest.yaml`** for explicit overrides (`project.test_command`, `project.lint_command`, `project.type_check_command`) — configuration over convention
47
+ 2. **Detect language** from `project.project_type` in manifest, or scan extensions of changed files (`git diff --name-only`)
48
+ 3. **Map language to defaults** using the table below
49
+
50
+ ```yaml
51
+ # .raise/manifest.yaml — example overrides
52
+ project:
53
+ test_command: "npm run test:ci" # overrides Test Runner column
54
+ lint_command: "biome check" # overrides Linter column
55
+ type_check_command: "tsc --noEmit" # overrides Type Checker column
56
+ ```
57
+
58
+ Manifest commands always win when present. The table is a **fallback**:
59
+
60
+ | Language | Extensions | Type Checker | Linter | Test Runner |
61
+ |----------|-----------|--------------|--------|-------------|
62
+ | Python | `.py`, `.pyi` | pyright/mypy | ruff | pytest |
63
+ | TypeScript | `.ts`, `.tsx` | tsc --noEmit | eslint | jest/vitest |
64
+ | JavaScript | `.js`, `.jsx` | — | eslint | jest/vitest |
65
+ | C# | `.cs` | dotnet build | dotnet format | xunit/nunit |
66
+ | Java | `.java` | javac | checkstyle | JUnit |
67
+ | Go | `.go` | go vet | golangci-lint | go test |
68
+ | PHP | `.php` | phpstan | php-cs-fixer | phpunit |
69
+ | Dart | `.dart` | dart analyze | dart fix | flutter test |
70
+
71
+ If mixed languages, review each language group separately using its section below.
72
+
73
+ ### Step 1: Identify Changed Files
74
+
75
+ ```bash
76
+ # Use the parent branch (epic or dev) as merge base — not a hardcoded branch name
77
+ git diff --name-only $(git merge-base HEAD <parent-branch>)..HEAD -- '<extensions>'
78
+ ```
79
+
80
+ Replace `<extensions>` with language-appropriate patterns from Step 0 (e.g., `'*.py' '*.pyi'` for Python, `'*.ts' '*.tsx'` for TypeScript).
81
+
82
+ Read every changed file. You cannot review code you haven't read.
83
+
84
+ ### Step 2: Semantic Correctness Audit
85
+
86
+ #### Universal Checks (all languages)
87
+
88
+ **Logic correctness:** Inverted conditionals (#1 semantic bug), off-by-one errors, wrong variable in expressions (copy-paste), unhandled edge cases (empty, null/None, zero-length).
89
+
90
+ #### Language-Specific Checks
91
+
92
+ **Python:**
93
+ - **Type honesty:** `type: ignore` comments (each is a potential lie), `cast()` honesty, annotations claiming more specific types than runtime provides
94
+ - **Error handling:** Overly broad `except Exception`, swallowed exceptions, missing `raise X from exc`
95
+ - **Idioms:** Mutable default arguments, late binding closures in loops
96
+
97
+ **TypeScript/JavaScript:**
98
+ - **Type honesty:** `as` type assertions (bypasses type checking), `any` types (defeats type safety), `@ts-ignore`/`@ts-expect-error` comments
99
+ - **Error handling:** Unhandled promise rejections, missing `.catch()`, overly broad `catch(e)` without type narrowing
100
+ - **Idioms:** `==` vs `===`, truthiness traps (`0`, `""`, `[]` are falsy), implicit `any` from untyped imports
101
+
102
+ **C#/.NET:**
103
+ - **Type honesty:** Null-forgiving operator `!` (suppresses null warnings), unchecked casts vs pattern matching, `dynamic` type usage
104
+ - **Error handling:** Empty `catch` blocks, catching `System.Exception` broadly, missing `using`/`await using` for `IDisposable`
105
+ - **Idioms:** `async void` methods (fire-and-forget), missing `ConfigureAwait`, LINQ deferred execution surprises
106
+
107
+ **PHP:**
108
+ - **Type honesty:** Missing type declarations, `@` error suppression operator, loose comparison (`==` vs `===`)
109
+ - **Error handling:** Silenced errors, missing null checks on database results
110
+ - **Idioms:** Uninitialized properties, reference parameter side effects
111
+
112
+ **Go:**
113
+ - **Type honesty:** Unchecked type assertions (use comma-ok pattern), interface satisfaction without tests
114
+ - **Error handling:** Ignored error returns (`_`), error wrapping without `%w`
115
+ - **Idioms:** Goroutine leaks, unbuffered channel deadlocks, deferred close on writable resources
116
+
117
+ **Dart/Flutter:**
118
+ - **Type honesty:** `as` casts without `is` checks, `dynamic` type usage, `!` null assertion operator
119
+ - **Error handling:** Uncaught `Future` errors, missing error handling in `StreamBuilder`
120
+ - **Idioms:** `setState` after dispose, missing `const` constructors, build method side effects
121
+
122
+ ### Step 3: Test Quality Audit
123
+
124
+ Apply these heuristics to every test file:
125
+
126
+ | # | Heuristic | Red Flag |
127
+ |---|-----------|----------|
128
+ | 1 | Mutation Survival | Test passes regardless of code behavior change |
129
+ | 2 | Refactoring Resilience | Test asserts on internals, not behavior |
130
+ | 3 | Behavior Specification | Name mirrors code structure, not behavior |
131
+ | 4 | Magic Literal | Assertion against hardcoded value from implementation |
132
+ | 5 | Mock Depth | Mock returns mock returns mock |
133
+ | 6 | Deletion | No unique bug coverage if test deleted |
134
+ | 7 | Spec Independence | Assertion requires reading source to understand |
135
+
136
+ Classify: **Muda** (waste, recommend deletion) / **Fragile** (breaks on refactor) / **Valuable** (leave as-is).
137
+
138
+ ### Step 4: API Surface & Security Audit
139
+
140
+ **API (language-adaptive):**
141
+
142
+ | Language | Visibility Mechanism | Leak Detection |
143
+ |----------|---------------------|----------------|
144
+ | Python | Lean `__all__`, `_`-prefixed internals | Internal symbols in public API |
145
+ | TypeScript | `export` discipline, barrel files | Re-exporting internals, `export *` |
146
+ | C# | `internal` vs `public`, `[assembly: InternalsVisibleTo]` | Public types that should be internal |
147
+ | Go | Capitalization (exported vs unexported) | Exported helpers that should be internal |
148
+ | PHP | `private`/`protected` vs `public` | Public methods that should be protected |
149
+ | Dart | `_`-prefixed private, `export` directives | Part-of files leaking implementation |
150
+
151
+ **Security (universal):** Entry point trust model, input validation at boundaries, dependency justification, no secret exposure in logs/errors.
152
+
153
+ ### Step 5: Present Findings
154
+
155
+ ```markdown
156
+ ## Quality Review: {story_id}
157
+
158
+ ### Critical (fix before merge)
159
+ ### Recommended (improve code quality)
160
+ ### Observations (no action needed)
161
+ ### Verdict
162
+ - [ ] PASS / PASS WITH RECOMMENDATIONS / FAIL
163
+ ```
164
+
165
+ Every finding: specific file:line, WHY it matters, concrete fix suggestion.
166
+
167
+ ## Output
168
+
169
+ | Item | Destination |
170
+ |------|-------------|
171
+ | Review findings | Presented inline, saved if requested |
172
+ | Verdict | PASS, PASS WITH RECOMMENDATIONS, or FAIL |
173
+ | Next | `/rai-story-review` |
174
+
175
+ ## Quality Checklist
176
+
177
+ - [ ] Project language detected (Step 0) before reviewing
178
+ - [ ] All changed files for detected language read before reviewing
179
+ - [ ] Every finding cites specific file:line
180
+ - [ ] Every finding explains WHY (not just WHAT)
181
+ - [ ] Style issues already caught by language-appropriate linters are excluded
182
+ - [ ] Language-specific checks applied from correct section
183
+ - [ ] "No issues found" is a valid outcome — do not invent findings
184
+
185
+ ## References
186
+
187
+ - Evidence: `work/research/quality-review/evidence-catalog.md`
188
+ - Complements: `/rai-architecture-review` (proportionality), `/rai-story-review` (retrospective)
189
+ - Research: ICSE semantic bugs (arxiv 2205.09428), Google Testing Blog, OWASP
@@ -0,0 +1,143 @@
1
+ ---
2
+ name: rai-research
3
+ description: >
4
+ Conduct epistemologically rigorous research to inform decisions.
5
+ Use before ADRs, when evaluating competing approaches, entering
6
+ unfamiliar domains, or resolving parking lot items. Produces
7
+ evidence catalogs with triangulated claims and actionable recommendations.
8
+
9
+ license: MIT
10
+
11
+ metadata:
12
+ raise.work_cycle: utility
13
+ raise.frequency: as-needed
14
+ raise.fase: "0"
15
+ raise.prerequisites: ""
16
+ raise.next: ""
17
+ raise.gate: ""
18
+ raise.adaptable: "true"
19
+ raise.version: "2.0.0"
20
+ raise.visibility: public
21
+
22
+ ---
23
+
24
+ # Research
25
+
26
+ ## Purpose
27
+
28
+ Conduct epistemologically rigorous research to inform decisions. Standing on the shoulders of giants, not reinventing wheels.
29
+
30
+ ## Mastery Levels (ShuHaRi)
31
+
32
+ - **Shu**: Follow all steps with full evidence catalog and research prompt template
33
+ - **Ha**: Scale depth to decision importance; adapt prompt template
34
+ - **Ri**: Create domain-specific research protocols and custom prompts
35
+
36
+ ## Context
37
+
38
+ **When to use:** Before ADRs, when evaluating competing approaches, entering unfamiliar domains, or resolving parking lot items.
39
+
40
+ **When to skip:** Decision is low-stakes and reversible, or prior research exists in `work/research/`.
41
+
42
+ **Inputs:** Clear research question(s), decision context, depth constraint (quick/standard/deep).
43
+
44
+ | Depth | Time | Sources | Use when |
45
+ |-------|------|---------|----------|
46
+ | Quick scan | 1-2h | 5-10 | Low-stakes, familiar domains |
47
+ | Standard | 4-8h | 15-30 | Most ADRs, technology evaluation |
48
+ | Deep dive | 2-5d | 50-100+ | Strategic decisions, unfamiliar domains |
49
+
50
+ ## Steps
51
+
52
+ ### Step 1: Frame the Question
53
+
54
+ Define: primary question, secondary questions, decision this informs, depth constraint.
55
+
56
+ **Epistemological principles:** Seek disconfirming evidence (falsifiability), require 3+ sources per claim (triangulation), primary > secondary > tertiary sources.
57
+
58
+ <verification>
59
+ Question is specific and falsifiable.
60
+ </verification>
61
+
62
+ <if-blocked>
63
+ Question too vague → decompose into sub-questions.
64
+ </if-blocked>
65
+
66
+ ### Step 2: Select Tool & Survey
67
+
68
+ **Tool selection:**
69
+
70
+ | Tool | Best for |
71
+ |------|----------|
72
+ | `ddgr "query"` | Quick scans, no API key needed |
73
+ | `llm -m perplexity "query"` | Deep research with citations |
74
+ | WebSearch | Reliable fallback |
75
+
76
+ Gather sources: academic papers, official docs, GitHub repos (stars/activity), engineering blogs, community discussions.
77
+
78
+ <verification>
79
+ 10+ sources collected (scaled to depth).
80
+ </verification>
81
+
82
+ ### Step 3: Build Evidence Catalog
83
+
84
+ Per source: type (primary/secondary/tertiary), evidence level, key finding, relevance.
85
+
86
+ | Evidence level | Criteria |
87
+ |---------------|----------|
88
+ | Very High | Peer-reviewed, production-proven at scale, >10k stars |
89
+ | High | Expert practitioners at established companies, >1k stars |
90
+ | Medium | Community-validated, emerging consensus, >100 stars |
91
+ | Low | Single source, unvalidated, <100 stars |
92
+
93
+ Save to `work/research/{topic}/sources/evidence-catalog.md`.
94
+
95
+ <verification>
96
+ Evidence catalog created with levels rated.
97
+ </verification>
98
+
99
+ ### Step 4: Triangulate & Synthesize
100
+
101
+ Per major claim: find 3+ independent confirmations, note consensus vs disagreement, assign confidence (HIGH/MEDIUM/LOW), acknowledge contrary evidence explicitly.
102
+
103
+ Extract patterns: convergence points, gaps, RaiSE-specific vs general findings.
104
+
105
+ <verification>
106
+ Major claims have 3+ sources. Contrary evidence documented.
107
+ </verification>
108
+
109
+ ### Step 5: Recommend & Link
110
+
111
+ Produce: recommendation with confidence level, trade-offs, implementation implications, risks.
112
+
113
+ Connect to governance: create/reference ADR if architectural, update backlog if actionable, update parking lot if deferred.
114
+
115
+ <verification>
116
+ Recommendation is actionable and traces to evidence.
117
+ </verification>
118
+
119
+ ## Output
120
+
121
+ | Item | Destination |
122
+ |------|-------------|
123
+ | Report | `work/research/{topic}/{topic}-report.md` |
124
+ | Evidence catalog | `work/research/{topic}/sources/evidence-catalog.md` |
125
+ | Navigation | `work/research/{topic}/README.md` |
126
+ | Next | ADR, backlog item, or parking lot update |
127
+
128
+ ## Quality Checklist
129
+
130
+ - [ ] Research question is specific and falsifiable
131
+ - [ ] 10+ sources consulted (scaled to depth)
132
+ - [ ] Evidence catalog created with levels rated
133
+ - [ ] Major claims triangulated (3+ independent sources)
134
+ - [ ] Confidence level explicitly stated on recommendation
135
+ - [ ] Contrary evidence acknowledged (not hidden)
136
+ - [ ] Governance linkage established (ADR, backlog, or parking lot)
137
+ - [ ] NEVER present single-source findings as consensus
138
+
139
+ ## References
140
+
141
+ - Research prompt template: `references/research-prompt-template.md`
142
+ - Existing research: `work/research/`
143
+ - Epistemology: falsifiability, triangulation, source hierarchy
@@ -0,0 +1,317 @@
1
+ ---
2
+ research_id: "[TOPIC]-[YYYYMMDD]"
3
+ primary_question: "[Specific, falsifiable question]"
4
+ decision_context: "[What this informs: ADR, feature, backlog]"
5
+ depth: "[quick-scan|standard|deep-dive]"
6
+ created: "[YYYY-MM-DD]"
7
+ version: "1.0"
8
+ template: "research-prompt-v1"
9
+ ---
10
+
11
+ # Research Prompt: [Topic]
12
+
13
+ > Template for structured AI research with epistemological rigor
14
+ > Based on evidence from 20 sources (meta-research 2026-01-31)
15
+
16
+ ---
17
+
18
+ ## Role Definition
19
+
20
+ You are a **Research Specialist** with expertise in **[domain]**. Your task is to conduct epistemologically rigorous research following scientific standards for evidence evaluation.
21
+
22
+ **Your responsibilities:**
23
+ - Search systematically across academic, official, and practitioner sources
24
+ - Evaluate evidence quality using RaiSE criteria
25
+ - Triangulate findings from 3+ independent sources per major claim
26
+ - Document contrary evidence and uncertainty explicitly
27
+ - Produce reproducible, auditable research outputs
28
+
29
+ ---
30
+
31
+ ## Research Question
32
+
33
+ **Primary**: [Main question to answer - must be specific and falsifiable]
34
+
35
+ **Secondary** (supporting questions):
36
+ 1. [Supporting question 1]
37
+ 2. [Supporting question 2]
38
+ 3. [Supporting question 3]
39
+
40
+ ---
41
+
42
+ ## Decision Context
43
+
44
+ **This research will inform**: [Specific decision, ADR, story design, architecture choice, etc.]
45
+
46
+ **Stakeholder**: [Who needs this information]
47
+
48
+ **Timeline**: [When decision will be made]
49
+
50
+ **Impact**: [Consequences of getting this wrong - why rigor matters]
51
+
52
+ ---
53
+
54
+ ## Instructions
55
+
56
+ ### Search Strategy
57
+
58
+ Execute searches across these source types:
59
+
60
+ 1. **Academic sources**
61
+ - Google Scholar: `[specific search terms]`
62
+ - arXiv: `[topic keywords]`
63
+ - Purpose: Peer-reviewed research, theoretical foundations
64
+
65
+ 2. **Official documentation**
66
+ - [Technology/framework] official docs
67
+ - Standards bodies (W3C, IETF, etc.)
68
+ - Purpose: Authoritative technical specifications
69
+
70
+ 3. **Production evidence**
71
+ - GitHub repositories (filter: >100 stars, active maintenance)
72
+ - Engineering blogs: FAANG, GitLab, Atlassian, established companies
73
+ - Purpose: Real-world validation, battle-tested patterns
74
+
75
+ 4. **Community validation**
76
+ - Reddit (r/[relevant]), Hacker News, Discord/Slack communities
77
+ - Conference talks, podcasts
78
+ - Purpose: Emerging consensus, practitioner wisdom
79
+
80
+ **Keywords to search**: [List 5-10 specific search terms]
81
+
82
+ **Sources to avoid**: [If any - e.g., outdated frameworks, deprecated APIs]
83
+
84
+ ---
85
+
86
+ ### Evidence Evaluation
87
+
88
+ For each source you find, assess and record:
89
+
90
+ - **Type**:
91
+ - Primary (original research, official docs, first-hand experience)
92
+ - Secondary (practitioner synthesis, curated guides, tutorials)
93
+ - Tertiary (aggregations, summaries, listicles)
94
+
95
+ - **Evidence Level** (use RaiSE engineering criteria):
96
+ - **Very High**: Peer-reviewed papers, official docs, OSS >10k stars with proven production use
97
+ - **High**: Expert practitioners at established companies, well-maintained projects >1k stars
98
+ - **Medium**: Community-validated resources, emerging projects >100 stars, engaged articles
99
+ - **Low**: Single sources, <100 stars, unvalidated claims, personal blogs without corroboration
100
+
101
+ - **Key Finding**: One-line takeaway from this source
102
+
103
+ - **Relevance**: How does this answer our research question?
104
+
105
+ - **Date**: Publication or last update date (recency matters for tech)
106
+
107
+ ---
108
+
109
+ ### Triangulation Requirements
110
+
111
+ **Minimum source counts** (scale to depth):
112
+ - Quick scan (1-2h): 5-10 sources
113
+ - Standard (4-8h): 15-30 sources
114
+ - Deep dive (2-5d): 50-100+ sources
115
+
116
+ **For major claims**:
117
+ - Require **3+ independent confirmations** from different sources
118
+ - If <3 sources: Lower confidence level or mark as "emerging/unconfirmed"
119
+
120
+ **Handling disagreement**:
121
+ - Document contrary evidence explicitly
122
+ - Describe the nature of disagreement (methodological, contextual, temporal)
123
+ - Don't ignore conflicts - they're valuable information
124
+
125
+ **Confidence calibration**:
126
+ - HIGH: 3+ Very High or High sources, convergent evidence, no significant contrary findings
127
+ - MEDIUM: 2-3 sources, some convergence, minor conflicts or gaps
128
+ - LOW: <2 sources, significant disagreement, or mostly Low evidence level
129
+
130
+ ---
131
+
132
+ ## Output Format
133
+
134
+ Produce the following artifacts in `work/research/[topic]/`:
135
+
136
+ ### 1. Evidence Catalog (`sources/evidence-catalog.md`)
137
+
138
+ For each source:
139
+
140
+ ```markdown
141
+ **Source**: [Title + Link]
142
+ - **Type**: Primary/Secondary/Tertiary
143
+ - **Evidence Level**: Very High/High/Medium/Low
144
+ - **Date**: [YYYY-MM-DD or YYYY]
145
+ - **Key Finding**: [One-line takeaway]
146
+ - **Relevance**: [How it answers the question]
147
+ ```
148
+
149
+ Include summary statistics:
150
+ - Total sources: [N]
151
+ - Evidence distribution: Very High (X%), High (Y%), Medium (Z%), Low (W%)
152
+ - Temporal coverage: [Date range]
153
+
154
+ ---
155
+
156
+ ### 2. Synthesis Document (`synthesis.md`)
157
+
158
+ #### Major Claims (Triangulated)
159
+
160
+ For each significant finding:
161
+
162
+ ```markdown
163
+ **Claim [N]**: [Statement of finding]
164
+
165
+ **Confidence**: HIGH/MEDIUM/LOW
166
+
167
+ **Evidence**:
168
+ 1. [Source A Title](URL) - [Specific finding]
169
+ 2. [Source B Title](URL) - [Specific finding]
170
+ 3. [Source C Title](URL) - [Specific finding]
171
+
172
+ **Disagreement**: [Any contrary evidence or "None found"]
173
+
174
+ **Implication**: [What this means for our decision]
175
+ ```
176
+
177
+ #### Patterns & Paradigm Shifts
178
+
179
+ Identify recurring themes across sources:
180
+ - What architectural patterns emerge?
181
+ - What trade-offs are commonly discussed?
182
+ - Any paradigm shifts in recent years?
183
+
184
+ #### Gaps & Unknowns
185
+
186
+ Document what you **couldn't** find:
187
+ - Unanswered sub-questions
188
+ - Areas with insufficient evidence
189
+ - Topics requiring deeper investigation
190
+
191
+ ---
192
+
193
+ ### 3. Recommendation (`recommendation.md`)
194
+
195
+ ```markdown
196
+ ## Recommendation
197
+
198
+ **Decision**: [What we should do - specific and actionable]
199
+
200
+ **Confidence**: HIGH/MEDIUM/LOW
201
+
202
+ **Rationale**: [Why, based on triangulated evidence - reference specific sources]
203
+
204
+ **Trade-offs**: [What we're accepting/sacrificing with this choice]
205
+
206
+ **Risks**: [What could go wrong]
207
+
208
+ **Mitigations**: [How to address the risks]
209
+
210
+ **Alternatives Considered**: [Other options and why not chosen]
211
+ ```
212
+
213
+ ---
214
+
215
+ ## Quality Criteria
216
+
217
+ Your research output will be validated against this checklist:
218
+
219
+ **Question & Scope**
220
+ - [ ] Research question is specific and falsifiable
221
+ - [ ] Decision context clearly stated
222
+ - [ ] Scope boundaries defined (what NOT to research)
223
+
224
+ **Evidence Gathering**
225
+ - [ ] Minimum source count met (scaled to depth)
226
+ - [ ] Mix of academic, official, and practitioner sources
227
+ - [ ] Sources include publication/update dates
228
+ - [ ] Evidence catalog complete with all required fields
229
+
230
+ **Rigor & Validation**
231
+ - [ ] Major claims triangulated (3+ sources)
232
+ - [ ] Confidence levels explicitly stated for each claim
233
+ - [ ] Contrary evidence acknowledged (if present)
234
+ - [ ] Gaps and unknowns documented
235
+
236
+ **Actionability**
237
+ - [ ] Recommendation is specific and actionable
238
+ - [ ] Trade-offs explicitly acknowledged
239
+ - [ ] Risks identified with mitigations
240
+ - [ ] Clear link to decision context
241
+
242
+ **Reproducibility**
243
+ - [ ] All sources cited with URLs
244
+ - [ ] Search keywords documented
245
+ - [ ] Tool/model used recorded
246
+ - [ ] Research date recorded
247
+
248
+ ---
249
+
250
+ ## Constraints
251
+
252
+ **Time**: [Specific timebox if applicable - e.g., "4 hours max"]
253
+
254
+ **Focus priorities**: [What to prioritize if time-constrained]
255
+
256
+ **Out of scope**: [What explicitly NOT to research]
257
+
258
+ ---
259
+
260
+ ## Reproducibility Metadata
261
+
262
+ Include in final output (typically in README.md):
263
+
264
+ ```markdown
265
+ **Research Metadata**:
266
+ - Tool/model used: [e.g., "perplexity-sonar", "WebSearch", "ddgr + manual synthesis"]
267
+ - Search date: [YYYY-MM-DD]
268
+ - Prompt version: [From frontmatter - currently 1.0]
269
+ - Researcher: [Agent or human name]
270
+ - Total time: [Hours spent]
271
+ ```
272
+
273
+ ---
274
+
275
+ ## Tool Selection Guide
276
+
277
+ Choose research tool based on depth and availability:
278
+
279
+ | Depth | First Choice | Fallback | Always Available |
280
+ |-------|--------------|----------|------------------|
281
+ | Quick scan | `ddgr` | WebSearch | WebSearch |
282
+ | Standard | `llm -m perplexity` | ddgr + synthesis | WebSearch |
283
+ | Deep dive | `llm -m perplexity` | Manual + Task agent | WebSearch + synthesis |
284
+
285
+ **Check availability**:
286
+ ```bash
287
+ # ddgr (free, no API key)
288
+ which ddgr
289
+
290
+ # perplexity (requires llm + API key)
291
+ llm models list | grep perplexity
292
+
293
+ # WebSearch (always available)
294
+ # Built-in capability, no check needed
295
+ ```
296
+
297
+ ---
298
+
299
+ ## Example Usage
300
+
301
+ See `examples/tech-stack-evaluation-prompt.md` for a complete example of this template in use.
302
+
303
+ ---
304
+
305
+ ## References
306
+
307
+ - Research kata: `.raise/katas/tools/rai-research.md`
308
+ - Evidence catalog template: `.raise/templates/tools/evidence-catalog.md`
309
+ - Meta-research on this template: `work/research/ai-research-prompts/`
310
+
311
+ ---
312
+
313
+ **Template Version**: 1.0
314
+ **Created**: 2026-01-31
315
+ **Based on**: Meta-research with 20 sources (7 Very High, 8 High, 5 Medium evidence)
316
+ **Last Reviewed**: 2026-01-31
317
+ **Next Review**: 2026-04-30 (quarterly)