fix: validate the default Forgejo squash subject #15

Merged
jercik merged 1 commit from fix/forgejo-squash-subject into main 2026-10-28 07:20:25 +00:00
Owner

Checks the default squash subject including Forgejo's appended PR number, so a title cannot pass the 100-character limit and produce an overlong subject after merging. Regenerated with published Align 17.3.13 from the shared fix.

Checks the default squash subject including Forgejo's appended PR number, so a title cannot pass the 100-character limit and produce an overlong subject after merging. Regenerated with published Align 17.3.13 from [the shared fix](https://code.j4k.dev/j4k/align/pulls/964).
fix: validate the default Forgejo squash subject
All checks were successful
Checks / reuse (pull_request) Has been skipped
Checks / pr-flow-canary (pull_request) Has been skipped
commit-msg / commitlint (pull_request) Successful in 6s
Checks / quality-checks (26.12.1) (pull_request) Successful in 25s
Checks / quality-checks (24.15.0) (pull_request) Successful in 37s
Checks / qc-result (pull_request) Has been skipped
Review / Review (pull_request_target) Successful in 2m20s
337e905bc9

Review 01M60NJZF2ZJM5EZR30SN8R8XA — head 337e905bc9e5af12076e9e171e9ea263eb1d4cc0

Review — j4k-oss/askpplx @ d8ed1e4dd2

Scope: diff against base tree 48e66dac3bd6
Review finished: 3 succeeded, 0 failed, 7 skipped by dispatch
Triage: settled
Facts: current review-wide projection

Computed under:

{
  "abandonment": "abandonment-v1",
  "anchor_recipe": 1,
  "batch_policy": "batch-v1",
  "coverage": "coverage-v3",
  "dispatch_policy": "dispatch-v2",
  "grounder_version": 1,
  "grounding_read_rule": "grounding-read-v1",
  "promotion_policy": "promotion-v1",
  "report": "report-v5",
  "tally": "tally-v1",
  "triage_settle": "triage-settle-v2"
}

Findings (1)

low — Bare-title check comment reads as change history and refers to a suffix not yet introduced

  • claim: 01M60NMF83P2STYV4D93ACJFG2
  • anchor: .forgejo/workflows/commit-msg.yml (snippet)
# Keep the bare-title check: the suffix could hide an empty subject.
  • lens: writing-quality · arm: default
  • verdicts: 1 valid / 0 invalid / 0 uncertain
    • pass 01M60NN03W6X8YRTPJRJF1DHXG · valid: Grounded (exact): the comment reads '# Keep the bare-title check: the suffix could hide an empty subject.' On its own line, 'the suffix' is undefined; per the reviewer's quotes, the next block introduces it ('Forgejo's default squash subject appends the pull request number'). The reviewer also reports, from the diff, that the old label 'Squash: the PR title becomes the target branch's subject.' was removed while '# Rebase: the PR's individual commits land on the target branch.' stayed. So the step now labels the rebase path but not the squash path, which breaks the parallel structure and drops the stated reason for validating the PR title as a commit subject. These quotes are not grounded, but they hang together and match the anchored line's forward reference, so the defect holds. The 'Keep' imperative is the weakest part of the claim. It works as a standing maintainer directive that gives the reason for a non-obvious check, which counts as current fact, not narration of a removed version. On its own it would not show change history. The proposed replacement keeps the rationale (the suffix could hide an empty subject), restores the squash label, and resolves the forward reference ('the suffix below'), so it loses no needed meaning. A smaller fix also works: restore the 'Squash:' label and name the suffix ('the PR-number suffix'). Severity low is right: the code is unaffected and the cost is a moment of reader confusion.
  • disposition: none

The comment above the first title check says "Keep the bare-title check: the suffix could hide an empty subject." A reader of the finished workflow sees an imperative addressed to an editor ("Keep") and a "suffix" that is only introduced by the next block, whose comment is "Forgejo's default squash subject appends the pull request number." The diff also removed the old label "Squash: the PR title becomes the target branch's subject.", so nothing in the step now says that these title checks cover the squash-merge path, while the later comment "# Rebase: the PR's individual commits land on the target branch." still labels the other path. The writing-for-agents skill (State Durable Truth) asks for the current system in timeless present tense and says not to describe a rule by contrasting it with a prior version; "Keep" is that kind of wording. Suggested replacement, which keeps the reason and restores the squash context: "# Squash: the PR title becomes the target branch's subject. Check it bare as well as with the suffix below, because the suffix could hide an empty subject." and leave the next comment as is. I read the full step in .forgejo/workflows/commit-msg.yml and the diff (one file, comment and PR_NUMBER env changes only). Not verified: Forgejo's merge behaviour; the comment's claim about the default squash subject is taken as stated. Low severity: the code is correct and the cost is a slightly confusing comment.

Other claims

  • grounding-pending (0)
  • ungrounded (0)
  • rejected (0)
  • duplicate-of (0)
  • unadjudicated (0)

Coverage

