forge-orkes 0.4.0 → 0.5.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forge-orkes",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Set up the Forge meta-prompting framework for Claude Code in your project",
5
5
  "bin": {
6
6
  "create-forge": "./bin/create-forge.js"
@@ -168,7 +168,7 @@ Run all non-advisory verification commands once after commit. 1 retry max.
168
168
  | Context under 40% | Continue normally |
169
169
  | Switching unrelated subsystems | Spawn fresh agent |
170
170
 
171
- **Spawn via Task tool** with: relevant plan details, specific files, locked decisions from context.md, clear success criteria.
171
+ **Spawn via Agent tool** with: relevant plan details, specific files, locked decisions from context.md, clear success criteria. **Pass `model` param** from `project.yml` model routing (`models.skills.executing` → `models.default` → parent). Display: *"Spawning executor with model: {model} (from {source})"*
172
172
 
173
173
  ## Execution Summary
174
174
 
@@ -45,7 +45,8 @@ No `project.yml` + Standard/Full → **Step 2A**. State exists → **Step 2B**.
45
45
 
46
46
  ### Parent Session Model Advisory
47
47
 
48
- Check `models.parent_session` from `project.yml`. Mismatch *"Recommends {parent_session}, running {current}. `/model` to switch."*
48
+ Check `models.parent_session` from `project.yml`. **Always display:** *"Session model: {current}. Project recommends: {parent_session}."*
49
+ Mismatch → append: *"Use `/model` to switch."*
49
50
  - Advisory only -- no block. Reviewer enforces at review gate.
50
51
 
51
52
  ## Step 2A: Project Init
@@ -75,7 +76,7 @@ ANY: new project, major arch change, multi-phase, multi-subsystem, days of work,
75
76
 
76
77
  ## Step 3: Route to Next Skill
77
78
 
78
- Tier + state → invoke via `Skill` tool.
79
+ Tier + state → invoke via `Skill` tool or `Agent` tool (agent-dispatched phases).
79
80
 
80
81
  **CRITICAL: NEVER `EnterPlanMode`.** "Planning" = `Skill(planning)`. Native plan mode writes wrong format, bypasses gates + state.
81
82
 
@@ -85,7 +86,7 @@ Tier + state → invoke via `Skill` tool.
85
86
 
86
87
  1. Read `milestone-{id}.yml` → 2. Check advancement → 3. `current.status` → skill → 4. Brief + route:
87
88
 
88
- *"Milestone {id}: {name} | {current.status} → {next} | {overall_percent}% | Routing..."*
89
+ *"Milestone {id}: {name} | {current.status} → {next} ({model}) | {overall_percent}% | Routing..."*
89
90
 
90
91
  Briefing, not prompt -- default = forward.
91
92
 
@@ -96,7 +97,15 @@ Read `models` from `project.yml`:
96
97
  2. `models.default` → fallback
97
98
  3. Inherit parent session
98
99
 
99
- Subagents via `Task` same precedence.
100
+ Resolve `{model}` for `{next}` skill using precedence above. **Always display** the resolved model in the routing briefing and its source:
101
+
102
+ *"Skill {next} expects {model} (from {source}). Running {current_model}."*
103
+
104
+ Where `{source}` = `skills.{name}` | `models.default` | `parent session`. Show on every transition, not just mismatch. If mismatch, append: *"Use `/model` to switch."*
105
+
106
+ **Agent spawns MUST include `model` param.** Resolve model for the skill context, pass to `Agent(model: "{model}")`. This is the only enforcement point — `Skill` tool has no model param.
107
+
108
+ Subagents via `Agent` tool → same precedence, enforced via `model` param.
100
109
 
101
110
  | Skill | Model | Why |
102
111
  |-------|-------|-----|
@@ -110,17 +119,60 @@ Subagents via `Task` → same precedence.
110
119
  | discussing | sonnet | Conversation |
111
120
  | testing | sonnet | Code gen (author) + audit judgment (analyst) — matches executing/reviewing |
112
121
 
113
- | `current.status` | Route To |
114
- |-------------------|----------|
115
- | `not_started` | Detect tier, start |
116
- | `researching` | `Skill(researching)` → discussing |
117
- | `discussing` | `Skill(discussing)` → planning (or architecting if Full) |
118
- | `architecting` | `Skill(architecting)` → planning |
119
- | `planning` | `Skill(planning)` → executing |
120
- | `executing` | `Skill(executing)` → verifying |
121
- | `verifying` | `Skill(verifying)` → reviewing |
122
- | `reviewing` | `Skill(reviewing)` → complete |
123
- | `complete` | Done. Ask what's next. |
122
+ | `current.status` | Route To | Method |
123
+ |-------------------|----------|--------|
124
+ | `not_started` | Detect tier, start | — |
125
+ | `researching` | `Skill(researching)` → discussing | Skill |
126
+ | `discussing` | `Skill(discussing)` → planning (or architecting if Full) | Skill |
127
+ | `architecting` | `Skill(architecting)` → planning | Skill |
128
+ | `planning` | `Skill(planning)` → executing | Skill |
129
+ | `executing` | `Skill(executing)` → verifying | Skill |
130
+ | `verifying` | Agent-dispatched → reviewing | **Agent** |
131
+ | `reviewing` | `Skill(reviewing)` → complete | Skill |
132
+ | `complete` | Done. Ask what's next. | — |
133
+
134
+ ### Agent-Dispatched Phases
135
+
136
+ Some phases run as spawned agents instead of in-session skills. This **enforces model routing** — the `Agent` tool's `model` param guarantees the correct model runs.
137
+
138
+ #### Verifying (Agent-Dispatched)
139
+
140
+ When `current.status == verifying`, do NOT call `Skill(verifying)`. Instead:
141
+
142
+ 1. Read milestone state: `.forge/state/milestone-{id}.yml`
143
+ 2. Identify the plan path from state: `.forge/phases/m{M}-{N}-{name}/plan-{NN}.md`
144
+ 3. Resolve model: `models.skills.verifying` → `models.default` → parent
145
+ 4. Spawn agent:
146
+
147
+ ```
148
+ Agent(
149
+ model: "{resolved_model}",
150
+ description: "Verify milestone {id}: {name}",
151
+ prompt: "You are a verifier agent. Your job: prove completed work delivers what was promised.
152
+
153
+ FIRST: Run `touch .forge/.active-skill` to satisfy the pre-commit hook guard. Without this, all Write/Edit operations will be blocked.
154
+
155
+ Read these files for context:
156
+ - .claude/skills/verifying/SKILL.md — your full process instructions
157
+ - .claude/agents/verifier.md — your role, tools, output format
158
+ - .forge/state/milestone-{id}.yml — current state
159
+ - .forge/phases/{phase_path}/plan-{NN}.md — must_haves to verify
160
+ - .forge/project.yml — tech stack, verification commands
161
+ - .forge/context.md — locked decisions
162
+ - .forge/requirements.yml — requirement IDs for coverage
163
+
164
+ Follow the 3-level verification process in verifying/SKILL.md exactly.
165
+ Write verification results to the plan directory.
166
+ Update milestone state: set current.status to 'reviewing' if PASSED, keep 'verifying' if GAPS FOUND.
167
+ End with a verification summary for the parent session."
168
+ )
169
+ ```
170
+
171
+ 5. On agent return:
172
+ - Read updated `milestone-{id}.yml`
173
+ - Display result: *"Verification {PASSED|GAPS FOUND}. Model: {model} (enforced)."*
174
+ - PASSED → route to reviewing
175
+ - GAPS FOUND → route back to planning (gap-closure mode)
124
176
 
125
177
  - Skip before `current.status`; resume current.
126
178
 
@@ -54,7 +54,7 @@ File lists per subagent (paths, not globs).
54
54
 
55
55
  ## Step 3: Parallel Scans
56
56
 
57
- Fresh-context subagents with file list + tech stack.
57
+ Fresh-context subagents with file list + tech stack. **Pass `model` param** from `project.yml` model routing (`models.skills.reviewing` → `models.default` → parent). Display: *"Spawning reviewers with model: {model} (from {source})"*
58
58
 
59
59
  ### Part 1: Security Audit
60
60
 
@@ -315,5 +315,5 @@ pending → dismissed (during triage or later)
315
315
  ## Phase Handoff
316
316
 
317
317
  1. Confirm report + backlog
318
- 2. Set `current.status: complete`
318
+ 2. Set `current.status: complete` and `current.completed_at: "<ISO 8601 timestamp>"`
319
319
  3. *"Milestone [{name}] complete. Report: `.forge/audits/milestone-{id}-health-report.md`. {N} backlog items. `/forge` or backlog."*
@@ -13,7 +13,8 @@ current:
13
13
  phase_name: "" # Human-readable phase name
14
14
  plan: null # Current plan number within phase
15
15
  task: null # Current task number within plan
16
- status: not_started # not_started | researching | discussing | planning | executing | verifying | auditing | refactoring | complete
16
+ status: not_started # not_started | researching | discussing | planning | executing | verifying | reviewing | complete
17
+ completed_at: null # ISO 8601 timestamp — set when status transitions to complete
17
18
 
18
19
  progress:
19
20
  phases_complete: 0 # Number of roadmap phases with all tasks done