docs(plan): tracks B+G skeleton — 16 tasks in five groups, interfaces pinned

The header, global constraints, file structure, the interface block every task
builds against, the group/ownership table and the merge notes. Task sections
are drafted next.

Also corrects the spec's architecture section: the engineering tools compose
the generic contract members the way gear/keyway/titleblock already do, so only
four operations (xref_attach, xref_manage, image_attach, drawing_export_dwg)
need contract members and an implementation per engine.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FKFStjEFzpGyLq5bMpWxTd
This commit is contained in:
Umut CAN
2026-09-22 14:56:37 +03:00
co-authored by Claude Opus 5
parent 5ff66b641f
commit c97be8fc40
2 changed files with 321 additions and 2 deletions
@@ -78,6 +78,8 @@ engineering/mech/
views.py the view engine: silhouette, hidden lines, section, detail
dimension.py dimension intents per feature → laid-out DIMENSION calls
draw.py async draw_*(backend, …) — the only module that touches a backend
primitives.py the typed primitive descriptions the pure modules emit
(Line, Arc, Circle, Poly, HatchArea, DimIntent, Role → layer)
xdata.py ACADMCP_MECH payload: the part model written onto the drawing
critique.py the six mech_* critique focuses
standards/
@@ -99,12 +101,22 @@ engineering/sheet/
extract.py attributes/XDATA → CSV (always) / XLSX (optional dependency)
refs.py xref attach/list/reload/bind/detach, image attach
backends/contracts/mech.py (new) part/view/dimension/standard-part/annotation members
backends/contracts/sheet.py (new) frame/titleblock/revision/bom/xref/image/dwg members
backends/contracts/refs.py (new) xref_attach, xref_manage, image_attach, drawing_export_dwg
server.py SECTION 21 (6) · SECTION 22 (3) · SECTION 23 (5) · SECTION 24 (11)
scripts/smoke_mech_com.py live COM execution of every new COM path, once
```
**Only four new contract members.** Corrected while planning, 2026-09-22: the
existing engineering tools (`gear_draw_*`, `keyway_draw_*`,
`titleblock_apply_iso_a3`) are **not** contract members — they take the backend
and compose the generic ones (`entity_create_*`, `dimension_*`, `block_define`,
`entity_set_xdata`). Every mechanical, annotation, parts-list and frame tool
follows that pattern, so it is written **once** and works on both engines by
construction. Only the four operations that genuinely differ per engine become
contract members with an implementation each: `xref_attach`, `xref_manage`,
`image_attach`, `drawing_export_dwg`. This removes two contract files, halves
the backend work, and keeps the capability map to the three keys of §12.
The split that matters: **`part.py`, `features.py`, `views.py`, `dimension.py`
and everything under `standards/` are pure** — no backend, no async, no DXF.
They take numbers and return primitive *descriptions* (typed tuples: lines,