macca-method 2.1.1 → 2.1.2
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/.agents/macca-lock.json +1 -1
- package/.agents/skills/_shared/references/brainstorm-session.md +5 -5
- package/.agents/skills/_shared/references/invocation-policy.md +20 -20
- package/.agents/skills/_shared/references/output-ownership.md +11 -11
- package/.agents/skills/_shared/references/scope-rules.md +1 -1
- package/.agents/skills/_shared/references/skill-catalog.md +20 -20
- package/.agents/skills/_shared/scripts/validate-skills.py +37 -15
- package/.agents/skills/add-feature/SKILL.md +9 -3
- package/.agents/skills/antislop-copywriting/SKILL.md +372 -0
- package/.agents/skills/brainstorm-api/SKILL.md +28 -16
- package/.agents/skills/brainstorm-api/assets/api.template.md +35 -15
- package/.agents/skills/brainstorm-architecture/SKILL.md +35 -15
- package/.agents/skills/brainstorm-architecture/assets/architecture.template.md +44 -25
- package/.agents/skills/brainstorm-prd/SKILL.md +47 -17
- package/.agents/skills/brainstorm-prd/assets/PRD.template.md +47 -23
- package/.agents/skills/brainstorm-rules/SKILL.md +36 -19
- package/.agents/skills/brainstorm-rules/assets/rules.template.md +32 -18
- package/.agents/skills/brainstorm-schema/SKILL.md +18 -8
- package/.agents/skills/brainstorm-schema/assets/schema.template.md +25 -10
- package/.agents/skills/brainstorm-styleguide/SKILL.md +37 -19
- package/.agents/skills/brainstorm-styleguide/assets/StyleGuide.template.md +78 -60
- package/.agents/skills/brainstorm-task/SKILL.md +27 -14
- package/.agents/skills/brainstorm-task/assets/Task.template.md +29 -18
- package/.agents/skills/bug-fix/SKILL.md +25 -1
- package/.agents/skills/code-review/SKILL.md +7 -7
- package/.agents/skills/code-review/references/review-checklist.md +21 -10
- package/.agents/skills/developer/SKILL.md +8 -0
- package/.agents/skills/developer/references/execute-task.md +13 -7
- package/.agents/skills/help/SKILL.md +32 -20
- package/.agents/skills/meet/SKILL.md +9 -4
- package/.agents/skills/quick-dev/SKILL.md +27 -22
- package/.agents/skills/release-readiness/SKILL.md +17 -13
- package/.agents/skills/skill-creator/LICENSE.txt +202 -0
- package/.agents/skills/skill-creator/SKILL.md +485 -0
- package/.agents/skills/skill-creator/agents/analyzer.md +274 -0
- package/.agents/skills/skill-creator/agents/comparator.md +202 -0
- package/.agents/skills/skill-creator/agents/grader.md +223 -0
- package/.agents/skills/skill-creator/assets/eval_review.html +146 -0
- package/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/.agents/skills/skill-creator/references/schemas.md +441 -0
- package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
- package/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
- package/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
- package/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
- package/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
- package/.agents/skills/skill-creator/scripts/utils.py +47 -0
- package/.agents/skills/spec-audit/SKILL.md +28 -1
- package/.agents/skills/spec-compliance/SKILL.md +31 -18
- package/.agents/skills/spec-init/SKILL.md +29 -17
- package/README.md +158 -122
- package/bin/macca-method.js +1378 -1077
- package/package.json +40 -40
- package/scripts/run-skill-validator.js +27 -9
- package/scripts/test-install.js +599 -357
- package/scripts/test-upgrade-legacy.js +119 -100
- package/scripts/validate-skill-behavior.js +175 -64
package/.agents/macca-lock.json
CHANGED
|
@@ -84,11 +84,11 @@ When a brainstorming skill starts:
|
|
|
84
84
|
2. Read `brainstormPreferences` if present.
|
|
85
85
|
3. **Announce the session** before asking anything:
|
|
86
86
|
- If preferences are already saved, announce and proceed in the same response. The user may override them at any time:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
```
|
|
88
|
+
This session has [N] topics.
|
|
89
|
+
Saved preferences: [pacing] | recommendations: [on/off] | depth: [quick/standard/critical]
|
|
90
|
+
Using these settings. Type different settings at any time.
|
|
91
|
+
```
|
|
92
92
|
- If no preferences are saved — ask both before starting:
|
|
93
93
|
```
|
|
94
94
|
This session has [N] topics. Two things before we start:
|
|
@@ -4,26 +4,26 @@ This catalog documents intent; it does not replace host routing or safety gates.
|
|
|
4
4
|
|
|
5
5
|
Portable Agent Skills rely on `name` and `description`. OpenCode ignores Copilot-specific invocation fields. Therefore canonical skills keep standard frontmatter and express routing through descriptions and workflow boundaries.
|
|
6
6
|
|
|
7
|
-
| Skill
|
|
8
|
-
|
|
9
|
-
| `add-feature`
|
|
10
|
-
| `brainstorm-prd`
|
|
11
|
-
| `brainstorm-architecture` | explicit-intent
|
|
12
|
-
| `brainstorm-schema`
|
|
13
|
-
| `brainstorm-api`
|
|
14
|
-
| `brainstorm-styleguide`
|
|
15
|
-
| `brainstorm-rules`
|
|
16
|
-
| `brainstorm-task`
|
|
17
|
-
| `spec-init`
|
|
18
|
-
| `developer`
|
|
19
|
-
| `quick-dev`
|
|
20
|
-
| `bug-fix`
|
|
21
|
-
| `spec-compliance`
|
|
22
|
-
| `code-review`
|
|
23
|
-
| `spec-audit`
|
|
24
|
-
| `release-readiness`
|
|
25
|
-
| `help`
|
|
26
|
-
| `meet`
|
|
7
|
+
| Skill | Policy | Rationale |
|
|
8
|
+
| ------------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
|
|
9
|
+
| `add-feature` | explicit-intent | Broad source-of-truth mutation |
|
|
10
|
+
| `brainstorm-prd` | explicit-intent | Long interview and PRD creation |
|
|
11
|
+
| `brainstorm-architecture` | explicit-intent | Strategic technical decisions |
|
|
12
|
+
| `brainstorm-schema` | explicit-intent | Consequential data contract |
|
|
13
|
+
| `brainstorm-api` | explicit-intent | External contract creation |
|
|
14
|
+
| `brainstorm-styleguide` | explicit-intent | UI contract interview |
|
|
15
|
+
| `brainstorm-rules` | explicit-intent | Repository-wide rules |
|
|
16
|
+
| `brainstorm-task` | both | Direct use and `add-feature` orchestration |
|
|
17
|
+
| `spec-init` | explicit-intent | Whole-codebase scan and multi-document generation |
|
|
18
|
+
| `developer` | explicit-implementation-intent | Broad implementation mutation |
|
|
19
|
+
| `quick-dev` | model-auto | Bounded router for small implementation tasks |
|
|
20
|
+
| `bug-fix` | both | Automatic bug/error routing and direct use; the first code change still requires explicit implementation approval from the diagnosis gate |
|
|
21
|
+
| `spec-compliance` | orchestrated | Called by execution/remediation workflows; ad hoc requests remain valid |
|
|
22
|
+
| `code-review` | both | Direct review and post-phase orchestration |
|
|
23
|
+
| `spec-audit` | both | Direct audit and final workflow check |
|
|
24
|
+
| `release-readiness` | both | Direct pre-release request and project-complete handoff |
|
|
25
|
+
| `help` | both | Cheap read-only routing |
|
|
26
|
+
| `meet` | both | Non-mutating meeting intent |
|
|
27
27
|
|
|
28
28
|
Definitions:
|
|
29
29
|
|
|
@@ -6,17 +6,17 @@ This file defines which skill primarily owns each persistent output, so skills d
|
|
|
6
6
|
|
|
7
7
|
## Primary Owners
|
|
8
8
|
|
|
9
|
-
| Output
|
|
10
|
-
|
|
11
|
-
| `project-context/PRD.md`
|
|
12
|
-
| `project-context/architecture.md` | `brainstorm-architecture` | `add-feature`, `spec-init`
|
|
13
|
-
| `project-context/schema.md`
|
|
14
|
-
| `project-context/api.md`
|
|
15
|
-
| `project-context/StyleGuide.md`
|
|
16
|
-
| `project-context/rules.md`
|
|
17
|
-
| `project-context/Task.md`
|
|
18
|
-
| `project-context/bug-log.md`
|
|
19
|
-
| `project-context/plans/*.md`
|
|
9
|
+
| Output | Primary Owner | Secondary / Limited Authors |
|
|
10
|
+
| --------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
11
|
+
| `project-context/PRD.md` | `brainstorm-prd` | `add-feature`, `spec-init` |
|
|
12
|
+
| `project-context/architecture.md` | `brainstorm-architecture` | `add-feature`, `spec-init` |
|
|
13
|
+
| `project-context/schema.md` | `brainstorm-schema` | `add-feature`, `spec-init` |
|
|
14
|
+
| `project-context/api.md` | `brainstorm-api` | `add-feature`, `spec-init` |
|
|
15
|
+
| `project-context/StyleGuide.md` | `brainstorm-styleguide` | `add-feature`, `spec-init` |
|
|
16
|
+
| `project-context/rules.md` | `brainstorm-rules` | `add-feature`, `spec-init` |
|
|
17
|
+
| `project-context/Task.md` | `brainstorm-task` | `developer` updates progress and approved phase deltas; `quick-dev` adds one approved lightweight entry; `add-feature` adds approved phase deltas (or hands off to `brainstorm-task` if missing) |
|
|
18
|
+
| `project-context/bug-log.md` | `bug-fix` | none |
|
|
19
|
+
| `project-context/plans/*.md` | `developer` | `add-feature`, `code-review` limited updates per workflow |
|
|
20
20
|
|
|
21
21
|
## Ownership Rules
|
|
22
22
|
|
|
@@ -2,26 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
Compact framework-audit index. This is not a replacement for each `SKILL.md`; it identifies which full files need inspection when a conflict is suspected.
|
|
4
4
|
|
|
5
|
-
| Skill
|
|
6
|
-
|
|
7
|
-
| `brainstorm-prd`
|
|
8
|
-
| `brainstorm-architecture` | explicit-intent
|
|
9
|
-
| `brainstorm-schema`
|
|
10
|
-
| `brainstorm-api`
|
|
11
|
-
| `brainstorm-styleguide`
|
|
12
|
-
| `brainstorm-rules`
|
|
13
|
-
| `brainstorm-task`
|
|
14
|
-
| `add-feature`
|
|
15
|
-
| `spec-init`
|
|
16
|
-
| `developer`
|
|
17
|
-
| `quick-dev`
|
|
18
|
-
| `bug-fix`
|
|
19
|
-
| `spec-compliance`
|
|
20
|
-
| `code-review`
|
|
21
|
-
| `spec-audit`
|
|
22
|
-
| `release-readiness`
|
|
23
|
-
| `help`
|
|
24
|
-
| `meet`
|
|
5
|
+
| Skill | Invocation | Reads | Writes / Output | Primary Handoff |
|
|
6
|
+
| ------------------------- | ------------------------------ | ---------------------------------------------------- | ------------------------------------------- | ------------------------- |
|
|
7
|
+
| `brainstorm-prd` | explicit-intent | scope/config, user discovery | `PRD.md` | `brainstorm-architecture` |
|
|
8
|
+
| `brainstorm-architecture` | explicit-intent | PRD | `architecture.md` | schema/API/style/rules |
|
|
9
|
+
| `brainstorm-schema` | explicit-intent | PRD, architecture | `schema.md` | `brainstorm-api` |
|
|
10
|
+
| `brainstorm-api` | explicit-intent | PRD, architecture, schema when applicable | `api.md` | style/rules/task |
|
|
11
|
+
| `brainstorm-styleguide` | explicit-intent | PRD, architecture | `StyleGuide.md` | rules/task |
|
|
12
|
+
| `brainstorm-rules` | explicit-intent | architecture and applicable domain specs | `rules.md` | `brainstorm-task` |
|
|
13
|
+
| `brainstorm-task` | both | applicable specs | `Task.md` | `developer` |
|
|
14
|
+
| `add-feature` | explicit-intent | all existing specs | approved spec deltas; delegates Task | `developer` |
|
|
15
|
+
| `spec-init` | explicit-intent | existing code/config/evidence | bootstrap specs, not Task | audit/task |
|
|
16
|
+
| `developer` | explicit-implementation-intent | Task and relevant specs | code, Task progress, plans | compliance/review |
|
|
17
|
+
| `quick-dev` | model-auto | relevant specs | bounded code and Task entry | compliance/review |
|
|
18
|
+
| `bug-fix` | both | bug log, relevant code/specs | approved fix, prevention, confirmed bug log | compliance/review |
|
|
19
|
+
| `spec-compliance` | orchestrated | code and applicable specs | report; approved fixes | code-review |
|
|
20
|
+
| `code-review` | both | diff/code, rules, architecture, applicable contracts | report; approved fixes | phase completion |
|
|
21
|
+
| `spec-audit` | both | spec pairs or framework catalog | report; explicitly requested corrections | owning skills |
|
|
22
|
+
| `release-readiness` | both | existing quality/release evidence | report only | release owner |
|
|
23
|
+
| `help` | both | project status/config/catalog | routing report | selected skill |
|
|
24
|
+
| `meet` | both | agenda-relevant evidence | one-round discussion report | owning skills |
|
|
25
25
|
|
|
26
26
|
Framework invariants:
|
|
27
27
|
|
|
@@ -6,7 +6,6 @@ import re
|
|
|
6
6
|
import sys
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
|
|
9
|
-
|
|
10
9
|
SKILLS_DIR = Path(__file__).resolve().parents[2]
|
|
11
10
|
ALLOWED_FRONTMATTER = {
|
|
12
11
|
"name",
|
|
@@ -46,12 +45,14 @@ def parse_frontmatter(path: Path, text: str) -> tuple[dict[str, object], list[st
|
|
|
46
45
|
continue
|
|
47
46
|
if line.startswith(" "):
|
|
48
47
|
if current_map != "metadata" or ":" not in line:
|
|
49
|
-
issues.append(
|
|
48
|
+
issues.append(
|
|
49
|
+
f"{path}:{line_number}: unsupported nested frontmatter value"
|
|
50
|
+
)
|
|
50
51
|
continue
|
|
51
52
|
key, value = line.strip().split(":", 1)
|
|
52
53
|
metadata = data.setdefault("metadata", {})
|
|
53
54
|
assert isinstance(metadata, dict)
|
|
54
|
-
metadata[key] = value.strip().strip(
|
|
55
|
+
metadata[key] = value.strip().strip("\"'")
|
|
55
56
|
continue
|
|
56
57
|
if ":" not in line:
|
|
57
58
|
issues.append(f"{path}:{line_number}: invalid frontmatter line")
|
|
@@ -62,7 +63,7 @@ def parse_frontmatter(path: Path, text: str) -> tuple[dict[str, object], list[st
|
|
|
62
63
|
issues.append(f"{path}:{line_number}: duplicate frontmatter key {key}")
|
|
63
64
|
value = value.strip()
|
|
64
65
|
if value:
|
|
65
|
-
data[key] = value.strip(
|
|
66
|
+
data[key] = value.strip("\"'")
|
|
66
67
|
current_map = None
|
|
67
68
|
else:
|
|
68
69
|
data[key] = {}
|
|
@@ -93,20 +94,31 @@ def check_skill_file(path: Path) -> list[str]:
|
|
|
93
94
|
if frontmatter:
|
|
94
95
|
unknown = sorted(set(frontmatter) - ALLOWED_FRONTMATTER)
|
|
95
96
|
if unknown:
|
|
96
|
-
issues.append(
|
|
97
|
+
issues.append(
|
|
98
|
+
f"{path}: unsupported frontmatter fields: {', '.join(unknown)}"
|
|
99
|
+
)
|
|
97
100
|
|
|
98
101
|
name = frontmatter.get("name")
|
|
99
102
|
description = frontmatter.get("description")
|
|
100
103
|
if not isinstance(name, str) or not NAME_RE.fullmatch(name) or len(name) > 64:
|
|
101
104
|
issues.append(f"{path}: invalid skill name {name!r}")
|
|
102
105
|
elif name != path.parent.name:
|
|
103
|
-
issues.append(
|
|
104
|
-
|
|
106
|
+
issues.append(
|
|
107
|
+
f"{path}: name {name!r} does not match folder {path.parent.name!r}"
|
|
108
|
+
)
|
|
109
|
+
if (
|
|
110
|
+
not isinstance(description, str)
|
|
111
|
+
or not description
|
|
112
|
+
or len(description) > 1024
|
|
113
|
+
):
|
|
105
114
|
issues.append(f"{path}: description must contain 1-1024 characters")
|
|
106
115
|
metadata = frontmatter.get("metadata")
|
|
107
116
|
if metadata is not None and (
|
|
108
117
|
not isinstance(metadata, dict)
|
|
109
|
-
or any(
|
|
118
|
+
or any(
|
|
119
|
+
not isinstance(key, str) or not isinstance(value, str)
|
|
120
|
+
for key, value in metadata.items()
|
|
121
|
+
)
|
|
110
122
|
):
|
|
111
123
|
issues.append(f"{path}: metadata must be a string-to-string map")
|
|
112
124
|
compatibility = frontmatter.get("compatibility")
|
|
@@ -121,14 +133,24 @@ def check_skill_file(path: Path) -> list[str]:
|
|
|
121
133
|
if "<SECURITY_REVIEW>" in text:
|
|
122
134
|
issues.append(f"{path}: <SECURITY_REVIEW> placeholder was not replaced")
|
|
123
135
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
):
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
136
|
+
# Check for actual unclosed markdown fences containing inner fences
|
|
137
|
+
# If a ```markdown block is opened, ensure any nested ``` blocks use 4 backticks ```` or are properly closed
|
|
138
|
+
if re.search(r"^```markdown\s*$", text, re.MULTILINE):
|
|
139
|
+
# Scan if there's an inner unescaped fence before closing ```
|
|
140
|
+
parts = text.split("```markdown")
|
|
141
|
+
for part in parts[1:]:
|
|
142
|
+
inside = part.split("\n```\n")[0] if "\n```\n" in part else part
|
|
143
|
+
if re.search(
|
|
144
|
+
r"^```(?:json|text|typescript|bash)\s*$", inside, re.MULTILINE
|
|
145
|
+
):
|
|
146
|
+
issues.append(
|
|
147
|
+
f"{path}: possible broken nested fence inside ```markdown block; check and use 4 backticks for the outer template"
|
|
148
|
+
)
|
|
130
149
|
|
|
131
|
-
if
|
|
150
|
+
if (
|
|
151
|
+
"[GATE — Fix mode: report-first]" in text
|
|
152
|
+
or "[GATE — Mode: report-first]" in text
|
|
153
|
+
) and "Approval Resume Protocol" not in text:
|
|
132
154
|
issues.append(f"{path}: report-first gate has no approval resume protocol")
|
|
133
155
|
|
|
134
156
|
issues.extend(check_local_links(path, text))
|
|
@@ -33,6 +33,7 @@ Operate as `@Galbi` (Project Manager). Use the shared persona profile in `../_sh
|
|
|
33
33
|
You are a **Product Engineer** adding features to a running project. Do not start from scratch. Read the current specs, understand the context, then update only the affected areas. Every impacted spec is updated; none are skipped.
|
|
34
34
|
|
|
35
35
|
**Workflow:**
|
|
36
|
+
|
|
36
37
|
- Read all existing specs first
|
|
37
38
|
- Identify the impact on each document
|
|
38
39
|
- Update ALL impacted specs (required)
|
|
@@ -61,13 +62,14 @@ If the user gives a free-form description, extract the relevant information and
|
|
|
61
62
|
## Step 1: Read All Existing Specs
|
|
62
63
|
|
|
63
64
|
Read every existing file in `project-context/`:
|
|
65
|
+
|
|
64
66
|
- `PRD.md`
|
|
65
67
|
- `architecture.md`
|
|
66
68
|
- `schema.md`
|
|
67
69
|
- `api.md`
|
|
68
70
|
- `rules.md`
|
|
69
71
|
- `StyleGuide.md`
|
|
70
|
-
- `Task.md`
|
|
72
|
+
- `Task.md` _(if it exists; otherwise it will be created by brainstorm-task)_
|
|
71
73
|
|
|
72
74
|
Read everything that exists. Skip nothing. Note the ID patterns in use (`FEAT-*`, `BR-*`, `DATA-*`, `API-*`, etc.).
|
|
73
75
|
|
|
@@ -116,15 +118,17 @@ For each **IMPACTED** document, update it in this order:
|
|
|
116
118
|
4. `api.md` — add endpoints
|
|
117
119
|
5. `StyleGuide.md` — add components/styles
|
|
118
120
|
6. `rules.md` — add conventions if needed
|
|
119
|
-
7. `project-context/plans/` — if a plan file exists for the affected phase (for example `plans/phase-2-checkout.md`), update it to reflect the new scope. Add a section: `## Feature Addition: [feature name]` with a short description of the approach change. Do not overwrite existing plan content.
|
|
121
|
+
7. `project-context/plans/` — if a plan file exists for the affected phase (for example `project-context/plans/phase-2-checkout.md`), update it to reflect the new scope. Add a section: `## Feature Addition: [feature name]` with a short description of the approach change. Do not overwrite existing plan content.
|
|
122
|
+
|
|
123
|
+
### Update Principles
|
|
120
124
|
|
|
121
|
-
### Update Principles:
|
|
122
125
|
- **Preserve unrelated content and IDs** — make the smallest targeted edit needed to keep each affected document internally consistent; update an existing statement when the approved feature changes it
|
|
123
126
|
- **Match the existing style** — follow the current document format and tone
|
|
124
127
|
- **Make additions clear** — place them logically; no special tags are needed
|
|
125
128
|
- **Preserve old IDs** — assign new IDs for new items using the existing pattern
|
|
126
129
|
|
|
127
130
|
After each update:
|
|
131
|
+
|
|
128
132
|
```
|
|
129
133
|
✅ PRD.md updated
|
|
130
134
|
Section: [heading]
|
|
@@ -139,12 +143,14 @@ After each update:
|
|
|
139
143
|
Call `brainstorm-task` to add a phase and tasks to `Task.md`.
|
|
140
144
|
|
|
141
145
|
**Do not create tasks manually.** The `brainstorm-task` skill:
|
|
146
|
+
|
|
142
147
|
- Performs deep analysis of the updated specs
|
|
143
148
|
- Ensures task dependencies are ordered correctly
|
|
144
149
|
- Creates testable acceptance criteria
|
|
145
150
|
- Preserves consistency with existing phases
|
|
146
151
|
|
|
147
152
|
Provide context:
|
|
153
|
+
|
|
148
154
|
- If `Task.md` exists: "Add a new phase for this feature (do not rewrite everything)"
|
|
149
155
|
- If `Task.md` does not exist: "Create Task.md from scratch using all specs"
|
|
150
156
|
|