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.
- package/.agent/CLAUDE.md +462 -0
- package/.agent/forge/help.md +7 -0
- package/.agent/forge/init-project.md +32 -0
- package/.agent/forge/plan-phase.md +30 -0
- package/.agent/mindforge/approve.md +18 -0
- package/.agent/mindforge/audit.md +30 -0
- package/.agent/mindforge/benchmark.md +33 -0
- package/.agent/mindforge/complete-milestone.md +18 -0
- package/.agent/mindforge/debug.md +126 -0
- package/.agent/mindforge/discuss-phase.md +138 -0
- package/.agent/mindforge/execute-phase.md +165 -0
- package/.agent/mindforge/health.md +21 -0
- package/.agent/mindforge/help.md +23 -0
- package/.agent/mindforge/init-org.md +131 -0
- package/.agent/mindforge/init-project.md +155 -0
- package/.agent/mindforge/install-skill.md +15 -0
- package/.agent/mindforge/map-codebase.md +298 -0
- package/.agent/mindforge/metrics.md +22 -0
- package/.agent/mindforge/migrate.md +40 -0
- package/.agent/mindforge/milestone.md +12 -0
- package/.agent/mindforge/next.md +105 -0
- package/.agent/mindforge/plan-phase.md +125 -0
- package/.agent/mindforge/plugins.md +40 -0
- package/.agent/mindforge/pr-review.md +41 -0
- package/.agent/mindforge/profile-team.md +23 -0
- package/.agent/mindforge/publish-skill.md +19 -0
- package/.agent/mindforge/quick.md +135 -0
- package/.agent/mindforge/release.md +10 -0
- package/.agent/mindforge/retrospective.md +26 -0
- package/.agent/mindforge/review.md +157 -0
- package/.agent/mindforge/security-scan.md +233 -0
- package/.agent/mindforge/ship.md +100 -0
- package/.agent/mindforge/skills.md +141 -0
- package/.agent/mindforge/status.md +104 -0
- package/.agent/mindforge/sync-confluence.md +11 -0
- package/.agent/mindforge/sync-jira.md +12 -0
- package/.agent/mindforge/tokens.md +8 -0
- package/.agent/mindforge/update.md +42 -0
- package/.agent/mindforge/verify-phase.md +62 -0
- package/.agent/mindforge/workspace.md +29 -0
- package/.claude/CLAUDE.md +462 -0
- package/.claude/commands/forge/help.md +7 -0
- package/.claude/commands/forge/init-project.md +32 -0
- package/.claude/commands/forge/plan-phase.md +30 -0
- package/.claude/commands/mindforge/approve.md +18 -0
- package/.claude/commands/mindforge/audit.md +30 -0
- package/.claude/commands/mindforge/benchmark.md +33 -0
- package/.claude/commands/mindforge/complete-milestone.md +18 -0
- package/.claude/commands/mindforge/debug.md +126 -0
- package/.claude/commands/mindforge/discuss-phase.md +138 -0
- package/.claude/commands/mindforge/execute-phase.md +165 -0
- package/.claude/commands/mindforge/health.md +21 -0
- package/.claude/commands/mindforge/help.md +23 -0
- package/.claude/commands/mindforge/init-org.md +131 -0
- package/.claude/commands/mindforge/init-project.md +155 -0
- package/.claude/commands/mindforge/install-skill.md +15 -0
- package/.claude/commands/mindforge/map-codebase.md +298 -0
- package/.claude/commands/mindforge/metrics.md +22 -0
- package/.claude/commands/mindforge/migrate.md +40 -0
- package/.claude/commands/mindforge/milestone.md +12 -0
- package/.claude/commands/mindforge/next.md +105 -0
- package/.claude/commands/mindforge/plan-phase.md +125 -0
- package/.claude/commands/mindforge/plugins.md +40 -0
- package/.claude/commands/mindforge/pr-review.md +41 -0
- package/.claude/commands/mindforge/profile-team.md +23 -0
- package/.claude/commands/mindforge/publish-skill.md +19 -0
- package/.claude/commands/mindforge/quick.md +135 -0
- package/.claude/commands/mindforge/release.md +10 -0
- package/.claude/commands/mindforge/retrospective.md +26 -0
- package/.claude/commands/mindforge/review.md +157 -0
- package/.claude/commands/mindforge/security-scan.md +233 -0
- package/.claude/commands/mindforge/ship.md +100 -0
- package/.claude/commands/mindforge/skills.md +141 -0
- package/.claude/commands/mindforge/status.md +104 -0
- package/.claude/commands/mindforge/sync-confluence.md +11 -0
- package/.claude/commands/mindforge/sync-jira.md +12 -0
- package/.claude/commands/mindforge/tokens.md +8 -0
- package/.claude/commands/mindforge/update.md +42 -0
- package/.claude/commands/mindforge/verify-phase.md +62 -0
- package/.claude/commands/mindforge/workspace.md +29 -0
- package/.forge/org/CONVENTIONS.md +0 -0
- package/.forge/org/ORG.md +0 -0
- package/.forge/org/SECURITY.md +0 -0
- package/.forge/org/TOOLS.md +0 -0
- package/.forge/personas/analyst.md +0 -0
- package/.forge/personas/architect.md +0 -0
- package/.forge/personas/debug-specialist.md +0 -0
- package/.forge/personas/developer.md +26 -0
- package/.forge/personas/qa-engineer.md +0 -0
- package/.forge/personas/release-manager.md +0 -0
- package/.forge/personas/security-reviewer.md +33 -0
- package/.forge/personas/tech-writer.md +0 -0
- package/.forge/skills/api-design/SKILL.md +0 -0
- package/.forge/skills/code-quality/SKILL.md +0 -0
- package/.forge/skills/documentation/SKILL.md +0 -0
- package/.forge/skills/security-review/SKILL.md +23 -0
- package/.forge/skills/testing-standards/SKILL.md +27 -0
- package/.github/workflows/mindforge-ci.yml +224 -0
- package/.gitlab-ci-mindforge.yml +18 -0
- package/.mindforge/MINDFORGE-SCHEMA.json +165 -0
- package/.mindforge/audit/AUDIT-SCHEMA.md +451 -0
- package/.mindforge/ci/ci-config-schema.md +21 -0
- package/.mindforge/ci/ci-mode.md +179 -0
- package/.mindforge/ci/github-actions-adapter.md +224 -0
- package/.mindforge/ci/gitlab-ci-adapter.md +31 -0
- package/.mindforge/ci/jenkins-adapter.md +44 -0
- package/.mindforge/distribution/registry-client.md +166 -0
- package/.mindforge/distribution/registry-schema.md +96 -0
- package/.mindforge/distribution/skill-publisher.md +44 -0
- package/.mindforge/distribution/skill-validator.md +74 -0
- package/.mindforge/engine/compaction-protocol.md +182 -0
- package/.mindforge/engine/context-injector.md +128 -0
- package/.mindforge/engine/dependency-parser.md +113 -0
- package/.mindforge/engine/skills/conflict-resolver.md +69 -0
- package/.mindforge/engine/skills/loader.md +184 -0
- package/.mindforge/engine/skills/registry.md +98 -0
- package/.mindforge/engine/skills/versioning.md +75 -0
- package/.mindforge/engine/verification-pipeline.md +111 -0
- package/.mindforge/engine/wave-executor.md +235 -0
- package/.mindforge/governance/GOVERNANCE-CONFIG.md +17 -0
- package/.mindforge/governance/approval-workflow.md +37 -0
- package/.mindforge/governance/change-classifier.md +63 -0
- package/.mindforge/governance/compliance-gates.md +31 -0
- package/.mindforge/integrations/confluence.md +27 -0
- package/.mindforge/integrations/connection-manager.md +163 -0
- package/.mindforge/integrations/github.md +25 -0
- package/.mindforge/integrations/gitlab.md +13 -0
- package/.mindforge/integrations/jira.md +102 -0
- package/.mindforge/integrations/slack.md +41 -0
- package/.mindforge/intelligence/antipattern-detector.md +75 -0
- package/.mindforge/intelligence/difficulty-scorer.md +55 -0
- package/.mindforge/intelligence/health-engine.md +208 -0
- package/.mindforge/intelligence/skill-gap-analyser.md +40 -0
- package/.mindforge/intelligence/smart-compaction.md +71 -0
- package/.mindforge/metrics/METRICS-SCHEMA.md +42 -0
- package/.mindforge/metrics/quality-tracker.md +32 -0
- package/.mindforge/monorepo/cross-package-planner.md +114 -0
- package/.mindforge/monorepo/dependency-graph-builder.md +32 -0
- package/.mindforge/monorepo/workspace-detector.md +129 -0
- package/.mindforge/org/CONVENTIONS.md +62 -0
- package/.mindforge/org/ORG.md +51 -0
- package/.mindforge/org/SECURITY.md +50 -0
- package/.mindforge/org/TOOLS.md +53 -0
- package/.mindforge/org/integrations/INTEGRATIONS-CONFIG.md +58 -0
- package/.mindforge/org/skills/MANIFEST.md +38 -0
- package/.mindforge/personas/analyst.md +52 -0
- package/.mindforge/personas/architect.md +75 -0
- package/.mindforge/personas/debug-specialist.md +52 -0
- package/.mindforge/personas/developer.md +85 -0
- package/.mindforge/personas/overrides/README.md +85 -0
- package/.mindforge/personas/qa-engineer.md +61 -0
- package/.mindforge/personas/release-manager.md +76 -0
- package/.mindforge/personas/security-reviewer.md +91 -0
- package/.mindforge/personas/tech-writer.md +51 -0
- package/.mindforge/plugins/PLUGINS-MANIFEST.md +23 -0
- package/.mindforge/plugins/plugin-loader.md +93 -0
- package/.mindforge/plugins/plugin-registry.md +44 -0
- package/.mindforge/plugins/plugin-schema.md +68 -0
- package/.mindforge/pr-review/ai-reviewer.md +266 -0
- package/.mindforge/pr-review/finding-formatter.md +46 -0
- package/.mindforge/pr-review/review-prompt-templates.md +44 -0
- package/.mindforge/production/compatibility-layer.md +39 -0
- package/.mindforge/production/migration-engine.md +52 -0
- package/.mindforge/production/production-checklist.md +165 -0
- package/.mindforge/production/token-optimiser.md +68 -0
- package/.mindforge/skills/accessibility/SKILL.md +106 -0
- package/.mindforge/skills/api-design/SKILL.md +98 -0
- package/.mindforge/skills/code-quality/SKILL.md +88 -0
- package/.mindforge/skills/data-privacy/SKILL.md +126 -0
- package/.mindforge/skills/database-patterns/SKILL.md +192 -0
- package/.mindforge/skills/documentation/SKILL.md +91 -0
- package/.mindforge/skills/incident-response/SKILL.md +180 -0
- package/.mindforge/skills/performance/SKILL.md +120 -0
- package/.mindforge/skills/security-review/SKILL.md +83 -0
- package/.mindforge/skills/testing-standards/SKILL.md +97 -0
- package/.mindforge/team/TEAM-PROFILE.md +42 -0
- package/.mindforge/team/multi-handoff.md +23 -0
- package/.mindforge/team/profiles/README.md +13 -0
- package/.mindforge/team/session-merger.md +18 -0
- package/.planning/ARCHITECTURE.md +0 -0
- package/.planning/AUDIT.jsonl +0 -0
- package/.planning/HANDOFF.json +28 -0
- package/.planning/PROJECT.md +33 -0
- package/.planning/RELEASE-CHECKLIST.md +68 -0
- package/.planning/REQUIREMENTS.md +0 -0
- package/.planning/ROADMAP.md +0 -0
- package/.planning/STATE.md +31 -0
- package/.planning/approvals/.gitkeep +1 -0
- package/.planning/archive/.gitkeep +1 -0
- package/.planning/audit-archive/.gitkeep +1 -0
- package/.planning/decisions/.gitkeep +0 -0
- package/.planning/decisions/ADR-001-handoff-tracking.md +41 -0
- package/.planning/decisions/ADR-002-markdown-commands.md +46 -0
- package/.planning/decisions/ADR-003-skills-trigger-model.md +37 -0
- package/.planning/decisions/ADR-004-wave-parallelism-model.md +45 -0
- package/.planning/decisions/ADR-005-append-only-audit-log.md +51 -0
- package/.planning/decisions/ADR-006-tiered-skills-system.md +22 -0
- package/.planning/decisions/ADR-007-trigger-keyword-model.md +22 -0
- package/.planning/decisions/ADR-008-just-in-time-skill-loading.md +29 -0
- package/.planning/decisions/ADR-009-enterprise-integration-retry-policy.md +8 -0
- package/.planning/decisions/ADR-010-governance-tier-escalation.md +8 -0
- package/.planning/decisions/ADR-011-multi-developer-handoff-contract.md +8 -0
- package/.planning/decisions/ADR-012-intelligence-feedback-loops.md +19 -0
- package/.planning/decisions/ADR-013-mindforge-md-constitution.md +16 -0
- package/.planning/decisions/ADR-014-metrics-as-signals-not-evaluation.md +15 -0
- package/.planning/decisions/ADR-015-npm-based-skill-registry.md +26 -0
- package/.planning/decisions/ADR-016-ci-exit-code-0-on-timeout.md +27 -0
- package/.planning/decisions/ADR-017-sdk-localhost-only.md +28 -0
- package/.planning/decisions/ADR-018-installer-self-install-detection.md +15 -0
- package/.planning/decisions/ADR-019-self-update-scope-preservation.md +14 -0
- package/.planning/decisions/ADR-020-v1.0.0-stable-interface-contract.md +23 -0
- package/.planning/jira-sync.json +9 -0
- package/.planning/milestones/.gitkeep +1 -0
- package/.planning/phases/day1/REVIEW-DAY1.md +50 -0
- package/.planning/phases/day1/SECURITY-REVIEW-DAY1.md +15 -0
- package/.planning/phases/day2/REVIEW-DAY2.md +521 -0
- package/.planning/phases/day3/REVIEW-DAY3.md +234 -0
- package/.planning/slack-threads.json +6 -0
- package/CHANGELOG.md +175 -0
- package/LICENSE +21 -0
- package/MINDFORGE.md +76 -0
- package/README.md +182 -0
- package/RELEASENOTES.md +41 -0
- package/SECURITY.md +4 -0
- package/bin/install.js +120 -0
- package/bin/installer-core.js +292 -0
- package/bin/migrations/0.1.0-to-0.5.0.js +37 -0
- package/bin/migrations/0.5.0-to-0.6.0.js +17 -0
- package/bin/migrations/0.6.0-to-1.0.0.js +100 -0
- package/bin/migrations/migrate.js +151 -0
- package/bin/migrations/schema-versions.js +64 -0
- package/bin/updater/changelog-fetcher.js +62 -0
- package/bin/updater/self-update.js +169 -0
- package/bin/updater/version-comparator.js +68 -0
- package/bin/validate-config.js +92 -0
- package/bin/wizard/config-generator.js +112 -0
- package/bin/wizard/environment-detector.js +76 -0
- package/bin/wizard/setup-wizard.js +237 -0
- package/docs/Context/Master-Context.md +701 -0
- package/docs/architecture/README.md +35 -0
- package/docs/architecture/decision-records-index.md +26 -0
- package/docs/ci-cd-integration.md +30 -0
- package/docs/ci-quickstart.md +78 -0
- package/docs/commands-reference.md +11 -0
- package/docs/contributing/CONTRIBUTING.md +38 -0
- package/docs/contributing/plugin-authoring.md +50 -0
- package/docs/contributing/skill-authoring.md +41 -0
- package/docs/enterprise-setup.md +25 -0
- package/docs/faq.md +38 -0
- package/docs/getting-started.md +36 -0
- package/docs/governance-guide.md +23 -0
- package/docs/mindforge-md-reference.md +53 -0
- package/docs/monorepo-guide.md +26 -0
- package/docs/persona-customisation.md +56 -0
- package/docs/quick-verify.md +33 -0
- package/docs/reference/audit-events.md +53 -0
- package/docs/reference/commands.md +82 -0
- package/docs/reference/config-reference.md +64 -0
- package/docs/reference/sdk-api.md +48 -0
- package/docs/reference/skills-api.md +57 -0
- package/docs/release-checklist-guide.md +37 -0
- package/docs/requirements.md +29 -0
- package/docs/sdk-reference.md +27 -0
- package/docs/security/SECURITY.md +42 -0
- package/docs/security/penetration-test-results.md +31 -0
- package/docs/security/threat-model.md +142 -0
- package/docs/skills-authoring-guide.md +119 -0
- package/docs/skills-publishing-guide.md +21 -0
- package/docs/team-setup-guide.md +21 -0
- package/docs/troubleshooting.md +119 -0
- package/docs/tutorial.md +195 -0
- package/docs/upgrade.md +44 -0
- package/docs/user-guide.md +131 -0
- package/docs/usp-features.md +214 -0
- package/eslint.config.mjs +31 -0
- package/examples/starter-project/.planning/AUDIT.jsonl +1 -0
- package/examples/starter-project/.planning/HANDOFF.json +23 -0
- package/examples/starter-project/.planning/PROJECT.md +27 -0
- package/examples/starter-project/.planning/STATE.md +10 -0
- package/examples/starter-project/MINDFORGE.md +40 -0
- package/examples/starter-project/README.md +14 -0
- package/implementation-roadmap/day-1-imp/DAY1-HARDEN.md +823 -0
- package/implementation-roadmap/day-1-imp/DAY1-IMPLEMENT.md +2459 -0
- package/implementation-roadmap/day-1-imp/DAY1-REVIEW.md +288 -0
- package/implementation-roadmap/day-2-imp/DAY2-HARDEN.md +954 -0
- package/implementation-roadmap/day-2-imp/DAY2-IMPLEMENT.md +2347 -0
- package/implementation-roadmap/day-2-imp/DAY2-REVIEW.md +422 -0
- package/implementation-roadmap/day-3-imp/DAY3-HARDEN.md +870 -0
- package/implementation-roadmap/day-3-imp/DAY3-IMPLEMENT.md +2798 -0
- package/implementation-roadmap/day-3-imp/DAY3-REVIEW.md +484 -0
- package/implementation-roadmap/day-4-imp/DAY4-HARDEN.md +1087 -0
- package/implementation-roadmap/day-4-imp/DAY4-IMPLEMENT.md +2874 -0
- package/implementation-roadmap/day-4-imp/DAY4-REVIEW.md +386 -0
- package/implementation-roadmap/day-5-imp/DAY5-HARDEN.md +1078 -0
- package/implementation-roadmap/day-5-imp/DAY5-IMPLEMENT.md +3151 -0
- package/implementation-roadmap/day-5-imp/DAY5-REVIEW.md +345 -0
- package/implementation-roadmap/day-6-imp/DAY6-COMPLETE.md +3919 -0
- package/implementation-roadmap/day-7-imp-prod/DAY7-PRODUCTION-FINAL.md +4513 -0
- package/package.json +31 -0
- package/sdk/README.md +69 -0
- package/sdk/eslint.config.mjs +34 -0
- package/sdk/package-lock.json +1507 -0
- package/sdk/package.json +30 -0
- package/sdk/src/client.ts +133 -0
- package/sdk/src/commands.ts +63 -0
- package/sdk/src/events.ts +166 -0
- package/sdk/src/index.ts +22 -0
- package/sdk/src/types.ts +87 -0
- package/sdk/tsconfig.json +13 -0
- package/tests/audit.test.js +206 -0
- package/tests/ci-mode.test.js +162 -0
- package/tests/compaction.test.js +161 -0
- package/tests/distribution.test.js +205 -0
- package/tests/e2e.test.js +618 -0
- package/tests/governance.test.js +130 -0
- package/tests/install.test.js +209 -0
- package/tests/integrations.test.js +128 -0
- package/tests/intelligence.test.js +117 -0
- package/tests/metrics.test.js +96 -0
- package/tests/migration.test.js +309 -0
- package/tests/production.test.js +416 -0
- package/tests/sdk.test.js +200 -0
- package/tests/skills-platform.test.js +403 -0
- 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**
|