diff --git a/docs/superpowers/plans/2026-09-16-v1.6-settings-implementation.md b/docs/superpowers/plans/2026-09-16-v1.6-settings-implementation.md index 60a51ea..cb2b59e 100644 --- a/docs/superpowers/plans/2026-09-16-v1.6-settings-implementation.md +++ b/docs/superpowers/plans/2026-09-16-v1.6-settings-implementation.md @@ -2993,7 +2993,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor ## Wave 1 -### Task 1 — `block_insert(attributes=…)` (ezdxf) +#### Track A Task 1 — `block_insert(attributes=…)` (ezdxf) | ID | File | Finding | Disposition | |---|---|---|---| @@ -3007,7 +3007,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W1-T1-08 | tests/test_block_insert_attributes.py | `attributes=None` yields no ATTRIBs headlessly while COM's `InsertBlock` instantiates ATTDEF defaults; refusal types diverged (ValueError vs RuntimeError). | refusal type: fixed-in-task-1 (COM raises the same ValueError); default ATTRIBs: deferred-1.7 (engine divergence on ATTDEF defaults) | | W1-T1-09 | backends/ezdxf_backend.py | `block_explode` drops the ATTRIB text. | fixed-in-task-2 | -### Task 2 — `backends/block_specs.py` +#### Track A Task 2 — `backends/block_specs.py` | ID | File | Finding | Disposition | |---|---|---|---| @@ -3020,7 +3020,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W1-T2-07 | backends/block_specs.py | Refusal messages echo the caller's value unbounded (`got {value!r}`; measured 2 MB messages). | deferred-1.7 (truncate with reprlib) | | W1-T2-08 | backends/block_specs.py | Same as W1-T2-03 (unknown keys such as `rotation` silently dropped). | deferred-1.7 (with W1-T2-03) | -### Task 6 — ISA-5.1 tag grammar +#### Track A Task 6 — ISA-5.1 tag grammar | ID | File | Finding | Disposition | |---|---|---|---| @@ -3032,7 +3032,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W1-T6-06 | tests/data/isa51_tags.json | No fixture row for K (rate of change / control station), M trailing, O readout, B/N/X user-defined readouts. | deferred-1.7 (≈5 rows) | | W1-T6-07 | engineering/pid/tags.py | O/C trailing narrowed to Z-first tags beyond the spec text. | accepted-limitation (documented resolution of a spec/fixture conflict) | -### Task 12 — `engineering/pid/lines.py` +#### Track A Task 12 — `engineering/pid/lines.py` | ID | File | Finding | Disposition | |---|---|---|---| @@ -3046,7 +3046,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor ## Wave 2 -### Task 3 — `block_define` +#### Track A Task 3 — `block_define` | ID | File | Finding | Disposition | |---|---|---|---| @@ -3059,7 +3059,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W2-T3-07 | backends/ezdxf_backend.py | `attdefs or []` turns `{}`/`''` into "no ATTDEFs"; a non-str `name` raises AttributeError. | deferred-1.7 | | W2-T3-08 | backends/ezdxf_backend.py | `block_insert` without `attributes` carries none of the ATTDEF defaults (COM does). | deferred-1.7 (with W1-T1-08) | -### Task 4 — XDATA +#### Track A Task 4 — XDATA | ID | File | Finding | Disposition | |---|---|---|---| @@ -3071,7 +3071,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W2-T4-06 | backends/xdata_specs.py | The reserved-app rule blocks reading `ACAD` by name while the unfiltered read returns it; other AutoCAD-owned apps are writable. | deferred-1.7 | | W2-T4-07 | README.md | Snapshot paragraph contradicted itself; collected-tests drift. | fixed-in-track-A (Task 21) | -### Task 5 — `engineering/pid/xdata.py` +#### Track A Task 5 — `engineering/pid/xdata.py` | ID | File | Finding | Disposition | |---|---|---|---| @@ -3084,7 +3084,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W2-T5-07 | engineering/pid/xdata.py | A non-dict payload is written and can never be read back. | deferred-1.7 | | W2-T5-08 | tests/test_pid_xdata.py | No multi-chunk payload round trip through a backend. | deferred-1.7 (test gap; the path was verified by hand) | -### Task 7 — symbol framework +#### Track A Task 7 — symbol framework | ID | File | Finding | Disposition | |---|---|---|---| @@ -3096,7 +3096,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W2-T7-06 | engineering/pid/symbols.py | `register()` overwrites silently; `list_symbols()` returns variants by reference. | deferred-1.7 | | W2-T7-07 | engineering/pid/geometry.py | `bbox_of` samples arcs at 1° and can under-report by 3.8e-5·r. | accepted-limitation (sub-lineweight) | -### Task 8 — valves +#### Track A Task 8 — valves | ID | File | Finding | Disposition | |---|---|---|---| @@ -3105,7 +3105,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W2-T8-03 | engineering/pid/symbols_valves.py | The diaphragm *body* dome floats 1 mm above the bow-tie. | deferred-1.7 (cosmetic) | | W2-T8-04 | engineering/pid/symbols_valves.py | The `signal` port and the TAG/DESC text share x = 0 above the actuator; a signal line crosses the tag. | accepted-limitation (spec §4.7 placement; a tag/line overlap critique is a 1.7 item, with W2-T9-05) | -### Task 9 — equipment +#### Track A Task 9 — equipment | ID | File | Finding | Disposition | |---|---|---|---| @@ -3117,7 +3117,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W2-T9-06 | engineering/pid/symbols_equipment.py | `air_cooler` fan cross pokes 0.046 mm outside its circle. | deferred-1.7 (cosmetic, ±1.75) | | W2-T9-07 | engineering/pid/symbols_equipment.py | Seven origins are not the bbox centre (spec §4.2). | accepted-limitation (deliberate mounting points; spec text to reconcile) | -### Task 10 — vessels +#### Track A Task 10 — vessels | ID | File | Finding | Disposition | |---|---|---|---| @@ -3132,13 +3132,13 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor ## Waves 3–4 -### Task 11 — `pid_symbol_list` / `pid_symbol_insert` +#### Track A Task 11 — `pid_symbol_list` / `pid_symbol_insert` | ID | File | Finding | Disposition | |---|---|---|---| | W3-T11-01 | engineering/layers.py | `PROCESS-LINE-TEXT` inserted at position 9; spec said "16th entry". | accepted-limitation (count matches; ordinal wording only) | -### Task 13 — `pid_line_draw` +#### Track A Task 13 — `pid_line_draw` | ID | File | Finding | Disposition | |---|---|---|---| @@ -3154,7 +3154,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W3-T13-10 | README.md | Snapshot line edited without the collected-tests figure. | fixed-in-track-A (Task 21) | | W3-T13-11 | server.py | An unknown endpoint handle and a flat waypoint list surface as "Internal error" rather than a named refusal. | deferred-1.7 (with W1-T12-04) | -### Task 14 — `pid_graph` +#### Track A Task 14 — `pid_graph` | ID | File | Finding | Disposition | |---|---|---|---| @@ -3178,7 +3178,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W3-T14-18 | engineering/pid/symbols.py | `strict=False` keeps a diagonal port's local angle under non-uniform scale. | accepted-limitation (unreachable: all 243 catalogue ports are axis-aligned) | | W3-T14-19 | backends/ezdxf_backend.py | `mirrored` is `True` for a tilted INSERT with a negative-z normal (COM twin too). | deferred-1.7 (`flat and z < 0`) | -### Task 15 — deliverables +#### Track A Task 15 — deliverables | ID | File | Finding | Disposition | |---|---|---|---| @@ -3193,7 +3193,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W3-T15-09 | server.py | The three deliverable tools expose only `tolerance`/`scope`, not `label_search`/`include_foreign`. | deferred-1.7 | | W3-T15-10 | engineering/pid/deliverables.py | `signal_lines` counts every edge on a bubble regardless of class. | deferred-1.7 | -### Task 16 — critique focuses +#### Track A Task 16 — critique focuses | ID | File | Finding | Disposition | |---|---|---|---| @@ -3205,7 +3205,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W3-T16-06 | engineering/pid/critique.py | A mechanical block whose name holds a keyword token (`OIL_FILTER`) counts as P&ID content and can fail finalize. | accepted-limitation (spec §9.2 mandates the heuristic; README "Known limitations" states it) | | W3-T16-07 | engineering/pid/critique.py | `_duplicate_tags` scores a text-derived (guessed) tag as a gate-failing error. | deferred-1.7 (warning for `tag_source: text`) | -### Task 17 — `pid_from_spec` +#### Track A Task 17 — `pid_from_spec` | ID | File | Finding | Disposition | |---|---|---|---| @@ -3222,7 +3222,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W4-T17-11 | engineering/pid/spec.py | String-typed optional keys unvalidated (`arrow: "no"` truthy; `number: 123` bare TypeError; `id` with a dot). | deferred-1.7 | | W4-T17-12 | README.md | README showcase half incomplete; gate red. | fixed-in-track-A (Task 21) | -### Task 19 — tag parse, resources, prompt +#### Track A Task 19 — tag parse, resources, prompt | ID | File | Finding | Disposition | |---|---|---|---| @@ -3233,7 +3233,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W4-T19-05 | engineering/pid/tags.py | `equipment_prefixes={}` discarded; non-string values pass. | deferred-1.7 (with W1-T6-05) | | W4-T19-06 | README.md | Release gate red on the collected-tests figure. | fixed-in-track-A (Task 21) | -### Task 18 — `TOOL_PACKS` +#### Track A Task 18 — `TOOL_PACKS` | ID | File | Finding | Disposition | |---|---|---|---| @@ -3244,7 +3244,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W4-T18-05 | tests/test_tool_packs.py | The pack test compares against a hand-copied set, never the registry. | deferred-1.7 (assert against `_registered_tools()` tags) | | W4-T18-06 | server.py | Under `TOOL_PACKS=core` the P&ID prompt and resources are still advertised. | accepted-limitation (spec §12 scopes packs to tools) | -### Task 20 — benchmark v4 +#### Track A Task 20 — benchmark v4 | ID | File | Finding | Disposition | |---|---|---|---| @@ -3254,7 +3254,7 @@ Reading key: `W1-T1-03` = wave 1, Track A Task 1, finding 3. Files are repositor | W4-T20-04 | tests/test_benchmark_v4.py | No test executes `_task_pid_roundtrip`. | deferred-1.7 (Task 6 of the hardening plan runs it by hand) | | W4-T20-05 | benchmarks/README.md | A/B rows said 29 checks over a 26-check report. | fixed-in-track-A (Task 21) | -### Task 21 — docs and smoke +#### Track A Task 21 — docs and smoke | ID | File | Finding | Disposition | |---|---|---|---|