space-architect 6.0.0 → 7.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: aa2517580f1eefb1906810b2a2d1e2500814e9042a812c5aa8a6ccc7474f0067
4
- data.tar.gz: 66259d63c107e8fe76dc8036766015170ce2d1a0c4ac4d0e617d2b4fed5811fd
3
+ metadata.gz: 17559f544d11b36996a3e8f927a8e4c9d2db3f178687c726fee14793c7ec6de4
4
+ data.tar.gz: 5b7c00fc0748f05e5c557339d011f3583816399a2261c79ae45e93e3f9e78ae5
5
5
  SHA512:
6
- metadata.gz: d2ca2365a338b78284e80573a137ddb0b79fdd10147d03c59f2b01aad7a8e8482899630545673f72f86d3abab075fb8fb9e76eeabf23ebe019f12c0bce1a6aaa
7
- data.tar.gz: 2e1df0a9c9ea9b9ba162420120872d4671e031a712fb08d9995caa4a6e49fd3d50526ec8cc7cd8fc5acf463bb8b454632c99a6dfa51440182cadc24a27a26e87
6
+ metadata.gz: db1f7cf0ed0ce5401483b7f3e2e429e5caf2200d1baeb450940f6afddd017744bd449a5b05dc2cfbbfc70787967ec01b6542adbd301c69e470917f6b8887f41c
7
+ data.tar.gz: b1c4fb81c6eeb1c9158e77a4e75aa21e01d4d77ac203e448c8ba564c76c2977bff9959fb481f480858a647f52262f3bcc516743220f6113d8a17c3f614f0f5fc
data/CHANGELOG.md CHANGED
@@ -5,6 +5,123 @@ 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
+ ## [7.1.0] - 2026-08-16
9
+
10
+ One iteration of the Architect Loop (I01, space
11
+ 20260816-architect-rehearse-friction) closing the rehearse rerun tax: a heavy
12
+ rehearsal now yields its verdict vector, per-gate reasons, and full raw output
13
+ from one execution plus file reads.
14
+
15
+ ### Added
16
+
17
+ - **`architect rehearse` writes a durable transcript and prints a bounded
18
+ summary.** Previously the CLI wrote an unbounded report to stdout only, so
19
+ every re-view of a run — a tail window, a grep filter, a verdict count —
20
+ re-ran the whole gate suite. Every non-EMPTY rehearsal now writes its full
21
+ report (each gate's command, dir, exit code, verdict, reason, complete
22
+ stdout+stderr, and scope-asymmetry findings) to a uniquely named file under
23
+ `build/rehearse/` and prints that path; the terminal report itself is now
24
+ bounded — one line per gate carrying its AC label, gate id, verdict, and
25
+ exit code regardless of how many lines the command spans, inline output
26
+ capped to the last 20 lines with an elision marker naming the transcript —
27
+ and always ends with a summary block (one line per gate, a tally by
28
+ verdict, and the transcript path) positioned last, so a `tail` of stdout
29
+ captures the whole outcome.
30
+ - **`execute_gates` dedups identical executions.** Gates that share an
31
+ identical `(cmd, resolved dir)` pair now execute once; each is still
32
+ evaluated against its own `expect` and classified independently, the
33
+ group's effective timeout is the largest any member declares, and the
34
+ report/transcript name the shared execution so byte-identical output
35
+ doesn't read as a copy-paste bug. `run_gates` (judge time) shares this for
36
+ free — dedup lives in `execute_gates`, the one instrument both call.
37
+ - **docs/RELEASING.md.** The release process, retraced from the v7.0.0
38
+ landing: preconditions, the release-prep commit, the human-run PR/merge and
39
+ signed-tag steps, what the tag-push automation covers, and local-install
40
+ verification (including the stale-binstub PATH hazard).
41
+
42
+ ## [7.0.0] - 2026-08-14
43
+
44
+ Three iterations of the Architect Loop run against this repo's own tooling, each
45
+ frozen before dispatch and judged by a separate session against criteria written
46
+ before results existed. Major because three destructive verbs gain a refusal they
47
+ did not have, and `provision`'s per-lane return changes shape — see the
48
+ **BREAKING** items under Changed.
49
+
50
+ Every defect closed here is the same animal: a **confident, wrong artifact**. An
51
+ operation that destroys a completed builder run and exits 0 reporting success. A
52
+ value the tool resolves correctly and then declines to use. A lane denied the tool
53
+ it needed, which does not crash and instead files a well-formatted, dataless
54
+ report. The through-line is that none of them announced itself — which is why the
55
+ fixes are as much about making the resolved value *visible* as about resolving it.
56
+ Suite: 1297 → 1344 runs, 5148 → 5373 assertions, green throughout.
57
+
58
+ ### Added
59
+
60
+ - **`--allowed-tools` / `--append-allowed-tools` on `architect dispatch`, and
61
+ `allowed_tools:` / `append_allowed_tools:` on the frozen lane declaration
62
+ (#89).** `ClaudeCodeHarness::ALLOWED_TOOLS` was a defaulted keyword that
63
+ `Harness.for` never accepted and no caller could pass, so no dispatched lane
64
+ could be granted an MCP tool. Because `claude -p` **denies** an unlisted tool
65
+ rather than prompting, the lane did not fail — it reasoned its way to "I was
66
+ unable to query the datasource" and wrote a plausible empty report. Replace and
67
+ append compose as one rule regardless of which surface supplied them
68
+ (`ClaudeCodeHarness.resolve_tools`); the CLI flag wins over the lane key **on
69
+ the same axis**, so a lane's `allowed_tools:` still supplies the base a
70
+ `--append-allowed-tools` flag appends to. The yaml half lives in the frozen lane
71
+ declaration so a grant is reviewable and judged like every other lane boundary
72
+ rather than buried in a shell invocation, and it survives worktree
73
+ re-materialization by the same mechanism `touch_set` already uses.
74
+ - **The resolved grant is recorded and surfaced.** Stamped onto the lane beside
75
+ `harness`/`model`/`effort`, printed at dispatch with its provenance (which
76
+ surface won), and shown in `architect status`'s lane line when it diverges from
77
+ the default. A denial now traces back to a grant a human can read. An MCP
78
+ *reachability* probe is deliberately not in this release: there is no MCP
79
+ modelling anywhere in the codebase, and a prober is a subsystem, not a rider on
80
+ a plumbing fix.
81
+
82
+ ### Changed
83
+
84
+ - **BREAKING — `architect worktree remove`, `architect integrate --teardown`, and
85
+ `architect provision --base` refuse to discard a lane worktree's uncommitted
86
+ work.** The existing safety checks asked whether work had been *committed*, in a
87
+ system whose hard rule 7 guarantees lane work is **never** committed — so all
88
+ three destroyed completed builder runs and exited 0 reporting success. One
89
+ predicate (`dirty_file_count`, untracked files included) now guards all three
90
+ sites. `--force` overrides and discards, restoring the old behavior exactly. A
91
+ script that tore down dirty lanes will now exit non-zero.
92
+ - **BREAKING — the multi-lane verbs decide their refusal before mutating
93
+ anything.** `integrate --teardown` and `provision --base` pre-flight the whole
94
+ declared lane set (`refuse_teardown_if_dirty!`, `refuse_repoint_if_dirty!`), so a
95
+ dirty lane discovered late no longer leaves earlier lanes already destroyed. The
96
+ refusal names every offending lane at once instead of failing on the first.
97
+ - **BREAKING — `provision`'s per-lane return is now `outcome:`**
98
+ (`:created` / `:unchanged` / `:repointed`) plus `discarded:`, replacing the
99
+ boolean `created:`. The boolean could not express the re-point path that #88's
100
+ fix introduces.
101
+ - **`worktree add`, `worktree list`, and `worktree remove` accept an optional
102
+ trailing `SPACE` argument**, like every other space-scoped verb. `worktree
103
+ remove` previously had no way to name its space and resolved from `$PWD` — a
104
+ destructive verb that could fire against the wrong space entirely.
105
+ - **Long-running lane guidance in `skill/architect/dispatch.md` (#85).** The lane
106
+ template's no-busy-wait clause beat every attempt to hold a 30–70 minute detached
107
+ process open, killing exactly the lanes it was least safe to kill.
108
+
109
+ ### Fixed
110
+
111
+ - **`architect provision --base` was resolved and then discarded on the re-attach
112
+ path (#88).** `worktree_add` computed `base_sha` from `--base`, ignored it when
113
+ the lane branch already existed, and recorded it anyway — so `space.yaml` claimed
114
+ a base the worktree was never pointed at. An operator-supplied `--base` is now
115
+ enforced (re-point, or refuse when that would discard work); an internal
116
+ re-materialization still reattaches at whatever is there, never refusing and never
117
+ moving a branch nobody asked to move.
118
+ - **`architect rehearse` refused every cross-repo iteration (#90).** It resolved one
119
+ repo for the whole iteration and raised when the drafted lanes named more than
120
+ one, even though `execute_gates` could already resolve a run dir per gate. Gates
121
+ carrying their own `cwd` now rehearse in their own declared directory regardless
122
+ of how many repos the iteration spans; the refusal survives only for gates that
123
+ genuinely need a default, and it names them.
124
+
8
125
  ## [6.0.0] - 2026-08-03
9
126
 
10
127
  Twelve iterations of the Architect Loop run against this repo's own tooling, each