Skip to content

conventional-commits reports a valid non-bumping commit as non-conforming #97

Description

@lesnik512

This was generated by AI during triage.

Under the conventional-commits strategy, every head commit that yields no bump reports the same status and reason:

{"status": "no_conforming_commit", "reason": "No conforming Conventional Commits type found in commit message."}

That's accurate for a message like Fix typo in README. It's wrong for a valid Conventional Commit whose type doesn't bump, such as ci: ..., docs: ..., chore: ... or test: ...: the commit conforms, its type just isn't in minor_types or patch_types. A user reading the reason would think their commit message is malformed.

This repo hits it on most pushes now that semvertag.yml dogfoods with conventional-commits (#96), since most squash titles are docs:, ci: or test:.

Cause: ConventionalCommitsStrategy.decide returns Bump.NONE for both cases, and the use case builds NoBump from the strategy's fixed no_bump_status and no_bump_reason class attributes, so the two cases can't be told apart downstream.

Constraints:

  • Status tokens are a frozen wire contract (schema_version "1.0"; action.yml maps every non-created status to no-bump). Whether a new token like no_bumping_type is acceptable, or the status stays no_conforming_commit and only the reason changes, is the main decision.
  • The reason must stay semvertag-controlled text. Naming the parsed type (ci) in it is repo-supplied text, so it should be limited to a validated type token (the strategy already checks types against ^[a-z]+$) or left out. See the field audit pinned in test: pin RunResult's fields so a new one forces a redaction audit #92.
  • branch-prefix may have the same shape. A merge commit whose source branch prefix isn't mapped to a bump probably also reports a generic no-bump reason. Worth checking whether the fix should be strategy-agnostic.

Revisit trigger: none; actionable once the status-token question is decided.

Activity

  1. lesnik512 commented on Oct 4, 2026

    @lesnik512
    MemberAuthor

    This was generated by AI during triage.

    Triage Notes

    Grilled with the maintainer; being implemented now.

    Established:

    • Both strategies are affected. branch-prefix reports a merge commit whose source branch has no configured prefix (e.g. Merge branch 'docs/typo' into main) as no_merge_commit, "Latest commit on default branch is not a merge commit.", which is false. Same cause: decide returns only a Bump, so the why is lost and each strategy has one fixed status and reason.
    • Only status tokens are frozen; reason is human-facing and may be reworded. ADR-0002's "fixed status tokens and reasons" is corrected to match CONTEXT.md (and the reason changes already shipped in feat: read v-prefixed tags and keep their prefix on the next tag #93 and feat: say how many tags were skipped when no_tags fires on a tagged repo #95).
    • New tokens for the misleading cases. A token never changes meaning, but new ones may be added; action.yml maps every non-created status to no-bump, so Action users see no change.
    • decide returns Bump | Decline(status, reason). The no_bump_status / no_bump_reason class attributes go away; the use case turns a Decline into the NoBump outcome.
    • Reasons are fixed strings, never quoting the commit type or branch prefix (see the field audit pinned in test: pin RunResult's fields so a new one forces a redaction audit #92).
    Strategy When Status Reason
    conventional-commits subject doesn't match the grammar no_conforming_commit Commit subject is not a Conventional Commit.
    conventional-commits valid commit, type not in minor_types/patch_types no_bumping_type (new) Commit type is not configured to bump.
    branch-prefix not a merge commit, patch_on_non_merge_commit off no_merge_commit Latest commit on default branch is not a merge commit.
    branch-prefix merge commit, no configured prefix in its subject unmapped_branch_prefix (new) Merge commit's source branch has no configured prefix.

    Release as 0.10.0 with a ## Upgrading note listing the new tokens.

  2. added
    ready-for-agentFully specified, ready for an AFK agent
    and removed
    needs-triageMaintainer needs to evaluate this issue
    on Oct 4, 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

    enhancementNew feature or requestready-for-agentFully specified, ready for an AFK agent

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions