Skip to content

vendored-sync.yaml is now a fourth de-facto shared file with no drift protection #209

Description

@realmarcin

From the review of the #198 sweep (TraitMech#196, MediaIngredientMech#166, CommunityMech#302).

All three spokes now carry .github/workflows/vendored-sync.yaml, and the executable part is byte-identical: I diffed the retry blocks across TraitMech, MediaIngredientMech and CommunityMech and they match exactly. Only the comments differ, naming each repo's local gate.

Nothing enforces that. The file is not on check_vendored_sync.sh's FILES list — and it could not usefully be, because the canonical hub (CultureMech) has no copy: as the hub it has no check_vendored_sync.sh and no vendored-sync job at all.

So the guard against vendored drift is itself now triplicated with no guard. That is the same shape as CommunityMech#278, which observes that check_vendored_sync.sh has no canonical copy in the hub either. Two files in the same mechanism now share the same hole.

Measured on 2026-08-02

file TraitMech MediaIngredientMech CommunityMech on the drift list?
scripts/check_vendored_sync.sh 04674a58… 04674a58… 04674a58… no (#278)
.github/workflows/vendored-sync.yaml retry block identical identical identical no (this issue)
scripts/.vendored_canon_ref 6be694f3… 6be694f3… 6be694f3… n/a — it is the pin

The fleet is consistent right now. The point is that it will stay consistent only by hand.

Why it is not urgent

Divergence here degrades gracefully. If one repo's copy drifts, that repo's guard behaves differently — it does not corrupt data or produce a false pass in the others. And CultureMech's nightly vendored-fleet-audit still compares the files that are on the list.

Options

  1. Accept it and document that the workflow is intentionally per-repo, so a future reader does not assume it is synchronised.
  2. Give the mechanism a canonical home in the hub. CultureMech would carry reference copies of check_vendored_sync.sh and vendored-sync.yaml that it does not itself execute, purely as the diff target — resolving ci: bump actions/upload-artifact from 4.6.2 to 7.0.1 #278 and this together. The oddity is a hub holding a file it never runs.
  3. Move the shared logic out of the workflow into the checker script, so there is one place to keep in sync rather than two. Blocked by the same problem: the checker has no canonical copy either, which is exactly why the retry was put in the workflow in the first place.

(2) is the only option that actually closes both. Worth deciding alongside #278 rather than separately, since neither is fixable without the other.

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