space-architect 5.5.1 → 6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 71935f28a32069832af5b4d25f368d33c7efc505267a98c4f4b49f75a0084861
4
- data.tar.gz: 2b067fdbdd5a950b204ef9fb16a3484a634e0b6acd2f9ca467e8f47adec29902
3
+ metadata.gz: aa2517580f1eefb1906810b2a2d1e2500814e9042a812c5aa8a6ccc7474f0067
4
+ data.tar.gz: 66259d63c107e8fe76dc8036766015170ce2d1a0c4ac4d0e617d2b4fed5811fd
5
5
  SHA512:
6
- metadata.gz: 66a47fc8027809c4132ba9e5365694ab530d646be68b0cacec80d527e81dcb28f7d192afb4e76ea1e9b0489bada20013af2c32da066075e28f39bb407fc89243
7
- data.tar.gz: f10a02847f4dafb408b98eb6a79f4b911bc0db7bf1856fbef18b751928f2e824ee5a5596db82ca94641f2fa5f55b037a671d9fed4daf0c8b54a374735b5d4baf
6
+ metadata.gz: d2ca2365a338b78284e80573a137ddb0b79fdd10147d03c59f2b01aad7a8e8482899630545673f72f86d3abab075fb8fb9e76eeabf23ebe019f12c0bce1a6aaa
7
+ data.tar.gz: 2e1df0a9c9ea9b9ba162420120872d4671e031a712fb08d9995caa4a6e49fd3d50526ec8cc7cd8fc5acf463bb8b454632c99a6dfa51440182cadc24a27a26e87
data/CHANGELOG.md CHANGED
@@ -5,6 +5,116 @@ 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
+ ## [6.0.0] - 2026-08-03
9
+
10
+ Twelve iterations of the Architect Loop run against this repo's own tooling, each
11
+ frozen before dispatch and judged by a separate session against criteria written
12
+ before results existed. Major because `architect freeze` gains two hard
13
+ preconditions it did not have — see the **BREAKING** items under Changed.
14
+
15
+ Roughly half the release is machinery that stops the next papercut being written:
16
+ gates you can execute *before* freezing them, lane boundaries that cannot silently
17
+ disagree with themselves, and an escape valve for the case where the frozen
18
+ contract is the thing that is wrong. Suite: 1212 → 1297 runs, 4811 → 5148
19
+ assertions, green throughout, with the last known flake causally explained rather
20
+ than retried away.
21
+
22
+ ### Added
23
+
24
+ - **`architect rehearse ITERATION`** — the phase between authoring and freeze
25
+ (#81, consolidating #73, #39, #34). Runs the *drafted* (unfrozen, working-tree)
26
+ gates through the identical execution path `architect gate` uses — `execute_gates`
27
+ is extracted byte-for-byte, so the two can never diverge — and classifies each
28
+ RED / GREEN / BROKEN / EMPTY. Prints the resolved `dir` that was always in the
29
+ result hash and never rendered. `--record` emits a paste-able provenance block
30
+ for the iteration's AC preamble.
31
+ - **Scope-asymmetry reporting in `rehearse`** — for each gate whose command is a
32
+ recognizable file-scoped grep invocation, the gate's own pattern is re-run across
33
+ the whole repo via `git grep` and anything matching outside the gate's declared
34
+ paths is named, loudest when it also falls outside every declared lane's touch
35
+ set. Catches the failure mode where a boundary is stated consistently in three
36
+ places and is wrong in all three because all three were drawn from one too-narrow
37
+ grep. Reports only: it never touches `rehearse`'s exit code, its RED/GREEN/BROKEN
38
+ classification, or the rehearsal stamp. An invocation carrying a flag `git grep`
39
+ has no equivalent for (`-x`) is declined by name and counted as not-analyzed
40
+ rather than answered wrong.
41
+ - **`architect integrate --accept-bounds REASON`** — merges a lane that wrote
42
+ outside its declared touch set when the *declaration* is the defect and the freeze
43
+ rules correctly forbid widening it after the fact. Recorded per-lane in
44
+ `space.yaml` against the lane that was actually out of bounds, never silently, and
45
+ never able to override the no-builder-commits check.
46
+ - **`architect freeze --skip-rehearse REASON`** — the deliberate escape from the new
47
+ rehearsal precondition, with the reason recorded in `space.yaml`. An empty REASON
48
+ is refused.
49
+ - **`Space::Core::Paths` glob helpers** — one documented decision about when a
50
+ content-tree glob includes dotfiles, guarded by `test/paths_guard_test.rb` so the
51
+ flags cannot drift apart again across call sites.
52
+
53
+ ### Changed
54
+
55
+ - **BREAKING — `architect freeze` requires a fresh rehearsal stamp.** The stamp is
56
+ digest-keyed to the gates block, so editing one byte of a gate after rehearsing
57
+ invalidates it; it records that the architect *looked*, never that the gates
58
+ passed. An iteration that froze cleanly on 5.x now errors with
59
+ `has not been rehearsed against its current gates`. Run `architect rehearse
60
+ ITERATION` first, or `architect freeze ITERATION --skip-rehearse REASON` to skip
61
+ deliberately.
62
+ - **BREAKING — `architect freeze` refuses an untouched scaffold placeholder.** An
63
+ Acceptance Criteria section still carrying the template's placeholder AC1 with no
64
+ active gate is now an error rather than a successful freeze (#73). Narrow by
65
+ design: a hand-authored prose-only AC without the placeholder still freezes, so
66
+ the spike path the skill sanctions is untouched.
67
+ - **`architect integrate` commits its own `space.yaml` mutation.** It previously
68
+ wrote `integration_branch`/`integrate_sha` to disk and deferred the commit to
69
+ whatever committing command ran next, leaving a window in which a dying session
70
+ lost the record of which lanes had merged — which happened, and cost a full
71
+ judging session. The commit is made by pathspec so unrelated dirty files are not
72
+ swept in, once per call rather than once per lane, and from an `ensure` so a merge
73
+ conflict partway through the lane set still preserves what already merged.
74
+ - **`architect evidence` replaces a lane's subsection instead of appending.**
75
+ Re-transcribing a corrected report no longer leaves both copies in Builder Report.
76
+ - **Gate commands are spawned through an explicit `/bin/sh -c`**, so the documented
77
+ shell is the actual shell regardless of the invoking environment.
78
+ - **Skill prose (`skill/architect/`, `docs/DESIGN.md`).** The lane-prompt template
79
+ tells builders not to title their scratch report (the CLI supplies the `### <lane>`
80
+ heading) and to keep internal headings at `###` or deeper; `SKILL.md` §4 carries
81
+ the boundary-enumeration discipline and the content rule that a criterion renaming
82
+ an identifier must be drawn from a whole-repo grep, not `lib/` alone. These are
83
+ load-bearing: lane prompts are assembled from `dispatch.md`, and at least one
84
+ defect in this release was caused by prose and code disagreeing.
85
+
86
+ ### Fixed
87
+
88
+ - **`architect research dispatch` silently launched only the first prompt (#83).**
89
+ Given five prompt paths it launched one, exited 0, and printed nothing on stderr —
90
+ destroying evidence the architect then writes research grounds from. dry-cli binds
91
+ only the first positional to a scalar `argument` and drops the rest into the
92
+ options hash; `Supervisor#dispatch` had always handled an array correctly. Fixed
93
+ with dry-cli's own `type: :array`, the established idiom at
94
+ `space_src/cli/clone.rb:19`. Net −1 line.
95
+ - **`architect bug-report` buried the title in an HTML comment `gh` ignores (#41)**,
96
+ forcing a manual `--title` on every filing.
97
+ - **The dispatch liveness check was a point-sample race in production**, not only in
98
+ tests. It now waits for a real stream-json init event and reports true elapsed
99
+ time, and scans the run log incrementally instead of re-parsing it from the top
100
+ every 50ms — 92.6MB → 615KB of reads over a 300-poll worst case.
101
+ - **`Commands.wrap`'s quote scanner was not backslash-aware.** Verified at the
102
+ property level with `bash` as the oracle over an eight-command battery, rather than
103
+ by adding another example.
104
+ - **`Dir.glob` calls silently skipped dotfiles** in `SkillInstaller.same_content?`
105
+ and its siblings; consolidated behind the new `Space::Core::Paths` decision.
106
+ - **The last suite flake, explained rather than retried.** `FileUtils.cp_r` of the
107
+ git fixture templates raced `git maintenance --detach`, which outlived `system()`
108
+ and mutated `.git/objects/` mid-copy. Stress: 13/24 failures → 0/24, twice.
109
+ - **A clone-concurrency test's fiber rendezvous was unbounded** — correct only by an
110
+ accident of `Async::Task#async`'s greedy dispatch, and would have hung `rake test`
111
+ forever with no message if scheduling ever shifted. Now bounded, failing legibly
112
+ while keeping the exact peak-concurrency assertion it was written for.
113
+ - **The scope-asymmetry check overstated its own certainty.** It replayed a gate's
114
+ pattern but dropped the gate's `-w`, so the whole-repo re-run was *broader* than
115
+ the gate it stood in for and printed the surplus under its loudest line ("no lane
116
+ may legally fix these"). `-w` is now replayed and `-x` declined by name.
117
+
8
118
  ## [5.5.1] - 2026-07-25
9
119
 
10
120
  ### Fixed