xp-gate 0.5.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 (90) hide show
  1. package/adapter-common.sh +192 -0
  2. package/adapters/cpp.sh +76 -0
  3. package/adapters/dart.sh +41 -0
  4. package/adapters/flutter.sh +41 -0
  5. package/adapters/go.sh +59 -0
  6. package/adapters/iac.sh +189 -0
  7. package/adapters/java.sh +191 -0
  8. package/adapters/kotlin.sh +77 -0
  9. package/adapters/objectivec.sh +38 -0
  10. package/adapters/powershell.sh +138 -0
  11. package/adapters/python.sh +104 -0
  12. package/adapters/shell.sh +55 -0
  13. package/adapters/swift.sh +44 -0
  14. package/adapters/typescript.sh +61 -0
  15. package/bin/xp-gate.js +157 -0
  16. package/hooks/adapter-common.sh +192 -0
  17. package/hooks/pre-commit +1667 -0
  18. package/hooks/pre-push +395 -0
  19. package/lib/__tests__/detect-deps.test.js +209 -0
  20. package/lib/__tests__/doctor.test.js +448 -0
  21. package/lib/__tests__/download-skill.test.js +281 -0
  22. package/lib/__tests__/init.test.js +327 -0
  23. package/lib/__tests__/install-skill.test.js +326 -0
  24. package/lib/__tests__/migrate.test.js +212 -0
  25. package/lib/__tests__/rollback.test.js +183 -0
  26. package/lib/__tests__/ui-detector.test.ts +200 -0
  27. package/lib/__tests__/uninstall-skill.test.js +189 -0
  28. package/lib/__tests__/uninstall.test.js +589 -0
  29. package/lib/__tests__/update-skill.test.js +276 -0
  30. package/lib/detect-deps.js +157 -0
  31. package/lib/doctor.js +370 -0
  32. package/lib/download-skill.js +96 -0
  33. package/lib/init.js +367 -0
  34. package/lib/install-skill.js +184 -0
  35. package/lib/migrate.js +120 -0
  36. package/lib/rollback.js +78 -0
  37. package/lib/ui-detector.ts +99 -0
  38. package/lib/uninstall-skill.js +69 -0
  39. package/lib/uninstall.js +401 -0
  40. package/lib/update-skill.js +90 -0
  41. package/package.json +39 -0
  42. package/plugins/claude-code/.claude-plugin/plugin.json +21 -0
  43. package/plugins/claude-code/bin/delphi-review-guard.sh +68 -0
  44. package/plugins/claude-code/bin/xp-gate-check +47 -0
  45. package/plugins/claude-code/hooks/hooks.json +37 -0
  46. package/skills/delphi-review/.delphi-config.json.example +45 -0
  47. package/skills/delphi-review/AGENTS.md +54 -0
  48. package/skills/delphi-review/INSTALL.md +152 -0
  49. package/skills/delphi-review/SKILL.md +371 -0
  50. package/skills/delphi-review/evals/evals.json +82 -0
  51. package/skills/delphi-review/opencode.json.delphi.example +56 -0
  52. package/skills/delphi-review/references/code-walkthrough.md +486 -0
  53. package/skills/ralph-loop/SKILL.md +330 -0
  54. package/skills/ralph-loop/evals/evals.json +311 -0
  55. package/skills/ralph-loop/evolution-history.json +59 -0
  56. package/skills/ralph-loop/evolution-log.md +16 -0
  57. package/skills/ralph-loop/references/components/memory.md +55 -0
  58. package/skills/ralph-loop/references/components/middleware.md +54 -0
  59. package/skills/ralph-loop/references/components/skill-invocations.md +39 -0
  60. package/skills/ralph-loop/references/components/system-prompt.md +24 -0
  61. package/skills/ralph-loop/references/components/tool-descriptions.md +32 -0
  62. package/skills/ralph-loop/references/phase-2-build-ralph.md +89 -0
  63. package/skills/ralph-loop/templates/progress-log.md +36 -0
  64. package/skills/sprint-flow/SKILL.md +600 -0
  65. package/skills/sprint-flow/evals/evals.json +78 -0
  66. package/skills/sprint-flow/evolution-history.json +39 -0
  67. package/skills/sprint-flow/evolution-log.md +23 -0
  68. package/skills/sprint-flow/references/components/memory.md +87 -0
  69. package/skills/sprint-flow/references/components/middleware.md +72 -0
  70. package/skills/sprint-flow/references/components/skill-invocations.md +104 -0
  71. package/skills/sprint-flow/references/components/system-prompt.md +27 -0
  72. package/skills/sprint-flow/references/components/tool-descriptions.md +96 -0
  73. package/skills/sprint-flow/references/phase-0-think.md +115 -0
  74. package/skills/sprint-flow/references/phase-1-plan.md +178 -0
  75. package/skills/sprint-flow/references/phase-2-build.md +198 -0
  76. package/skills/sprint-flow/references/phase-3-review.md +213 -0
  77. package/skills/sprint-flow/references/phase-4-uat.md +125 -0
  78. package/skills/sprint-flow/references/phase-5-feedback.md +100 -0
  79. package/skills/sprint-flow/references/phase-6-ship.md +193 -0
  80. package/skills/sprint-flow/references/phase-7-land.md +140 -0
  81. package/skills/sprint-flow/references/phase-8-cleanup.md +192 -0
  82. package/skills/sprint-flow/templates/emergent-issues-template.md +120 -0
  83. package/skills/sprint-flow/templates/pain-document-template.md +115 -0
  84. package/skills/sprint-flow/templates/sprint-summary-template.md +120 -0
  85. package/skills/test-specification-alignment/AGENTS.md +59 -0
  86. package/skills/test-specification-alignment/SKILL.md +605 -0
  87. package/skills/test-specification-alignment/evals/evals.json +75 -0
  88. package/skills/test-specification-alignment/references/alignment-verification-algorithm.md +493 -0
  89. package/skills/test-specification-alignment/references/phase2-constraint-enforcement.md +431 -0
  90. package/skills/test-specification-alignment/references/specification-format.md +348 -0
