34 Commits

Author SHA1 Message Date
0441dab79d docs: record Instrument phase 6 (IOModbus + launcher); rollout complete 2026-06-11 16:24:30 -04:00
fda18eb9fd docs: record Instrument phase 5 (DA-07 adoption); BL-DS-P5 closed 2026-06-11 13:12:39 -04:00
9537112854 docs: record Instrument phase 4 (DA-12 adoption); BL-DS-P4 closed 2026-06-11 11:17:04 -04:00
4cfcfb52c7 docs: record Instrument phase 3 (component kit); BL-DS3 closed
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 19:19:52 -04:00
f6754120cd docs: record Instrument phase 2 (window chrome) in status/backlog 2026-06-10 15:07:45 -04:00
fcc3c0c765 docs: record Instrument phase 1 (foundation) in status/backlog; packaging font note 2026-06-10 12:18:39 -04:00
df5466b7f6 docs: release-packaging guide + track distribution (BL-P1..P4)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 11:09:36 -04:00
e143fc18cc docs(repo): mark BL-R1 (revert a setting) done 2026-06-08 08:49:21 -04:00
283cf032f9 docs: device repository status, BL-R1 revert backlog, CLAUDE.md note
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 09:55:41 -04:00
4bfbbde457 docs(iomodbus): note the Supported Devices browser in rebuild status
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 23:09:16 -04:00
4aa99605eb docs(iomodbus): record catalog device management (Spec #1) in backlog/status
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 22:16:26 -04:00
b7d4bfe5e0 docs: mark BL-S3 + BL-I3 done
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 16:04:16 -04:00
a3e2407b0f docs(da12): BL-D5 done — sensor history/trend view; HW-verify + export notes
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 10:02:12 -04:00
ddd5f03041 docs: close out BL-D6 ({F} station-health signals)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 14:23:04 -04:00
3606cadbba docs: record universal right-click copy feature
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 12:48:40 -04:00
062c928ecd docs(da07): record polish pass (alarm/traffic un-deferred, export_sheets, HW-verification)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 10:36:27 -04:00
9ae558d8f9 docs: refresh living docs for the 3-module suite
Correct drift that predated IOModbus and persisted after the merge:
- RUNNING.md: retitled to the suite; run commands for all 3 modules; per-module
  data locations; generalized architecture map and simulator note.
- SUITE-ARCHITECTURE.md: 'one real module' -> three; sequencing steps 4/5 done.
- DESIGN-SYSTEM.md: theme path corrected to cim_suite/core/ui/theme (it moved in
  the monorepo reshape); import examples fully qualified.
- REBUILD-STATUS.md: hover help now spans all modules (IOModbus included).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 07:52:20 -04:00
8c0dbb4324 docs(iomodbus): record module #3 in CLAUDE.md, status, backlog, HW-verification
CLAUDE.md gains a Module #3 paragraph (config-driven Modbus RTU master; catalog
parser; request/response poll machine). REBUILD-STATUS adds Phase 9 + updated counts
(408 tests). BACKLOG adds BL-S4 (DONE) and an IOModbus section (BL-I1 HW-verify,
BL-I2 deferred features, BL-I3 picklist dropdowns). HARDWARE-VERIFICATION gains an
IOModbus section (CRC, type-3 offset, 32/64-bit binary, float word order, FC
selection/exceptions, CI-13/15/18 xCalMult).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 17:53:16 -04:00
12285f8524 docs: BL-D1 done -- serial recognition + channel grouping
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 15:20:45 -04:00
bb9b678a65 fix(core): report dropped link on unexpected disconnect (BL-2/BL-5)
The serial reader thread caught a read error and flashed a status message but
never told the UI the link was down, so the "Connected" label and green pill
stayed lit after the cable was yanked.

Add a third transport callback, connection_callback(bool), parallel to
data_callback/error_callback (Qt-free core). SerialTransport._reader fires it
with False in its error path (reached only on an unexpected drop; a deliberate
stop() exits via the while-condition). Both controllers bridge it to
connectionChanged in attach(), so the existing _on_connection(False) slots grey
the pill and flip the label -- no UI changes. Fixes BL-5 (same signal) for both
DA-12 and DA-07. Report-only; auto-reconnect deferred to BL-9.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:46:16 -04:00
ec41946ec2 docs: record DA-07 Station help (BL-E4); add DA-07 capture screenshots
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:02:33 -04:00
d62f3590c5 docs: record contextual hover-help (BL-8); park DA-06-tainted entries (BL-D3)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:22:29 -04:00
555e94a101 docs: record warm-module cache (BL-7), close BL-1, note DA-07 HW follow-ups
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 10:34:40 -04:00
2926c498e0 fix(da07): drive the polled ACK handshake so settings actually load + add loading overlay
The DA-07 rebuild loaded nothing from real hardware: unlike the DA-12 (which
streams its reply unsolicited), a real DA-07 runs a polled handshake -- it sends
a refresh one frame per ACK and interleaves Z2 idle polls, advancing only when
the tool answers both. The rebuild sent "A" once and answered nothing, so the
station stopped after frame one. The simulator hid this by dumping every frame
at once.

