Skip to content

The vendored theme records no upstream ref, so it cannot be moved, diffed, or audited #28

Description

@ptr727

Found while reviewing this pipeline against the new fleet hugo type (ptr727/ProjectTemplate#560), which asserts hugo.vendored.provenance.

What is there

themes/PaperMod is 125 tracked files, including the upstream repo's own .github/workflows/build-check.yml, committed wholesale in a single commit (b7c5590 Import blog.insanegenius.com as a Hugo site).

  • No .gitmodules; git submodule status is empty.
  • No recorded upstream ref, tag, or commit anywhere. themes/PaperMod/theme.toml carries name, license, and homepage only, no version.
  • No Dependabot ecosystem covers it. .github/dependabot.yml:3 states github-actions is the only ecosystem this repo ships, and :4 records the reason as "the theme is vendored rather than pulled by a manager".

The vendoring decision itself is stated in three places and is defensible. The gap is narrower than the decision: nothing records which upstream commit this is a copy of.

Why it matters

Without a recorded ref there is no way to answer "what changed upstream since we took this", "does this carry a fix we need", or "is our local modification still necessary". The fleet already requires a 40-hex SHA for every action and a committed state file for every upstream pin. A 125-file vendored tree with no recorded origin is the same hazard with a much larger surface.

This is not hypothetical here. TODO.md:86 records that PaperMod uses APIs Hugo deprecated in 0.158, so --panicOnWarning fails on the theme rather than on content, and two layouts/ overrides exist to keep that flag usable. Deciding whether those overrides can be dropped means diffing against a specific upstream revision, and there is currently nothing to diff against.

Two ways to close it

  1. Record the provenance. A committed record naming the upstream repository and the exact commit the copy was taken from, plus the local modifications and why. Satisfies the check, keeps the vendoring, cheapest.
  2. Convert to a submodule. Stronger: it pins by construction and brings Dependabot's gitsubmodule ecosystem, so theme bumps become normal dual-targeted bot PRs the merge-bot auto-merges and CI validates. Costs a --recurse-submodules on every checkout in the pipeline, and the --panicOnWarning overrides still need their own home.

Option 1 is enough to clear the check. Option 2 is what actually keeps the theme current, and is worth considering given the deprecation situation above.

Recorded in the hub registry as a driftNote against hugo.vendored.provenance until it clears.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions