macca-method 2.0.0 → 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/fix-mode.md +18 -3
- package/.agents/skills/_shared/references/human-loop.md +1 -1
- package/.agents/skills/_shared/references/invocation-policy.md +20 -20
- package/.agents/skills/_shared/references/language-config.md +7 -5
- 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 +11 -3
- package/.agents/skills/antislop-copywriting/SKILL.md +372 -0
- package/.agents/skills/brainstorm-api/SKILL.md +33 -19
- package/.agents/skills/brainstorm-api/assets/api.template.md +35 -15
- package/.agents/skills/brainstorm-architecture/SKILL.md +40 -18
- package/.agents/skills/brainstorm-architecture/assets/architecture.template.md +44 -25
- package/.agents/skills/brainstorm-prd/SKILL.md +52 -20
- package/.agents/skills/brainstorm-prd/assets/PRD.template.md +47 -23
- package/.agents/skills/brainstorm-rules/SKILL.md +39 -22
- package/.agents/skills/brainstorm-rules/assets/rules.template.md +32 -18
- package/.agents/skills/brainstorm-schema/SKILL.md +23 -11
- package/.agents/skills/brainstorm-schema/assets/schema.template.md +25 -10
- package/.agents/skills/brainstorm-styleguide/SKILL.md +40 -22
- package/.agents/skills/brainstorm-styleguide/assets/StyleGuide.template.md +78 -60
- package/.agents/skills/brainstorm-task/SKILL.md +29 -14
- package/.agents/skills/brainstorm-task/assets/Task.template.md +29 -18
- package/.agents/skills/bug-fix/SKILL.md +39 -8
- package/.agents/skills/code-review/SKILL.md +9 -7
- package/.agents/skills/code-review/references/review-checklist.md +21 -10
- package/.agents/skills/developer/SKILL.md +10 -0
- package/.agents/skills/developer/references/execute-task.md +13 -7
- package/.agents/skills/developer/references/onboarding.md +1 -1
- package/.agents/skills/help/SKILL.md +39 -23
- package/.agents/skills/meet/SKILL.md +11 -4
- package/.agents/skills/quick-dev/SKILL.md +29 -22
- package/.agents/skills/release-readiness/SKILL.md +19 -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 +33 -4
- package/.agents/skills/spec-compliance/SKILL.md +36 -21
- package/.agents/skills/spec-init/SKILL.md +31 -17
- package/README.md +165 -129
- 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 +611 -337
- package/scripts/test-upgrade-legacy.js +131 -76
- 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:
|
|
@@ -11,7 +11,20 @@ Announce `[Fix mode: report-first]` or `[Fix mode: fix-then-report]` at the star
|
|
|
11
11
|
|
|
12
12
|
## Required Report-First Gate
|
|
13
13
|
|
|
14
|
-
After the full report and fix manifest, print
|
|
14
|
+
After the full report and fix manifest, print the block below matching `languagePreferences.communication.normalized` (see `language-config.md`) and end the response. Use only one language block - never mix English and Indonesian inside it.
|
|
15
|
+
|
|
16
|
+
Indonesian (`indonesian`, `id`, and any equivalent listed in `language-config.md` - also the default when the preference is missing or unrecognized):
|
|
17
|
+
|
|
18
|
+
```text
|
|
19
|
+
---
|
|
20
|
+
[GATE — Mode: report-first]
|
|
21
|
+
Semua temuan sudah dilaporkan. Belum ada file yang diubah.
|
|
22
|
+
Balas "ya" / "setuju" / "lanjut" / "perbaiki" untuk menerapkan semua perbaikan,
|
|
23
|
+
atau sebutkan temuan mana saja yang ingin diperbaiki.
|
|
24
|
+
---
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
English (`english`, `en`):
|
|
15
28
|
|
|
16
29
|
```text
|
|
17
30
|
---
|
|
@@ -29,8 +42,10 @@ The fix manifest records each actionable finding ID, target, bounded change, and
|
|
|
29
42
|
This takes precedence over normal routing, startup, identity, onboarding, preflight, and work-mode prompts.
|
|
30
43
|
|
|
31
44
|
1. Trim and case-fold the next response.
|
|
32
|
-
2.
|
|
33
|
-
|
|
45
|
+
2. Any of these approves every actionable finding in the immediately preceding report, including actionable MINOR findings:
|
|
46
|
+
- English: `yes`, `fix`, `continue`
|
|
47
|
+
- Indonesian: `ya`, `iya`, `setuju`, `lanjut`, `perbaiki`
|
|
48
|
+
3. Named IDs approve only those findings, in either language.
|
|
34
49
|
4. Resume directly at edits. Do not repeat analysis, the report, startup, preflight, or the same gate.
|
|
35
50
|
5. Ask again only if the worktree changed materially, a target disappeared, findings conflict, or the implementation becomes destructive or exceeds disclosed scope.
|
|
36
51
|
6. Run the narrowest relevant validation and one bounded verdict pass: `resolved`, `partial`, or `unresolved`.
|
|
@@ -54,4 +54,4 @@ Keep one decision topic per pause.
|
|
|
54
54
|
|
|
55
55
|
After the user answers, continue from the exact paused step. Do not restart the workflow or ask for the same confirmation again unless the situation materially changes.
|
|
56
56
|
|
|
57
|
-
An answer to an active gate takes precedence over normal skill startup and routing. For a report-first gate,
|
|
57
|
+
An answer to an active gate takes precedence over normal skill startup and routing. For a report-first gate, the approval tokens and finding-ID subsets defined in `fix-mode.md`'s Approval Resume Protocol take priority. Do not send them through identity setup, preflight, or a second confirmation.
|
|
@@ -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
|
|
|
@@ -4,12 +4,14 @@ Read `.agents/developer-config.json` if it exists.
|
|
|
4
4
|
|
|
5
5
|
Use:
|
|
6
6
|
|
|
7
|
-
- `languagePreferences.communication.normalized` for chat, reports, prompts, and
|
|
7
|
+
- `languagePreferences.communication.normalized` for chat, reports, prompts, confirmations, and gate/approval text.
|
|
8
8
|
- `languagePreferences.documents.normalized` for generated project documents.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
When the resolved language is Indonesian, all chat output - including report-first gates and their reply options - MUST be Indonesian. Do not mix in English sentences or fall back to English-only reply tokens.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
- English: `english`, `en`
|
|
12
|
+
Match `raw` or `normalized` case-insensitively against these equivalents (same mapping the installer's `normalizeLanguage()` uses):
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
- Indonesian: `indonesian`, `id`, `indo`, `indonesia`, `bahasa indonesia`
|
|
15
|
+
- English: `english`, `en`, `eng`, `inggris`, `bahasa inggris`
|
|
16
|
+
|
|
17
|
+
If missing or unrecognized, use Indonesian. Never translate file names, traceability IDs, config keys, or code literals.
|
|
@@ -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))
|
|
@@ -11,6 +11,8 @@ metadata:
|
|
|
11
11
|
|
|
12
12
|
## Shared Runtime Setup
|
|
13
13
|
|
|
14
|
+
Paths written as `../...` below are relative to this SKILL.md's own folder, not the project's working directory - resolve them as a sibling of the folder that contains this file.
|
|
15
|
+
|
|
14
16
|
At startup:
|
|
15
17
|
|
|
16
18
|
1. Read `../_shared/references/language-config.md`.
|
|
@@ -31,6 +33,7 @@ Operate as `@Galbi` (Project Manager). Use the shared persona profile in `../_sh
|
|
|
31
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.
|
|
32
34
|
|
|
33
35
|
**Workflow:**
|
|
36
|
+
|
|
34
37
|
- Read all existing specs first
|
|
35
38
|
- Identify the impact on each document
|
|
36
39
|
- Update ALL impacted specs (required)
|
|
@@ -59,13 +62,14 @@ If the user gives a free-form description, extract the relevant information and
|
|
|
59
62
|
## Step 1: Read All Existing Specs
|
|
60
63
|
|
|
61
64
|
Read every existing file in `project-context/`:
|
|
65
|
+
|
|
62
66
|
- `PRD.md`
|
|
63
67
|
- `architecture.md`
|
|
64
68
|
- `schema.md`
|
|
65
69
|
- `api.md`
|
|
66
70
|
- `rules.md`
|
|
67
71
|
- `StyleGuide.md`
|
|
68
|
-
- `Task.md`
|
|
72
|
+
- `Task.md` _(if it exists; otherwise it will be created by brainstorm-task)_
|
|
69
73
|
|
|
70
74
|
Read everything that exists. Skip nothing. Note the ID patterns in use (`FEAT-*`, `BR-*`, `DATA-*`, `API-*`, etc.).
|
|
71
75
|
|
|
@@ -114,15 +118,17 @@ For each **IMPACTED** document, update it in this order:
|
|
|
114
118
|
4. `api.md` — add endpoints
|
|
115
119
|
5. `StyleGuide.md` — add components/styles
|
|
116
120
|
6. `rules.md` — add conventions if needed
|
|
117
|
-
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
|
|
118
124
|
|
|
119
|
-
### Update Principles:
|
|
120
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
|
|
121
126
|
- **Match the existing style** — follow the current document format and tone
|
|
122
127
|
- **Make additions clear** — place them logically; no special tags are needed
|
|
123
128
|
- **Preserve old IDs** — assign new IDs for new items using the existing pattern
|
|
124
129
|
|
|
125
130
|
After each update:
|
|
131
|
+
|
|
126
132
|
```
|
|
127
133
|
✅ PRD.md updated
|
|
128
134
|
Section: [heading]
|
|
@@ -137,12 +143,14 @@ After each update:
|
|
|
137
143
|
Call `brainstorm-task` to add a phase and tasks to `Task.md`.
|
|
138
144
|
|
|
139
145
|
**Do not create tasks manually.** The `brainstorm-task` skill:
|
|
146
|
+
|
|
140
147
|
- Performs deep analysis of the updated specs
|
|
141
148
|
- Ensures task dependencies are ordered correctly
|
|
142
149
|
- Creates testable acceptance criteria
|
|
143
150
|
- Preserves consistency with existing phases
|
|
144
151
|
|
|
145
152
|
Provide context:
|
|
153
|
+
|
|
146
154
|
- If `Task.md` exists: "Add a new phase for this feature (do not rewrite everything)"
|
|
147
155
|
- If `Task.md` does not exist: "Create Task.md from scratch using all specs"
|
|
148
156
|
|