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 +4 -4
- data/CHANGELOG.md +117 -0
- data/lib/space_architect/architect_project.rb +417 -86
- data/lib/space_architect/cli/architect.rb +128 -24
- data/lib/space_architect/harness.rb +14 -2
- data/lib/space_core/version.rb +1 -1
- data/skill/architect/SKILL.md +22 -9
- data/skill/architect/dispatch.md +84 -2
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 17559f544d11b36996a3e8f927a8e4c9d2db3f178687c726fee14793c7ec6de4
|
|
4
|
+
data.tar.gz: 5b7c00fc0748f05e5c557339d011f3583816399a2261c79ae45e93e3f9e78ae5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|