Repository navigation
fix: 公開日検査の部分差し戻しを互換な組合せで解決する - #145
Merged
Merged
Conversation
個別の差し戻しが時間枠を消費すると、一部だけ古い版になった lock を install 直後の組合せへ復元し、条件を満たす直接依存の更新まで取り消していた。 また、復元用の固定を外した Cargo が不要な補助依存を取り除くと、 有効な lock でも install 直後の版がないことを理由に復元失敗としていた。 従来の60秒の復旧枠のうち最大40秒を使い、未解消の目標と成功済みの到達先を 同時に固定する最終解決を追加する。残り20秒は選択的な復元に確保する。 元の要件・install 前の下限・最終 age と OSV の検査は維持し、監査中の 外部変更を観測していれば全体を解き直さない。復旧自体の失敗も隠さない。 復元の主対象と補助依存を区別し、復元済みの対象から元の lock で到達できて 元の系列が残らない補助依存だけは除去を認める。主対象の欠落は引き続き拒否する。 実 cargo と偽レジストリで修正前の失敗を再現し、最終監査の成功と直接更新の保持、 補助依存の剪定、外部編集の保護を検証した。利用文書の英語版と日本語版も更新する。
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
owayo
added a commit
that referenced
this pull request
Nov 12, 2026
Cargo が受理する `= 1.*`、`^ 1.x`、`~ 1.2.X` を読み飛ばしていた問題と、選択的復元で主対象の版が消える問題を修正します。 演算子付き wildcard の解析で半角スペースを許可し、更新後も演算子・空白・wildcard の形を保持します。タブや全角空白を新たに受理しません。マニフェストの解析、候補選択、書き戻し、再解析、再実行まで回帰テストで確認します。 選択的復元では、巻き戻しで追加した別系列の版(discarded)も再解決対象に含めます。広い版要求を持つ依存が旧系列を使い続けると、一時固定を外した際に主対象の復元先が不要として削除されていました。現在の lock に存在する crates.io の ID だけを取得元付きで重複なく指定し、独立した差し戻しと無関係な版を保持します。主対象と補助依存の区別、補助依存の剪定条件、元の場所での `--locked` 検証は維持します。 README、エコシステム、復元の説明は英日を更新し、8言語の公式仕様との監査記録を追加しました。既定の Cargo install のコマンドは変更しません。 検証: - 修正前の wildcard の取りこぼしと、実物 Cargo+偽 local-registry による主対象の復元失敗を再現 - wildcard の round-trip と復元の回帰テストに成功。独立した差し戻し、重複 ID、既に消えた ID も確認 - 最新 main を取り込んだ後のローカル `make ci` が成功(fmt-check / clippy / 2,998件成功・失敗0件・既定の除外1件) - `astro-sight` の最終差分レビューで API 変更・未使用シンボル・未解決の影響なし - 最終 head の GitHub CI 全7ジョブ成功(Linux・macOS の Quality、配布対象5環境のビルド。Windows はテストを含む) #141 の最終組合せ解決と補助依存剪定(#145)、pnpm の未対応引数の修正(#143)を取り込み済みです。
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.
概要
Cargo の公開日検査で個別の差し戻しの時間が足りず、一部だけ古い版になった場合、適用可能な直接依存の更新も取り消されていました。復元に使っていた60秒枠を共有し、未解消の差し戻し先と成功済みの到達先をまとめて固定する最終解決を追加します。最大40秒を解決に使い、従来の選択的復元に20秒を残します。
また、復元用の一時固定を外した Cargo が不要な補助依存を除去すると、正しい解決でも「install-time version に戻らなかった」として全体復旧へ進んでいました。復元の主対象と補助依存を区別し、元の依存範囲内で不要になった補助依存だけは剪定を許可します。明示的な主対象の欠落や、同系列の別版への置換は許可しません。
維持する条件
検証
mise exec -- cargo fmt --all -- --check: passmise exec -- cargo clippy --locked --all-targets -- -D warnings: passmise exec -- cargo test --locked --quiet: 2951 passed、1 ignoredastro-sight review --git: API 変更・未解決の呼び出し元・死コードなし--locked受理を確認報告の実プロジェクトの manifest / lock は添付されていないため、固定した公開日を持つ最小再現で検証しています。
Closes #141