Repository navigation
v0.175.0
The range release — receipt #22's headline gap closed (cal #56b)
The first native-context field run reviewed a merged PR and watched four subsystems starve simultaneously on an empty base...HEAD union, while topic anchoring shipped docstring fragments to the graph. This release makes commit-range review first-class end-to-end and puts identifier-shape hygiene at the anchor chokepoints. Verified end-to-end on a git fixture in K293: --range persists through review-context-init into workflow.yaml and the memory_signal affects union counts exactly the range's files.
Added
--range=<a>..<b>first-class commit-range scope. Range mode in the file-collection choke point (collectChangedFiles: exactly the named range, no working-tree/untracked contamination) and threaded everywhere scope is consumed:state changed-files --range;review-weight assess --range;state review-context-init --rangepersists the range intoworkflow.yamlbefore any child CLI runs, so the memory_signal affects union (the single cached value all three dispatch generations consume), diff-symbol extraction, manifest freshness, and preflight's topic anchoring all read one consistent scope;graphify augment-impact-map --range;code-review.mdscope_check (file count + diff-LOC banding vs the range) and substep-7; the auto-partitioner wires each lane'sbase_reffrom the range start (generalizing the per-lane plumbing the field run proved by hand);/devt:review --range=…documented at the command surface.- Verbatim-OR-attested ARGS contract: overriding known-bad generated args is sanctioned WHEN fully attested inside
graphify-impact-plan.json(args_overridden+ original/override args + reason/evidence/by/timestamp — a post-hoc auditor reconstructs what the generator produced, what was sent, and why);assert-graphify-decisionfails a declared override with incomplete attestation. Undeclared overrides remain violations.
Fixed
- Topic anchors are identifier-shape gated. The graph label space includes docstring pseudo-nodes; harvesting legs leaked ~80-char prose fragments and filenames into
topic.symbols, where the args contract then forced wasted MCP calls on them.isIdentifierShapednow gates the symbol filter AND final assembly (every leg, including FTS rescue): whitespace, >64 chars, and file-extension-shaped entries rejected; dotted identifiers andcall()forms kept. All three field fragments die in the K293 truth table. - Commit-SHA shrapnel never becomes topic vocabulary: hex-shaped tokens (the tokenizer split a SHA and
b9344became a keyword that FTS-matched an unrelated service into suggested_reading) are excluded from keywords — the relevance floor at the query source. (A per-entry FTS score floor on suggested_reading remains open — the tokenizer + shape gates cut the junk-query side that produced the field's off-domain entry.) - review-weight empty-diff is a scope failure, not a safety verdict: "scope unresolvable" naming
--rangeas the likely fix (was: "HEAVY recommended — nothing to prove safe" on zero evidence), with a distinct workflow echo; plus the recently-reviewed caveat (advisory-only, never auto-light) sourced from the claude-mem harvest artifact. - Gate K293 pins the release (range persist + affects-union + changed-files end-to-end on a two-commit git fixture; topic hygiene behavioral truth table; scope-unresolvable verdict; attestation + workflow wiring pins). Drift-guard stack 200 → 201 deep (K94–K293).