space-architect 2.0.2 → 4.0.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.
@@ -27,12 +27,15 @@ pattern match), so the post-flight `git log` is what the loop actually trusts.
27
27
  If a lane committed, treat the worktree as tampered: reset and re-dispatch.
28
28
 
29
29
  **Preflight (once per environment):** run `claude --version`, and confirm the
30
- builder model resolves with a one-shot canary
30
+ builder model resolves with a one-shot
31
31
  (`echo ok | claude -p --model <builder-model> --max-turns 1`). No API key —
32
32
  the builder runs on your Claude plan — but note headless `claude -p` draws on
33
33
  the Agent SDK credit pool (separate from interactive usage since June 15 2026;
34
- see `docs/DESIGN.md` §4). On the first real dispatch in a new environment, launch
35
- ONE canary lane and confirm it starts cleanly before fanning anything out.
34
+ see `docs/DESIGN.md` §4). Past that one-time check, no dispatch needs a manual
35
+ start-check: every foreground dispatch self-verifies. Shortly after launch it
36
+ prints a liveness line to stderr naming the streamed model and confirming the
37
+ run log is growing — or a WARN line instead when the streamed model disagrees
38
+ with the pinned `<builder-model>` or the log isn't growing.
36
39
 
37
40
  ## Canonical dispatch — `architect dispatch <iteration> <lane>`
38
41
 
@@ -49,23 +52,30 @@ Write the lane's prompt to `build/<id>-<lane>/prompt.md` first (never pass a
49
52
  big prompt as a shell argument — shells mangle quotes), then:
50
53
 
51
54
  ```bash
52
- # single-lane iteration — run from the space root
55
+ # single-lane iteration — run from the space root; dispatch runs in the lane's
56
+ # provisioned worktree (materialized on demand from the frozen declaration)
53
57
  architect dispatch <iteration> <lane>
54
58
  ```
55
59
 
56
- For multi-lane iterations, create worktrees first (one per lane), then dispatch
57
- each lane from its worktree:
60
+ For multi-lane iterations, materialize every declared lane in one shot with
61
+ `architect provision`, then dispatch each lane from its worktree:
58
62
 
59
63
  ```bash
60
- # per lane:
61
- architect worktree add <repo> <iteration> <lane> [--base <repo-base>]
62
- architect dispatch <iteration> <lane>
64
+ architect provision <iteration> # all declared lanes: worktree + lane/<id>-<lane> branch
65
+ architect dispatch <iteration> lane-a # own background Bash call each
66
+ architect dispatch <iteration> lane-b
63
67
  ```
64
68
 
65
- `architect worktree add` creates `build/<id>-<lane>/wt` off the target repo's
66
- base commit (a repo commit — distinct from the freeze, which is a space
67
- commit), adds it with a `lane/<iteration>-<lane>` branch, and records it in
68
- `space.yaml`.
69
+ `architect provision` reads the frozen lane declarations from `space.yaml` and,
70
+ per lane, creates `build/<id>-<lane>/wt` off the resolved base (`--base`
71
+ override, else `project/<slug>` when it exists, else the repo's default branch —
72
+ a repo commit, distinct from the freeze, which is a space commit), adds it with a
73
+ `lane/<iteration>-<lane>` branch, and records it in `space.yaml`. It is
74
+ idempotent (`--lane <name>` provisions a single lane), and wraps the
75
+ `architect worktree add` primitive — still registered for edge cases, not a step
76
+ in the flow. `dispatch`, `integrate`, and `gate` also lazily materialize a lane
77
+ whose worktree is missing from its frozen declaration, so the flow can't
78
+ dead-end on a missing worktree.
69
79
 
70
80
  Issue each dispatch as its **own background Bash tool call** — one call per
71
81
  lane. Never use a shell `&` loop. A `for … & done` launcher is a *launcher*
@@ -112,7 +122,9 @@ lanes pass; the CLI does the git mechanics. Canonical path:
112
122
  architect integrate <iteration> --lanes <passing-set> # e.g. --lanes lane-a,lane-b
113
123
  architect gate <iteration> # integration smoke (raw output; verdict stays yours)
114
124
  architect integrate <iteration> --lanes <passing-set> --teardown # or remove worktrees + lane branches after
