Skip to content

chore(release): 5.0.0 — security boundary + deferred breaking changes - #101

Merged
little-did-I-know merged 4 commits into
mainfrom
release/v5.0.0
Jul 24, 2026
Merged

chore(release): 5.0.0 — security boundary + deferred breaking changes#101
little-did-I-know merged 4 commits into
mainfrom
release/v5.0.0

Conversation

@little-did-I-know

Copy link
Copy Markdown
Owner

Cuts v5.0.0 (MAJOR). Bundles the merged web-gateway security boundary (PR #100) with the three breaking changes the 4.1.0 changelog deferred to v5.0.0, and bumps the version.

Breaking changes

From the security boundary (PR #100, already on main):

  • Web gateway now requires a bearer token on every /api/* request and the WebSocket stream; /docs and /redoc removed (schema at /api/openapi.json, token required); reference files move to a JSON metadata format (scpi-web references migrate).

Landed on this branch — the three 4.1.0-deferred breaks, now due:

  • SPD3303X/-E OVP/OCPovp_level/ocp_level raise NotImplementedError (the SPD3303X has no protection subsystem; has_ovp/has_ocp are now False). They emitted a FutureWarning in 4.1.0.
  • MockConnection strict-by-default — an unmatched PSU/AWG/DAQ query raises TimeoutError like real hardware; pass strict=False for the old lenient "".
  • Modern WF? shim removed — a modern-dialect mock no longer answers the legacy C<n>:WF? read; legacy scopes unaffected.

How it was built

Each break landed subagent-driven with review. Notably, the strict-default flip broke only 1 test — the mock is already faithful enough (from the wire-forms work) that PSU/AWG/DAQ tests don't hit unmatched queries. The OVP/OCP change surfaced an example script that would have broken the smoke test; it was guarded.

Verification

  • Full suite: 1610 passed / 19 skipped, 0 failed (FutureWarning count dropped as OVP/OCP warnings are gone).
  • Version bumped in all three convention files: pyproject.toml, scpi_control/__init__.py (__version__, feeds provenance + GUI About), CHANGELOG.md ([Unreleased][5.0.0] - 2026-07-24).
  • PyPI summary length 430/512.

After merge

Release cut by creating the GitHub Release through gh (fires publish.yml → PyPI as the maintainer, not the bot; the tag also triggers the desktop builds). PyPI publish is irreversible.

Note: docs/about/changelog.md (a separate docs-site mirror) has been stale since 3.3.0 — pre-existing drift, not addressed here.

The SPD3303X/-E command set has no protection subsystem (QS0503X-E01B
p.36), so ovp_level/ocp_level never armed anything on real hardware.
Flip has_ovp/has_ocp to False for these models per the deprecation
promised in the 4.1.0 changelog, and drop the now-dead FutureWarning
blocks -- the existing has_ovp/has_ocp guards raise NotImplementedError
for both getter and setter instead.

Guard the same calls in the psu_advanced_features example so its
real-world-scenario demo keeps running against the SPD3303X mock.
Unmatched PSU/AWG/DAQ queries now raise TimeoutError by default,
matching real hardware, instead of silently returning "". Pass
strict=False to restore the pre-5.0.0 lenient behavior.

BREAKING CHANGE: code relying on unmatched PSU/AWG/DAQ mock queries
returning "" must now pass MockConnection(..., strict=False)
explicitly.
MockConnection.read_raw() no longer falls through to the legacy
C<n>:WF? DAT2/DESC block on a modern-dialect (SDS800X HD/SDS5000X)
instance. That back-compat shim (Task 18) was documented as answering
"until v5.0.0"; the modern programming guide has zero occurrences of
"WF?" and the driver's capture path already uses
:WAVeform:PREamble?/:WAVeform:DATA? exclusively. A modern instance
that receives an unrecognized/legacy waveform read now raises
TimeoutError, matching real hardware. Legacy-dialect behavior is
unchanged -- build_waveform_response still serves C<n>:WF? on legacy
scopes.
@little-did-I-know
little-did-I-know merged commit bd0dbff into main Jul 24, 2026
29 checks passed
@little-did-I-know
little-did-I-know deleted the release/v5.0.0 branch July 24, 2026 22:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant