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

hbmartin / pyldraw3 / 28970619988
94%
main: 94%

Build:
Build:
LAST BUILD BRANCH: release-prep-1.1.0-followup
DEFAULT BRANCH: main
Ran 08 Jul 2026 07:41PM UTC
Jobs 2
Files 31
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

08 Jul 2026 07:41PM UTC coverage: 93.589% (+1.0%) from 92.617%
28970619988

push

github

hbmartin
1. Finish detection — Parts.ColourAttributes now includes GLITTER, SPECKLE, LUMINANCE (not MATERIAL, which always co-occurs and would be noise). Added Colour.is_solid for the "solid palette" use case. Verified: code 114 now loads as alpha=128, ['GLITTER'].
2. Self-healing regeneration — __hash__ is now a fingerprint of generator schema version + parts.lst MD5 + ldconfig.ldr MD5 (ldraw/generation/__init__.py). Any of the three changing — including upgrading pyldraw — triggers regeneration automatically. I chose auto-heal over the suggested stamp-and-warn, mirroring the existing CATALOG_SCHEMA_VERSION pattern.
3. Identifier dedupe — colliding sanitized symbols get part-code suffixes with a warning, and a DuplicateSymbolError guards the impossible-to-fix case. Regenerating the real 2018-02 library now yields 0 collisions (was 4); all three Tile1X1WithSilver_Pattern tiles are importable. The deeper same-description collapse (~49 = alias parts) now logs one aggregate message.
4. Stubs discoverability — ldraw generate ends with a "run ldraw stubs" hint (the stub package itself already existed on this branch).
5. Geometry queries — new ldraw/part_geometry.py with Parts.bounding_box(), Parts.studs(), Parts.stud_positions(), exported at top level as BoundingBox/StudReference. Recursive subfile resolution with memoized per-file geometry; stud kind is judged from the primitive's own description ("tube"/"underside" → not a top stud) rather than a pinned name list. Against the real library: 3001 gives 8 studs at the canonical positions and box (−40,−4,−20)..(40,24,20); hollow studs and underside tubes classify correctly.
6. Step API + headers — Model.add_step(), Model.steps, and set_header(ldraw_org=..., license=...) writing 0 !LDRAW_ORG/0 !LICENSE in canonical order. (The writer itself already existed here.)
7. Case preservation — the design reversal: Piece and split_reference preserve input case, DEFAULT_SUFFIX is .dat, and all comparisons casefold (find_pieces,... (continued)

238 of 238 new or added lines in 13 files covered. (100.0%)

2292 of 2449 relevant lines covered (93.59%)

1.87 hits per line

Jobs
ID Job ID Ran Files Coverage
1 python-3.13 - 28970619988.1 08 Jul 2026 07:42PM UTC 31
93.59
GitHub Action Run
2 python-3.12 - 28970619988.2 08 Jul 2026 07:42PM UTC 31
93.59
GitHub Action Run
Source Files on build 28970619988
  • Tree
  • List 31
  • Changed 13
  • Source Changed 0
  • Coverage Changed 13
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 90b44969 on github
  • Prev Build on main (#28967366447)
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