space-architect 4.0.0 → 5.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb8f902d475bcc8a29e56740ce0c20328935fe05f9d919d38934b2cffd12e966
4
- data.tar.gz: e31c5b6f8ad98219c9c4ed22225666900bc7aaf8f43bd929ef32e2d2b5aacdf2
3
+ metadata.gz: '09d047544f9e1b3a29c56cc1e982a9624f72d45c2198429fcd7ab4564c31da41'
4
+ data.tar.gz: ea4e880ceda1c31ba11b390448d2380ca6d45d39394aeef2963c80a0e59a0901
5
5
  SHA512:
6
- metadata.gz: 5cbb47cbacf2231ed09eb74bfb11b80a1a6076bfde1427fe76a19b3581f3b3a8e38db4a6269307e339a022902723d73b1d40dd4b001acd6ffaab624871249d70
7
- data.tar.gz: 171913d786d1e166a279f72b184ec7987785d561ec795bfe161db9341502210f6d97166c3eb8b7a097b59adba7e435a575c78ca66488ca482312b4bc7cca7249
6
+ metadata.gz: 01d09d4cd267afe17f189606d3620bdfa284802c4ccd506a2526172864b85c1124b8096aa3a5ed3fe61cfc3f18929d0aeb8f00d7d9c6238dfdf331ce1e2f8048
7
+ data.tar.gz: 313a4cf3c9dc69d5cb82d5d8bb1b95fa5d133de711d9ab5e320145525abddff4aebe8fc89cf58e0552d83147fae79ce697b567dce5a8ac387313f5064f58bf2b
data/CHANGELOG.md CHANGED
@@ -5,6 +5,143 @@ 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.1.0] - 2026-07-19
9
+
10
+ ### Added
11
+
12
+ - **`architect integrate --into <branch>`** — merge a lane into a named branch
13
+ instead of the slug-derived `project/<slug>` default (#47). Outside-touch-set
14
+ conflict message gains an `--into` hint; inside-touch conflict keeps "spec
15
+ defect".
16
+ - **Conductor commit-mode** — `commit_mode: conductor` in `space.yaml` plus a
17
+ `--commit-mode` CLI flag on `verify`/`integrate`: canonical conductor commits
18
+ are classified as non-builder in the lane mechanical check, with canonical
19
+ message-shape matching (#55).
20
+ - **`architect sync` subcommand** (`--ff-only`, per-repo status) plus a
21
+ `ground` stale-repo WARNING with behind count and `--into` hint. **No
22
+ auto-sync** — the operator runs `sync` (#49).
23
+ - **`architect freeze --force` / `section --force`** — re-freeze an iteration
24
+ whose frozen region changed since the last freeze, or write a frozen section
25
+ after the freeze (pre-dispatch amend paths). Both refuse if any lane has
26
+ `dispatched_at` OR `integrate_sha` — moving `freeze_sha` or rewriting a frozen
27
+ section after a builder has run against the AC breaks the cardinal invariant
28
+ (AC freeze before results exist; judging quotes the freeze commit). The guard
29
+ names the offending lane and the reason.
30
+ - **`architect merge --into <branch>` / `--commit-mode <mode>`** — wires the
31
+ existing `merge_lane!` `into:`/`commit_mode:` kwargs through the `Merge` CLI,
32
+ matching `Integrate`'s surface.
33
+ - **`architect provision --force` / `worktree add --force`** — `worktree_add`
34
+ gains a `force: false` kwarg. When a worktree dir exists but is unknown to git
35
+ (stale, e.g. left by an aborted provision), `force: true` clears it via
36
+ `FileUtils.rm_rf` and re-creates; without `force` it still raises with a
37
+ `--force` hint so a genuine git-tracked dir is never silently destroyed.
38
+ `ensure_lane_materialized` (the auto-recovery path) stays non-force —
39
+ auto-recovery never silently `rm -rf`s; only an explicit operator `--force`.
40
+
41
+ ### Changed
42
+
43
+ - **`dir/**` in-bounds touch glob is now recursive** — matches
44
+ `Dir.glob('**/**')` semantics; single-star `*` stays non-recursive.
45
+ Deep-globbed files inside a lane's declared touch set are in-bounds; outside
46
+ is still a spec defect (#52, #54).
47
+ - **`dispatched_at` recorded in `space.yaml` at dispatch time** (#18).
48
+
49
+ ### Fixed
50
+
51
+ - **Canonical `section`/`freeze` commit message shape** — per-section commits
52
+ and the freeze commit carry the correct canonical prefix and body.
53
+ - **`space run --help` steers to the `--` separator** — a quoted multi-word
54
+ command otherwise arrives as one argv token → opaque in-guest failure; the
55
+ desc/argument/example now show the `--` form, with a subprocess test (#28).
56
+ - **Dropped a load-time "assigned but unused variable" warning** — `build_dir`
57
+ in `worktree_add` was computed but never read.
58
+
59
+ ## [5.0.0] - 2026-07-06
60
+
61
+ ### Added
62
+
63
+ - **`architect dispatch --prompt <file>`** — the lane prompt is authored anywhere
64
+ (a fresh scratch file) and dispatch copies it byte-for-byte to the canonical
65
+ `build/<id>-<lane>/prompt.md` before launch, announcing the copy. The CLI owns
66
+ the canonical path; the architect never blind-writes it (#48, #42).
67
+ - **`architect brief new --from <file>` / `--stdin`** — write the authored brief
68
+ in one step instead of filling a pre-seeded template. Bare `brief new` still
69
+ scaffolds the placeholder, and now says so
70
+ (`Brief ready: … (template — Read it before editing)`).
71
+ - **Flexible commit messages on every committing loop command** — `init`, `new`,
72
+ `freeze`, `brief new`, `section`, `verdict`, `evidence`, `merge`, and
73
+ `integrate` all take `-m`/`--message` and `--message-from <file>`. The first
74
+ line completes the subject after a short canonical prefix (`I01 spec: <your
75
+ subject>`, `lane <lane>: <your subject>`); remaining lines become the commit
76
+ body. Without the flags, the canonical messages are unchanged. The space's git
77
+ log is the loop's durable memory — detailed bodies are the point.
78
+
79
+ ### Changed
80
+
81
+ - **`worktree add`/`provision` no longer pre-seed `prompt.md` with a placeholder
82
+ stub.** The unannounced stub made the architect's first `Write` trip the
83
+ harness read-before-write guard on every single lane (a failed-write → read →
84
+ rewrite round trip; 40 occurrences mined from real transcripts). Dispatch
85
+ still refuses a missing, empty, or legacy-stub prompt (#48, #42).
86
+ - **`architect merge --message` semantics** — the message now composes with the
87
+ canonical `lane <lane>:` prefix (subject + body) instead of replacing the
88
+ whole message, matching every other committing command.
89
+ - **Skill prose** — the architect authors all content (lane prompts, brief, PR
90
+ bodies) in fresh timestamped scratch files and hands them to the CLI via
91
+ `--from`/`--prompt`; PR bodies land at
92
+ `build/land/<repo>-pr-body-<yyyymmdd-hhmm>.md`; committing commands should
93
+ carry detailed `--message-from` bodies.
94
+
95
+ ## [4.0.0] - 2026-07-05
96
+
97
+ Backfilled — the bump shipped without an entry. Five iterations run through the
98
+ Architect Loop against `space-architect`'s own live-loop papercuts (#46), plus
99
+ the `dispatched_at` producer (#45) and a test-suite hygiene pass (#32).
100
+
101
+ ### Added
102
+
103
+ - **`architect provision <iteration> [--base <ref>] [--lane <name>]`** — materializes
104
+ every declared lane's worktree + `lane/<id>-<lane>` branch in one shot from the
105
+ frozen lane plan (idempotent; base resolves `--base`, else `project/<slug>` HEAD,
106
+ else the repo's default branch). `dispatch`/`integrate`/`gate`/`verify`
107
+ auto-materialize a missing worktree from the frozen declaration, so the flow
108
+ can't dead-end (#26).
109
+ - **Fenced ` ```lanes ` block in the Specification** — `name`, `repo`, `touch`
110
+ globs, parsed at **freeze** into `space.yaml` lane entries, making the lane plan
111
+ (including the out-of-bounds touch-set contract) part of the frozen spec (#26).
112
+ - **`space.yaml` schema v2** — the never-bumped `version` key now means something:
113
+ canonicalize on save, read + self-heal the two known v1 variants (v1a
114
+ `architect:`, v1b `project:`+`version: 1`) on load; a both-keys conflict refuses
115
+ and names both blocks rather than silently picking one (#33).
116
+ - **`dispatched_at` on lane entries** — every dispatch stamps an ISO 8601 launch
117
+ time after preflight, before the run, on both foreground and detached paths
118
+ (#18, producer landed via #45).
119
+ - **Self-verifying dispatch liveness** — a transient fiber inside dispatch checks
120
+ the launched run matches intent (model, growth of `run.jsonl`), retiring the
121
+ manual "canary" ceremony (#43, #44).
122
+ - **`architect help` grouped by loop phase** — Spec / Build / Judge / Land /
123
+ Project, commands in loop order, with an embedded loop-status block when run
124
+ inside a project space; `space status` reports on a bare call and still sets on
125
+ `space status <value>`.
126
+
127
+ ### Changed
128
+
129
+ - **Lane declaration is single-source-of-truth** — lanes were declared twice
130
+ (Specification prose + `worktree add` flags) with the touch-set divorced from
131
+ the frozen spec; the ` ```lanes ` block at freeze is now the one declaration.
132
+ The single-lane "dispatch in the repo checkout" fast path is removed (it never
133
+ worked with `merge_lane!`); manual `worktree add` remains as the internal
134
+ primitive `provision` wraps (#26).
135
+ - **Skill prose** (`SKILL.md` §4–§6, `dispatch.md`) rewritten to the
136
+ declare → freeze → provision → dispatch lane lifecycle.
137
+
138
+ ### Fixed
139
+
140
+ - **`architect integrate <it> --teardown`** (no `--lanes`) backtraced; teardown-only
141
+ mode now deletes per-lane branches and worktrees, never `project/<slug>` or
142
+ `main` (#30).
143
+ - **Test suite hygiene** — zero warnings, zero stray output, 58.8s → 49.1s (#32).
144
+
8
145
  ## [3.0.0] - 2026-07-01
9
146
 
10
147
  ### Added
data/README.md CHANGED
@@ -271,8 +271,12 @@ build/
271
271
  ```
272
272
 
273
273
  **Iteration file anatomy** — one file, grown section by section. You author the
274
- *content*; the CLI owns the *persistence* (each command writes the section,
275
- commits it with the canonical message, and prints back what changed):
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.
276
280
 
277
281
  | Section | Holds | How you persist it |
278
282
  |---------|-------|--------------------|
@@ -299,12 +303,12 @@ inside a lane worktree are never grounded.
299
303
 
300
304
  ```sh
301
305
  architect init # scaffold ARCHITECT.md + the space.yaml project: block + SessionStart hook
302
- architect brief new # scaffold the durable project BRIEF.md
306
+ architect brief new --from <f> # write the durable project BRIEF.md (authored in a scratch file)
303
307
  architect new <iteration> # scaffold architecture/I<NN>-<iteration>.md
304
- 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)
305
309
  architect freeze <iteration> # freeze the Acceptance Criteria ❄️
306
310
  architect worktree add <repo> <it> <lane> # isolated worktree per lane (2–4 lanes)
307
- architect dispatch <it> <lane> # dispatch a builder (add --detach to survive long runs)
311
+ architect dispatch <it> <lane> --prompt <f> # copy the lane prompt in + dispatch a builder (--detach to survive long runs)
308
312
  architect verify <iteration> # post-flight mechanical checks (reports only)
309
313
  architect evidence <it> --lane <lane> # transcribe the builder's report verbatim
310
314
  architect gate <iteration> # run the frozen gate commands, stream raw output
@@ -326,9 +330,9 @@ A typical session:
326
330
  ```sh
327
331
  architect init # first time
328
332
  architect new my-feature # scaffold I01-my-feature.md
329
- architect section my-feature specification --from spec.md
333
+ architect section my-feature specification --from spec.md -m "pull-based dispatcher seam"
330
334
  architect freeze my-feature # lock it ❄️
331
- architect dispatch my-feature lane-a --detach # send a builder; poll the report
335
+ architect dispatch my-feature lane-a --prompt tmp/prompts/I01-lane-a.md --detach # send a builder; poll the report
332
336
  architect verify my-feature # mechanical post-flight checks
333
337
  architect evidence my-feature --lane lane-a # transcribe raw evidence
334
338
  architect gate my-feature # run the frozen gates yourself