Repository navigation
wayfinder #165: contract lint R1-R5 (guardrail-first) - #157
Merged
Merged
Conversation
|
This pull request introduces a new shared contract lint for Wazoo CI workflows, addressing secrets management and credential access. It defines and enforces five rules (R1-R5) to ensure secure handling of sensitive information in
Reviewers should begin by examining |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
wayfinder #165 — contract lint R1-R5 (guardrail-first)
Implements the shared credential-free CI/secrets contract lint described in
skills/contract-lint/README.md. Blade scaffold (399ffac, R1 rules list +exit 0) now does real work.Rules enforced
deploy-*jobs may only fetchCLOUDFLARE_API_TOKENfrom Infisical, and only by a namedsecret-name; the token must never come from a GitHub secret inside a deploy job.CLOUDFLARE_ACCOUNT_IDmust come from GitHub variables, never secrets.Infisical/secrets-actionfetch must declaresecret-name.placeholderlines allowlisted).CLOUDFLARE_API_TOKEN).Composite action inputs
workflows-dir(default.github/workflows), failsclosed, safe to run on untrusted PRs.
Verification (local, pre-merge)
Ran
lint.sh --diragainst the three service repos' worktrees — all fourdeploy jobs fail exactly as the pre-conversion contract predicts:
wazoo-apici.yml: 6 — deploy-qa/deploy-prod each: unnamed Infisicalfetch (R1),
secrets.CLOUDFLARE_API_TOKEN(R1),secrets.CLOUDFLARE_ACCOUNT_ID(R2)wazoo-consoleci.yml: 9 — deploy-qa/prod same as wazoo-api; deploy-previewadditionally PR-triggered + token secret (R5)
worlds-apici.yml: 4 — deploy-qa/prod token-source (R1) + account id (R2); noInfisical fetch in deploy today (Phase B step 9 applies later)
smoke-qa.yml(all three): cleancaught on all six rules
Merge order / dependents
Workspace-cli lands first.
wazoo-api,wazoo-console,worlds-apithenwire this action pinned to the merged SHA in a PR-only
contract-lintjob.Those consumer PRs will be red pre-conversion and are held for Phase B.
What I could not observe
(
$GITHUB_ACTION_PATHresolution). Verified the bash locally only. Theconsumer wiring PRs exercise this on a real runner.
wspace checkstates for the worktrees used as lint evidence (snapshots mayhave advanced during the session).