docs: record Instrument phase 1 (foundation) in status/backlog; packaging font note

This commit is contained in:
2026-06-10 12:18:39 -04:00
parent eb9c693b58
commit fcc3c0c765
3 changed files with 26 additions and 9 deletions

View File

@@ -223,13 +223,29 @@ status-bar connection pill, themed dialogs. Documented in
`cim_suite/modules/da12/ui/{calibration,com_setup}_dialog.py`,
`packaging/suite.spec`, `pyproject.toml`.
### BL-4 — Dark theme variant · P3 · TODO
*Added 2026-06-02.*
The theme layer was built dark-ready (everything funnels through `tokens.py`). A dark
variant means a second `Color` set + a switch in `apply_theme` and a UI toggle.
Useful for dim control rooms / power users. See `DESIGN-SYSTEM.md` "Adding a dark
theme later."
- **Files:** `cim_suite/core/ui/theme/tokens.py`, `cim_suite/core/ui/theme/__init__.py`, a settings hook.
### BL-4 — Dark theme variant · P3 · DONE
*Added 2026-06-02. Completed 2026-06-10 as part of BL-DS1.*
Delivered as part of the Instrument design system Phase 1 foundation (BL-DS1 below).
### BL-DS1 — Instrument design system Phase 1 (foundation) · P2 · DONE
*Completed 2026-06-10.*
Two-theme token system (light/dark), IBM Plex Sans/Mono fonts bundled, regenerated
QSS from the token layer, theme manager with persistence, all painters migrated to live
tokens, launcher dark/light toggle. See
`docs/superpowers/specs/2026-06-10-instrument-design-system-rollout-design.md`.
### BL-DS2 — Phase 2 theme-toggle signal wiring note · P3 · TODO
*Added 2026-06-10.*
The launcher theme-toggle label refreshes only on its own click — when the toggle
moves into the Phase 2 title bar, wire it to `theme.signals.themeChanged` (mind the
module-global signal lifetime vs widget lifetime, so the widget does not outlive the
signal connection).
### BL-DS3 — Phase 3 microcaps via code, not QSS · P3 · TODO
*Added 2026-06-10.*
Qt ignores `text-transform` in QSS — the microcaps styles (tabs, column headers, group
titles) must be delivered by `.upper()` + `type_styles` fonts in widget code during Phase 3
component work; they cannot be handled in the stylesheet alone.
### BL-5 — Connection pill recolors but label can still go stale · DONE
*Added 2026-06-02. Completed 2026-06-03 as part of [BL-2](#bl-2--connection-status-goes-stale-on-unexpected-disconnect--done).*

View File

@@ -9,7 +9,7 @@ standalone `.exe`) and docs. DA-12 is now **module #1 of the `cim_suite` monorep
— the suite shell (card launcher + `SuiteWindow`) and shared `core` package exist.
**DA-07 ("eLink") was rebuilt as module #2** and **IOModbus as module #3** (a
config-driven Modbus RTU master — same five-layer pattern, against its own simulator;
see Phases 89 below). **657 tests pass across `tests/core`, `tests/da12`,
see Phases 89 below). **818 tests pass across `tests/core`, `tests/da12`,
`tests/da07`, `tests/iomodbus`, and `tests/shell`; ruff is clean.**
What remains is **verification against real DA-12, DA-07, and Modbus hardware**
guided by `docs/HARDWARE-VERIFICATION.md`.
@@ -161,6 +161,7 @@ A standalone build also runs with no Python/VB6/OCX installed:
| 8 — DA-07 module #2 | ✅ | DA-07 ("eLink") rebuilt against the simulator following the DA-12 pattern. Its own pure protocol layer (different wire format: `~<payload><checksum>\r`, little-endian, IEEE-754 floats), Station→Device→Channel domain models, simulator, and 4-tab UI (Station/Devices/Channels/Calibration). Registered in the shell; `--module da07 --simulate` boots. `core` reused as-is. 229 tests pass; ruff clean. **2026-06-03: fixed the DA-07 frame-per-ACK handshake** (rebuild ACK'd nothing, so real hardware loaded only the first frame — the simulator hid it; see HARDWARE-VERIFICATION DA-07 + BL-E1). See `docs/superpowers/specs/2026-06-02-da07-service-tool-rebuild-design.md`. |
| 9 — IOModbus module #3 | ✅ | IOModbus rebuilt against the simulator — a **standard, config-driven Modbus RTU master** (unlike the DA-12/DA-07 streams). Pure protocol layer (Modbus CRC-16, the 11 register data-type codecs, an 8-byte request builder, a transaction-scoped `ResponseAssembler`, and an `IOModbus.txt` catalog parser bundled as a resource), an in-memory Modbus-**slave** simulator, domain models (catalog → discovered devices → live register cells), a timer-stepped **scan + poll** controller (request/response with an `_awaiting` interlock), calibration + logging, and a single-screen UI (comm toolbar / Available Devices / Device Settings + I/O Channels grids / User Alerts). Registered in the shell; `--module iomodbus --simulate` boots and auto-scans the seeded devices. `core` reused as-is. 88 IOModbus tests; full suite 408 green; ruff clean. See `docs/superpowers/specs/2026-06-03-iomodbus-service-tool-rebuild-design.md`. |
| 10 — IOModbus catalog management (Spec #1) | ✅ | JSON user layer merged on load; full import/export of the legacy `IOModbus.txt` format; Catalog menu (Import / Export / **Supported Devices…**); lenient import validation (skips structurally-invalid devices). User-layer devices shadow factory devices by id. The former Manage-User-Devices dialog replaced by a read-only **Supported Devices** browser — sortable table, all factory + user devices, Origin column, Delete gated to user rows, overridden factory rows flagged. Rich per-field editor deferred to Spec #2. 662 tests; ruff clean. See `docs/superpowers/specs/2026-06-05-iomodbus-catalog-device-management-design.md`. |
| 11 — Instrument design system Phase 1 (foundation) | ✅ | Two-theme token system (light/dark), IBM Plex Sans/Mono fonts bundled, regenerated QSS from the token layer, theme manager with persistence, all painters migrated to live tokens, launcher dark/light toggle. Phases 26 (frameless chrome, component kit, per-module adoption, launcher redesign) pending — see `docs/superpowers/specs/2026-06-10-instrument-design-system-rollout-design.md`. |
## What I could NOT do without hardware (your turn)

View File

@@ -25,7 +25,7 @@ for _p in (_repo_root, SPECPATH):
import cim_suite # noqa: E402 (single-sourced version)
import verinfo # noqa: E402 (packaging/verinfo.py)
# Bundled brand fonts (Lato) live in the theme package and must be copied into the
# Bundled brand fonts (IBM Plex Sans/Mono) live in the theme package and must be copied into the
# frozen app at the same package-relative path so theme.fonts can find them.
_font_src = os.path.join(_repo_root, "cim_suite", "core", "ui", "theme", "fonts")