@@ -0,0 +1,59 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Ralph Loop Evolution History",
4
+ "description": "Machine-readable change manifest for AHE-inspired skill evolution.",
5
+ "iterations": [
6
+ {
7
+ "id": 1,
8
+ "date": "2026-05-22",
9
+ "trigger": "new-feature",
10
+ "issue": "#62 (sync with sprint-flow)",
11
+ "root_cause": "ralph-loop is sprint-flow Phase 2 default build mode. Component structure must be consistent with parent skill's observability infrastructure.",
12
+ "component_changes": ["middleware", "tools", "memory"],
13
+ "files_changed": [
14
+ "skills/ralph-loop/references/components/system-prompt.md",
15
+ "skills/ralph-loop/references/components/tool-descriptions.md",
16
+ "skills/ralph-loop/references/components/middleware.md",
17
+ "skills/ralph-loop/references/components/skill-invocations.md",
18
+ "skills/ralph-loop/references/components/memory.md",
19
+ "skills/ralph-loop/evolution-log.md",
20
+ "skills/ralph-loop/evolution-history.json"
21
+ ],
22
+ "prediction": {
23
+ "metric": "skill-consistency",
24
+ "direction": "up",
25
+ "delta_pct": 100,
26
+ "risk": "No measurable impact; metrics depend on P1 debugger implementation"
27
+ },
28
+ "actual_outcome": null,
29
+ "delphi_review": "Sync modification per Delphi Round 2 minority concern resolution"
30
+ },
31
+ {
32
+ "id": 2,
33
+ "date": "2026-05-25",
34
+ "trigger": "bug-fix-and-feature-enhancement",
35
+ "issue": "#66 (test-infra-first + dispatch category fix)",
36
+ "root_cause": "category='build' was invalid, causing silent skill load failures. Test infrastructure was not checked before TDD dispatch, leading to subagents reinventing test helpers.",
37
+ "component_changes": ["middleware", "tools", "memory", "skill-invocations", "evals"],
38
+ "files_changed": [
39
+ "skills/ralph-loop/SKILL.md",
40
+ "skills/ralph-loop/references/components/tool-descriptions.md",
41
+ "skills/ralph-loop/references/components/middleware.md",
42
+ "skills/ralph-loop/references/components/skill-invocations.md",
43
+ "skills/ralph-loop/references/components/memory.md",
44
+ "skills/ralph-loop/evals/evals.json",
45
+ "skills/ralph-loop/templates/progress-log.md",
46
+ "skills/ralph-loop/evolution-log.md",
47
+ "skills/ralph-loop/evolution-history.json"
48
+ ],
49
+ "prediction": {
50
+ "metric": "tdd-enforcement-rate",
51
+ "direction": "up",
52
+ "delta_pct": 40,
53
+ "risk": "test-infra dispatch may fail if no subagent available; mitigated by fallback inline generation"
54
+ },
55
+ "actual_outcome": null,
56
+ "delphi_review": "code-walkthrough Round 1 REQUEST_CHANGES → fixed state machine inconsistency + reference cleanup"
57
+ }
58
+ ]
59
+ }
@@ -0,0 +1,16 @@
1
+ # Evolution Log — ralph-loop
2
+
3
+ > AHE 启发的可观测性变更日志。
4
+
5
+ ## Entry 001 — 2026-05-22 — AHE Observability Infrastructure (P0 Sync)
6
+
7
+ - **Trigger**: new-feature — 与 sprint-flow #62 同步创建 components/ 分解结构
8
+ - **Evidence**: Delphi Round 2 Expert C 少数派意见明确要求 ralph-loop 同步修改
9
+ - **Root Cause**: ralph-loop 是 sprint-flow Phase 2 默认构建模式,组件结构不一致会导致引用断裂
10
+ - **Change Made**:
11
+ 1. 创建 `references/components/` 目录,包含 5 个 AHE 对齐组件
12
+ 2. 创建 `evolution-log.md`
13
+ 3. 创建 `evolution-history.json`
14
+ - **Self-Predicted Impact**: 保证 sprint-flow 与 ralph-loop 对 observability 组件的引用一致性
15
+ - **Actual Outcome**: ⏳ pending
16
+ - **Component Changed**: [middleware, tools, memory]
@@ -0,0 +1,55 @@
1
+ # memory.md — Ralph Loop 状态与记忆结构(AHE 组件分解)
2
+
3
+ > **本文是 `skills/ralph-loop/SKILL.md` 中状态管理的 AHE 对齐展开。**
4
+
5
+ ## 组件职责
6
+
7
+ 定义 Ralph Loop 的进度持久化 Schema、learnings 分类结构。
8
+
9
+ ## Progress Log Schema (`progress.log` — YAML)
10
+
11
+ ```yaml
12
+ req_progress:
13
+ completed_count: 3
14
+ total_count: 5
15
+ current_req: REQ-XXX-004
16
+ status: running|completed|blocked
17
+ test_infra_status: generated|existing|skipped|fallback
18
+
19
+ learnings:
20
+ permanent:
21
+ - pattern: "描述持久模式"
22
+ evidence: "来源证据"
23
+ contextual:
24
+ - pattern: "描述当前 REQ 有效模式"
25
+ expires_on: "过期条件"
26
+
27
+ cost:
28
+ req_number: 3
29
+ tokens_used: 15000
30
+ cumulative_tokens: 85000
31
+ threshold: 200000
32
+ ```
33
+
34
+ ## Test Infra Status 字段
35
+
36
+ | 值 | 含义 |
37
+ |---|------|
38
+ | `generated` | 本 REQ 首次生成 test-utils.ts |
39
+ | `existing` | test-utils.ts 已存在且接口完整 |
40
+ | `skipped` | 非首次 REQ,跳过 test-infra 检查(缓存结果)|
41
+ | `fallback` | test-infra dispatch 失败,使用 inline 生成(含 warning)|
42
+
43
+ ## Learnings 分类
44
+
45
+ | 类型 | 生命周期 | 持久化 | 示例 |
46
+ |------|---------|--------|------|
47
+ | `permanent` | 跨所有 REQ | progress.log | "项目使用 ESLint strict 模式" |
48
+ | `contextual` | 当前 REQ 内 | progress.log (过期标记) | "REQ 003 使用 Zod 验证 schema" |
49
+
50
+ ## AHE 分类
51
+
52
+ | 字段 | 值 |
53
+ |------|---|
54
+ | 组件类型 | Long-Term Memory |
55
+ | 修改频率预期 | 低 |
@@ -0,0 +1,54 @@
1
+ # middleware.md — Ralph Loop 迭代控制逻辑(AHE 组件分解)
2
+
3
+ > **本文是 `skills/ralph-loop/SKILL.md` 中迭代流程的 AHE 对齐展开。**
4
+
5
+ ## 组件职责
6
+
7
+ 定义 Ralph Loop 的状态机:REQ 级迭代控制、熔断机制、中断续传逻辑。
8
+
9
+ ## 状态机
10
+
11
+ ```
12
+ REQ N → 加载 learnings → 测试基础设施检查 → [infra missing?] → test_infra_dispatch
13
+ │ │ │
14
+ │ │ infra ready │ FAIL (max 2 retry)
15
+ │ ▼ ▼
16
+ │ TDD → 回归测试 ←───────────── BLOCK/fallback
17
+ │ │
18
+ │ PASS → REQ N+1
19
+ │ FAIL → 重试 (max 3) → BLOCK → 用户决策
20
+ │ ALL_REQS_COMPLETE → 结束,返回控制权给 sprint-flow orchestrator
21
+ ```
22
+
23
+ ## 测试基础设施状态机
24
+
25
+ ```
26
+ test_infra_check → [needs infra?] → test_infra_dispatch → FAIL → retry (max 2)
27
+ │ │ │ │
28
+ │ │ infra ready │ pass │ pass
29
+ ▼ ▼ ▼ ▼
30
+ in_progress test_infra_ready ─────────→ TDD → regression BLOCK/fallback
31
+ ```
32
+
33
+ ## 熔断机制
34
+
35
+ | 触发条件 | 动作 |
36
+ |---------|------|
37
+ | TDD 失败 > 3 次 | BLOCK + 用户决策 |
38
+ | Token 使用超阈值 | BLOCK + 用户决策 |
39
+ | 回归测试失败 | 记录到 progress.log,通知 sprint-flow orchestrator |
40
+ | test-infra dispatch 失败 (max 2 retry) | BLOCK 或 fallback inline 生成(记录 warning)|
41
+
42
+ ## 暂停点
43
+
44
+ | 暂停点 | 触发条件 | 恢复 |
45
+ |--------|---------|------|
46
+ | REQ 完成 | 自动暂停等待确认 | 确认后继续下一个 REQ |
47
+ | 熔断 | 自动触发 | 用户决策后继续或放弃 |
48
+
49
+ ## AHE 分类
50
+
51
+ | 字段 | 值 |
52
+ |------|---|
53
+ | 组件类型 | Middleware |
54
+ | 修改频率预期 | 高 |
@@ -0,0 +1,39 @@
1
+ # skill-invocations.md — Ralph Loop 技能调用(AHE 组件分解)
2
+
3
+ > **本文是 `skills/ralph-loop/SKILL.md` 中技能调用链的 AHE 对齐展开。**
4
+
5
+ ## 组件职责
6
+
7
+ 提供 Ralph Loop 在每个 REQ 执行中的技能调用链。
8
+
9
+ ## 完整调用链
10
+
11
+ | 步骤 | Skill | 来源 | 参数 |
12
+ |------|-------|------|------|
13
+ | 0 | 测试基础设施检查 | 内置 | 检查 test-utils.ts 存在性 + 接口契约(createTestApp, withTestDb)|
14
+ | 1 | `test-driven-development` | superpowers | `--lang` 注入 + TDD 铁律 + Mock 边界(覆盖默认策略)|
15
+ | 2 | `learn` | gstack | classification: permanent/contextual |
16
+ | 3 | `requesting-code-review` | superpowers | REQ 完成后评审 |
17
+
18
+ ## test-infra dispatch 节点
19
+
20
+ 当 test-utils.ts 不存在或接口缺失时:
21
+
22
+ ```
23
+ task(category="unspecified-high", load_skills=["test-driven-development"], prompt="生成测试基础设施:createTestApp() + withTestDb()。TDD 铁律:先写测试再实现。")
24
+ ```
25
+
26
+ - retry max 2 次
27
+ - 仍失败 → BLOCK 或 fallback inline 生成(记录 warning)
28
+ - 成功后与业务代码合并为同一 commit
29
+
30
+ ## 上游依赖
31
+
32
+ 从 `specification.yaml` 获取 REQ 列表(由 `to-issues` skill 生成)
33
+
34
+ ## AHE 分类
35
+
36
+ | 字段 | 值 |
37
+ |------|---|
38
+ | 组件类型 | Skill Invocation Chain |
39
+ | 修改频率预期 | 中 |
@@ -0,0 +1,24 @@
1
+ # system-prompt.md — Ralph Loop 行为定义(AHE 组件分解)
2
+
3
+ > **本文是 `skills/ralph-loop/SKILL.md` 核心原则的 AHE 对齐展开。**
4
+
5
+ ## 核心职责
6
+
7
+ 定义 Ralph Loop (Phase 2 BUILD 默认模式) 的行为边界:逐 REQ/切片 迭代构建,每个 REQ dispatch 独立 subagent,干净上下文,全量回归测试。
8
+
9
+ ## 核心原则 (AHE 对齐)
10
+
11
+ | # | 原则 | 说明 |
12
+ |---|------|------|
13
+ | 1 | 逐 REQ 迭代 | 一次处理一个 REQ/切片,干净上下文,避免上下文线性膨胀 |
14
+ | 2 | Token 节约 | 比旧并行模式节约 40-67% token |
15
+ | 3 | 全量回归 | 每个 REQ 完成后跑全量测试 |
16
+ | 4 | 进度持久化 | progress.log 持久化 learnings/permanent/contextual |
17
+ | 5 | 可中断续传 | 中断后可从最后完成 REQ 继续 |
18
+
19
+ ## AHE 分类
20
+
21
+ | 字段 | 值 |
22
+ |------|---|
23
+ | 组件类型 | System Prompt |
24
+ | 修改频率预期 | 低 |
@@ -0,0 +1,32 @@
1
+ # tool-descriptions.md — Ralph Loop 各步骤工具链(AHE 组件分解)
2
+
3
+ > **本文是 `skills/ralph-loop/SKILL.md` 中构建步骤的 AHE 对齐展开。**
4
+
5
+ ## 组件职责
6
+
7
+ 描述 Ralph Loop 中每个 REQ 执行的具体工具链:TDD 流、回归测试、成本监控。
8
+
9
+ ## 构建步骤
10
+
11
+ | 步骤 | 动作 | 说明 |
12
+ |------|------|------|
13
+ | 1 | 加载当前 REQ | 从 specification.yaml 获取下一个 READY REQ |
14
+ | 2 | 加载 learnings | 从 progress.log 加载 permanent + contextual learnings |
15
+ | 3 | 测试基础设施检查 | 检查 test-utils.ts 是否存在且导出 createTestApp()、withTestDb()。不存在 → dispatch test-infra subagent,retry max 2,失败 → BLOCK/fallback |
16
+ | 4 | TDD (RED→GREEN→REFACTOR) | test-driven-development skill(含 TDD 铁律 + Mock 边界注入)|
17
+ | 5 | 全量回归测试 | 运行全部现有测试 |
18
+ | 6 | 测试先行比率检查 (L1b) | 新增测试行数 / (新增测试 + 新增实现) ≥ 40% |
19
+ | 7 | 记录 progress.log | 将 learnings 分类存储 (permanent/contextual) |
20
+ | 8 | 成本检查 | token 使用量是否超阈值 |
21
+ | 9 | 完成/继续 | 所有 REQ 完成 → 结束;否则 → 下一个 REQ |
22
+
23
+ ## 语言特定
24
+
25
+ 通过 `--lang` 注入对应 TDD skill: `springboot-tdd`, `django-tdd`, `golang-testing`
26
+
27
+ ## AHE 分类
28
+
29
+ | 字段 | 值 |
30
+ |------|---|
31
+ | 组件类型 | Tool Description |
32
+ | 修改频率预期 | 高 |
@@ -0,0 +1,89 @@
1
+ # Ralph Loop — Phase 2 BUILD 默认模式
2
+
3
+ > ralph-loop 是 Sprint-Flow Phase 2 BUILD 的默认执行模式。token-constraint 优先:每次只处理一个 REQ,干净上下文,全量回归。
4
+
5
+ ## 模式切换
6
+
7
+ ### 默认行为
8
+
9
+ ```bash
10
+ /sprint-flow "需求描述"
11
+ # → Phase 2 自动使用 ralph-loop 模式
12
+ ```
13
+
14
+ ### 可选并行模式
15
+
16
+ ```bash
17
+ /sprint-flow "需求描述" --mode parallel
18
+ # → 旧有行为:一次性并行 dispatch 所有需求
19
+ ```
20
+
21
+ ## 核心差异
22
+
23
+ | 维度 | ralph-loop (默认) | --mode parallel (可选) |
24
+ |------|-------------------|----------------------|
25
+ | 需求源 | specification.yaml | specification.yaml |
26
+ | 执行方式 | 逐 REQ 串行迭代 | 一次性并行 dispatch |
27
+ | 上下文 | 每个 REQ 独立 dispatch,干净上下文 | 共享 session,线性增长 |
28
+ | 验证范围 | **全量测试**(含跨 REQ 回归) | 关联测试 |
29
+ | AGENTS.md 更新 | **orchestrator 统一写** | subagent 写 |
30
+ | 依赖排序 | 拓扑排序 + 同层 priority | 无 |
31
+
32
+ ## 流程
33
+
34
+ ```
35
+ 默认模式: ralph-loop 模式:
36
+ ┌──────────────────────┐ ┌──────────────────────────┐
37
+ │ dispatching-parallel │ │ 读取 specification.yaml │
38
+ │ -agents │ │ 构建依赖图 │
39
+ │ │ │ 拓扑排序 (Kahn's algo) │
40
+ │ 一次性 dispatch 所有 │ └──────────┬───────────────┘
41
+ │ 共享同一 session │ ▼
42
+ └──────────┬───────────┘ ┌──────────────────────────┐
43
+ │ │ 迭代循环: │
44
+ ▼ │ 取 next READY REQ │
45
+ ┌──────────────────────┐ │ dispatch 独立 subagent │
46
+ │ verification + │ │ (clean context) │
47
+ │ commit │ │ L1: typecheck+lint │
48
+ └──────────────────────┘ │ L2: 全量测试 ← 回归检测 │
49
+ │ L3: coverage ≥ 80% │
50
+ │ PASS → commit + learn │
51
+ │ FAIL → retry max 3 │
52
+ └──────────┬───────────────┘
53
+
54
+ Phase 3 REVIEW
55
+ ```
56
+
57
+ ## 与 Sprint-Flow 参数交互
58
+
59
+ | 参数 | 行为 (默认=ralph-loop) |
60
+ |------|----------------------|
61
+ | `--stop-at build` | 执行完 ralph-loop 后停止 |
62
+ | `--resume-from build` | 从 checkpoint 恢复,跳过已 done REQs |
63
+ | `--phase build-only` | 只执行 ralph-loop |
64
+ | `--mode parallel` | 切换回旧有并行模式 |
65
+
66
+ ## Token 对比
67
+
68
+ | REQ 数量 | 默认模式 | ralph-loop | 节约 |
69
+ |---------|---------|-----------|------|
70
+ | 3 | ~15k | ~9k | 40% |
71
+ | 5 | ~50k | ~25k | 50% |
72
+ | 10 | ~150k | ~50k | 67% |
73
+
74
+ ## 集成检查点
75
+
76
+ Ralph Loop 完成后返回:
77
+
78
+ ```json
79
+ {
80
+ "mode": "ralph-loop",
81
+ "specification_source": "specification.yaml",
82
+ "topology_order": ["REQ-001", "REQ-002", "REQ-003"],
83
+ "requirements": { "total": 6, "done": 6, "pending": 0, "blocked": 0 },
84
+ "learnings": { "permanent": ["..."], "contextual": ["..."] },
85
+ "status": "completed"
86
+ }
87
+ ```
88
+
89
+ Phase 3 REVIEW 正常执行(delphi code-walkthrough + test-specification-alignment)。PARTIAL 状态时仅检查 done REQs。
@@ -0,0 +1,36 @@
1
+ # Ralph Loop — Progress Log
2
+
3
+ Feature: [feature name]
4
+ Started: [ISO 8601]
5
+ Source: specification.yaml
6
+ Topology Order: [REQ-001, REQ-002, ...]
7
+
8
+ ---
9
+
10
+ ## REQ-001 — [title]
11
+
12
+ **Status**: PASS / FAIL / TIMEOUT / BLOCKED
13
+ **Retry count**: 0
14
+ **Test infra**: generated / existing / skipped
15
+ **Files changed**: [file1, file2, ...]
16
+ **Learnings**:
17
+ - `[permanent]` migration files must be in src/migrations/
18
+ - `[contextual]` off-by-one at line 42 in utils.ts
19
+ **Timestamp**: [ISO 8601]
20
+
21
+ ---
22
+
23
+ ## REQ-002 — [title]
24
+
25
+ **Status**: PASS
26
+ **Retry count**: 1
27
+ **Failure injected**: Linter: unused-var at line 42
28
+ **Test infra**: existing (createTestApp, withTestDb)
29
+ **Files changed**: [file1, file2, ...]
30
+ **Learnings**:
31
+ - `[permanent]` Auth middleware must run before validation
32
+ **Timestamp**: [ISO 8601]
33
+
34
+ ---
35
+
36
+ <!-- Append new REQs below. Tag: permanent / contextual -->