115
- architect land # end of project: prints gh pr create --base main --head project/<slug>
125
+ # end of project: landing is the architect's, not a CLI command — write the PR
126
+ # body to build/land/<repo>-pr-body.md yourself, then present the paste-and-run
127
+ # block (cd, git push -u origin project/<slug>, gh pr create) — see SKILL.md §6
116
128
  ```
117
129
 
118
130
  `architect integrate` commits each named lane on its branch and merges it
@@ -138,8 +150,8 @@ git -C repos/<repo> merge --no-ff lane/<iteration>-<lane>
138
150
  <run the gate commands> # integration smoke after every merge
139
151
  architect worktree remove <iteration> <lane>
140
152
  git -C repos/<repo> branch -d lane/<iteration>-<lane>
141
- # at project end:
142
- architect land # prints gh pr create --base main --head project/<slug>
153
+ # at project end there is no CLI step: the architect writes
154
+ # build/land/<repo>-pr-body.md and presents the push + gh pr create block
143
155
  ```
144
156
 
145
157
  ### Parallel + fast-follow
@@ -155,10 +167,12 @@ integrate without conflict.
155
167
  fast-follow lane's `--touch` set and exclude them from every parallel lane's
156
168
  touch-set — so the parallel set is disjoint by construction.
157
169
 
158
- 2. **Create worktrees and dispatch the parallel lanes** (off the repo base):
170
+ 2. **Provision and dispatch the parallel lanes** (off the repo base). Provision
171
+ only the parallel lanes by name — leave the fast-follow lane unmaterialized
172
+ until step 4, so it can root at the integrated tip:
159
173
  ```bash
160
- architect worktree add <repo> <iteration> lane-a
161
- architect worktree add <repo> <iteration> lane-b
174
+ architect provision <iteration> --lane lane-a
175
+ architect provision <iteration> --lane lane-b
162
176
  architect dispatch <iteration> lane-a # own background Bash call each
163
177
  architect dispatch <iteration> lane-b
164
178
  ```
@@ -170,11 +184,11 @@ integrate without conflict.
170
184
  architect gate <iteration>
171
185
  ```
172
186
 
173
- 4. **Create the fast-follow lane off the integrated tip.** `--base` accepts any
174
- git ref — passing `project/<slug>` roots the new worktree at the merged tip
175
- (the keystone move):
187
+ 4. **Provision the fast-follow lane off the integrated tip.** `--base` accepts
188
+ any git ref — passing `project/<slug>` roots the new worktree at the merged
189
+ tip (the keystone move); `--lane ff` provisions just that lane:
176
190
  ```bash
177
- architect worktree add <repo> <iteration> ff --base project/<slug>
191
+ architect provision <iteration> --lane ff --base project/<slug>
178
192
  architect dispatch <iteration> ff
179
193
  ```
180
194
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: space-architect
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Jacobs
@@ -240,6 +240,7 @@ files:
240
240
  - exe/src
241
241
  - lib/space_architect.rb
242
242
  - lib/space_architect/architect_project.rb
243
+ - lib/space_architect/bug_report.rb
243
244
  - lib/space_architect/cli.rb
244
245
  - lib/space_architect/cli/architect.rb
245
246
  - lib/space_architect/cli/research.rb
@@ -271,6 +272,7 @@ files:
271
272
  - lib/space_core/cli/helpers.rb
272
273
  - lib/space_core/cli/init.rb
273
274
  - lib/space_core/cli/list.rb
275
+ - lib/space_core/cli/loop_status.rb
274
276
  - lib/space_core/cli/new.rb
275
277
  - lib/space_core/cli/pack.rb
276
278
  - lib/space_core/cli/path.rb
@@ -281,6 +283,7 @@ files:
281
283
  - lib/space_core/cli/show.rb
282
284
  - lib/space_core/cli/status.rb
283
285
  - lib/space_core/cli/use.rb
286
+ - lib/space_core/commands.rb
284
287
  - lib/space_core/config.rb
285
288
  - lib/space_core/errors.rb
286
289
  - lib/space_core/git_client.rb
@@ -288,6 +291,7 @@ files:
288
291
  - lib/space_core/oci_builder.rb
289
292
  - lib/space_core/oci_packer.rb
290
293
  - lib/space_core/oci_runner.rb
294
+ - lib/space_core/paths.rb
291
295
  - lib/space_core/repo_reference.rb
292
296
  - lib/space_core/repo_resolver.rb
293
297
  - lib/space_core/shell_integration.rb