Filed from notifier (CannObserv/notifier#50). Suggestion only — notifier does not commit here.
notifier-client v0.3.1 is now tagged and installable. Watcher's pin is two releases behind and, until today, could not move: v0.3.0 and v0.3.1 were released in notifier's SDK CHANGELOG but never tagged, so rev = "v0.2.1" was the newest pin that existed. notifier#50 fixed that — the version is now locked to the server's, v0.3.1 is cut, and a CI gate fails any future release whose tag was never pushed.
Three changes here, independent of each other:
1. Drop the SSH host alias
[tool.uv.sources]
notifier-client = { git = "ssh://git@github-notifier/CannObserv/notifier.git", subdirectory = "clients/python", rev = "v0.2.1" }
github-notifier is an SSH host alias that exists only on the watcher VM. .github/workflows/ci.yml has to work around it in every job:
- name: Rewrite notifier SSH source to HTTPS
run: git config --global url."https://github.com/".insteadOf "ssh://git@github-notifier/"
CannObserv/notifier is public. The alias buys nothing and costs a step in each job plus a trap for the next consumer who copies the pattern:
notifier-client = { git = "https://github.com/CannObserv/notifier.git", subdirectory = "clients/python", tag = "v0.3.1" }
That step can then be deleted from ci.yml.
2. Adopt v0.3.1
Two releases of changes; both changelogs state the public API is unaffected. channels.list(), dispatch(), retry, idempotency, and error semantics are identical to 0.2.1.
- 0.3.0 —
AuthErrorDetail added to the generated models; 401/403 now documented on every /api/v1 operation (notifier#22). Generated return types widen; the sub-clients watcher calls are untouched.
- 0.3.1 — regenerated with openapi-python-client 0.29. Status enums derive from
enum.StrEnum rather than (str, Enum); str(), f-strings and == "succeeded" all behave as before.
3. python-dateutil — the one thing that can actually break
0.3.1 removed python-dateutil from notifier-client's dependencies. openapi-python-client 0.29 parses dates with datetime.datetime.fromisoformat instead of dateutil.parser.isoparse, so nothing the SDK ships imports it.
Watcher's uv.lock currently receives python-dateutil transitively through notifier-client, and pyproject.toml does not declare it. If anything under src/ imports dateutil, adopting 0.3.1 removes it from the resolve. Worth checking before the bump rather than after:
rg -n '^\s*(import|from)\s+dateutil' src/ tests/
If it hits, declare python-dateutil directly in [project.dependencies] in the same change. (Watcher's own tests/test_dependency_extras.py already treats this class of transitive reliance as something to make explicit — same reasoning as packaging in #242.)
Context
notifier's release procedure is now documented at docs/RELEASING.md, including the consumer adoption path (change the tag, uv sync; to stay put, do nothing) and the trigger for graduating off the git-tag transport to a published package. No action needed here for that — flagging it so the pin's semantics are documented somewhere watcher can point at.
Filed from notifier (CannObserv/notifier#50). Suggestion only — notifier does not commit here.
notifier-clientv0.3.1 is now tagged and installable. Watcher's pin is two releases behind and, until today, could not move:v0.3.0andv0.3.1were released in notifier's SDK CHANGELOG but never tagged, sorev = "v0.2.1"was the newest pin that existed. notifier#50 fixed that — the version is now locked to the server's,v0.3.1is cut, and a CI gate fails any future release whose tag was never pushed.Three changes here, independent of each other:
1. Drop the SSH host alias
github-notifieris an SSH host alias that exists only on the watcher VM..github/workflows/ci.ymlhas to work around it in every job:CannObserv/notifieris public. The alias buys nothing and costs a step in each job plus a trap for the next consumer who copies the pattern:That step can then be deleted from
ci.yml.2. Adopt v0.3.1
Two releases of changes; both changelogs state the public API is unaffected.
channels.list(),dispatch(), retry, idempotency, and error semantics are identical to 0.2.1.AuthErrorDetailadded to the generated models; 401/403 now documented on every/api/v1operation (notifier#22). Generated return types widen; the sub-clients watcher calls are untouched.enum.StrEnumrather than(str, Enum);str(), f-strings and== "succeeded"all behave as before.3.
python-dateutil— the one thing that can actually break0.3.1 removed
python-dateutilfromnotifier-client's dependencies. openapi-python-client 0.29 parses dates withdatetime.datetime.fromisoformatinstead ofdateutil.parser.isoparse, so nothing the SDK ships imports it.Watcher's
uv.lockcurrently receivespython-dateutiltransitively throughnotifier-client, andpyproject.tomldoes not declare it. If anything undersrc/importsdateutil, adopting 0.3.1 removes it from the resolve. Worth checking before the bump rather than after:rg -n '^\s*(import|from)\s+dateutil' src/ tests/If it hits, declare
python-dateutildirectly in[project.dependencies]in the same change. (Watcher's owntests/test_dependency_extras.pyalready treats this class of transitive reliance as something to make explicit — same reasoning aspackagingin #242.)Context
notifier's release procedure is now documented at
docs/RELEASING.md, including the consumer adoption path (change the tag,uv sync; to stay put, do nothing) and the trigger for graduating off the git-tag transport to a published package. No action needed here for that — flagging it so the pin's semantics are documented somewhere watcher can point at.