fix: validate the default Forgejo squash subject #19

Merged
jercik merged 1 commit from fix/forgejo-squash-subject into main 2026-10-28 07:00:59 +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 22s
Checks / quality-checks (24.15.0) (pull_request) Successful in 28s
Checks / qc-result (pull_request) Has been skipped
Review / Review (pull_request_target) Successful in 2m37s
6e3c7140e0

Review 01M60MGWXMPEERDVJJ7M3EXWSZ — head 6e3c7140e0b3944415f236652ae807b45040b694

Review — j4k-oss/fta-check @ dc17915c3a

Scope: diff against base tree 860910bf40aa
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 forward-references an unseen suffix and dropped the squash context

  • claim: 01M60MJH5YP11TWSPPDQ29ZB33
  • 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 01M60MK4Z9MMD8Z37BZ8TX29CT · valid: Grounded (exact) anchor: '# Keep the bare-title check: the suffix could hide an empty subject.' The comment calls the suffix 'the suffix', as if the reader already knew it. The reviewer reports, having read the whole file, that the suffix first appears only in the next block's comment ('Forgejo's default squash subject appends the pull request number.'). That account is coherent and nothing in the batch contradicts it. So at this point in the file, the reason for the check can't be understood without reading ahead. That is a real clarity cost, and the fix is small, so the core defect holds at low severity. Two supporting arguments are weaker. First, 'Keep' does not clearly narrate a change: as a directive telling maintainers not to remove a check that looks redundant, it is durable guidance. So the state-durable-truth objection is not established. Second, restoring the 'Squash:' label is optional. The second comment already implies that the PR title becomes the squash subject, so a reader would not misread why the title is checked. Only the parallel with 'Rebase:' is lost. The proposed rewrite keeps the needed meaning (an empty title hidden behind the suffix) and introduces the suffix where it is used, so it is acceptable. The smallest sufficient fix is to introduce the suffix in place, e.g. "# Check the bare title too: the ' (#N)' suffix checked below would hide an empty title." The squash label is optional.
  • disposition: none

The comment above the first title check says "Keep the bare-title check: the suffix could hide an empty subject." A maintainer reading top to bottom meets "the bare-title check" and "the suffix" before any suffix appears; the suffix is only introduced by the next block's comment ("Forgejo's default squash subject appends the pull request number."). "Keep" also reads as a reply to an earlier version of the file rather than a statement of what the check is for (human-facing-writing-style: state durable truth, not change narration). The diff removed the previous comment "Squash: the PR title becomes the target branch's subject.", which was the only line saying why the PR title is checked at all, while the later commit loop keeps its parallel "Rebase: ..." label. Correction: restore the label and state the check's purpose, e.g. "# Squash: the PR title becomes the target branch's subject. Check it bare as well: the ' (#N)' suffix checked below would hide an empty title." This keeps the why (empty-subject hiding) and the squash/rebase parallel, and the second comment stays as is. I examined the full commit-msg.yml in the tree and the diff (one file changed); I did not run the workflow or scripts/check-msg.sh, so the claim that the suffix hides an empty subject is taken from the comment, not verified.

Other claims

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

Coverage

Coverage pass: 01M60MGWXSP3YQ9BQ2MZBA3BRC
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
writing-quality whole default claims-emitted 1 no
unix-cli whole default no-claims 1 no
  • test-trimming — skipped-by-dispatch: no tests changed
  • restated-sets — skipped-by-dispatch: no enumerated or duplicated sets changed
  • project-docs — skipped-by-dispatch: no documentation changed
  • use-effect — skipped-by-dispatch: no React code changed
  • module-design — skipped-by-dispatch: no code changed
  • aposd-plain — skipped-by-dispatch: no code changed
  • react — skipped-by-dispatch: no React code changed
<!-- review:summary --> **Review** `01M60MGWXMPEERDVJJ7M3EXWSZ` — head `6e3c7140e0b3944415f236652ae807b45040b694` # Review — j4k-oss/fta-check @ dc17915c3a47 Scope: diff against base tree `860910bf40aa` 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 forward-references an unseen suffix and dropped the squash context - claim: `01M60MJH5YP11TWSPPDQ29ZB33` - 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 `01M60MK4Z9MMD8Z37BZ8TX29CT` · valid: Grounded (exact) anchor: '# Keep the bare-title check: the suffix could hide an empty subject.' The comment calls the suffix 'the suffix', as if the reader already knew it. The reviewer reports, having read the whole file, that the suffix first appears only in the next block's comment ('Forgejo's default squash subject appends the pull request number.'). That account is coherent and nothing in the batch contradicts it. So at this point in the file, the reason for the check can't be understood without reading ahead. That is a real clarity cost, and the fix is small, so the core defect holds at low severity. Two supporting arguments are weaker. First, 'Keep' does not clearly narrate a change: as a directive telling maintainers not to remove a check that looks redundant, it is durable guidance. So the state-durable-truth objection is not established. Second, restoring the 'Squash:' label is optional. The second comment already implies that the PR title becomes the squash subject, so a reader would not misread why the title is checked. Only the parallel with 'Rebase:' is lost. The proposed rewrite keeps the needed meaning (an empty title hidden behind the suffix) and introduces the suffix where it is used, so it is acceptable. The smallest sufficient fix is to introduce the suffix in place, e.g. "# Check the bare title too: the ' (#N)' suffix checked below would hide an empty title." The squash label is optional. - disposition: none > The comment above the first title check says "Keep the bare-title check: the suffix could hide an empty subject." A maintainer reading top to bottom meets "the bare-title check" and "the suffix" before any suffix appears; the suffix is only introduced by the next block's comment ("Forgejo's default squash subject appends the pull request number."). "Keep" also reads as a reply to an earlier version of the file rather than a statement of what the check is for (human-facing-writing-style: state durable truth, not change narration). The diff removed the previous comment "Squash: the PR title becomes the target branch's subject.", which was the only line saying why the PR title is checked at all, while the later commit loop keeps its parallel "Rebase: ..." label. Correction: restore the label and state the check's purpose, e.g. "# Squash: the PR title becomes the target branch's subject. Check it bare as well: the ' (#N)' suffix checked below would hide an empty title." This keeps the why (empty-subject hiding) and the squash/rebase parallel, and the second comment stays as is. I examined the full commit-msg.yml in the tree and the diff (one file changed); I did not run the workflow or scripts/check-msg.sh, so the claim that the suffix hides an empty subject is taken from the comment, not verified. ## Other claims - grounding-pending (0) - ungrounded (0) - rejected (0) - duplicate-of (0) - unadjudicated (0) ## Coverage Coverage pass: 01M60MGWXSP3YQ9BQ2MZBA3BRC 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 | | writing-quality | whole | default | claims-emitted | 1 | no | | unix-cli | whole | default | no-claims | 1 | no | - test-trimming — skipped-by-dispatch: no tests changed - restated-sets — skipped-by-dispatch: no enumerated or duplicated sets changed - project-docs — skipped-by-dispatch: no documentation changed - use-effect — skipped-by-dispatch: no React code changed - module-design — skipped-by-dispatch: no code changed - aposd-plain — skipped-by-dispatch: no code changed - react — skipped-by-dispatch: no React code changed
@ -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 forward-references an unseen suffix and dropped the squash context

The comment above the first title check says "Keep the bare-title check: the suffix could hide an empty subject." A maintainer reading top to bottom meets "the bare-title check" and "the suffix" before any suffix appears; the suffix is only introduced by the next block's comment ("Forgejo's default squash subject appends the pull request number."). "Keep" also reads as a reply to an earlier version of the file rather than a statement of what the check is for (human-facing-writing-style: state durable truth, not change narration). The diff removed the previous comment "Squash: the PR title becomes the target branch's subject.", which was the only line saying why the PR title is checked at all, while the later commit loop keeps its parallel "Rebase: ..." label. Correction: restore the label and state the check's purpose, e.g. "# Squash: the PR title becomes the target branch's subject. Check it bare as well: the ' (#N)' suffix checked below would hide an empty title." This keeps the why (empty-subject hiding) and the squash/rebase parallel, and the second comment stays as is. I examined the full commit-msg.yml in the tree and the diff (one file changed); I did not run the workflow or scripts/check-msg.sh, so the claim that the suffix hides an empty subject is taken from the comment, not verified.

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

<!-- review:claim:01M60MJH5YP11TWSPPDQ29ZB33 --> **low** — Bare-title check comment forward-references an unseen suffix and dropped the squash context > The comment above the first title check says "Keep the bare-title check: the suffix could hide an empty subject." A maintainer reading top to bottom meets "the bare-title check" and "the suffix" before any suffix appears; the suffix is only introduced by the next block's comment ("Forgejo's default squash subject appends the pull request number."). "Keep" also reads as a reply to an earlier version of the file rather than a statement of what the check is for (human-facing-writing-style: state durable truth, not change narration). The diff removed the previous comment "Squash: the PR title becomes the target branch's subject.", which was the only line saying why the PR title is checked at all, while the later commit loop keeps its parallel "Rebase: ..." label. Correction: restore the label and state the check's purpose, e.g. "# Squash: the PR title becomes the target branch's subject. Check it bare as well: the ' (#N)' suffix checked below would hide an empty title." This keeps the why (empty-subject hiding) and the squash/rebase parallel, and the second comment stays as is. I examined the full commit-msg.yml in the tree and the diff (one file changed); I did not run the workflow or scripts/check-msg.sh, so the claim that the suffix hides an empty subject is taken from the comment, not verified. lens `writing-quality` · arm `default` · tally 1 valid / 0 invalid / 0 uncertain claim `01M60MJH5YP11TWSPPDQ29ZB33` of review `01M60MGWXMPEERDVJJ7M3EXWSZ`
Author
Owner

The adjacent block immediately explains that Forgejo appends the pull request number and constructs that suffix, so the forward reference resolves locally and unambiguously. Together these comments explain why both nearby checks exist. “Keep” is durable guidance against removing the apparently redundant bare-title check; it does not depend on an earlier revision. Repeating the squash label or spelling out (#N) here is optional polish, rather than a missing or materially unclear explanation. The motivating invalid input is an empty subject such as fix:, so restoring wording about an empty title would also be less precise. Independent inspection of the generated file and canonical template confirms this context; no source correction is required.

<!-- gh-feedback:reply-to:208795 --> The adjacent block immediately explains that Forgejo appends the pull request number and constructs that suffix, so the forward reference resolves locally and unambiguously. Together these comments explain why both nearby checks exist. “Keep” is durable guidance against removing the apparently redundant bare-title check; it does not depend on an earlier revision. Repeating the squash label or spelling out (#N) here is optional polish, rather than a missing or materially unclear explanation. The motivating invalid input is an empty subject such as fix:, so restoring wording about an empty title would also be less precise. Independent inspection of the generated file and canonical template confirms this context; no source correction is required.
jercik marked this conversation as resolved
jercik merged commit d753d9224f into main 2026-10-28 07:00:59 +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/fta-check!19
No description provided.