mindforge-cc 2.1.4 → 2.3.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 +14 -0
- package/.agent/forge/help.md +4 -0
- package/.agent/forge/init-project.md +4 -0
- package/.agent/forge/plan-phase.md +4 -0
- package/.agent/mindforge/approve.md +4 -0
- package/.agent/mindforge/audit.md +4 -0
- package/.agent/mindforge/auto.md +4 -0
- package/.agent/mindforge/benchmark.md +4 -0
- package/.agent/mindforge/browse.md +4 -0
- package/.agent/mindforge/complete-milestone.md +4 -0
- package/.agent/mindforge/costs.md +4 -0
- package/.agent/mindforge/cross-review.md +4 -0
- package/.agent/mindforge/dashboard.md +4 -0
- package/.agent/mindforge/debug.md +4 -0
- package/.agent/mindforge/discuss-phase.md +4 -0
- package/.agent/mindforge/execute-phase.md +4 -0
- package/.agent/mindforge/health.md +4 -0
- package/.agent/mindforge/help.md +4 -0
- package/.agent/mindforge/init-org.md +4 -0
- package/.agent/mindforge/init-project.md +4 -0
- package/.agent/mindforge/install-skill.md +4 -0
- package/.agent/mindforge/learn.md +4 -0
- package/.agent/mindforge/map-codebase.md +4 -0
- package/.agent/mindforge/marketplace.md +4 -0
- package/.agent/mindforge/metrics.md +4 -0
- package/.agent/mindforge/migrate.md +4 -0
- package/.agent/mindforge/milestone.md +4 -0
- package/.agent/mindforge/new-runtime.md +4 -0
- package/.agent/mindforge/next.md +4 -0
- package/.agent/mindforge/plan-phase.md +4 -0
- package/.agent/mindforge/plugins.md +4 -0
- package/.agent/mindforge/pr-review.md +4 -0
- package/.agent/mindforge/profile-team.md +4 -0
- package/.agent/mindforge/publish-skill.md +4 -0
- package/.agent/mindforge/qa.md +4 -0
- package/.agent/mindforge/quick.md +4 -0
- package/.agent/mindforge/release.md +4 -0
- package/.agent/mindforge/remember.md +4 -0
- package/.agent/mindforge/research.md +4 -0
- package/.agent/mindforge/retrospective.md +4 -0
- package/.agent/mindforge/review.md +4 -0
- package/.agent/mindforge/security-scan.md +4 -0
- package/.agent/mindforge/ship.md +4 -0
- package/.agent/mindforge/skills.md +4 -0
- package/.agent/mindforge/status.md +4 -0
- package/.agent/mindforge/steer.md +4 -0
- package/.agent/mindforge/sync-confluence.md +4 -0
- package/.agent/mindforge/sync-jira.md +4 -0
- package/.agent/mindforge/tokens.md +4 -0
- package/.agent/mindforge/update.md +4 -0
- package/.agent/mindforge/verify-phase.md +4 -0
- package/.agent/mindforge/workspace.md +4 -0
- package/.agent/workflows/forge:help.md +10 -0
- package/.agent/workflows/forge:init-project.md +35 -0
- package/.agent/workflows/forge:plan-phase.md +33 -0
- package/.agent/workflows/mindforge:add-backlog.md +24 -0
- package/.agent/workflows/mindforge:agent.md +25 -0
- package/.agent/workflows/mindforge:approve.md +21 -0
- package/.agent/workflows/mindforge:audit.md +33 -0
- package/.agent/workflows/mindforge:auto.md +25 -0
- package/.agent/workflows/mindforge:benchmark.md +36 -0
- package/.agent/workflows/mindforge:browse.md +29 -0
- package/.agent/workflows/mindforge:complete-milestone.md +21 -0
- package/.agent/workflows/mindforge:costs.md +14 -0
- package/.agent/workflows/mindforge:cross-review.md +20 -0
- package/.agent/workflows/mindforge:dashboard.md +101 -0
- package/.agent/workflows/mindforge:debug.md +129 -0
- package/.agent/workflows/mindforge:discuss-phase.md +141 -0
- package/.agent/workflows/mindforge:do.md +25 -0
- package/.agent/workflows/mindforge:execute-phase.md +193 -0
- package/.agent/workflows/mindforge:health.md +24 -0
- package/.agent/workflows/mindforge:help.md +26 -0
- package/.agent/workflows/mindforge:init-org.md +134 -0
- package/.agent/workflows/mindforge:init-project.md +169 -0
- package/.agent/workflows/mindforge:install-skill.md +27 -0
- package/.agent/workflows/mindforge:learn.md +146 -0
- package/.agent/workflows/mindforge:map-codebase.md +301 -0
- package/.agent/workflows/mindforge:marketplace.md +123 -0
- package/.agent/workflows/mindforge:metrics.md +25 -0
- package/.agent/workflows/mindforge:migrate.md +43 -0
- package/.agent/workflows/mindforge:milestone.md +15 -0
- package/.agent/workflows/mindforge:new-runtime.md +22 -0
- package/.agent/workflows/mindforge:next.md +108 -0
- package/.agent/workflows/mindforge:note.md +27 -0
- package/.agent/workflows/mindforge:plan-phase.md +128 -0
- package/.agent/workflows/mindforge:plant-seed.md +24 -0
- package/.agent/workflows/mindforge:plugins.md +43 -0
- package/.agent/workflows/mindforge:pr-review.md +44 -0
- package/.agent/workflows/mindforge:profile-team.md +26 -0
- package/.agent/workflows/mindforge:publish-skill.md +22 -0
- package/.agent/workflows/mindforge:qa.md +19 -0
- package/.agent/workflows/mindforge:quick.md +138 -0
- package/.agent/workflows/mindforge:release.md +13 -0
- package/.agent/workflows/mindforge:remember.md +29 -0
- package/.agent/workflows/mindforge:research.md +15 -0
- package/.agent/workflows/mindforge:retrospective.md +29 -0
- package/.agent/workflows/mindforge:review-backlog.md +26 -0
- package/.agent/workflows/mindforge:review.md +160 -0
- package/.agent/workflows/mindforge:security-scan.md +236 -0
- package/.agent/workflows/mindforge:session-report.md +31 -0
- package/.agent/workflows/mindforge:ship.md +103 -0
- package/.agent/workflows/mindforge:skills.md +144 -0
- package/.agent/workflows/mindforge:status.md +107 -0
- package/.agent/workflows/mindforge:steer.md +16 -0
- package/.agent/workflows/mindforge:sync-confluence.md +14 -0
- package/.agent/workflows/mindforge:sync-jira.md +15 -0
- package/.agent/workflows/mindforge:tokens.md +11 -0
- package/.agent/workflows/mindforge:ui-phase.md +27 -0
- package/.agent/workflows/mindforge:ui-review.md +28 -0
- package/.agent/workflows/mindforge:update.md +45 -0
- package/.agent/workflows/mindforge:validate-phase.md +25 -0
- package/.agent/workflows/mindforge:verify-phase.md +65 -0
- package/.agent/workflows/mindforge:workspace.md +32 -0
- package/.agent/workflows/mindforge:workstreams.md +27 -0
- package/.claude/CLAUDE.md +14 -0
- package/bin/installer-core.js +115 -19
- package/bin/wizard/theme.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Display a rich dashboard of the current project state.
|
|
3
|
+
---
|
|
4
|
+
# MindForge — Status Command
|
|
5
|
+
# Usage: /mindforge:status
|
|
6
|
+
|
|
7
|
+
Display a rich dashboard of the current project state.
|
|
8
|
+
Pull data from STATE.md, AUDIT.jsonl, REQUIREMENTS.md, and the phases directory.
|
|
9
|
+
|
|
10
|
+
## Dashboard sections
|
|
11
|
+
|
|
12
|
+
### Section 1 — Project header
|
|
13
|
+
```
|
|
14
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
15
|
+
⚡ MindForge Status — [Project Name]
|
|
16
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
17
|
+
Last updated : [STATE.md last updated timestamp]
|
|
18
|
+
Current phase: Phase [N] — [phase description]
|
|
19
|
+
Status : [status from STATE.md]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Section 2 — Phase progress
|
|
23
|
+
```
|
|
24
|
+
Phase Progress
|
|
25
|
+
───────────────────────────────────────────────────────
|
|
26
|
+
Phase 1 [████████████████████] 100% — Complete ✅
|
|
27
|
+
Phase 2 [████████░░░░░░░░░░░░] 40% — In progress
|
|
28
|
+
Phase 3 [░░░░░░░░░░░░░░░░░░░░] 0% — Not started
|
|
29
|
+
Phase 4 [░░░░░░░░░░░░░░░░░░░░] 0% — Not started
|
|
30
|
+
```
|
|
31
|
+
Calculate percentage from: tasks with SUMMARY files / total tasks in phase.
|
|
32
|
+
Count ONLY SUMMARY files that contain `Status: Completed ✅` (or `Status` + `Completed`).
|
|
33
|
+
Do not count failed tasks as progress.
|
|
34
|
+
If VERIFICATION.md is missing for a phase: label it "In progress" not "0% verified".
|
|
35
|
+
|
|
36
|
+
### Section 3 — Requirements coverage
|
|
37
|
+
Read REQUIREMENTS.md and count:
|
|
38
|
+
- Total v1 requirements
|
|
39
|
+
- Requirements with a passing test (from VERIFICATION.md files)
|
|
40
|
+
- Requirements implemented but untested
|
|
41
|
+
- Requirements not yet started
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Requirements (v1)
|
|
45
|
+
───────────────────────────────────────────────────────
|
|
46
|
+
Total : [N]
|
|
47
|
+
✅ Done + tested : [N]
|
|
48
|
+
⚠️ Done, no test : [N]
|
|
49
|
+
🔴 Not started : [N]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Section 4 — Recent activity (from AUDIT.jsonl)
|
|
53
|
+
Read the last 10 entries from AUDIT.jsonl and display:
|
|
54
|
+
```
|
|
55
|
+
Recent Activity
|
|
56
|
+
───────────────────────────────────────────────────────
|
|
57
|
+
[timestamp] task_completed Plan 03: User API endpoints ✅
|
|
58
|
+
[timestamp] task_completed Plan 02: Product model ✅
|
|
59
|
+
[timestamp] task_started Plan 03: User API endpoints
|
|
60
|
+
[timestamp] task_completed Plan 01: User model ✅
|
|
61
|
+
[timestamp] context_compaction Phase 2, Plan 03 (72% context)
|
|
62
|
+
```
|
|
63
|
+
If AUDIT.jsonl is empty or missing, display:
|
|
64
|
+
```
|
|
65
|
+
Recent Activity
|
|
66
|
+
───────────────────────────────────────────────────────
|
|
67
|
+
No activity logged yet. Activity will appear here
|
|
68
|
+
after running /mindforge:execute-phase.
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Section 5 — Open issues
|
|
72
|
+
Check for:
|
|
73
|
+
- Any open SECURITY-REVIEW files with CRITICAL or HIGH findings
|
|
74
|
+
- Any BUGS.md files with open issues
|
|
75
|
+
- Any failed tasks in WAVE-REPORT files
|
|
76
|
+
- Any blockers in STATE.md
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
Open Issues
|
|
80
|
+
───────────────────────────────────────────────────────
|
|
81
|
+
🔴 CRITICAL: [if any — from SECURITY-REVIEW]
|
|
82
|
+
🟠 HIGH: [if any]
|
|
83
|
+
✅ No open issues
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Section 6 — Next action
|
|
87
|
+
```
|
|
88
|
+
Next Action
|
|
89
|
+
───────────────────────────────────────────────────────
|
|
90
|
+
[What STATE.md says the next action is]
|
|
91
|
+
Run: /mindforge:next
|
|
92
|
+
to auto-execute the next step.
|
|
93
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Data sources (in priority order)
|
|
97
|
+
1. STATE.md — authoritative for current status
|
|
98
|
+
2. AUDIT.jsonl — authoritative for history
|
|
99
|
+
3. REQUIREMENTS.md — authoritative for scope
|
|
100
|
+
4. VERIFICATION.md files — authoritative for test coverage
|
|
101
|
+
5. WAVE-REPORT files — authoritative for execution history
|
|
102
|
+
6. HANDOFF.json — authoritative for session state
|
|
103
|
+
|
|
104
|
+
## Performance notes
|
|
105
|
+
- For recent activity, read only the last 500 bytes of AUDIT.jsonl:
|
|
106
|
+
`tail -c 500 .planning/AUDIT.jsonl | [parse last complete JSON objects]`
|
|
107
|
+
- For requirement counts, count lines starting with `| FR-` instead of parsing the whole file.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Injects mid-execution guidance into the running autonomous engine.
|
|
3
|
+
---
|
|
4
|
+
# /mindforge:steer "[instruction]"
|
|
5
|
+
|
|
6
|
+
**Purpose**: Injects mid-execution guidance into the running autonomous engine.
|
|
7
|
+
Steering guidance is applied at the next task boundary to course-correct MindForge.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
- `/mindforge:steer "Use the new logger in all created files"`
|
|
11
|
+
- `/mindforge:steer --task 3-05 "This plan is too broad, focus on login only"`
|
|
12
|
+
- `/mindforge:steer --cancel` (Clears the steering queue)
|
|
13
|
+
|
|
14
|
+
## Precedence
|
|
15
|
+
- Steering instructions take precedence over the original `PLAN-N-MM.md` actions.
|
|
16
|
+
- Steering cannot override core security constraints or governance gates.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Publish approved planning artifacts to Confluence. Usage:
|
|
3
|
+
---
|
|
4
|
+
Publish approved planning artifacts to Confluence. Usage:
|
|
5
|
+
`/mindforge:sync-confluence [--architecture] [--phase N] [--milestone name]`
|
|
6
|
+
|
|
7
|
+
## Behaviour
|
|
8
|
+
- verify Confluence availability through `connection-manager.md`
|
|
9
|
+
- publish idempotently by existing page title or page ID
|
|
10
|
+
- never publish secrets, raw approval notes, or raw audit logs
|
|
11
|
+
- log success, skip, or failure to AUDIT
|
|
12
|
+
|
|
13
|
+
Publishing failures are non-fatal and create a pending manual action in
|
|
14
|
+
`STATE.md`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Synchronise MindForge phase and plan metadata to Jira. Usage:
|
|
3
|
+
---
|
|
4
|
+
Synchronise MindForge phase and plan metadata to Jira. Usage:
|
|
5
|
+
`/mindforge:sync-jira [--phase N] [--plan M]`
|
|
6
|
+
|
|
7
|
+
## Behaviour
|
|
8
|
+
- verify Jira availability through `connection-manager.md`
|
|
9
|
+
- create or update Epic and Story mappings in `.planning/jira-sync.json`
|
|
10
|
+
- use dynamic transition lookup, never hardcoded IDs
|
|
11
|
+
- preserve manual Jira edits
|
|
12
|
+
- log all actions to AUDIT
|
|
13
|
+
|
|
14
|
+
Integration failures are non-fatal and should be written to `STATE.md` for
|
|
15
|
+
manual retry.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Display token consumption profile and efficiency analysis.
|
|
3
|
+
---
|
|
4
|
+
# MindForge — Token Usage Command
|
|
5
|
+
# Usage: /mindforge:tokens [--phase N] [--session ID] [--window short|medium|long] [--optimise]
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
Display token consumption profile and efficiency analysis.
|
|
9
|
+
Helps identify where tokens are being spent and how to reduce waste.
|
|
10
|
+
|
|
11
|
+
## Default output (no flags — last 5 sessions)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate a UI Design Contract (UI-SPEC.md) for the current phase
|
|
3
|
+
---
|
|
4
|
+
<objective>
|
|
5
|
+
Generate a detailed UI design contract (UI-SPEC.md) for a frontend development phase to ensure consistent spacing, typography, color palettes, and accessibility standards before implementation.
|
|
6
|
+
</objective>
|
|
7
|
+
|
|
8
|
+
<execution_context>
|
|
9
|
+
.claude/commands/mindforge/ui-phase.md
|
|
10
|
+
</execution_context>
|
|
11
|
+
|
|
12
|
+
<context>
|
|
13
|
+
Arguments: $ARGUMENTS (The phase number [N], optional)
|
|
14
|
+
Configuration: MINDFORGE.md `UI_PHASE_ACCESSIBILITY_STANDARD`
|
|
15
|
+
State: Resolves the phase from STATE.md if N is not provided.
|
|
16
|
+
</context>
|
|
17
|
+
|
|
18
|
+
<process>
|
|
19
|
+
1. **Identify Phase**: Get the current or targeted phase number.
|
|
20
|
+
2. **Read Inputs**: Read `REQUIREMENTS.md` and `DESIGN_SYSTEM.md`.
|
|
21
|
+
3. **Generate UI-SPEC.md**:
|
|
22
|
+
- Define component-level spacing and layout for the phase.
|
|
23
|
+
- Specify required colors and typography from the design system.
|
|
24
|
+
- List accessibility requirements (WCAG level).
|
|
25
|
+
4. **Finalize**: Write `UI-SPEC.md` to the phase's planning directory or the root `.planning/`.
|
|
26
|
+
5. **Confirm**: Provide a link to the user for review.
|
|
27
|
+
</process>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Perform a retroactive visual audit of implemented UI against the DESIGN_SYSTEM.md and UI-SPEC.md
|
|
3
|
+
---
|
|
4
|
+
<objective>
|
|
5
|
+
Perform a retroactive, multi-pillar visual audit of implemented UI features against the defined Design System and UI-SPEC.md to ensure pixel-perfect fidelity and accessibility compliance.
|
|
6
|
+
</objective>
|
|
7
|
+
|
|
8
|
+
<execution_context>
|
|
9
|
+
.claude/commands/mindforge/ui-review.md
|
|
10
|
+
</execution_context>
|
|
11
|
+
|
|
12
|
+
<context>
|
|
13
|
+
Arguments: $ARGUMENTS (The phase number [N], optional)
|
|
14
|
+
Sources: `DESIGN_SYSTEM.md`, `UI-SPEC.md`, and the live application UI.
|
|
15
|
+
</context>
|
|
16
|
+
|
|
17
|
+
<process>
|
|
18
|
+
1. **Identify Target**: Determine the phase to review.
|
|
19
|
+
2. **Audit Application**:
|
|
20
|
+
- Use the browser tool to inspect the implemented features.
|
|
21
|
+
- Compare against the `UI-SPEC.md` for spacing, colors, and layout.
|
|
22
|
+
- Audit for accessibility (ARIA labels, contrast, keyboard navigation).
|
|
23
|
+
3. **Generate UI-REVIEW.md**:
|
|
24
|
+
- Grade each pillar (Layout, Color, Typography, etc.).
|
|
25
|
+
- List specific "Needs Work" items.
|
|
26
|
+
- Provide "Approved" status if all criteria are met.
|
|
27
|
+
4. **Finalize**: Notify the user of the audit results.
|
|
28
|
+
</process>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Check for and apply MindForge framework updates in a safe, scope-preserving way.
|
|
3
|
+
---
|
|
4
|
+
# MindForge — Update Command
|
|
5
|
+
# Usage: /mindforge:update [--apply] [--force] [--check] [--skip-changelog]
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
Check for and apply MindForge framework updates in a safe, scope-preserving way.
|
|
9
|
+
|
|
10
|
+
## Execution flow
|
|
11
|
+
|
|
12
|
+
### 1. Version check
|
|
13
|
+
Execute `bin/updater/self-update.js` `checkAndUpdate()`.
|
|
14
|
+
Always show: current version, latest version, update type (major/minor/patch).
|
|
15
|
+
|
|
16
|
+
### 2. Changelog display (unless --skip-changelog)
|
|
17
|
+
Fetch and display the relevant CHANGELOG.md section.
|
|
18
|
+
For major updates: prefix with ⚠️ BREAKING CHANGES notice.
|
|
19
|
+
Limit display to 3,000 characters — link to full CHANGELOG for the rest.
|
|
20
|
+
|
|
21
|
+
### 3. Confirmation gate (unless --apply)
|
|
22
|
+
Without --apply: show update info, stop. Do not modify any files.
|
|
23
|
+
Message: "To apply this update: /mindforge:update --apply"
|
|
24
|
+
|
|
25
|
+
### 4. Apply (with --apply)
|
|
26
|
+
a. Detect original install scope (local vs global, claude vs antigravity)
|
|
27
|
+
b. Read schema_version from HANDOFF.json (captures current version BEFORE update)
|
|
28
|
+
c. Run `npx mindforge-cc@[latest] --[runtime] --[scope]`
|
|
29
|
+
d. Run migration: `node bin/migrations/migrate.js` with captured schema_version
|
|
30
|
+
e. Run /mindforge:health to verify update succeeded
|
|
31
|
+
|
|
32
|
+
### 5. Post-update health check
|
|
33
|
+
If health errors: surface them immediately with specific fix instructions.
|
|
34
|
+
Common post-update issue: CLAUDE.md and .agent/CLAUDE.md drifted → auto-repair.
|
|
35
|
+
|
|
36
|
+
## Error scenarios and recovery
|
|
37
|
+
|
|
38
|
+
| Error | Recovery |
|
|
39
|
+
|---|---|
|
|
40
|
+
| npm registry unreachable | Message: "Check internet. Manual: npm info mindforge-cc version" |
|
|
41
|
+
| Update download fails | Retry once, then suggest manual: `npx mindforge-cc@latest` |
|
|
42
|
+
| Migration fails | Restored from backup automatically. Run /mindforge:migrate manually. |
|
|
43
|
+
| Install scope detection fails | Prompt user: "Is your install global or local?" |
|
|
44
|
+
|
|
45
|
+
## AUDIT entry
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Audit the current phase for requirement coverage and test gaps
|
|
3
|
+
---
|
|
4
|
+
<objective>
|
|
5
|
+
Audit a completed project phase to ensure every requirement has been addressed and that corresponding automated tests have been implemented and are passing.
|
|
6
|
+
</objective>
|
|
7
|
+
|
|
8
|
+
<execution_context>
|
|
9
|
+
.claude/commands/mindforge/validate-phase.md
|
|
10
|
+
</execution_context>
|
|
11
|
+
|
|
12
|
+
<context>
|
|
13
|
+
Arguments: $ARGUMENTS (The phase number [N], optional)
|
|
14
|
+
Knowledge: `STATE.md`, `REQUIREMENTS.md`, and the codebase test suite.
|
|
15
|
+
</context>
|
|
16
|
+
|
|
17
|
+
<process>
|
|
18
|
+
1. **Identify Phase**: Resolve the targeted phase.
|
|
19
|
+
2. **Cross-reference**:
|
|
20
|
+
- List all requirements in `REQUIREMENTS.md` marked for this phase.
|
|
21
|
+
- Verify implementation of each requirement in the code.
|
|
22
|
+
- Check for the existence of passing tests for each requirement.
|
|
23
|
+
3. **Analyze Gaps**: Identify any "orphaned" requirements or features missing tests.
|
|
24
|
+
4. **Report Findings**: Summarize coverage and call out specific gaps to the user.
|
|
25
|
+
</process>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Human acceptance testing for a completed phase. Usage: /mindforge:verify-phase [N]
|
|
3
|
+
---
|
|
4
|
+
Human acceptance testing for a completed phase. Usage: /mindforge:verify-phase [N]
|
|
5
|
+
|
|
6
|
+
## Pre-check
|
|
7
|
+
`.planning/phases/[N]/VERIFICATION.md` must exist.
|
|
8
|
+
If it does not: instruct the user to run /mindforge:execute-phase [N] first.
|
|
9
|
+
|
|
10
|
+
## Step 1 — Extract testable deliverables
|
|
11
|
+
Read REQUIREMENTS.md and the phase PLAN files.
|
|
12
|
+
Generate a list of testable deliverables — things the user can actually check.
|
|
13
|
+
|
|
14
|
+
Format each as a clear, actionable test instruction:
|
|
15
|
+
"Navigate to /login and submit a form with a valid email and password.
|
|
16
|
+
You should be redirected to /dashboard within 2 seconds."
|
|
17
|
+
|
|
18
|
+
## Step 2 — Walk through each deliverable
|
|
19
|
+
Present one at a time. After each:
|
|
20
|
+
"Please test this now and tell me: pass ✅ or fail ❌ — and describe what you saw."
|
|
21
|
+
|
|
22
|
+
Wait for the user's response before proceeding to the next.
|
|
23
|
+
|
|
24
|
+
## Step 3 — Handle failures
|
|
25
|
+
If the user reports a failure:
|
|
26
|
+
1. Ask: "What exactly happened? (error message, wrong behaviour, nothing happened)"
|
|
27
|
+
2. Spawn a debug subagent with: the failure description, the relevant PLAN file,
|
|
28
|
+
and the relevant source files. Instruct it to find the root cause.
|
|
29
|
+
3. Create a fix plan: `.planning/phases/[N]/FIX-PLAN-[N]-[NN].md`
|
|
30
|
+
using the same XML format as regular plans.
|
|
31
|
+
4. Ask the user: "Fix plan created. Run /mindforge:execute-phase [N] again
|
|
32
|
+
to apply the fixes?"
|
|
33
|
+
|
|
34
|
+
## Step 4 — Write UAT record
|
|
35
|
+
Write `.planning/phases/[N]/UAT.md`:
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
# UAT — Phase [N]
|
|
39
|
+
|
|
40
|
+
## Tester
|
|
41
|
+
[User name or "developer"]
|
|
42
|
+
|
|
43
|
+
## Date
|
|
44
|
+
[ISO 8601 date]
|
|
45
|
+
|
|
46
|
+
## Results
|
|
47
|
+
|
|
48
|
+
| # | Deliverable | Result | Notes |
|
|
49
|
+
|---|------------------------------------|--------|------------------------|
|
|
50
|
+
| 1 | [description] | ✅ | [what was observed] |
|
|
51
|
+
| 2 | [description] | ❌ | [what went wrong] |
|
|
52
|
+
|
|
53
|
+
## Overall status
|
|
54
|
+
All passed ✅ / Issues found — fix plans created ❌
|
|
55
|
+
|
|
56
|
+
## Sign-off
|
|
57
|
+
[Passed / Pending fixes]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Step 5 — Update state if all pass
|
|
61
|
+
If all deliverables pass:
|
|
62
|
+
Update STATE.md: phase N = verified and signed off.
|
|
63
|
+
Tell the user:
|
|
64
|
+
"✅ Phase [N] verified and signed off.
|
|
65
|
+
Run /mindforge:ship [N] to create the release PR."
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Monorepo workspace management.
|
|
3
|
+
---
|
|
4
|
+
# MindForge — Workspace Command
|
|
5
|
+
# Usage: /mindforge:workspace [detect|list|plan phase N|test]
|
|
6
|
+
|
|
7
|
+
Monorepo workspace management.
|
|
8
|
+
|
|
9
|
+
## detect
|
|
10
|
+
Run workspace detector from `.mindforge/monorepo/workspace-detector.md`.
|
|
11
|
+
Write WORKSPACE-MANIFEST.json.
|
|
12
|
+
Report: workspace type, packages found, dependency order.
|
|
13
|
+
|
|
14
|
+
## list
|
|
15
|
+
Read WORKSPACE-MANIFEST.json and display package list:
|
|
16
|
+
```
|
|
17
|
+
Workspace: Turborepo (4 packages)
|
|
18
|
+
packages/shared → @myapp/shared (lib, 0 dependents)
|
|
19
|
+
apps/api → @myapp/api (api, depends on: shared)
|
|
20
|
+
apps/web → @myapp/web (web, depends on: shared, api)
|
|
21
|
+
apps/mobile → @myapp/mobile (mobile, depends on: shared)
|
|
22
|
+
Execution order: shared → api → (web, mobile in parallel)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## plan phase N
|
|
26
|
+
Create a phase plan that spans multiple packages.
|
|
27
|
+
Uses cross-package-planner.md to determine package execution order.
|
|
28
|
+
Each PLAN file includes a `<package>` and `<working-dir>` field.
|
|
29
|
+
|
|
30
|
+
## test
|
|
31
|
+
Run tests across all packages in dependency order.
|
|
32
|
+
Report per-package test results and aggregate coverage.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Manage parallel feature tracks with isolated state
|
|
3
|
+
---
|
|
4
|
+
<objective>
|
|
5
|
+
Enable developers to work on multiple features or bugs concurrently within the same codebase without state collision. Provides isolated tracking for each "workstream".
|
|
6
|
+
</objective>
|
|
7
|
+
|
|
8
|
+
<execution_context>
|
|
9
|
+
.claude/commands/mindforge/workstreams.md
|
|
10
|
+
</execution_context>
|
|
11
|
+
|
|
12
|
+
<context>
|
|
13
|
+
Arguments: $ARGUMENTS (Switch subcommand)
|
|
14
|
+
Storage: .planning/workstreams/
|
|
15
|
+
State: Each workstream maintains its own subset of `STATE.md` or a local context file.
|
|
16
|
+
</context>
|
|
17
|
+
|
|
18
|
+
<process>
|
|
19
|
+
1. **Route Subcommand**:
|
|
20
|
+
- `list`: Show all active and archived workstreams in `.planning/workstreams/`.
|
|
21
|
+
- `create <name>`: Initialize a new workstream directory and baseline state.
|
|
22
|
+
- `switch <name>`: Update the global pointer in `STATE.md` to the targeted workstream.
|
|
23
|
+
- `status`: Show the current active workstream and its progress.
|
|
24
|
+
2. **Manage Isolation**:
|
|
25
|
+
- When switching, ensure current work is saved or stashed if necessary.
|
|
26
|
+
3. **Confirm**: Success/Failure status message to user.
|
|
27
|
+
</process>
|
package/.claude/CLAUDE.md
CHANGED
|
@@ -569,3 +569,17 @@ After every phase that passes all gates:
|
|
|
569
569
|
- /mindforge:marketplace — discover and install community skills
|
|
570
570
|
|
|
571
571
|
---
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
## 🧠 Knowledge Context (Auto-loaded)
|
|
575
|
+
🧠 Knowledge Base — 5 relevant memories loaded:
|
|
576
|
+
Preferences : 1
|
|
577
|
+
Code patterns: 1
|
|
578
|
+
Domain : 3
|
|
579
|
+
### Team Preferences
|
|
580
|
+
- [90% confidence] Use Tailwind: Always use Tailwind for CSS.
|
|
581
|
+
|
|
582
|
+
### Domain Knowledge
|
|
583
|
+
- Auth with JWT: Secure JWT with httpOnly cookies.
|
|
584
|
+
- Global Tip: Always fix lints.
|
|
585
|
+
- Database SQL: Use indexed columns for fast queries.
|
package/bin/installer-core.js
CHANGED
|
@@ -22,6 +22,9 @@ const RUNTIMES = {
|
|
|
22
22
|
commandsSubdir: 'commands/mindforge',
|
|
23
23
|
entryFile: 'CLAUDE.md',
|
|
24
24
|
supportsSlash: true,
|
|
25
|
+
skillsSubdir: 'skills',
|
|
26
|
+
hooksSubdir: 'hooks',
|
|
27
|
+
personasSubdir: 'personas',
|
|
25
28
|
},
|
|
26
29
|
antigravity: {
|
|
27
30
|
displayName: 'Antigravity',
|
|
@@ -30,6 +33,9 @@ const RUNTIMES = {
|
|
|
30
33
|
commandsSubdir: 'workflows',
|
|
31
34
|
entryFile: 'CLAUDE.md',
|
|
32
35
|
supportsSlash: true,
|
|
36
|
+
skillsSubdir: 'skills',
|
|
37
|
+
hooksSubdir: 'hooks',
|
|
38
|
+
personasSubdir: 'personas',
|
|
33
39
|
},
|
|
34
40
|
cursor: {
|
|
35
41
|
displayName: 'Cursor',
|
|
@@ -38,6 +44,9 @@ const RUNTIMES = {
|
|
|
38
44
|
commandsSubdir: 'rules',
|
|
39
45
|
entryFile: '.cursorrules',
|
|
40
46
|
supportsSlash: false,
|
|
47
|
+
skillsSubdir: 'skills',
|
|
48
|
+
hooksSubdir: 'hooks',
|
|
49
|
+
personasSubdir: 'personas',
|
|
41
50
|
},
|
|
42
51
|
opencode: {
|
|
43
52
|
displayName: 'OpenCode',
|
|
@@ -46,6 +55,9 @@ const RUNTIMES = {
|
|
|
46
55
|
commandsSubdir: 'commands/mindforge',
|
|
47
56
|
entryFile: 'CLAUDE.md',
|
|
48
57
|
supportsSlash: true,
|
|
58
|
+
skillsSubdir: 'skills',
|
|
59
|
+
hooksSubdir: 'hooks',
|
|
60
|
+
personasSubdir: 'personas',
|
|
49
61
|
},
|
|
50
62
|
gemini: {
|
|
51
63
|
displayName: 'Gemini CLI',
|
|
@@ -54,6 +66,9 @@ const RUNTIMES = {
|
|
|
54
66
|
commandsSubdir: 'commands/mindforge',
|
|
55
67
|
entryFile: 'GEMINI.md',
|
|
56
68
|
supportsSlash: true,
|
|
69
|
+
skillsSubdir: 'skills',
|
|
70
|
+
hooksSubdir: 'hooks',
|
|
71
|
+
personasSubdir: 'personas',
|
|
57
72
|
},
|
|
58
73
|
copilot: {
|
|
59
74
|
displayName: 'GitHub Copilot',
|
|
@@ -89,6 +104,31 @@ function generateEntryContent(runtime, sourceContent) {
|
|
|
89
104
|
return sourceContent;
|
|
90
105
|
}
|
|
91
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Extract an enterprise-grade description from command markdown.
|
|
109
|
+
* Prioritizes YAML frontmatter 'description' field, then falls back to first non-empty text.
|
|
110
|
+
*/
|
|
111
|
+
function getCommandDescription(content) {
|
|
112
|
+
// Check for YAML frontmatter
|
|
113
|
+
const frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---\s*\n/);
|
|
114
|
+
if (frontmatterMatch) {
|
|
115
|
+
const frontmatter = frontmatterMatch[1];
|
|
116
|
+
const descMatch = frontmatter.match(/^description:\s*(.*)$/m);
|
|
117
|
+
if (descMatch) return descMatch[1].trim();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Fallback to first non-empty, non-header line
|
|
121
|
+
const lines = content.split('\n');
|
|
122
|
+
for (let line of lines) {
|
|
123
|
+
line = line.trim();
|
|
124
|
+
if (line && !line.startsWith('#') && !line.startsWith('---')) {
|
|
125
|
+
return line.length > 100 ? line.substring(0, 97) + '...' : line;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return 'No description available';
|
|
130
|
+
}
|
|
131
|
+
|
|
92
132
|
// ── File system utilities ─────────────────────────────────────────────────────
|
|
93
133
|
const fsu = {
|
|
94
134
|
exists: p => fs.existsSync(p),
|
|
@@ -265,8 +305,25 @@ async function install(runtime, scope, options = {}) {
|
|
|
265
305
|
|
|
266
306
|
if (dryRun) {
|
|
267
307
|
console.log('\n Would install:');
|
|
268
|
-
console.log(` ${cfg.entryFile} → ${path.join(baseDir, cfg.entryFile)}`);
|
|
269
|
-
|
|
308
|
+
console.log(` ${cfg.entryFile.padEnd(12)} → ${path.join(baseDir, cfg.entryFile)}`);
|
|
309
|
+
|
|
310
|
+
const cmdCountStr = `${fsu.listFiles(src('.agent', 'mindforge')).length} commands`.padEnd(12);
|
|
311
|
+
console.log(` ${cmdCountStr} → ${cmdsDir}`);
|
|
312
|
+
|
|
313
|
+
const assetMappings = [
|
|
314
|
+
{ key: 'skillsSubdir', src: src('.agent', 'skills'), label: 'skills' },
|
|
315
|
+
{ key: 'hooksSubdir', src: src('.agent', 'hooks'), label: 'hooks' },
|
|
316
|
+
{ key: 'personasSubdir', src: src('.mindforge', 'personas'), label: 'personas' }
|
|
317
|
+
];
|
|
318
|
+
|
|
319
|
+
assetMappings.forEach(asset => {
|
|
320
|
+
const subDir = cfg[asset.key];
|
|
321
|
+
if (subDir && fsu.exists(asset.src)) {
|
|
322
|
+
const count = fsu.listFiles(asset.src).length;
|
|
323
|
+
const countStr = `${count} ${asset.label}`.padEnd(12);
|
|
324
|
+
console.log(` ${countStr} → ${path.join(baseDir, subDir)}`);
|
|
325
|
+
}
|
|
326
|
+
});
|
|
270
327
|
return;
|
|
271
328
|
}
|
|
272
329
|
|
|
@@ -318,43 +375,82 @@ async function install(runtime, scope, options = {}) {
|
|
|
318
375
|
}
|
|
319
376
|
|
|
320
377
|
// ── 2. Install commands ─────────────────────────────────────────────────────
|
|
321
|
-
const
|
|
322
|
-
|
|
323
|
-
: src('.agent', '
|
|
378
|
+
const cmdSources = [
|
|
379
|
+
{ src: src('.agent', 'mindforge'), namespace: 'mindforge' },
|
|
380
|
+
{ src: src('.agent', 'forge'), namespace: 'forge' }
|
|
381
|
+
];
|
|
324
382
|
|
|
325
|
-
if (
|
|
383
|
+
if (runtime === 'claude') {
|
|
384
|
+
// Claude Code specifically looks in .claude/commands/mindforge
|
|
385
|
+
cmdSources.length = 0;
|
|
386
|
+
cmdSources.push({ src: src('.claude', 'commands', 'mindforge'), namespace: 'mindforge' });
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
let totalCount = 0;
|
|
390
|
+
cmdSources.forEach(source => {
|
|
391
|
+
if (!fsu.exists(source.src)) return;
|
|
392
|
+
|
|
393
|
+
const files = fsu.listFiles(source.src).filter(f => f.endsWith('.md'));
|
|
394
|
+
totalCount += files.length;
|
|
326
395
|
fsu.ensureDir(cmdsDir);
|
|
327
|
-
|
|
328
|
-
// Install for specific runtime
|
|
396
|
+
|
|
329
397
|
files.forEach(f => {
|
|
330
|
-
|
|
331
|
-
const
|
|
398
|
+
// Logic for naming: antigravity uses namespace:prefix, others use just the file name
|
|
399
|
+
const targetName = runtime === 'antigravity' ? `${source.namespace}:${f}` : f;
|
|
400
|
+
const srcPath = path.join(source.src, f);
|
|
332
401
|
const dstPath = path.join(cmdsDir, targetName);
|
|
333
402
|
|
|
334
403
|
if (runtime === 'antigravity') {
|
|
335
404
|
const content = fsu.read(srcPath);
|
|
336
|
-
const
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
405
|
+
const description = getCommandDescription(content);
|
|
406
|
+
const metadata = `---\ndescription: ${description}\n---\n`;
|
|
407
|
+
|
|
408
|
+
// Strip existing frontmatter from source when injecting into Antigravity
|
|
409
|
+
const cleanContent = content.replace(/^---\s*\n[\s\S]*?\n---\s*\n/, '');
|
|
410
|
+
fsu.write(dstPath, metadata + cleanContent);
|
|
340
411
|
} else {
|
|
341
412
|
fsu.copy(srcPath, dstPath);
|
|
342
413
|
}
|
|
343
414
|
});
|
|
344
415
|
|
|
345
|
-
//
|
|
416
|
+
// Mirror to .claude/commands for cross-IDE compatibility (Cursor/Windsurf/Claude Code)
|
|
346
417
|
if (scope === 'local' && runtime !== 'claude' && !selfInstall) {
|
|
347
|
-
const standardCmdDir = path.join(process.cwd(), '.claude', 'commands',
|
|
418
|
+
const standardCmdDir = path.join(process.cwd(), '.claude', 'commands', source.namespace);
|
|
348
419
|
fsu.ensureDir(standardCmdDir);
|
|
349
420
|
files.forEach(f => {
|
|
350
|
-
fsu.copy(path.join(
|
|
421
|
+
fsu.copy(path.join(source.src, f), path.join(standardCmdDir, f));
|
|
351
422
|
});
|
|
352
|
-
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
if (totalCount > 0) {
|
|
427
|
+
if (scope === 'local' && runtime !== 'claude' && !selfInstall) {
|
|
428
|
+
Theme.printResolved(`${c.bold(totalCount)} commands (Mirrored to .claude/commands/)`);
|
|
353
429
|
} else {
|
|
354
|
-
Theme.printResolved(`${c.bold(
|
|
430
|
+
Theme.printResolved(`${c.bold(totalCount)} commands`);
|
|
355
431
|
}
|
|
356
432
|
}
|
|
357
433
|
|
|
434
|
+
// ── 2.1 Install Enterprise Assets (Skills, Hooks, Personas) ─────────────────
|
|
435
|
+
if (scope === 'local' && !selfInstall) {
|
|
436
|
+
const assetTypes = [
|
|
437
|
+
{ key: 'skillsSubdir', src: src('.agent', 'skills'), label: 'skills' },
|
|
438
|
+
{ key: 'hooksSubdir', src: src('.agent', 'hooks'), label: 'hooks' },
|
|
439
|
+
{ key: 'personasSubdir', src: src('.mindforge', 'personas'), label: 'personas' }
|
|
440
|
+
];
|
|
441
|
+
|
|
442
|
+
assetTypes.forEach(asset => {
|
|
443
|
+
const subDir = cfg[asset.key];
|
|
444
|
+
if (subDir && fsu.exists(asset.src)) {
|
|
445
|
+
const dstDir = path.join(baseDir, subDir);
|
|
446
|
+
fsu.ensureDir(dstDir);
|
|
447
|
+
// Use copyDir for the whole directory
|
|
448
|
+
fsu.copyDir(asset.src, dstDir, { excludePatterns: SENSITIVE_EXCLUDE });
|
|
449
|
+
Theme.printResolved(`${c.bold(asset.label.padEnd(10))} (Enterprise sync)`);
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
|
|
358
454
|
// ── 3. Framework files (local scope only, non-self-install) ─────────────────
|
|
359
455
|
if (scope === 'local' && !selfInstall) {
|
|
360
456
|
// .mindforge/ — framework engine files
|
package/bin/wizard/theme.js
CHANGED
|
@@ -59,7 +59,7 @@ const Theme = {
|
|
|
59
59
|
*/
|
|
60
60
|
printBrandManifest() {
|
|
61
61
|
console.log(` ${this.colors.dim('│')}`);
|
|
62
|
-
console.log(` ${this.colors.dim('│')} ${this.colors.green('🎉 V2.
|
|
62
|
+
console.log(` ${this.colors.dim('│')} ${this.colors.green('🎉 V2.3.0 IS HERE!')} Welcome to MindForge V2!`);
|
|
63
63
|
console.log(` ${this.colors.dim('│')}`);
|
|
64
64
|
console.log(` ${this.colors.dim('│')} ${this.colors.bold('THE PLATFORM VISION:')}`);
|
|
65
65
|
console.log(` ${this.colors.dim('│')} - Unified Enterprise Agentic Ecosystem`);
|