mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-09-09 01:39:22 +00:00
* feat(review): warn when a subsystem's Criticals keep regrowing across rounds (#9905) * fix(review): scope the marker's closure field to the account that minted it (#10010) * fix(review): sentinel mint, chain order, and advice contract repairs (#10010) Three repairs to the divergence sentinel, each reproduced before the fix and each pinned by a test that goes red without it. The mint forged a closure on a claim re-filed through the deferral channel. The typed channel carries no id field, so the build stamps the re-file fresh, and its rendered title projects to the `file:line` locator under `claimLocator` while an inline-drafted predecessor's title projects to the claim text — the standing locator join never meets, and the exact-id read minted a closure on a claim the very body re-posted open. A round later, the fabricated entry armed the sentinel over a lineage whose first link never happened. The mint now also joins the previous list against the typed deferral entries on (file, claim); a truly vanished same-file Critical beside the re-file still mints. `successorChains` was never sorted before both consumers slice it at `MAX_RENDERED_CLUSTERS`, so which diverging subsystems the note named was the map's insertion order, not a measured property — four diverging files with the multi-Critical one inserted last named the three single-Critical files and relegated it to the ellipsis. Sorted like the cluster: new work first, closure volume second, code-unit path tie-break. The chain advice said "consider removing or redesigning that mechanism" — a code-architecture prescription the render's own contract forbids and its invariant test enforces, which the new branch bypassed only because the invariant's fixture carried no chain. Reworded into the process register, and the invariant test now renders a chain-carrying fixture through the same negative regexes. Also witnesses the mint's Critical-only rule with a mixed-severity work list — every prior fixture was Critical-only, so deleting the conjunct kept the suite green — and extends the chain render's wording pins to the new advice. * fix(review): bind sentinel mint and chain to claim identity and fail-closed (#10010) The closure mint and the successor chain read absence and ids in shapes that fabricate history: a cap-stage mismatch in the claim-identity join closed still-standing blockers whose locator outruns the title cap; the mint skipped the anchor's fail-closed predicate, minting over unread territory; the chain's fresh side counted re-minted re-posts as new Criticals; floor-stripped re-voices of previous Criticals were blind to the absence join; long-path subsystems never joined their capped closures; stand-in-named closures joined ambiguously; and the posted divergence sentence misstated the measured window. * fix(review): strip carried ids before windowing the closure-mint joins (#10010) The two closure-mint joins cap the entry title BEFORE `claimLocator` strips the carried id, while the previous list's locators project from id-less, write-capped titles. A re-voiced or re-filed claim whose leading span exceeds `LEDGER_MAX_TITLE` minus the id prefix projects from a window already shortened by the prefix, never meets the previous locator, and the mint records a false closure in the very body whose deferral line still carries the claim — and with a same-file closure in the previous round, the successor chain fires over the fabricated lineage. Both joins now strip the id before the window, capping before locating the way the serializer does; reproduced at lead length 78, where the dash straddles the cap boundary and the new tests go red without the strip. Also lands the queued witness coverage on the sentinel's plumbing: the shed-order test's fixture ids now pass admission, so the closure-shed cascade rung actually runs and is witnessed; the parse-side closure cap is fed a raw marker instead of a serialize round-trip that already capped; the round-cap escape hatch gains its acceptance-side witness (admitted at the cap, refused below it); the side-file closure cap's keeping-the-NEWEST direction is pinned by the rendered ids; and the generation filter's round-membership conjunct gains its two stale-r near-misses. Each witness fails its mutation probe: guard deleted, test red. * fix(review): fail the closure mint closed on id-less re-post channels (#10010) The closure mint's claim-identity defense was an unbounded text-matching surface: one hand-rolled projection per re-posting channel, and four review rounds each patched an entrance the previous patch grew (a moved-path re-file keyed on (file, claim) slips the standing join, a dash-less claim line never meets the whole-body collapse the reroute join projects, a Suggestion-severity entry re-voicing a previous Critical is invisible behind the severity filter — probe-verified in R4-1). The space of re-post shapes cannot be enumerated and closed one entrance at a time. The class fix joins on EXPLICIT IDENTITY: a deferral or reroute entry whose title bears the original finding id keeps that claim standing — severity, path, and wording irrelevant to the readback. An entry that bears none proves nothing about which vanished claim it carries, so the round fails closed and mints no closure at all — the same honesty leg the mint already applies to a partial previous list. The build-side claim-locator join stays for the posting channel's id-less re-voices; both per-channel projection joins are deleted (source net-negative). * fix(review): prove re-post ids and list adoption before minting closures (#10010) * fix(review): withhold the merge ending on the mint's honesty states (#10010) --------- Co-authored-by: qwen-code-ci-bot <qwen-code-ci-bot@users.noreply.github.com> Co-authored-by: qwen-code-dev-bot <qwen-code-dev-bot@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| src | ||
| .gitignore | ||
| index.ts | ||
| package.json | ||
| test-setup.ts | ||
| tsconfig.json | ||
| vitest.config.ts | ||