Repository navigation
refactor(guardrails): resolve the commit convention from docs/conventions/source-control.yaml #9727
Copy link
Copy link
Open
Labels
agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.Fully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.
Description
Parent
Refs #5906
Depends on
Outcome
The commit-subject convention that guardrails enforces (the commit-msg hook, block-convention-violation,
block-noncanonical-commit) resolves from docs/conventions/source-control.yaml. The folder-form
docs/conventions/source-control/commit-convention.yml moves into keys of that file. The old
.claude/source-control.md and the folder form are read only when the YAML lacks the key, for one release.
Decisions
- ADR 0064 Decision 1: a plugin's team settings live in one
docs/conventions/<concern>.yaml, validated by a
JSON Schema atplugins/<plugin>/schemas/<concern>.schema.json(Decision 6), checked in CI by
scripts/check-convention-yaml.sh(Decision 7). Script readers use the shared readerlib/parse-concern-value.sh. - ADR 0075: layers are plugin default <
userConfig< team<home>/<concern>.yaml< personal
<home>/<concern>.local.<ext>; every resolver reports the layer that supplied each value. - Migrate per-skill .claude config files to userConfig, one conventions doc, or the cascade (ADR 0018) #5906 (comment 2026-10-04): each reader keeps reading the old file for one release when the new file is
absent, and this repository keeps its old file until the cleanup slice. - The convention is a policy floor read from the default branch (ADR 0064 Decision 5): the team layer wins.
- The resolver's single source is
lib/resolve-convention-pattern.sh; plugin copies are regenerated with
scripts/sync-shared-copies.sh.
Key interfaces
lib/resolve-convention-pattern.shand its copies,plugins/guardrails/git-hooks/commit-msg-convention.sh,
plugins/guardrails/hooks/block-convention-violation.sh,plugins/guardrails/hooks/block-noncanonical-commit.sh,
docs/conventions/commit-convention.
Done when
-
docs/conventions/source-control/commit-convention.ymlis gone and its values are indocs/conventions/source-control.yaml;scripts/check-convention-yaml.sh --checkexits 0. -
scripts/run-test-file.sh lib/resolve-convention-pattern.test.shexits 0 with cases for: YAML wins, folder form read when the YAML lacks the key, old file read when both lack it. -
scripts/run-test-file.shexits 0 onplugins/guardrails/hooks/block-convention-violation.test.sh,plugins/guardrails/hooks/block-noncanonical-commit.test.shandplugins/guardrails/git-hooks/commit-msg-convention.test.sh. -
scripts/sync-shared-copies.sh --checkexits 0. - The PR body lists each migrated key with its new home and schema.
-
scripts/check-changelog-fragments.sh --check-required origin/mainexits 0.
Out of scope
- The user-private commit convention layer (fix(guardrails): harden the commit-msg hook and add a config-hook install lane #5948).
- Reinstalling installed git hooks and deleting the old file (later slices under Migrate per-skill .claude config files to userConfig, one conventions doc, or the cascade (ADR 0018) #5906).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.Fully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.
Type
Fields
No fields configured for Task.
Activity
melodic-automation-lanes commentedon Oct 24, 2026
Not admitted to the issue lane yet: blocker #9725 is not closed as completed by a listed human or a merge.
revert(guardrails): keep the sync-managed commit-convention.yml
refactor(guardrails): delete the folder-form commit convention file
docs(source-control): name the consumer's well-known commit conventio…