Tracking issue for every emitter defect surfaced during the Prompty cross-runtime parity effort (TypeScript, Python, C#, Go, Rust, Java, Swift). Filed together so they can be validated systematically rather than rediscovered one runtime at a time.
Suggested order
Ordered by dependency, not severity — several later items may resolve once the discriminator work lands.
Tranche 1 — discriminator dispatch (do first, widest blast radius)
These two share a root area and block Swift (#44). #37 has an unvalidated candidate fix already; its 3 remaining Rust failures are uninvestigated.
Tranche 2 — collection representation (specify once, fix together)
Both concern how collection optionality and emptiness are represented. They should be specified together with one shared cross-language fixture covering absent / explicit-empty / populated, rather than patched independently.
Tranche 3 — serialization and whitespace
Possibly one root cause. Check before fixing separately — both are whitespace/multiline-shaped, and C# multiline passes, which is a useful discriminator.
Tranche 4 — generated test emission
Both are generated-test defects rather than generated-model defects. #45 is compile-time and argues for a "generated tests compile" gate per backend.
Tranche 5 — remaining
Tranche 6 — Swift
Swift is pinned to 0.4.2 + a hand-written shim and was never exercised against 0.4.15+. Do it last, after #37/#38 land, and expect #48 to surface on top.
Working notes
Establish a baseline before any bump. The single most expensive mistake in this effort was bumping 0.4.2 → 0.4.15 across seven runtimes with no recorded baseline. Rust went 296/0 → 289/7, and the regression was initially misread as pre-existing. For each fix: stash, run the suite on the current pin, record exact pass/fail counts, then change one thing.
npm versions are immutable. Published: 0.4.9, 0.4.10, 0.4.13, 0.4.15. 0.4.16–0.4.18 are consumed locally. Any new release must be ≥ 0.4.19.
Verify in more than one backend. #37 reproduces identically in Go and Rust and is likely present in the others; several of these were only ever measured in a single language.
Provenance
| Issue |
Raised by |
| #37 |
Go (initial report), Rust (independently reproduced) |
| #38 |
Rust / canonical vectors — independently reproduced during final triage |
| #39 |
Rust / model-samples workstream |
| #40, #41 |
Go runtime workstream |
| #42 |
canonical engine-ports workstream |
| #43 |
Python runtime workstream |
| #44 |
Swift runtime workstream |
| #45 |
Java runtime workstream |
| #46, #47 |
cross-runtime vector work |
| #48 |
observed during final triage |
Only #37, #38, and #48 were independently reproduced during the final triage pass. The rest are reported from their originating workstream and are worth a quick confirmation before fixing — each issue notes its confidence level.
Tracking issue for every emitter defect surfaced during the Prompty cross-runtime parity effort (TypeScript, Python, C#, Go, Rust, Java, Swift). Filed together so they can be validated systematically rather than rediscovered one runtime at a time.
Suggested order
Ordered by dependency, not severity — several later items may resolve once the discriminator work lands.
Tranche 1 — discriminator dispatch (do first, widest blast radius)
wip/nonabstract-base-discriminator-fallback, 286/10 → 293/3)stringmember in a discriminator union silently collapses unknown kinds to the first variantThese two share a root area and block Swift (#44). #37 has an unvalidated candidate fix already; its 3 remaining Rust failures are uninvestigated.
Tranche 2 — collection representation (specify once, fix together)
= #[]collection defaults0.4.15changed optional collections toOption<Vec<T>>as an undocumented breaking changeBoth concern how collection optionality and emptiness are represented. They should be specified together with one shared cross-language fixture covering absent / explicit-empty / populated, rather than patched independently.
Tranche 3 — serialization and whitespace
Possibly one root cause. Check before fixing separately — both are whitespace/multiline-shaped, and C# multiline passes, which is a useful discriminator.
Tranche 4 — generated test emission
*stringdirectly tostringwithout a nil check.value)Both are generated-test defects rather than generated-model defects. #45 is compile-time and argues for a "generated tests compile" gate per backend.
Tranche 5 — remaining
Tranche 6 — Swift
Swift is pinned to
0.4.2+ a hand-written shim and was never exercised against0.4.15+. Do it last, after #37/#38 land, and expect #48 to surface on top.Working notes
Establish a baseline before any bump. The single most expensive mistake in this effort was bumping
0.4.2 → 0.4.15across seven runtimes with no recorded baseline. Rust went 296/0 → 289/7, and the regression was initially misread as pre-existing. For each fix: stash, run the suite on the current pin, record exact pass/fail counts, then change one thing.npm versions are immutable. Published:
0.4.9,0.4.10,0.4.13,0.4.15.0.4.16–0.4.18are consumed locally. Any new release must be ≥ 0.4.19.Verify in more than one backend. #37 reproduces identically in Go and Rust and is likely present in the others; several of these were only ever measured in a single language.
Provenance
Only #37, #38, and #48 were independently reproduced during the final triage pass. The rest are reported from their originating workstream and are worth a quick confirmation before fixing — each issue notes its confidence level.