space-architect 3.0.0 → 5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +86 -0
- data/README.md +25 -8
- data/lib/space_architect/architect_project.rb +245 -54
- data/lib/space_architect/cli/architect.rb +158 -47
- data/lib/space_architect/harness.rb +63 -9
- data/lib/space_architect/templates/iteration.md.erb +15 -1
- data/lib/space_core/cli/help.rb +88 -18
- data/lib/space_core/cli/loop_status.rb +47 -0
- data/lib/space_core/cli/repeatable_options.rb +52 -43
- data/lib/space_core/cli/status.rb +54 -13
- data/lib/space_core/shell_integration.rb +1 -1
- data/lib/space_core/space.rb +51 -1
- data/lib/space_core/space_store.rb +1 -1
- data/lib/space_core/version.rb +1 -1
- data/lib/space_src/cli/clone.rb +0 -1
- data/lib/space_src/cli/config.rb +0 -1
- data/lib/space_src/cli/daemon.rb +0 -1
- data/lib/space_src/cli/org.rb +0 -1
- data/lib/space_src/cli/repo.rb +0 -1
- data/lib/space_src/cli/shell.rb +0 -1
- data/lib/space_src/cli/status.rb +0 -1
- data/lib/space_src/cli/sync.rb +0 -1
- data/lib/space_src/cli.rb +0 -1
- data/skill/architect/SKILL.md +63 -20
- data/skill/architect/dispatch.md +54 -32
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6846eab011f92f0b54a7bb886d7b97cf8c727beb3fc6d279a2db603062645520
|
|
4
|
+
data.tar.gz: 0bc8f0b22f785fd2d3ed77419a1ad3b6058e4b76a6aaee41b7a66793b865702a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 77216fd23779d4ee5ae16f3c141fc9f7670b3efc3c8b7fe31292c31284be0903616505c4199fbe4e5d7b12988d0638e7a31cba600a4625caad2b939255fc9370
|
|
7
|
+
data.tar.gz: ca1fb9e9bd1c20c6ef201d60f763cdcb87b18b9c289169ff601be6c858b0558f283986b2b24bb82cf73b4b1001c3ce0a9955bd02675557548fcc2e930aea27d2
|
data/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,92 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [5.0.0] - 2026-07-06
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **`architect dispatch --prompt <file>`** — the lane prompt is authored anywhere
|
|
13
|
+
(a fresh scratch file) and dispatch copies it byte-for-byte to the canonical
|
|
14
|
+
`build/<id>-<lane>/prompt.md` before launch, announcing the copy. The CLI owns
|
|
15
|
+
the canonical path; the architect never blind-writes it (#48, #42).
|
|
16
|
+
- **`architect brief new --from <file>` / `--stdin`** — write the authored brief
|
|
17
|
+
in one step instead of filling a pre-seeded template. Bare `brief new` still
|
|
18
|
+
scaffolds the placeholder, and now says so
|
|
19
|
+
(`Brief ready: … (template — Read it before editing)`).
|
|
20
|
+
- **Flexible commit messages on every committing loop command** — `init`, `new`,
|
|
21
|
+
`freeze`, `brief new`, `section`, `verdict`, `evidence`, `merge`, and
|
|
22
|
+
`integrate` all take `-m`/`--message` and `--message-from <file>`. The first
|
|
23
|
+
line completes the subject after a short canonical prefix (`I01 spec: <your
|
|
24
|
+
subject>`, `lane <lane>: <your subject>`); remaining lines become the commit
|
|
25
|
+
body. Without the flags, the canonical messages are unchanged. The space's git
|
|
26
|
+
log is the loop's durable memory — detailed bodies are the point.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- **`worktree add`/`provision` no longer pre-seed `prompt.md` with a placeholder
|
|
31
|
+
stub.** The unannounced stub made the architect's first `Write` trip the
|
|
32
|
+
harness read-before-write guard on every single lane (a failed-write → read →
|
|
33
|
+
rewrite round trip; 40 occurrences mined from real transcripts). Dispatch
|
|
34
|
+
still refuses a missing, empty, or legacy-stub prompt (#48, #42).
|
|
35
|
+
- **`architect merge --message` semantics** — the message now composes with the
|
|
36
|
+
canonical `lane <lane>:` prefix (subject + body) instead of replacing the
|
|
37
|
+
whole message, matching every other committing command.
|
|
38
|
+
- **Skill prose** — the architect authors all content (lane prompts, brief, PR
|
|
39
|
+
bodies) in fresh timestamped scratch files and hands them to the CLI via
|
|
40
|
+
`--from`/`--prompt`; PR bodies land at
|
|
41
|
+
`build/land/<repo>-pr-body-<yyyymmdd-hhmm>.md`; committing commands should
|
|
42
|
+
carry detailed `--message-from` bodies.
|
|
43
|
+
|
|
44
|
+
## [4.0.0] - 2026-07-05
|
|
45
|
+
|
|
46
|
+
Backfilled — the bump shipped without an entry. Five iterations run through the
|
|
47
|
+
Architect Loop against `space-architect`'s own live-loop papercuts (#46), plus
|
|
48
|
+
the `dispatched_at` producer (#45) and a test-suite hygiene pass (#32).
|
|
49
|
+
|
|
50
|
+
### Added
|
|
51
|
+
|
|
52
|
+
- **`architect provision <iteration> [--base <ref>] [--lane <name>]`** — materializes
|
|
53
|
+
every declared lane's worktree + `lane/<id>-<lane>` branch in one shot from the
|
|
54
|
+
frozen lane plan (idempotent; base resolves `--base`, else `project/<slug>` HEAD,
|
|
55
|
+
else the repo's default branch). `dispatch`/`integrate`/`gate`/`verify`
|
|
56
|
+
auto-materialize a missing worktree from the frozen declaration, so the flow
|
|
57
|
+
can't dead-end (#26).
|
|
58
|
+
- **Fenced ` ```lanes ` block in the Specification** — `name`, `repo`, `touch`
|
|
59
|
+
globs, parsed at **freeze** into `space.yaml` lane entries, making the lane plan
|
|
60
|
+
(including the out-of-bounds touch-set contract) part of the frozen spec (#26).
|
|
61
|
+
- **`space.yaml` schema v2** — the never-bumped `version` key now means something:
|
|
62
|
+
canonicalize on save, read + self-heal the two known v1 variants (v1a
|
|
63
|
+
`architect:`, v1b `project:`+`version: 1`) on load; a both-keys conflict refuses
|
|
64
|
+
and names both blocks rather than silently picking one (#33).
|
|
65
|
+
- **`dispatched_at` on lane entries** — every dispatch stamps an ISO 8601 launch
|
|
66
|
+
time after preflight, before the run, on both foreground and detached paths
|
|
67
|
+
(#18, producer landed via #45).
|
|
68
|
+
- **Self-verifying dispatch liveness** — a transient fiber inside dispatch checks
|
|
69
|
+
the launched run matches intent (model, growth of `run.jsonl`), retiring the
|
|
70
|
+
manual "canary" ceremony (#43, #44).
|
|
71
|
+
- **`architect help` grouped by loop phase** — Spec / Build / Judge / Land /
|
|
72
|
+
Project, commands in loop order, with an embedded loop-status block when run
|
|
73
|
+
inside a project space; `space status` reports on a bare call and still sets on
|
|
74
|
+
`space status <value>`.
|
|
75
|
+
|
|
76
|
+
### Changed
|
|
77
|
+
|
|
78
|
+
- **Lane declaration is single-source-of-truth** — lanes were declared twice
|
|
79
|
+
(Specification prose + `worktree add` flags) with the touch-set divorced from
|
|
80
|
+
the frozen spec; the ` ```lanes ` block at freeze is now the one declaration.
|
|
81
|
+
The single-lane "dispatch in the repo checkout" fast path is removed (it never
|
|
82
|
+
worked with `merge_lane!`); manual `worktree add` remains as the internal
|
|
83
|
+
primitive `provision` wraps (#26).
|
|
84
|
+
- **Skill prose** (`SKILL.md` §4–§6, `dispatch.md`) rewritten to the
|
|
85
|
+
declare → freeze → provision → dispatch lane lifecycle.
|
|
86
|
+
|
|
87
|
+
### Fixed
|
|
88
|
+
|
|
89
|
+
- **`architect integrate <it> --teardown`** (no `--lanes`) backtraced; teardown-only
|
|
90
|
+
mode now deletes per-lane branches and worktrees, never `project/<slug>` or
|
|
91
|
+
`main` (#30).
|
|
92
|
+
- **Test suite hygiene** — zero warnings, zero stray output, 58.8s → 49.1s (#32).
|
|
93
|
+
|
|
8
94
|
## [3.0.0] - 2026-07-01
|
|
9
95
|
|
|
10
96
|
### Added
|
data/README.md
CHANGED
|
@@ -102,7 +102,9 @@ space show 20260531-name-of-space
|
|
|
102
102
|
space path 20260531-name-of-space
|
|
103
103
|
space current # based on $PWD
|
|
104
104
|
space show # based on $PWD
|
|
105
|
-
space status
|
|
105
|
+
space status # report: metadata + loop status (based on $PWD)
|
|
106
|
+
space status 20260531-name-of-space # report another space
|
|
107
|
+
space status done # set: active | paused | done | archived
|
|
106
108
|
space status 20260531-name-of-space done
|
|
107
109
|
space config set default_provider github.com
|
|
108
110
|
space config set default_organization example-org
|
|
@@ -115,6 +117,12 @@ space use 20260531-name-of-space # records recent state, prints the
|
|
|
115
117
|
space ls --color=always # auto | always | never (--colors also accepted)
|
|
116
118
|
```
|
|
117
119
|
|
|
120
|
+
`space status` is **report-or-set**: with no status keyword (bare, or with just
|
|
121
|
+
a space id) it *reports* the space — its metadata plus a compact loop-status
|
|
122
|
+
block (project status, current iteration, derived state) when the space runs an
|
|
123
|
+
Architect project, quietly omitted otherwise; pass a status keyword (`active`,
|
|
124
|
+
`paused`, `done`, `archived`) to *set* it instead. 🔁
|
|
125
|
+
|
|
118
126
|
Repos are passed with a repeatable `-r` flag (`-r org/repo -r org/lib`); the
|
|
119
127
|
comma form (`-r a,b`) works too. Space ids are date-prefixed
|
|
120
128
|
(`20260531-name-of-space`) so they sort naturally, and duplicate names on the
|
|
@@ -263,8 +271,12 @@ build/
|
|
|
263
271
|
```
|
|
264
272
|
|
|
265
273
|
**Iteration file anatomy** — one file, grown section by section. You author the
|
|
266
|
-
*content
|
|
267
|
-
|
|
274
|
+
*content* in fresh scratch files; the CLI owns the *persistence* (each command
|
|
275
|
+
writes the section, commits it, and prints back what changed). Every committing
|
|
276
|
+
command takes `-m`/`--message` and `--message-from <file>` — your first line
|
|
277
|
+
completes the subject after a short canonical prefix (`I01 spec: <subject>`),
|
|
278
|
+
the rest becomes the body. The space's git log is the loop's durable memory:
|
|
279
|
+
write detailed messages.
|
|
268
280
|
|
|
269
281
|
| Section | Holds | How you persist it |
|
|
270
282
|
|---------|-------|--------------------|
|
|
@@ -291,12 +303,12 @@ inside a lane worktree are never grounded.
|
|
|
291
303
|
|
|
292
304
|
```sh
|
|
293
305
|
architect init # scaffold ARCHITECT.md + the space.yaml project: block + SessionStart hook
|
|
294
|
-
architect brief new
|
|
306
|
+
architect brief new --from <f> # write the durable project BRIEF.md (authored in a scratch file)
|
|
295
307
|
architect new <iteration> # scaffold architecture/I<NN>-<iteration>.md
|
|
296
|
-
architect section <it> <section> --from <f> # write + commit a section
|
|
308
|
+
architect section <it> <section> --from <f> # write + commit a section (add -m/--message-from for a detailed commit)
|
|
297
309
|
architect freeze <iteration> # freeze the Acceptance Criteria ❄️
|
|
298
310
|
architect worktree add <repo> <it> <lane> # isolated worktree per lane (2–4 lanes)
|
|
299
|
-
architect dispatch <it> <lane>
|
|
311
|
+
architect dispatch <it> <lane> --prompt <f> # copy the lane prompt in + dispatch a builder (--detach to survive long runs)
|
|
300
312
|
architect verify <iteration> # post-flight mechanical checks (reports only)
|
|
301
313
|
architect evidence <it> --lane <lane> # transcribe the builder's report verbatim
|
|
302
314
|
architect gate <iteration> # run the frozen gate commands, stream raw output
|
|
@@ -308,14 +320,19 @@ architect variant add|compare|promote … # competing (harness, model) lanes
|
|
|
308
320
|
architect research dispatch|status|wait … # parallel read-only research lanes (see below)
|
|
309
321
|
```
|
|
310
322
|
|
|
323
|
+
`architect help` (or bare `architect`, `architect --help`) lists these grouped by
|
|
324
|
+
loop phase — **Spec · Build · Judge · Land · Project · Groups**, in canonical
|
|
325
|
+
order — and, inside an architect space, ends with a compact loop-status block
|
|
326
|
+
(project status + current iteration) so you can see where you are in the loop. 🧭
|
|
327
|
+
|
|
311
328
|
A typical session:
|
|
312
329
|
|
|
313
330
|
```sh
|
|
314
331
|
architect init # first time
|
|
315
332
|
architect new my-feature # scaffold I01-my-feature.md
|
|
316
|
-
architect section my-feature specification --from spec.md
|
|
333
|
+
architect section my-feature specification --from spec.md -m "pull-based dispatcher seam"
|
|
317
334
|
architect freeze my-feature # lock it ❄️
|
|
318
|
-
architect dispatch my-feature lane-a --detach
|
|
335
|
+
architect dispatch my-feature lane-a --prompt tmp/prompts/I01-lane-a.md --detach # send a builder; poll the report
|
|
319
336
|
architect verify my-feature # mechanical post-flight checks
|
|
320
337
|
architect evidence my-feature --lane lane-a # transcribe raw evidence
|
|
321
338
|
architect gate my-feature # run the frozen gates yourself
|