Coverage pass: 01M60NJZF7JS2Q3VXRSGK4P14V
Accounting: complete (all slots terminal; see slot results for failures)
Slot health: healthy

lens part arm unit status runs loss
general-bug whole default no-claims 1 no
unix-cli whole default no-claims 1 no
writing-quality whole default claims-emitted 1 no
  • test-trimming — skipped-by-dispatch: no tests changed
  • restated-sets — skipped-by-dispatch: no enumerated sets or lists restated in the change
  • project-docs — skipped-by-dispatch: no documentation changed
  • use-effect — skipped-by-dispatch: no React code changed; only a CI workflow YAML
  • module-design — skipped-by-dispatch: no code changed; only CI workflow YAML
  • aposd-plain — skipped-by-dispatch: no code changed; only CI workflow YAML
  • react — skipped-by-dispatch: no React code changed; only a CI workflow YAML
<!-- review:summary --> **Review** `01M60NJZF2ZJM5EZR30SN8R8XA` — head `337e905bc9e5af12076e9e171e9ea263eb1d4cc0` # Review — j4k-oss/askpplx @ d8ed1e4dd26f Scope: diff against base tree `48e66dac3bd6` Review finished: 3 succeeded, 0 failed, 7 skipped by dispatch Triage: settled Facts: current review-wide projection Computed under: ```json { "abandonment": "abandonment-v1", "anchor_recipe": 1, "batch_policy": "batch-v1", "coverage": "coverage-v3", "dispatch_policy": "dispatch-v2", "grounder_version": 1, "grounding_read_rule": "grounding-read-v1", "promotion_policy": "promotion-v1", "report": "report-v5", "tally": "tally-v1", "triage_settle": "triage-settle-v2" } ``` ## Findings (1) ### low — Bare-title check comment reads as change history and refers to a suffix not yet introduced - claim: `01M60NMF83P2STYV4D93ACJFG2` - anchor: `.forgejo/workflows/commit-msg.yml` (snippet) ``` # Keep the bare-title check: the suffix could hide an empty subject. ``` - lens: writing-quality · arm: default - verdicts: 1 valid / 0 invalid / 0 uncertain - pass `01M60NN03W6X8YRTPJRJF1DHXG` · valid: Grounded (exact): the comment reads '# Keep the bare-title check: the suffix could hide an empty subject.' On its own line, 'the suffix' is undefined; per the reviewer's quotes, the next block introduces it ('Forgejo's default squash subject appends the pull request number'). The reviewer also reports, from the diff, that the old label 'Squash: the PR title becomes the target branch's subject.' was removed while '# Rebase: the PR's individual commits land on the target branch.' stayed. So the step now labels the rebase path but not the squash path, which breaks the parallel structure and drops the stated reason for validating the PR title as a commit subject. These quotes are not grounded, but they hang together and match the anchored line's forward reference, so the defect holds. The 'Keep' imperative is the weakest part of the claim. It works as a standing maintainer directive that gives the reason for a non-obvious check, which counts as current fact, not narration of a removed version. On its own it would not show change history. The proposed replacement keeps the rationale (the suffix could hide an empty subject), restores the squash label, and resolves the forward reference ('the suffix below'), so it loses no needed meaning. A smaller fix also works: restore the 'Squash:' label and name the suffix ('the PR-number suffix'). Severity low is right: the code is unaffected and the cost is a moment of reader confusion. - disposition: none > The comment above the first title check says "Keep the bare-title check: the suffix could hide an empty subject." A reader of the finished workflow sees an imperative addressed to an editor ("Keep") and a "suffix" that is only introduced by the next block, whose comment is "Forgejo's default squash subject appends the pull request number." The diff also removed the old label "Squash: the PR title becomes the target branch's subject.", so nothing in the step now says that these title checks cover the squash-merge path, while the later comment "# Rebase: the PR's individual commits land on the target branch." still labels the other path. The writing-for-agents skill (State Durable Truth) asks for the current system in timeless present tense and says not to describe a rule by contrasting it with a prior version; "Keep" is that kind of wording. Suggested replacement, which keeps the reason and restores the squash context: "# Squash: the PR title becomes the target branch's subject. Check it bare as well as with the suffix below, because the suffix could hide an empty subject." and leave the next comment as is. I read the full step in .forgejo/workflows/commit-msg.yml and the diff (one file, comment and PR_NUMBER env changes only). Not verified: Forgejo's merge behaviour; the comment's claim about the default squash subject is taken as stated. Low severity: the code is correct and the cost is a slightly confusing comment. ## Other claims - grounding-pending (0) - ungrounded (0) - rejected (0) - duplicate-of (0) - unadjudicated (0) ## Coverage Coverage pass: 01M60NJZF7JS2Q3VXRSGK4P14V Accounting: complete (all slots terminal; see slot results for failures) Slot health: healthy | lens | part | arm | unit status | runs | loss | | --- | --- | --- | --- | --- | --- | | general-bug | whole | default | no-claims | 1 | no | | unix-cli | whole | default | no-claims | 1 | no | | writing-quality | whole | default | claims-emitted | 1 | no | - test-trimming — skipped-by-dispatch: no tests changed - restated-sets — skipped-by-dispatch: no enumerated sets or lists restated in the change - project-docs — skipped-by-dispatch: no documentation changed - use-effect — skipped-by-dispatch: no React code changed; only a CI workflow YAML - module-design — skipped-by-dispatch: no code changed; only CI workflow YAML - aposd-plain — skipped-by-dispatch: no code changed; only CI workflow YAML - react — skipped-by-dispatch: no React code changed; only a CI workflow YAML
@ -94,3 +95,3 @@
base_ref=$(cat "$pr_fields/ref")
# Squash: the PR title becomes the target branch's subject.
# Keep the bare-title check: the suffix could hide an empty subject.

