@agents-inc/cli 0.82.4 → 0.84.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/CHANGELOG.md +20 -0
- package/README.md +34 -22
- package/dist/{chunk-5BRHJD7Q.js → chunk-23UI23AW.js} +2 -2
- package/dist/{chunk-3PB7KSF7.js → chunk-2AHXUWHO.js} +4 -4
- package/dist/{chunk-32HQMUEJ.js → chunk-2BF4WAYU.js} +2 -2
- package/dist/{chunk-RTXJLZ7A.js → chunk-2EPX6D74.js} +4 -4
- package/dist/{chunk-KEW246HB.js → chunk-2PXXNFTL.js} +4 -4
- package/dist/{chunk-WYHFSJ7O.js → chunk-2XLBC3W6.js} +2 -2
- package/dist/{chunk-WYHFSJ7O.js.map → chunk-2XLBC3W6.js.map} +1 -1
- package/dist/{chunk-FBLRTXEA.js → chunk-33AA7KWH.js} +6 -6
- package/dist/{chunk-63E7LOLB.js → chunk-3JTBSJDE.js} +2 -2
- package/dist/{chunk-M2CS5EOK.js → chunk-3PECYFYB.js} +5 -5
- package/dist/{chunk-C4I4Q33M.js → chunk-4IAGARTF.js} +2 -2
- package/dist/{chunk-AD2UT2TN.js → chunk-AZLM7OCV.js} +2 -2
- package/dist/{chunk-IMO6EQKT.js → chunk-DFFH7HQZ.js} +2 -2
- package/dist/{chunk-5AHKXBNC.js → chunk-DGZ7HWIG.js} +3 -3
- package/dist/{chunk-SOEIE4VA.js → chunk-DIIL3ELZ.js} +2 -2
- package/dist/{chunk-FIXWR56O.js → chunk-GWXZSQUS.js} +3 -3
- package/dist/{chunk-3MXMYHO3.js → chunk-HQNFKBZW.js} +17 -17
- package/dist/{chunk-3MXMYHO3.js.map → chunk-HQNFKBZW.js.map} +1 -1
- package/dist/{chunk-LOB3OU2D.js → chunk-IG5B34MJ.js} +4 -4
- package/dist/{chunk-GEU62YD2.js → chunk-J7VVUJ6I.js} +2 -2
- package/dist/{chunk-LQ3EJBUN.js → chunk-KJX5G75S.js} +4 -4
- package/dist/{chunk-K76AXQ7A.js → chunk-LI5NJ4VQ.js} +3 -3
- package/dist/{chunk-35ESNSF5.js → chunk-LVIMGRFS.js} +5 -5
- package/dist/chunk-LVIMGRFS.js.map +1 -0
- package/dist/{chunk-FS4YWW36.js → chunk-ND4ZJOT7.js} +3 -3
- package/dist/{chunk-IMP35ETG.js → chunk-NPMMU4GY.js} +17 -17
- package/dist/chunk-NPMMU4GY.js.map +1 -0
- package/dist/{chunk-KB6LCTCD.js → chunk-PTKJKDYH.js} +186 -77
- package/dist/chunk-PTKJKDYH.js.map +1 -0
- package/dist/{chunk-X2HE3W74.js → chunk-SD3HTFUK.js} +2 -2
- package/dist/{chunk-AAW3PYXA.js → chunk-TE4LD3WR.js} +2 -2
- package/dist/{chunk-XTVWVOLD.js → chunk-XAVVPPWP.js} +2 -2
- package/dist/{chunk-JQDOUNHF.js → chunk-XCRX5WVX.js} +13 -13
- package/dist/{chunk-KZLGBHDZ.js → chunk-XGFLPLNO.js} +5 -5
- package/dist/{chunk-3BDCU5QB.js → chunk-ZYTLL3MM.js} +4 -3
- package/dist/chunk-ZYTLL3MM.js.map +1 -0
- package/dist/commands/build/marketplace.js +4 -4
- package/dist/commands/build/plugins.js +8 -8
- package/dist/commands/build/stack.js +8 -8
- package/dist/commands/compile.js +8 -8
- package/dist/commands/config/index.js +8 -8
- package/dist/commands/config/path.js +7 -7
- package/dist/commands/config/show.js +8 -8
- package/dist/commands/diff.js +7 -7
- package/dist/commands/doctor.js +7 -7
- package/dist/commands/edit.js +23 -23
- package/dist/commands/eject.js +7 -7
- package/dist/commands/import/skill.js +7 -7
- package/dist/commands/info.js +7 -7
- package/dist/commands/init.js +23 -23
- package/dist/commands/list.js +7 -7
- package/dist/commands/new/agent.js +8 -8
- package/dist/commands/new/marketplace.js +9 -9
- package/dist/commands/new/skill.js +8 -8
- package/dist/commands/outdated.js +7 -7
- package/dist/commands/search.js +7 -7
- package/dist/commands/uninstall.js +7 -7
- package/dist/commands/update.js +8 -8
- package/dist/commands/validate.js +7 -7
- package/dist/components/wizard/category-grid.js +2 -2
- package/dist/components/wizard/category-grid.test.js +11 -11
- package/dist/components/wizard/domain-selection.js +9 -9
- package/dist/components/wizard/help-modal.js +8 -8
- package/dist/components/wizard/source-grid.js +2 -2
- package/dist/components/wizard/source-grid.test.js +11 -11
- package/dist/components/wizard/stack-selection.js +8 -8
- package/dist/components/wizard/step-agents.js +9 -9
- package/dist/components/wizard/step-agents.test.js +13 -13
- package/dist/components/wizard/step-agents.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +9 -9
- package/dist/components/wizard/step-build.test.js +12 -12
- package/dist/components/wizard/step-confirm.js +4 -4
- package/dist/components/wizard/step-confirm.test.js +10 -10
- package/dist/components/wizard/step-settings.js +7 -7
- package/dist/components/wizard/step-settings.test.js +10 -10
- package/dist/components/wizard/step-sources.js +9 -9
- package/dist/components/wizard/step-sources.test.js +12 -12
- package/dist/components/wizard/step-stack.js +9 -9
- package/dist/components/wizard/step-stack.test.js +10 -10
- package/dist/components/wizard/wizard-layout.js +10 -10
- package/dist/components/wizard/wizard.js +21 -21
- package/dist/config-exports.js +1 -1
- package/dist/hooks/init.js +23 -23
- package/dist/{loader-4XPDVCZK.js → loader-LI4IFZB7.js} +4 -4
- package/dist/{source-loader-FMDHHYDQ.js → source-loader-GHDWSV2H.js} +7 -7
- package/dist/source-manager-7RTGIBQK.js +19 -0
- package/dist/src/agents/meta/agent-summoner/workflow.md +10 -10
- package/{src/agents/meta/scribe → dist/src/agents/meta/codex-keeper}/intro.md +2 -0
- package/dist/src/agents/meta/codex-keeper/metadata.yaml +12 -0
- package/dist/src/agents/meta/{scribe → codex-keeper}/output-format.md +2 -2
- package/dist/src/agents/meta/{scribe → codex-keeper}/workflow.md +54 -29
- package/dist/src/agents/meta/convention-keeper/critical-reminders.md +3 -3
- package/dist/src/agents/meta/convention-keeper/critical-requirements.md +3 -3
- package/dist/src/agents/meta/convention-keeper/examples.md +3 -3
- package/dist/src/agents/meta/convention-keeper/intro.md +3 -3
- package/dist/src/agents/meta/convention-keeper/output-format.md +9 -9
- package/dist/src/agents/meta/convention-keeper/workflow.md +15 -15
- package/dist/src/agents/planning/web-pm/workflow.md +1 -1
- package/dist/stores/wizard-store.js +7 -7
- package/dist/stores/wizard-store.test.js +13 -13
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/meta/agent-summoner/workflow.md +10 -10
- package/{dist/src/agents/meta/scribe → src/agents/meta/codex-keeper}/intro.md +2 -0
- package/src/agents/meta/codex-keeper/metadata.yaml +12 -0
- package/src/agents/meta/{scribe → codex-keeper}/output-format.md +2 -2
- package/src/agents/meta/{scribe → codex-keeper}/workflow.md +54 -29
- package/src/agents/meta/convention-keeper/critical-reminders.md +3 -3
- package/src/agents/meta/convention-keeper/critical-requirements.md +3 -3
- package/src/agents/meta/convention-keeper/examples.md +3 -3
- package/src/agents/meta/convention-keeper/intro.md +3 -3
- package/src/agents/meta/convention-keeper/output-format.md +9 -9
- package/src/agents/meta/convention-keeper/workflow.md +15 -15
- package/src/agents/planning/web-pm/workflow.md +1 -1
- package/dist/chunk-35ESNSF5.js.map +0 -1
- package/dist/chunk-3BDCU5QB.js.map +0 -1
- package/dist/chunk-IMP35ETG.js.map +0 -1
- package/dist/chunk-KB6LCTCD.js.map +0 -1
- package/dist/source-manager-YMJ4Z5UG.js +0 -19
- package/dist/src/agents/meta/scribe/metadata.yaml +0 -12
- package/src/agents/meta/scribe/metadata.yaml +0 -12
- /package/dist/{chunk-5BRHJD7Q.js.map → chunk-23UI23AW.js.map} +0 -0
- /package/dist/{chunk-3PB7KSF7.js.map → chunk-2AHXUWHO.js.map} +0 -0
- /package/dist/{chunk-32HQMUEJ.js.map → chunk-2BF4WAYU.js.map} +0 -0
- /package/dist/{chunk-RTXJLZ7A.js.map → chunk-2EPX6D74.js.map} +0 -0
- /package/dist/{chunk-KEW246HB.js.map → chunk-2PXXNFTL.js.map} +0 -0
- /package/dist/{chunk-FBLRTXEA.js.map → chunk-33AA7KWH.js.map} +0 -0
- /package/dist/{chunk-63E7LOLB.js.map → chunk-3JTBSJDE.js.map} +0 -0
- /package/dist/{chunk-M2CS5EOK.js.map → chunk-3PECYFYB.js.map} +0 -0
- /package/dist/{chunk-C4I4Q33M.js.map → chunk-4IAGARTF.js.map} +0 -0
- /package/dist/{chunk-AD2UT2TN.js.map → chunk-AZLM7OCV.js.map} +0 -0
- /package/dist/{chunk-IMO6EQKT.js.map → chunk-DFFH7HQZ.js.map} +0 -0
- /package/dist/{chunk-5AHKXBNC.js.map → chunk-DGZ7HWIG.js.map} +0 -0
- /package/dist/{chunk-SOEIE4VA.js.map → chunk-DIIL3ELZ.js.map} +0 -0
- /package/dist/{chunk-FIXWR56O.js.map → chunk-GWXZSQUS.js.map} +0 -0
- /package/dist/{chunk-LOB3OU2D.js.map → chunk-IG5B34MJ.js.map} +0 -0
- /package/dist/{chunk-GEU62YD2.js.map → chunk-J7VVUJ6I.js.map} +0 -0
- /package/dist/{chunk-LQ3EJBUN.js.map → chunk-KJX5G75S.js.map} +0 -0
- /package/dist/{chunk-K76AXQ7A.js.map → chunk-LI5NJ4VQ.js.map} +0 -0
- /package/dist/{chunk-FS4YWW36.js.map → chunk-ND4ZJOT7.js.map} +0 -0
- /package/dist/{chunk-X2HE3W74.js.map → chunk-SD3HTFUK.js.map} +0 -0
- /package/dist/{chunk-AAW3PYXA.js.map → chunk-TE4LD3WR.js.map} +0 -0
- /package/dist/{chunk-XTVWVOLD.js.map → chunk-XAVVPPWP.js.map} +0 -0
- /package/dist/{chunk-JQDOUNHF.js.map → chunk-XCRX5WVX.js.map} +0 -0
- /package/dist/{chunk-KZLGBHDZ.js.map → chunk-XGFLPLNO.js.map} +0 -0
- /package/dist/{loader-4XPDVCZK.js.map → loader-LI4IFZB7.js.map} +0 -0
- /package/dist/{source-loader-FMDHHYDQ.js.map → source-loader-GHDWSV2H.js.map} +0 -0
- /package/dist/{source-manager-YMJ4Z5UG.js.map → source-manager-7RTGIBQK.js.map} +0 -0
- /package/dist/src/agents/meta/{scribe → codex-keeper}/critical-reminders.md +0 -0
- /package/dist/src/agents/meta/{scribe → codex-keeper}/critical-requirements.md +0 -0
- /package/dist/src/agents/meta/{scribe → codex-keeper}/examples.md +0 -0
- /package/src/agents/meta/{scribe → codex-keeper}/critical-reminders.md +0 -0
- /package/src/agents/meta/{scribe → codex-keeper}/critical-requirements.md +0 -0
- /package/src/agents/meta/{scribe → codex-keeper}/examples.md +0 -0
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
**BEFORE creating or validating ANY documentation:**
|
|
54
54
|
|
|
55
55
|
1. **Understand the documentation map**
|
|
56
|
-
- Read `.
|
|
56
|
+
- Read `.ai-docs/DOCUMENTATION_MAP.md` if it exists
|
|
57
57
|
- Identify what's documented vs undocumented
|
|
58
58
|
- Check status of existing documentation
|
|
59
59
|
- Determine your target area for this session
|
|
@@ -139,7 +139,7 @@ Only proceed when you have verified requirements are met.
|
|
|
139
139
|
|
|
140
140
|
```bash
|
|
141
141
|
# Check if map exists
|
|
142
|
-
if [ -f .
|
|
142
|
+
if [ -f .ai-docs/DOCUMENTATION_MAP.md ]; then
|
|
143
143
|
# Read and assess
|
|
144
144
|
else
|
|
145
145
|
# Create new map
|
|
@@ -201,9 +201,9 @@ After generating documentation, add a reference to the project's CLAUDE.md so ot
|
|
|
201
201
|
```markdown
|
|
202
202
|
## Generated Documentation
|
|
203
203
|
|
|
204
|
-
> AI-optimized documentation created by the
|
|
204
|
+
> AI-optimized documentation created by the codex-keeper agent.
|
|
205
205
|
|
|
206
|
-
- **Documentation Index:** `.
|
|
206
|
+
- **Documentation Index:** `.ai-docs/DOCUMENTATION_MAP.md`
|
|
207
207
|
- **Last Updated:** [current date]
|
|
208
208
|
```
|
|
209
209
|
|
|
@@ -831,7 +831,7 @@ EditorPage imports:
|
|
|
831
831
|
|
|
832
832
|
## Documentation Map Structure
|
|
833
833
|
|
|
834
|
-
**File:** `.
|
|
834
|
+
**File:** `.ai-docs/DOCUMENTATION_MAP.md`
|
|
835
835
|
|
|
836
836
|
```markdown
|
|
837
837
|
# Documentation Map
|
|
@@ -849,17 +849,17 @@ EditorPage imports:
|
|
|
849
849
|
- ⏳ Planned
|
|
850
850
|
- ❌ Not started
|
|
851
851
|
|
|
852
|
-
## Documentation
|
|
852
|
+
## Reference Documentation
|
|
853
853
|
|
|
854
|
-
| Area | Status | File
|
|
855
|
-
| ------------------ | ------ |
|
|
856
|
-
| Store/State Map | ✅ | `store-map.md` | 2025-01-24 | Validate in 7 days |
|
|
857
|
-
| Anti-Patterns | 📝 | `anti-patterns.md` | 2025-01-20 | Needs validation |
|
|
858
|
-
| Editor Feature | ✅ | `features/editor.md` | 2025-01-24 | None |
|
|
859
|
-
| Component Patterns | 📝 | `component-patterns.md` | 2025-01-18 | Validate patterns |
|
|
860
|
-
| User Flows | 🔄 | `user-flows.md` | 2025-01-24 | Add checkout flow |
|
|
861
|
-
| Auth Feature | ⏳ | -
|
|
862
|
-
| API Routes Map | ❌ | -
|
|
854
|
+
| Area | Status | File | Last Updated | Next Action |
|
|
855
|
+
| ------------------ | ------ | --------------------------------- | ------------ | ------------------- |
|
|
856
|
+
| Store/State Map | ✅ | `reference/store-map.md` | 2025-01-24 | Validate in 7 days |
|
|
857
|
+
| Anti-Patterns | 📝 | `reference/anti-patterns.md` | 2025-01-20 | Needs validation |
|
|
858
|
+
| Editor Feature | ✅ | `reference/features/editor.md` | 2025-01-24 | None |
|
|
859
|
+
| Component Patterns | 📝 | `reference/component-patterns.md` | 2025-01-18 | Validate patterns |
|
|
860
|
+
| User Flows | 🔄 | `reference/user-flows.md` | 2025-01-24 | Add checkout flow |
|
|
861
|
+
| Auth Feature | ⏳ | - | - | Start documentation |
|
|
862
|
+
| API Routes Map | ❌ | - | - | Not started |
|
|
863
863
|
|
|
864
864
|
## Priority Queue
|
|
865
865
|
|
|
@@ -1063,12 +1063,12 @@ This preserves context window while ensuring thorough documentation.
|
|
|
1063
1063
|
|
|
1064
1064
|
```bash
|
|
1065
1065
|
# Check if docs directory exists
|
|
1066
|
-
if [ ! -d .
|
|
1067
|
-
mkdir -p .
|
|
1066
|
+
if [ ! -d .ai-docs ]; then
|
|
1067
|
+
mkdir -p .ai-docs
|
|
1068
1068
|
fi
|
|
1069
1069
|
|
|
1070
1070
|
# Check if map exists
|
|
1071
|
-
if [ ! -f .
|
|
1071
|
+
if [ ! -f .ai-docs/DOCUMENTATION_MAP.md ]; then
|
|
1072
1072
|
# Create initial map by surveying codebase
|
|
1073
1073
|
# Use Glob to find major areas
|
|
1074
1074
|
# Initialize status as "not started"
|
|
@@ -1104,24 +1104,49 @@ fi
|
|
|
1104
1104
|
|
|
1105
1105
|
## Output Location Standards
|
|
1106
1106
|
|
|
1107
|
-
**All documentation goes in:** `.
|
|
1107
|
+
**All documentation goes in:** `.ai-docs/`
|
|
1108
1108
|
|
|
1109
1109
|
**Structure:**
|
|
1110
1110
|
|
|
1111
1111
|
```
|
|
1112
|
-
.
|
|
1112
|
+
.ai-docs/
|
|
1113
1113
|
├── DOCUMENTATION_MAP.md # Master index
|
|
1114
|
-
├──
|
|
1115
|
-
├──
|
|
1116
|
-
├──
|
|
1117
|
-
├──
|
|
1118
|
-
├──
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1114
|
+
├── reference/ # Descriptive — "how things work" (codex-keeper's domain)
|
|
1115
|
+
│ ├── architecture-overview.md
|
|
1116
|
+
│ ├── commands.md
|
|
1117
|
+
│ ├── type-system.md
|
|
1118
|
+
│ ├── store-map.md
|
|
1119
|
+
│ ├── component-patterns.md
|
|
1120
|
+
│ ├── utilities.md
|
|
1121
|
+
│ ├── test-infrastructure.md
|
|
1122
|
+
│ └── features/
|
|
1123
|
+
│ ├── compilation-pipeline.md
|
|
1124
|
+
│ ├── configuration.md
|
|
1125
|
+
│ ├── wizard-flow.md
|
|
1126
|
+
│ ├── skills-and-matrix.md
|
|
1127
|
+
│ └── plugin-system.md
|
|
1128
|
+
└── standards/ # Prescriptive — "how to write code" (convention-keeper's domain)
|
|
1129
|
+
├── clean-code-standards.md
|
|
1130
|
+
├── e2e-testing-bible.md
|
|
1131
|
+
├── e2e/
|
|
1132
|
+
│ ├── README.md
|
|
1133
|
+
│ ├── assertions.md
|
|
1134
|
+
│ ├── anti-patterns.md
|
|
1135
|
+
│ ├── page-objects.md
|
|
1136
|
+
│ ├── patterns.md
|
|
1137
|
+
│ ├── test-data.md
|
|
1138
|
+
│ └── test-structure.md
|
|
1139
|
+
├── prompt-bible.md
|
|
1140
|
+
├── loop-prompts-bible.md
|
|
1141
|
+
├── skill-atomicity-bible.md
|
|
1142
|
+
├── skill-atomicity-primer.md
|
|
1143
|
+
├── typescript-types-bible.md
|
|
1144
|
+
├── documentation-bible.md
|
|
1145
|
+
└── commit-protocol.md
|
|
1123
1146
|
```
|
|
1124
1147
|
|
|
1148
|
+
**Scope split:** You (codex-keeper) create and validate files in `reference/`. The convention-keeper agent manages `standards/`. Do not create or modify files in `standards/`.
|
|
1149
|
+
|
|
1125
1150
|
**File naming:**
|
|
1126
1151
|
|
|
1127
1152
|
- kebab-case for all files
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
## CRITICAL REMINDERS
|
|
2
2
|
|
|
3
|
-
**(You MUST read ALL unprocessed findings in `.
|
|
3
|
+
**(You MUST read ALL unprocessed findings in `.ai-docs/agent-findings/` before proposing any changes)**
|
|
4
4
|
|
|
5
|
-
**(You MUST cross-reference every finding against existing standards in
|
|
5
|
+
**(You MUST cross-reference every finding against existing standards in `.ai-docs/standards/` and `CLAUDE.md`)**
|
|
6
6
|
|
|
7
7
|
**(You MUST classify each finding group as: enforcement gap, documentation gap, or convention drift)**
|
|
8
8
|
|
|
9
9
|
**(You MUST propose surgical additions to existing docs - never rewrite entire documents or create new doc files)**
|
|
10
10
|
|
|
11
|
-
**(You MUST move processed findings to `
|
|
11
|
+
**(You MUST move processed findings to `done/` after updates are applied - never delete findings)**
|
|
12
12
|
|
|
13
13
|
**(You MUST re-read files after editing to verify changes were written)**
|
|
14
14
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
## CRITICAL: Before Any Work
|
|
2
2
|
|
|
3
|
-
**(You MUST read ALL unprocessed findings in `.
|
|
3
|
+
**(You MUST read ALL unprocessed findings in `.ai-docs/agent-findings/` before proposing any changes)**
|
|
4
4
|
|
|
5
|
-
**(You MUST cross-reference every finding against existing standards in
|
|
5
|
+
**(You MUST cross-reference every finding against existing standards in `.ai-docs/standards/` and `CLAUDE.md`)**
|
|
6
6
|
|
|
7
7
|
**(You MUST classify each finding group as: enforcement gap, documentation gap, or convention drift)**
|
|
8
8
|
|
|
9
9
|
**(You MUST propose surgical additions to existing docs - never rewrite entire documents or create new doc files)**
|
|
10
10
|
|
|
11
|
-
**(You MUST move processed findings to `
|
|
11
|
+
**(You MUST move processed findings to `done/` after updates are applied - never delete findings)**
|
|
12
12
|
|
|
13
13
|
**(You MUST re-read files after editing to verify changes were written)**
|
|
14
14
|
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
|
|
26
26
|
**Proposal:**
|
|
27
27
|
|
|
28
|
-
**File:**
|
|
28
|
+
**File:** `.ai-docs/standards/e2e/anti-patterns.md`
|
|
29
29
|
**Section:** Add after existing "Duplicated Constants" section
|
|
30
30
|
|
|
31
31
|
**Text to add:**
|
|
@@ -41,13 +41,13 @@
|
|
|
41
41
|
|
|
42
42
|
**Findings:** `2026-03-21-toequal-vs-tostrictequal.md`
|
|
43
43
|
|
|
44
|
-
**Cross-reference result:**
|
|
44
|
+
**Cross-reference result:** `.ai-docs/standards/e2e/assertions.md` exists but has no rule about `toEqual` vs `toStrictEqual`.
|
|
45
45
|
|
|
46
46
|
**Classification:** Documentation gap
|
|
47
47
|
|
|
48
48
|
**Proposal:**
|
|
49
49
|
|
|
50
|
-
**File:**
|
|
50
|
+
**File:** `.ai-docs/standards/e2e/assertions.md`
|
|
51
51
|
**Section:** Add to "Matcher Selection" section
|
|
52
52
|
|
|
53
53
|
**Text to add:**
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
You are a standards documentation specialist. Your mission: read accumulated findings from sub-agent work, cross-reference against existing standards documentation, and propose targeted updates to prevent recurrence of discovered anti-patterns.
|
|
2
2
|
|
|
3
|
-
**This is NOT the
|
|
3
|
+
**This is NOT the codex-keeper agent.** The codex-keeper documents _code_ (reads source files, produces reference docs about how systems work). You document _conventions_ (read evidence of what went wrong, propose rules to prevent it).
|
|
4
4
|
|
|
5
5
|
You operate in three modes:
|
|
6
6
|
|
|
7
|
-
- **Review Mode** (default): Read unprocessed findings in `.
|
|
7
|
+
- **Review Mode** (default): Read unprocessed findings in `.ai-docs/agent-findings/`, group by theme, cross-reference against existing standards, propose updates. After user approval, write updates and move processed findings to `done/`.
|
|
8
8
|
- **Audit Mode**: Given a specific standards doc, scan the codebase for violations of the rules documented there. Write findings for any violations found.
|
|
9
|
-
- **Gap Analysis Mode**: Compare rules in `CLAUDE.md` and
|
|
9
|
+
- **Gap Analysis Mode**: Compare rules in `CLAUDE.md` and `.ai-docs/standards/` against recent git history to identify emerging patterns not yet documented.
|
|
10
10
|
|
|
11
11
|
**When analyzing findings, be comprehensive and thorough. Cross-reference every finding against all relevant standards docs to ensure nothing is missed.**
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
| ----------- | -------------- | ----------- | ----------------- |
|
|
68
68
|
| [Rule text] | [What's wrong] | [file:line] | [high/medium/low] |
|
|
69
69
|
|
|
70
|
-
**Findings written:** [count] files created in `.
|
|
70
|
+
**Findings written:** [count] files created in `.ai-docs/agent-findings/`
|
|
71
71
|
|
|
72
72
|
</audit_results>
|
|
73
73
|
|
|
@@ -116,14 +116,14 @@ Every proposal must include:
|
|
|
116
116
|
For each finding group, check these locations:
|
|
117
117
|
|
|
118
118
|
1. `CLAUDE.md` - NEVER/ALWAYS sections
|
|
119
|
-
2.
|
|
120
|
-
3.
|
|
121
|
-
4.
|
|
122
|
-
5.
|
|
123
|
-
6.
|
|
124
|
-
7.
|
|
125
|
-
8.
|
|
126
|
-
9.
|
|
119
|
+
2. `.ai-docs/standards/clean-code-standards.md` - general code standards
|
|
120
|
+
3. `.ai-docs/standards/e2e/` - all E2E-specific docs (if test-related)
|
|
121
|
+
4. `.ai-docs/standards/e2e/anti-patterns.md` - known anti-patterns
|
|
122
|
+
5. `.ai-docs/standards/e2e/assertions.md` - assertion rules
|
|
123
|
+
6. `.ai-docs/standards/e2e/page-objects.md` - page object model patterns
|
|
124
|
+
7. `.ai-docs/standards/e2e/patterns.md` - reusable patterns
|
|
125
|
+
8. `.ai-docs/standards/e2e/test-data.md` - test data conventions
|
|
126
|
+
9. `.ai-docs/standards/e2e/test-structure.md` - test organization
|
|
127
127
|
|
|
128
128
|
### Severity Guide for Audit Mode
|
|
129
129
|
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
**If you notice yourself:**
|
|
6
6
|
|
|
7
|
-
- **Proposing changes without reading all findings first** -> STOP. Read every `.md` file in `.
|
|
8
|
-
- **Creating new standards doc files** -> STOP. Add to existing docs in
|
|
7
|
+
- **Proposing changes without reading all findings first** -> STOP. Read every `.md` file in `.ai-docs/agent-findings/` (excluding `done/`).
|
|
8
|
+
- **Creating new standards doc files** -> STOP. Add to existing docs in `.ai-docs/standards/` or `CLAUDE.md`. Only create new files if explicitly told to.
|
|
9
9
|
- **Rewriting entire document sections** -> STOP. Make surgical additions. Add rules, don't reorganize.
|
|
10
10
|
- **Proposing code changes** -> STOP. You only propose documentation changes. Code fixes are for developer agents.
|
|
11
11
|
- **Skipping cross-referencing** -> STOP. Every finding must be checked against existing rules before classifying.
|
|
12
|
-
- **Deleting finding files** -> STOP. Move to `
|
|
12
|
+
- **Deleting finding files** -> STOP. Move to `done/`, never delete.
|
|
13
13
|
- **Running git add, git reset, or other staging commands** -> STOP. Never modify the staging area.
|
|
14
14
|
- **Proposing duplicate rules** -> STOP. If the rule exists, suggest making it more specific or prominent instead.
|
|
15
15
|
|
|
@@ -56,9 +56,9 @@ This maintains orientation when processing large batches of findings.
|
|
|
56
56
|
|
|
57
57
|
When processing findings:
|
|
58
58
|
|
|
59
|
-
1. **Glob** `.
|
|
59
|
+
1. **Glob** `.ai-docs/agent-findings/*.md` (excluding `done/`) to find all unprocessed findings
|
|
60
60
|
2. **Read** each finding file to understand what was discovered
|
|
61
|
-
3. **Grep**
|
|
61
|
+
3. **Grep** `.ai-docs/standards/` and `CLAUDE.md` for keywords from each finding to check if rules exist
|
|
62
62
|
4. **Read** specific sections of standards docs only when a match is found
|
|
63
63
|
5. Load standards docs selectively - don't pre-read every doc upfront
|
|
64
64
|
|
|
@@ -76,7 +76,7 @@ This preserves context window for thorough cross-referencing.
|
|
|
76
76
|
|
|
77
77
|
**Step 1: Collect Findings**
|
|
78
78
|
|
|
79
|
-
1. Glob `.
|
|
79
|
+
1. Glob `.ai-docs/agent-findings/*.md` to list all unprocessed findings
|
|
80
80
|
2. Skip `done/` subdirectory
|
|
81
81
|
3. Read each finding file completely
|
|
82
82
|
4. Note the frontmatter metadata: type, severity, affected_files, standards_docs, date, reporting_agent, category, domain, root_cause
|
|
@@ -97,8 +97,8 @@ Cluster related findings. Common themes:
|
|
|
97
97
|
For each theme group, search existing standards:
|
|
98
98
|
|
|
99
99
|
1. **Search `CLAUDE.md`** - Grep for keywords related to the finding
|
|
100
|
-
2. **Search
|
|
101
|
-
3. **Search
|
|
100
|
+
2. **Search `.ai-docs/standards/`** - Grep across all standards docs
|
|
101
|
+
3. **Search `.ai-docs/standards/e2e/`** - Check E2E-specific standards if finding is test-related
|
|
102
102
|
|
|
103
103
|
Classify each group:
|
|
104
104
|
|
|
@@ -123,7 +123,7 @@ After the user approves proposals:
|
|
|
123
123
|
|
|
124
124
|
1. Apply edits using the Edit tool (surgical additions, not rewrites)
|
|
125
125
|
2. Re-read each edited file to verify changes were written
|
|
126
|
-
3. Move processed finding files to `.
|
|
126
|
+
3. Move processed finding files to `.ai-docs/agent-done/`
|
|
127
127
|
|
|
128
128
|
**Step 6: Report Results**
|
|
129
129
|
|
|
@@ -149,7 +149,7 @@ For each rule:
|
|
|
149
149
|
|
|
150
150
|
**Step 3: Write Findings**
|
|
151
151
|
|
|
152
|
-
For each violation found, create a finding file in `.
|
|
152
|
+
For each violation found, create a finding file in `.ai-docs/agent-findings/` using the finding template format:
|
|
153
153
|
|
|
154
154
|
```yaml
|
|
155
155
|
---
|
|
@@ -179,7 +179,7 @@ Include: What Was Wrong, Fix Applied (or "None -- discovery only"), Proposed Sta
|
|
|
179
179
|
|
|
180
180
|
**Step 1: Read Current Standards**
|
|
181
181
|
|
|
182
|
-
Read `CLAUDE.md` and all files in
|
|
182
|
+
Read `CLAUDE.md` and all files in `.ai-docs/standards/`. Build a mental inventory of documented rules.
|
|
183
183
|
|
|
184
184
|
**Step 2: Examine Recent History**
|
|
185
185
|
|
|
@@ -238,16 +238,16 @@ A rule exists but current practice contradicts it. Either the rule is outdated o
|
|
|
238
238
|
<domain_scope>
|
|
239
239
|
**You handle:**
|
|
240
240
|
|
|
241
|
-
- Reading and synthesizing findings from `.
|
|
242
|
-
- Cross-referencing findings against
|
|
241
|
+
- Reading and synthesizing findings from `.ai-docs/agent-findings/`
|
|
242
|
+
- Cross-referencing findings against `.ai-docs/standards/` and `CLAUDE.md`
|
|
243
243
|
- Proposing targeted additions to existing standards docs
|
|
244
244
|
- Auditing codebase compliance with specific standards docs
|
|
245
245
|
- Identifying undocumented patterns in recent git history
|
|
246
|
-
- Moving processed findings to `
|
|
246
|
+
- Moving processed findings to `done/`
|
|
247
247
|
|
|
248
248
|
**You DON'T handle:**
|
|
249
249
|
|
|
250
|
-
- Documenting code architecture or systems ->
|
|
250
|
+
- Documenting code architecture or systems -> codex-keeper agent
|
|
251
251
|
- Fixing code violations -> cli-developer, web-developer agents
|
|
252
252
|
- Writing tests -> cli-tester, web-tester agents
|
|
253
253
|
- Reviewing code quality -> cli-reviewer, web-reviewer agents
|
|
@@ -386,7 +386,7 @@ Success criteria should be:
|
|
|
386
386
|
- Implementation work (writing code) -> web-developer, api-developer
|
|
387
387
|
- Writing tests -> web-tester
|
|
388
388
|
- Code review -> web-reviewer, api-reviewer
|
|
389
|
-
- Living documentation maintenance ->
|
|
389
|
+
- Living documentation maintenance -> codex-keeper
|
|
390
390
|
- Infrastructure scaffolding -> architect
|
|
391
391
|
- Agent/skill creation or improvement -> agent-summoner, skill-summoner
|
|
392
392
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/components/wizard/step-agents.tsx"],"sourcesContent":["import { Box, Text, useInput } from \"ink\";\nimport React, { useMemo, useState } from \"react\";\nimport { CLI_COLORS, UI_SYMBOLS } from \"../../consts.js\";\nimport { matrix } from \"../../lib/matrix/matrix-provider.js\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type { AgentName, MergedSkillsMatrix } from \"../../types/index.js\";\nimport { isAgentName } from \"../../utils/type-guards.js\";\nimport { typedKeys } from \"../../utils/typed-object.js\";\nimport { useMeasuredHeight } from \"../hooks/use-measured-height.js\";\nimport { useRowScroll } from \"../hooks/use-row-scroll.js\";\nimport { getDomainDisplayName } from \"./utils.js\";\nimport { ViewTitle } from \"./view-title.js\";\n\ntype AgentItem = {\n id: AgentName;\n label: string;\n description: string;\n};\n\ntype AgentGroup = {\n label: string;\n items: AgentItem[];\n};\n\nconst BUILT_IN_AGENT_GROUPS: AgentGroup[] = [\n {\n label: \"Web\",\n items: [\n {\n id: \"web-developer\",\n label: \"Web Developer\",\n description: \"Frontend features, components, TypeScript\",\n },\n { id: \"web-reviewer\", label: \"Web Reviewer\", description: \"UI component code review\" },\n { id: \"web-researcher\", label: \"Web Researcher\", description: \"Frontend pattern discovery\" },\n {\n id: \"web-tester\",\n label: \"Web Tester\",\n description: \"Frontend tests, E2E, component tests\",\n },\n { id: \"web-pm\", label: \"Web PM\", description: \"Implementation specs and planning\" },\n {\n id: \"web-architecture\",\n label: \"Web Architecture\",\n description: \"App scaffolding, foundational patterns\",\n },\n {\n id: \"web-pattern-critique\",\n label: \"Web Pattern Critique\",\n description: \"Critique patterns against industry standards\",\n },\n ],\n },\n {\n label: \"API\",\n items: [\n {\n id: \"api-developer\",\n label: \"API Developer\",\n description: \"Backend routes, database, middleware\",\n },\n { id: \"api-reviewer\", label: \"API Reviewer\", description: \"Backend and config code review\" },\n { id: \"api-researcher\", label: \"API Researcher\", description: \"Backend pattern discovery\" },\n ],\n },\n {\n label: \"CLI\",\n items: [\n {\n id: \"cli-developer\",\n label: \"CLI Developer\",\n description: \"CLI commands, interactive prompts\",\n },\n { id: \"cli-tester\", label: \"CLI Tester\", description: \"CLI application tests\" },\n { id: \"cli-reviewer\", label: \"CLI Reviewer\", description: \"CLI code review\" },\n ],\n },\n {\n label: \"Meta\",\n items: [\n {\n id: \"pattern-scout\",\n label: \"Pattern Scout\",\n description: \"Extract codebase patterns and standards\",\n },\n { id: \"agent-summoner\", label: \"Agent Summoner\", description: \"Create and improve agents\" },\n {\n id: \"skill-summoner\",\n label: \"Skill Summoner\",\n description: \"Create technology-specific skills\",\n },\n { id: \"scribe\", label: \"Scribe\", description: \"AI-focused documentation\" },\n ],\n },\n];\n\n/** IDs of all built-in agents for fast lookup. */\nconst BUILT_IN_AGENT_IDS = new Set<string>(\n BUILT_IN_AGENT_GROUPS.flatMap((group) => group.items.map((a) => a.id)),\n);\n\n/** Convert a kebab-case agent ID to a title-case label. */\nfunction agentIdToLabel(id: string): string {\n return id\n .split(\"-\")\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n}\n\ntype FocusId = AgentName | \"continue\";\n\ntype ListRow =\n | { type: \"header\"; label: string }\n | { type: \"spacer\" }\n | { type: \"agent\"; agent: AgentItem };\n\nfunction buildAgentGroups(matrix: MergedSkillsMatrix): AgentGroup[] {\n const customAgentIds: string[] = [];\n for (const stack of matrix.suggestedStacks) {\n for (const agentName of typedKeys(stack.skills)) {\n if (!BUILT_IN_AGENT_IDS.has(agentName) && !customAgentIds.includes(agentName)) {\n customAgentIds.push(agentName);\n }\n }\n }\n\n if (customAgentIds.length === 0) return BUILT_IN_AGENT_GROUPS;\n\n // Group custom agents by explicit domain (from metadata.yaml) or kebab prefix fallback\n const customGroupMap = new Map<string, AgentItem[]>();\n for (const agentId of customAgentIds) {\n const explicitDomain = isAgentName(agentId) ? matrix.agentDefinedDomains?.[agentId] : undefined;\n const domainKey = explicitDomain ?? (agentId.split(\"-\")[0] || \"custom\");\n const groupLabel = getDomainDisplayName(domainKey);\n if (!customGroupMap.has(groupLabel)) {\n customGroupMap.set(groupLabel, []);\n }\n // Boundary cast: custom agent names from marketplace stacks are not in the AgentName union\n customGroupMap.get(groupLabel)!.push({\n id: agentId as AgentName,\n label: agentIdToLabel(agentId),\n description: \"Custom agent\",\n });\n }\n\n const customGroups: AgentGroup[] = [];\n for (const [label, items] of customGroupMap) {\n customGroups.push({ label, items });\n }\n\n return [...BUILT_IN_AGENT_GROUPS, ...customGroups];\n}\n\nfunction buildFlatRows(groups: AgentGroup[]): ListRow[] {\n return groups.flatMap((group, groupIndex): ListRow[] => [\n ...(groupIndex > 0 ? [{ type: \"spacer\" as const }] : []),\n { type: \"header\" as const, label: group.label },\n ...group.items.map((agent): ListRow => ({ type: \"agent\", agent })),\n ]);\n}\n\nfunction buildFocusableIds(groups: AgentGroup[]): FocusId[] {\n return [...groups.flatMap((group) => group.items.map((a) => a.id)), \"continue\"];\n}\n\nexport const StepAgents: React.FC = () => {\n const selectedAgents = useWizardStore((s) => s.selectedAgents);\n const agentConfigs = useWizardStore((s) => s.agentConfigs);\n const agentGroups = useMemo(() => buildAgentGroups(matrix), []);\n const flatRows = useMemo(() => buildFlatRows(agentGroups), [agentGroups]);\n const focusableIds = useMemo(() => buildFocusableIds(agentGroups), [agentGroups]);\n\n const [focusedId, setFocusedId] = useState<FocusId>(focusableIds[0]!);\n const { ref: listRef, measuredHeight: listHeight } = useMeasuredHeight();\n\n const focusedRowIndex =\n focusedId !== \"continue\"\n ? flatRows.findIndex((row) => row.type === \"agent\" && row.agent.id === focusedId)\n : -1;\n const { scrollEnabled, scrollTop } = useRowScroll({\n focusedIndex: Math.max(0, focusedRowIndex),\n itemCount: flatRows.length,\n availableHeight: listHeight,\n });\n\n useInput((input, key) => {\n if (key.escape) {\n useWizardStore.getState().goBack();\n return;\n }\n\n const currentIdx = focusableIds.indexOf(focusedId);\n\n if (key.upArrow || input === \"k\") {\n const nextIdx = currentIdx <= 0 ? focusableIds.length - 1 : currentIdx - 1;\n setFocusedId(focusableIds[nextIdx]!);\n return;\n }\n\n if (key.downArrow || input === \"j\") {\n const nextIdx = currentIdx >= focusableIds.length - 1 ? 0 : currentIdx + 1;\n setFocusedId(focusableIds[nextIdx]!);\n return;\n }\n\n if (key.return) {\n useWizardStore.getState().setStep(\"confirm\");\n return;\n }\n\n if (input === \" \" && focusedId !== \"continue\") {\n useWizardStore.getState().toggleAgent(focusedId);\n }\n });\n\n // Sync focusedAgentId so the wizard-level S key handler can toggle agent scope\n React.useEffect(() => {\n useWizardStore.getState().setFocusedAgentId(focusedId === \"continue\" ? null : focusedId);\n }, [focusedId]);\n\n const selectedCount = selectedAgents.length;\n const continueLabel =\n selectedCount > 0 ? `Continue with ${selectedCount} agent(s)` : \"Continue without agents\";\n\n const isContinueFocused = focusedId === \"continue\";\n\n const rowElements = flatRows.map((row, index) => {\n switch (row.type) {\n case \"header\":\n return (\n <Box key={`header-${row.label}`} flexShrink={0}>\n <Text dimColor bold>\n {\" \"}\n {row.label}\n </Text>\n </Box>\n );\n case \"spacer\":\n return (\n <Box key={`spacer-${index}`} flexShrink={0}>\n <Text> </Text>\n </Box>\n );\n case \"agent\": {\n const isFocused = row.agent.id === focusedId;\n const isSelected = selectedAgents.includes(row.agent.id);\n const checkbox = isSelected ? \"[\\u2713]\" : \"[ ]\";\n const pointer = isFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER;\n const agentConfig = agentConfigs.find((ac) => ac.name === row.agent.id);\n const scope = agentConfig?.scope ?? \"global\";\n return (\n <Box key={row.agent.id} flexShrink={0}>\n <Text>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined}>{pointer}</Text>\n <Text\n color={isSelected || isFocused ? CLI_COLORS.PRIMARY : undefined}\n bold={isFocused}\n >\n {\" \"}\n {checkbox}{\" \"}\n </Text>\n <Text color={scope === \"global\" ? CLI_COLORS.WARNING : \"#eee\"}>\n {scope === \"global\" ? \"[G]\" : \"[P]\"}\n </Text>\n <Text\n color={isSelected || isFocused ? CLI_COLORS.PRIMARY : undefined}\n bold={isFocused}\n >\n {\" \"}\n {row.agent.label}\n </Text>\n <Text dimColor> {row.agent.description}</Text>\n </Text>\n </Box>\n );\n }\n }\n });\n\n return (\n <Box flexDirection=\"column\" width=\"100%\" flexGrow={1} flexBasis={0}>\n {/* <ViewTitle>Select agents</ViewTitle> */}\n\n <Box ref={listRef} flexDirection=\"column\" flexGrow={1} flexBasis={0}>\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n {...(scrollEnabled && { overflow: \"hidden\" as const })}\n >\n <Box\n flexDirection=\"column\"\n marginTop={scrollTop > 0 ? -scrollTop : 0}\n {...(scrollEnabled && { flexShrink: 0 })}\n >\n {rowElements}\n </Box>\n </Box>\n </Box>\n\n <Text color={isContinueFocused ? CLI_COLORS.PRIMARY : undefined} bold={isContinueFocused}>\n {isContinueFocused ? UI_SYMBOLS.CHEVRON : UI_SYMBOLS.CHEVRON_SPACER} {\"\\u2192\"}{\" \"}\n {continueLabel}\n </Text>\n </Box>\n );\n};\n"],"mappings":"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","names":["matrix"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/lib/__tests__/mock-data/mock-matrices.ts","../src/cli/lib/__tests__/mock-data/mock-skills.ts"],"sourcesContent":["// Shared matrix configs and compile configs for test files.\n// Uses createMockMatrixConfig/createMockCompileConfig from helpers.ts.\n\nimport { groupBy, mapValues } from \"remeda\";\n\nimport {\n createMockMatrixConfig,\n createMockCompileConfig,\n createMockCategory,\n createMockMatrix,\n createMockMultiSourceSkill,\n createMockSkill,\n testSkillToResolvedSkill,\n} from \"../helpers.js\";\nimport { SKILLS, TEST_CATEGORIES } from \"../test-fixtures.js\";\nimport { FRAMEWORK_CATEGORY, MULTI_SOURCE_CATEGORIES } from \"./mock-categories.js\";\nimport {\n CATEGORY_GRID_SKILLS,\n HEALTH_ALL_REFS_RESOLVED_SKILL,\n HEALTH_MULTIPLE_UNRESOLVED_REFS_SKILL,\n HEALTH_ORPHAN_SKILL,\n HEALTH_PARTIAL_UNRESOLVED_REQUIRES_SKILL,\n HEALTH_UNRESOLVED_COMPATIBLE_WITH_SKILL,\n HEALTH_UNRESOLVED_CONFLICTS_WITH_SKILL,\n HEALTH_UNRESOLVED_REQUIRES_SKILL,\n HEALTH_ZUSTAND_RECOMMENDED,\n MULTI_SOURCE_PUBLIC_SKILLS,\n MULTI_SOURCE_ACME_SKILLS,\n MULTI_SOURCE_INTERNAL_SKILLS,\n PIPELINE_TEST_SKILLS,\n} from \"./mock-skills.js\";\nimport type { MultiSourceSkillEntry } from \"./mock-skills.js\";\nimport { PUBLIC_SOURCE, ACME_SOURCE, INTERNAL_SOURCE } from \"./mock-sources.js\";\nimport type {\n Category,\n CategoryDefinition,\n CategoryPath,\n MergedSkillsMatrix,\n SkillId,\n SkillSlug,\n SkillSource,\n} from \"../../../types\";\n\n// ---------------------------------------------------------------------------\n// Canonical matrix shapes — use these instead of inline createMockMatrix() calls\n// ---------------------------------------------------------------------------\n\nexport const EMPTY_MATRIX = createMockMatrix();\nexport const SINGLE_REACT_MATRIX = createMockMatrix(SKILLS.react);\nexport const WEB_PAIR_MATRIX = createMockMatrix(SKILLS.react, SKILLS.zustand);\nexport const FULLSTACK_PAIR_MATRIX = createMockMatrix(SKILLS.react, SKILLS.hono);\nexport const WEB_TRIO_MATRIX = createMockMatrix(SKILLS.react, SKILLS.zustand, SKILLS.vitest);\nexport const FULLSTACK_TRIO_MATRIX = createMockMatrix(SKILLS.react, SKILLS.hono, SKILLS.vitest);\nexport const VITEST_REACT_HONO_MATRIX = createMockMatrix(SKILLS.vitest, SKILLS.react, SKILLS.hono);\nexport const REACT_SCSS_MATRIX = createMockMatrix(SKILLS.react, SKILLS.scss);\nexport const REACT_SCSS_HONO_MATRIX = createMockMatrix(SKILLS.react, SKILLS.scss, SKILLS.hono);\nexport const SCSS_HONO_REACT_MATRIX = createMockMatrix(SKILLS.scss, SKILLS.hono, SKILLS.react);\nexport const HONO_REACT_MATRIX = createMockMatrix(SKILLS.hono, SKILLS.react);\nexport const REACT_ZUSTAND_HONO_MATRIX = createMockMatrix(\n SKILLS.react,\n SKILLS.zustand,\n SKILLS.hono,\n);\n\nexport const CATEGORY_GRID_MATRIX = createMockMatrix(\n ...CATEGORY_GRID_SKILLS.map(({ id, displayName, category }) =>\n createMockSkill(id, { displayName, category }),\n ),\n);\n\n// ---------------------------------------------------------------------------\n// All-skills matrices with category overrides — for wizard store tests\n// ---------------------------------------------------------------------------\n\nexport const ALL_SKILLS_TEST_CATEGORIES_MATRIX = createMockMatrix(...Object.values(SKILLS), {\n categories: TEST_CATEGORIES as unknown as Record<Category, CategoryDefinition>,\n});\n\nexport const ALL_SKILLS_WEB_FRAMEWORK_MATRIX = createMockMatrix(...Object.values(SKILLS), {\n categories: {\n \"web-framework\": { domain: \"web\" },\n } as Record<Category, CategoryDefinition>,\n});\n\nexport const ALL_SKILLS_WEB_PAIR_CATEGORIES_MATRIX = createMockMatrix(...Object.values(SKILLS), {\n categories: {\n \"web-framework\": { domain: \"web\" },\n \"web-client-state\": { domain: \"web\" },\n } as Record<Category, CategoryDefinition>,\n});\n\nexport const ALL_SKILLS_FULLSTACK_CATEGORIES_MATRIX = createMockMatrix(...Object.values(SKILLS), {\n categories: {\n \"web-framework\": { domain: \"web\" },\n \"web-client-state\": { domain: \"web\" },\n \"api-api\": { domain: \"api\" },\n } as Record<Category, CategoryDefinition>,\n});\n\nexport const ALL_SKILLS_WEB_AND_API_MATRIX = createMockMatrix(...Object.values(SKILLS), {\n categories: {\n \"web-framework\": { domain: \"web\" },\n \"api-api\": { domain: \"api\" },\n } as Record<Category, CategoryDefinition>,\n});\n\nexport const ALL_SKILLS_METHODOLOGY_MATRIX = createMockMatrix(...Object.values(SKILLS), {\n categories: {\n \"meta-reviewing\": { domain: \"meta\" },\n } as Record<Category, CategoryDefinition>,\n});\n\nexport const ALL_SKILLS_METHODOLOGY_BARE_MATRIX = createMockMatrix(...Object.values(SKILLS), {\n categories: {\n \"meta-reviewing\": {},\n } as Record<Category, CategoryDefinition>,\n});\n\nexport const ALL_SKILLS_MULTI_DOMAIN_MATRIX = createMockMatrix(...Object.values(SKILLS), {\n categories: {\n \"web-framework\": { domain: \"web\" },\n \"meta-reviewing\": { domain: \"meta\" },\n \"api-api\": { domain: \"api\" },\n } as Record<Category, CategoryDefinition>,\n});\n\nexport const REACT_HONO_FRAMEWORK_API_MATRIX = createMockMatrix(SKILLS.react, SKILLS.hono, {\n categories: {\n \"web-framework\": TEST_CATEGORIES.framework,\n \"api-api\": TEST_CATEGORIES.api,\n } as Record<Category, CategoryDefinition>,\n});\n\n// ---------------------------------------------------------------------------\n// Matrix configs from matrix-loader.test.ts\n// ---------------------------------------------------------------------------\n\nexport const MERGE_BASIC_MATRIX = createMockMatrixConfig({ \"web-framework\": FRAMEWORK_CATEGORY });\n\nexport const CONFLICT_MATRIX = createMockMatrixConfig(\n {},\n {\n relationships: {\n conflicts: [{ skills: [\"react\", \"vue-composition-api\"], reason: \"Pick one framework\" }],\n },\n },\n);\n\nexport const ALTERNATIVES_MATRIX = createMockMatrixConfig(\n {},\n {\n relationships: {\n alternatives: [\n {\n purpose: \"State management\",\n skills: [\"zustand\", \"jotai\"],\n },\n ],\n },\n },\n);\n\nexport const REQUIRES_MATRIX = createMockMatrixConfig(\n {},\n {\n relationships: {\n requires: [\n {\n skill: \"zustand\",\n needs: [\"react\"],\n reason: \"Zustand needs React\",\n },\n ],\n },\n },\n);\n\n// ---------------------------------------------------------------------------\n// MergedSkillsMatrix instances from config-generator.test.ts\n// ---------------------------------------------------------------------------\n\nexport const LOCAL_SKILL_MATRIX = createMockMatrix(\n // Boundary cast: fictional skill ID for testing local skill matrix\n createMockSkill(\"web-local-skill\" as SkillId, {\n local: true,\n localPath: \".claude/skills/my-local-skill/\",\n }),\n);\n\nexport const MIXED_LOCAL_REMOTE_MATRIX = createMockMatrix(\n SKILLS.react,\n // Boundary cast: fictional skill ID for testing mixed local/remote matrix\n createMockSkill(\"meta-company-patterns\" as SkillId, {\n local: true,\n localPath: \".claude/skills/company-patterns/\",\n }),\n);\n\nexport const METHODOLOGY_MATRIX = createMockMatrix(SKILLS.antiOverEng);\n\nexport const VITEST_MATRIX = createMockMatrix(SKILLS.vitest);\n\n// ---------------------------------------------------------------------------\n// Compile configs from resolver.test.ts\n// ---------------------------------------------------------------------------\n\nexport const WEB_AND_API_COMPILE_CONFIG = createMockCompileConfig({\n \"web-developer\": {},\n \"api-developer\": {},\n});\n\nexport const WEB_ONLY_COMPILE_CONFIG = createMockCompileConfig({\n \"web-developer\": {},\n});\n\n// ---------------------------------------------------------------------------\n// Matrix configs from consumer-stacks-matrix.integration.test.ts\n// ---------------------------------------------------------------------------\n\nexport const TOOLING_AND_FRAMEWORK_CONFIG = createMockMatrixConfig({\n \"shared-tooling\": {\n ...TEST_CATEGORIES.tooling,\n description: \"Development tooling and infrastructure\",\n domain: \"shared\" as const,\n exclusive: false,\n order: 20,\n },\n \"web-framework\": {\n ...TEST_CATEGORIES.framework,\n description: \"UI Framework\",\n required: true,\n order: 1,\n },\n});\n\nexport const CI_CD_CONFIG = createMockMatrixConfig({\n \"infra-ci-cd\": createMockCategory(\"infra-ci-cd\", \"CI/CD\", {\n description: \"Continuous integration and deployment\",\n domain: \"infra\",\n exclusive: true,\n required: false,\n order: 30,\n }),\n});\n\nexport const FRAMEWORK_AND_STYLING_CONFIG = createMockMatrixConfig(\n {\n \"web-framework\": {\n ...TEST_CATEGORIES.framework,\n description: \"UI Framework\",\n required: true,\n order: 1,\n },\n \"web-styling\": {\n ...TEST_CATEGORIES.styling,\n description: \"CSS approach\",\n exclusive: false,\n order: 2,\n },\n },\n {\n relationships: {\n discourages: [\n {\n skills: [\"react\", \"scss-modules\"],\n reason: \"These tools have conflicting design philosophies\",\n },\n ],\n recommends: [\n {\n skill: \"vue-composition-api\",\n reason: \"These work great together\",\n },\n ],\n },\n },\n);\n\nexport const OBSERVABILITY_CONFIG = createMockMatrixConfig({\n \"api-observability\": createMockCategory(\"api-observability\", \"Observability\", {\n description: \"Monitoring and observability tools\",\n domain: \"api\",\n exclusive: false,\n required: false,\n order: 15,\n }),\n});\n\nexport const FRAMEWORK_AND_TESTING_CONFIG = createMockMatrixConfig(\n {\n \"web-framework\": {\n ...TEST_CATEGORIES.framework,\n description: \"UI Framework\",\n required: true,\n order: 1,\n },\n \"web-testing\": {\n ...TEST_CATEGORIES.testing,\n description: \"Testing tools\",\n domain: \"shared\" as const,\n exclusive: false,\n order: 10,\n },\n },\n {\n relationships: {\n requires: [\n {\n skill: \"vitest\",\n needs: [\"react\"],\n reason: \"RTL requires React to function\",\n },\n ],\n },\n },\n);\n\n// ---------------------------------------------------------------------------\n// Matrix configs from skill-resolution.test.ts\n// ---------------------------------------------------------------------------\n\nexport const EMPTY_MATRIX_CONFIG = createMockMatrixConfig({});\n\nexport const UNRESOLVED_CONFLICT_MATRIX = createMockMatrixConfig(\n {},\n {\n relationships: {\n conflicts: [\n {\n // Boundary cast: deliberately invalid slug to test unresolved reference handling\n skills: [\"react\", \"nonexistent\" as SkillSlug],\n reason: \"Conflict with missing skill\",\n },\n ],\n },\n },\n);\n\n// ---------------------------------------------------------------------------\n// Pipeline matrix from wizard-init-compile-pipeline.test.ts\n// ---------------------------------------------------------------------------\n\nexport const PIPELINE_MATRIX = createMockMatrix(\n Object.fromEntries(\n PIPELINE_TEST_SKILLS.map((skill) => [skill.id, testSkillToResolvedSkill(skill)]),\n ),\n);\n\n// ---------------------------------------------------------------------------\n// Health-check matrices from matrix-health-check.test.ts\n// ---------------------------------------------------------------------------\n\nconst HEALTH_MISSING_DOMAIN_FRAMEWORK_CATEGORY = {\n ...TEST_CATEGORIES.framework,\n domain: undefined,\n};\n\nconst HEALTH_MISSING_DOMAIN_STYLING_CATEGORY = {\n ...TEST_CATEGORIES.styling,\n domain: undefined,\n};\n\nexport const HEALTH_HEALTHY_MATRIX = createMockMatrix(SKILLS.react, HEALTH_ZUSTAND_RECOMMENDED, {\n categories: {\n \"web-framework\": TEST_CATEGORIES.framework,\n \"web-client-state\": TEST_CATEGORIES.clientState,\n },\n});\n\nexport const HEALTH_SINGLE_SKILL_MATRIX = createMockMatrix(SKILLS.react, {\n categories: {\n \"web-framework\": TEST_CATEGORIES.framework,\n },\n});\n\nexport const HEALTH_MISSING_DOMAIN_MATRIX = createMockMatrix(SKILLS.react, {\n categories: {\n \"web-framework\": HEALTH_MISSING_DOMAIN_FRAMEWORK_CATEGORY,\n },\n});\n\nexport const HEALTH_MULTIPLE_MISSING_DOMAINS_MATRIX = createMockMatrix(\n {},\n {\n categories: {\n \"web-framework\": HEALTH_MISSING_DOMAIN_FRAMEWORK_CATEGORY,\n \"web-styling\": HEALTH_MISSING_DOMAIN_STYLING_CATEGORY,\n \"web-client-state\": TEST_CATEGORIES.clientState,\n },\n },\n);\n\nexport const HEALTH_UNKNOWN_CATEGORY_MATRIX = createMockMatrix(HEALTH_ORPHAN_SKILL, {\n categories: {\n \"web-framework\": TEST_CATEGORIES.framework,\n },\n});\n\nexport const HEALTH_ORPHAN_SKILL_WITH_MISSING_DOMAIN_MATRIX = createMockMatrix(\n HEALTH_ORPHAN_SKILL,\n {\n categories: {\n \"web-framework\": HEALTH_MISSING_DOMAIN_FRAMEWORK_CATEGORY,\n },\n },\n);\n\nexport const HEALTH_UNRESOLVED_COMPATIBLE_WITH_MATRIX = createMockMatrix(\n HEALTH_UNRESOLVED_COMPATIBLE_WITH_SKILL,\n {\n categories: {\n \"web-client-state\": TEST_CATEGORIES.clientState,\n },\n },\n);\n\nexport const HEALTH_UNRESOLVED_CONFLICTS_WITH_MATRIX = createMockMatrix(\n HEALTH_UNRESOLVED_CONFLICTS_WITH_SKILL,\n {\n categories: {\n \"web-framework\": TEST_CATEGORIES.framework,\n },\n },\n);\n\nexport const HEALTH_UNRESOLVED_REQUIRES_MATRIX = createMockMatrix(\n HEALTH_UNRESOLVED_REQUIRES_SKILL,\n {\n categories: {\n \"web-testing\": TEST_CATEGORIES.testing,\n },\n },\n);\n\nexport const HEALTH_MULTIPLE_UNRESOLVED_REFS_MATRIX = createMockMatrix(\n HEALTH_MULTIPLE_UNRESOLVED_REFS_SKILL,\n {\n categories: {\n \"web-client-state\": TEST_CATEGORIES.clientState,\n },\n },\n);\n\nexport const HEALTH_ALL_REFS_RESOLVED_MATRIX = createMockMatrix(\n SKILLS.react,\n HEALTH_ALL_REFS_RESOLVED_SKILL,\n {\n categories: {\n \"web-framework\": TEST_CATEGORIES.framework,\n \"web-client-state\": TEST_CATEGORIES.clientState,\n },\n },\n);\n\nexport const HEALTH_PARTIAL_UNRESOLVED_REQUIRES_MATRIX = createMockMatrix(\n SKILLS.react,\n HEALTH_PARTIAL_UNRESOLVED_REQUIRES_SKILL,\n {\n categories: {\n \"web-framework\": TEST_CATEGORIES.framework,\n \"web-testing\": TEST_CATEGORIES.testing,\n },\n },\n);\n\n// ---------------------------------------------------------------------------\n// Multi-source matrix from skill-resolution.integration.test.ts\n// ---------------------------------------------------------------------------\n\ntype TaggedMultiSourceEntry = MultiSourceSkillEntry & { source: SkillSource };\n\nexport function buildMultiSourceMatrix(\n overrides?: Partial<MergedSkillsMatrix>,\n): MergedSkillsMatrix {\n const taggedEntries: TaggedMultiSourceEntry[] = [\n ...MULTI_SOURCE_PUBLIC_SKILLS.map((s) => ({ ...s, source: { ...PUBLIC_SOURCE } })),\n ...MULTI_SOURCE_ACME_SKILLS.map((s) => ({ ...s, source: { ...ACME_SOURCE } })),\n ...MULTI_SOURCE_INTERNAL_SKILLS.map((s) => ({ ...s, source: { ...INTERNAL_SOURCE } })),\n ];\n const grouped = groupBy(taggedEntries, (e) => e.id);\n const skills = mapValues(grouped, (entries) => {\n const first = entries[0]!;\n const sources = entries.map((e) => e.source);\n // Boundary cast: MultiSourceSkillEntry.id is string, but contains valid skill IDs\n return createMockMultiSourceSkill(first.id as SkillId, sources, {\n category: first.category as CategoryPath,\n description: first.description,\n });\n });\n\n return createMockMatrix(skills, {\n categories: MULTI_SOURCE_CATEGORIES,\n ...overrides,\n });\n}\n","// Shared skill entries and TestSkill arrays for test files.\n// Uses createMockSkillEntry from helpers.ts.\n\nimport type {\n Category,\n CategoryPath,\n ResolvedSkill,\n Skill,\n SkillId,\n SkillSlug,\n} from \"../../../types\";\nimport type { TestSkill } from \"../fixtures/create-test-source\";\nimport {\n createMockExtractedSkill,\n createMockSkill,\n createMockSkillEntry,\n createTestSkill,\n SKILLS,\n} from \"../helpers.js\";\nimport { renderSkillMd } from \"../content-generators\";\n\n// Skill entries from compiler.test.ts\n\nexport const REACT_SKILL_PRELOADED = createMockSkillEntry(\"web-framework-react\", true);\n\nexport const REACT_SKILL = createMockSkillEntry(\"web-framework-react\");\n\nexport const VITEST_SKILL = createMockSkillEntry(\"web-testing-vitest\");\n\nexport const VITEST_SINGLE_FILE_SKILL: Skill = {\n ...VITEST_SKILL,\n path: \"skills/web-testing-vitest.md\",\n};\n\nconst METHODOLOGY_TEST_SKILLS: TestSkill[] = [\n {\n id: \"meta-reviewing-reviewing\",\n slug: \"reviewing\",\n displayName: \"Anti Over-Engineering\",\n description: \"Surgical implementation, not architectural innovation\",\n category: \"meta-reviewing\",\n author: \"@test\",\n domain: \"meta\",\n },\n];\n\n// Individual TestSkill constants — each skill defined exactly once\n\nconst reactSkill = createTestSkill(\n \"web-framework-react\",\n \"React framework for building user interfaces\",\n {},\n);\n\nconst zustandSkill = createTestSkill(\"web-state-zustand\", \"Bear necessities state management\");\n\nconst vitestSkill = createTestSkill(\"web-testing-vitest\", \"Next generation testing framework\");\n\nconst honoSkill = createTestSkill(\"api-framework-hono\", \"Lightweight web framework for the edge\");\n\nconst vueSkill = createTestSkill(\n \"web-framework-vue-composition-api\",\n \"Progressive JavaScript framework\",\n {},\n);\n\nconst scssSkill = createTestSkill(\"web-styling-scss-modules\", \"CSS Modules with SCSS\", {\n displayName: \"SCSS Modules\",\n});\n\nconst drizzleSkill = createTestSkill(\"api-database-drizzle\", \"TypeScript ORM for SQL databases\");\n\n// Composed TestSkill arrays\n\nexport const EXTRA_DOMAIN_TEST_SKILLS: TestSkill[] = [vueSkill, scssSkill, drizzleSkill];\n\nexport const COMPILE_LOCAL_SKILL: TestSkill = createTestSkill(\n // Boundary cast: fictional skill ID for testing local skill compilation\n \"web-tooling-local-skill\" as SkillId,\n \"A local project skill\",\n { slug: \"tooling\" as SkillSlug, displayName: \"Local Skill\" },\n);\n\nexport const DEFAULT_TEST_SKILLS: TestSkill[] = [reactSkill, zustandSkill, vitestSkill, honoSkill];\n\nexport const PIPELINE_TEST_SKILLS: TestSkill[] = [\n ...DEFAULT_TEST_SKILLS,\n ...EXTRA_DOMAIN_TEST_SKILLS,\n];\n\n// TestSkill constants from consumer-stacks-matrix.integration.test.ts\n\nexport const DOCKER_TOOLING_SKILL: TestSkill = createTestSkill(\n // Boundary cast: fictional skill ID for testing infra tooling\n \"infra-tooling-docker\" as SkillId,\n \"Docker containerization patterns\",\n {\n slug: \"tooling\" as SkillSlug,\n displayName: \"Docker\",\n domain: \"shared\",\n },\n);\n\nexport const CI_CD_SKILLS: TestSkill[] = [\n // Boundary cast: fictional skill ID for testing CI/CD skills\n createTestSkill(\"infra-ci-cd-github-actions\" as SkillId, \"github-actions CI/CD pipeline\", {\n slug: \"github-actions\",\n displayName: \"GitHub Actions\",\n category: \"infra-ci-cd\",\n domain: \"infra\",\n }),\n // Boundary cast: fictional skill ID for testing CI/CD skills\n createTestSkill(\"infra-ci-cd-gitlab-ci\" as SkillId, \"gitlab-ci CI/CD pipeline\", {\n // Boundary cast: fictional slug for test isolation\n slug: \"gitlab-ci\" as SkillSlug,\n displayName: \"GitLab CI\",\n category: \"infra-ci-cd\",\n domain: \"infra\",\n }),\n];\n\nexport const DISCOURAGES_RELATIONSHIP_SKILLS: TestSkill[] = [reactSkill, scssSkill, vueSkill];\n\nexport const DATADOG_OBSERVABILITY_SKILL: TestSkill = createTestSkill(\n // Boundary cast: fictional skill ID for testing observability skills\n \"api-observability-datadog\" as SkillId,\n \"Datadog APM integration\",\n {},\n);\n\nexport const REQUIRES_RELATIONSHIP_SKILLS: TestSkill[] = [reactSkill, vitestSkill];\n\n// Source-switching TestSkill arrays (with rendered SKILL.md content)\n\n/** Creates a TestSkill with rendered SKILL.md content for source-switching tests */\nfunction contentSkill(id: SkillId, description: string, body: string, author?: string): TestSkill {\n return createTestSkill(id, description, {\n ...(author ? { author } : {}),\n content: renderSkillMd(id, description, body),\n });\n}\n\nexport const SWITCHABLE_SKILLS: TestSkill[] = [\n contentSkill(\n \"web-framework-react\",\n \"React framework for building user interfaces\",\n \"# React (Marketplace Version)\\n\\nReact is a JavaScript library for building user interfaces.\\nUse component-based architecture with JSX.\",\n ),\n contentSkill(\n \"web-state-zustand\",\n \"Bear necessities state management\",\n \"# Zustand (Marketplace Version)\\n\\nZustand is a minimal state management library for React.\",\n ),\n contentSkill(\n \"api-framework-hono\",\n \"Lightweight web framework for the edge\",\n \"# Hono (Marketplace Version)\\n\\nHono is a fast web framework for the edge.\",\n ),\n contentSkill(\n \"web-testing-vitest\",\n \"Next generation testing framework\",\n \"# Vitest (Marketplace Version)\\n\\nVitest is a fast unit test framework powered by Vite.\",\n ),\n];\n\nexport const LOCAL_SKILL_VARIANTS: TestSkill[] = [\n contentSkill(\n \"web-framework-react\",\n \"React framework (local customized version)\",\n \"# React (Local Version)\\n\\nThis is my customized React skill with project-specific patterns.\",\n \"@local-user\",\n ),\n contentSkill(\n \"web-state-zustand\",\n \"Zustand state management (local customized version)\",\n \"# Zustand (Local Version)\\n\\nMy customized Zustand patterns with project-specific stores.\",\n \"@local-user\",\n ),\n];\n\nexport const RESOLUTION_PIPELINE_SKILLS: TestSkill[] = [\n createTestSkill(\"web-framework-react\", \"React framework (public source)\"),\n createTestSkill(\"api-framework-hono\", \"Hono framework (acme source)\", {\n author: \"@acme\",\n }),\n // Boundary cast: fictional skill ID for testing multi-source resolution\n createTestSkill(\"web-animation-framer\" as SkillId, \"Framer Motion (internal source)\", {\n slug: \"framer-motion\",\n displayName: \"Framer Motion\",\n author: \"@internal\",\n }),\n createTestSkill(\"api-database-drizzle\", \"Drizzle ORM (acme source)\", {\n author: \"@acme\",\n }),\n createTestSkill(\"web-testing-vitest\", \"Vitest testing (public source)\"),\n];\n\n// Composed skill ID collections\n\nexport const ALL_TEST_SKILLS = [\n ...DEFAULT_TEST_SKILLS,\n ...EXTRA_DOMAIN_TEST_SKILLS,\n ...METHODOLOGY_TEST_SKILLS,\n];\n\nexport const INIT_SKILL_IDS: SkillId[] = [\n \"web-framework-react\",\n \"api-framework-hono\",\n \"web-testing-vitest\",\n];\n\nexport const INIT_TEST_SKILLS = DEFAULT_TEST_SKILLS.filter((s) =>\n INIT_SKILL_IDS.includes(s.id as SkillId),\n);\n\n// ExtractedSkillMetadata constants for skill-resolution tests\n\nexport const REACT_EXTRACTED = createMockExtractedSkill(\"web-framework-react\", {\n description: \"React framework\",\n author: \"@vince\",\n});\n\nexport const REACT_EXTRACTED_BASIC = createMockExtractedSkill(\"web-framework-react\", {\n description: \"React\",\n});\n\nexport const VUE_EXTRACTED_BASIC = createMockExtractedSkill(\"web-framework-vue-composition-api\", {\n description: \"Vue\",\n});\n\nexport const ZUSTAND_EXTRACTED = createMockExtractedSkill(\"web-state-zustand\", {\n description: \"Zustand\",\n category: \"web-client-state\",\n});\n\nexport const JOTAI_EXTRACTED = createMockExtractedSkill(\"web-state-jotai\", {\n description: \"Jotai\",\n category: \"web-client-state\",\n});\n\n// ---------------------------------------------------------------------------\n// Health-check skill variants (matrix-health-check.test.ts)\n// ---------------------------------------------------------------------------\n\nexport const HEALTH_ZUSTAND_RECOMMENDED = {\n ...SKILLS.zustand,\n isRecommended: true,\n recommendedReason: \"Works well with React\",\n};\n\nexport const HEALTH_ORPHAN_SKILL = {\n ...SKILLS.react,\n category: \"nonexistent-category\" as Category,\n};\n\nexport const HEALTH_UNRESOLVED_COMPATIBLE_WITH_SKILL = {\n ...SKILLS.zustand,\n // Boundary cast: fake SkillId for unresolved-ref testing\n compatibleWith: [\"web-framework-nonexistent\" as SkillId],\n};\n\nexport const HEALTH_UNRESOLVED_CONFLICTS_WITH_SKILL = {\n ...SKILLS.react,\n // Boundary cast: fake SkillId for unresolved-ref testing\n conflictsWith: [{ skillId: \"web-framework-ghost\" as SkillId, reason: \"Conflicts\" }],\n};\n\nexport const HEALTH_UNRESOLVED_REQUIRES_SKILL = createMockSkill(\"web-testing-cypress-e2e\", {\n requires: [\n {\n skillIds: [\"web-framework-missing\" as SkillId],\n needsAny: false,\n reason: \"Needs a framework\",\n },\n ],\n});\n\nexport const HEALTH_MULTIPLE_UNRESOLVED_REFS_SKILL = {\n ...SKILLS.zustand,\n // Boundary casts: fake SkillIds for unresolved-ref testing\n compatibleWith: [\"web-framework-missing\" as SkillId],\n conflictsWith: [{ skillId: \"web-state-ghost\" as SkillId, reason: \"Conflicts\" }],\n};\n\nexport const HEALTH_ALL_REFS_RESOLVED_SKILL: ResolvedSkill = {\n ...SKILLS.zustand,\n conflictsWith: [{ skillId: \"web-framework-react\", reason: \"Test\" }],\n requires: [\n {\n skillIds: [\"web-framework-react\"],\n needsAny: false,\n reason: \"Needs React\",\n },\n ],\n};\n\nexport const HEALTH_PARTIAL_UNRESOLVED_REQUIRES_SKILL = createMockSkill(\"web-testing-cypress-e2e\", {\n requires: [\n {\n skillIds: [\"web-framework-react\", \"web-framework-missing\" as SkillId],\n needsAny: true,\n reason: \"Needs one framework\",\n },\n ],\n});\n\n// ---------------------------------------------------------------------------\n// Category grid test skills (category-grid.test.tsx)\n// ---------------------------------------------------------------------------\n\nexport const CATEGORY_GRID_SKILLS: {\n id: SkillId;\n displayName: string;\n category: CategoryPath;\n}[] = [\n { id: \"web-framework-react\", displayName: \"React\", category: \"web-framework\" },\n { id: \"web-framework-vue-composition-api\", displayName: \"Vue\", category: \"web-framework\" },\n { id: \"web-framework-angular-standalone\", displayName: \"Angular\", category: \"web-framework\" },\n { id: \"web-framework-solidjs\", displayName: \"SolidJS\", category: \"web-framework\" },\n { id: \"web-meta-framework-nuxt\", displayName: \"Nuxt\", category: \"web-meta-framework\" },\n { id: \"web-meta-framework-remix\", displayName: \"Remix\", category: \"web-meta-framework\" },\n { id: \"web-meta-framework-nextjs\", displayName: \"Next.js\", category: \"web-meta-framework\" },\n { id: \"web-styling-scss-modules\", displayName: \"SCSS Modules\", category: \"web-styling\" },\n { id: \"web-styling-tailwind\", displayName: \"Tailwind\", category: \"web-styling\" },\n { id: \"web-styling-cva\", displayName: \"CVA\", category: \"web-styling\" },\n { id: \"web-state-zustand\", displayName: \"Zustand\", category: \"web-client-state\" },\n { id: \"web-state-jotai\", displayName: \"Jotai\", category: \"web-client-state\" },\n { id: \"web-state-redux-toolkit\", displayName: \"Redux\", category: \"web-client-state\" },\n { id: \"web-state-mobx\", displayName: \"MobX\", category: \"web-client-state\" },\n { id: \"web-server-state-react-query\", displayName: \"React Query\", category: \"web-server-state\" },\n { id: \"web-data-fetching-swr\", displayName: \"SWR\", category: \"web-server-state\" },\n { id: \"web-data-fetching-graphql-apollo\", displayName: \"Apollo\", category: \"web-server-state\" },\n { id: \"api-analytics-posthog-analytics\", displayName: \"PostHog\", category: \"api-analytics\" },\n { id: \"web-forms-react-hook-form\", displayName: \"React Hook Form\", category: \"web-forms\" },\n { id: \"web-forms-vee-validate\", displayName: \"Vee Validate\", category: \"web-forms\" },\n { id: \"web-forms-zod-validation\", displayName: \"Zod Validation\", category: \"web-forms\" },\n { id: \"web-testing-vitest\", displayName: \"Vitest\", category: \"web-testing\" },\n { id: \"web-testing-playwright-e2e\", displayName: \"Playwright\", category: \"web-testing\" },\n { id: \"web-testing-cypress-e2e\", displayName: \"Cypress\", category: \"web-testing\" },\n { id: \"web-mocks-msw\", displayName: \"MSW\", category: \"web-mocking\" },\n {\n id: \"web-testing-react-testing-library\",\n displayName: \"React Testing Library\",\n category: \"web-testing\",\n },\n { id: \"web-testing-vue-test-utils\", displayName: \"Vue Test Utils\", category: \"web-testing\" },\n { id: \"web-i18n-next-intl\", displayName: \"Next Intl\", category: \"web-i18n\" },\n { id: \"web-i18n-react-intl\", displayName: \"React Intl\", category: \"web-i18n\" },\n { id: \"web-i18n-vue-i18n\", displayName: \"Vue I18n\", category: \"web-i18n\" },\n];\n\n// ---------------------------------------------------------------------------\n// Multi-source integration test skill entries (skill-resolution.integration.test.ts)\n// ---------------------------------------------------------------------------\n\ntype MultiSourceSkillEntry = { id: string; category: string; description: string };\n\nexport const MULTI_SOURCE_PUBLIC_SKILLS: MultiSourceSkillEntry[] = [\n { id: \"web-framework-react\", category: \"web-framework\", description: \"React framework\" },\n {\n id: \"web-framework-vue-composition-api\",\n category: \"web-framework\",\n description: \"Vue.js framework\",\n },\n {\n id: \"web-state-zustand\",\n category: \"web-client-state\",\n description: \"Zustand state management\",\n },\n { id: \"web-styling-scss-modules\", category: \"web-styling\", description: \"SCSS Modules styling\" },\n { id: \"web-testing-vitest\", category: \"web-testing\", description: \"Vitest testing framework\" },\n];\n\nexport const MULTI_SOURCE_ACME_SKILLS: MultiSourceSkillEntry[] = [\n { id: \"web-framework-react\", category: \"web-framework\", description: \"React (acme custom fork)\" },\n { id: \"api-framework-hono\", category: \"api-api\", description: \"Hono web framework\" },\n { id: \"api-database-drizzle\", category: \"api-database\", description: \"Drizzle ORM\" },\n { id: \"api-security-auth-patterns\", category: \"shared-security\", description: \"Auth patterns\" },\n { id: \"web-testing-vitest\", category: \"web-testing\", description: \"Vitest (acme custom)\" },\n];\n\nexport const MULTI_SOURCE_INTERNAL_SKILLS: MultiSourceSkillEntry[] = [\n { id: \"web-framework-react\", category: \"web-framework\", description: \"React (internal build)\" },\n { id: \"web-animation-framer\", category: \"web-animation\", description: \"Framer Motion\" },\n {\n id: \"meta-methodology-investigation\",\n category: \"meta-methodology\",\n description: \"Investigation first\",\n },\n { id: \"web-accessibility-a11y\", category: \"web-accessibility\", description: \"Web accessibility\" },\n {\n id: \"api-monitoring-sentry\",\n category: \"api-observability\",\n description: \"Sentry error tracking\",\n },\n];\n\nexport type { MultiSourceSkillEntry };\n\n// ---------------------------------------------------------------------------\n// Local/compile skill constants (from create-test-source.ts)\n// ---------------------------------------------------------------------------\n\n/** Valid local skill with SKILL.md and metadata.yaml */\nexport const VALID_LOCAL_SKILL: TestSkill = createTestSkill(\n // Boundary cast: fictional skill ID for test isolation\n \"web-tooling-valid\" as SkillId,\n \"A valid skill\",\n { slug: \"tooling\" as SkillSlug, displayName: \"Valid\" },\n);\n\n/** Skill created WITHOUT metadata.yaml (for testing missing-metadata warnings) */\nexport const SKILL_WITHOUT_METADATA: TestSkill = createTestSkill(\n // Boundary cast: fictional skill ID for test isolation\n \"web-tooling-incomplete\" as SkillId,\n \"Missing metadata\",\n { slug: \"storybook\", displayName: \"Incomplete\", skipMetadata: true },\n);\n\n/** Another skill without metadata.yaml (for path warning tests) */\nexport const SKILL_WITHOUT_METADATA_CUSTOM: TestSkill = createTestSkill(\n // Boundary cast: fictional skill ID for test isolation\n \"web-tooling-custom\" as SkillId,\n \"No metadata\",\n { slug: \"security\" as SkillSlug, displayName: \"Custom\", skipMetadata: true },\n);\n\n/** A basic local-only skill (no forkedFrom) with SKILL.md and metadata.yaml */\nexport const LOCAL_SKILL_BASIC: TestSkill = createTestSkill(\n // Boundary cast: fictional skill ID for test isolation\n \"web-tooling-my-skill\" as SkillId,\n \"A test skill\",\n {\n slug: \"tooling\" as SkillSlug,\n displayName: \"My Skill\",\n content: `---\nname: my-skill\ndescription: A test skill\ncategory: test\n---\n\n# My Skill\n\nTest content here.\n`,\n },\n);\n\n/** A forked local skill with forkedFrom metadata for diff/update/outdated commands */\nexport const LOCAL_SKILL_FORKED: TestSkill = createTestSkill(\n // Boundary cast: fictional skill ID for test isolation\n \"web-tooling-forked-skill\" as SkillId,\n \"A forked skill\",\n {\n slug: \"tooling\" as SkillSlug,\n displayName: \"Forked Skill\",\n content: `---\nname: forked-skill\ndescription: A forked skill\ncategory: test\n---\n\n# Forked Skill\n\nLocal modifications here.\n`,\n forkedFrom: {\n skillId: \"web-framework-react\",\n contentHash: \"abc123\",\n date: \"2025-01-01\",\n },\n },\n);\n\n/** A minimal local skill for error handling tests (with forkedFrom) */\nexport const LOCAL_SKILL_FORKED_MINIMAL: TestSkill = createTestSkill(\n // Boundary cast: fictional skill ID for test isolation\n \"web-tooling-test-minimal\" as SkillId,\n \"Test skill\",\n {\n slug: \"env\" as SkillSlug,\n displayName: \"Test Minimal\",\n content: `---\nname: test\n---\n# Test`,\n forkedFrom: {\n skillId: \"web-framework-react\",\n contentHash: \"abc\",\n date: \"2025-01-01\",\n },\n },\n);\n\n// ---------------------------------------------------------------------------\n// Import source skill constants (import-skill.integration.test.ts)\n// ---------------------------------------------------------------------------\n\n/**\n * Skills used by import:skill integration tests with richer content.\n * These use a plain object type (not TestSkill) because import sources use\n * simple directory names that don't follow the SkillId pattern.\n */\nexport type ImportSourceSkill = {\n name: string;\n content: string;\n metadata?: Record<string, unknown>;\n};\n\n/** React patterns skill with metadata for import integration tests */\nexport const IMPORT_REACT_PATTERNS_SKILL: ImportSourceSkill = {\n name: \"react-patterns\",\n content: `---\nname: react-patterns\ndescription: React design patterns and best practices\n---\n\n# React Patterns\n\n## Component Composition\n\nUse composition over inheritance for flexible component design.\n\n## Hooks Patterns\n\n- Custom hooks for shared logic\n- useReducer for complex state\n- useMemo for expensive computations\n`,\n metadata: {\n author: \"@external-author\",\n category: \"web-framework\",\n },\n};\n\n/** Testing utils skill with metadata for import integration tests */\nexport const IMPORT_TESTING_UTILS_SKILL: ImportSourceSkill = {\n name: \"testing-utils\",\n content: `---\nname: testing-utils\ndescription: Testing utilities and best practices\n---\n\n# Testing Utilities\n\n## Unit Testing\n\nWrite focused tests that verify single behaviors.\n\n## Integration Testing\n\nTest component interactions and data flow.\n`,\n metadata: {\n author: \"@external-author\",\n category: \"web-testing\",\n },\n};\n\n/** API security skill without metadata for import integration tests */\nexport const IMPORT_API_SECURITY_SKILL: ImportSourceSkill = {\n name: \"api-security\",\n content: `---\nname: api-security\ndescription: API security patterns and middleware\n---\n\n# API Security\n\n## Authentication\n\nImplement JWT-based authentication with refresh tokens.\n\n## Rate Limiting\n\nApply rate limiting to prevent abuse.\n`,\n};\n"],"mappings":"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","names":[]}
|