Skip to content

fix(security): pin caller ref to a tag, pass secrets explicitly (DEC-081) - #58

Merged
omar-nahhas merged 1 commit into
mainfrom
fix/pin-caller-ref-explicit-secrets
Aug 5, 2026
Merged

omar-nahhas merged 1 commit into
mainfrom
fix/pin-caller-ref-explicit-secrets

Conversation

@omar-nahhas

Copy link
Copy Markdown
Contributor

Closes C4.

Corrected scope

I reported this as affecting 4 repos. It is 24 — verified by enumerating the org: 25 repos carry the plugin-e2e caller, 24 of them use secrets: inherit. That includes agent-zero-new-plugin-template, so every future plugin inherited it.

Why the tag

@main isn't merely mutable — it means every merge to the devkit goes live in 24 repos' CI immediately, unreviewed. Not hypothetical; three fleet-wide regressions in this SPEC came through exactly that path:

  • DEC-079 — closed 18 sync PRs, four already green
  • DEC-073 — every consumer's e2e green while shipping 0 traces
  • DEC-075 — every Dependabot PR structurally red

A tag is movable by the same principal who could push main, so it is not a boundary against an insider. What changes is the default: main advances automatically on every merge; a tag only on a deliberate act. Forgetting to bump fails safe.

Why explicit secrets

inherit forwards every repo- and org-level secret — including ones added later and ones the workflow never declares. The reusable workflow declares exactly three, all required: false, so the explicit list is a strict superset of what it consumes and breaks nothing. It also closes a gap I can't otherwise verify: org secrets aren't enumerable without admin:org, and inherit would forward those too.

devkit-sync.caller.yml already passed secrets explicitly — this aligns the other caller rather than inventing a convention.

Rated honestly

Confidentiality: low. One org member, zero forks, no outside collaborators; the material at risk is a read-only package token plus an App key whose job vanished when the devkit went public.

Integrity / blast radius: medium. One unreviewed merge changes CI in 24 repos with no canary and no rollback boundary. Fixed as change management, not as a breach.

Sequencing

This template names @v2.1.6, and that tag does not exist yet — I merged the release changelog and called it released without tagging. The tag must be cut on this commit or later, or it would ship a caller still pointing at @main.

Propagation to 24 repos is a separate, staged rollout — one repo first, verify green, then the rest.

…081)

Reach was 24 repos, not 4 — including agent-zero-new-plugin-template, so every
future plugin inherited it.

@main does not just mean "mutable": it means every merge to the devkit goes live
in 24 repos CI immediately and unreviewed. Three fleet-wide regressions already
came through that path — DEC-079 closed 18 sync PRs (4 already green), DEC-073
left every consumer green while shipping 0 traces, DEC-075 made every Dependabot
PR structurally red. A tag is movable by the same principal, so it is not a
boundary against an insider; what changes is the DEFAULT. main advances on every
merge, a tag only on a deliberate act, and forgetting to bump fails safe.

secrets: inherit forwards every repo- AND org-level secret, including ones added
later and ones the workflow never declares. The reusable workflow declares
exactly three, all required:false, so the explicit list is a strict superset of
what it consumes and breaks nothing. It also closes a gap I could not otherwise
verify: org secrets are not enumerable without admin:org, and inherit forwards
those too. devkit-sync.caller.yml already did this — this aligns the other caller
rather than inventing a convention.

Rated honestly: confidentiality LOW (one org member, zero forks, no outside
collaborators; the exposed material is a read-only package token plus an App key
whose job vanished when the devkit went public). The real cost is integrity and
blast radius — one unreviewed merge changes CI in 24 repos with no canary.
@omar-nahhas
omar-nahhas force-pushed the fix/pin-caller-ref-explicit-secrets branch from cd59814 to 4adbc20 Compare August 5, 2026 00:25
@omar-nahhas
omar-nahhas merged commit c77ed9b into main Aug 5, 2026
1 check passed
@omar-nahhas
omar-nahhas deleted the fix/pin-caller-ref-explicit-secrets branch August 5, 2026 00:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant