You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Rewritten 2026-09-12. Item 1 (bound direction) moved to #118, which was closed on 2026-09-15: its premise did not hold. Item 3 is done. What is left is one item, and it is blocked.
Quality ceilings in the diagnosis reports, none blocking, each with an understood path.
Open
Holdback stories would be one hop. A holdback chain would name the responsible user constraints plus the direct incompatibility; one caused by a chain of third-party bounds — "julia held back because A needs B needs old-C" — would need the conflict-story machinery pointed at a holdback rather than a cluster.
Unreachable until holdbacks exist at all (#52), so "one hop" is a ceiling on something unbuilt. File a case under it when one turns up.
Also recorded here
Two limitations of the dependency chains, disclosed during #86 and kept here because #85 is closed. Both are cases where a real report reading badly is the signal to act, which is what this issue is for.
Some conflicts get no story at all. The chain follows a forced descent and stops at the first pass that starves something, so a conflict whose explanation needs joint reasoning past that point gets only its requirement and availability lines. Measured at 3 of 99 conflicts across two sweeps. A direct-edge-only rule would have been far worse (36% with nothing to say), so this is the tail of a good heuristic rather than a broken one.
Where several packages starve at once, which one is named is a preference. Bounds are symmetric, so simultaneous starvation is the usual case. The order is: not a requirement, then touches a package the query emptied, then shortest, then by name. Deterministic and reasonable, but a different choice would give a different, equally true story.
Closed out
Bound direction → Carry bound direction in PkgInfo, to extend upstream fixes past the user's own constraints #118, now closed. PkgInfo still records compatibility symmetrically, and that turns out not to cost the page anything. A conflict line states an implication, not authorship: A 1.0 constrains C to 1–2 is true whichever side's Compat.toml declared the bound, because the other reading is the contrapositive and so the same clause — checked by entails, not merely asserted. And the one place authorship matters, the addressee of an upstream fix, already has direction: it reads PkgData.compat from the provider rather than the symmetric matrix. What Carry bound direction in PkgInfo, to extend upstream fixes past the user's own constraints #118 would have bought is naming which side declared a bound, where the high-order bit — these versions cannot coexist — is symmetric and already stated truthfully.
One framing note carried forward: this issue was written against #57's reports, and #57 was superseded rather than merged. The shipped reports are #105/#107's — which changes nothing about the item above, a property of holdbacks rather than of the report architecture.
Quality ceilings in the diagnosis reports, none blocking, each with an understood path.
Open
Holdback stories would be one hop. A holdback chain would name the responsible user constraints plus the direct incompatibility; one caused by a chain of third-party bounds — "julia held back because A needs B needs old-C" — would need the conflict-story machinery pointed at a holdback rather than a cluster.
Unreachable until holdbacks exist at all (#52), so "one hop" is a ceiling on something unbuilt. File a case under it when one turns up.
Also recorded here
Two limitations of the dependency chains, disclosed during #86 and kept here because #85 is closed. Both are cases where a real report reading badly is the signal to act, which is what this issue is for.
Closed out
PkgInfostill records compatibility symmetrically, and that turns out not to cost the page anything. A conflict line states an implication, not authorship:A 1.0 constrains C to 1–2is true whichever side'sCompat.tomldeclared the bound, because the other reading is the contrapositive and so the same clause — checked byentails, not merely asserted. And the one place authorship matters, the addressee of an upstream fix, already has direction: it readsPkgData.compatfrom the provider rather than the symmetric matrix. What Carry bound direction in PkgInfo, to extend upstream fixes past the user's own constraints #118 would have bought is naming which side declared a bound, where the high-order bit — these versions cannot coexist — is symmetric and already stated truthfully.mark_necessary!column split this issue proposed. Constraints are one map keyed by kind, and the diagnosis emits oneAction{P}(kind, pkg)per excluding kind, so a fix names the specific constraint. Cover the cheapest fixes by exact products, one conflict per leading menu #107 went further: the cheapest repairs are decomposed into independent blocks and covered by exact products, with completeness asserted per report.One framing note carried forward: this issue was written against #57's reports, and #57 was superseded rather than merged. The shipped reports are #105/#107's — which changes nothing about the item above, a property of holdbacks rather than of the report architecture.
🤖 Maintained with Claude Code.