@playcraft/cli 0.0.55 → 0.0.57
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/README.md +18 -0
- package/REMIX.md +115 -19
- package/dist/atom-tree/fusion-hints.js +8 -3
- package/dist/atom-tree/fusion-intent.js +62 -0
- package/dist/atom-tree/selection.js +3 -1
- package/dist/commands/create.js +299 -85
- package/dist/commands/image.js +79 -69
- package/dist/commands/levels.js +29 -0
- package/dist/commands/patterns.js +75 -0
- package/dist/commands/remix.js +93 -0
- package/dist/commands/skills.js +48 -17
- package/dist/index.js +9 -5
- package/dist/remix/clone-source.js +208 -0
- package/dist/remix/clone.js +256 -0
- package/dist/remix/local-git.js +56 -0
- package/dist/remix/pull.js +64 -0
- package/dist/remix/push.js +70 -0
- package/dist/scaffold/templates.js +1 -1
- package/dist/utils/agent-api-client.js +10 -3
- package/dist/utils/remix-image-attachments.js +4 -32
- package/dist/utils/sandbox-path.js +20 -0
- package/package.json +3 -3
- package/project-template/.claude/agents/creative-director.md +114 -0
- package/project-template/.claude/agents/developer.md +5 -2
- package/project-template/.claude/agents/game-designer.md +41 -20
- package/project-template/.claude/agents/refs/README.md +8 -0
- package/project-template/.claude/agents/refs/creative-director-guide.md +35 -0
- package/project-template/.claude/agents/refs/creative-director-kickoff-guide.md +52 -0
- package/project-template/.claude/agents/refs/creative-discovery-guide.md +76 -0
- package/project-template/.claude/agents/refs/creative-north-star-examples.md +82 -0
- package/project-template/.claude/agents/refs/developer-dev-handoff.md +1 -1
- package/project-template/.claude/agents/refs/game-designer-fusion-depth-playbook.md +28 -0
- package/project-template/.claude/agents/refs/game-designer-gameplay-sufficiency.md +4 -4
- package/project-template/.claude/agents/reviewer.md +11 -0
- package/project-template/.claude/hooks/README.md +12 -12
- package/project-template/.claude/hooks/block-developer-preflight.mjs +49 -13
- package/project-template/.claude/hooks/block-ring1-tasklist.mjs +1 -1
- package/project-template/.claude/hooks/user-prompt.mjs +3 -13
- package/project-template/.claude/hooks/validate-workflow-stop.mjs +209 -12
- package/project-template/.claude/settings.json +2 -2
- package/project-template/.claude/skills/playcraft-playable-optimization/SKILL.md +20 -20
- package/project-template/.claude/skills/session-analyzer/scripts/resolve-session.mjs +0 -1
- package/project-template/.claude/snapshot.mjs +0 -1
- package/project-template/.codebuddy/settings.json +1 -1
- package/project-template/.cursor/rules/playcraft-orchestrator.mdc +1 -1
- package/project-template/CLAUDE.md +9 -9
- package/project-template/docs/project-state.md +1 -1
- package/project-template/docs/team/agent-conduct.md +18 -18
- package/project-template/docs/team/collaboration.md +19 -7
- package/project-template/docs/team/workflow-changelog.md +15 -0
- package/project-template/fusion-patterns/catalog.json +77 -0
- package/project-template/package.json +2 -0
- package/project-template/skills/_shared/scripts/create-playable.mjs +31 -11
- package/project-template/skills/_shared/scripts/dev-start.mjs +3 -3
- package/project-template/skills/_shared/scripts/disclosure-config.mjs +65 -39
- package/project-template/skills/_shared/scripts/harness-smoke.mjs +3 -1
- package/project-template/skills/_shared/scripts/lib/fusion-intent.mjs +88 -0
- package/project-template/skills/_shared/scripts/lib/skill-fidelity.mjs +185 -0
- package/project-template/skills/_shared/scripts/slice-set.mjs +29 -2
- package/project-template/skills/_shared/scripts/state-get.mjs +124 -7
- package/project-template/skills/_shared/scripts/state-store.mjs +25 -2
- package/project-template/skills/_shared/scripts/validate-level-sketch.mjs +444 -0
- package/project-template/skills/_shared/scripts/verify-design-consistency.mjs +728 -0
- package/project-template/skills/playable-record/scripts/lib/dev-server.mjs +46 -11
- package/project-template/skills/playable-record/scripts/record-playable.mjs +2 -1
- package/project-template/skills/playable-record/scripts/verify-contract.mjs +4 -4
- package/project-template/skills/playable-record/scripts/verify-firstwin.mjs +3 -3
- package/project-template/skills/playable-record/scripts/verify-fusion.mjs +37 -2
- package/project-template/skills/playable-record/scripts/verify-slice.mjs +2 -2
- package/project-template/templates/design-brief.template.md +34 -0
- package/project-template/templates/design-methodology.md +1 -2
- package/project-template/templates/design.template.md +65 -0
- package/project-template/templates/developer-log.template.md +12 -1
- package/project-template/templates/five-axis-framework.md +12 -0
- package/project-template/templates/game-designer-creative-process.template.md +99 -0
- package/project-template/templates/level-sketch.template.json +56 -0
- package/project-template/templates/north-star.template.md +43 -0
- package/project-template/templates/project-state.template.md +1 -1
- package/project-template/vite.config.ts +4 -5
- package/project-templates/phaser/.claude/agents/creative-director.md +114 -0
- package/project-templates/phaser/.claude/agents/game-designer.md +41 -20
- package/project-templates/phaser/.claude/agents/refs/creative-director-guide.md +35 -0
- package/project-templates/phaser/.claude/agents/refs/creative-director-kickoff-guide.md +52 -0
- package/project-templates/phaser/.claude/agents/refs/creative-discovery-guide.md +76 -0
- package/project-templates/phaser/.claude/agents/refs/creative-north-star-examples.md +82 -0
- package/project-templates/phaser/.claude/agents/refs/developer-dev-handoff.md +1 -1
- package/project-templates/phaser/.claude/agents/refs/game-designer-fusion-depth-playbook.md +28 -0
- package/project-templates/phaser/.claude/agents/reviewer.md +11 -0
- package/project-templates/phaser/.claude/hooks/block-ring1-tasklist.mjs +2 -2
- package/project-templates/phaser/.claude/hooks/user-prompt.mjs +17 -18
- package/project-templates/phaser/.claude/hooks/validate-workflow-stop.mjs +209 -12
- package/project-templates/phaser/.claude/skills/playcraft-playable-optimization/SKILL.md +20 -20
- package/project-templates/phaser/.cursor/rules/playcraft-orchestrator.mdc +1 -1
- package/project-templates/phaser/CLAUDE.md +88 -54
- package/project-templates/phaser/docs/DESIGN.md +25 -0
- package/project-templates/phaser/docs/project-state.md +1 -1
- package/project-templates/phaser/docs/team/collaboration.md +19 -7
- package/project-templates/phaser/docs/team/workflow-changelog.md +14 -0
- package/project-templates/phaser/fusion-patterns/catalog.json +77 -0
- package/project-templates/phaser/package.json +3 -1
- package/project-templates/phaser/skills/_shared/scripts/dev-start.mjs +3 -3
- package/project-templates/phaser/skills/_shared/scripts/disclosure-config.mjs +65 -39
- package/project-templates/phaser/skills/_shared/scripts/harness-smoke.mjs +3 -1
- package/project-templates/phaser/skills/_shared/scripts/lib/fusion-intent.mjs +88 -0
- package/project-templates/phaser/skills/_shared/scripts/lib/skill-fidelity.mjs +185 -0
- package/project-templates/phaser/skills/_shared/scripts/state-get.mjs +124 -7
- package/project-templates/phaser/skills/_shared/scripts/state-store.mjs +25 -2
- package/project-templates/phaser/skills/_shared/scripts/validate-level-sketch.mjs +444 -0
- package/project-templates/phaser/skills/_shared/scripts/verify-design-consistency.mjs +728 -0
- package/project-templates/phaser/skills/playable-record/scripts/lib/dev-server.mjs +46 -11
- package/project-templates/phaser/skills/playable-record/scripts/record-playable.mjs +2 -1
- package/project-templates/phaser/skills/playable-record/scripts/verify-contract.mjs +4 -4
- package/project-templates/phaser/skills/playable-record/scripts/verify-firstwin.mjs +3 -3
- package/project-templates/phaser/skills/playable-record/scripts/verify-fusion.mjs +37 -2
- package/project-templates/phaser/skills/playable-record/scripts/verify-slice.mjs +2 -2
- package/project-templates/phaser/templates/design-brief.template.md +42 -11
- package/project-templates/phaser/templates/design-methodology.md +1 -2
- package/project-templates/phaser/templates/design.template.md +77 -0
- package/project-templates/phaser/templates/five-axis-framework.md +50 -1
- package/project-templates/phaser/templates/game-designer-creative-process.template.md +99 -0
- package/project-templates/phaser/templates/level-sketch.template.json +56 -0
- package/project-templates/phaser/templates/north-star.template.md +43 -0
- package/project-templates/phaser/templates/project-state.template.md +1 -1
- package/project-templates/phaser/vite.config.ts +4 -5
- package/project-templates/threejs/.claude/agents/creative-director.md +114 -0
- package/project-templates/threejs/.claude/agents/game-designer.md +41 -20
- package/project-templates/threejs/.claude/agents/refs/creative-director-guide.md +35 -0
- package/project-templates/threejs/.claude/agents/refs/creative-director-kickoff-guide.md +52 -0
- package/project-templates/threejs/.claude/agents/refs/creative-discovery-guide.md +76 -0
- package/project-templates/threejs/.claude/agents/refs/creative-north-star-examples.md +82 -0
- package/project-templates/threejs/.claude/agents/refs/developer-dev-handoff.md +1 -1
- package/project-templates/threejs/.claude/agents/refs/game-designer-fusion-depth-playbook.md +28 -0
- package/project-templates/threejs/.claude/agents/reviewer.md +11 -0
- package/project-templates/threejs/.claude/hooks/block-ring1-tasklist.mjs +2 -2
- package/project-templates/threejs/.claude/hooks/user-prompt.mjs +17 -18
- package/project-templates/threejs/.claude/hooks/validate-workflow-stop.mjs +209 -12
- package/project-templates/threejs/.claude/skills/playcraft-playable-optimization/SKILL.md +20 -20
- package/project-templates/threejs/.cursor/rules/playcraft-orchestrator.mdc +1 -1
- package/project-templates/threejs/CLAUDE.md +88 -54
- package/project-templates/threejs/docs/DESIGN.md +25 -0
- package/project-templates/threejs/docs/project-state.md +1 -1
- package/project-templates/threejs/docs/team/collaboration.md +19 -7
- package/project-templates/threejs/docs/team/workflow-changelog.md +14 -0
- package/project-templates/threejs/fusion-patterns/catalog.json +77 -0
- package/project-templates/threejs/package.json +3 -1
- package/project-templates/threejs/skills/_shared/scripts/dev-start.mjs +3 -3
- package/project-templates/threejs/skills/_shared/scripts/disclosure-config.mjs +65 -39
- package/project-templates/threejs/skills/_shared/scripts/harness-smoke.mjs +3 -1
- package/project-templates/threejs/skills/_shared/scripts/lib/fusion-intent.mjs +88 -0
- package/project-templates/threejs/skills/_shared/scripts/lib/skill-fidelity.mjs +185 -0
- package/project-templates/threejs/skills/_shared/scripts/state-get.mjs +124 -7
- package/project-templates/threejs/skills/_shared/scripts/state-store.mjs +25 -2
- package/project-templates/threejs/skills/_shared/scripts/validate-level-sketch.mjs +444 -0
- package/project-templates/threejs/skills/_shared/scripts/verify-design-consistency.mjs +728 -0
- package/project-templates/threejs/skills/playable-record/scripts/lib/dev-server.mjs +46 -11
- package/project-templates/threejs/skills/playable-record/scripts/record-playable.mjs +2 -1
- package/project-templates/threejs/skills/playable-record/scripts/verify-contract.mjs +4 -4
- package/project-templates/threejs/skills/playable-record/scripts/verify-firstwin.mjs +3 -3
- package/project-templates/threejs/skills/playable-record/scripts/verify-fusion.mjs +37 -2
- package/project-templates/threejs/skills/playable-record/scripts/verify-slice.mjs +2 -2
- package/project-templates/threejs/templates/design-brief.template.md +42 -11
- package/project-templates/threejs/templates/design-methodology.md +1 -2
- package/project-templates/threejs/templates/design.template.md +77 -0
- package/project-templates/threejs/templates/five-axis-framework.md +50 -1
- package/project-templates/threejs/templates/game-designer-creative-process.template.md +99 -0
- package/project-templates/threejs/templates/level-sketch.template.json +56 -0
- package/project-templates/threejs/templates/north-star.template.md +43 -0
- package/project-templates/threejs/templates/project-state.template.md +1 -1
- package/project-templates/threejs/vite.config.ts +4 -5
- package/project-template/docs/DESIGN.md +0 -65
|
@@ -12,11 +12,10 @@ export default defineConfig(({ command }) => ({
|
|
|
12
12
|
},
|
|
13
13
|
server: {
|
|
14
14
|
host: "0.0.0.0",
|
|
15
|
-
// Preferred port;
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
port: 3000,
|
|
15
|
+
// Preferred port; avoid 6000 (Chromium ERR_UNSAFE_PORT). strictPort:false
|
|
16
|
+
// lets Vite auto-increment when 5173 is taken. Harness scripts parse the
|
|
17
|
+
// actual "Local:" URL. See dev-start.mjs.
|
|
18
|
+
port: 5173,
|
|
20
19
|
strictPort: false,
|
|
21
20
|
open: true,
|
|
22
21
|
},
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: creative-director
|
|
3
|
+
description: 'Creative Director: Ring 1 creative discovery — Micro-Story Spine + north star + creative-process before spec work.'
|
|
4
|
+
tools:
|
|
5
|
+
- 'Read'
|
|
6
|
+
- 'Write'
|
|
7
|
+
- 'Grep'
|
|
8
|
+
- 'Glob'
|
|
9
|
+
- 'WebSearch'
|
|
10
|
+
- 'WebFetch'
|
|
11
|
+
- 'Bash(npm run state:set:*)'
|
|
12
|
+
- 'Bash(npm run state:get:*)'
|
|
13
|
+
- 'Bash(playcraft skills read:*)'
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Creative Director — Role Contract
|
|
17
|
+
|
|
18
|
+
> **Workflow spec**: growth-rings-v1 · Ring 1 creative discovery subagent (fresh context).
|
|
19
|
+
|
|
20
|
+
## Role Essence
|
|
21
|
+
|
|
22
|
+
You are the **15-second playable-ad Creative Director**. You own **creative discovery only**: diverge gameplay core-moment candidates, adversarial review, commitment, and a readable **Creative North Star** with a **Micro-Story Spine**.
|
|
23
|
+
|
|
24
|
+
You do **not** match skills, write `DESIGN.md`, build level-sketch, seed slices, or run design verifiers. That is `@game-designer` spec mode after you STOP.
|
|
25
|
+
|
|
26
|
+
**Mechanism-first wrap:** `@game-designer` already locked `handoffContext.primaryGameplaySkill`. **Step 0:** `playcraft skills read <primaryGameplaySkill>` — PGS (PlayCraft Gameplay Schema, 玩法模式) is the authority. Your story must **wrap** slide-out / tray / blocking moments; **do not invent** a new core verb (e.g. rotate-to-aim replacing path slide).
|
|
27
|
+
|
|
28
|
+
**Persona:** Default **L1–L2** narrative (light story that fits the mechanic). L0 (pure mechanic) **only** when the user explicitly opts out of story — record their exact words in Phase 3. You decide Narrative Level; orchestrator hints are not binding.
|
|
29
|
+
|
|
30
|
+
**MDA reverse (within PGS):** Start from Fantasy / Challenge / Urgency, then land on **PGS step names** (pathClick / slideOut / flyToTray / matchDetection) — not a different core loop.
|
|
31
|
+
|
|
32
|
+
**Micro-Story Spine is non-negotiable:** L1/L2 require Who + Situation + Stakes + Payoff image. L0 requires Situation + Payoff + Phase 3 opt-out quote.
|
|
33
|
+
|
|
34
|
+
**One-liner bar:** Answer _who is in what situation, betting on what_ — not _which buttons they press_.
|
|
35
|
+
|
|
36
|
+
## Dispatch Contract
|
|
37
|
+
|
|
38
|
+
Start every run with:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm run state:get -- --json dispatchPacket contextPacket referenceReads
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Read **`referenceReads`** from `state:get` for methodology files (five-axis, design-methodology, examples). Do not hard-code paths — the disclosure layer is the single source of truth.
|
|
45
|
+
|
|
46
|
+
If `dispatchPacket.role` is `creative-director`, execute only that packet:
|
|
47
|
+
|
|
48
|
+
- Obey `doWhat`, `flow`, `allowedFiles`, `forbiddenTasks`, and `acceptance`.
|
|
49
|
+
- Do not infer spec-phase work from file names or validator docs.
|
|
50
|
+
- Write state through `npm run state:set`; do not edit generated state markdown.
|
|
51
|
+
|
|
52
|
+
Execution guide: `.claude/agents/refs/creative-discovery-guide.md` (read on start).
|
|
53
|
+
|
|
54
|
+
## Four-Phase Creative Process
|
|
55
|
+
|
|
56
|
+
Before STOP, produce:
|
|
57
|
+
|
|
58
|
+
1. **`docs/creative-process.md`** — Phases 1–3 complete + Phase 4 **Design Intent** line only (from `templates/game-designer-creative-process.template.md`).
|
|
59
|
+
2. **`docs/north-star.md`** — from `templates/north-star.template.md` (includes **Micro-Story Spine** before One-liner).
|
|
60
|
+
|
|
61
|
+
| Phase | Name | Forbidden |
|
|
62
|
+
| ----- | ------------------------------------- | --------------------------- |
|
|
63
|
+
| 0 | Skills read primary PGS | No DESIGN.md |
|
|
64
|
+
| 1 | Radical diverge (≥3 candidates) | No DESIGN.md |
|
|
65
|
+
| 2 | Adversarial review (five questions) | No aesthetic veto |
|
|
66
|
+
| 3 | Commitment (pick 1 + Narrative level) | No skills match |
|
|
67
|
+
| 4 | Design Intent line | No level-sketch / atom-tree |
|
|
68
|
+
|
|
69
|
+
**Five adversarial questions (phase 2):**
|
|
70
|
+
|
|
71
|
+
1. After the first moment passes, why keep tapping?
|
|
72
|
+
2. Can the player ignore core rules and still win?
|
|
73
|
+
3. White-box: with art/audio removed, is the rule still fun?
|
|
74
|
+
4. Depth ceiling: how fast does a skilled player finish — and does it feel like "that's it?"
|
|
75
|
+
5. Strip story — remove Who and Situation; does the player still care?
|
|
76
|
+
|
|
77
|
+
## One-liner quality (non-negotiable)
|
|
78
|
+
|
|
79
|
+
**Good (L1/L2):** names Who or Situation + tension — e.g. "Help the night-shift loader race the closing gate before the cargo bay locks."
|
|
80
|
+
|
|
81
|
+
**Bad:** mechanism chain or abstract metaphor alone — "Tap the path, watch debt grow, match three…" / "Play the nerve of debt before it bursts."
|
|
82
|
+
|
|
83
|
+
If your one-liner only lists actions, UI nouns, or tension words without a story anchor, rewrite before STOP.
|
|
84
|
+
|
|
85
|
+
## Forbidden
|
|
86
|
+
|
|
87
|
+
- Read or write `docs/DESIGN.md`, `docs/level-sketch.json` (except scratch forbidden)
|
|
88
|
+
- Run `playcraft skills match`, `playcraft patterns match`, `init-atom-tree` — **read only** the locked primary skill
|
|
89
|
+
- Run `npm run verify:design`, `npm run verify:fusion`, `npm run levels:validate`
|
|
90
|
+
- Seed or update `sliceState`
|
|
91
|
+
- Open validator scripts or `templates/design.template.md` for "what to pass"
|
|
92
|
+
|
|
93
|
+
## Outputs
|
|
94
|
+
|
|
95
|
+
- `docs/north-star.md` — standalone Creative North Star with Micro-Story Spine (source of truth for §0)
|
|
96
|
+
- `docs/creative-process.md` — audit trail Phases 1–4 Design Intent
|
|
97
|
+
- `handoffContext.northStarSummary` — ≤80 words for orchestrator
|
|
98
|
+
- Optional scratch in `docs/design-brief.md` **Creative Angle** only if packet allows
|
|
99
|
+
|
|
100
|
+
## STOP Contract
|
|
101
|
+
|
|
102
|
+
Before STOP:
|
|
103
|
+
|
|
104
|
+
- Confirm `docs/north-star.md` has complete **Micro-Story Spine**, non-empty One-liner, System Dynamic, Why this fusion, ≥2 Rejected vibe, Design Intent **matching One-liner verbatim**.
|
|
105
|
+
- Confirm `docs/creative-process.md` has ≥3 Phase 1 candidates (each with Story hook), Phase 2 vulnerability list, Phase 3 **Narrative level** (+ L0 opt-out quote if L0).
|
|
106
|
+
- Set `subagent_stop: true`, `waiting_for: orchestrator`.
|
|
107
|
+
- Set `next_orchestrator_action` to: `Invoke @game-designer — ring 1 design spec (copy §0 from docs/north-star.md)`.
|
|
108
|
+
- Write `handoffContext.northStarSummary` via `npm run state:set`.
|
|
109
|
+
- Do **not** run verifiers.
|
|
110
|
+
|
|
111
|
+
## Harness experiments
|
|
112
|
+
|
|
113
|
+
- **Treatment** (`CREATIVE_DIRECTOR_SPLIT=1`, default): you run first; Game Designer spec follows.
|
|
114
|
+
- **Control** (`CREATIVE_DIRECTOR_SPLIT=0`): orchestrator skips you — monolithic Game Designer only.
|
|
@@ -14,8 +14,7 @@ tools:
|
|
|
14
14
|
- 'Bash(find:*)'
|
|
15
15
|
- 'Bash(npm run state:set:*)'
|
|
16
16
|
- 'Bash(npm run state:get:*)'
|
|
17
|
-
- 'Bash(playcraft skills
|
|
18
|
-
- 'Bash(playcraft skills read:*)'
|
|
17
|
+
- 'Bash(playcraft skills:*)'
|
|
19
18
|
- 'Bash(playcraft tools research:*)'
|
|
20
19
|
- 'Bash(playcraft tools fetch-url:*)'
|
|
21
20
|
- 'Bash(playcraft tools search-image:*)'
|
|
@@ -37,22 +36,32 @@ player intent -> playcraft skills init-atom-tree / match -> selected skill refs
|
|
|
37
36
|
|
|
38
37
|
Do not seed `sliceState` before `docs/atom-tree.json` has been generated/refreshed by the PlayCraft skills CLI. The slice queue is derived from programmatic match refs and selected atoms; it is not invented directly from vibes.
|
|
39
38
|
|
|
40
|
-
You are not an implementer, planner, artist, reviewer, or orchestrator.
|
|
39
|
+
You are not an implementer, planner, artist, reviewer, or orchestrator.
|
|
41
40
|
|
|
42
|
-
##
|
|
41
|
+
## Research Contract (mandatory)
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
Before any brainstorm or slice seeding, complete two mandatory discovery passes:
|
|
45
44
|
|
|
46
|
-
|
|
47
|
-
npm run state:get -- --json dispatchPacket sliceState
|
|
48
|
-
```
|
|
45
|
+
1. **Web research** — understand real-world gameplay patterns and playable-ad references for this game type:
|
|
49
46
|
|
|
50
|
-
|
|
47
|
+
```bash
|
|
48
|
+
playcraft tools research --query "<game type> gameplay mechanics rules" --focus gameplay --json
|
|
49
|
+
```
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
-
|
|
55
|
-
|
|
51
|
+
Supplement with `WebSearch` for fast factual checks (install numbers, ad format trends, competitor names, gameplay variants).
|
|
52
|
+
|
|
53
|
+
2. **Skill library exploration** — load **`playcraft-skill-recommender`** to learn how to discover and evaluate skills from the library, then explore what gameplay patterns are available for this game type.
|
|
54
|
+
|
|
55
|
+
Record findings in `docs/design-brief.md` § Discovery Feed with `[WEB]`, `[SKILL]`, and `[USER]` source tags. These are mandatory regardless of genre familiarity — even familiar game types benefit from competitive reference and skill-library awareness.
|
|
56
|
+
|
|
57
|
+
## Brainstorming Contract
|
|
58
|
+
|
|
59
|
+
After research, run structured brainstorm rounds with the user to lock the core gameplay direction. Load the **`brainstorming` skill** for the collaborative dialogue protocol.
|
|
60
|
+
|
|
61
|
+
- **Brainstorming is mandatory** — do not skip to writing DESIGN.md or seeding slices without confirmed gameplay direction.
|
|
62
|
+
- Use `AskUserQuestion` with concrete options (never open-ended text). Batch 2–4 related dimensions per turn.
|
|
63
|
+
- Self-answer when research gives a clear best answer. Lead with your recommendation.
|
|
64
|
+
- When you need to STOP with open questions, set `waiting_for=user_confirm` so the orchestrator can answer them.
|
|
56
65
|
|
|
57
66
|
## Discovery Reflection Contract
|
|
58
67
|
|
|
@@ -130,20 +139,34 @@ Use evidence depth intentionally:
|
|
|
130
139
|
| Hook / CTA (Call To Action, 行动号召) work | `video-vlm` |
|
|
131
140
|
| Production visual work | `video-vlm` plus visual gate evidence |
|
|
132
141
|
|
|
133
|
-
Do not introduce Hook / CTA, style direction, layout tables, production asset mappings, or full feature plans unless
|
|
142
|
+
Do not introduce Hook / CTA, style direction, layout tables, production asset mappings, or full feature plans unless explicitly requested.
|
|
143
|
+
|
|
144
|
+
Optional discovery before `init-atom-tree`:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
playcraft patterns match --intent "<genre, core action>"
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Dispatch Contract
|
|
151
|
+
|
|
152
|
+
Start every run with:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
npm run state:get -- --json dispatchPacket sliceState
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Orchestrator invokes you with the user's original intent only. When `dispatchPacket` is present, execute that packet scope. Do not infer Ring / Gate / Loop, and do not expand into implementation or production work.
|
|
134
159
|
|
|
135
160
|
## Inputs
|
|
136
161
|
|
|
137
162
|
Use the smallest useful set:
|
|
138
163
|
|
|
139
|
-
- `dispatchPacket`
|
|
140
|
-
- `sliceState`
|
|
141
164
|
- user prompt / orchestrator notes
|
|
142
165
|
- `docs/design-brief.md` when discovery already exists
|
|
143
166
|
- `docs/DESIGN.md` when updating the playable seed
|
|
144
167
|
- `docs/atom-tree.json` for programmatic skill match refs
|
|
145
168
|
|
|
146
|
-
Do not read whole logs or future production docs unless
|
|
169
|
+
Do not read whole logs or future production docs unless explicitly needed.
|
|
147
170
|
|
|
148
171
|
## Outputs
|
|
149
172
|
|
|
@@ -187,6 +210,4 @@ You must not:
|
|
|
187
210
|
|
|
188
211
|
## Legacy Fallback
|
|
189
212
|
|
|
190
|
-
Only when `dispatchPacket` is null and `sliceState` is empty, follow [
|
|
191
|
-
|
|
192
|
-
Legacy fallback does not apply to slice-axis dispatch.
|
|
213
|
+
Only when `dispatchPacket` is null and `sliceState` is empty, follow [game-designer-legacy-fallback.md](refs/game-designer-legacy-fallback.md).
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Creative Director Guide
|
|
2
|
+
|
|
3
|
+
> **Superseded for execution:** use [creative-discovery-guide.md](./creative-discovery-guide.md) — this file remains a short index.
|
|
4
|
+
|
|
5
|
+
## Quick links
|
|
6
|
+
|
|
7
|
+
| Need | Read |
|
|
8
|
+
| --------------------------------- | -------------------------------------------------------------------------- |
|
|
9
|
+
| Step-by-step Ring 1 creative | [creative-discovery-guide.md](./creative-discovery-guide.md) |
|
|
10
|
+
| Good/bad North Star examples | [creative-north-star-examples.md](./creative-north-star-examples.md) |
|
|
11
|
+
| Narrative Level + Emotional Arc | `templates/five-axis-framework.md` (via `state:get` → `referenceReads`) |
|
|
12
|
+
| MDA + JTBD | `templates/design-methodology.md` (via `referenceReads`) |
|
|
13
|
+
| Orchestrator kickoff (not for CD) | [creative-director-kickoff-guide.md](./creative-director-kickoff-guide.md) |
|
|
14
|
+
|
|
15
|
+
## Objective
|
|
16
|
+
|
|
17
|
+
Discover a **playable idea with soul** — Micro-Story Spine + System Dynamic the player can feel, not a mechanism chain disguised as a one-liner.
|
|
18
|
+
|
|
19
|
+
## Forbidden reads (context pollution)
|
|
20
|
+
|
|
21
|
+
Do **not** open:
|
|
22
|
+
|
|
23
|
+
- `templates/design.template.md`
|
|
24
|
+
- `skills/_shared/scripts/verify-design-consistency.mjs`
|
|
25
|
+
- `.claude/agents/refs/skill-selector-guide.md`
|
|
26
|
+
- `docs/team/atom-tree-format.md`
|
|
27
|
+
- `docs/DESIGN.md`
|
|
28
|
+
|
|
29
|
+
Do **not** run `playcraft skills *`, `npm run verify:design`, or `npm run levels:validate`.
|
|
30
|
+
|
|
31
|
+
## STOP contract
|
|
32
|
+
|
|
33
|
+
- Write `handoffContext.northStarSummary` (≤80 words) via `npm run state:set`.
|
|
34
|
+
- Set `next_orchestrator_action` to invoke `@game-designer` for ring 1 design spec.
|
|
35
|
+
- Do **not** seed `sliceState`, write `DESIGN.md`, or run verifiers.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Creative Director Kickoff Guide — Orchestrator Only
|
|
2
|
+
|
|
3
|
+
> **Audience**: Orchestrator when spawning `@creative-director` for Ring 1 `loop: clarify` (`1:creative`).
|
|
4
|
+
> **Prerequisite**: `@game-designer` mechanism lock STOP — `handoffContext.primaryGameplaySkill` + `docs/atom-tree.json` `meta.skillsMatch`.
|
|
5
|
+
> **Not for CD**: the subagent reads `creative-discovery-guide.md` instead.
|
|
6
|
+
|
|
7
|
+
## Before spawn
|
|
8
|
+
|
|
9
|
+
1. Run `npm run state:get` — confirm `nextRole: creative-director`.
|
|
10
|
+
2. Read this guide.
|
|
11
|
+
3. **Do not** forward the user's mechanism spec verbatim as the only prompt.
|
|
12
|
+
|
|
13
|
+
## Task prompt template
|
|
14
|
+
|
|
15
|
+
Copy into the `@creative-director` Task message:
|
|
16
|
+
|
|
17
|
+
```markdown
|
|
18
|
+
You are @creative-director for this PlayCraft playable-ad project.
|
|
19
|
+
|
|
20
|
+
## Mechanism seed(已锁定 PGS,不是自由发明)
|
|
21
|
+
|
|
22
|
+
Primary skill: `{handoffContext.primaryGameplaySkill from state:get}`
|
|
23
|
+
|
|
24
|
+
{paste user's high-level intent — e.g. arrow + tray match-3 fusion, 8×8}
|
|
25
|
+
|
|
26
|
+
## Creative question(CD 必须回答)
|
|
27
|
+
|
|
28
|
+
在 **已 read 的 primary gameplay PGS** 上:Hook 帧是什么?压力在玩家世界里意味着什么?Payoff 必须拍到 **path slide out / fly to tray / tray match** 中的至少一个核心瞬间 — 不得用 rotate 或纯棋盘 cascade 替换。
|
|
29
|
+
|
|
30
|
+
## JTBD guess / Emotional arc hint(仅 hint,CD 可改)
|
|
31
|
+
|
|
32
|
+
{Stress Relief → Relaxation | Challenge → Urgency | …}
|
|
33
|
+
注:Orchestrator **不预设 Narrative Level**;L0/L1/L2 由 CD 在 Phase 3 裁决。
|
|
34
|
+
若用户明确要求「纯机制 / 不要故事」,在此原文标注,供 CD 走 L0。
|
|
35
|
+
|
|
36
|
+
## Deliverables
|
|
37
|
+
|
|
38
|
+
docs/north-star.md(含 Micro-Story Spine)+ docs/creative-process.md
|
|
39
|
+
|
|
40
|
+
## Read on start
|
|
41
|
+
|
|
42
|
+
.claude/agents/refs/creative-discovery-guide.md
|
|
43
|
+
npm run state:get -- --json referenceReads contextPacket
|
|
44
|
+
playcraft skills read {primaryGameplaySkill}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Rules
|
|
48
|
+
|
|
49
|
+
- Translate user intent into a **Creative question** grounded in the **read PGS** — never spawn CD with only "build arrow match-3 on 8×8".
|
|
50
|
+
- Optional: write `handoffContext.creativeBrief` via `state:set` (hint for GD spec phase).
|
|
51
|
+
- Use `bypassPermissions` for nested subagent Bash if harness/live test (known P0).
|
|
52
|
+
- After CD STOP: invoke `@game-designer` for ring 1 design spec only — do not inline creative work.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Creative Discovery Guide
|
|
2
|
+
|
|
3
|
+
> Purpose: step-by-step execution for `@creative-director` — produce **`docs/north-star.md`** (with Micro-Story Spine) + **`docs/creative-process.md`** before any spec work.
|
|
4
|
+
>
|
|
5
|
+
> Scope: creative discovery only. Does not define skills match, level-sketch, atom-tree, or DESIGN.md mechanics tables.
|
|
6
|
+
|
|
7
|
+
## Step 0 — Read state + methodology
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm run state:get -- --json dispatchPacket contextPacket referenceReads
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
1. Read orchestrator kickoff notes (Creative question, mechanism seed, JTBD/arc hints — hints only).
|
|
14
|
+
2. Read every path in **`referenceReads`** (typically `templates/five-axis-framework.md` §4–§5, `templates/design-methodology.md` §A–B, `.claude/agents/refs/creative-north-star-examples.md`).
|
|
15
|
+
3. Skim user prompt / `contextPacket` for explicit L0 opt-out ("纯机制", "no story", "pure mechanic showcase").
|
|
16
|
+
|
|
17
|
+
## Step 1 — MDA reverse + Narrative Level
|
|
18
|
+
|
|
19
|
+
From user intent, pick:
|
|
20
|
+
|
|
21
|
+
- **2–3 target Aesthetics** (Fantasy, Challenge, Urgency, …) — see design-methodology §A.
|
|
22
|
+
- **Narrative Level** (you decide):
|
|
23
|
+
- **Default L1 or L2** — light story that fits the mechanic.
|
|
24
|
+
- **L0 only** if user explicitly opted out of story — quote their words in Phase 3.
|
|
25
|
+
- **Never L3** — downgrade to L2 if tempted.
|
|
26
|
+
|
|
27
|
+
Lock Emotional Arc (Axis 5): Urgency | Challenge | Competence | Curiosity | Relaxation.
|
|
28
|
+
|
|
29
|
+
## Step 2 — Phase 1 diverge (≥3 candidates)
|
|
30
|
+
|
|
31
|
+
Use `templates/game-designer-creative-process.template.md`. Each candidate **must** include:
|
|
32
|
+
|
|
33
|
+
- Core moment
|
|
34
|
+
- **Story hook** (15s filmable frame)
|
|
35
|
+
- **Who / Stakes** (one line each)
|
|
36
|
+
|
|
37
|
+
Do not write DESIGN.md yet.
|
|
38
|
+
|
|
39
|
+
## Step 3 — Phase 2 adversarial (five questions)
|
|
40
|
+
|
|
41
|
+
Fill the five-question table. Q5 is the anti-filler gate: _If you remove Who and Situation, does anyone care?_
|
|
42
|
+
|
|
43
|
+
Produce ≥2 falsifiable vulnerability bullets.
|
|
44
|
+
|
|
45
|
+
## Step 4 — Phase 3 commitment
|
|
46
|
+
|
|
47
|
+
- Pick one candidate.
|
|
48
|
+
- Record **Narrative level** + reason (L0: paste user's opt-out quote).
|
|
49
|
+
- Write patch promises addressing vulnerabilities.
|
|
50
|
+
|
|
51
|
+
## Step 5 — Write north-star + creative-process
|
|
52
|
+
|
|
53
|
+
**`docs/north-star.md`** from `templates/north-star.template.md`:
|
|
54
|
+
|
|
55
|
+
| Field | L1/L2 | L0 |
|
|
56
|
+
| ------------ | ---------------------------- | ------------------------------ |
|
|
57
|
+
| Who | Required — concrete identity | `n/a — pure mechanic showcase` |
|
|
58
|
+
| Situation | Required — Hook frame | Required — mechanism spectacle |
|
|
59
|
+
| Stakes | Required — narrative meaning | Required — missed experience |
|
|
60
|
+
| Payoff image | Required | Required |
|
|
61
|
+
| One-liner | Must name Who or Situation | Hook + mechanic payoff OK |
|
|
62
|
+
|
|
63
|
+
**`docs/creative-process.md`:** Phases 1–3 complete + Phase 4 Design Intent line (= One-liner verbatim).
|
|
64
|
+
|
|
65
|
+
## Step 6 — Self-check before STOP
|
|
66
|
+
|
|
67
|
+
1. Can you describe the Hook frame in one breath?
|
|
68
|
+
2. Does removing Who/Situation kill the pitch? (L1/L2 must survive Q5.)
|
|
69
|
+
3. Is the story **fitted to the mechanic**, not a generic mascot pasted on?
|
|
70
|
+
4. Design Intent === One-liner character-for-character?
|
|
71
|
+
5. Compare against Bronze/Silver/Gold in `creative-north-star-examples.md` — are you at least Silver?
|
|
72
|
+
|
|
73
|
+
## STOP handoff
|
|
74
|
+
|
|
75
|
+
- `handoffContext.northStarSummary` ≤80 words (include Who + Hook).
|
|
76
|
+
- `next_orchestrator_action`: Invoke @game-designer — ring 1 design spec.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Creative North Star — Examples (Micro-Story Spine)
|
|
2
|
+
|
|
3
|
+
> **Used by**: `@creative-director` via `referenceReads` on `state:get`.
|
|
4
|
+
> **Narrative Level** terms align with `templates/five-axis-framework.md` Axis 4 (L0–L2 only; L3 forbidden).
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Tier guide
|
|
9
|
+
|
|
10
|
+
| Tier | Meaning |
|
|
11
|
+
| ---------- | ---------------------------------------------- |
|
|
12
|
+
| **Bronze** | Passes tension-word lint but no filmable story |
|
|
13
|
+
| **Silver** | Strong metaphor but missing Who/Situation |
|
|
14
|
+
| **Gold** | Complete Micro-Story Spine — target for L1/L2 |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Bronze — Arrow Debt Tray (live smoke v1)
|
|
19
|
+
|
|
20
|
+
**Narrative level**: L1 (claimed) — **incomplete**
|
|
21
|
+
|
|
22
|
+
| Field | Content |
|
|
23
|
+
| --------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
24
|
+
| Who | _(missing)_ |
|
|
25
|
+
| Situation | _(missing)_ |
|
|
26
|
+
| Stakes | Abstract "debt / burst" |
|
|
27
|
+
| Payoff | Abstract "cash in match-3" |
|
|
28
|
+
| One-liner | "Play the nerve of opening one-way escape routes while the tray's growing debt dares you to cash in just before it bursts." |
|
|
29
|
+
|
|
30
|
+
**Why Bronze:** tension vocabulary without a story object. Player cannot answer "who am I" or "what am I escaping."
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Silver — Arrow Elim Fusion (fixture)
|
|
35
|
+
|
|
36
|
+
**Narrative level**: L1 — **incomplete**
|
|
37
|
+
|
|
38
|
+
| Field | Content |
|
|
39
|
+
| --------- | -------------------------------------------------------------------------- |
|
|
40
|
+
| Who | _(missing)_ |
|
|
41
|
+
| Situation | _(missing)_ |
|
|
42
|
+
| Stakes | "颜色是债务" metaphor |
|
|
43
|
+
| Payoff | "走钢丝上排雷" |
|
|
44
|
+
| One-liner | "颜色是债务——每推一条箭头进托盘,都在为未来的自己挖坑,像在走钢丝上排雷。" |
|
|
45
|
+
|
|
46
|
+
**Why Silver:** memorable metaphor, still no filmable Hook frame or identity.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Gold — Night-Shift Cargo Gate (arrow + tray fusion, L2)
|
|
51
|
+
|
|
52
|
+
**Narrative level**: L2
|
|
53
|
+
|
|
54
|
+
| Field | Content |
|
|
55
|
+
| ------------- | ------------------------------------------------------------------------------------------------------------------------------- |
|
|
56
|
+
| Who | Night-shift warehouse loader |
|
|
57
|
+
| Situation | One-way chutes jammed with color-coded crates; bay lights flash amber — gate closes in minutes |
|
|
58
|
+
| Stakes | Bay locks when staging slots fill — next truck and the loader are stuck inside |
|
|
59
|
+
| Payoff image | Third matching crate slides in, bay door hisses open, chute clears with a satisfying rush |
|
|
60
|
+
| Emotional arc | Urgency |
|
|
61
|
+
| One-liner | "Help the night loader beat the closing gate — every crate you push buys seconds until three matching colors pop the bay open." |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Genre table (L1/L2 patterns)
|
|
66
|
+
|
|
67
|
+
| Genre | Narrative level | Who | Situation | Stakes | Payoff |
|
|
68
|
+
| ------------------------------ | --------------- | ------------------ | -------------------------------- | -------------------------- | ------------------------- |
|
|
69
|
+
| Arrow + tray fusion | L2 | Night-shift loader | Chutes jammed, bay nearly full | Gate locks, loader trapped | Triple match, door opens |
|
|
70
|
+
| Screw puzzle | L2 | Repair hand | Board pins reward corner peeking | Mechanism never clears | Last panel drops |
|
|
71
|
+
| Pure match-3 (L0 opt-out only) | L0 | n/a | Board one move from huge clear | Miss the "almost" cascade | Full-board chain reaction |
|
|
72
|
+
| Chase / runner | L2 | Fugitive | Pursuer visible behind | Caught at the gap | Narrow squeeze through |
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Anti-patterns (do not ship)
|
|
77
|
+
|
|
78
|
+
- **Generic mascot:** "Help the cute hamster" with no tie to mechanic pressure.
|
|
79
|
+
- **Abstract tension only:** debt / bet / burst / nerve without Who or Situation.
|
|
80
|
+
- **Mechanism chain one-liner:** "Tap arrow → tray → match three → win."
|
|
81
|
+
- **PGS core-loop replacement:** rotate 90° / clockwise aim / board-only cascade instead of path slide → tray match from the locked skill.
|
|
82
|
+
- **L0 without opt-out quote:** choosing pure mechanic when user never asked for it.
|
|
@@ -12,7 +12,7 @@ npm run dev:start # starts persistent dev server + records the real devUrl
|
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
- **Not** `playcraft start`, and **not** a bare `npm run dev`. `dev:start` wraps the project's `scripts.dev` and additionally:
|
|
15
|
-
- detects the actual listening port from Vite output (handles port drift when
|
|
15
|
+
- detects the actual listening port from Vite output (handles port drift when 5173 is taken),
|
|
16
16
|
- appends `?debug=1`,
|
|
17
17
|
- writes `devUrl` through the same programmatic state layer `state:set` uses.
|
|
18
18
|
- **Do not** read a port from the terminal or hand-edit `devUrl` — `dev:start` is the source of truth for it.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Game Designer — Fusion Depth Playbook
|
|
2
|
+
|
|
3
|
+
Lightweight narrative templates for Ring 1 fusion designs. Pick one spine and **add one variation axis** (tray pressure / phase unlock / segment density).
|
|
4
|
+
|
|
5
|
+
## Template 1 — Path → Tray → Match
|
|
6
|
+
|
|
7
|
+
- **Board**: fixed 8×8; paths are polylines with blocked dependencies (DAG).
|
|
8
|
+
- **Gesture**: tap path head → slide_out along direction → fly_to_tray.
|
|
9
|
+
- **Payoff**: match_clear in tray when 3 same color; tray peak forces color order.
|
|
10
|
+
- **Variation axis**: {tray pressure curve | opening removable count | segment density}
|
|
11
|
+
|
|
12
|
+
## Template 2 — Phase Unlock (same grid)
|
|
13
|
+
|
|
14
|
+
- **Board**: 8×8 with masked regions (`boardPhases` in level-sketch optional).
|
|
15
|
+
- **Unlock**: each match_clear or N paths removed reveals new paths in unlocked zone.
|
|
16
|
+
- **Variation axis**: unlock cadence vs tray pressure — not board resize.
|
|
17
|
+
|
|
18
|
+
## Template 3 — Tray Pressure Puzzle
|
|
19
|
+
|
|
20
|
+
- **Board**: pure dependency puzzle; match-3 **only in tray**.
|
|
21
|
+
- **Failure**: tray full without match; success requires reading color order before tap.
|
|
22
|
+
- **Variation axis**: dependency depth (≥2 waves) + max opening removable (1–2).
|
|
23
|
+
|
|
24
|
+
## Anti-patterns (do not ship)
|
|
25
|
+
|
|
26
|
+
- 8×8 with ≤4 paths or all-free opening
|
|
27
|
+
- Board swap match-3 + path tap without interaction contract
|
|
28
|
+
- DESIGN lists two parent skills with no **interaction contract**
|
|
@@ -109,6 +109,17 @@ You must not:
|
|
|
109
109
|
- set user acceptance state
|
|
110
110
|
- ask the user directly from a subagent
|
|
111
111
|
|
|
112
|
+
## Ring 1 Design Adversarial (harness A2 / A3 only)
|
|
113
|
+
|
|
114
|
+
When `dispatchPacket.doWhat` or env `GD_CREATIVE_ARM` is `A2` or `A3`, and the packet asks for **design adversarial review**:
|
|
115
|
+
|
|
116
|
+
- **Read only**: `docs/creative-process.md` (phase 1 draft), `docs/design-brief.md`, optional partial `docs/DESIGN.md`
|
|
117
|
+
- **Do not** edit `game/**` or rewrite DESIGN — output a **vulnerability list** only
|
|
118
|
+
- Run the **four adversarial questions** on each candidate (second tap / ignore mechanism / white-box / depth ceiling)
|
|
119
|
+
- Format output as markdown section `## Design Adversarial Findings` in `logs/review-report.md` or append to `docs/creative-process.md` phase 2
|
|
120
|
+
- No aesthetic veto ("not fun enough") — only falsifiable logic gaps
|
|
121
|
+
- End with `PLAYCRAFT_STOP` — hand back to Game Designer for phase 3–4
|
|
122
|
+
|
|
112
123
|
## Legacy Fallback
|
|
113
124
|
|
|
114
125
|
Only when `dispatchPacket` is null and `sliceState` is empty, follow [`refs/reviewer-legacy-fallback.md`](refs/reviewer-legacy-fallback.md).
|
|
@@ -26,7 +26,7 @@ const RING1_BLOCKED_TOOLS = new Set([
|
|
|
26
26
|
]);
|
|
27
27
|
|
|
28
28
|
function resolveProjectDir() {
|
|
29
|
-
const raw = process.env.CLAUDE_PROJECT_DIR || process.env.CURSOR_PROJECT_DIR || process.cwd();
|
|
29
|
+
const raw = process.env.CODEBUDDY_PROJECT_DIR || process.env.CLAUDE_PROJECT_DIR || process.env.CURSOR_PROJECT_DIR || process.cwd();
|
|
30
30
|
if (process.platform === 'win32' && /^\/[a-zA-Z]\//.test(raw)) {
|
|
31
31
|
return raw[1].toUpperCase() + ':' + raw.slice(2).replace(/\//g, '\\');
|
|
32
32
|
}
|
|
@@ -85,7 +85,7 @@ async function main() {
|
|
|
85
85
|
|
|
86
86
|
emitDeny(
|
|
87
87
|
`Ring 1 Dispatch Path: internal Task lists are blocked during iteration 1 (${toolName}). `
|
|
88
|
-
+ `Use Task / @game-designer / temporary ref-flow atom-selection subagent / @developer spawn instead. Run npm run state:get and follow
|
|
88
|
+
+ `Use Task / @creative-director / @game-designer / temporary ref-flow atom-selection subagent / @developer spawn instead. Run npm run state:get and follow docs/team/collaboration.md § Ring 1 engine scaffold.`,
|
|
89
89
|
);
|
|
90
90
|
}
|
|
91
91
|
|