mindforge-cc 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/.agent/CLAUDE.md +462 -0
  2. package/.agent/forge/help.md +7 -0
  3. package/.agent/forge/init-project.md +32 -0
  4. package/.agent/forge/plan-phase.md +30 -0
  5. package/.agent/mindforge/approve.md +18 -0
  6. package/.agent/mindforge/audit.md +30 -0
  7. package/.agent/mindforge/benchmark.md +33 -0
  8. package/.agent/mindforge/complete-milestone.md +18 -0
  9. package/.agent/mindforge/debug.md +126 -0
  10. package/.agent/mindforge/discuss-phase.md +138 -0
  11. package/.agent/mindforge/execute-phase.md +165 -0
  12. package/.agent/mindforge/health.md +21 -0
  13. package/.agent/mindforge/help.md +23 -0
  14. package/.agent/mindforge/init-org.md +131 -0
  15. package/.agent/mindforge/init-project.md +155 -0
  16. package/.agent/mindforge/install-skill.md +15 -0
  17. package/.agent/mindforge/map-codebase.md +298 -0
  18. package/.agent/mindforge/metrics.md +22 -0
  19. package/.agent/mindforge/migrate.md +40 -0
  20. package/.agent/mindforge/milestone.md +12 -0
  21. package/.agent/mindforge/next.md +105 -0
  22. package/.agent/mindforge/plan-phase.md +125 -0
  23. package/.agent/mindforge/plugins.md +40 -0
  24. package/.agent/mindforge/pr-review.md +41 -0
  25. package/.agent/mindforge/profile-team.md +23 -0
  26. package/.agent/mindforge/publish-skill.md +19 -0
  27. package/.agent/mindforge/quick.md +135 -0
  28. package/.agent/mindforge/release.md +10 -0
  29. package/.agent/mindforge/retrospective.md +26 -0
  30. package/.agent/mindforge/review.md +157 -0
  31. package/.agent/mindforge/security-scan.md +233 -0
  32. package/.agent/mindforge/ship.md +100 -0
  33. package/.agent/mindforge/skills.md +141 -0
  34. package/.agent/mindforge/status.md +104 -0
  35. package/.agent/mindforge/sync-confluence.md +11 -0
  36. package/.agent/mindforge/sync-jira.md +12 -0
  37. package/.agent/mindforge/tokens.md +8 -0
  38. package/.agent/mindforge/update.md +42 -0
  39. package/.agent/mindforge/verify-phase.md +62 -0
  40. package/.agent/mindforge/workspace.md +29 -0
  41. package/.claude/CLAUDE.md +462 -0
  42. package/.claude/commands/forge/help.md +7 -0
  43. package/.claude/commands/forge/init-project.md +32 -0
  44. package/.claude/commands/forge/plan-phase.md +30 -0
  45. package/.claude/commands/mindforge/approve.md +18 -0
  46. package/.claude/commands/mindforge/audit.md +30 -0
  47. package/.claude/commands/mindforge/benchmark.md +33 -0
  48. package/.claude/commands/mindforge/complete-milestone.md +18 -0
  49. package/.claude/commands/mindforge/debug.md +126 -0
  50. package/.claude/commands/mindforge/discuss-phase.md +138 -0
  51. package/.claude/commands/mindforge/execute-phase.md +165 -0
  52. package/.claude/commands/mindforge/health.md +21 -0
  53. package/.claude/commands/mindforge/help.md +23 -0
  54. package/.claude/commands/mindforge/init-org.md +131 -0
  55. package/.claude/commands/mindforge/init-project.md +155 -0
  56. package/.claude/commands/mindforge/install-skill.md +15 -0
  57. package/.claude/commands/mindforge/map-codebase.md +298 -0
  58. package/.claude/commands/mindforge/metrics.md +22 -0
  59. package/.claude/commands/mindforge/migrate.md +40 -0
  60. package/.claude/commands/mindforge/milestone.md +12 -0
  61. package/.claude/commands/mindforge/next.md +105 -0
  62. package/.claude/commands/mindforge/plan-phase.md +125 -0
  63. package/.claude/commands/mindforge/plugins.md +40 -0
  64. package/.claude/commands/mindforge/pr-review.md +41 -0
  65. package/.claude/commands/mindforge/profile-team.md +23 -0
  66. package/.claude/commands/mindforge/publish-skill.md +19 -0
  67. package/.claude/commands/mindforge/quick.md +135 -0
  68. package/.claude/commands/mindforge/release.md +10 -0
  69. package/.claude/commands/mindforge/retrospective.md +26 -0
  70. package/.claude/commands/mindforge/review.md +157 -0
  71. package/.claude/commands/mindforge/security-scan.md +233 -0
  72. package/.claude/commands/mindforge/ship.md +100 -0
  73. package/.claude/commands/mindforge/skills.md +141 -0
  74. package/.claude/commands/mindforge/status.md +104 -0
  75. package/.claude/commands/mindforge/sync-confluence.md +11 -0
  76. package/.claude/commands/mindforge/sync-jira.md +12 -0
  77. package/.claude/commands/mindforge/tokens.md +8 -0
  78. package/.claude/commands/mindforge/update.md +42 -0
  79. package/.claude/commands/mindforge/verify-phase.md +62 -0
  80. package/.claude/commands/mindforge/workspace.md +29 -0
  81. package/.forge/org/CONVENTIONS.md +0 -0
  82. package/.forge/org/ORG.md +0 -0
  83. package/.forge/org/SECURITY.md +0 -0
  84. package/.forge/org/TOOLS.md +0 -0
  85. package/.forge/personas/analyst.md +0 -0
  86. package/.forge/personas/architect.md +0 -0
  87. package/.forge/personas/debug-specialist.md +0 -0
  88. package/.forge/personas/developer.md +26 -0
  89. package/.forge/personas/qa-engineer.md +0 -0
  90. package/.forge/personas/release-manager.md +0 -0
  91. package/.forge/personas/security-reviewer.md +33 -0
  92. package/.forge/personas/tech-writer.md +0 -0
  93. package/.forge/skills/api-design/SKILL.md +0 -0
  94. package/.forge/skills/code-quality/SKILL.md +0 -0
  95. package/.forge/skills/documentation/SKILL.md +0 -0
  96. package/.forge/skills/security-review/SKILL.md +23 -0
  97. package/.forge/skills/testing-standards/SKILL.md +27 -0
  98. package/.github/workflows/mindforge-ci.yml +224 -0
  99. package/.gitlab-ci-mindforge.yml +18 -0
  100. package/.mindforge/MINDFORGE-SCHEMA.json +165 -0
  101. package/.mindforge/audit/AUDIT-SCHEMA.md +451 -0
  102. package/.mindforge/ci/ci-config-schema.md +21 -0
  103. package/.mindforge/ci/ci-mode.md +179 -0
  104. package/.mindforge/ci/github-actions-adapter.md +224 -0
  105. package/.mindforge/ci/gitlab-ci-adapter.md +31 -0
  106. package/.mindforge/ci/jenkins-adapter.md +44 -0
  107. package/.mindforge/distribution/registry-client.md +166 -0
  108. package/.mindforge/distribution/registry-schema.md +96 -0
  109. package/.mindforge/distribution/skill-publisher.md +44 -0
  110. package/.mindforge/distribution/skill-validator.md +74 -0
  111. package/.mindforge/engine/compaction-protocol.md +182 -0
  112. package/.mindforge/engine/context-injector.md +128 -0
  113. package/.mindforge/engine/dependency-parser.md +113 -0
  114. package/.mindforge/engine/skills/conflict-resolver.md +69 -0
  115. package/.mindforge/engine/skills/loader.md +184 -0
  116. package/.mindforge/engine/skills/registry.md +98 -0
  117. package/.mindforge/engine/skills/versioning.md +75 -0
  118. package/.mindforge/engine/verification-pipeline.md +111 -0
  119. package/.mindforge/engine/wave-executor.md +235 -0
  120. package/.mindforge/governance/GOVERNANCE-CONFIG.md +17 -0
  121. package/.mindforge/governance/approval-workflow.md +37 -0
  122. package/.mindforge/governance/change-classifier.md +63 -0
  123. package/.mindforge/governance/compliance-gates.md +31 -0
  124. package/.mindforge/integrations/confluence.md +27 -0
  125. package/.mindforge/integrations/connection-manager.md +163 -0
  126. package/.mindforge/integrations/github.md +25 -0
  127. package/.mindforge/integrations/gitlab.md +13 -0
  128. package/.mindforge/integrations/jira.md +102 -0
  129. package/.mindforge/integrations/slack.md +41 -0
  130. package/.mindforge/intelligence/antipattern-detector.md +75 -0
  131. package/.mindforge/intelligence/difficulty-scorer.md +55 -0
  132. package/.mindforge/intelligence/health-engine.md +208 -0
  133. package/.mindforge/intelligence/skill-gap-analyser.md +40 -0
  134. package/.mindforge/intelligence/smart-compaction.md +71 -0
  135. package/.mindforge/metrics/METRICS-SCHEMA.md +42 -0
  136. package/.mindforge/metrics/quality-tracker.md +32 -0
  137. package/.mindforge/monorepo/cross-package-planner.md +114 -0
  138. package/.mindforge/monorepo/dependency-graph-builder.md +32 -0
  139. package/.mindforge/monorepo/workspace-detector.md +129 -0
  140. package/.mindforge/org/CONVENTIONS.md +62 -0
  141. package/.mindforge/org/ORG.md +51 -0
  142. package/.mindforge/org/SECURITY.md +50 -0
  143. package/.mindforge/org/TOOLS.md +53 -0
  144. package/.mindforge/org/integrations/INTEGRATIONS-CONFIG.md +58 -0
  145. package/.mindforge/org/skills/MANIFEST.md +38 -0
  146. package/.mindforge/personas/analyst.md +52 -0
  147. package/.mindforge/personas/architect.md +75 -0
  148. package/.mindforge/personas/debug-specialist.md +52 -0
  149. package/.mindforge/personas/developer.md +85 -0
  150. package/.mindforge/personas/overrides/README.md +85 -0
  151. package/.mindforge/personas/qa-engineer.md +61 -0
  152. package/.mindforge/personas/release-manager.md +76 -0
  153. package/.mindforge/personas/security-reviewer.md +91 -0
  154. package/.mindforge/personas/tech-writer.md +51 -0
  155. package/.mindforge/plugins/PLUGINS-MANIFEST.md +23 -0
  156. package/.mindforge/plugins/plugin-loader.md +93 -0
  157. package/.mindforge/plugins/plugin-registry.md +44 -0
  158. package/.mindforge/plugins/plugin-schema.md +68 -0
  159. package/.mindforge/pr-review/ai-reviewer.md +266 -0
  160. package/.mindforge/pr-review/finding-formatter.md +46 -0
  161. package/.mindforge/pr-review/review-prompt-templates.md +44 -0
  162. package/.mindforge/production/compatibility-layer.md +39 -0
  163. package/.mindforge/production/migration-engine.md +52 -0
  164. package/.mindforge/production/production-checklist.md +165 -0
  165. package/.mindforge/production/token-optimiser.md +68 -0
  166. package/.mindforge/skills/accessibility/SKILL.md +106 -0
  167. package/.mindforge/skills/api-design/SKILL.md +98 -0
  168. package/.mindforge/skills/code-quality/SKILL.md +88 -0
  169. package/.mindforge/skills/data-privacy/SKILL.md +126 -0
  170. package/.mindforge/skills/database-patterns/SKILL.md +192 -0
  171. package/.mindforge/skills/documentation/SKILL.md +91 -0
  172. package/.mindforge/skills/incident-response/SKILL.md +180 -0
  173. package/.mindforge/skills/performance/SKILL.md +120 -0
  174. package/.mindforge/skills/security-review/SKILL.md +83 -0
  175. package/.mindforge/skills/testing-standards/SKILL.md +97 -0
  176. package/.mindforge/team/TEAM-PROFILE.md +42 -0
  177. package/.mindforge/team/multi-handoff.md +23 -0
  178. package/.mindforge/team/profiles/README.md +13 -0
  179. package/.mindforge/team/session-merger.md +18 -0
  180. package/.planning/ARCHITECTURE.md +0 -0
  181. package/.planning/AUDIT.jsonl +0 -0
  182. package/.planning/HANDOFF.json +28 -0
  183. package/.planning/PROJECT.md +33 -0
  184. package/.planning/RELEASE-CHECKLIST.md +68 -0
  185. package/.planning/REQUIREMENTS.md +0 -0
  186. package/.planning/ROADMAP.md +0 -0
  187. package/.planning/STATE.md +31 -0
  188. package/.planning/approvals/.gitkeep +1 -0
  189. package/.planning/archive/.gitkeep +1 -0
  190. package/.planning/audit-archive/.gitkeep +1 -0
  191. package/.planning/decisions/.gitkeep +0 -0
  192. package/.planning/decisions/ADR-001-handoff-tracking.md +41 -0
  193. package/.planning/decisions/ADR-002-markdown-commands.md +46 -0
  194. package/.planning/decisions/ADR-003-skills-trigger-model.md +37 -0
  195. package/.planning/decisions/ADR-004-wave-parallelism-model.md +45 -0
  196. package/.planning/decisions/ADR-005-append-only-audit-log.md +51 -0
  197. package/.planning/decisions/ADR-006-tiered-skills-system.md +22 -0
  198. package/.planning/decisions/ADR-007-trigger-keyword-model.md +22 -0
  199. package/.planning/decisions/ADR-008-just-in-time-skill-loading.md +29 -0
  200. package/.planning/decisions/ADR-009-enterprise-integration-retry-policy.md +8 -0
  201. package/.planning/decisions/ADR-010-governance-tier-escalation.md +8 -0
  202. package/.planning/decisions/ADR-011-multi-developer-handoff-contract.md +8 -0
  203. package/.planning/decisions/ADR-012-intelligence-feedback-loops.md +19 -0
  204. package/.planning/decisions/ADR-013-mindforge-md-constitution.md +16 -0
  205. package/.planning/decisions/ADR-014-metrics-as-signals-not-evaluation.md +15 -0
  206. package/.planning/decisions/ADR-015-npm-based-skill-registry.md +26 -0
  207. package/.planning/decisions/ADR-016-ci-exit-code-0-on-timeout.md +27 -0
  208. package/.planning/decisions/ADR-017-sdk-localhost-only.md +28 -0
  209. package/.planning/decisions/ADR-018-installer-self-install-detection.md +15 -0
  210. package/.planning/decisions/ADR-019-self-update-scope-preservation.md +14 -0
  211. package/.planning/decisions/ADR-020-v1.0.0-stable-interface-contract.md +23 -0
  212. package/.planning/jira-sync.json +9 -0
  213. package/.planning/milestones/.gitkeep +1 -0
  214. package/.planning/phases/day1/REVIEW-DAY1.md +50 -0
  215. package/.planning/phases/day1/SECURITY-REVIEW-DAY1.md +15 -0
  216. package/.planning/phases/day2/REVIEW-DAY2.md +521 -0
  217. package/.planning/phases/day3/REVIEW-DAY3.md +234 -0
  218. package/.planning/slack-threads.json +6 -0
  219. package/CHANGELOG.md +175 -0
  220. package/LICENSE +21 -0
  221. package/MINDFORGE.md +76 -0
  222. package/README.md +182 -0
  223. package/RELEASENOTES.md +41 -0
  224. package/SECURITY.md +4 -0
  225. package/bin/install.js +120 -0
  226. package/bin/installer-core.js +292 -0
  227. package/bin/migrations/0.1.0-to-0.5.0.js +37 -0
  228. package/bin/migrations/0.5.0-to-0.6.0.js +17 -0
  229. package/bin/migrations/0.6.0-to-1.0.0.js +100 -0
  230. package/bin/migrations/migrate.js +151 -0
  231. package/bin/migrations/schema-versions.js +64 -0
  232. package/bin/updater/changelog-fetcher.js +62 -0
  233. package/bin/updater/self-update.js +169 -0
  234. package/bin/updater/version-comparator.js +68 -0
  235. package/bin/validate-config.js +92 -0
  236. package/bin/wizard/config-generator.js +112 -0
  237. package/bin/wizard/environment-detector.js +76 -0
  238. package/bin/wizard/setup-wizard.js +237 -0
  239. package/docs/Context/Master-Context.md +701 -0
  240. package/docs/architecture/README.md +35 -0
  241. package/docs/architecture/decision-records-index.md +26 -0
  242. package/docs/ci-cd-integration.md +30 -0
  243. package/docs/ci-quickstart.md +78 -0
  244. package/docs/commands-reference.md +11 -0
  245. package/docs/contributing/CONTRIBUTING.md +38 -0
  246. package/docs/contributing/plugin-authoring.md +50 -0
  247. package/docs/contributing/skill-authoring.md +41 -0
  248. package/docs/enterprise-setup.md +25 -0
  249. package/docs/faq.md +38 -0
  250. package/docs/getting-started.md +36 -0
  251. package/docs/governance-guide.md +23 -0
  252. package/docs/mindforge-md-reference.md +53 -0
  253. package/docs/monorepo-guide.md +26 -0
  254. package/docs/persona-customisation.md +56 -0
  255. package/docs/quick-verify.md +33 -0
  256. package/docs/reference/audit-events.md +53 -0
  257. package/docs/reference/commands.md +82 -0
  258. package/docs/reference/config-reference.md +64 -0
  259. package/docs/reference/sdk-api.md +48 -0
  260. package/docs/reference/skills-api.md +57 -0
  261. package/docs/release-checklist-guide.md +37 -0
  262. package/docs/requirements.md +29 -0
  263. package/docs/sdk-reference.md +27 -0
  264. package/docs/security/SECURITY.md +42 -0
  265. package/docs/security/penetration-test-results.md +31 -0
  266. package/docs/security/threat-model.md +142 -0
  267. package/docs/skills-authoring-guide.md +119 -0
  268. package/docs/skills-publishing-guide.md +21 -0
  269. package/docs/team-setup-guide.md +21 -0
  270. package/docs/troubleshooting.md +119 -0
  271. package/docs/tutorial.md +195 -0
  272. package/docs/upgrade.md +44 -0
  273. package/docs/user-guide.md +131 -0
  274. package/docs/usp-features.md +214 -0
  275. package/eslint.config.mjs +31 -0
  276. package/examples/starter-project/.planning/AUDIT.jsonl +1 -0
  277. package/examples/starter-project/.planning/HANDOFF.json +23 -0
  278. package/examples/starter-project/.planning/PROJECT.md +27 -0
  279. package/examples/starter-project/.planning/STATE.md +10 -0
  280. package/examples/starter-project/MINDFORGE.md +40 -0
  281. package/examples/starter-project/README.md +14 -0
  282. package/implementation-roadmap/day-1-imp/DAY1-HARDEN.md +823 -0
  283. package/implementation-roadmap/day-1-imp/DAY1-IMPLEMENT.md +2459 -0
  284. package/implementation-roadmap/day-1-imp/DAY1-REVIEW.md +288 -0
  285. package/implementation-roadmap/day-2-imp/DAY2-HARDEN.md +954 -0
  286. package/implementation-roadmap/day-2-imp/DAY2-IMPLEMENT.md +2347 -0
  287. package/implementation-roadmap/day-2-imp/DAY2-REVIEW.md +422 -0
  288. package/implementation-roadmap/day-3-imp/DAY3-HARDEN.md +870 -0
  289. package/implementation-roadmap/day-3-imp/DAY3-IMPLEMENT.md +2798 -0
  290. package/implementation-roadmap/day-3-imp/DAY3-REVIEW.md +484 -0
  291. package/implementation-roadmap/day-4-imp/DAY4-HARDEN.md +1087 -0
  292. package/implementation-roadmap/day-4-imp/DAY4-IMPLEMENT.md +2874 -0
  293. package/implementation-roadmap/day-4-imp/DAY4-REVIEW.md +386 -0
  294. package/implementation-roadmap/day-5-imp/DAY5-HARDEN.md +1078 -0
  295. package/implementation-roadmap/day-5-imp/DAY5-IMPLEMENT.md +3151 -0
  296. package/implementation-roadmap/day-5-imp/DAY5-REVIEW.md +345 -0
  297. package/implementation-roadmap/day-6-imp/DAY6-COMPLETE.md +3919 -0
  298. package/implementation-roadmap/day-7-imp-prod/DAY7-PRODUCTION-FINAL.md +4513 -0
  299. package/package.json +31 -0
  300. package/sdk/README.md +69 -0
  301. package/sdk/eslint.config.mjs +34 -0
  302. package/sdk/package-lock.json +1507 -0
  303. package/sdk/package.json +30 -0
  304. package/sdk/src/client.ts +133 -0
  305. package/sdk/src/commands.ts +63 -0
  306. package/sdk/src/events.ts +166 -0
  307. package/sdk/src/index.ts +22 -0
  308. package/sdk/src/types.ts +87 -0
  309. package/sdk/tsconfig.json +13 -0
  310. package/tests/audit.test.js +206 -0
  311. package/tests/ci-mode.test.js +162 -0
  312. package/tests/compaction.test.js +161 -0
  313. package/tests/distribution.test.js +205 -0
  314. package/tests/e2e.test.js +618 -0
  315. package/tests/governance.test.js +130 -0
  316. package/tests/install.test.js +209 -0
  317. package/tests/integrations.test.js +128 -0
  318. package/tests/intelligence.test.js +117 -0
  319. package/tests/metrics.test.js +96 -0
  320. package/tests/migration.test.js +309 -0
  321. package/tests/production.test.js +416 -0
  322. package/tests/sdk.test.js +200 -0
  323. package/tests/skills-platform.test.js +403 -0
  324. package/tests/wave-engine.test.js +338 -0