low — Bare-title check comment reads as change history and refers to a suffix not yet introduced

The comment above the first title check says "Keep the bare-title check: the suffix could hide an empty subject." A reader of the finished workflow sees an imperative addressed to an editor ("Keep") and a "suffix" that is only introduced by the next block, whose comment is "Forgejo's default squash subject appends the pull request number." The diff also removed the old label "Squash: the PR title becomes the target branch's subject.", so nothing in the step now says that these title checks cover the squash-merge path, while the later comment "# Rebase: the PR's individual commits land on the target branch." still labels the other path. The writing-for-agents skill (State Durable Truth) asks for the current system in timeless present tense and says not to describe a rule by contrasting it with a prior version; "Keep" is that kind of wording. Suggested replacement, which keeps the reason and restores the squash context: "# Squash: the PR title becomes the target branch's subject. Check it bare as well as with the suffix below, because the suffix could hide an empty subject." and leave the next comment as is. I read the full step in .forgejo/workflows/commit-msg.yml and the diff (one file, comment and PR_NUMBER env changes only). Not verified: Forgejo's merge behaviour; the comment's claim about the default squash subject is taken as stated. Low severity: the code is correct and the cost is a slightly confusing comment.

lens writing-quality · arm default · tally 1 valid / 0 invalid / 0 uncertain
claim 01M60NMF83P2STYV4D93ACJFG2 of review 01M60NJZF2ZJM5EZR30SN8R8XA

<!-- review:claim:01M60NMF83P2STYV4D93ACJFG2 --> **low** — Bare-title check comment reads as change history and refers to a suffix not yet introduced > The comment above the first title check says "Keep the bare-title check: the suffix could hide an empty subject." A reader of the finished workflow sees an imperative addressed to an editor ("Keep") and a "suffix" that is only introduced by the next block, whose comment is "Forgejo's default squash subject appends the pull request number." The diff also removed the old label "Squash: the PR title becomes the target branch's subject.", so nothing in the step now says that these title checks cover the squash-merge path, while the later comment "# Rebase: the PR's individual commits land on the target branch." still labels the other path. The writing-for-agents skill (State Durable Truth) asks for the current system in timeless present tense and says not to describe a rule by contrasting it with a prior version; "Keep" is that kind of wording. Suggested replacement, which keeps the reason and restores the squash context: "# Squash: the PR title becomes the target branch's subject. Check it bare as well as with the suffix below, because the suffix could hide an empty subject." and leave the next comment as is. I read the full step in .forgejo/workflows/commit-msg.yml and the diff (one file, comment and PR_NUMBER env changes only). Not verified: Forgejo's merge behaviour; the comment's claim about the default squash subject is taken as stated. Low severity: the code is correct and the cost is a slightly confusing comment. lens `writing-quality` · arm `default` · tally 1 valid / 0 invalid / 0 uncertain claim `01M60NMF83P2STYV4D93ACJFG2` of review `01M60NJZF2ZJM5EZR30SN8R8XA`
Author
Owner

The immediately adjacent block explicitly says that Forgejo’s default squash subject appends the pull request number, then constructs that suffix. It supplies both the squash context and the meaning of the forward reference locally, so neither explanation is missing. “Keep” is durable maintenance guidance against removing an apparently redundant check; the triage itself recognizes this. Restoring a parallel Squash label or naming the suffix earlier is optional polish, rather than an actionable clarity defect. The suggested claim that the PR title becomes the target branch subject also omits the number this change checks. Independent inspection of this exact generated workflow confirms the local context; no source correction is required.

<!-- gh-feedback:reply-to:208896 --> The immediately adjacent block explicitly says that Forgejo’s default squash subject appends the pull request number, then constructs that suffix. It supplies both the squash context and the meaning of the forward reference locally, so neither explanation is missing. “Keep” is durable maintenance guidance against removing an apparently redundant check; the triage itself recognizes this. Restoring a parallel Squash label or naming the suffix earlier is optional polish, rather than an actionable clarity defect. The suggested claim that the PR title becomes the target branch subject also omits the number this change checks. Independent inspection of this exact generated workflow confirms the local context; no source correction is required.
jercik marked this conversation as resolved
jercik merged commit 3b9a4f9f6f into main 2026-10-28 07:20:25 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
j4k-oss/askpplx!15
No description provided.