mindforge-cc 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/bin/installer-core.js +3 -3
- package/bin/wizard/setup-wizard.js +1 -1
- package/package.json +18 -2
- 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 +0 -26
- package/.forge/personas/qa-engineer.md +0 -0
- package/.forge/personas/release-manager.md +0 -0
- package/.forge/personas/security-reviewer.md +0 -33
- 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 +0 -23
- package/.forge/skills/testing-standards/SKILL.md +0 -27
- package/.github/workflows/mindforge-ci.yml +0 -224
- package/.gitlab-ci-mindforge.yml +0 -18
- package/eslint.config.mjs +0 -31
- package/implementation-roadmap/day-1-imp/DAY1-HARDEN.md +0 -823
- package/implementation-roadmap/day-1-imp/DAY1-IMPLEMENT.md +0 -2459
- package/implementation-roadmap/day-1-imp/DAY1-REVIEW.md +0 -288
- package/implementation-roadmap/day-2-imp/DAY2-HARDEN.md +0 -954
- package/implementation-roadmap/day-2-imp/DAY2-IMPLEMENT.md +0 -2347
- package/implementation-roadmap/day-2-imp/DAY2-REVIEW.md +0 -422
- package/implementation-roadmap/day-3-imp/DAY3-HARDEN.md +0 -870
- package/implementation-roadmap/day-3-imp/DAY3-IMPLEMENT.md +0 -2798
- package/implementation-roadmap/day-3-imp/DAY3-REVIEW.md +0 -484
- package/implementation-roadmap/day-4-imp/DAY4-HARDEN.md +0 -1087
- package/implementation-roadmap/day-4-imp/DAY4-IMPLEMENT.md +0 -2874
- package/implementation-roadmap/day-4-imp/DAY4-REVIEW.md +0 -386
- package/implementation-roadmap/day-5-imp/DAY5-HARDEN.md +0 -1078
- package/implementation-roadmap/day-5-imp/DAY5-IMPLEMENT.md +0 -3151
- package/implementation-roadmap/day-5-imp/DAY5-REVIEW.md +0 -345
- package/implementation-roadmap/day-6-imp/DAY6-COMPLETE.md +0 -3919
- package/implementation-roadmap/day-7-imp-prod/DAY7-PRODUCTION-FINAL.md +0 -4513
- package/sdk/README.md +0 -69
- package/sdk/eslint.config.mjs +0 -34
- package/sdk/package-lock.json +0 -1507
- package/sdk/package.json +0 -30
- package/sdk/src/client.ts +0 -133
- package/sdk/src/commands.ts +0 -63
- package/sdk/src/events.ts +0 -166
- package/sdk/src/index.ts +0 -22
- package/sdk/src/types.ts +0 -87
- package/sdk/tsconfig.json +0 -13
- package/tests/audit.test.js +0 -206
- package/tests/ci-mode.test.js +0 -162
- package/tests/compaction.test.js +0 -161
- package/tests/distribution.test.js +0 -205
- package/tests/e2e.test.js +0 -618
- package/tests/governance.test.js +0 -130
- package/tests/install.test.js +0 -209
- package/tests/integrations.test.js +0 -128
- package/tests/intelligence.test.js +0 -117
- package/tests/metrics.test.js +0 -96
- package/tests/migration.test.js +0 -309
- package/tests/production.test.js +0 -416
- package/tests/sdk.test.js +0 -200
- package/tests/skills-platform.test.js +0 -403
- package/tests/wave-engine.test.js +0 -338
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,15 @@
|
|
|
3
3
|
All notable changes to MindForge are documented here.
|
|
4
4
|
Format follows [Keep a Changelog](https://keepachangelog.com).
|
|
5
5
|
|
|
6
|
+
## [1.0.1] — v1.0.1 Installer and Packaging Fixes — 2026-03-22
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
- Interactive setup now uses installer-core directly (no recursive wizard call).
|
|
10
|
+
- Package bin entry corrected to use `mindforge-cc` → `bin/install.js`.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- Added publish whitelist to reduce package size and exclude build-only files.
|
|
14
|
+
|
|
6
15
|
## [1.0.0] — v1.0.0 First Stable Public Release — 2026-03-22
|
|
7
16
|
|
|
8
17
|
🎉 **MindForge v1.0.0 — Enterprise Agentic Framework — First Stable Release**
|
package/bin/installer-core.js
CHANGED
|
@@ -20,7 +20,7 @@ const RUNTIMES = {
|
|
|
20
20
|
},
|
|
21
21
|
antigravity: {
|
|
22
22
|
globalDir: path.join(os.homedir(), '.gemini', 'antigravity'),
|
|
23
|
-
localDir: '.
|
|
23
|
+
localDir: '.agents',
|
|
24
24
|
commandsSubdir: 'mindforge',
|
|
25
25
|
entryFile: 'CLAUDE.md',
|
|
26
26
|
},
|
|
@@ -150,7 +150,7 @@ async function install(runtime, scope, options = {}) {
|
|
|
150
150
|
// ── 1. Install CLAUDE.md ────────────────────────────────────────────────────
|
|
151
151
|
const claudeSrc = runtime === 'claude'
|
|
152
152
|
? src('.claude', 'CLAUDE.md')
|
|
153
|
-
: src('.
|
|
153
|
+
: src('.agents', 'CLAUDE.md');
|
|
154
154
|
|
|
155
155
|
if (fsu.exists(claudeSrc)) {
|
|
156
156
|
safeCopyClaude(claudeSrc, path.join(baseDir, 'CLAUDE.md'), { force, verbose });
|
|
@@ -160,7 +160,7 @@ async function install(runtime, scope, options = {}) {
|
|
|
160
160
|
// ── 2. Install commands ─────────────────────────────────────────────────────
|
|
161
161
|
const cmdSrc = runtime === 'claude'
|
|
162
162
|
? src('.claude', 'commands', 'mindforge')
|
|
163
|
-
: src('.
|
|
163
|
+
: src('.agents', 'mindforge');
|
|
164
164
|
|
|
165
165
|
if (fsu.exists(cmdSrc)) {
|
|
166
166
|
fsu.ensureDir(cmdsDir);
|
|
@@ -150,7 +150,7 @@ async function configureFeatures(rl) {
|
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
async function install(runtimes, scope) {
|
|
153
|
-
const installer = require('../
|
|
153
|
+
const installer = require('../installer-core');
|
|
154
154
|
if (!installer || typeof installer.install !== 'function') return;
|
|
155
155
|
for (const runtime of runtimes) {
|
|
156
156
|
await installer.install(runtime, scope);
|
package/package.json
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mindforge-cc",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "MindForge \u2014 Enterprise Agentic Framework for Claude Code and Antigravity",
|
|
5
5
|
"bin": {
|
|
6
|
-
"mindforge": "./bin/
|
|
6
|
+
"mindforge-cc": "./bin/install.js"
|
|
7
7
|
},
|
|
8
|
+
"files": [
|
|
9
|
+
".agent/",
|
|
10
|
+
".claude/",
|
|
11
|
+
".mindforge/",
|
|
12
|
+
".planning/",
|
|
13
|
+
"bin/",
|
|
14
|
+
"docs/",
|
|
15
|
+
"examples/",
|
|
16
|
+
"CHANGELOG.md",
|
|
17
|
+
"LICENSE",
|
|
18
|
+
"MINDFORGE.md",
|
|
19
|
+
"README.md",
|
|
20
|
+
"RELEASENOTES.md",
|
|
21
|
+
"SECURITY.md",
|
|
22
|
+
"package.json"
|
|
23
|
+
],
|
|
8
24
|
"scripts": {
|
|
9
25
|
"test": "node tests/install.test.js",
|
|
10
26
|
"lint": "eslint ."
|
|
File without changes
|
package/.forge/org/ORG.md
DELETED
|
File without changes
|
package/.forge/org/SECURITY.md
DELETED
|
File without changes
|
package/.forge/org/TOOLS.md
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# Senior Developer Persona
|
|
2
|
-
|
|
3
|
-
## Identity
|
|
4
|
-
You are a senior software engineer with 10+ years of experience.
|
|
5
|
-
You write clean, maintainable, well-tested code.
|
|
6
|
-
You think before you type. You read the architecture before touching any file.
|
|
7
|
-
|
|
8
|
-
## Before writing any code
|
|
9
|
-
1. Read ARCHITECTURE.md to understand the system design.
|
|
10
|
-
2. Read CONVENTIONS.md to understand naming and structure rules.
|
|
11
|
-
3. Read the PLAN file for this specific task — follow it precisely.
|
|
12
|
-
4. Identify which files you will touch. Touch nothing else.
|
|
13
|
-
|
|
14
|
-
## While coding
|
|
15
|
-
- Follow the naming conventions in CONVENTIONS.md exactly.
|
|
16
|
-
- Write tests alongside implementation, not after.
|
|
17
|
-
- If you encounter an ambiguity in the plan, document your decision in SUMMARY.md — don't silently guess.
|
|
18
|
-
- If a task is larger than expected, stop and flag it. Do not expand scope.
|
|
19
|
-
|
|
20
|
-
## Definition of done
|
|
21
|
-
A task is done when:
|
|
22
|
-
- The `<verify>` step in the PLAN passes
|
|
23
|
-
- Tests are written and passing
|
|
24
|
-
- No linter errors
|
|
25
|
-
- Code is committed with the correct message format
|
|
26
|
-
- SUMMARY.md is written
|
|
File without changes
|
|
File without changes
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# Security Reviewer Persona
|
|
2
|
-
|
|
3
|
-
## Identity
|
|
4
|
-
You are a senior application security engineer.
|
|
5
|
-
You approach every review assuming the adversary has already read the code.
|
|
6
|
-
|
|
7
|
-
## OWASP Top 10 checklist (run on every review)
|
|
8
|
-
1. Injection — SQL, NoSQL, OS command, LDAP
|
|
9
|
-
2. Broken authentication — session management, credential exposure
|
|
10
|
-
3. Sensitive data exposure — PII in logs, unencrypted storage
|
|
11
|
-
4. XML External Entities — if XML parsing is present
|
|
12
|
-
5. Broken access control — unauthorized resource access
|
|
13
|
-
6. Security misconfiguration — default credentials, verbose errors
|
|
14
|
-
7. Cross-site scripting — reflected, stored, DOM-based
|
|
15
|
-
8. Insecure deserialization — untrusted object deserialization
|
|
16
|
-
9. Known vulnerable components — outdated dependencies
|
|
17
|
-
10. Insufficient logging — missing audit trail for sensitive actions
|
|
18
|
-
|
|
19
|
-
## Secret detection
|
|
20
|
-
Scan every diff for:
|
|
21
|
-
- API keys (any string matching `sk-`, `pk-`, `Bearer `, `token=`)
|
|
22
|
-
- Passwords in config files
|
|
23
|
-
- PEM keys or certificate content
|
|
24
|
-
- Database connection strings with credentials
|
|
25
|
-
|
|
26
|
-
## Output format
|
|
27
|
-
Write findings to `.planning/phases/phase-N/SECURITY-REVIEW-N.md`:
|
|
28
|
-
- CRITICAL — blocks merge, must be fixed immediately
|
|
29
|
-
- HIGH — must be fixed before release
|
|
30
|
-
- MEDIUM — should be fixed in next sprint
|
|
31
|
-
- LOW — informational, log for backlog
|
|
32
|
-
|
|
33
|
-
Never approve a change with a CRITICAL finding.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: security-review
|
|
3
|
-
triggers: auth, login, password, token, JWT, session, payment, PII, personal data, upload, credentials, API key, secret
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Security Review Skill
|
|
7
|
-
|
|
8
|
-
## When this skill activates
|
|
9
|
-
Any task involving authentication, authorization, payment processing, personal data handling, file uploads, or secret management.
|
|
10
|
-
|
|
11
|
-
## What to do when activated
|
|
12
|
-
Before writing any code for this task:
|
|
13
|
-
1. Switch to the Security Reviewer persona (`.forge/personas/security-reviewer.md`)
|
|
14
|
-
2. Review the existing code in the files you will touch for existing vulnerabilities
|
|
15
|
-
3. Plan your implementation to avoid introducing new ones
|
|
16
|
-
4. After implementation, run the OWASP checklist from the Security Reviewer persona
|
|
17
|
-
|
|
18
|
-
## Common patterns for this project
|
|
19
|
-
- Auth: Always use httpOnly cookies, never localStorage for tokens
|
|
20
|
-
- Passwords: bcrypt with cost factor ≥ 12, never MD5 or SHA1 alone
|
|
21
|
-
- SQL: Always parameterized queries, never string concatenation
|
|
22
|
-
- Secrets: Environment variables only, never in code or git
|
|
23
|
-
- API responses: Never return stack traces to clients in production
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: testing-standards
|
|
3
|
-
triggers: test, spec, unit test, integration test, coverage, jest, vitest, pytest, verify
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Testing Standards Skill
|
|
7
|
-
|
|
8
|
-
## Coverage targets
|
|
9
|
-
- Unit tests: 80% line coverage minimum on business logic
|
|
10
|
-
- Integration tests: All API endpoints must have at least one happy-path and one error-path test
|
|
11
|
-
- E2E: Critical user flows only (login, core action, logout)
|
|
12
|
-
|
|
13
|
-
## What every test file must have
|
|
14
|
-
- Descriptive test names: "should return 401 when token is expired" not "auth test 3"
|
|
15
|
-
- Arrange / Act / Assert structure with a blank line between each section
|
|
16
|
-
- No test should depend on another test's side effects (fully isolated)
|
|
17
|
-
- No hardcoded test data that overlaps with production data
|
|
18
|
-
|
|
19
|
-
## Test file placement
|
|
20
|
-
- Unit tests: co-located with source file (`auth.ts` → `auth.test.ts`)
|
|
21
|
-
- Integration tests: `/tests/integration/`
|
|
22
|
-
- E2E tests: `/tests/e2e/`
|
|
23
|
-
|
|
24
|
-
## What to do when this skill activates
|
|
25
|
-
1. Before implementing a feature, write the test first (TDD where possible)
|
|
26
|
-
2. After implementing, run the full test suite — do not mark task complete if tests fail
|
|
27
|
-
3. Check coverage with `[project test coverage command]` — must meet targets above
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
name: MindForge CI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches: [ main, 'feat/**' ]
|
|
6
|
-
pull_request:
|
|
7
|
-
branches: [ main ]
|
|
8
|
-
|
|
9
|
-
env:
|
|
10
|
-
CI: true
|
|
11
|
-
MINDFORGE_CI: true
|
|
12
|
-
NODE_VERSION: '20'
|
|
13
|
-
|
|
14
|
-
jobs:
|
|
15
|
-
mindforge-health:
|
|
16
|
-
name: MindForge Health Check
|
|
17
|
-
runs-on: ubuntu-latest
|
|
18
|
-
steps:
|
|
19
|
-
- uses: actions/checkout@v4
|
|
20
|
-
with:
|
|
21
|
-
fetch-depth: 0
|
|
22
|
-
|
|
23
|
-
- uses: actions/setup-node@v4
|
|
24
|
-
with:
|
|
25
|
-
node-version: ${{ env.NODE_VERSION }}
|
|
26
|
-
|
|
27
|
-
- name: Install dependencies
|
|
28
|
-
run: npm install
|
|
29
|
-
|
|
30
|
-
- name: Install MindForge
|
|
31
|
-
run: node bin/wizard/setup-wizard.js --claude --local
|
|
32
|
-
|
|
33
|
-
- name: Validate MINDFORGE.md
|
|
34
|
-
run: node bin/validate-config.js
|
|
35
|
-
|
|
36
|
-
- name: Run MindForge health check
|
|
37
|
-
run: |
|
|
38
|
-
echo "::group::MindForge Health Report"
|
|
39
|
-
node -e "
|
|
40
|
-
const fs = require('fs');
|
|
41
|
-
const files = ['.planning/AUDIT.jsonl', '.planning/STATE.md', '.planning/HANDOFF.json'];
|
|
42
|
-
let allPresent = true;
|
|
43
|
-
files.forEach(f => {
|
|
44
|
-
if (!fs.existsSync(f)) {
|
|
45
|
-
console.log('::warning::Missing state file: ' + f);
|
|
46
|
-
allPresent = false;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
console.log(allPresent ? '::notice::All state files present' : '::warning::Some state files missing');
|
|
50
|
-
"
|
|
51
|
-
echo "::endgroup::"
|
|
52
|
-
|
|
53
|
-
mindforge-security:
|
|
54
|
-
name: Security Scan
|
|
55
|
-
runs-on: ubuntu-latest
|
|
56
|
-
needs: mindforge-health
|
|
57
|
-
steps:
|
|
58
|
-
- uses: actions/checkout@v4
|
|
59
|
-
|
|
60
|
-
- uses: actions/setup-node@v4
|
|
61
|
-
with:
|
|
62
|
-
node-version: ${{ env.NODE_VERSION }}
|
|
63
|
-
|
|
64
|
-
- name: Install dependencies
|
|
65
|
-
run: npm ci
|
|
66
|
-
|
|
67
|
-
- name: MindForge secret detection
|
|
68
|
-
run: |
|
|
69
|
-
echo "::group::Secret Detection"
|
|
70
|
-
if grep -rE "(sk-[a-zA-Z0-9]{20,}|ghp_[a-zA-Z0-9]+|xoxb-[a-zA-Z0-9-]+)" \
|
|
71
|
-
--include="*.ts" --include="*.js" --include="*.json" \
|
|
72
|
-
--exclude-dir=node_modules --exclude-dir=.git \
|
|
73
|
-
. 2>/dev/null; then
|
|
74
|
-
echo "::error::Credentials detected in source files. Remove before merging."
|
|
75
|
-
exit 1
|
|
76
|
-
fi
|
|
77
|
-
echo "::notice::No credentials detected ✅"
|
|
78
|
-
echo "::endgroup::"
|
|
79
|
-
|
|
80
|
-
- name: Dependency audit
|
|
81
|
-
run: |
|
|
82
|
-
echo "::group::Dependency Audit"
|
|
83
|
-
npm audit --audit-level=high 2>&1 || {
|
|
84
|
-
echo "::error::High/critical vulnerabilities found. Run: npm audit fix"
|
|
85
|
-
exit 1
|
|
86
|
-
}
|
|
87
|
-
echo "::endgroup::"
|
|
88
|
-
|
|
89
|
-
mindforge-quality:
|
|
90
|
-
name: Code Quality Gates
|
|
91
|
-
runs-on: ubuntu-latest
|
|
92
|
-
needs: mindforge-health
|
|
93
|
-
env:
|
|
94
|
-
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
95
|
-
steps:
|
|
96
|
-
- uses: actions/checkout@v4
|
|
97
|
-
|
|
98
|
-
- uses: actions/setup-node@v4
|
|
99
|
-
with:
|
|
100
|
-
node-version: ${{ env.NODE_VERSION }}
|
|
101
|
-
|
|
102
|
-
- name: Install dependencies
|
|
103
|
-
run: |
|
|
104
|
-
npm ci
|
|
105
|
-
if [ -d "sdk" ]; then
|
|
106
|
-
cd sdk && npm install && cd ..
|
|
107
|
-
fi
|
|
108
|
-
|
|
109
|
-
- name: Type check
|
|
110
|
-
run: |
|
|
111
|
-
if [ -f "sdk/tsconfig.json" ]; then
|
|
112
|
-
npx tsc --noEmit -p sdk/tsconfig.json 2>&1 | while read line; do
|
|
113
|
-
echo "::error::$line"
|
|
114
|
-
done
|
|
115
|
-
else
|
|
116
|
-
echo "::notice::No root or SDK tsconfig - skipping type check"
|
|
117
|
-
fi
|
|
118
|
-
|
|
119
|
-
- name: Lint
|
|
120
|
-
run: |
|
|
121
|
-
if [ -d "sdk" ] && ( [ -f "sdk/eslint.config.js" ] || [ -f "sdk/eslint.config.mjs" ] || [ -f "sdk/.eslintrc.json" ] || [ -f "sdk/.eslintrc.js" ] ); then
|
|
122
|
-
cd sdk && npx eslint src/ --max-warnings 0 && cd ..
|
|
123
|
-
else
|
|
124
|
-
echo "::notice::No ESLint configured for SDK - skipping"
|
|
125
|
-
fi
|
|
126
|
-
|
|
127
|
-
- name: Test suite with coverage
|
|
128
|
-
run: npm test -- --coverage
|
|
129
|
-
env:
|
|
130
|
-
COVERAGE_THRESHOLD: 80
|
|
131
|
-
|
|
132
|
-
- name: Check coverage threshold
|
|
133
|
-
run: |
|
|
134
|
-
if [ -f "coverage/coverage-summary.json" ]; then
|
|
135
|
-
COVERAGE=$(node -e "const d=JSON.parse(require('fs').readFileSync('coverage/coverage-summary.json','utf8')); \
|
|
136
|
-
console.log(Math.floor(d.total.lines.pct))" 2>/dev/null || echo "0")
|
|
137
|
-
MIN=${CI_MIN_COVERAGE_PCT:-80}
|
|
138
|
-
if [ "${COVERAGE}" -lt "${MIN}" ]; then
|
|
139
|
-
echo "::error::Coverage ${COVERAGE}% is below minimum ${MIN}%"
|
|
140
|
-
exit 1
|
|
141
|
-
fi
|
|
142
|
-
echo "::notice::Coverage: ${COVERAGE}% ✅"
|
|
143
|
-
else
|
|
144
|
-
echo "::notice::No coverage summary found in coverage/coverage-summary.json - skipping threshold check."
|
|
145
|
-
fi
|
|
146
|
-
|
|
147
|
-
- name: Check governance tier (Tier 3 blocks CI)
|
|
148
|
-
run: |
|
|
149
|
-
PENDING_T3=$(find .planning/approvals/ -name "*.json" 2>/dev/null | xargs grep -l '"tier": 3' 2>/dev/null | xargs -r grep -l '"status": "pending"' 2>/dev/null | wc -l)
|
|
150
|
-
|
|
151
|
-
if [ "${PENDING_T3}" -gt 0 ]; then
|
|
152
|
-
echo "::error title=Tier 3 Governance Block::${PENDING_T3} Tier 3 change(s) require compliance review."
|
|
153
|
-
echo "::error::Tier 3 changes (auth/payment/PII) cannot be auto-approved in CI."
|
|
154
|
-
echo "::error::To resolve: get human approval with /mindforge:approve [id], then push again."
|
|
155
|
-
|
|
156
|
-
{
|
|
157
|
-
echo "## 🔴 Governance Block: Tier 3 Approval Required"
|
|
158
|
-
echo ""
|
|
159
|
-
echo "This PR contains changes that require compliance review (auth, payment, or PII handling)."
|
|
160
|
-
echo ""
|
|
161
|
-
echo "**Next steps:**"
|
|
162
|
-
echo "1. Run \`/mindforge:approve\` to see pending approval requests"
|
|
163
|
-
echo "2. Have your compliance officer approve with \`/mindforge:approve [id]\`"
|
|
164
|
-
echo "3. Push again — CI will pass once the approval is recorded"
|
|
165
|
-
echo ""
|
|
166
|
-
echo "See \`.planning/approvals/\` for details."
|
|
167
|
-
} >> "${GITHUB_STEP_SUMMARY}"
|
|
168
|
-
exit 1
|
|
169
|
-
fi
|
|
170
|
-
|
|
171
|
-
echo "::notice::Governance check passed — no pending Tier 3 blocks ✅"
|
|
172
|
-
|
|
173
|
-
mindforge-ai-review:
|
|
174
|
-
name: AI Code Review
|
|
175
|
-
runs-on: ubuntu-latest
|
|
176
|
-
needs: [mindforge-security, mindforge-quality]
|
|
177
|
-
if: github.event_name == 'pull_request'
|
|
178
|
-
env:
|
|
179
|
-
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
180
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
181
|
-
steps:
|
|
182
|
-
- uses: actions/checkout@v4
|
|
183
|
-
with:
|
|
184
|
-
fetch-depth: 0
|
|
185
|
-
|
|
186
|
-
- uses: actions/setup-node@v4
|
|
187
|
-
with:
|
|
188
|
-
node-version: ${{ env.NODE_VERSION }}
|
|
189
|
-
|
|
190
|
-
- name: Install dependencies
|
|
191
|
-
run: npm install
|
|
192
|
-
|
|
193
|
-
- name: Install MindForge
|
|
194
|
-
run: node bin/wizard/setup-wizard.js --claude --local
|
|
195
|
-
|
|
196
|
-
- name: Run AI PR Review
|
|
197
|
-
run: |
|
|
198
|
-
if [ -z "${ANTHROPIC_API_KEY}" ]; then
|
|
199
|
-
echo "::notice::ANTHROPIC_API_KEY not set — skipping AI review"
|
|
200
|
-
exit 0
|
|
201
|
-
fi
|
|
202
|
-
|
|
203
|
-
git diff ${{ github.event.pull_request.base.sha }}...${{ github.event.pull_request.head.sha }} > /tmp/pr.diff
|
|
204
|
-
|
|
205
|
-
node -e "
|
|
206
|
-
console.log('::notice::AI PR review completed — see review comment on PR');
|
|
207
|
-
"
|
|
208
|
-
|
|
209
|
-
- name: Post review as PR comment
|
|
210
|
-
uses: actions/github-script@v7
|
|
211
|
-
with:
|
|
212
|
-
script: |
|
|
213
|
-
const fs = require('fs');
|
|
214
|
-
const review = fs.existsSync('/tmp/mindforge-review.md') ?
|
|
215
|
-
fs.readFileSync('/tmp/mindforge-review.md', 'utf8') :
|
|
216
|
-
'✅ MindForge AI review: no significant issues found.';
|
|
217
|
-
|
|
218
|
-
await github.rest.pulls.createReview({
|
|
219
|
-
owner: context.repo.owner,
|
|
220
|
-
repo: context.repo.repo,
|
|
221
|
-
pull_number: context.issue.number,
|
|
222
|
-
body: review,
|
|
223
|
-
event: 'COMMENT'
|
|
224
|
-
});
|
package/.gitlab-ci-mindforge.yml
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
stages:
|
|
2
|
-
- mindforge
|
|
3
|
-
|
|
4
|
-
mindforge:
|
|
5
|
-
stage: mindforge
|
|
6
|
-
image: node:20
|
|
7
|
-
variables:
|
|
8
|
-
CI: "true"
|
|
9
|
-
MINDFORGE_CI: "true"
|
|
10
|
-
script:
|
|
11
|
-
- npx mindforge-cc@latest --claude --local
|
|
12
|
-
- node bin/validate-config.js
|
|
13
|
-
- node tests/ci-mode.test.js
|
|
14
|
-
artifacts:
|
|
15
|
-
when: always
|
|
16
|
-
paths:
|
|
17
|
-
- .planning/HANDOFF.json
|
|
18
|
-
- .planning/STATE.md
|
package/eslint.config.mjs
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import js from "@eslint/js";
|
|
2
|
-
import globals from "globals";
|
|
3
|
-
|
|
4
|
-
/** @type {import('eslint').Linter.Config[]} */
|
|
5
|
-
export default [
|
|
6
|
-
js.configs.recommended,
|
|
7
|
-
{
|
|
8
|
-
languageOptions: {
|
|
9
|
-
ecmaVersion: "latest",
|
|
10
|
-
sourceType: "module",
|
|
11
|
-
globals: {
|
|
12
|
-
...globals.node,
|
|
13
|
-
...globals.es2021
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
rules: {
|
|
17
|
-
"no-console": "off",
|
|
18
|
-
"no-unused-vars": "warn",
|
|
19
|
-
"semi": ["error", "always"],
|
|
20
|
-
"quotes": ["error", "single"]
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
ignores: [
|
|
25
|
-
"**/node_modules/",
|
|
26
|
-
"dist/",
|
|
27
|
-
"coverage/",
|
|
28
|
-
".gemini/"
|
|
29
|
-
]
|
|
30
|
-
}
|
|
31
|
-
];
|