Skip to content

docs(skills): record CI gating and worktree failure modes - #994

Merged
castrojo merged 1 commit into
testingfrom
docs/session-learnings
Aug 7, 2026
Merged

docs(skills): record CI gating and worktree failure modes#994
castrojo merged 1 commit into
testingfrom
docs/session-learnings

Conversation

@castrojo

@castrojo castrojo commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Captures patterns discovered while reviewing and merging the open PR queue. Each cost real investigation time, so each is written back as a timeless rule rather than a session note.

ci

  • Fork PRs report zero checks until a maintainer approves the run — indistinguishable from "queued". Added the detection and approval commands.
  • A type: string input is truthy in an if: even when its value is "false", so gating on the bare input fails open. Compare == 'true' explicitly.
  • Jobs that call a reusable workflow reject continue-on-error, so such a job either gates or is absent — it cannot be made advisory.
  • A needs: entry without always() makes dependents skipped rather than failed; the two look identical in the UI and have different fixes.

release-artifacts

  • A stream tag is a claim that a digest passed its gate, not proof. Added a verify-the-digest procedure.
  • A promotion job reported skipped while its stream tag still advances means something outside the gate is publishing it — build-time tag computation is the usual source.
  • Explicit rule against re-pointing or deleting a published stream tag to "repair" this; that is user-visible and belongs to a human.

worktrees

  • Tooling that excludes .worktrees by absolute path component matches everything when run from inside a worktree. A validator passing with a zero-file count is failing, not succeeding. This actually happened once chore: enforce isolated worktrees for feature work #980 mandated worktrees.
  • Added the ## Red Flags and ## Verification sections the skill was missing.

Validation

just check, validate-docs.py (13 skills, 39 Markdown files), pre-commit run --all-files all pass. Line budgets: ci 149/180, release-artifacts 95/180, worktrees 127/180, AGENTS.md unchanged at 128/150.

Docs-only; no image build.

Captures patterns found while reviewing the open PR queue, each of which
cost investigation time before being understood.

ci: fork PRs report zero checks until a maintainer approves the run, which
is indistinguishable from queued. String-typed workflow inputs are truthy
in an `if:` even when set to "false", so gating on the bare input fails
open. Reusable-workflow calls reject `continue-on-error`, so such a job
either gates or is absent. A `needs:` entry without `always()` makes
dependents skip rather than fail.

release-artifacts: a stream tag is a claim that a digest passed its gate,
not proof. Resolve the digest and trace it to a passing run. A promotion
job reported as skipped while its stream tag still advances means
something outside the gate is publishing it.

worktrees: tooling that excludes `.worktrees` by absolute path component
matches everything when run from inside a worktree, so a validator can
report success having checked zero files.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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