0.13.0 - 2026-06-18
Release Notes
Adds a Swift language frontend and brings Markdown near-duplicate prose detection into
nose query as a new domain (alongside code, CSS, and HTML), plus a Type-4 soundness fix and a
higher cross-language Type-4 coverage floor. Detection of the existing languages and the
--format json query-JSON v2 contract are unchanged.
Added
- Swift language frontend (#442). Swift joins the first-party languages (Python, JavaScript,
TypeScript, Go, Rust, Java, C, Ruby) with tree-sitter lowering and semantic coverage, so Swift
copy-paste, renamed, and Type-4 same-logic clones are detected and proven like the others. - Markdown same-language near-duplicate prose as a
nose querydomain (epic #435).nose querynow reports near-duplicate prose across Markdown documents alongside code clones. Per
capabilities over features, duplication has one entry point, so markdown is surfaced
throughnose queryexactly as the CSS/HTML declarative track is — a "markdown near-duplicates"
section in the human dashboard and a top-levelmarkdownarray under--format json— not as a
separate command. Prose is not code, so it uses a deliberately separatenose-markdownengine:
a character-n-gram pipeline (MinHash-LSH + winnowing + containment candidate generation →
IDF-weighted TF-IDF verify/rank → line-level Smith-Waterman span witness), not the value-graph
IL. Reports ranked families with a relation tier + score, an exact span witness, and
orthogonal evidence (commonness/DF, removable lines, files). Honesty contract:
"near-duplicate (score + witness + commonness)", never "same meaning" or "worth removing" —
boilerplate copies are true duplicates surfaced with high commonness, never suppressed.
Same-language only (cross-lingual/paraphrase need an LLM, out of scope). Deterministic
(byte-identical output). Measured against frozen, LLM-built goldens (bench/markdown/, no
human in the loop: 3 heterogeneous judges, Fleiss κ 0.70/0.71, anchor self-calibration 1.0):
PR-AUC 0.995 / R@P95 0.96 on the code-of-conduct corpus, and an honest multi-genre baseline of
PR-AUC 0.944 / R@P95 0.74 across 5 doc genres, candidate-recall 1.0. Built on the
algorithm survey indocs/markdown-dup-detection-algorithm-survey-2026-06-18.md. See
docs/markdown-duplication.md.
(#435 #436 #437 #438 #439 #440 #441 #444)- Field-evaluation precision/usefulness fixes (#443, #447). (P0) default vendor-dir excludes
(node_modules,vendor,target, …) +nose.tomlexcludeglobs, so a non-git project's
node_modulesno longer floods the report (one field project went 145 noise families → 0); a
min-shared-grams match-substance floor drops thin overlaps. (P1) strip GFM table
scaffolding (pipes/separator rows are format, not content); strong-edge clustering (weak
edges corroborate but don't chain mega-families); confidence-weighted ranking. (P2) large
multi-file clusters are reported as templated sections ("skeleton repeated N× across M
files"), not a clone family — so a templated-doc blob no longer masquerades as one family. - Containment-witness gate (P3, #449). A size-disparate small-in-large containment match
must now have a real contiguous shared-line block, not just scattered char-gram overlap — a
small generic stub no longer gets pulled into a large unrelated doc by common-morpheme
coincidence. Surgical: one field project's spurious mixed-granularity families dropped 8 → 5
with genuine small-in-large and reworded same-size near-dups preserved. - Synthetic recall-vs-edit-ratio benchmark + recall gate (#443, #450). The golden gates
precision; this adds the missing recall gate — a deterministic, self-contained benchmark
(nose-markdown::synth, committed base corpus) that injects controlled edits at known ratios
and asserts recall floors (1.00 / 0.95 / 0.85 / 0.65 at 0/0.1/0.2/0.35 edit ratio), so a
future change that silently sacrifices recall fails CI. - Multi-domain precision golden + regression gate (#443, #454). The original precision
golden was single-genre boilerplate (Contributor Covenant CoC), which over-stated precision.
Added a frozen multi-domain golden —bench/markdown/corpus-docs/(165 files across 5
genres: CLI reference, function/API reference, guides, framework docs, READMEs) +
golden.docs.v1.json, built the same no-human way (Fleiss κ 0.71), wired into a precision
regression gate (eval::docs_golden_precision_floor). The golden-build scripts now take paths
so any corpus can be golden'd.
- Field-evaluation precision/usefulness fixes (#443, #447). (P0) default vendor-dir excludes
Changed
- Swift Type-4 exact coverage parity slice. Swift now has evidence-backed exact-query
coverage for five previously-open matrix cells: typedflatMapvs nested append builders,
module import identity,Dictionary[key, default:]map-default lookup, literalInt
clamp ternaries vsmin(max(...)), and integer-gated total-order comparison absorption.
The implementation is deliberately proof-bounded: wrong module/member/key/default
coordinates, optional??defaulting,Doubleclamp forms, and overloaded/String
comparisons remain adjacent hard negatives. The checked-in Type-4 matrix moves Swift from
15/24 to 20/24 applicable cells, and focused probes now run through
nose query ... witness=exactrather than the deprecated scan path. - Type-4 coverage floor raised to ≥50%. The checked-in coverage matrix
(bench/type4/coverage_matrix.v1.json) now keeps every primary language at or above 56% of
covered applicable cells, backed by new evidence-carrying probes (extract-method-inline,
numeric tail recursion, …) for C, Go, and others.
Fixed
structural_foldreassociation gated to integer heads (#434). A Lean obligation audit (all
24) found the right-fold→left-fold loop rewrite — proven sound overIntonly — could admit a
float-valued head via the coarseValueDomain::Number, and float+/*is non-associative, so
results could change. Addedhead_possibly_float(rejects float literal /Op::TrueDiv/
float-typed param), measured byte-identical on all 135 corpus repos (0 recall cost,
soundness gain), plus added Lean theorems for previously-unproven firing rewrites
(eq_commutes/ne_commutes, guard merges, and astructural_foldfloat counterexample).- Swift implicit-member lowering gap (#452, #455). Swift implicit-member expressions now lower
correctly, closing a coverage gap.
Install nose-cli 0.13.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/corca-ai/nose/releases/download/v0.13.0/nose-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install corca-ai/tap/noseDownload nose-cli 0.13.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 |