Skip to content

feat(guardrails): enforce a user-private commit convention only where the team tracks none #9776

Description

@kyle-sexton

Parent

Refs #5948

Depends on

Outcome

An operator can gate their own commits in a repository whose team tracks no commit convention, without changing
the repository's tracked files: a subject_pattern (one POSIX ERE) in the personal layer
<home>/source-control.local.yaml (gitignored, or excluded through .git/info/exclude) applies only when the
team layer sets none, and is never merged with a team pattern.

Decisions

  • Owner, 2026-10-13: fallback-only; a user pattern applies only when the team tracks none and never weakens or
    merges with a team pattern. Amend the resolver's policy-floor header and docs/conventions/commit-convention
    together, and test all three consumers: block-noncanonical-commit, the Claude Code content gate
    (block-convention-violation) and the commit-msg hook.
  • ADR 0075: the personal layer is <home>/<concern>.local.<ext>, and a personal value may only tighten a policy
    floor. Adding enforcement where the team sets none is tightening. A git hook cannot read userConfig, so the
    personal file is the source.
  • Owner standing direction §10, 2026-10-31: person-approval holds against our own actors come off during the
    throughput phase. This change only adds a fallback gate and touches no secret, billing or destructive host
    action, so the done-when item asking the PR body for Hold: a human merges this is dropped.

Key interfaces

  • lib/resolve-convention-pattern.sh (canonical) and copies, docs/conventions/commit-convention, the three
    consumers above.

Done when

  • scripts/run-test-file.sh lib/resolve-convention-pattern.test.sh exits 0 with cases: personal pattern used when the team sets none; team pattern used and personal ignored when both exist; neither gives no enforcement.
  • scripts/run-test-file.sh exits 0 on plugins/guardrails/hooks/block-noncanonical-commit.test.sh, plugins/guardrails/hooks/block-convention-violation.test.sh and plugins/guardrails/git-hooks/commit-msg-convention.test.sh, each with a personal-layer case.
  • grep -n "local" docs/conventions/commit-convention/README.md prints the amended layer rule, and the resolver header states the fallback-only personal layer.
  • scripts/sync-shared-copies.sh --check exits 0.
  • scripts/check-changelog-fragments.sh --check-required origin/main exits 0.

Activity

  1. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    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 #9774 is not closed as completed by a listed human or a merge; blocker #9727 is not closed as completed by a listed human or a merge.

  3. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed on Oct 24, 2026
  4. melodic-automation-lanes commented on Oct 31, 2026

    @melodic-automation-lanes
    Contributor

    This records a re-fire of an earlier refusal, not a new refusal. The lanes kill switch stopped run 41221402842, the work-resolve-issue run that agent-ready started, before it did any work; that run ended at 2026-10-31T17:04:41Z. work-unblock has now removed and added agent-ready back to start a fresh run. A kill-switch refusal is no fault in this issue or the lanes, so it never counts against later re-fires; after limits.limit-stops-per-issue of them since a person last added agent-ready or a run last reported, work-unblock waits longer before each one, up to 24 hours.

  5. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 31, 2026
  6. github-actions commented on Oct 31, 2026

    @github-actions
    Contributor
    No description provided.
  7. github-actions commented on Oct 31, 2026

    @github-actions
    Contributor
    No description provided.
  8. melodic-automation-lanes commented on Nov 1, 2026

    @melodic-automation-lanes
    Contributor

    The lanes App's pull request #11697 for this issue was closed without merging. work-unblock removed status: ready and agent-ready, so the hourly triage sweep sends it back to intake triage, which decides what work is left and admits it again.

  9. removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 1, 2026
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

    priority: mediumReal value, no hard deadline; normal backlog flow.

    Fields

    No fields configured for Feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions