Handoff: modelling-export versions on Nexus vs the schema 1.1 writer
Summary
Continuation target: confirm the version situation of
iolabs-point-cloud-modelling-export and, if Miro agrees, release the
schema-1.1 writer as 0.10.0 to Nexus, then relock the consumers.
Finding so far: Nexus tops out at 0.9.0, which is the
schema-1.0 writer (only write_xml.py, no feature_classes.py,
no SchemaVersion). The schema-1.1 work (AI3D-376) is already merged to
origin/master (PR #4) but pyproject.toml still says
0.9.0, no tag past v0.9.0 exists, and nothing newer was published.
The local master and the local checkout branch are both behind
origin/master.
Current state
Nexus (checked 2026-09-04 via the simple index)
| Published versions | 0.1.0, 0.1.1, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1, 0.8.0, 0.9.0 (sdists only) |
|---|---|
| 0.9.0 sdist contents | src/iolabs_point_cloud_modelling_export/__init__.py, write_xml.py, README, pyproject. Zero hits for SchemaVersion in write_xml.py. |
| Index URL | https://nexus.iolabs.ch/repository/pypi-private/simple/iolabs-point-cloud-modelling-export/ (auth via UV_INDEX_NEXUS_USERNAME / UV_INDEX_NEXUS_PASSWORD in the environment; do not paste them anywhere) |
Git, repo /mnt/data/dev/3dai.iolabs.pointcloud.modellingexport
| Remote | git@bitbucket.org:ioholding/3dai.iolabs.pointcloud.modellingexport.git |
|---|---|
Tag v0.9.0 | 67047e6 "AI3D-346 Release v0.9.0" (2026-07-22). Tree = the Nexus 0.9.0 content. Local master sits here. |
| Local checked-out branch | ai3d-376-xml-schema-1-1 at 95adddf, 11 commits past v0.9.0, clean tree, 1064 tests pass. |
origin/master | b2cea5a = branch merged via c0339bf "Merged in ai3d-376-xml-schema-1-1 (pull request #4)" plus b2cea5a "AI3D-369: Remove tautological tests". pyproject.toml there still reads version = "0.9.0". No tag on it. |
Local dist/ | wheels/sdists for 0.7.0, 0.7.1, 0.9.0 only (stale, ignore). |
Consumers (all pull from the Nexus index)
| Repo | Pin | Note |
|---|---|---|
3dai.iolabs.pointcloud.asphaltedge (branch t3code/3abd1a9d, AI3D-384) | >=0.9.0, locked 0.9.0 | New export_xml.py is writer-agnostic: builds feature dicts by hand; emits Annotation/Attributes/SchemaVersion only once a 1.1 writer is installed (export_xml.WRITER_SCHEMA_VERSION). |
3dai.iolabs.pointcloud.modellinglines | >=0.8.0 | lanefinder step 7 lane model; legacy producer dict, must keep byte-identical output under 1.1 (spec R-2.4.1). |
3dai.lanefinder | unpinned | calls write_xml.create_xml in scripts/pipeline/run_7_cluster_stepper.py. |
3dai.iolabs.pointcloud.guardrails | unpinned | guardrails/export.py has a stand-in writer fallback; 1.1 would let it move polyline keys into attributes (spec N-8.6.3). |
Key artifacts
- Schema 1.1 spec:
docs/xml_schema_1_1_spec.mdin the modellingexport repo (see §2 compat rules, §7.1 profiles, §8 producer dict). - Reference document:
tests/fixtures/sample_v1_1.xml; example:docs/examples/run7_branch_001_schema_1_1.xml. - Producer builders:
src/iolabs_point_cloud_modelling_export/feature_classes.py(only on origin/master and the branch, not on Nexus). - Asphaltedge exporter that consumes it:
src/iolabs_point_cloud_detection_asphaltedge/export_xml.py, teststests/test_export_xml.py(one test skips under the 1.0 writer). - Release workflow skill on this machine:
wrap-up(bump version, build, publish to Nexus, commit under Jira tag, push with tags). - Memory note:
~/.claude/projects/-mnt-data-dev-3dai-iolabs-pointcloud-asphaltedge/memory/modellingexport-nexus-version-lag.md; update it after publishing.
Verification done / not done
- done Nexus index listed and the 0.9.0 sdist downloaded and inspected.
- done
git fetch origin;origin/mastercontains the branch head (merge-base --is-ancestoryes). - done Branch test suite:
uv run pytest -q→ 1064 passed. - done Asphaltedge suite passes under both writers: default env (Nexus 0.9.0) and
uv run --extra dev --with /mnt/data/dev/3dai.iolabs.pointcloud.modellingexport pytest. - not done Tests on
origin/masteritself (the extra AI3D-369 commit removed tests; not run locally). - not done Byte-identity check of a real lanefinder step-7 document under the 1.1 writer (spec claims R-2.4.1 compat;
tests/test_compat.pycovers it synthetically). - not done Any publish. Nothing was pushed or uploaded.
Next steps
- Sync the repo: in
/mnt/data/dev/3dai.iolabs.pointcloud.modellingexportrungit switch master && git pull --ff-only. Confirmgit log --oneline -3showsb2cea5aon top andgrep ^version pyproject.tomlstill says 0.9.0. - Run the suite on master:
uv run pytest -q. Check the README still describes 1.1 and thatfeature_classes.pyis present. - Ask Miro (or use the standing decision if he already gave one) to release 0.10.0. Minor bump is the right size: new elements, legacy dicts byte-identical apart from
SchemaVersion. - Release with the
wrap-upskill under Jira tag AI3D-376: bump to 0.10.0,uv build,uv publish dist/*0.10.0*, commit, tagv0.10.0, push with tags. Verify with the Nexus simple index listing that 0.10.0 appears (wheel and sdist). - Relock consumers to
>=0.10.0: asphaltedge first (brancht3code/3abd1a9d; thentests/test_export_xml.pyruns without the skip and the exported XML gains SchemaVersion/Annotation/Attributes), then modellinglines and lanefinder (uv lock --upgrade-package iolabs-point-cloud-modelling-export), guardrails when its 1.1 migration is done. - Update the memory note
modellingexport-nexus-version-lag.mdto say 0.10.0 is published, or delete it.
Risks and open questions
- Local branch vs origin/master: the local checkout is on the feature branch, behind master by two commits. Do not build the release from the branch; use master.
- AI3D-369 commit on master ("Remove tautological tests") landed after the merge; confirm it did not drop coverage the release relies on.
- Consumers pinned loosely (lanefinder, guardrails unpinned; modellinglines
>=0.8.0): a publish silently upgrades their next lock. The 1.1 writer emitsXmlWriterWarningfor legacy dicts (README says never run under-W error); check none of the pipelines uses warnings-as-errors. - Sdist-only history on Nexus: earlier releases have no wheels; publishing both from
dist/*0.10.0*is fine, just do not re-upload old files (Nexus rejects duplicates). - Paving Edge as the asphalt-edge class is still an open choice for the CAD side (poster column 5, layer
pPLC_Pflasterkante); not a release blocker.
Suggested skills
wrap-upfor the bump/build/publish/tag/push sequence.bitbucket-pronly if the version bump is to go through a PR instead of a direct master commit.