forge-orkes 0.31.0 → 0.33.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/bin/create-forge.js +20 -1
- package/package.json +1 -1
- package/template/.claude/skills/chief-of-staff/SKILL.md +281 -0
- package/template/.claude/skills/discussing/SKILL.md +2 -0
- package/template/.claude/skills/forge/SKILL.md +31 -4
- package/template/.claude/skills/planning/SKILL.md +9 -0
- package/template/.claude/skills/upgrading/SKILL.md +30 -2
- package/template/.forge/FORGE.md +72 -23
- package/template/.forge/migrations/0.32.0-chief-streams.md +159 -0
- package/template/.forge/migrations/0.32.1-chief-front-door.md +64 -0
- package/template/.forge/migrations/0.33.0-worktree-convention-base.md +94 -0
- package/template/.forge/releases.yml +95 -15
- package/template/.forge/templates/context.md +4 -0
- package/template/.forge/templates/migration-guide.md +33 -0
- package/template/.forge/templates/streams/active.yml +34 -0
- package/template/.forge/templates/streams/brief.md +47 -0
- package/template/.forge/templates/streams/stream.yml +56 -0
- package/template/.forge/templates/streams/work-package.yml +70 -0
package/template/.forge/FORGE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Forge
|
|
2
2
|
|
|
3
|
-
Lean meta-prompting framework
|
|
3
|
+
Lean meta-prompting framework. Context engineering + constitutional governance on agent-native primitives.
|
|
4
4
|
|
|
5
5
|
## Critical: No Native Plan Mode
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ All phases: **invoke via `Skill` tool**, never native behavior. `planning` → `
|
|
|
11
11
|
## Core Principles
|
|
12
12
|
|
|
13
13
|
1. **Lean default, powerful when needed.** Quick → skip ceremony. Complex → full governance.
|
|
14
|
-
2. **
|
|
14
|
+
2. **Adapter-native.** Use each platform's built-ins through adapters. Avoid custom runtime unless the substrate truly needs it.
|
|
15
15
|
3. **Context is sacred.** Size-gate artifacts, lazy-load skills, fresh agents for isolated work.
|
|
16
16
|
4. **Decisions are contracts.** Lock before building. Honor or flag — never silently override.
|
|
17
17
|
5. **Verify goals, not tasks.** "Does it work?" > "Did we finish checklist?"
|
|
@@ -19,6 +19,39 @@ All phases: **invoke via `Skill` tool**, never native behavior. `planning` → `
|
|
|
19
19
|
7. **Pave desire paths.** Repeated deviations/corrections = signal → evolve framework.
|
|
20
20
|
8. **Disconfirm before commit.** Before locking a diagnosis, a solution, or a foundational choice, run the cheap pass that could break it. A conclusion reached without an attempt to refute it is a hypothesis, not a finding. Enforced at the three commit points: `debugging` (Confirmation Gate), `discussing`/`architecting` (option-space framing), `architecting` (Platform & Goal Validation).
|
|
21
21
|
|
|
22
|
+
## Core Protocol And Adapters
|
|
23
|
+
|
|
24
|
+
**Core protocol** lives in `.forge/`: project/constitution state, milestones, requirements, roadmap, context, streams, work packages, plans, verification, audits, and state ownership rules. The core protocol describes durable behavior, not one platform's tool names.
|
|
25
|
+
|
|
26
|
+
**Platform adapters** translate the protocol into a runtime. Each platform adapter maps core behavior to its tools: Claude Code skills/hooks, Codex/AGENTS behavior, manual multi-session handoffs, or future agent surfaces. Adapter mechanics stay in adapter files and skills; they should not become core requirements.
|
|
27
|
+
|
|
28
|
+
## Project Streams
|
|
29
|
+
|
|
30
|
+
Forge has three runtime coordination layers: Project, Stream, and Work Package.
|
|
31
|
+
|
|
32
|
+
| Layer | Purpose | Default Context |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| **Project** | Repo-wide traffic map: active streams, ownership, risks, merge order | `.forge/streams/active.yml` |
|
|
35
|
+
| **Stream** | One active line of work: goal, branch/worktree, state, blockers, next action | `.forge/streams/{stream}.yml` + `brief.md` |
|
|
36
|
+
| **Work Package** | Delegated bounded task inside a stream | `.forge/streams/{stream}/packages/{id}.yml` |
|
|
37
|
+
|
|
38
|
+
Use ordinary Quick/Standard/Full tiers inside a stream. Use Project Chief / Chief of Staff when coordinating multiple active streams or pivoting without dropping context. Workers never coordinate laterally; they report to the stream or project chief. M10 worktrees remain an optional backend for isolation/merge discipline, not the primary UX.
|
|
39
|
+
|
|
40
|
+
### Worktree Convention (base)
|
|
41
|
+
|
|
42
|
+
Worktrees are a **base concern** — Chief/Streams creates and references them with plain `git worktree`, independent of the experimental `orchestrating` skill. This convention is the single source of truth for *where worktrees live and what they're named*, so it lives here in base (not buried in an experimental skill) and stays upgrade-synced for every install (see [ADR-010](../docs/decisions/ADR-010-repo-scoped-worktree-root.md)).
|
|
43
|
+
|
|
44
|
+
| Element | Convention |
|
|
45
|
+
|---|---|
|
|
46
|
+
| **Root** | `orchestration.worktree_root` from `project.yml`; if unset, default `../<repo-basename>-worktrees/`. Relative paths resolve against the **repo root** (not shell cwd); absolute and leading-`~` paths are honored verbatim. Per-repo sibling dirs keep each repo's worktrees from pooling into one shared dir. |
|
|
47
|
+
| **Anchor** | `{milestone-id}-{session}` (e.g. `m-9-a1b2c3d4`). For a manual stream worktree with no session, the milestone/stream id alone is acceptable (`m-PLUG01`). |
|
|
48
|
+
| **Path** | `{worktree_root}/{anchor}` — the resolved **absolute** path. |
|
|
49
|
+
| **Branch** | `forge/{anchor}`. |
|
|
50
|
+
|
|
51
|
+
**Recorded path is authoritative once set.** When a worktree is created through `orchestrating`, the resolved absolute path is recorded in `lifecycle.worktree_path` (in `state/milestone-{id}.yml`) or in a stream's `runtime.worktree`, and every later operation reads it verbatim — never re-derives. Changing `orchestration.worktree_root` later only affects **new** worktrees; live ones keep working off their recorded path. Move a live worktree only with `git worktree move` (a bare `mv` strips the gitdir pointer), then update the recorded path.
|
|
52
|
+
|
|
53
|
+
**Fallback when no path was recorded.** A worktree created outside `orchestrating` (a manual `git worktree add`, an adopted stream) may have no recorded path. Resolve it from this convention — `{worktree_root}/{anchor}` — rather than assuming the experimental skill's internal default. Chief/Streams uses this fallback; `orchestrating` (when installed) implements the same scheme for the worktrees it creates.
|
|
54
|
+
|
|
22
55
|
## Workflow Tiers
|
|
23
56
|
|
|
24
57
|
Auto-detects complexity. Override: "Use Quick/Standard/Full tier."
|
|
@@ -60,7 +93,7 @@ Auto-detects complexity. Override: "Use Quick/Standard/Full tier."
|
|
|
60
93
|
| Systematic debugging | `debugging` | When stuck |
|
|
61
94
|
| Upgrade Forge files | `upgrading` | On-demand |
|
|
62
95
|
| Cross-session memory | `beads-integration` | When Beads installed |
|
|
63
|
-
| Multi-agent
|
|
96
|
+
| Multi-agent backend (experimental) | `orchestrating` | Optional, usually selected by Chief/Streams |
|
|
64
97
|
|
|
65
98
|
> Experimental skills require opt-in install — see `packages/create-forge/experimental/m10/README.md`.
|
|
66
99
|
|
|
@@ -73,7 +106,25 @@ Auto-detects complexity. Override: "Use Quick/Standard/Full tier."
|
|
|
73
106
|
| `requirements/m{N}.yml` | 50 KB/file | Prevents scope creep |
|
|
74
107
|
| `plan.md` | 30 KB | Keeps executor context <50% |
|
|
75
108
|
| `constitution.md` | 10 KB | Gates must be scannable |
|
|
109
|
+
| `context.md` | 12 KB | Active decisions only; history archives to `context-archive.md` |
|
|
76
110
|
| `refactor-backlog.yml` | 150 KB | Working backlog stays scannable; terminal items archive to `refactor-backlog-archive.yml` (advisory — flags, never blocks) |
|
|
111
|
+
| `streams/active.yml` | 20 KB | Project Chief traffic map must stay cheap to load |
|
|
112
|
+
| `streams/{stream}.yml` | 15 KB | Stream state stays resumable without becoming history |
|
|
113
|
+
| `streams/{stream}/brief.md` | 8 KB | Stream context packet must fit into active session context |
|
|
114
|
+
| `streams/{stream}/packages/{id}.yml` | 10 KB | Delegated work contract stays bounded |
|
|
115
|
+
|
|
116
|
+
### Accumulating Artifacts
|
|
117
|
+
|
|
118
|
+
Every new accumulating artifact needs: owner, size gate, archive/compaction rule,
|
|
119
|
+
`derived` vs source-of-truth status, and migration behavior. Defaults:
|
|
120
|
+
|
|
121
|
+
- `roadmap.yml`, `requirements/*.yml`, `releases.yml` are source-of-truth; load
|
|
122
|
+
scoped slices, not whole history.
|
|
123
|
+
- `phases/`, `audits/`, `research/`, `archive/`, and `context-archive.md` are
|
|
124
|
+
historical; load only by milestone/stream/package/version.
|
|
125
|
+
- Runtime/generated files (`.mcp-server/*.db*`, logs, spike DBs) are excluded
|
|
126
|
+
from framework context and packages unless debugging them.
|
|
127
|
+
- Template copies sync mechanically; do not treat them as separate concepts.
|
|
77
128
|
|
|
78
129
|
### Fresh Agent Pattern
|
|
79
130
|
Task touches 20+ files or complex subsystem → spawn fresh executor with isolated context. Prevents context rot.
|
|
@@ -82,7 +133,9 @@ Task touches 20+ files or complex subsystem → spawn fresh executor with isolat
|
|
|
82
133
|
Each phase writes outputs to `.forge/` before completing. At phase boundaries, recommend `/clear`. Next phase loads from disk. Advisory — skip for short phases under 40% context.
|
|
83
134
|
|
|
84
135
|
### Lazy Loading
|
|
85
|
-
Skills load only when invoked.
|
|
136
|
+
Skills load only when invoked. Active context is `.forge/context.md`; consult
|
|
137
|
+
`.forge/context-archive.md` only when older decisions matter. Skill details stay
|
|
138
|
+
on demand. Base context ~300 lines.
|
|
86
139
|
|
|
87
140
|
## Model Routing
|
|
88
141
|
|
|
@@ -136,7 +189,12 @@ State lives in `.forge/`:
|
|
|
136
189
|
- `state/index.yml` — DERIVED registry rolled up from milestone files (id, name, status, last_updated). Never hand-edited; never written by worktree agents.
|
|
137
190
|
- `state/milestone-{id}.yml` — Per-milestone cursor (single source of truth): position, progress, decisions, blockers. One owner at a time.
|
|
138
191
|
- `state/desire-paths/` — Append-only framework-usage observations, one file per observation. Occurrence counts derived by globbing (no mutable counter). Each carries `scope: project | framework` (set at capture; absent ⇒ project). **`forge` boot is the single review owner**: at 3+ occurrences it surfaces a concrete fix from the co-located suggestion table, persists declines to `declined/` (no re-nag), and for `scope: framework` signals routes them upstream — a portable block to `upstream/` plus a `gh issue` offer against `forge.upstream_repo`. This closes Principle 7's capture→act loop; `verifying` captures but no longer surfaces. See [ADR-012](../docs/decisions/ADR-012-upstream-desire-path-feedback-channel.md).
|
|
139
|
-
- `context.md` —
|
|
192
|
+
- `context.md` — Active locked decisions + deferred ideas (target <=12KB)
|
|
193
|
+
- `context-archive.md` — Historical locked decisions; load only when relevant
|
|
194
|
+
- `streams/active.yml` — Compact Project Chief traffic map: active stream summaries only.
|
|
195
|
+
- `streams/{stream}.yml` — Per-stream state: lifecycle, ownership, shared surfaces, blockers, merge readiness.
|
|
196
|
+
- `streams/{stream}/brief.md` — Human-readable stream context packet loaded when resuming that stream.
|
|
197
|
+
- `streams/{stream}/packages/{id}.yml` — Work package contract for delegated workers or manual sessions.
|
|
140
198
|
- `research/milestone-{id}.md` — Research findings snapshot (dated, immutable)
|
|
141
199
|
- `phases/milestone-{id}/{phase}-{name}/plan-{NN}.md` — Task plans with must_haves frontmatter (`{id}`=milestone, `{phase}`=phase# preserved verbatim, `{name}`=kebab, `{NN}`=seq)
|
|
142
200
|
- `refactor-backlog.yml` — Refactoring catalog (actionable items only), worked via quick-tasking. Canonical status vocab: `pending | in_progress | done | dismissed | deferred`. Terminal items auto-archive on the next reviewing/quick-tasking write (compaction-on-write).
|
|
@@ -162,31 +220,22 @@ State-sync commits are separate from per-task code commits (which stay atomic du
|
|
|
162
220
|
|
|
163
221
|
### State Ownership (multi-worktree safety)
|
|
164
222
|
|
|
165
|
-
`.forge/` is
|
|
166
|
-
|
|
167
|
-
**Every `.forge/` artifact falls into one of five sharing classes.** The class determines the write rule across worktrees:
|
|
223
|
+
`.forge/` is code-like: it branches with the repo, syncs via git, and commits
|
|
224
|
+
with the work it describes. Every artifact has a sharing class:
|
|
168
225
|
|
|
169
226
|
| Class | Files | Write rule |
|
|
170
227
|
|---|---|---|
|
|
171
228
|
| **Single-owner mutable** | `state/milestone-{id}.yml`, `phases/milestone-{id}/`, `research/milestone-{id}.md` | Exactly one writer at a time — the worktree (or main session) currently driving that milestone. **Other worktrees never touch it**, not even to read-then-write — they pull from main if they need it. |
|
|
172
229
|
| **Derived** | `state/index.yml` | Never hand-edited. Regenerated by Rollup 1.0 from `milestone-*.yml`. Only the main/orchestrator session runs rollup. |
|
|
173
230
|
| **Append-only shared** | `releases.yml` (version reservations), `state/desire-paths/*` (one file per observation) | Many writers OK; structure prevents collision. `releases.yml` uses the Version Reservation Protocol (append + commit + push before depending on the slot); desire-paths use distinct filenames so two writers never touch the same file. |
|
|
174
|
-
| **Shared mutable** | `context.md`, `refactor-backlog.yml`, `requirements/m{N}.yml` (ID space `FR-`/`DEF-`/`NFR-` is globally shared even though each milestone owns its file) |
|
|
231
|
+
| **Shared mutable** | `context.md`, `refactor-backlog.yml`, `requirements/m{N}.yml` (ID space `FR-`/`DEF-`/`NFR-` is globally shared even though each milestone owns its file) | Write only to your milestone/stream block. Within a block, append-only; strike through instead of rewriting. |
|
|
175
232
|
| **Stable shared** | `project.yml`, `constitution.md`, `design-system.md`, `roadmap.yml`, `FORGE.md` | Rarely changes after init. Canonical on main. Worktrees lag and pull on rebase. No special protocol — git handles it because the conflict surface is tiny. |
|
|
176
233
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
-
|
|
182
|
-
|
|
183
|
-
**Why not global `.forge/`?** A common instinct is "make `.forge/` shared so context propagates automatically." It breaks four load-bearing invariants:
|
|
184
|
-
1. **Decisions are contracts** — they're versioned with the code they govern; severing them from branches breaks the contract.
|
|
185
|
-
2. **State survives machine loss** — the multi-laptop pull-from-any-clone story depends on `.forge/` being in git.
|
|
186
|
-
3. **History time-travel** — `git checkout` an old commit and you see the plan/decisions as they were; global state makes that impossible.
|
|
187
|
-
4. **Git is the concurrency detector** — without it, two sessions writing the same field becomes silent last-write-wins.
|
|
188
|
-
|
|
189
|
-
Per-worktree `.forge/` with a sharing taxonomy is the model. See [ADR-011](../docs/decisions/ADR-011-shared-state-taxonomy.md) for the longer version.
|
|
234
|
+
Cross-tree edits land on the current branch and are invisible to other worktrees
|
|
235
|
+
until they pull/rebase. `forge` surfaces live worktrees at boot; `discussing`
|
|
236
|
+
and `reviewing` warn before touching shared-mutable blocks; optional
|
|
237
|
+
`forge.worktree_rebase_check` detects stale shared files inside worktrees. See
|
|
238
|
+
[ADR-011](../docs/decisions/ADR-011-shared-state-taxonomy.md) for rationale.
|
|
190
239
|
|
|
191
240
|
### State Ownership rules (quick reference)
|
|
192
241
|
|
|
@@ -194,7 +243,7 @@ Per-worktree `.forge/` with a sharing taxonomy is the model. See [ADR-011](../do
|
|
|
194
243
|
- Worktree / parallel agents write **only** their own milestone file and **append** desire-path files. They **never** write `index.yml`.
|
|
195
244
|
- `index.yml` is **regenerated by rollup** (read every `milestone-*.yml` → rewrite the registry) by the main/orchestrator session — on `forge` resume and at `orchestrating` teardown. The rollup is deterministic + idempotent, so it **is** the reconcile step — never a hand-merge.
|
|
196
245
|
- For shared-mutable files: write only your milestone's block; within a block, append-only (strike through, don't rewrite).
|
|
197
|
-
- Same-milestone parallel work
|
|
246
|
+
- Same-milestone parallel work needs Chief/Streams contracts; M10 file claims are optional defense-in-depth.
|
|
198
247
|
|
|
199
248
|
### Version Reservation Protocol
|
|
200
249
|
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Migration Guide: Chief/Streams (Forge 0.32.0)
|
|
2
|
+
|
|
3
|
+
Adds Project Chief / Streams support to existing Forge projects. This migration
|
|
4
|
+
installs framework-owned stream templates and adapter routing, and offers active
|
|
5
|
+
context compaction. It must never overwrite user-owned runtime stream state in
|
|
6
|
+
`.forge/streams/`.
|
|
7
|
+
|
|
8
|
+
## Prerequisites
|
|
9
|
+
|
|
10
|
+
1. Upgrade framework files first so this guide and the new templates are present.
|
|
11
|
+
2. Commit or stash unrelated work.
|
|
12
|
+
3. If `.forge/streams/` already exists, treat it as user state and preserve it.
|
|
13
|
+
|
|
14
|
+
## Detection
|
|
15
|
+
|
|
16
|
+
Prints `MIGRATE` when stream templates, Chief routing, active-context
|
|
17
|
+
compaction support, or active M10 adoption appears missing. Silent + exit 0
|
|
18
|
+
means no migration needed.
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
need=0
|
|
22
|
+
|
|
23
|
+
for f in \
|
|
24
|
+
.forge/templates/streams/active.yml \
|
|
25
|
+
.forge/templates/streams/stream.yml \
|
|
26
|
+
.forge/templates/streams/brief.md \
|
|
27
|
+
.forge/templates/streams/work-package.yml
|
|
28
|
+
do
|
|
29
|
+
[ -f "$f" ] || need=1
|
|
30
|
+
done
|
|
31
|
+
|
|
32
|
+
if [ -f .claude/skills/forge/SKILL.md ] && ! grep -q 'chief-of-staff' .claude/skills/forge/SKILL.md; then
|
|
33
|
+
need=1
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
if [ -f .claude/skills/chief-of-staff/SKILL.md ]; then
|
|
37
|
+
:
|
|
38
|
+
else
|
|
39
|
+
need=1
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
if [ -f .forge/context.md ] && [ ! -f .forge/context-archive.md ]; then
|
|
43
|
+
bytes=$(wc -c < .forge/context.md | tr -d ' ')
|
|
44
|
+
[ "$bytes" -gt 12288 ] && need=1
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
if [ ! -f .forge/streams/active.yml ] && grep -R "worktree_mode: \\(active\\|degraded\\)" .forge/state/milestone-*.yml >/dev/null 2>&1; then
|
|
48
|
+
need=1
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
if [ "$need" -eq 1 ]; then
|
|
52
|
+
echo "MIGRATE - Chief/Streams templates, routing, context compaction, or M10 adoption missing"
|
|
53
|
+
fi
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Migration Steps
|
|
57
|
+
|
|
58
|
+
### 1. Add Stream Templates
|
|
59
|
+
|
|
60
|
+
Copy the framework-owned templates from the upgraded Forge source into:
|
|
61
|
+
|
|
62
|
+
- `.forge/templates/streams/active.yml`
|
|
63
|
+
- `.forge/templates/streams/stream.yml`
|
|
64
|
+
- `.forge/templates/streams/brief.md`
|
|
65
|
+
- `.forge/templates/streams/work-package.yml`
|
|
66
|
+
|
|
67
|
+
Create parent directories if needed. Do not copy anything into `.forge/streams/`
|
|
68
|
+
unless the user explicitly asks to instantiate a real stream.
|
|
69
|
+
|
|
70
|
+
### 2. Add Chief Skill And Routing
|
|
71
|
+
|
|
72
|
+
Copy the Chief skill into the platform adapter used by the project:
|
|
73
|
+
|
|
74
|
+
- Claude adapter: `.claude/skills/chief-of-staff/SKILL.md`
|
|
75
|
+
- Codex/AGENTS adapter, if present in that project: `.agents/skills/chief-of-staff/SKILL.md`
|
|
76
|
+
|
|
77
|
+
Update the Forge entry skill for the active adapter so stream intents route to
|
|
78
|
+
Chief before tier detection. Required intent examples:
|
|
79
|
+
|
|
80
|
+
- `show streams`
|
|
81
|
+
- `start stream`
|
|
82
|
+
- `pause stream`
|
|
83
|
+
- `resume stream`
|
|
84
|
+
- `delegate stream`
|
|
85
|
+
- `sync streams`
|
|
86
|
+
- `detect conflicts`
|
|
87
|
+
- `merge safe`
|
|
88
|
+
- `close stream`
|
|
89
|
+
- `Chief of Staff`
|
|
90
|
+
|
|
91
|
+
### 3. Preserve Runtime State
|
|
92
|
+
|
|
93
|
+
If `.forge/streams/` already exists, inspect it but never overwrite it. Runtime
|
|
94
|
+
stream files are user/project state, not framework templates. If a runtime file
|
|
95
|
+
is missing a field, add it only after showing the diff to the user.
|
|
96
|
+
|
|
97
|
+
### 4. Adopt Existing M10 Worktrees When Present
|
|
98
|
+
|
|
99
|
+
If `.forge/state/milestone-*.yml` contains `lifecycle.worktree_mode: active` or
|
|
100
|
+
`degraded`, adopt those M10 sessions as streams. Do not teardown, merge, rebase,
|
|
101
|
+
remove, or rename existing worktrees as part of migration.
|
|
102
|
+
|
|
103
|
+
For each active M10 worktree:
|
|
104
|
+
|
|
105
|
+
1. Read the milestone state and `git worktree list --porcelain`.
|
|
106
|
+
2. Create or update `.forge/streams/active.yml`.
|
|
107
|
+
3. Create or update:
|
|
108
|
+
- `.forge/streams/{stream-id}.yml`
|
|
109
|
+
- `.forge/streams/{stream-id}/brief.md`
|
|
110
|
+
- `.forge/streams/{stream-id}/packages/`
|
|
111
|
+
4. Map existing M10 fields into stream state:
|
|
112
|
+
- `lifecycle.worktree_path` -> `runtime.worktree`
|
|
113
|
+
- `lifecycle.worktree_branch` -> `runtime.branch`
|
|
114
|
+
- `lifecycle.session_id` / `claim_session_id` -> `runtime.worker_sessions`
|
|
115
|
+
- milestone id/name/status/phase -> stream goal, context, and brief
|
|
116
|
+
5. Leave ownership surfaces empty if unknown and mark them as needing
|
|
117
|
+
declaration. Missing ownership should surface as a conflict to resolve after
|
|
118
|
+
adoption; it should not block adoption.
|
|
119
|
+
6. Ask before setting `orchestration.auto: false` in `.forge/project.yml`.
|
|
120
|
+
Turning it off makes Chief/Streams the front door while keeping M10 available
|
|
121
|
+
as an optional backend.
|
|
122
|
+
|
|
123
|
+
Adoption is idempotent: if a stream already references the same worktree path or
|
|
124
|
+
branch, update that stream's summary/brief instead of creating a duplicate.
|
|
125
|
+
|
|
126
|
+
### 5. Compact Active Context When Needed
|
|
127
|
+
|
|
128
|
+
If `.forge/context.md` is over 12 KB and `.forge/context-archive.md` is missing:
|
|
129
|
+
|
|
130
|
+
1. Copy the original `.forge/context.md` to `.forge/context-archive.md`.
|
|
131
|
+
2. Keep current/open decisions, Deferred Ideas, Needs Resolution, and Amendment
|
|
132
|
+
Log in `.forge/context.md`.
|
|
133
|
+
3. Move completed historical milestone decision blocks into the archive.
|
|
134
|
+
4. Add a pointer in active context to `.forge/context-archive.md`.
|
|
135
|
+
|
|
136
|
+
This step must preserve decision text losslessly.
|
|
137
|
+
|
|
138
|
+
### 6. Confirm M10 Positioning
|
|
139
|
+
|
|
140
|
+
If the project has M10 installed, keep worktree and merge safety instructions.
|
|
141
|
+
Update wording so Chief/Streams is the user-facing orchestration model and M10
|
|
142
|
+
is an optional backend for worktree isolation, merge queue support, and optional
|
|
143
|
+
file claims.
|
|
144
|
+
|
|
145
|
+
## Validation
|
|
146
|
+
|
|
147
|
+
- Stream templates exist under `.forge/templates/streams/`.
|
|
148
|
+
- Chief skill exists in the active platform adapter.
|
|
149
|
+
- Forge routing mentions `chief-of-staff`, `show streams`, `start stream`, and
|
|
150
|
+
`merge safe`.
|
|
151
|
+
- `.forge/streams/` runtime state is unchanged unless the user approved a
|
|
152
|
+
specific migration of a runtime stream file.
|
|
153
|
+
- Existing active/degraded M10 worktrees, if any, are represented in
|
|
154
|
+
`.forge/streams/active.yml` and per-stream files without teardown.
|
|
155
|
+
- If context compaction ran, `.forge/context-archive.md` contains historical
|
|
156
|
+
decisions and `.forge/context.md` is under 12 KB.
|
|
157
|
+
- Running detection a second time is idempotent and prints no `MIGRATE` once the
|
|
158
|
+
project has templates, routing, Chief skill, compacted context, and adopted
|
|
159
|
+
active M10 worktrees.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Migration Guide: Chief Front Door (Forge 0.32.1)
|
|
2
|
+
|
|
3
|
+
Forge 0.32.0 introduced Project Chief / Streams and could adopt active M10
|
|
4
|
+
worktrees as streams, but the migration guide only asked whether to set
|
|
5
|
+
`orchestration.auto: false`. If that decision was skipped, a project could have
|
|
6
|
+
adopted streams while legacy M10 auto-routing still acted as the default front
|
|
7
|
+
door.
|
|
8
|
+
|
|
9
|
+
This migration detects that ambiguous state and asks the operator to choose.
|
|
10
|
+
|
|
11
|
+
## Detection
|
|
12
|
+
|
|
13
|
+
Prints `MIGRATE` when a project has adopted worktree-backed streams but has not
|
|
14
|
+
explicitly opted out of legacy M10 auto-routing. Silent + exit 0 means no
|
|
15
|
+
migration needed.
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
[ -f .forge/streams/active.yml ] || exit 0
|
|
19
|
+
|
|
20
|
+
if grep -qE '^[[:space:]]+worktree:[[:space:]]*"?[^"[:space:]]+' .forge/streams/active.yml .forge/streams/*.yml 2>/dev/null; then
|
|
21
|
+
if ! awk '
|
|
22
|
+
/^orchestration:[[:space:]]*$/ { in_block=1; next }
|
|
23
|
+
/^[^[:space:]#][^:]*:/ { in_block=0 }
|
|
24
|
+
in_block && /^[[:space:]]+auto:[[:space:]]*false[[:space:]]*(#.*)?$/ { found=1 }
|
|
25
|
+
END { exit found ? 0 : 1 }
|
|
26
|
+
' .forge/project.yml 2>/dev/null; then
|
|
27
|
+
echo "MIGRATE - adopted Chief streams still have legacy orchestration.auto enabled or unset"
|
|
28
|
+
fi
|
|
29
|
+
fi
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Migration Steps
|
|
33
|
+
|
|
34
|
+
1. Show the operator the current active streams:
|
|
35
|
+
- `.forge/streams/active.yml`
|
|
36
|
+
- any stream whose `runtime.worktree` or registry `worktree` points at a live
|
|
37
|
+
Forge worktree
|
|
38
|
+
2. Explain the choice:
|
|
39
|
+
- `orchestration.auto: false` makes Chief/Streams the front door.
|
|
40
|
+
- M10 remains available when the Chief explicitly chooses worktree isolation
|
|
41
|
+
or the user explicitly asks for multi-agent/worktree mode.
|
|
42
|
+
- Leaving auto-routing enabled preserves legacy behavior where Standard/Full
|
|
43
|
+
`/forge` work can route straight to `orchestrating`.
|
|
44
|
+
3. Ask: `Make Chief/Streams the front door now? (yes/no)`
|
|
45
|
+
4. If yes, update `.forge/project.yml` in place:
|
|
46
|
+
|
|
47
|
+
```yaml
|
|
48
|
+
orchestration:
|
|
49
|
+
auto: false
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
If an `orchestration:` block already exists, add or update only its `auto` key.
|
|
53
|
+
Do not modify other project settings.
|
|
54
|
+
|
|
55
|
+
If no, record the operator's decision in the upgrade report. Do not edit
|
|
56
|
+
`.forge/project.yml`.
|
|
57
|
+
|
|
58
|
+
## Validation
|
|
59
|
+
|
|
60
|
+
- `.forge/project.yml` contains `orchestration.auto: false` when the operator
|
|
61
|
+
chose Chief/Streams as the front door.
|
|
62
|
+
- `.forge/streams/active.yml` and per-stream runtime files were not overwritten.
|
|
63
|
+
- Explicit M10 use still works through Chief-selected or user-requested
|
|
64
|
+
orchestration.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Migration Guide: Worktree convention promoted to base (Forge 0.33.0)
|
|
2
|
+
|
|
3
|
+
Applies to projects that installed the experimental M10 `orchestrating` skill
|
|
4
|
+
(`.claude/skills/orchestrating/`). Projects without M10 have nothing to migrate.
|
|
5
|
+
|
|
6
|
+
0.33.0 closes a silent-freeze class (issues
|
|
7
|
+
[#5](https://github.com/Attuned-Media/forge/issues/5) /
|
|
8
|
+
[#6](https://github.com/Attuned-Media/forge/issues/6)). Three things changed:
|
|
9
|
+
|
|
10
|
+
1. **The worktree path/naming/anchor convention is now base** — documented in
|
|
11
|
+
`FORGE.md` ("Worktree Convention"), so Chief/Streams has a fallback when a
|
|
12
|
+
worktree was created outside `orchestrating`, and the convention stays
|
|
13
|
+
upgrade-synced for every install regardless of the experimental skill (see
|
|
14
|
+
[ADR-010](../decisions/ADR-010-repo-scoped-worktree-root.md)).
|
|
15
|
+
2. **`upgrading` no longer blanket-skips experimental skills** — Step 3b now
|
|
16
|
+
diffs an installed experimental skill against its `experimental/*/source/`
|
|
17
|
+
origin and offers a preview/confirm re-sync.
|
|
18
|
+
3. **`chief-of-staff` gained an advisory Registry Drift Check** reconciling
|
|
19
|
+
`state/index.yml` against `streams/active.yml` (issue
|
|
20
|
+
[#4](https://github.com/Attuned-Media/forge/issues/4)). No on-disk migration —
|
|
21
|
+
it just runs on the next Show/Sync.
|
|
22
|
+
|
|
23
|
+
The only thing that needs migrating on disk is an `orchestrating` skill that was
|
|
24
|
+
**frozen before 0.28.0** and is therefore still pinned to the old shared
|
|
25
|
+
`../forge-worktrees/` root. Against a frozen skill the 0.28.0 migration was a
|
|
26
|
+
no-op, so new worktrees kept landing in the shared dir instead of the per-repo
|
|
27
|
+
`../<repo>-worktrees/`. This guide detects that and offers the re-sync that
|
|
28
|
+
0.28.0's "do nothing" note assumed had already happened.
|
|
29
|
+
|
|
30
|
+
## Prerequisites
|
|
31
|
+
|
|
32
|
+
1. On the new version's framework files (run `npx forge-orkes upgrade`, or the
|
|
33
|
+
`upgrading` skill against a local dev checkout, first).
|
|
34
|
+
2. Working tree clean or changes committed — the fix re-syncs one skill dir.
|
|
35
|
+
|
|
36
|
+
## Detection
|
|
37
|
+
|
|
38
|
+
Prints `MIGRATE` only when the experimental `orchestrating` skill is installed
|
|
39
|
+
**and** still pinned to the pre-0.28.0 shared worktree root (has `forge-worktrees`,
|
|
40
|
+
lacks `<repo>-worktrees`). Silent + exit 0 otherwise — not installed, or already
|
|
41
|
+
current. This is a **content** check, not a version-stamp check, because the
|
|
42
|
+
skill is experimental and `upgrading` never force-overwrites it (the very gap
|
|
43
|
+
this release closes).
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
S=.claude/skills/orchestrating/SKILL.md
|
|
47
|
+
[ -f "$S" ] || exit 0
|
|
48
|
+
if grep -q 'forge-worktrees' "$S" && ! grep -q '<repo>-worktrees' "$S"; then
|
|
49
|
+
echo "MIGRATE — experimental orchestrating skill is pinned to the pre-0.28.0 shared worktree root; re-sync it from experimental/m10"
|
|
50
|
+
fi
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Migration steps
|
|
54
|
+
|
|
55
|
+
### 1. Re-sync the experimental skill
|
|
56
|
+
|
|
57
|
+
Run the `upgrading` skill. Its new **Step 3b** detects the stale `orchestrating`
|
|
58
|
+
skill and offers a re-sync from `experimental/m10/source/skills/orchestrating/`.
|
|
59
|
+
Answer **yes** to update the skill's markdown to the current convention
|
|
60
|
+
(per-repo `../<repo>-worktrees/` default).
|
|
61
|
+
|
|
62
|
+
Equivalent by hand (from the project root, with a Forge source checkout at
|
|
63
|
+
`{source}`):
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
cp {source}/packages/create-forge/experimental/m10/source/skills/orchestrating/SKILL.md \
|
|
67
|
+
.claude/skills/orchestrating/SKILL.md
|
|
68
|
+
cp {source}/packages/create-forge/experimental/m10/source/skills/orchestrating/bootstrap-checks.md \
|
|
69
|
+
.claude/skills/orchestrating/bootstrap-checks.md 2>/dev/null || true
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 2. (If the release changed them) re-run the M10 installer for hooks/MCP
|
|
73
|
+
|
|
74
|
+
`upgrading` re-syncs only the skill markdown. If this release also changed M10
|
|
75
|
+
hooks or the MCP server, re-run `experimental/m10/install.sh`. For 0.33.0 it did
|
|
76
|
+
not — skill-only.
|
|
77
|
+
|
|
78
|
+
### 3. Leave live worktrees alone
|
|
79
|
+
|
|
80
|
+
Existing worktrees keep working off their recorded `lifecycle.worktree_path`.
|
|
81
|
+
Only **new** worktrees pick up the per-repo default. Do not relocate a live
|
|
82
|
+
worktree except via `git worktree move`.
|
|
83
|
+
|
|
84
|
+
<!-- The migration is NEVER auto-applied. In Claude Code it runs via the
|
|
85
|
+
`quick-tasking` skill, which the `upgrading` Step-7 prompt hands this guide to on
|
|
86
|
+
"yes". -->
|
|
87
|
+
|
|
88
|
+
## Validation
|
|
89
|
+
|
|
90
|
+
- `grep -c '<repo>-worktrees' .claude/skills/orchestrating/SKILL.md` returns ≥ 1
|
|
91
|
+
and `grep -c 'forge-worktrees' .claude/skills/orchestrating/SKILL.md` returns 0.
|
|
92
|
+
- `FORGE.md` contains a "Worktree Convention (base)" subsection.
|
|
93
|
+
- Start a new M10 milestone (or `git worktree add` manually) — the worktree
|
|
94
|
+
appears under `../<your-repo>-worktrees/`, not the shared `../forge-worktrees/`.
|
|
@@ -1,29 +1,109 @@
|
|
|
1
1
|
# Forge Release Registry — version reservations across concurrent milestones
|
|
2
2
|
#
|
|
3
3
|
# PURPOSE: remove the version number + CHANGELOG slot from per-milestone scope so
|
|
4
|
-
# two milestones running in parallel sessions never collide on
|
|
4
|
+
# two milestones running in parallel sessions never collide on `package.json`
|
|
5
5
|
# version or pick the same number. This is the coordination point both sessions
|
|
6
6
|
# read and append to.
|
|
7
7
|
#
|
|
8
8
|
# COMMITTED + APPEND-ONLY. Each milestone appends exactly ONE entry when it
|
|
9
9
|
# reserves its version (at planning, or at delivery if planning predates this
|
|
10
10
|
# file). Appending — never editing prior entries — is what keeps two sessions
|
|
11
|
-
# from conflicting: distinct lines, no contention.
|
|
12
|
-
#
|
|
11
|
+
# from conflicting: distinct lines, no contention. The registry is committed and
|
|
12
|
+
# pushed so a parallel session pulls and sees reservations already taken.
|
|
13
13
|
#
|
|
14
14
|
# RULE: the next free version = highest `version:` in this file, bumped by the
|
|
15
|
-
# change's semver level (capability = minor; fix/doc = patch
|
|
16
|
-
#
|
|
15
|
+
# change's semver level (capability = minor 0.x.0; fix/doc = patch 0.x.y; see the
|
|
16
|
+
# version-bump criteria in FORGE.md / project memory). Delivery NEVER writes a
|
|
17
|
+
# `package.json` version that is not reserved here first.
|
|
17
18
|
#
|
|
18
19
|
# RACE NOTE: reserve EARLY (at planning), commit + push the reservation BEFORE
|
|
19
|
-
# editing
|
|
20
|
-
# push rebases onto the first (append-only → no conflict) and re-
|
|
21
|
-
# take the next number.
|
|
20
|
+
# editing package.json. If two sessions reserve near-simultaneously, the second
|
|
21
|
+
# push rebases onto the first (append-only → no conflict) and must re-read max()
|
|
22
|
+
# and take the next number.
|
|
22
23
|
|
|
23
|
-
releases:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
releases:
|
|
25
|
+
- milestone: 12
|
|
26
|
+
version: "0.21.0"
|
|
27
|
+
bump: minor
|
|
28
|
+
reserved_at: "2026-06-12"
|
|
29
|
+
summary: "CLAUDE.md @import extraction (framework prose → .forge/FORGE.md)"
|
|
30
|
+
- milestone: 13
|
|
31
|
+
version: "0.20.0"
|
|
32
|
+
bump: minor
|
|
33
|
+
reserved_at: "2026-06-12"
|
|
34
|
+
summary: "Nested phase layout (phases/milestone-{id}/{phase}-{name}/)"
|
|
35
|
+
- milestone: 14
|
|
36
|
+
version: "0.22.0"
|
|
37
|
+
bump: minor
|
|
38
|
+
reserved_at: "2026-06-13"
|
|
39
|
+
summary: "Refactor-backlog compaction migration + lifecycle (archive terminal items, size gate, status-vocab enforcement)"
|
|
40
|
+
- milestone: 10
|
|
41
|
+
version: "0.23.0"
|
|
42
|
+
bump: minor
|
|
43
|
+
reserved_at: "2026-06-14"
|
|
44
|
+
summary: "M10 auto-routing — forge routes Standard/Full through orchestrating when installed (install = consent); orchestration.auto opt-out"
|
|
45
|
+
- milestone: 15
|
|
46
|
+
version: "0.24.0"
|
|
47
|
+
bump: minor
|
|
48
|
+
reserved_at: "2026-06-14"
|
|
49
|
+
summary: "Disconfirm-before-commit rigor: debugging Confirmation Gate (blind-spot check), architecting Platform & Goal Validation + option-space framing, discussing widen-before-narrowing, CLAUDE.md principle 8"
|
|
50
|
+
- milestone: 16
|
|
51
|
+
version: "0.25.0"
|
|
52
|
+
bump: minor
|
|
53
|
+
reserved_at: "2026-06-14"
|
|
54
|
+
summary: "Worktree branch anchor in forge milestone selection — git branch deterministically selects the milestone (exact lifecycle.worktree_branch match, or milestone-id token in branch name) before the timestamp default; deferred/complete matches surface instead of auto-resuming"
|
|
55
|
+
- milestone: 16
|
|
56
|
+
version: "0.26.0"
|
|
57
|
+
bump: minor
|
|
58
|
+
reserved_at: "2026-06-14"
|
|
59
|
+
summary: "Milestone-anchored worktree naming in orchestrating — worktree dir + branch become forge/m-{id}-{session_id} (was forge/{uuid}), adds lifecycle.worktree_anchor. Makes the 0.25.0 branch-anchor id-token fallback work for orch worktrees so a moved/stale-state worktree still resolves to its milestone off the branch name alone; uuid suffix keeps collision-resistance, forge/ prefix keeps GC sweep"
|
|
60
|
+
- milestone: 17
|
|
61
|
+
version: "0.27.0"
|
|
62
|
+
bump: minor
|
|
63
|
+
reserved_at: "2026-06-15"
|
|
64
|
+
summary: "Human Verification Gate — hard block on milestone close + orchestration teardown until an explicit human sign-off is recorded as current.human_verified in milestone state. Code-level PASS is necessary but never sufficient to close. Captured by verifying (post-verdict prompt), enforced at reviewing-complete + orchestrating Step 5.0; recorded-override (method: override) is the only bypass and is surfaced. New current.human_verified state field — lazy migration: absent = prompt on next close, already-complete milestones never re-gated."
|
|
65
|
+
- milestone: 18
|
|
66
|
+
version: "0.28.0"
|
|
67
|
+
bump: minor
|
|
68
|
+
reserved_at: "2026-06-15"
|
|
69
|
+
summary: "Configurable repo-scoped worktree root — orchestration.worktree_root defaults to ../<repo-name>-worktrees/ (was shared ../forge-worktrees/). Fixes cross-repo worktree mixing when multiple repos share a parent dir, fixes cwd-sensitive resolution (relative roots now resolve against repo root, not shell cwd), and folds a gitignore-guard for repos with fully-ignored .claude/ trees (initializing writes correct carve-out for greenfield; upgrading detects + warns for brownfield)"
|
|
70
|
+
- milestone: 19
|
|
71
|
+
version: "0.29.0"
|
|
72
|
+
bump: minor
|
|
73
|
+
reserved_at: "2026-06-15"
|
|
74
|
+
summary: "Shared-state taxonomy for multi-worktree Forge — FORGE.md State Ownership expanded to enumerate all 5 file-sharing classes (single-owner mutable, derived, append-only shared, shared mutable, stable shared) with the rule each follows. Promotes 'do not touch another worktree's state files' to explicit rule. Adds structural rule for context.md + refactor-backlog.yml (write only to your milestone block, within-block append-only). New `forge` boot worktree-liveness view (lists live Forge worktrees + their owning milestones in main). Cross-tree write warnings in discussing (context.md) + reviewing (refactor-backlog.yml). Opt-in worktree-side rebase check at boot (gated by forge.worktree_rebase_check). Triggered by the canvaz 2026-06-15 case: main-session edits to m9's context block were invisible to the m9 worktree."
|
|
75
|
+
- milestone: 20
|
|
76
|
+
version: "0.30.0"
|
|
77
|
+
bump: minor
|
|
78
|
+
reserved_at: "2026-06-16"
|
|
79
|
+
summary: "Upstream desire-path feedback channel (ADR-012) — closes the capture→act loop in Principle 7. (1) Plan-anchor re-derivation guard already landed (commit 5ddf3a1): executing re-derives plan literals against HEAD before the first task; planning makes anchors drift-resistant. (2) `scope: project|framework` field added to the desire-path schema, set at capture by verifying/executing/planning (lazy migration: absent⇒project). (3) Single review owner = forge boot — retires verifying's duplicate 'Surface Recommendations', co-locates the type→evolution suggestion table, adds a decline-ledger (declined/) so declines stop re-nagging, adds a Quick-tier review trigger in quick-tasking. (4) Tiered upstream transport for scope:framework signals: always write a portable block to state/desire-paths/upstream/; offer `gh issue create` against forge.upstream_repo (default github.com/zayneupton/forge) when gh present; upgrading harvests upstream/ into {source}/docs/desire-paths-inbox/. Optional forge.upstream_repo added to project.yml. Triggered by the canvaz plan-anchor-drift signal that could only reach the framework via manual chat copy-paste."
|
|
80
|
+
- milestone: 15
|
|
81
|
+
version: "0.31.0"
|
|
82
|
+
bump: minor
|
|
83
|
+
reserved_at: "2026-06-17"
|
|
84
|
+
summary: "Data-driven migration detection — replaces hardcoded per-version detection blocks (SKILL Step 7 + bin detectLegacyLayouts) with a single loop over synced .forge/migrations/{v}-*.md guides, ranged (installed, source]. New uniform Detection-block contract: echo `MIGRATE` on stdout when the migration applies, silent/exit-0 for no-op. All 7 guides normalized to it (0.28.0 consolidated to one `## Detection`; 0.29.0 stays an explicit in-range no-op). Removes the staleness class entirely — a new guide is auto-covered the moment it ships in the template, zero per-version code, and the install-run blind spot is fixed (detection keys off freshly-synced guides + pre-bump installed version). Triggered by ptnrkit 0.19.2→0.30.0 upgrade where bin was 4 versions behind and 2 real on-disk migrations (0.20.0, 0.22.0) reported 'needs manual review: 0'."
|
|
85
|
+
- milestone: 16
|
|
86
|
+
version: "0.32.0"
|
|
87
|
+
bump: minor
|
|
88
|
+
reserved_at: "2026-06-18"
|
|
89
|
+
summary: "Project Chief / Streams orchestration — adds Project/Stream/Work Package runtime layers, Chief of Staff routing, stream/work-package templates, active context compaction, framework-wide size audit, and an idempotent migration guide. M10 is repositioned as an optional backend for worktree isolation, merge queue support, and experimental file claims."
|
|
90
|
+
- milestone: 16
|
|
91
|
+
version: "0.32.1"
|
|
92
|
+
bump: patch
|
|
93
|
+
reserved_at: "2026-06-20"
|
|
94
|
+
summary: "Chief front-door follow-up — detects projects that adopted worktree-backed streams but left legacy orchestration.auto enabled or unset, then prompts to set orchestration.auto: false so Chief/Streams is the default entry point while M10 remains explicit."
|
|
95
|
+
- milestone: 16
|
|
96
|
+
version: "0.33.0"
|
|
97
|
+
bump: minor
|
|
98
|
+
reserved_at: "2026-06-21"
|
|
99
|
+
summary: "Worktree convention promoted to base + experimental-skill drift fix + Chief registry drift check (issues #4/#5/#6). (1) FORGE.md gains a base 'Worktree Convention' (path/anchor/branch + orchestration.worktree_root resolution + lifecycle.worktree_path authority) so Chief/Streams has a fallback when a worktree was created outside orchestrating, and the convention stays upgrade-synced regardless of the experimental skill. (2) upgrading no longer blanket-skips installed experimental skills — it diffs them against experimental/*/source and offers a preview/confirm re-sync (warn at minimum), closing the silent-freeze where base migrations (e.g. 0.28.0 worktree-root) became no-ops against a frozen orchestrating skill. (3) migration-guide template gains an authoring guard: guides whose behavior lives in an experimental skill must detect the skill's content, not just the version stamp. (4) chief-of-staff gains an advisory Registry Drift Check (Show + Sync) reconciling state/index.yml active milestones against streams/active.yml."
|
|
100
|
+
|
|
101
|
+
# Note on the 15 / 0.24.0 ordering: reserved as max(0.23.0)+minor. origin/main was
|
|
102
|
+
# already at 0.23.0 when this shipped (M10/M12/M13/M14 all merged), so 0.24.0 is a
|
|
103
|
+
# clean increment — no publish-order coordination needed. (Earlier draft of this
|
|
104
|
+
# release was built on a stale 0.19.2 base before a fetch corrected it.)
|
|
105
|
+
|
|
106
|
+
# Note on the 12/13 ordering: both reserved 2026-06-12. M13 holds the lower number
|
|
107
|
+
# (0.20.0) and M12 the higher (0.21.0) by explicit user decision — they ship in the
|
|
108
|
+
# same package release, M12 topping the version. max() here is 0.21.0, so the next
|
|
109
|
+
# milestone reserves 0.22.0 (minor) regardless of which milestone id is higher.
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Created during the discuss phase. This document is a contract between the user and all downstream agents.
|
|
4
4
|
|
|
5
|
+
Active context target: <= 12 KB. When completed historical milestone decision
|
|
6
|
+
blocks accumulate, copy them to `.forge/context-archive.md` and keep only
|
|
7
|
+
current/open decisions here.
|
|
8
|
+
|
|
5
9
|
**Rules:**
|
|
6
10
|
- **Locked Decisions** → MUST be implemented exactly as stated. No alternatives. No "better" solutions.
|
|
7
11
|
- **Deferred Ideas** → MUST NOT appear in plans, tasks, or code. Not even as TODOs.
|