Skip to content

ci: lint PR titles as conventional commits - #11

Merged
krisarmstrong merged 1 commit into
mainfrom
ci/pr-title-lint
Aug 24, 2026
Merged

ci: lint PR titles as conventional commits#11
krisarmstrong merged 1 commit into
mainfrom
ci/pr-title-lint

Conversation

@krisarmstrong

Copy link
Copy Markdown
Contributor

Closes the parity gap noted in #9: foundation was the only fleet repo without the Lint PR Title gate that seed, stem and niac all require, so nothing enforced the conventional-commit title format the commit convention and release tooling depend on.

Ports the sibling title-lint.yml verbatim, with one deliberate omission.

Why the lint-issue-title job is left out

seed's version of this workflow has a second job that validates issue titles and, on failure, adds a status: needs-info label. foundation carries only the nine default GitHub labels — no status: needs-info — so that job would fail on the label write rather than on the title it is meant to check. Porting it would need the fleet's label taxonomy created here first, which is a separate decision.

Why PR body lint is NOT ported

I checked before porting it, and it would have deadlocked the repo. seed/stem/niac's pr-body-lint.yml requires four headings and a linked issue:

const requiredHeadings = ["## Summary", "## Linked Issue", "## Testing Evidence", "## Security and Release Checklist"];
if (!/(Fixes|Closes|Resolves|Related to)\s+#\d+/i.test(body)) { ... }

foundation has 1 issue total, and none of the three PRs merged today (#7, #9, #10) reference one — all three would have been blocked by a required check. The sibling repos have active issue trackers; this one does not, so the same workflow means something very different here.

That is a workflow-policy call, not a mechanical port, so it is your decision rather than mine:

  • Adopt it — every foundation change gets an issue first, matching the fleet exactly.
  • Adopt a trimmed version — keep the headings, drop the linked-issue requirement.
  • Leave it — title lint plus CI Complete is the gate; body discipline stays a convention.

Next step (needs admin, not in this PR)

Once merged, Lint PR Title becomes requirable. I'll add it alongside CI Complete in branch protection.

Verification

$ actionlint -ignore 'SC2129'
(exit 0, no output)

$ zizmor .github/workflows/title-lint.yml
No findings to report. Good job! (2 suppressed)

This PR's own title exercises the gate.

foundation was the only fleet repo without the Title Lint gate seed, stem and
niac all require, so nothing enforced the conventional-commit format that
release tooling and the commit convention depend on.

Ports the sibling workflow verbatim except for its lint-issue-title job, which
labels offending issues `status: needs-info`. foundation carries only the
default GitHub label set, so that job would fail on the label write rather
than on the title it is meant to check.

PR *body* lint is deliberately not ported — see the PR discussion.
@krisarmstrong
krisarmstrong merged commit 63bff51 into main Aug 24, 2026
5 checks passed
@krisarmstrong
krisarmstrong deleted the ci/pr-title-lint branch August 24, 2026 21:36
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