You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Script output parser swallowed errors from tools with columnar or wrapped output. A live user report on a Laravel package showed phpstan's indented table produced a single line ?: violation whose description was 500 chars of separator noise truncated mid-identifier ("🪪 mis"). Root cause: parse_script_output matched regexes without per-line lstrip, so indented rows fell into the unmatched bucket, then the entire unmatched output was joined and head-truncated to 500 chars — eating the preamble and dropping the signal.
Per-line lstrip before regex match so 11 Method Foo::bar()... matches _LINE_CONTENT.
Stateful continuation-joining: a numbered line opens a violation; following unnumbered, non-separator lines concatenate onto its description (captures phpstan/pest/psalm wrapped messages).
Table separator rows (----, ====, ____) dropped before parsing.
When nothing parses, the tail of unmatched lines is preserved as up to 20 individual violations (each capped at 500 chars) instead of a single head-truncated blob.
Stderr is now parsed too. Numbered results from either stream are preferred; tails are combined across streams as a last resort.
End-to-end: phpstan output that previously produced 1 violation, line=None, description="------ ... Illuminate\\Database\\El" now produces 3 violations, line=11, line=11, line=18, description=<full error text>.
Added
output: passthrough rule field. Escape hatch for tools whose output format defies the continuation heuristic. Skips structured parsing and emits one violation carrying the tail of stdout+stderr. Opt-in per rule; default unchanged.
bully lint --strict flag. For CI callers. Exit non-zero on any non-pass status (untrusted, config error). Default posture stays advisory (exit 0 on untrusted) so the PostToolUse hook never blocks edits on infra issues. Exit codes: 0 pass, 2 blocked, 3 strict-only non-pass.
release-bully skill. Codifies the version-bump + tag + publish flow so future release sessions don't have to rederive which fields move together.
Changed
Violation rendering in blocked stderr drops the line ?: placeholder. When a violation has no line number, the header is - [rule]: description instead of - [rule] line ?: description. Removes a rough edge on script rules that run whole-file tools and can't attribute a specific line.