Fix (hardware-verified on a real DA-07, COM5):
- controller._process now ACKs (Z1) every inbound data frame to pull the next.
- controller._handle_poll answers the station's Z2 idle polls (and Z0 NAK ->
  resend). Idle-polling turned out to be required for the initial load, not just
  live mode -- an ACK-only build deadlocked partway through the stream.
- SimulatedStation models the frame-per-ACK stream (handshake=True); the
  frame-content round-trip tests opt out with handshake=False.

A full Refresh now loads config + 45 device types + 28 settings + present
devices + channels (~120 frames over ~20s) where the broken build loaded 1.

Loading overlay (requested): a blocking, dimmed, gradient-blue panel covers the
DA-07 window during the multi-second refresh and clears when it completes.
- New reusable core/ui/loading_overlay.py (LoadingOverlay + animated gradient bar,
  colors from theme tokens) and a SCRIM token + QSS rules.
- Controller emits loadStarted/loadProgress/loadFinished; completion is inferred
  by a 1.5s idle-settle timer (no end marker on the wire; 1.5s clears the real
  ~0.55s max inter-frame gaps with margin). Verified: clears 1.5s after the last
  frame, no premature clear.

233 tests pass (new test_handshake.py, test_loading.py), ruff clean. Docs updated
(CLAUDE.md, HARDWARE-VERIFICATION.md, BACKLOG.md, REBUILD-STATUS.md).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 09:46:08 -04:00
e3909c216f docs(da07): record module #2 rebuild in BACKLOG/STATUS/HW-VERIFICATION/CLAUDE 2026-06-02 17:42:30 -04:00
d6bc804cfb docs: record restored Sensors Input + Refresh columns (BL-D2) 2026-06-02 16:31:19 -04:00
43a73822b9 docs: record spreadsheet export across status/backlog/architecture
Update REBUILD-STATUS (test count 112->127, phase 7, what-works,
stale branch line), add BL-6 DONE in BACKLOG, and list core/export +
export_action.py in SUITE-ARCHITECTURE.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 15:37:22 -04:00
5f09f8fcb1 docs: record dashboard service-cable detection
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 14:02:27 -04:00
20cb87c9f2 docs: update CLAUDE.md, suite architecture, status, backlog for the monorepo
Update all five named files to reflect the completed suite-monorepo reshape:
run/entry commands point at cim_suite.shell.app; architecture tables and paths
updated to cim_suite/core + cim_suite/modules/da12 + cim_suite/shell; SUITE-
ARCHITECTURE.md status changed from "not yet built" to done with actual layout
and updated Module contract; REBUILD-STATUS.md records 88 tests and Phase 5;
BACKLOG.md marks reshape done and adds BL-S1/S2/S3 follow-ups including the
config/data-path migration caveat; transport __init__ docstring points to
cim_suite.core.transport.serial_transport for the real transport.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 12:12:19 -04:00
49ab67b5f9 relocate DA-12 python package into cim_suite/modules/da12
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 11:14:37 -04:00
48f59aa02e docs: cross-link BACKLOG.md <-> REBUILD-STATUS.md
Reciprocal pointers so the live to-do list (backlog) and the point-in-time status
stay in sync regardless of which is opened first; status 'Known gaps' now flagged as
candidates to promote into the backlog.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 08:56:31 -04:00
cf813cd8dd docs: record unified service-suite direction (DA-12 as module #1)
- SUITE-ARCHITECTURE.md: agreed direction (unified modular app on a shared core),
  rationale, target monorepo structure, thin module contract, rule-of-three caution,
  and sequencing (awaiting source for apps #2/#3). Not yet built.
- REBUILD-STATUS.md: 'Next direction' pointer to the suite plan.
- VB6-MIGRATION-PLAYBOOK.md: new section on consolidating multiple apps into one
  suite (when to unify vs separate shells; don't over-build core from one app).

No code changes — documentation only, per request, ahead of receiving the other apps.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 08:21:20 -04:00
6bb511da98 fix(protocol): address code-review findings (scale/offset sentinel + Int floor)
- decode_float(): scale/offset use VB AddFloat semantics with NO 8000 sentinel
  (8000 is a real negative value there, not no-value). decoder 'A' branch updated.
- encode_scaled(): use math.floor to match VB Int() (floors toward -inf), correct
  for negative calibration offsets.
- Simulator F-frame: comment that its layout is not verified ground truth.
- REBUILD-STATUS: record the review + the deferred F-counter display.
- +3 regression tests (72 total).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:30:54 -04:00
88b101da69 build+docs: PyInstaller spec (built & verified), Inno Setup installer, guides
Phase 4:
- packaging/da12_service.spec: one-folder PyInstaller build (AV-friendly), trims
  unused PySide6 modules. Built successfully; DA12-Service.exe launches standalone.
- packaging/installer.iss: Inno Setup script -> per-machine install, Start-menu
  shortcut, no runtime/OCX deps (signing hook noted).
- docs/RUNNING.md: dev setup, run (--simulate/--port), tests, build, data locations.
- docs/HARDWARE-VERIFICATION.md: checklist for the 5 hardware-only unknowns,
  each mapped to its fix-up location.
- docs/REBUILD-STATUS.md: overnight session summary / handoff.
- .gitattributes: normalize line endings (legacy VB6 kept CRLF).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:22:30 -04:00