anchor-type-classification
Notes
- 2026-10-01 ruling (Dustin, MAN-9238, 13104 Quail Creek Ct, Silver Spring MD, permit 1170262): permit scope text decides wall vs channel anchor. Permit read ‘Installation of 2 Wall Anchors’; plan detail S002 labelled them ‘C-CHANNEL TYPE WALL ANCHOR’ and the intake parse produced ANC-CHAN qty 2. The 9/30 field photo confirm then added an empty ANC-WALL qty 0 line (+ an ADD-BKFL qty 0 twin), which was also the auto-validation blocker (‘1 SOW line missing production days’). Fix: ANC-CHAN line re-pointed to ANC-WALL through supabase_write_service.update_sow_line (qty 2, as-built 2, 1 production day, notes ‘channels’ array renamed ‘anchors’ so the wall-anchor module renders WA1/WA2 cards), two empty lines deleted, auto-validation re-run (13/13, Ready for Cert), cert v1 (channel anchors, drafted + discarded by Jacob 02:21 ET) trashed, cert v2 drafted for owner review. No invoice had been drafted; live invoice calc follows the corrected scope. Follow-ups chipped: intake parser weighting of plan labels vs permit text; field-upload confirm creating qty-0 production-division lines without production days; confidence_routing P15 live total always failing (multiplies qty by the catalog division string).
- Enforced in code 2026-10-01 (entirely-api 4cf7c2d): _SOW_PROMPT carries an ANCHOR CLASSIFICATION rule (the permit decides; a “C-CHANNEL TYPE WALL ANCHOR” detail is the wall anchor’s plate; verbatim anchor_permit_wording / anchor_plan_wording quotes per anchor item) and services/permit_parser.normalize_anchor_products() is the deterministic backstop: permit wording retargets ANC-CHAN to ANC-WALL (or the reverse), keeps the quantity, moves per-unit specs between anchor_specs.channels and .anchors, stamps normalized_from; a permit naming both or neither decides nothing; the only exception is plan wording naming a channel anchor system as the product; model notes are never evidence. Runs inside parse_sow_items and again with the permit’s scope text in intake resolve_sow_items + approval re-parse, the portal Reparse Permits path, the Slack client lane and permit-revision scope proposals. Tests: tests/test_sow_anchor_type.py (MAN-9238 permit text + S002 label replay asserts ANC-WALL qty 2). No existing project data changed.
- 2026-10-01 follow-through — the cert package now prints the parsed anchor specs instead of catalog defaults: Rod Length, Plate Height (AFF), Earth Plate Depth (BG), Wall type, Torque and spacing rows from permit_parser’s anchor_specs, plus one data card per anchor (WA1/WA2 labels, Rear Wall, 12 ft 8 in, 3.75 ft, 5.1 ft on MAN-9238). Template defaults (16×16 / 12×12 plates, 0.75 in rod) stay only where the plans gave no value — accepted, not fabricated from the project. entirely-api 554355c + 8a65c7b; MAN-9238 draft v5 is the first package rendered this way (v2–v4 trashed, restorable).