Skip to content

0.10.0 - 2026-06-15

Choose a tag to compare

@github-actions github-actions released this 15 Jun 04:16
e038931

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 query is now a complete surface over the same dataset scan computes:
    • Explorability (#374): DSL negation (field!=value / path!~substr), set-membership
      OR
      (witness=exact,subdag matches either; != over a comma-set drops all of them), an
      at=FILE:LINE selector (a stable family handle across edits), a same_symbol evidence field
      • facet (the parallel-variant signal), an existing_helper field on call-existing-helper
        families (names the member to call — and marks it role: "existing-helper" — so it isn't read
        as one more copy to fold), and a spotclass facet (leaf-only vs structural) 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).
    • Analysis flags: --mode/--min-*/--exclude/--cache-dir/--ignore-file/
      --semantic-pack/--config, configured identically to scan.
    • CI gate: --fail-on any/new with --baseline/--write-baseline, reusing scan's
      gate/baseline/ignore logic — nose query <path> --fail-on any is a drop-in gate.
    • A structured, versioned JSON contract (query-json, schema v2)
      across every view, advertised as capabilities.schemas.query_json, plus --format markdown/sarif report 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=file is a duplication hotspot
      map), file is a new group key, the family view emits fold-graph links
      (subsumes/subsumed_by — the related id= handles, not just a count), and a new
      reinvented view surfaces the reinvented-helper channel ("call the existing helper") that
      was previously scan --show reinvented only.
    • Decision completeness — act in one turn: full skeletons 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_subdag spans (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=new filter, group=status facet, status in JSON. Unlike --baseline (which
      hides accepted families for the gate), since= hides nothing; since=B status=new --fail-on any is the composable equivalent of --baseline B --fail-on new.
    • Divergent-edit view — base=<git-ref>: the nose review pipeline
      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 carrying fire_eligible
      (the §BV proven-shared-logic verdict); base=REF --fail-on any is the CI gate, firing only
      on the proven case. Reuses review's detection verbatim, so the fire precision is identical.
  • Analysis — nose stats separates protocol-boundary Raw from lowering-gap Raw (#390).
    Constructs lowered as deliberate fail-closed boundaries (await, try/?, defer, go,
    channel_*, select, yield) are Raw by design, not coverage gaps. stats now reports
    boundary_raw (overall + per-language) and tags each unhandled kind boundary/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-failure ERROR (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 let test on Some(v)/Ok(_)/Point { x, y } lowered the whole pattern to an
    opaque Raw node (and split copies differing only in binding name); it now lowers to the
    constructor path (the discriminant), parallel to a unit variant like None. Measured: corpus
    Rust Raw ratio 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 scan is deprecated in favour of nose query. It still works (an interactive run
    prints a one-line nudge); capabilities moves it from commands.stable to
    commands.deprecated; docs lead with query. Removal is slated for a later release.
  • nose review is deprecated in favour of nose query <paths> base=<ref> (which runs the
    same detection — a parity test holds them identical). It still works (interactive nudge);
    capabilities moves it to commands.deprecated. Removal is slated for a later release.

Deprecated

  • nose scan (and the scan-JSON v1 contract) and nose review — migrate to nose 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
    present nose query as 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 review are documented as deprecated aliases, and usage is reordered so the
    primary command and the shared Ranking / detection-mode sections come before the deprecated
    scan reference. The CLI --help text (long_about, the scan/query summaries) was
    updated to match.
  • Code↔docs drift sweep. Fixed the capabilities example
    (commands.stable no longer lists review; deprecated adds it; schemas.query_json added);
    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 (near is part of the default surface, not
    opt-in); updated languages for the #390 boundary/gap Raw split; and
    refreshed the stale nose query dashboard 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 | sh

Install prebuilt binaries via Homebrew

brew install corca-ai/tap/nose

Download 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