Context
The TypeScript and Python SDKs cover the same iTwin Platform APIs but have drifted on features, and — more urgently — the Training specs are in flux across three active branches in ways that will silently undo fixes if not coordinated.
Verified on main @ dafc2ce plus origin/feature/AnalyseV2, origin/feature/AnalyseRelease26.0.2, origin/feature/2_TrainingSpecs.
⚠️ Urgent: Training specs branch coordination
main (TS): JobType.TRAINING_O2D + TRAINING_S3D exist; JobSchema literals are typo'd ("TraningO2D"/"TraningS3D", job.ts:238,243).
feature/AnalyseV2 and feature/AnalyseRelease26.0.2 (June 2026, commit 27a25de "Updated training specs for release"): TrainingO2D deleted entirely (enum, create schema, union variant); TraningS3D still typo'd (line 236 there).
- Python
main: no training specs at all.
feature/2_TrainingSpecs (Python): specifications/training.py (+103), service/estimation.py (+59), service methods (+131), data_handler changes, tests — the "missing" Python features already exist here.
Implications:
- Fixing the TS typo on
main alone (tracked in the correctness sub-issue) will merge-conflict with the Analyse branches and the typo re-ships on the next Analysis release. The fix must land there too (S3D-only where O2D is deleted), or merge order must be agreed first.
- Do not "fix" TS→Python TrainingO2D parity blindly — the newest release line deletes TrainingO2D in both SDKs. Resolve the product question (is TrainingO2D staying?) before parity work.
Tasks:
Parity gaps (verified on main)
| Dimension |
TypeScript |
Python (reality_capture 2.5.0) |
Action |
| Training specs |
Present (typo'd in JobSchema) |
Absent on main; exists on feature/2_TrainingSpecs |
Resolve branch question above |
| Cost estimation |
Present (estimation.ts, estimateCost at service.ts:130–138) |
Absent on main; on the same feature branch |
Merge branch |
| Blob I/O |
Sequential + full in-memory buffering |
Parallel (ThreadPool ≤32) + streaming, max_concurrency=16 |
TS side tracked in data-handler sub-issue |
authoring lifecycle |
Missing |
Present (data_handler.py:182–207) |
TS side tracked in data-handler sub-issue |
| Windows blob paths |
path.join → \ corruption (data_handler.ts:28,116) |
Same flaw (os.path.join, data_handler.py:113) |
Fix both sides |
| Reality-data endpoints on service |
Absent (delegated to reality-data-client) |
Present (service.py:474–601 incl. /readaccess /writeaccess) |
TS side tracked in data-handler sub-issue |
point_cloud_conversion |
No file; commented references (job.ts:18,54,120; barrels) |
45-line file, 100% commented |
Decide: implement or delete in both |
| Public API surface |
Barrel exports (with gaps) |
No __init__.py re-exports at all — deep module paths required (from reality_capture.service.service import …) |
Add Python re-exports |
| User-Agent |
Missing SDK version (service.ts:39 — trailing slash) |
Includes __version__ (service.py:48) |
Fix TS |
| Response model |
Response<T> class |
Response(tuple) — mirrored field-for-field |
Keep aligned (predicate-union refactor preserves fields) |
| Unit tests |
30 files, nyc 90% per-file, but data_handler.ts excluded and untested |
14 files incl. 554-line test_data_handler.py + doc-example tests |
TS data_handler tests tracked in data-handler sub-issue |
Ongoing guard
Context
The TypeScript and Python SDKs cover the same iTwin Platform APIs but have drifted on features, and — more urgently — the Training specs are in flux across three active branches in ways that will silently undo fixes if not coordinated.
Verified on
main@dafc2ceplusorigin/feature/AnalyseV2,origin/feature/AnalyseRelease26.0.2,origin/feature/2_TrainingSpecs.main(TS):JobType.TRAINING_O2D+TRAINING_S3Dexist;JobSchemaliterals are typo'd ("TraningO2D"/"TraningS3D",job.ts:238,243).feature/AnalyseV2andfeature/AnalyseRelease26.0.2(June 2026, commit27a25de"Updated training specs for release"): TrainingO2D deleted entirely (enum, create schema, union variant);TraningS3Dstill typo'd (line 236 there).main: no training specs at all.feature/2_TrainingSpecs(Python):specifications/training.py(+103),service/estimation.py(+59), service methods (+131), data_handler changes, tests — the "missing" Python features already exist here.Implications:
mainalone (tracked in the correctness sub-issue) will merge-conflict with the Analyse branches and the typo re-ships on the next Analysis release. The fix must land there too (S3D-only where O2D is deleted), or merge order must be agreed first.Tasks:
TraningS3Dtypo fix onfeature/AnalyseV2+feature/AnalyseRelease26.0.2(or document merge order)feature/2_TrainingSpecsinto Pythonmain(training + estimation) — this is merge work, not greenfieldParity gaps (verified on
main)reality_capture2.5.0)feature/2_TrainingSpecsestimation.ts,estimateCostatservice.ts:130–138)ThreadPool≤32) + streaming,max_concurrency=16authoringlifecycledata_handler.py:182–207)path.join→\corruption (data_handler.ts:28,116)os.path.join,data_handler.py:113)service.py:474–601incl./readaccess/writeaccess)point_cloud_conversionjob.ts:18,54,120; barrels)__init__.pyre-exports at all — deep module paths required (from reality_capture.service.service import …)service.ts:39— trailing slash)__version__(service.py:48)Response<T>classResponse(tuple)— mirrored field-for-fielddata_handler.tsexcluded and untestedtest_data_handler.py+ doc-example testsOngoing guard
point_cloud_conversionlimbo happened because no such artifact exists.