remove and rollback each render VendorRevertStep in their own loop, and the loops drifted (remove --preserve-state --dry-run previews a full revert)
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 55/100
調査の方向性
Start with crates/socket-patch-cli/src/commands/vendored_backend/mod.rs, then compare the revert handling loops in commands/remove.rs and commands/rollback.rs. Read the vendored rollback and remove tests named in the acceptance criteria, then add coverage for remove --preserve-state --dry-run --json. Done means dry-run and wet-run emit the same event code and preserved count, with the listed vendored tests passing.
索引モデルが issue の本文から書いたものです。
説明
[agent] Filed by the scheduled architecture audit (audit-cli-tests). Register: register comment.
Kind: refactor (with one suspected behavior drift). Register ID: T16.
Problem
Both commands call VendoredBackend's revert for each ledger key and then turn the VendorRevertStep into events, warnings and counters, each in its own loop:
vendor.rs classifies the same steps two more times (L4537-L4610, L4637-L4710).
The loops have drifted in four ways:
1. Dry run with --preserve-state. Core returns WouldRevert before it checks keep_artifact (vendored_backend/mod.rs L380-L384).``
- rollback handles this with a
WouldRevert if preservearm, which counts the key as preserved. - remove has no such arm. It prints "(artifact preserved)" but emits
Verified/vendor_would_revert/ "vendoring would be reverted on remove" and never bumpsleg.preserved. - So a dry run reports a revert, while the wet run reports
skipped/vendor_state_preserved. - I found this by reading the code; I did not run it, and no remove test covers it.
2. Go-undo warnings.
- remove turns them into per-key
Skippedevents. - rollback turns them into run warnings and drops the key.
3. Drift-keep text.
- remove uses
cause.reason(). - rollback writes its own "lockfile wiring drifted…" text.
4. Failures.
- remove stops at the first failed key.
- rollback collects every failure.
Proposed change
- Add a
WouldPreservestep to corerevert_one(opts.dry_run && opts.keep_artifact). - Give
VendoredBackenda typed per-run tally: reverted, preserved, kept-with-cause, failed and warnings. - Leave remove and rollback with rendering only, in their own verb ("remove" / "roll back again").
- Decide in the PR whether remove keeps stop-at-first-failure. If it does, keep it as an explicit option on the tally driver rather than a second loop.
Size
3 files (vendored_backend/mod.rs, remove.rs, rollback.rs), about −150 lines.
Acceptance criteria
- rollback's vendored tests (
in_process_rollback_vendored.rs,rollback_duality_invariants.rs) and remove's vendored e2e tests pass unchanged. - A new test runs
remove --preserve-state --dry-run --jsonover a vendored entry and asserts the same event code and the samepreservedcount as the wet run.
- 主要言語
- Rust
- スター
- 8
- フォーク
- 2
- 平均マージ
- 18時間 47分
- マージ済み PR(30日)
- 637
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
SocketDev/socket-patch のほかの issue
-
agent:triaged arch-audit priority:p3 refactor
難易度 2/5 1〜3時間 初心者へのやさしさ 83/100
SocketDev/socket-patch#1860 ·
メンテナーはふだん 1 日以内に返信
-
agent:triaged arch-audit priority:p3 refactor
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
SocketDev/socket-patch#1838 ·
メンテナーはふだん 1 日以内に返信
-
arch-audit refactor
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
SocketDev/socket-patch#1987 ·
メンテナーはふだん 1 日以内に返信
-
agent:triaged arch-audit priority:p3 refactor
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
SocketDev/socket-patch#1983 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
agent:triaged arch-audit bug priority:p3
難易度 3/5 半日 初心者へのやさしさ 55/100
SocketDev/socket-patch#1982 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
SocketDev/socket-patch の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
libnativeapi/nativeapi#21 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
longbridge/nsh#804 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
メンテナーはふだん 1 日以内に返信