Skip to content

Commit c774031

Browse files
author
Test User
committed
docs(release): record the 1.9.16 fixes in changelog and README
Dates the 1.9.16 section and folds this branch's work into it: the DDD paradigm and ceremony-audit lens, the select! and memory-allocation review lenses, the CI gate and typecheck fixes, and the capture-index consistency fixes. README's What's New leads with DDD as the fourteenth architecture paradigm and notes the infrastructure work behind it.
1 parent 405292c commit c774031

3 files changed

Lines changed: 72 additions & 29 deletions

File tree

CHANGELOG.md

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [1.9.16] - 2026-07-14
11+
1012
### Added
1113

1214
- **Domain-Driven Design paradigm and the ceremony-audit review
@@ -34,8 +36,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
3436
- `.claude/rules/ceremony-requires-need.md`: no DTO, mapper, command
3537
object, or layer boundary without a named, current need.
3638

39+
- **`select!` orchestration rule and memory-allocation review
40+
lenses (pensive).** Two review capabilities landed as new modules
41+
inside existing skills (Fixes #598, #599):
42+
- `rust-review` `concurrency-patterns` module: a rule flagging
43+
hand-rolled multi-task orchestration (2+ `tokio::spawn` handles
44+
torn down with consecutive `abort()` calls around an
45+
mpsc-shared sink) that a single `select!` loop expresses more
46+
safely, carrying the cancel-safety and head-of-line-blocking
47+
caveats the rewrite introduces. Wired into `/rust-review` and
48+
the `rust-auditor` agent.
49+
- `performance-review` `memory-allocation-lenses` module: three
50+
manual lenses for allocation blow-ups that keep unit tests
51+
green: unbounded collections fed from an external source,
52+
hot-path recompute that should be memoized behind a generation
53+
counter, and serial blocking I/O over an unbounded set. Written
54+
as review lenses, not AST detectors, so the performance-review
55+
detector-test rule visibly does not apply to them.
56+
3757
### Fixed
3858

59+
- **Two URLs with identical content desynced the capture index
60+
(memory-palace).** The web-capture guard was `is_known(url=...)`,
61+
which consults URLs only, so a new URL serving bytes already on disk
62+
(an empty API result, a mirror, a redirect target) fell through to
63+
`update_index`. That overwrote `hashes[content_hash]` with the second
64+
capture's path and left the *first* entry pointing at a file the hash
65+
map no longer agreed with, plus a duplicate copy of the content on
66+
disk. `update_index` is now content-addressed: an entry whose bytes
67+
are already stored adopts the canonical location, so `entries` and
68+
`hashes` cannot disagree by construction. The capture hook checks
69+
`get_stored_at` first and indexes the new URL against the existing
70+
file rather than storing a second copy.
71+
72+
- **Pruning one of two entries sharing a capture destroyed the
73+
survivor's dedup memory (memory-palace).** `apply_orphan_prunes`
74+
popped the hash mapping unconditionally (its comment claimed a
75+
`stored_at` check the code never made). When two URLs shared one
76+
piece of content and only one was orphaned, the survivor's
77+
`content_hash` was left dangling, `is_known` reported its content
78+
unseen, and the next fetch re-captured a file already on disk.
79+
Removal is now refcount-aware: a mapping is dropped only when no
80+
surviving entry references it.
81+
82+
- **The committed capture index was guarded by no test
83+
(memory-palace).** The index invariants were pinned only against
84+
synthesized `tmp_path` fixtures, and those fixtures derived each hash
85+
from the URL, so no two entries could ever collide and the bugs above
86+
were unreachable from the suite. `tests/test_capture_index_artifact.py`
87+
now runs the same invariants against the artifact that actually ships:
88+
no dangling hashes, no orphan mappings, `entries` and `hashes` agreeing
89+
on `stored_at`, and required fields present.
90+
3991
- **Paradigm test harness could silently skip a new paradigm
4092
(archetypes).** `EXPECTED_COMPONENTS` was the only thing driving the
4193
parametrize, so a fourteenth paradigm could land on disk untested. The
@@ -90,30 +142,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
90142
trigger now matches `pyproject.toml` as well, which is what
91143
`typecheck.yml` already watched.
92144

93-
## [1.9.16] - 2026-07-05
94-
95-
### Added
96-
97-
- **`select!` orchestration rule and memory-allocation review
98-
lenses (pensive).** Two review capabilities landed as new modules
99-
inside existing skills (Fixes #598, #599):
100-
- `rust-review` `concurrency-patterns` module: a rule flagging
101-
hand-rolled multi-task orchestration (2+ `tokio::spawn` handles
102-
torn down with consecutive `abort()` calls around an
103-
mpsc-shared sink) that a single `select!` loop expresses more
104-
safely, carrying the cancel-safety and head-of-line-blocking
105-
caveats the rewrite introduces. Wired into `/rust-review` and
106-
the `rust-auditor` agent.
107-
- `performance-review` `memory-allocation-lenses` module: three
108-
manual lenses for allocation blow-ups that keep unit tests
109-
green: unbounded collections fed from an external source,
110-
hot-path recompute that should be memoized behind a generation
111-
counter, and serial blocking I/O over an unbounded set. Written
112-
as review lenses, not AST detectors, so the performance-review
113-
detector-test rule visibly does not apply to them.
114-
115-
### Fixed
116-
117145
- **Leaked git environment in the plugin test runner (scripts).**
118146
Every test invocation now runs behind `scripts/without-git-env.sh`,
119147
which unsets the whole `GIT_*` prefix before handing off to the

README.md

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,17 +164,32 @@ unavailable, and both can be turned off.
164164

165165
## What's New
166166

167-
**1.9.16** adds two `pensive` review capabilities, landed as modules
167+
**1.9.16** adds Domain-Driven Design as the fourteenth architecture
168+
paradigm, along with the review lens that enforces it. The
169+
`archetypes:architecture-paradigm-domain-driven` skill treats DDD as
170+
modeling a business in its own language, and treats layering, mapping,
171+
DTOs, and command objects as separable machinery a domain model may or
172+
may not need. Its companion `ceremony-audit` module in
173+
`pensive:architecture-review` reviews for passthrough mappers, twin
174+
types, and speculative DTOs, with an IO-boundary counter-signal so it
175+
does not flag a boundary mapper doing real work.
176+
177+
The release also adds two `pensive` review capabilities as modules
168178
inside existing skills. The `rust-review` skill gains a
169179
`concurrency-patterns` rule that flags hand-rolled multi-task
170180
orchestration (several `tokio::spawn` handles torn down with
171181
consecutive `abort()` calls) that a single `select!` loop expresses
172182
more safely. The `performance-review` skill gains three manual
173183
memory-allocation lenses: unbounded collections from an external
174184
source, hot-path recompute that should be memoized, and serial
175-
blocking I/O over an unbounded set. Both are review lenses a reviewer
176-
applies by reading the code, with no AST automation behind them.
177-
See the [CHANGELOG](CHANGELOG.md) for the full history.
185+
blocking I/O over an unbounded set. These are lenses a reviewer applies
186+
by reading the code, with no AST automation behind them.
187+
188+
On the infrastructure side, `cartograph`'s 40 tests now run in a gate
189+
that previously reported them as a clean skip, and the typecheck gate
190+
resolves mypy from each plugin's own environment so it means the same
191+
thing locally and in CI. See the [CHANGELOG](CHANGELOG.md) for the full
192+
history.
178193

179194
## Plugin Development
180195

docs/api-overview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# API Overview
22

3-
*Updated: 2026-07-05*
3+
*Updated: 2026-07-14*
44

55
## API Surface Summary
66

0 commit comments

Comments
 (0)