Skip to content

v1: reject or normalize duplicate artifact sources before collection #2198

Description

@hallerite

Context

collect() currently archives every artifact declaration and stores results in a dict[source, archive]. Duplicate resolved sources therefore consume the byte budget multiple times while later entries silently overwrite earlier archives; differing exclude lists make the result order-dependent.

This was found in post-merge review of #2144 and appeared on #2152 only during its automatic retarget to main; artifacts.py is not part of #2152's current diff. The broader transport security boundary is tracked in #2194 and the durable archival contract in #2189.

Done when

  • Duplicate resolved sources are rejected with a clear error, or normalized with explicitly documented merge semantics before any archive is created.
  • The byte budget corresponds exactly to the returned collection.
  • Differing exclusion rules cannot silently overwrite one another.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions