You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
mortie 0.9.10 retired the mortie.toc submodule (espg/mortie#199, following #197 for mortie.moc): the name is now the Toc constructor, and its migration shim covers attribute access only — a callable cannot also be a module, so statement-form from mortie.toc import X raises ModuleNotFoundError. mortie's CHANGELOG states this as a break rather than a deprecation.
zagg carried three such imports. One is runtime source, so this is not a test-only problem: zagg.time_axis's toc encode path would raise on any environment with 0.9.10 installed.
file:line
scope
effect under 0.9.10
src/zagg/time_axis.py:329
runtime (function-local, toc encode path)
ModuleNotFoundError at encode
tests/test_time_axis.py:12
module level
whole suite fails at collection
tests/test_time_axis.py:343
function-local
test error
The change
All three move to the flat top-level spelling, which is the supported one:
frommortieimportTOC_MAX_NS# was: from mortie.toc import TOC_MAX_NSfrommortieimportQ_END_NS, Q_START_NS# was: from mortie.toc import Q_END_NS, Q_START_NS
Plus one stale docstring in src/zagg/time_axis.py that pointed readers at mortie.toc as the module owning word semantics; it now names the flat kernels and notes what mortie.toc became.
The floor bump — please confirm
mortie>=0.9.9 → mortie>=0.9.10, and this is not optional cosmetics: Q_START_NS / Q_END_NS / TOC_MAX_NS are not top-level names in 0.9.9. Verified against both releases, so the import style and the floor are one change, not two — on 0.9.9 the new spelling would fail exactly as the old one fails on 0.9.10.
Verified against a clean mortie==0.9.10 install in an isolated venv:
Flagging it explicitly under §4 since a dependency-floor change is the maintainer's call — but note the floor is already effectively forced: CI resolves mortie unpinned, so it installs 0.9.10 today regardless of what the manifest says. The manifest is currently the thing that is wrong, not the thing holding the line. zagg also wants 0.9.10 independently for the Moc/Toc objects the moczarr reader path now uses.
How it was tested
The break and the fix both reproduced against a clean mortie==0.9.10 venv (output above).
ruff check and ruff format --check clean on both touched files.
Full-suite verification is deferred to CI: this checkout's venv still has mortie 0.9.9 installed, and upgrading it would disturb an environment in active use. CI installs unpinned mortie, so it exercises exactly the 0.9.10 path this fixes.
Left deliberately out of scope: a repo-wide audit for other mortie submodule imports found none beyond these three (mortie.moc has no statement-form importers; remaining mortie.toc* hits are flat kernel calls like mortie.toc2time / mortie.toc_overlaps, which are unaffected).
CI is green on the fix — test (3.12), test (3.13), ruff, check, build/build-arm64, build/build-x86_64 all pass. That is the real proof of both halves: CI resolves mortie unpinned, so it installed 0.9.10 and the suite collected and passed, where the pre-fix code fails at collection under the same resolution.
One deployment consequence worth knowing, checked rather than assumed.deployment/aws/build_layer.sh:114 derives MORTIE_SPEC from this dependency line via tomllib (issue #322), and the layer's mortie "floats to latest-above-floor" by design. Verified the derivation against the edited manifest: it now yields mortie>=0.9.10, so the next Lambda layer build installs mortie 0.9.10.
That makes this fix a prerequisite for the next fleet deploy, not merely a CI repair:
The currently deployed layer predates the 0.9.10 release (published today, 14:31 UTC), so the fleet is safe as it stands.
But the moment a layer is rebuilt, workers get mortie 0.9.10 — and unfixed worker code would raise ModuleNotFoundError on zagg.time_axis's toc encode path (src/zagg/time_axis.py:329), which is exactly the path any output.time_encoding: toc run takes.
So the ordering that matters: merge this before the next layer build or fleet deploy. No change to build_layer.sh itself is needed or made — the derivation already does the right thing; this note exists so the sequencing is explicit rather than discovered during a deploy.
No deployment/aws/ file was modified (CLAUDE.md §1).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #493.
mortie 0.9.10 retired the
mortie.tocsubmodule (espg/mortie#199, following #197 formortie.moc): the name is now theTocconstructor, and its migration shim covers attribute access only — a callable cannot also be a module, so statement-formfrom mortie.toc import XraisesModuleNotFoundError. mortie's CHANGELOG states this as a break rather than a deprecation.zagg carried three such imports. One is runtime source, so this is not a test-only problem:
zagg.time_axis's toc encode path would raise on any environment with 0.9.10 installed.src/zagg/time_axis.py:329ModuleNotFoundErrorat encodetests/test_time_axis.py:12tests/test_time_axis.py:343The change
All three move to the flat top-level spelling, which is the supported one:
Plus one stale docstring in
src/zagg/time_axis.pythat pointed readers atmortie.tocas the module owning word semantics; it now names the flat kernels and notes whatmortie.tocbecame.The floor bump — please confirm
mortie>=0.9.9→mortie>=0.9.10, and this is not optional cosmetics:Q_START_NS/Q_END_NS/TOC_MAX_NSare not top-level names in 0.9.9. Verified against both releases, so the import style and the floor are one change, not two — on 0.9.9 the new spelling would fail exactly as the old one fails on 0.9.10.Verified against a clean
mortie==0.9.10install in an isolated venv:Flagging it explicitly under §4 since a dependency-floor change is the maintainer's call — but note the floor is already effectively forced: CI resolves mortie unpinned, so it installs 0.9.10 today regardless of what the manifest says. The manifest is currently the thing that is wrong, not the thing holding the line. zagg also wants 0.9.10 independently for the
Moc/Tocobjects the moczarr reader path now uses.How it was tested
mortie==0.9.10venv (output above).ruff checkandruff format --checkclean on both touched files.Questions for review
>=0.9.10.mortie.mochas no statement-form importers; remainingmortie.toc*hits are flat kernel calls likemortie.toc2time/mortie.toc_overlaps, which are unaffected).