@@ -0,0 +1,386 @@
1
+ # MindForge — Day 4 Review Prompt
2
+ # Branch: `feat/mindforge-enterprise-integrations`
3
+ # Run this AFTER DAY4-IMPLEMENT.md is complete
4
+
5
+ ---
6
+
7
+ ## CONTEXT
8
+
9
+ You are performing a **Day 4 Architecture & Enterprise Security Review** of the
10
+ MindForge integration layer, governance system, multi-developer HANDOFF, and
11
+ audit archiving.
12
+
13
+ Activate **`architect.md` + `security-reviewer.md`** simultaneously.
14
+
15
+ Day 4 risk profile is unique: every component touches **external systems and
16
+ credentials**. The primary risk is not missing functionality — it is:
17
+ 1. **Credential exposure** — integration configs leaking secrets
18
+ 2. **Governance bypass** — approval workflows that can be circumvented
19
+ 3. **Integration failure blast radius** — a broken Jira sync crashing a phase
20
+ 4. **Data contamination** — wrong data published to Confluence or Jira
21
+
22
+ Review every component with an adversarial mindset: "How would an engineer
23
+ accidentally (or intentionally) bypass this governance control?"
24
+
25
+ ---
26
+
27
+ ## REVIEW PASS 1 — Connection Manager: Security Hardening
28
+
29
+ Read `connection-manager.md` completely.
30
+
31
+ ### Credential safety
32
+ - [ ] Does the spec explicitly say to NEVER log the token value during health checks?
33
+ The health check uses `JIRA_API_TOKEN` in a `curl` command — if `set -x` is on,
34
+ the token appears in the terminal/log. Add: "Ensure shell debug mode (`set -x`)
35
+ is disabled before running any credential-bearing commands."
36
+ - [ ] Base64 encoding of credentials: `echo -n "${JIRA_USER_EMAIL}:${JIRA_API_TOKEN}" | base64`
37
+ This appears in shell history. Add: "Run credential encoding in a subshell
38
+ and unset immediately. Or use a function that avoids shell history."
39
+ - [ ] The rate limiting section says "wait 60 seconds, retry once."
40
+ What if the retry also returns 429? Infinite loop risk.
41
+ Add: "On second 429: stop. Write AUDIT entry. Alert user. Do not retry further."
42
+
43
+ ### Integration availability
44
+ - [ ] "Graceful skip" when a credential is missing is correct.
45
+ But: should a missing Slack credential silently skip a CRITICAL security finding
46
+ notification? That is a governance failure, not a graceful skip.
47
+ Add: "For CRITICAL security finding notifications: if Slack is unconfigured,
48
+ write to STATE.md under 'Undelivered alerts' and display prominently in
49
+ the next /mindforge:status output."
50
+
51
+ - [ ] The INTEGRATIONS-CONFIG.md template includes `SLACK_CHANNEL_ID`.
52
+ Channel IDs are not sensitive but they ARE platform-specific identifiers.
53
+ What happens when the channel is archived or deleted?
54
+ The integration should detect 404 responses from Slack and flag: "SLACK_CHANNEL_ID
55
+ appears invalid. Update INTEGRATIONS-CONFIG.md."
56
+
57
+ ---
58
+
59
+ ## REVIEW PASS 2 — Jira Integration: Correctness
60
+
61
+ Read `jira.md` completely.
62
+
63
+ ### API correctness
64
+ - [ ] The Epic creation payload uses `customfield_10014` for the Epic Name field.
65
+ This field ID varies by Jira instance. It is `10014` on Cloud but may differ.
66
+ Add: "Verify the Epic Name field ID in your Jira instance with:
67
+ `GET /rest/api/3/field` — filter for `name: Epic Name`."
68
+
69
+ - [ ] The Story creation uses `"parent": { "key": "${EPIC_KEY}" }` for epic linking.
70
+ In Jira Cloud, linking a Story to an Epic uses the `parent` field only in
71
+ Next-gen projects. In Classic projects, it uses `customfield_10014`.
72
+ Add: "Check project type before creating stories:
73
+ Next-gen: use `parent.key`. Classic: use `customfield_10014`."
74
+
75
+ - [ ] The transition IDs (11 for Start Progress, 31 for Done) are hardcoded.
76
+ Transition IDs are NOT universal across Jira instances.
77
+ This is a correctness bug — it will fail silently or throw a 400 error.
78
+ Add: "Before using transition IDs, fetch them:
79
+ `GET /rest/api/3/issue/{issueKey}/transitions`
80
+ and match by transition name (not ID). Cache the mapping."
81
+
82
+ - [ ] Rate limiting: "wait 200ms between calls."
83
+ Jira Cloud rate limit is actually enforced per OAuth token, not per request.
84
+ The spec says 10 req/sec — this is approximately correct for Jira Cloud REST.
85
+ Consider: for batch operations (creating 10 stories), is 200ms sufficient?
86
+ Add: "For batch operations creating > 10 tickets: implement exponential backoff
87
+ starting at 500ms."
88
+
89
+ ### jira-sync.json
90
+ - [ ] The sync state file stores `story_keys` but not the inverse: Jira ticket →
91
+ MindForge plan. If a Jira ticket is manually closed, MindForge has no way to
92
+ detect this during sync. Note this limitation explicitly:
93
+ "Jira→MindForge sync (reading Jira state back into MindForge) is out of scope
94
+ for Day 4. MindForge is the source of truth; Jira reflects it."
95
+
96
+ - [ ] The `_warning` field in jira-sync.json is present. ✅ Good.
97
+ But the file also stores `story_keys` and `epic_key` — these are not credentials
98
+ but they are sensitive project data. Should this file be gitignored for
99
+ open-source projects? Flag as a SUGGESTION.
100
+
101
+ ---
102
+
103
+ ## REVIEW PASS 3 — Governance Layer: Bypass Vectors
104
+
105
+ This is the most critical review pass. Governance only works if it cannot be bypassed.
106
+
107
+ ### Change classifier (`change-classifier.md`)
108
+
109
+ - [ ] **Tier 3 pattern matching is file-path-based.**
110
+ What if a developer puts auth code in `src/utils/helper.ts`?
111
+ The file name doesn't match any Tier 3 pattern.
112
+ How does the classifier catch security-critical code NOT in expected paths?
113
+ Recommendation: add code pattern scanning (not just path scanning):
114
+ - Scan the actual diff for `bcrypt`, `argon2`, `jwt.sign`, `jwt.verify`, `stripe.`
115
+ - These code patterns should trigger Tier 3 regardless of file path.
116
+ Flag as MAJOR if code pattern scanning is not in the spec.
117
+
118
+ - [ ] **"Changes affecting > 10 files or > 300 lines" → Tier 2.**
119
+ What about a change that touches 9 files but is a new auth system?
120
+ File count is a proxy for risk, not a perfect signal. Make clear:
121
+ "File count is one signal. Code pattern matching for Tier 3 has higher priority."
122
+
123
+ - [ ] **Classifier is triggered "before every phase execution."**
124
+ But when exactly? Before Wave 1? Before each plan? Before the PR?
125
+ The timing matters: classify before PR creation (diff is known). For execution:
126
+ classify before each PLAN executes (since each plan modifies specific files).
127
+ Clarify the exact trigger point.
128
+
129
+ ### Approval workflow (`approval-workflow.md`)
130
+
131
+ - [ ] **Approver verification uses `git config user.email`.**
132
+ This is trivially spoofable — anyone can set `git config user.email` to any value.
133
+ In a real enterprise environment, approvals need stronger identity verification.
134
+ Acknowledge this limitation: "In the current implementation, approver identity
135
+ is based on git config user.email. For higher-assurance environments, integrate
136
+ with your IdP (Okta, Azure AD) for approval identity verification."
137
+
138
+ - [ ] **"Emergency overrides are limited to users in EMERGENCY_APPROVERS config list."**
139
+ But EMERGENCY_APPROVERS is not defined in INTEGRATIONS-CONFIG.md.
140
+ Add it to the config template.
141
+
142
+ - [ ] **Approval expiry: "poll for approval every 5 minutes."**
143
+ If the MindForge session is not running, polling does not happen.
144
+ An approval request created at 2pm that expires at 2am — if no session runs
145
+ between those times, the expiry is not processed until the next session.
146
+ This is acceptable but should be acknowledged: "Expiry processing is session-dependent.
147
+ Approval requests are not processed when no MindForge session is active."
148
+
149
+ - [ ] **Rejection response:** the spec says "create a fix task and re-request approval."
150
+ But creating a new approval request for the same change after rejection requires
151
+ understanding what was rejected. The fix task should explicitly include the
152
+ rejection reason as context. Verify this is stated in the spec.
153
+
154
+ ### Compliance gates (`compliance-gates.md`)
155
+
156
+ - [ ] **Gate 3 (no secrets) says "Override: Not possible."**
157
+ But what happens in the following scenario: an engineer is writing a test
158
+ that checks the secret detection logic itself and needs to commit a test file
159
+ with a deliberately fake API key?
160
+ Add: "Test files containing deliberately fake secrets for testing purposes
161
+ must use patterns that do not match the detection regex:
162
+ use `TEST_ONLY_FAKE_KEY_abc123` (prefix makes it a non-matching pattern)."
163
+
164
+ - [ ] **Gate 4 (GDPR) is only active "when data-privacy skill was active."**
165
+ What if the developer forgot to load the data-privacy skill for a task that
166
+ adds a PII field? The gate only fires if the skill was loaded — creating a
167
+ detection gap.
168
+ Add: "Gate 4 scans the diff independently of skill loading. If a new database
169
+ column name matches PII patterns (email, phone, address, ssn, dob, etc.),
170
+ trigger Gate 4 regardless of whether data-privacy skill was loaded."
171
+
172
+ ---
173
+
174
+ ## REVIEW PASS 4 — Slack Integration: Security and Reliability
175
+
176
+ Read `slack.md` completely.
177
+
178
+ ### Token exposure
179
+ - [ ] The `send_notification` curl command uses `${SLACK_BOT_TOKEN}` as a Bearer token.
180
+ If the notification fails (connection refused, timeout), does the error message
181
+ include the token? Check: `curl` error output with `-v` flag includes headers.
182
+ Add: "Never run notification commands with `-v` (verbose) flag.
183
+ Error output from failed Slack calls should be captured and logged without
184
+ the Authorization header."
185
+
186
+ ### Block Kit message safety
187
+ - [ ] The phase completion template includes `[project name]` from PROJECT.md.
188
+ Could a project name contain special characters that break the JSON payload?
189
+ (e.g., a project name with double quotes would break the JSON string)
190
+ Add: "Sanitise all dynamic content inserted into Block Kit JSON:
191
+ escape double quotes (`"` → `\"`), newlines (`\n` → `\\n`), and backslashes."
192
+
193
+ ### Thread management
194
+ - [ ] `slack-threads.json` stores thread timestamps indexed by phase/milestone.
195
+ What if a Slack workspace is reset or the channel is recreated?
196
+ Old thread timestamps would point to non-existent threads.
197
+ The Slack API returns an error on `thread_ts` that doesn't exist.
198
+ Add: "On Slack API error with existing thread_ts: clear the thread entry from
199
+ slack-threads.json and create a new thread (don't retry with invalid ts)."
200
+
201
+ ---
202
+
203
+ ## REVIEW PASS 5 — Multi-Developer HANDOFF: Race Conditions
204
+
205
+ Read `multi-handoff.md` and `session-merger.md` completely.
206
+
207
+ ### Race condition risks
208
+ - [ ] **Two developers starting the same plan simultaneously.**
209
+ Developer A starts Plan 03 at 2pm. Developer B also starts Plan 03 at 2:05pm
210
+ (they each had separate sessions and both saw Plan 03 as unstarted).
211
+ Both write to the same files. The second commit wins — the first is overwritten.
212
+ Mitigation: "When starting a plan, check the shared HANDOFF.json `active_developers`
213
+ field. If another developer is listed for the same plan: warn and ask for
214
+ clarification before proceeding."
215
+
216
+ - [ ] **Shared HANDOFF.json update race.**
217
+ Both developers update HANDOFF.json simultaneously when completing tasks.
218
+ The second write overwrites the first.
219
+ Mitigation: "Shared HANDOFF.json must be updated via a git commit to track changes.
220
+ Conflicts will manifest as git merge conflicts — which is the correct resolution
221
+ mechanism for shared file state."
222
+
223
+ - [ ] **`active_developers.last_seen` — stale detection.**
224
+ If Developer A's session crashes (power outage, disconnect), they stay listed
225
+ in `active_developers` forever.
226
+ Add: "Developers listed in `active_developers` with `last_seen` > 4 hours old
227
+ are considered stale. Remove them from the active list automatically on session start."
228
+
229
+ ### Session merger
230
+ - [ ] The merger says "AUDIT.jsonl is already complete — no merge needed."
231
+ This assumes all developers committed their AUDIT.jsonl updates.
232
+ But AUDIT.jsonl is a file — if one developer's entries weren't committed,
233
+ they are lost.
234
+ Add: "Ensure each developer's session commits their AUDIT entries
235
+ as part of task completion commits. AUDIT.jsonl should be committed
236
+ after every task_completed or task_failed entry."
237
+
238
+ ---
239
+
240
+ ## REVIEW PASS 6 — Commands: UX and Logic Gaps
241
+
242
+ ### `/mindforge:audit` command
243
+
244
+ - [ ] **`--summary` output** — the phase count says "Phases covered: 1, 2, 3."
245
+ How is this derived? By reading the `phase` field of AUDIT entries.
246
+ But what if some entries have `"phase": null` (quick tasks, project init)?
247
+ These should be counted separately or grouped as "project-level" entries.
248
+
249
+ - [ ] **`--export` flag** — exports to a user-specified path.
250
+ What if the path is outside the project directory?
251
+ (Path traversal via export: `--export ../../../etc/cron.d/mindforge`)
252
+ Add: "Validate the export path is within the project directory or a
253
+ user-specified safe location. Default to `.planning/` if path traversal detected."
254
+
255
+ - [ ] **`--verify` flag integrity check** — checks timestamps are chronological.
256
+ But the check uses ISO-8601 string comparison.
257
+ ISO-8601 strings are lexicographically sortable, so this works — confirm this
258
+ is explicit in the spec. Add: "Timestamp comparison uses string comparison,
259
+ which is valid for ISO-8601 format in UTC (Z suffix required)."
260
+
261
+ ### `/mindforge:approve` command
262
+
263
+ - [ ] **Listing pending approvals** — requires scanning `.planning/approvals/`.
264
+ What if the directory has many old (expired/resolved) approval files?
265
+ The list command should filter to only `status: pending` entries.
266
+ Verify this is explicit.
267
+
268
+ - [ ] **`--emergency` flag** — "limited to users in EMERGENCY_APPROVERS config list."
269
+ But EMERGENCY_APPROVERS uses `git config user.email` for identity — which is
270
+ spoofable (as noted in Pass 3). Flag consistently: same limitation applies here.
271
+
272
+ ### `/mindforge:complete-milestone` command
273
+
274
+ - [ ] **Archive step** — `cp -r .planning/phases/ .planning/archive/milestone-[name]/`
275
+ This copies the ENTIRE phases directory. For a project with 10 milestones,
276
+ each milestone archives all previous phases too (they were all in `.planning/phases/`).
277
+ This creates exponential archive growth.
278
+ Fix: copy only the phases INCLUDED in this milestone, not all phases.
279
+
280
+ - [ ] **After milestone completion**, what happens to STATE.md?
281
+ Does STATE.md reset to "ready for next milestone"? Or does it accumulate history?
282
+ Specify: "After milestone completion, STATE.md retains the milestone summary
283
+ and is updated with: 'Ready for [next version].' History is preserved in the
284
+ archived phases directory."
285
+
286
+ ---
287
+
288
+ ## REVIEW PASS 7 — GitHub Integration: API Correctness
289
+
290
+ Read `github.md` completely.
291
+
292
+ ### API version
293
+ - [ ] The spec says to use "GitHub REST API v4 (GraphQL) for complex queries,
294
+ REST v3 for mutations."
295
+ But the PR creation uses `POST /repos/{owner}/{repo}/pulls` — this is REST v3,
296
+ not GraphQL v4. The spec is inconsistent.
297
+ Clarify: "Use REST API v3 for all operations. GraphQL v4 is optional for
298
+ complex queries only and requires a different auth header format."
299
+
300
+ ### Branch protection check
301
+ - [ ] The pre-flight branch protection check calls:
302
+ `GET /repos/{repo}/branches/{branch}/protection`
303
+ This returns 404 if branch protection is not configured (not an error).
304
+ The spec must handle 404 as "branch protection not configured" (not a failure).
305
+ Add: "404 from branch protection check means no protection rules are configured.
306
+ This is not an error. Proceed with PR creation."
307
+
308
+ ### PR creation
309
+ - [ ] The spec does not handle the case where the branch has no commits ahead of base.
310
+ GitHub returns a 422 error for PRs with no diff.
311
+ Add: "Before PR creation, verify the branch has at least one commit ahead of base:
312
+ `git log origin/${DEFAULT_BRANCH}..HEAD --oneline | wc -l`
313
+ If zero: alert user and skip PR creation."
314
+
315
+ ---
316
+
317
+ ## REVIEW PASS 8 — Test Suite Quality
318
+
319
+ Read `tests/integrations.test.js` and `tests/governance.test.js`.
320
+
321
+ ### Missing integration tests
322
+ - [ ] No test for Jira rate limiting behaviour (wait and retry)
323
+ - [ ] No test that `jira-sync.json` has a `_warning` field
324
+ - [ ] No test for Confluence idempotency (no duplicate pages created)
325
+ - [ ] No test for Slack `slack-threads.json` schema
326
+ - [ ] No test that `INTEGRATIONS-CONFIG.md` does NOT contain token patterns
327
+
328
+ ### Missing governance tests
329
+ - [ ] No test for the exact Tier 3 code pattern trigger (not just file path)
330
+ Add: verify that a file named `helper.ts` with content including `jwt.sign` is Tier 3
331
+ - [ ] No test for approval expiry detection
332
+ - [ ] No test that emergency override requires `--emergency` flag
333
+ (not just `--reason`)
334
+ - [ ] No test for multi-developer stale detection (> 4 hours)
335
+
336
+ ### Governance test simulation quality
337
+ - [ ] The `classifyChange` function in the test file takes `files` and two boolean flags.
338
+ This simulates the classifier but doesn't test the actual code pattern scanning.
339
+ The test is testing the test's own simulation, not the governance spec's protocol.
340
+ This is acceptable for now but note it: "These tests simulate the classifier logic.
341
+ Integration tests against actual diffs would provide stronger guarantees."
342
+
343
+ ---
344
+
345
+ ## REVIEW OUTPUT FORMAT
346
+
347
+ ```
348
+ ## Finding [N] — [Severity]: [Short title]
349
+
350
+ **File:** [path]
351
+ **Category:** [Credentials / Jira API / Governance / Slack / GitHub / Commands / Tests]
352
+ **Severity:** BLOCKING | MAJOR | MINOR | SUGGESTION
353
+
354
+ **Issue:** [Specific description]
355
+ **Impact:** [What fails if unfixed]
356
+ **Recommendation:** [Exact change]
357
+ ```
358
+
359
+ ---
360
+
361
+ ## REVIEW SUMMARY TABLE
362
+
363
+ ```
364
+ ## Day 4 Review Summary
365
+
366
+ | Category | BLOCKING | MAJOR | MINOR | SUGGESTION |
367
+ |-----------------|----------|-------|-------|------------|
368
+ | Credentials | | | | |
369
+ | Jira API | | | | |
370
+ | Governance | | | | |
371
+ | Slack | | | | |
372
+ | GitHub API | | | | |
373
+ | Commands | | | | |
374
+ | Tests | | | | |
375
+ | **TOTAL** | | | | |
376
+
377
+ ## Verdict
378
+ [ ] ✅ APPROVED — Proceed to DAY4-HARDEN.md
379
+ [ ] ⚠️ APPROVED WITH CONDITIONS — Fix [N] major findings first
380
+ [ ] ❌ NOT APPROVED — [N] blocking findings. Fix and re-review.
381
+ ```
382
+
383
+ ---
384
+
385
+ **Branch:** `feat/mindforge-enterprise-integrations`
386
+ **All BLOCKING items resolved → proceed to DAY4-HARDEN.md**