Skip to content

Drive pdm.lock and poetry.lock rewrites through one lock_fragments driver instead of two mirrored triads #1844

Closed

Description

[agent] Filed by the scheduled architecture audit (audit-core). Register: register.

Kind: refactor. Register ID: A05.

Problem

utils/pdm_lock.rs and utils/poetry_lock.rs each carry the same driver around utils::lock_fragments:

  • Poetry has rewrite_poetry_lock / _with_edits / _in / _all / _all_with_version / _batch / _steps: poetry_lock.rs L426-L731.
  • PDM has the mirror: pdm_lock.rs L136-L353.
  • The test modules are mirrored too. parse_reuse_equivalence_tests and batch_equivalence_tests exist in both files, and the "fragments changed shape" test exists three times (lock_fragments L595, pdm_lock L921, poetry_lock).

The _steps loops have already drifted:

Inside lock_fragments itself, fragment pairing is written three times, and the copies disagree on how uniqueness is counted:

  • pair_fragments L191-L210 counts non-overlapping matches on both sides.
  • the finish loop L316-L336 checks old in the text and new in the spliced result.
  • rewrite_batch L473-L495 counts overlapping sole_occurrences.
  • The shape-change length check is repeated at L198, L322 and L477.

Proposed change

  • Move the _steps, _all and _with_edits drivers into lock_fragments, generic over a small per-format value: plan, mutate, fragments_in.
  • Delete the per-format wrappers and the PoetryLockRewrite/PoetryLockParse aliases.
  • Have finish and rewrite_batch call one pairing helper.
  • Keep one copy of each equivalence test, parameterized over both formats.

Size

Three files (lock_fragments.rs, pdm_lock.rs, poetry_lock.rs), plus call-site renames in redirect/pdm.rs, redirect/poetry.rs, vendor/pypi_pdm.rs and vendor/pypi_poetry.rs. About −250 net lines.

Acceptance criteria

  • Every pdm/poetry exact-bytes test passes unchanged, including the batch and parse-reuse equivalence tests (kept once, run for both formats).
  • The duplicated shape-change test is kept once, in lock_fragments.
  • No user-visible change.

Activity

  1. added
    arch-auditFiled by a scheduled architecture audit routine (see the architecture review discussion)
    refactorStructural change: duplicated code or logic, missing abstraction, layering, dead code
    on Oct 29, 2026
  2. mikolalysenko commented on Oct 29, 2026

    @mikolalysenko
    CollaboratorAuthor

    [agent] Triaged: priority:p1 (PyPI-family: poetry/pdm), refactor with no user-visible change. It overlaps with #1847, which also touches utils/poetry_lock.rs, but the two have different causes, so they're not clustered.


    Generated by Claude Code

  3. mikolalysenko commented on Nov 1, 2026

    @mikolalysenko
    CollaboratorAuthor

    [agent] Claiming this issue (single-issue cluster; root cause: pdm_lock and poetry_lock each carry a mirrored driver around lock_fragments, and lock_fragments pairs fragments three ways). Branch: agent/fix-lock-fragments-driver. Claim-ID: 2026-11-01T00:21:01Z-6da843


    Generated by Claude Code

  4. mikolalysenko commented on Nov 1, 2026

    @mikolalysenko
    CollaboratorAuthor

    [agent] Draft PR: #1898


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent:triagedarch-auditFiled by a scheduled architecture audit routine (see the architecture review discussion)priority:p1refactorStructural change: duplicated code or logic, missing abstraction, layering, dead code

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions