• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

sandialabs / LoQS / 32227180573
88%

Build:
DEFAULT BRANCH: main
Ran 19 Aug 2026 07:37AM UTC
Jobs 1
Files 70
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

19 Aug 2026 07:17AM UTC coverage: 87.717% (-1.9%) from 89.656%
32227180573

push

github

web-flow
Introduce `loqs.tools.migrate` and the `loqs-migrate` CLI (#114)

* Fix PatchDictCastableTypes's rename target in the version-2 table

It pointed to PatchDictLike in loqs.core.recordables.patchdict, but that
module no longer has a real implementation to rename within -- only a
construction-only legacy shim exporting PatchDict alone, with no
PatchDictLike attribute at all. Redirects to PatchLayoutLike in
loqs.core.recordables.patchlayout instead, the same real module PatchDict
itself already redirects to. Found via a new regression test asserting
every IMPORT_LOCATION_CHANGES_BY_VERSION target is a live, importable
attribute, not from a bug report.

* Add the loqs.tools.migrate core detect/resolve/rewrite library

A library for rewriting a user's own .py/MyST Markdown source files
still using pre-1.2 LoQS APIs, distinct from Serializable's own
decode-time compatibility machinery (which only keeps already-serialized
data readable, not source code).

Three independent passes, chained together by migrate_source: straight
(module, name) renames/removals (renames.py, built on libcst's
RenameCommand plus Serializable's own IMPORT_LOCATION_CHANGES_BY_VERSION
table as data); pre-#104 positional InstructionLabel construction,
rewritten to keyword form when the target instruction can be resolved
against a caller-supplied registry (labels.py, config.py), flagged for
manual review otherwise; and detect-only patterns whose replacement is a
semantic change rather than a pure rename (.cast(), include_idles=, an
"Iz" string -- flags.py). notebook.py extracts/splices MyST code-cell
fences so the same passes run against docs/notebooks/*.md too.

Two real correctness bugs were avoided by testing against real files,
not synthetic ones: reusing Serializable._update_imports directly on
whole files corrupts unrelated code shaped like its multi-line-import
heuristic, and a blind text substitution for renamed-name usages
corrupts docstrings that narrate a rename's own history ... (continued)

2507 of 3056 branches covered (82.04%)

Branch coverage included in aggregate %.

8069 of 9001 relevant lines covered (89.65%)

0.9 hits per line

Coverage Regressions

Lines Coverage ∆ File
31
75.0
1.06% core/instructions/instruction.py
19
93.6
-2.89% internal/serializable.py
2
75.0
3.57% tools/__init__.py
Jobs
ID Job ID Ran Files Coverage
1 32227180573.1 19 Aug 2026 07:37AM UTC 70
87.72
GitHub Action Run
Source Files on build 32227180573
  • Tree
  • List 70
  • Changed 47
  • Source Changed 0
  • Coverage Changed 47
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #32227180573
  • 6c2cd097 on github
  • Prev Build on main (#32096351089)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc