This is the record of an abcd-managed repository

abcdBetav0.16.2 · 2026-11-06

Development record

Lab finding C6 (lab-260831131349-976575f, base sha 976575f9): `sanitizeRuleBody` (internal/core/rules/rules.go) indents a continuation line only when it begins with `#`, so every other continuation line of a multi-line rule body renders flush-left and un-bulleted — a multi-line rule reads as a bullet followed by loose paragraphs, a continuation beginning with `- ` forges a sibling rule bullet, and the `#` case gets a single space. Reproduced at v0.7.0 with `abcd rules`. The code comment states the threat model backwards ("only a continuation line would sit flush-left"): every continuation line does, because `Validate` accepts a bare newline and the normaliser turns CR, LS and PS into one. The fix indents every continuation line two spaces (the markdown list-item continuation), keeps the sanitiser a fixed point, and defends the line-start contract the host-side parser splits on (`## ` flush-left); no bundled default carries a newline, so only multi-line repo overrides re-inject once.

issueresolvedminoriss-2609012039227456

Lab finding C6 (lab-260831131349-976575f, base sha 976575f9): sanitizeRuleBody (internal/core/rules/rules.go) indents a continuation line only when it begins with #, so every other continuation line of a multi-line rule body renders flush-left and un-bulleted — a multi-line rule reads as a bullet followed by loose paragraphs, a continuation beginning with - forges a sibling rule bullet, and the # case gets a single space. Reproduced at v0.7.0 with abcd rules. The code comment states the threat model backwards ("only a continuation line would sit flush-left"): every continuation line does, because Validate accepts a bare newline and the normaliser turns CR, LS and PS into one. The fix indents every continuation line two spaces (the markdown list-item continuation), keeps the sanitiser a fixed point, and defends the line-start contract the host-side parser splits on (## flush-left); no bundled default carries a newline, so only multi-line repo overrides re-inject once.

Grounds

  • pursued: the defect was the i > 0 arm firing only on "#"; indenting every continuation is the smallest change that keeps a body inside its bullet and keeps the pass idempotent

Frontmatter

idiss-2609012039227456
typeissue
lifecycleresolved
severityminor