FOCAS version-matrix stabilization (PR 1 of #220 split) #168
Reference in New Issue
Block a user
Delete Branch "focas-version-matrix-stabilization"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ships the cheap half of the hardware-free FOCAS stability gap ahead of Tier-C isolation. No CNC or simulator on the bench, so the highest-leverage move is to catch operator config errors at init time instead of at per-read steady-state.
What this PR lands
FocasCncSeriesenum (Unknown / 16i / 0i-D / 0i-F family / 30i family / PowerMotion-i)FocasCapabilityMatrixencoding per-series documented ranges forcnc_rdmacro/wrmacro,cnc_rdparam/wrparam,pmc_rdpmcrng/wrpmcrngFocasDeviceOptions.Seriesknob (defaultsUnknown= permissive so pre-matrix configs don't break on upgrade)FocasDriver.InitializeAsyncnow parses every tag address + validates against the owning device's declared seriesInvalidOperationExceptionon mismatch with reason naming both the series + the documented limit (Parameter #30000 is outside the documented range [0, 29999] for Thirty_i)Tests
FocasCapabilityMatrixTests.cscovering macro / parameter / PMC-letter / PMC-number boundaries + permissive Unknown + rejection-message content + case-insensitive PMC-letter matchingInlineDatacites the matrix row it reflects — widening a range without updatingdocs/v2/focas-version-matrix.mdfails a testDocs
docs/v2/focas-version-matrix.md— authoritative matrix with per-function citations + CNC-series era context + error-surface shapedocs/v2/implementation/focas-isolation-plan.md— multi-PR plan for #220 Tier-C isolation (Shared contracts → Host skeleton → Fwlib32 move → Supervisor+respawn → MMF+ops glue; ~2200-3200 LOC mirroring Galaxy Tier-C)docs/drivers/FOCAS-Test-Fixture.md— promoted from 'no version-matrix coverage' to explicit coverage + cross-linksWhy ship now, before #220
Two independent wins: matrix catches operator typos today (per-read
BadOutOfRange→ per-config init-time failure with an actionable message); isolation closes the native-crash blast radius next. Shipping in one PR would bloat diff + delay the config-error feedback loop unnecessarily.Scope NOT in this PR
FOCAS-Test-Fixture.md§Follow-up)