Repository navigation
fix(upgrade-plan): never introduce an advisory; the only fix across a major raises the row, flagged (parity decisions 2, 3) - #994
Merged
Conversation
runyourempire
added a commit
that referenced
this pull request
Oct 18, 2026
…e text never bring in an advisory (review of #994: B1-B3, S2-S5) B2: the fix-target walk (fourda-depengine) names no target, and no line fix, when it lands inside an advisory with no way out that the installed version does not have (the MCP's smallestCleanVersion(installed)). The ids travel as MatchedDependency/LineTarget.introduces (sorted, deduped), and the plan row (No clean fix), Preemption and the Brief (FixPath::Introduces) say every fixing release brings them in. B3: a parent with newer releases only advisories it lacks rule out is Introduces, not "already the newest release". S2/S4: a release blocked ONLY by advisories the installed version lacks, fixed or not, introduces (Advisories::clean_but_introduced); the ids are the union over every such candidate. S3: a lever stuck only so is Introduces too, and row_move words it. S5: doc. B1: the Brief's direct fix and major wrap move to brief_facts_clause.rs; the hop code moves to parent_release_hop.rs (parent_release.rs under 700 lines). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018hjX3pEMmC7CHfG41PiPj7
runyourempire
added a commit
that referenced
this pull request
Oct 18, 2026
… fixed advisory the installed version lacks), ft-069 (a copy's own target never brings one in); README scope of the cross-major raise (review of #994) pr-011, pr-012 and ft-069 are SYNTHETIC (no live case across the 11 audit projects; ids agreed with the MCP terminal). ft-069's records live under osv/SYNT-*.json; the corpus pin script keeps them on a re-pin. Unit tests: B2 on the plan row and the Preemption sentence, B3 (newer releases that bring an advisory in are not "the newest"), and the walk test updated for decision 2. README: the cross-major raise is live for npm; Cargo is pinned at the rule level only (follow-up). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018hjX3pEMmC7CHfG41PiPj7
runyourempire
force-pushed
the
fix/parity-decisions
branch
from
October 18, 2026 16:52
4821374 to
c0c1d47
Compare
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Oct 18, 2026
… major raises the row, flagged (parity decisions 2, 3)
Decision 2: a release cannot be named when ANY advisory (fixed or not)
affects it that does not also affect the installed version
(Advisories::usable takes the installed version, for the parent, the
copy, the lever and the "newest release" text). When a release would
admit a clean copy but every one brings in such an advisory, the row says
"every fixing release brings in <id>, which the installed version does
not have" (Standing / ParentStanding::Introduces) and names nothing.
"remains affected by <id> (no fix published)" stays for advisories the
installed version already has.
Decision 3: the parent's own row is raised to the release a copy needs
even across a major, and says so ("BREAKING: the only release of <parent>
that fixes <child> is <ver>, a major upgrade"); rows and a lever's hop
lift to it across a major too. The plan line's upgrade type is major (its
title and step flag it), Preemption's alert gets the major sentence and
the note, and the Brief's bump clause says "a major upgrade".
Vectors: pr-009 (xsv's crossbeam-channel 0.2.4 -> 0.5.0 for
crossbeam-utils, live crates.io and OSV, the MCP terminal's line verbatim;
the runner gains a Cargo project shape and dialect) and pr-010 (SYNTHETIC
"introduces" rule line, marked as such).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018hjX3pEMmC7CHfG41PiPj7
…e text never bring in an advisory (review of #994: B1-B3, S2-S5) B2: the fix-target walk (fourda-depengine) names no target, and no line fix, when it lands inside an advisory with no way out that the installed version does not have (the MCP's smallestCleanVersion(installed)). The ids travel as MatchedDependency/LineTarget.introduces (sorted, deduped), and the plan row (No clean fix), Preemption and the Brief (FixPath::Introduces) say every fixing release brings them in. B3: a parent with newer releases only advisories it lacks rule out is Introduces, not "already the newest release". S2/S4: a release blocked ONLY by advisories the installed version lacks, fixed or not, introduces (Advisories::clean_but_introduced); the ids are the union over every such candidate. S3: a lever stuck only so is Introduces too, and row_move words it. S5: doc. B1: the Brief's direct fix and major wrap move to brief_facts_clause.rs; the hop code moves to parent_release_hop.rs (parent_release.rs under 700 lines). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018hjX3pEMmC7CHfG41PiPj7
… fixed advisory the installed version lacks), ft-069 (a copy's own target never brings one in); README scope of the cross-major raise (review of #994) pr-011, pr-012 and ft-069 are SYNTHETIC (no live case across the 11 audit projects; ids agreed with the MCP terminal). ft-069's records live under osv/SYNT-*.json; the corpus pin script keeps them on a re-pin. Unit tests: B2 on the plan row and the Preemption sentence, B3 (newer releases that bring an advisory in are not "the newest"), and the walk test updated for decision 2. README: the cross-major raise is live for npm; Cargo is pinned at the rule level only (follow-up). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018hjX3pEMmC7CHfG41PiPj7
runyourempire
force-pushed
the
fix/parity-decisions
branch
from
October 18, 2026 17:34
c0c1d47 to
9344366
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
This PR covers parity decisions 2 and 3: the Rust engine now matches the MCP (fix/final-audit-625 @ a1a2aeb). It is rebased onto main
44d98e7ba, so #992'sis_malware(id, aliases, cwe_ids, summary)and #993'sDirectFix::Refreshare already in.Decision 2: a move never introduces an advisory. The rule applies on every path:
Advisories::usabletakes the installed version). "remains affected by (no fix published)" stays only for advisories the installed version already has.Advisories::clean_but_introduced, the MCP'scleanButIntroduced; malware still blocks outright), nothing is named. The row reads "every fixing release brings in , which the installed version does not have".<ids>is the sorted, deduped union over every such candidate release (S2, S4).fourda-depenginenames no target when it lands inside an advisory with no way out that the installed version does not have. The line fix is not offered in its place either. This matches the MCP'ssmallestCleanVersion(installed). The ids travel asMatchedDependency.introducesandLineTarget.introduces. All three surfaces agree:FixPath::Introduces.Introduces, and both lever texts word it. Thelever_movearm is now reachable.Introduces, no longer "already the newest X release 4DA has seen".Decision 3: when the only fix is across a major, the row is raised and flagged.
row_targetraises the parent's own row across a major. Lifts and lever hops follow.decide()). Wiring Cargo needs per-version crates.io dependency records; that is a follow-up.Vectors
parent_release.jsonl:npm update express).release: "introduces", graph mode) and pr-012 (blocked only by a fixed advisory the installed version lacks) are SYNTHETIC and marked as such.fix_target.jsonl: ft-069 is SYNTHETIC, with a new optional fieldintroduces[]holding sorted record ids.osv/SYNT-0000-0001.jsonandosv/SYNT-0000-0002.json. Each record'sidmatches its file name, and the package is an invented one (4da-synthetic-ft069).scripts/conformance-corpus.mjskeepsSYNT-*files on a re-pin.Review of #994 (B1, S5)
brief_facts_clause.rs, sobrief_facts_build.rsis 962 lines.parent_release_hop.rs, soparent_release.rsis 669 lines.Touched outside my lanes (one line each):
morning_audit.rsandevidence/stack_change.rs: an exhaustiveFixPath::Introducesarm.upgrade_plan_tests.rs(claimed by fix/severity-parity): one added test.release_advisoriesis unchanged here.Follow-ups, not in this PR:
Tests
a_target_never_brings_in_an_advisory_the_installed_version_lacksa_line_whose_fixes_bring_in_an_advisory_has_no_targeta_fix_that_brings_in_an_advisory_is_not_namednewer_releases_that_bring_in_an_advisory_are_not_the_newesta_release_never_introduces_an_advisoryevery_fixing_release_bringing_in_an_advisory_names_nonea_raise_across_a_major_says_whya_target_that_cannot_clear_everything_still_clears_every_fixable_window: from 1.0.0 it now names nothing; from 1.6.0, which already has the open advisory, it names 2.5.0.row_targetnow raises across a major.cargo test --lib -- osv:: evidence:: brief_facts preemption scoring:: morning db::: 2035 passed, 0 failed.clippy --lib -D warningsis clean, and the wasm build has 0 imports.cargo clippy --lib -D warnings, rustfmt and the file-size gate are clean, and the pre-push gate passed.🤖 Generated with Claude Code
https://claude.ai/code/session_018hjX3pEMmC7CHfG41PiPj7