Skip to content

refactor(guardrails): resolve the commit convention from docs/conventions/source-control.yaml #9727

Open

Description

@kyle-sexton

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 at plugins/<plugin>/schemas/<concern>.schema.json (Decision 6), checked in CI by
    scripts/check-convention-yaml.sh (Decision 7). Script readers use the shared reader lib/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.sh and 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.yml is gone and its values are in docs/conventions/source-control.yaml; scripts/check-convention-yaml.sh --check exits 0.
  • scripts/run-test-file.sh lib/resolve-convention-pattern.test.sh exits 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.sh exits 0 on plugins/guardrails/hooks/block-convention-violation.test.sh, plugins/guardrails/hooks/block-noncanonical-commit.test.sh and plugins/guardrails/git-hooks/commit-msg-convention.test.sh.
  • scripts/sync-shared-copies.sh --check exits 0.
  • The PR body lists each migrated key with its new home and schema.
  • scripts/check-changelog-fragments.sh --check-required origin/main exits 0.

Out of scope

Activity

  1. added theissue type on Oct 24, 2026
  2. melodic-automation-lanes commented on Oct 24, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane yet: blocker #9725 is not closed as completed by a listed human or a merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.

    Type

    Fields

    No fields configured for Task.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions