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,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: documentation
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
min_mindforge_version: 0.1.0
|
|
5
|
+
status: stable
|
|
6
|
+
triggers: README, docs, documentation, changelog, CHANGELOG, guide, getting started, API docs, comment, JSDoc, docstring, explain, describe
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill — Documentation
|
|
10
|
+
|
|
11
|
+
## When this skill activates
|
|
12
|
+
Any task involving writing or updating documentation, comments, or guides.
|
|
13
|
+
Switch to `tech-writer.md` persona when this skill activates.
|
|
14
|
+
|
|
15
|
+
## Mandatory actions when this skill is active
|
|
16
|
+
|
|
17
|
+
### Before writing documentation
|
|
18
|
+
1. Identify the target audience and their goal.
|
|
19
|
+
2. Gather the exact commands or steps to reproduce the task.
|
|
20
|
+
|
|
21
|
+
### During writing
|
|
22
|
+
- Use clear headings and short paragraphs.
|
|
23
|
+
- Provide working examples where possible.
|
|
24
|
+
- Avoid assumptions about prior knowledge.
|
|
25
|
+
|
|
26
|
+
### After writing
|
|
27
|
+
- Verify examples and commands are correct.
|
|
28
|
+
- Ensure the document is linked from README or relevant index.
|
|
29
|
+
|
|
30
|
+
## README.md structure (for every project)
|
|
31
|
+
```markdown
|
|
32
|
+
# Project Name
|
|
33
|
+
|
|
34
|
+
One sentence that says exactly what this does.
|
|
35
|
+
|
|
36
|
+
## Quick start
|
|
37
|
+
[Fewest possible steps to get from zero to first value — under 5 minutes]
|
|
38
|
+
|
|
39
|
+
## Installation
|
|
40
|
+
[Step by step — no assumed knowledge]
|
|
41
|
+
|
|
42
|
+
## Usage
|
|
43
|
+
[The most common use case with a working code example]
|
|
44
|
+
|
|
45
|
+
## Commands / API reference
|
|
46
|
+
[Link to docs/commands-reference.md or inline if short]
|
|
47
|
+
|
|
48
|
+
## Configuration
|
|
49
|
+
[All environment variables with type, default, and description]
|
|
50
|
+
|
|
51
|
+
## Contributing
|
|
52
|
+
[How to run tests, branch naming, PR process]
|
|
53
|
+
|
|
54
|
+
## Licence
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Code comment standards
|
|
58
|
+
- Comment WHY, not WHAT. The code shows what. Comments explain intent.
|
|
59
|
+
- ✅ `// We use bcrypt cost 14 here because this is the admin auth path — speed is not critical`
|
|
60
|
+
- ❌ `// Hash the password`
|
|
61
|
+
- Remove TODO comments before committing to main. Create a ticket instead.
|
|
62
|
+
- Every exported function needs a JSDoc/docstring with: description, params, return, throws.
|
|
63
|
+
|
|
64
|
+
## JSDoc template
|
|
65
|
+
```typescript
|
|
66
|
+
/**
|
|
67
|
+
* Verifies a JWT access token and returns the decoded payload.
|
|
68
|
+
*
|
|
69
|
+
* @param token - The raw JWT string from the Authorization header
|
|
70
|
+
* @returns Decoded token payload containing userId and role
|
|
71
|
+
* @throws {TokenExpiredError} If the token has passed its expiry time
|
|
72
|
+
* @throws {InvalidTokenError} If the token signature is invalid
|
|
73
|
+
*/
|
|
74
|
+
export function verifyAccessToken(token: string): TokenPayload { ... }
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Changelog discipline
|
|
78
|
+
Every user-visible change must appear in CHANGELOG.md before release.
|
|
79
|
+
Format follows Keep a Changelog (keepachangelog.com).
|
|
80
|
+
Categories: Added, Changed, Deprecated, Removed, Fixed, Security.
|
|
81
|
+
|
|
82
|
+
## Self-check before task completion
|
|
83
|
+
|
|
84
|
+
Before marking a task done when this skill was active:
|
|
85
|
+
|
|
86
|
+
- [ ] Did I read the full SKILL.md before starting? (Not just the triggers)
|
|
87
|
+
- [ ] Did I activate the corresponding persona file?
|
|
88
|
+
- [ ] Did I apply every mandatory action in this skill, not just the ones
|
|
89
|
+
I remembered off the top of my head?
|
|
90
|
+
- [ ] If this skill produced an output file (review, security report, etc.),
|
|
91
|
+
has that file been written to the correct path?
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: incident-response
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
min_mindforge_version: 0.3.0
|
|
5
|
+
status: stable
|
|
6
|
+
triggers: incident, outage, downtime, alert, pagerduty, oncall, on-call, postmortem, post-mortem, runbook, degraded, unavailable, error rate, p0, P0, p1, P1, rollback, hotfix, revert, emergency, spike, anomaly, SLA, SLO, SLI
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill — Incident Response Engineering
|
|
10
|
+
|
|
11
|
+
## When this skill activates
|
|
12
|
+
Any task involving incident runbooks, monitoring setup, alerting configuration,
|
|
13
|
+
hotfixes, rollbacks, or post-incident review documentation.
|
|
14
|
+
|
|
15
|
+
## Mandatory actions when this skill is active
|
|
16
|
+
|
|
17
|
+
### Before making changes
|
|
18
|
+
1. Classify severity (P0-P3) and confirm scope of impact.
|
|
19
|
+
2. Locate or create the relevant runbook.
|
|
20
|
+
|
|
21
|
+
### During incident response
|
|
22
|
+
- Keep a timeline of actions taken and outcomes.
|
|
23
|
+
- Prefer reversible mitigations (rollback, feature flag) before invasive changes.
|
|
24
|
+
- Automated mitigations require explicit human approval for P0/P1 incidents.
|
|
25
|
+
|
|
26
|
+
### After mitigation
|
|
27
|
+
- Capture root cause and remediation steps.
|
|
28
|
+
- Write or update the postmortem within 48 hours.
|
|
29
|
+
|
|
30
|
+
## Incident severity classification
|
|
31
|
+
|
|
32
|
+
| Level | Definition | Response time | Examples |
|
|
33
|
+
|---|---|---|---|
|
|
34
|
+
| P0 (Critical) | Complete service outage affecting all users | Immediate (24/7) | Site down, database unreachable, payment processing failed |
|
|
35
|
+
| P1 (High) | Major feature broken for all/most users | < 15 minutes | Login broken, core feature unavailable |
|
|
36
|
+
| P2 (Medium) | Feature degraded, workaround exists | < 2 hours | Slow API, intermittent errors for subset of users |
|
|
37
|
+
| P3 (Low) | Minor issue, cosmetic or edge case | Next business day | UI glitch, non-critical feature broken |
|
|
38
|
+
|
|
39
|
+
## Runbook template (write one for every critical path)
|
|
40
|
+
|
|
41
|
+
File: `docs/runbooks/[service-name]-[issue-type].md`
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
# Runbook: [Service/Feature] — [Issue Type]
|
|
45
|
+
|
|
46
|
+
## Overview
|
|
47
|
+
**Service:** [name]
|
|
48
|
+
**Symptom:** [what the monitoring alert describes]
|
|
49
|
+
**Impact:** [who is affected and how]
|
|
50
|
+
**Severity:** P[0-3]
|
|
51
|
+
|
|
52
|
+
## Detection
|
|
53
|
+
**Alert:** [alert name and source — PagerDuty, Datadog, etc.]
|
|
54
|
+
**Metrics to check:**
|
|
55
|
+
- [metric 1]: normal range [X-Y], alert threshold [Z]
|
|
56
|
+
- [metric 2]: normal range [X-Y], alert threshold [Z]
|
|
57
|
+
|
|
58
|
+
## Immediate actions (first 5 minutes)
|
|
59
|
+
1. Acknowledge the alert in [alerting tool]
|
|
60
|
+
2. Check [dashboard URL] for current status
|
|
61
|
+
3. [Specific first diagnostic step]
|
|
62
|
+
4. [Specific second diagnostic step]
|
|
63
|
+
5. If confirmed P0/P1: page the on-call lead
|
|
64
|
+
|
|
65
|
+
## Diagnosis steps
|
|
66
|
+
1. Check [log location] for errors: `grep -E "ERROR|FATAL" [log file] | tail -50`
|
|
67
|
+
2. Check database connectivity: `[connection test command]`
|
|
68
|
+
3. Check external dependencies: `curl -I [dependency health URL]`
|
|
69
|
+
4. Check recent deployments: `git log --oneline -5`
|
|
70
|
+
|
|
71
|
+
## Mitigation options (in order of preference)
|
|
72
|
+
1. **Restart the service:** `[restart command]` — use if: [condition]
|
|
73
|
+
2. **Scale horizontally:** `[scale command]` — use if: [condition]
|
|
74
|
+
3. **Rollback deployment:** `[rollback command]` — use if: [condition]
|
|
75
|
+
4. **Failover to backup:** `[failover steps]` — use if: [condition]
|
|
76
|
+
5. **Feature flag off:** `[flag command]` — use if: [condition]
|
|
77
|
+
|
|
78
|
+
## Communication template
|
|
79
|
+
**Internal Slack:** "@oncall [P0] [service] is [symptom]. Investigating. ETA: [X] min"
|
|
80
|
+
**Status page:** "[Service] is currently experiencing [symptom]. We are investigating."
|
|
81
|
+
**Customer email:** [only for P0 lasting > 30 minutes]
|
|
82
|
+
|
|
83
|
+
## Post-incident (after mitigation)
|
|
84
|
+
1. Update status page: "Resolved. [Brief cause]."
|
|
85
|
+
2. Write postmortem within 48 hours (see template below)
|
|
86
|
+
3. Create follow-up tickets for permanent fix
|
|
87
|
+
|
|
88
|
+
## Escalation path
|
|
89
|
+
L1 On-call → L2 Senior engineer → L3 Engineering lead → L4 CTO
|
|
90
|
+
Escalate when: unable to mitigate within [X] minutes or if [condition]
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Postmortem template (blameless — always)
|
|
94
|
+
|
|
95
|
+
File: `docs/postmortems/[YYYY-MM-DD]-[short-title].md`
|
|
96
|
+
|
|
97
|
+
```markdown
|
|
98
|
+
# Postmortem: [Title]
|
|
99
|
+
**Date of incident:** [ISO-8601]
|
|
100
|
+
**Duration:** [start] → [end] ([X] minutes)
|
|
101
|
+
**Severity:** P[0-3]
|
|
102
|
+
**Author:** [human owner who wrote this]
|
|
103
|
+
**Reviewed by:** [who reviewed]
|
|
104
|
+
**AI assistance:** [if used, list tool and confirm human approval]
|
|
105
|
+
|
|
106
|
+
## Summary
|
|
107
|
+
[2-3 sentences: what happened, what the impact was, what resolved it]
|
|
108
|
+
|
|
109
|
+
## Timeline (UTC)
|
|
110
|
+
| Time | Event |
|
|
111
|
+
|---|---|
|
|
112
|
+
| HH:MM | [Alert fired / Issue observed] |
|
|
113
|
+
| HH:MM | [First responder acknowledged] |
|
|
114
|
+
| HH:MM | [Root cause identified] |
|
|
115
|
+
| HH:MM | [Mitigation applied] |
|
|
116
|
+
| HH:MM | [Incident resolved] |
|
|
117
|
+
|
|
118
|
+
## Root cause
|
|
119
|
+
[One paragraph describing the technical root cause. Factual, no blame.]
|
|
120
|
+
|
|
121
|
+
## Impact
|
|
122
|
+
- Users affected: [number or percentage]
|
|
123
|
+
- Duration: [X] minutes
|
|
124
|
+
- Data loss: Yes / No (if yes: what data, how much)
|
|
125
|
+
- Revenue impact: [estimate if known]
|
|
126
|
+
- SLA breach: Yes / No
|
|
127
|
+
|
|
128
|
+
## What went well
|
|
129
|
+
- [Thing 1 that helped: good alert, good runbook, fast diagnosis]
|
|
130
|
+
- [Thing 2]
|
|
131
|
+
|
|
132
|
+
## What went poorly
|
|
133
|
+
- [Thing 1 that slowed resolution: no runbook, missed alert, unclear owner]
|
|
134
|
+
- [Thing 2]
|
|
135
|
+
|
|
136
|
+
## Action items
|
|
137
|
+
| Action | Owner | Due date | Priority |
|
|
138
|
+
|---|---|---|---|
|
|
139
|
+
| [Preventive action 1] | [name] | [date] | P[1-3] |
|
|
140
|
+
| [Detection improvement] | [name] | [date] | P[1-3] |
|
|
141
|
+
|
|
142
|
+
## Lessons learned
|
|
143
|
+
[What systemic changes does this incident motivate?]
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Monitoring standards (write monitoring alongside every feature)
|
|
147
|
+
|
|
148
|
+
Every new feature must ship with:
|
|
149
|
+
1. **Health check endpoint:** `GET /health` returns 200 when service is operational
|
|
150
|
+
2. **Key metrics instrumented at the service boundary:** request count, error rate, p95 latency, queue depth
|
|
151
|
+
3. **Alerts defined:** at minimum:
|
|
152
|
+
- Error rate > 1% for 5 minutes → P1 alert
|
|
153
|
+
- p95 latency > [NFR threshold] for 5 minutes → P2 alert
|
|
154
|
+
- Zero requests for 5 minutes (if expected traffic) → P1 alert
|
|
155
|
+
4. **Runbook linked in alert:** every alert description links to its runbook
|
|
156
|
+
|
|
157
|
+
## Hotfix protocol
|
|
158
|
+
|
|
159
|
+
When a production issue requires an immediate code fix:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# 1. Create hotfix branch from production tag
|
|
163
|
+
git checkout -b hotfix/[description] v[last-release-tag]
|
|
164
|
+
|
|
165
|
+
# 2. Apply the minimal fix — do not add anything else
|
|
166
|
+
# 3. Write or update the test that catches this bug
|
|
167
|
+
# 4. Verify the fix
|
|
168
|
+
npm test
|
|
169
|
+
|
|
170
|
+
# 5. PR to main AND to the release branch
|
|
171
|
+
# 6. Deploy to production immediately after approval
|
|
172
|
+
# 7. Tag the hotfix release
|
|
173
|
+
git tag -a v[X.Y.Z+1] -m "Hotfix: [description]"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Self-check before task completion
|
|
177
|
+
- [ ] Severity classified and communicated
|
|
178
|
+
- [ ] Runbook updated or created
|
|
179
|
+
- [ ] Timeline captured in postmortem
|
|
180
|
+
- [ ] Follow-up actions created and assigned
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: performance
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
min_mindforge_version: 0.3.0
|
|
5
|
+
status: stable
|
|
6
|
+
triggers: performance, latency, throughput, cache, caching, slow, optimise, optimize, bottleneck, profil, load time, bundle size, memory, CPU, query time, response time, timeout, rate limit, debounce, throttle, memoize, lazy load, code split, tree shake, LCP, CLS, FID, INP, Core Web Vitals, lighthouse
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill — Performance Engineering
|
|
10
|
+
|
|
11
|
+
## When this skill activates
|
|
12
|
+
Any task involving response time, resource usage, bundle size, database query
|
|
13
|
+
performance, or user-perceived load time metrics.
|
|
14
|
+
|
|
15
|
+
## Mandatory actions when this skill is active
|
|
16
|
+
|
|
17
|
+
### Before writing any code
|
|
18
|
+
1. Identify what is being measured. Never optimise without a baseline.
|
|
19
|
+
2. Read the relevant metric from REQUIREMENTS.md (NFRs):
|
|
20
|
+
- API response time target (e.g., p95 < 200ms)
|
|
21
|
+
- Page load time target (e.g., LCP < 2.5s)
|
|
22
|
+
- Bundle size budget (e.g., < 200KB gzipped initial JS)
|
|
23
|
+
3. If no NFR is defined: ask the user to define one before optimising.
|
|
24
|
+
"Optimisation without a target is premature optimisation."
|
|
25
|
+
|
|
26
|
+
### Backend performance standards
|
|
27
|
+
|
|
28
|
+
**Database queries:**
|
|
29
|
+
- Every query must use indexes for its WHERE, JOIN, and ORDER BY columns
|
|
30
|
+
- Detect N+1 queries: if fetching a list then querying per item, use JOIN or batch fetch
|
|
31
|
+
- Pagination: always paginate list endpoints (default page size: 20, max: 100)
|
|
32
|
+
- Avoid `SELECT *` — select only the columns needed
|
|
33
|
+
- Use `EXPLAIN ANALYZE` (PostgreSQL) or `EXPLAIN` (MySQL) to verify query plans
|
|
34
|
+
- Cache repeated identical queries: Redis with appropriate TTL
|
|
35
|
+
|
|
36
|
+
**API response time:**
|
|
37
|
+
- Default targets (override with NFRs): p50 < 100ms, p95 < 500ms, p99 < 2000ms for most endpoints
|
|
38
|
+
- Slow endpoints (> 500ms): must be async (return immediately, use webhooks or polling)
|
|
39
|
+
- Database connection pooling: always use a connection pool (never open/close per request)
|
|
40
|
+
- Pool sizing: start with `min=2`, `max=CPU * 2 + 2` per instance, then tune to DB limits and workload
|
|
41
|
+
- Serverless: prefer a DB proxy (PgBouncer, RDS Proxy) or driver-level pooling that supports bursty concurrency
|
|
42
|
+
- Avoid synchronous I/O in request handlers
|
|
43
|
+
- Cache hot DB reads at the query or service layer when data is read-heavy and tolerant of staleness
|
|
44
|
+
|
|
45
|
+
**Caching strategy:**
|
|
46
|
+
Defaults below — tune per data freshness requirements and invalidate on writes.
|
|
47
|
+
| Data type | Recommended cache | TTL |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| User session data | Redis | 24 hours |
|
|
50
|
+
| Computed aggregates | Redis | 1–5 minutes |
|
|
51
|
+
| Static reference data | Redis | 1 hour |
|
|
52
|
+
| User-specific data | Redis with user key | 15 minutes |
|
|
53
|
+
| API responses | HTTP Cache-Control | depends on freshness needs |
|
|
54
|
+
|
|
55
|
+
### Frontend performance standards
|
|
56
|
+
|
|
57
|
+
**Bundle size budgets:**
|
|
58
|
+
| Asset | Budget (gzipped) |
|
|
59
|
+
|---|---|
|
|
60
|
+
| Initial JavaScript | < 200KB |
|
|
61
|
+
| Initial CSS | < 50KB |
|
|
62
|
+
| Per-route chunk | < 100KB |
|
|
63
|
+
| Images (hero) | < 200KB WebP |
|
|
64
|
+
| Fonts | < 50KB per weight |
|
|
65
|
+
|
|
66
|
+
**Core Web Vitals targets (Google's thresholds):**
|
|
67
|
+
| Metric | Good | Needs improvement | Poor |
|
|
68
|
+
|---|---|---|---|
|
|
69
|
+
| LCP (Largest Contentful Paint) | < 2.5s | 2.5–4s | > 4s |
|
|
70
|
+
| INP (Interaction to Next Paint) | < 200ms | 200–500ms | > 500ms |
|
|
71
|
+
| CLS (Cumulative Layout Shift) | < 0.1 | 0.1–0.25 | > 0.25 |
|
|
72
|
+
|
|
73
|
+
**Implementation patterns:**
|
|
74
|
+
- Route-based code splitting: every route is its own chunk
|
|
75
|
+
- Lazy load non-critical components: `React.lazy()` + `Suspense`
|
|
76
|
+
- Image optimisation: use `next/image` or equivalent. Always specify `width`/`height`.
|
|
77
|
+
- Font loading: `font-display: swap`. Preload critical fonts.
|
|
78
|
+
- Avoid layout thrashing: batch DOM reads before DOM writes
|
|
79
|
+
- Debounce user input handlers (search: 300ms, resize: 100ms)
|
|
80
|
+
- Memoize expensive computations: `useMemo` / `useCallback` where measured
|
|
81
|
+
|
|
82
|
+
**SSR/SSG guidance:**
|
|
83
|
+
- Prefer SSG for marketing and content pages with low data volatility
|
|
84
|
+
- Prefer SSR for personalized data, but watch TTFB and cache at the edge where possible
|
|
85
|
+
- For hybrid apps, stream server components or HTML where supported to reduce TTFB and improve LCP
|
|
86
|
+
|
|
87
|
+
### Performance measurement commands
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Backend: measure API response time
|
|
91
|
+
curl -w "@curl-format.txt" -o /dev/null -s https://api.example.com/endpoint
|
|
92
|
+
|
|
93
|
+
# Frontend: Lighthouse CI
|
|
94
|
+
npx lighthouse https://example.com --output json --output-path ./lighthouse.json
|
|
95
|
+
|
|
96
|
+
# Bundle analysis
|
|
97
|
+
npx bundle-analyzer stats.json
|
|
98
|
+
|
|
99
|
+
# Node.js profiling
|
|
100
|
+
node --prof app.js
|
|
101
|
+
node --prof-process isolate-*.log > profile.txt
|
|
102
|
+
|
|
103
|
+
# Database: explain query
|
|
104
|
+
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com';
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Performance review checklist
|
|
108
|
+
Before marking any task done that involves a query or endpoint:
|
|
109
|
+
- [ ] Query uses appropriate indexes (verified with EXPLAIN)
|
|
110
|
+
- [ ] No N+1 queries in list endpoints
|
|
111
|
+
- [ ] Response time verified locally (curl with timing)
|
|
112
|
+
- [ ] No `SELECT *` in production queries
|
|
113
|
+
- [ ] Caching applied where data is read-heavy and tolerance allows staleness
|
|
114
|
+
|
|
115
|
+
## Output
|
|
116
|
+
Write performance notes to SUMMARY.md:
|
|
117
|
+
- Baseline metric (before)
|
|
118
|
+
- Achieved metric (after)
|
|
119
|
+
- What optimisation was applied
|
|
120
|
+
- Whether the NFR target was met ✅ or still needs work ⚠️
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-review
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
min_mindforge_version: 0.1.0
|
|
5
|
+
status: stable
|
|
6
|
+
triggers: auth, authentication, authorisation, authorization, login, logout, password, token, JWT, session, cookie, OAuth, payment, billing, stripe, PII, GDPR, personal data, upload, file upload, credentials, API key, secret, env, environment variable, encryption, hashing, bcrypt, argon2
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill — Security Review
|
|
10
|
+
|
|
11
|
+
## When this skill activates
|
|
12
|
+
Any task involving user identity, data protection, payments, file handling,
|
|
13
|
+
or credential management. When in doubt: load this skill.
|
|
14
|
+
|
|
15
|
+
## Mandatory actions when this skill is active
|
|
16
|
+
|
|
17
|
+
### Before writing any code
|
|
18
|
+
1. Switch to `security-reviewer.md` persona.
|
|
19
|
+
2. Read the existing code in every file you will touch.
|
|
20
|
+
3. Identify existing vulnerabilities before introducing new ones.
|
|
21
|
+
4. Review SECURITY.md for org-specific policies.
|
|
22
|
+
|
|
23
|
+
### During implementation
|
|
24
|
+
Apply these patterns by default — do not wait to be asked:
|
|
25
|
+
|
|
26
|
+
**Authentication**
|
|
27
|
+
- Passwords: bcrypt (cost ≥ 12) or argon2id. Never MD5, SHA1, or unsalted SHA256.
|
|
28
|
+
- Tokens: cryptographically random, minimum 32 bytes. Use `crypto.randomBytes(32)`.
|
|
29
|
+
- JWT: short expiry (15 min access, 7 day refresh). Store refresh in httpOnly cookie.
|
|
30
|
+
- Sessions: regenerate session ID on privilege escalation. Invalidate on logout.
|
|
31
|
+
|
|
32
|
+
**Authorisation**
|
|
33
|
+
- Check permissions server-side on every request. Never trust client-sent roles.
|
|
34
|
+
- Use deny-by-default. Grant only the minimum required permissions.
|
|
35
|
+
- Log every authorisation failure with user ID, resource, and timestamp.
|
|
36
|
+
|
|
37
|
+
**Input handling**
|
|
38
|
+
- Validate all input at the boundary (route handler). Reject, never sanitise.
|
|
39
|
+
- SQL: parameterised queries only. Never string concatenation.
|
|
40
|
+
- File uploads: validate MIME type server-side. Never trust `Content-Type` header alone.
|
|
41
|
+
- Redirect URLs: whitelist allowed domains. Never redirect to arbitrary user input.
|
|
42
|
+
|
|
43
|
+
**Secrets**
|
|
44
|
+
- Environment variables only. Never in source code. Never in git.
|
|
45
|
+
- Rotate credentials if there is any suspicion of exposure.
|
|
46
|
+
- Use a secrets manager (Vault, AWS Secrets Manager) in production.
|
|
47
|
+
|
|
48
|
+
### After implementation
|
|
49
|
+
Run the OWASP checklist from `security-reviewer.md` against your own diff.
|
|
50
|
+
Write findings to `.planning/phases/phase-N/SECURITY-REVIEW-N.md`.
|
|
51
|
+
|
|
52
|
+
## Red lines (stop immediately if you encounter these)
|
|
53
|
+
- A hardcoded secret, password, or API key anywhere in the codebase
|
|
54
|
+
- A SQL query built by string concatenation
|
|
55
|
+
- A password comparison using `==` instead of a constant-time function
|
|
56
|
+
- JWT verification being skipped or using `none` algorithm
|
|
57
|
+
- User input being passed directly to `eval()`, `exec()`, or shell commands
|
|
58
|
+
|
|
59
|
+
## Self-check before task completion
|
|
60
|
+
|
|
61
|
+
Before marking a task done when this skill was active:
|
|
62
|
+
|
|
63
|
+
- [ ] Did I read the full SKILL.md before starting? (Not just the triggers)
|
|
64
|
+
- [ ] Did I activate the corresponding persona file?
|
|
65
|
+
- [ ] Did I apply every mandatory action in this skill, not just the ones
|
|
66
|
+
I remembered off the top of my head?
|
|
67
|
+
- [ ] If this skill produced an output file (review, security report, etc.),
|
|
68
|
+
has that file been written to the correct path?
|
|
69
|
+
|
|
70
|
+
## When you find a vulnerability
|
|
71
|
+
|
|
72
|
+
Do not silently fix it and move on. For every vulnerability found:
|
|
73
|
+
|
|
74
|
+
1. **Stop the current task.**
|
|
75
|
+
2. **Classify it** using the severity model (CRITICAL / HIGH / MEDIUM / LOW).
|
|
76
|
+
3. **For CRITICAL or HIGH:** Write to `SECURITY-REVIEW-N.md` immediately.
|
|
77
|
+
Tell the user. Do not proceed with ANY other work until acknowledged.
|
|
78
|
+
4. **For MEDIUM:** Write to `SECURITY-REVIEW-N.md`. Finish the current task.
|
|
79
|
+
Flag at the end of the SUMMARY.md.
|
|
80
|
+
5. **For LOW:** Write to `SECURITY-REVIEW-N.md`. Note in SUMMARY.md.
|
|
81
|
+
|
|
82
|
+
The worst security outcome is a vulnerability that was found, noted mentally,
|
|
83
|
+
and then forgotten when context rolled over. Write it down. Always.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing-standards
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
min_mindforge_version: 0.1.0
|
|
5
|
+
status: stable
|
|
6
|
+
triggers: test, tests, spec, unit test, integration test, e2e, coverage, jest, vitest, pytest, mocha, assertion, mock, stub, spy, fixture, TDD
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill — Testing Standards
|
|
10
|
+
|
|
11
|
+
## When this skill activates
|
|
12
|
+
Any task involving writing, running, or improving tests.
|
|
13
|
+
|
|
14
|
+
## Mandatory actions when this skill is active
|
|
15
|
+
|
|
16
|
+
### Before writing tests
|
|
17
|
+
1. Identify the exact behavior to verify.
|
|
18
|
+
2. Define the failure condition you expect to prevent.
|
|
19
|
+
|
|
20
|
+
### During testing
|
|
21
|
+
- Use the AAA pattern with clear separation.
|
|
22
|
+
- Keep tests isolated and deterministic.
|
|
23
|
+
- Cover both happy and error paths.
|
|
24
|
+
|
|
25
|
+
### After testing
|
|
26
|
+
- Run the full test suite.
|
|
27
|
+
- Record any new tests in SUMMARY.md with paths.
|
|
28
|
+
|
|
29
|
+
## Coverage targets
|
|
30
|
+
| Test type | Target | Measured on |
|
|
31
|
+
|------------------|---------|---------------------------|
|
|
32
|
+
| Unit | 80% | Business logic files only |
|
|
33
|
+
| Integration | 100% | All API endpoints |
|
|
34
|
+
| E2E | 100% | Critical user flows |
|
|
35
|
+
|
|
36
|
+
## Test structure — AAA pattern (non-negotiable)
|
|
37
|
+
```typescript
|
|
38
|
+
it('should return 401 when token is expired', async () => {
|
|
39
|
+
// Arrange
|
|
40
|
+
const expiredToken = generateExpiredToken()
|
|
41
|
+
const request = buildRequest({ authorization: `Bearer ${expiredToken}` })
|
|
42
|
+
|
|
43
|
+
// Act
|
|
44
|
+
const response = await handler(request)
|
|
45
|
+
|
|
46
|
+
// Assert
|
|
47
|
+
expect(response.status).toBe(401)
|
|
48
|
+
expect(response.body.error.code).toBe('TOKEN_EXPIRED')
|
|
49
|
+
})
|
|
50
|
+
```
|
|
51
|
+
Blank line between Arrange, Act, and Assert sections. Always.
|
|
52
|
+
|
|
53
|
+
## Test naming convention
|
|
54
|
+
Pattern: `should [expected behaviour] when [condition]`
|
|
55
|
+
- ✅ `should return 404 when user does not exist`
|
|
56
|
+
- ✅ `should hash password before storing in database`
|
|
57
|
+
- ❌ `user test 4`
|
|
58
|
+
- ❌ `test password`
|
|
59
|
+
|
|
60
|
+
## Test isolation requirements
|
|
61
|
+
- Every test must be able to run independently in any order
|
|
62
|
+
- No shared mutable state between tests
|
|
63
|
+
- Database state reset between integration tests (use transactions or test containers)
|
|
64
|
+
- External services mocked (HTTP, email, SMS, payment providers)
|
|
65
|
+
- No sleeps or arbitrary timeouts — use proper async patterns
|
|
66
|
+
|
|
67
|
+
## What to test (and what not to)
|
|
68
|
+
**Test:**
|
|
69
|
+
- Business logic and domain rules
|
|
70
|
+
- Edge cases: null, empty, boundary values
|
|
71
|
+
- Error paths: what happens when dependencies fail
|
|
72
|
+
- Security: auth bypass attempts, injection attempts
|
|
73
|
+
|
|
74
|
+
**Do not test:**
|
|
75
|
+
- Framework internals (trust the framework)
|
|
76
|
+
- Simple getters/setters with no logic
|
|
77
|
+
- Third-party library behaviour
|
|
78
|
+
|
|
79
|
+
## File placement
|
|
80
|
+
- Unit tests: co-located with source (`auth.ts` → `auth.test.ts`)
|
|
81
|
+
- Integration tests: `/tests/integration/`
|
|
82
|
+
- E2E tests: `/tests/e2e/`
|
|
83
|
+
- Test utilities/fixtures: `/tests/utils/`
|
|
84
|
+
|
|
85
|
+
## Before marking any task done
|
|
86
|
+
Run the full test suite. If any test fails: do not commit. Fix it first.
|
|
87
|
+
|
|
88
|
+
## Self-check before task completion
|
|
89
|
+
|
|
90
|
+
Before marking a task done when this skill was active:
|
|
91
|
+
|
|
92
|
+
- [ ] Did I read the full SKILL.md before starting? (Not just the triggers)
|
|
93
|
+
- [ ] Did I activate the corresponding persona file?
|
|
94
|
+
- [ ] Did I apply every mandatory action in this skill, not just the ones
|
|
95
|
+
I remembered off the top of my head?
|
|
96
|
+
- [ ] If this skill produced an output file (review, security report, etc.),
|
|
97
|
+
has that file been written to the correct path?
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# MindForge Team Profile
|
|
2
|
+
# Auto-generated by /mindforge:profile-team
|
|
3
|
+
|
|
4
|
+
## IMPORTANT: Metrics usage policy
|
|
5
|
+
Per ADR-014, data in this file and `.mindforge/metrics/` is for system
|
|
6
|
+
improvement only, not developer performance evaluation.
|
|
7
|
+
|
|
8
|
+
Use data for:
|
|
9
|
+
- response personalization
|
|
10
|
+
- skill loading improvements
|
|
11
|
+
- compaction and planning tuning
|
|
12
|
+
- process retrospectives (not people scoring)
|
|
13
|
+
|
|
14
|
+
## Team composition
|
|
15
|
+
| Name | Email | Primary role | Timezone | Experience |
|
|
16
|
+
|---|---|---|---|---|
|
|
17
|
+
| [Name] | [email] | [role] | [UTC+X] | [level] |
|
|
18
|
+
|
|
19
|
+
## Tech stack preferences
|
|
20
|
+
| Layer | Preferred | Comfortable | Learning |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| Backend | TypeScript/Node.js | Python | Go |
|
|
23
|
+
| Frontend | React/Next.js | Vue | Svelte |
|
|
24
|
+
| Database | PostgreSQL | MySQL | MongoDB |
|
|
25
|
+
| Testing | Vitest | Jest | Playwright |
|
|
26
|
+
|
|
27
|
+
## Working patterns
|
|
28
|
+
- Average session length: [N] minutes
|
|
29
|
+
- Peak working hours: [N-N]
|
|
30
|
+
- Verify pass rate: [N%]
|
|
31
|
+
- Common failure type: [from AUDIT]
|
|
32
|
+
|
|
33
|
+
## Personalization rules
|
|
34
|
+
- Verbosity: concise
|
|
35
|
+
- Review style: direct
|
|
36
|
+
- Preferred code organization: feature-based
|
|
37
|
+
|
|
38
|
+
## Known strengths
|
|
39
|
+
- [area]
|
|
40
|
+
|
|
41
|
+
## Known growth areas
|
|
42
|
+
- [area]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# MindForge Team — Multi-Developer HANDOFF
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
Allow multiple developers or agent sessions to collaborate without silently
|
|
5
|
+
stomping shared state.
|
|
6
|
+
|
|
7
|
+
## Shared coordination rules
|
|
8
|
+
When a developer starts a plan, first check shared `HANDOFF.json` state. If the
|
|
9
|
+
same plan already appears under `active_developers`, stop and ask for
|
|
10
|
+
clarification before proceeding.
|
|
11
|
+
|
|
12
|
+
Developers with `last_seen` older than 4 hours are considered stale and may be
|
|
13
|
+
removed automatically on the next session start.
|
|
14
|
+
|
|
15
|
+
## Required shared state fields
|
|
16
|
+
- `active_developers`
|
|
17
|
+
- current phase and plan ownership
|
|
18
|
+
- recent files
|
|
19
|
+
- blockers and decisions needed
|
|
20
|
+
|
|
21
|
+
## Audit discipline
|
|
22
|
+
Each task completion or failure commit must include any new AUDIT entries so
|
|
23
|
+
shared history is not stranded in an uncommitted worktree.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# MindForge Per-Developer Profiles
|
|
2
|
+
|
|
3
|
+
Use `PROFILE-[dev-id].md` files to store per-developer preferences and observed
|
|
4
|
+
patterns. `dev-id` is a sanitized email.
|
|
5
|
+
|
|
6
|
+
Template fields:
|
|
7
|
+
- Identity (name/email/role/timezone)
|
|
8
|
+
- Communication preferences
|
|
9
|
+
- Technical preferences
|
|
10
|
+
- Observed session metrics
|
|
11
|
+
- Strengths and growth areas
|
|
12
|
+
|
|
13
|
+
Privacy: include only professional, collaboration-relevant data.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# MindForge Team — Session Merger
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
Merge concurrent session state safely after parallel work or multi-developer
|
|
5
|
+
execution.
|
|
6
|
+
|
|
7
|
+
## Merge strategy
|
|
8
|
+
1. Merge `HANDOFF.json` through git, not ad hoc overwrite
|
|
9
|
+
2. Resolve conflicts explicitly when two sessions claim the same plan
|
|
10
|
+
3. Preserve both sides' blockers and decisions until reconciled
|
|
11
|
+
4. Keep AUDIT append-only; ensure entries were committed with the task commits
|
|
12
|
+
|
|
13
|
+
Git merge conflicts are the correct mechanism for contested shared state.
|
|
14
|
+
|
|
15
|
+
## Conflict rules
|
|
16
|
+
- Same plan claimed by two developers: escalate for human resolution
|
|
17
|
+
- Different plans touching shared files: merge carefully, then rerun verification
|
|
18
|
+
- Stale active developer entry: prune if `last_seen` is older than 4 hours
|
|
File without changes
|
|
File without changes
|