Skip to content

issue-index: a third malformed row (#1003) — unescaped pipes make it a 9-cell row, and no checker can see cell count #1059

Description

@localai-bot

Third malformed row in .agents/issue-index.md in one day, same class each time, none of them caught by a gate.

Found on origin/main at b493f4981 while merging main into #991. Row for #1003 (ORACLE-LLAMACPP-REPIN-STOCK, arrived with #1051) splits into 10 parts where a well-formed 4-column row splits into 6 — four unescaped | characters inside the Title cell. It renders as a 9-cell row.

The class

A well-formed row | a | b | c | d | splits into exactly 6 parts on unescaped pipes. Today's three defects:

Row Parts Defect Caught by
#995 (dup 1) 7 unescaped | in a code span nothing
#995 (dup 2) 5 missing trailing | nothing
#1003 10 four unescaped | nothing

The first two were repaired in #1025 / #1022, and were only found because check-agent-record.py happened to red on a duplicate key and I ran a histogram while investigating. Nothing in the gate set measures cell count, so a malformed row is invisible until a human looks.

An unescaped | inside a code span is the natural way to write a shell pipeline in a Title cell — git diff ... | grep ... — so this will keep recurring. It is not carelessness; it is the obvious way to write the thing.

Proposed fix

Add a cell-count assertion to check-agent-record.py:

bad = [(n, len(re.split(r"(?<!\\)\|", l)))
       for n, l in enumerate(rows, 1)
       if len(re.split(r"(?<!\\)\|", l)) != 6]

Cheap, exact, and it catches all three of today's shapes. Needs a red-before test per AGENTS.md "Changing the rules or a checker" — the three rows above are ready-made fixtures.

Note check-agent-record.py exits on the first error, which is how defects 2 and 3 stayed hidden behind defect 1. Worth having it report all findings rather than the first.

Not fixed in flow

Deliberately: this is a checker-semantics change and wants its own spec, red-before test and fresh review — the in-flow rule explicitly excludes changes that alter checker semantics. The one-line row repair could ride along, but repairing the row without the gate just resets the clock until the next shell pipeline gets written into a Title cell.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions