os-aidd-lint tier1 gap: ListItems drops hard-wrapped bullet continuations #144

Closed
opened 2026-07-26 21:53:17 +00:00 by jared · 3 comments
Owner

Context

Found by /os-aidd-lint:mine-blindspots (f7c52e1) on 2026-07-26 — causal bucket (a): "rule exists, logic gap" — tier-1 cop bug, not new rule.

Summary

The ListItems parser only recognizes list markers on the physical line itself. A continuation line (hard-wrapped from the preceding item) has no marker and is never appended to the preceding item's text. Every cop built on ListItems therefore only sees the FIRST physical line of each bullet.

Root cause

Code: plugins/os-aidd-lint/lib/aidd_lint/list_items.rb:7

MARKER = /\A(\s*)([-*+]|\d+\.)\s+(.+?)\s*\z/ requires a list marker on the line. Wrapped continuations have no marker, don't match, and are never appended. Affected cops: TrailingProhibition, StepBulk's check_bullets.

Observed missed instances

  • os-backlog/skills/capture/SKILL.md line 12-13
  • os-backlog/skills/route/SKILL.md line 49
  • os-adr/skills/find/SKILL.md lines 28-40 (bullet body on lines 31-36 entirely invisible)
  • os-context/prompts/session-start/10-orchestration.md lines 44-48

Fix direction

Fold continuation lines into the preceding item before cops consume it.

## Context Found by `/os-aidd-lint:mine-blindspots` (f7c52e1) on 2026-07-26 — causal bucket (a): "rule exists, logic gap" — tier-1 cop bug, not new rule. ## Summary The `ListItems` parser only recognizes list markers on the physical line itself. A continuation line (hard-wrapped from the preceding item) has no marker and is never appended to the preceding item's text. Every cop built on `ListItems` therefore only sees the FIRST physical line of each bullet. ## Root cause Code: `plugins/os-aidd-lint/lib/aidd_lint/list_items.rb:7` `MARKER = /\A(\s*)([-*+]|\d+\.)\s+(.+?)\s*\z/` requires a list marker on the line. Wrapped continuations have no marker, don't match, and are never appended. Affected cops: `TrailingProhibition`, `StepBulk`'s `check_bullets`. ## Observed missed instances - os-backlog/skills/capture/SKILL.md line 12-13 - os-backlog/skills/route/SKILL.md line 49 - os-adr/skills/find/SKILL.md lines 28-40 (bullet body on lines 31-36 entirely invisible) - os-context/prompts/session-start/10-orchestration.md lines 44-48 ## Fix direction Fold continuation lines into the preceding item before cops consume it.
Author
Owner

Caveat on the fix directions in this batch, 2026-07-26.

The code citations in #143-#147 were independently verified against source. The "fix direction" lines were NOT — they were written from reading the regexes, not from testing a fix. Treat them as starting points, not specifications. Specifically: the hard-wrap cop fires on the same wrapped paragraphs these gaps involve (49 hits in os-doc-hygiene/skills/check/SKILL.md alone). If the house style is genuinely one-logical-line-per-paragraph, then hard-wrap is the primary offense and several of #143-#147 are partly downstream of files violating it. That may change the sequencing — consider whether fixing hard-wrap compliance across the corpus reduces the surface of the other gaps before implementing per-cop joins.

Caveat on the fix directions in this batch, 2026-07-26. The code citations in #143-#147 were independently verified against source. The "fix direction" lines were NOT — they were written from reading the regexes, not from testing a fix. Treat them as starting points, not specifications. Specifically: the `hard-wrap` cop fires on the same wrapped paragraphs these gaps involve (49 hits in os-doc-hygiene/skills/check/SKILL.md alone). If the house style is genuinely one-logical-line-per-paragraph, then `hard-wrap` is the primary offense and several of #143-#147 are partly downstream of files violating it. That may change the sequencing — consider whether fixing hard-wrap compliance across the corpus reduces the surface of the other gaps before implementing per-cop joins.
Author
Owner

This was generated by AI during triage.

Same finding as #143: HardWrap's paragraph builder (hard_wrap.rb append_line/BLOCK_START) already folds bullet continuation lines into the bullet's paragraph and its autocorrect joins them onto one physical line. Confirmed live against os-backlog/skills/capture and route/SKILL.md — HardWrap fires on the cited wrapped bullets. Running corpus HardWrap autocorrect first removes today's observed ListItems misses. The ListItems.MARKER gap itself is still real for any file with a lettered/wrapped bullet before hard-wrap is applied — worth fixing, but land it together with #147 (same MARKER regex, same Item struct) rather than separately, since #147 widens the marker and #144 restructures how items are assembled; doing them apart risks rework.

> *This was generated by AI during triage.* Same finding as #143: HardWrap's paragraph builder (hard_wrap.rb append_line/BLOCK_START) already folds bullet continuation lines into the bullet's paragraph and its autocorrect joins them onto one physical line. Confirmed live against os-backlog/skills/capture and route/SKILL.md — HardWrap fires on the cited wrapped bullets. Running corpus HardWrap autocorrect first removes today's observed ListItems misses. The ListItems.MARKER gap itself is still real for any file with a lettered/wrapped bullet before hard-wrap is applied — worth fixing, but land it together with #147 (same MARKER regex, same Item struct) rather than separately, since #147 widens the marker and #144 restructures how items are assembled; doing them apart risks rework.
Author
Owner

Implemented via os-sdlc pipeline (test-writer -> red -> programmer -> green -> ac-lint -> lint -> reviewer APPROVE). Merged to main in 87f5779.

Implemented via os-sdlc pipeline (test-writer -> red -> programmer -> green -> ac-lint -> lint -> reviewer APPROVE). Merged to main in 87f5779.
jared 2026-08-01 18:12:58 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
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
jared/cc-os#144
No description provided.