0.10.0 - 2026-06-15
Release Notes
Breaking: nose query becomes the primary surface and nose scan/nose review are
deprecated (both still work, with an interactive one-line nudge; removal is slated for a
later release).
Added
nose queryis now a complete surface over the same datasetscancomputes:- Explorability (#374): DSL negation (
field!=value/path!~substr), set-membership
OR (witness=exact,subdagmatches either;!=over a comma-set drops all of them), an
at=FILE:LINEselector (a stable family handle across edits), asame_symbolevidence field- facet (the parallel-variant signal), an
existing_helperfield oncall-existing-helper
families (names the member to call — and marks itrole: "existing-helper"— so it isn't read
as one more copy to fold), and aspotclassfacet (leaf-onlyvsstructural) that
separates near families whose varying spots are clean value-leaves from those with genuine
logic divergence (computed on demand from the graded witness — only when queried, for cost).
- facet (the parallel-variant signal), an
- Analysis flags:
--mode/--min-*/--exclude/--cache-dir/--ignore-file/
--semantic-pack/--config, configured identically to scan. - CI gate:
--fail-on any/newwith--baseline/--write-baseline, reusing scan's
gate/baseline/ignore logic —nose query <path> --fail-on anyis a drop-in gate. - A structured, versioned JSON contract (query-json, schema v2)
across every view, advertised ascapabilities.schemas.query_json, plus--format markdown/sarifreport output (reusing scan's formatters over the query selection). - Object model — query the whole dataset, not just families:
group=buckets now carry
summed removable lines and rank by them (group=dir/group=fileis a duplication hotspot
map),fileis a new group key, thefamilyview emits fold-graph links
(subsumes/subsumed_by— the relatedid=handles, not just a count), and a new
reinventedview surfaces the reinvented-helper channel ("call the existing helper") that
was previouslyscan --show reinventedonly. - Decision completeness — act in one turn:
fullskeletons annotate each varying spot
with a coarse value-class hint (⟨param N: literal|name|call|expr|block⟩) for the helper
signature (#374 item 6), and the family object carries proof depth —value_nodes(the
shared value-multiset size an exact family proves identical) and per-location
shared_subdagspans (where a sub-dag clone's proven shared computation lives). - Temporality — query the loop, not a snapshot:
since=<baseline>exposes each family's
status(new/changed/unchanged) against a saved snapshot as a queryable field —
status=newfilter,group=statusfacet,statusin JSON. Unlike--baseline(which
hides accepted families for the gate),since=hides nothing;since=B status=new --fail-on anyis the composable equivalent of--baseline B --fail-on new. - Divergent-edit view —
base=<git-ref>: thenose reviewpipeline
surfaced under query. Detects families at the ref and flags the ones a diff changed in one
copy but not its siblings (a likely un-propagated fix), each item carryingfire_eligible
(the §BV proven-shared-logic verdict);base=REF --fail-on anyis the CI gate, firing only
on the proven case. Reuses review's detection verbatim, so the fire precision is identical.
- Explorability (#374): DSL negation (
- Analysis —
nose statsseparates protocol-boundary Raw from lowering-gap Raw (#390).
Constructs lowered as deliberate fail-closed boundaries (await,try/?,defer,go,
channel_*,select,yield) areRawby design, not coverage gaps.statsnow reports
boundary_raw(overall + per-language) and tags each unhandled kindboundary/gap, so the
lowering worklist (coverage_attribution.py) isn't misled into unsoundly "fixing" a boundary.
Corrected corpus picture: rust/go genuine lowering gap is 0.37%/0.18% (the rest is
boundaries); the remaining fixable mass is parse-failureERROR(a grammar axis) and
low-value C type-level declarations. See experiments §CR. - Analysis — Rust constructor patterns now lower as variant tests (#390). A
match/if let/while lettest onSome(v)/Ok(_)/Point { x, y }lowered the whole pattern to an
opaqueRawnode (and split copies differing only in binding name); it now lowers to the
constructor path (the discriminant), parallel to a unit variant likeNone. Measured: corpus
RustRawratio 2.623% → 1.347%, soundness clean (0 false merges), gold-set Rust
worthy-recall +1 with no regression elsewhere. (The variant condition is now Raw-free;
whole-family convergence for copies differing only in the bound name needs binding extraction,
a follow-up.) See experiments §CP (the coverage worklist) and §CQ. nose scanis deprecated in favour ofnose query. It still works (an interactive run
prints a one-line nudge);capabilitiesmoves it fromcommands.stableto
commands.deprecated; docs lead withquery. Removal is slated for a later release.nose reviewis deprecated in favour ofnose query <paths> base=<ref>(which runs the
same detection — a parity test holds them identical). It still works (interactive nudge);
capabilitiesmoves it tocommands.deprecated. Removal is slated for a later release.
Deprecated
nose scan(and the scan-JSON v1 contract) andnose review— migrate tonose query
(query <path>,query <path> base=<ref>) and the query-JSON v2 contract.
Documentation
- The docs lead with
nose query. README, the wiki home,
getting-started, and the full usage reference now
presentnose queryas the everyday command — explore, one-shot report (--format markdown),
PR check (base=<ref>), CI gate (--fail-on), and the versioned JSON contract.nose scan/nose revieware documented as deprecated aliases, and usage is reordered so the
primary command and the shared Ranking / detection-mode sections come before the deprecated
scanreference. The CLI--helptext (long_about, thescan/querysummaries) was
updated to match. - Code↔docs drift sweep. Fixed the capabilities example
(commands.stableno longer listsreview;deprecatedadds it;schemas.query_jsonadded);
migrated the agent-recipe decision procedure to query-JSON v2 field
names; added a deprecation banner to scan-json pointing to query-JSON v2;
corrected clone-types (nearis part of the default surface, not
opt-in); updated languages for the #390 boundary/gap Raw split; and
refreshed the stalenose querydashboard examples against the shipped output.
Install nose-cli 0.10.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/corca-ai/nose/releases/download/v0.10.0/nose-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install corca-ai/tap/noseDownload nose-cli 0.10.0
| File | Platform | Checksum |
|---|---|---|
| nose-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| nose-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| nose-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| nose-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |