T-MW8E-mc-collapse-operations-table-parsers
Status: closed/done · Impact: medium · Complexity: medium
Two places hand-roll a ## Operations section walk plus pipe-splitting and must
“agree on what counts as the Operations table”:
plugin/lib/model/entity.ts:466parseOperationsTable(plus itssplitRowhelper atplugin/lib/model/entity.ts:531)..claude/skills/project-check/check_entities.ts:251readOperationsHeaderCells, which “MirrorsparseOperationsTable’s section-and-table scan” and feeds the Operations-table column-drift warning (checkOperationsTableShape).
Model the ## Operations section as a table(...) in each definition’s contract
(or a shared spec) and read typed rows from the projection, deleting both
hand-rolled walkers so there is one source of truth for the Operations table.
This can use the existing table() content leaf and projection; it benefits from
but does not strictly require W1.
Acceptance criteria
Section titled “Acceptance criteria”- AC-1: The
## Operationssection is modeled as atable(...)contract (per-definition or a shared spec), and bothentity.tsandcheck_entities.tsread typed Operations rows from the projection — one source of truth. - AC-2:
parseOperationsTable+splitRowinentity.tsandreadOperationsHeaderCellsincheck_entities.tsare removed (no second hand-rolled## Operationswalk + pipe-split remains). - AC-3: The existing Operations-table drift warning behavior is preserved —
checkOperationsTableShapestill flags the same legacy-header / column-drift cases and still treats absence (no## Operationstable) as not-drift; theproject-checkandentitytests stay green.
Out of scope
Section titled “Out of scope”- The touchpoint and placeholder tables — those are W2
(T-2LBP-mc-typed-cell-rewire-touchpoints) and W3
(T-G93C-mc-migrate-scan-placeholders). Only the
## Operationstable is in scope here.