Add portable output.emit text views - #81
Conversation
|
Review finding: this needs changes before merge. The architectural direction is right: a bounded, host-neutral There are two blocking Python/TypeScript parity defects:
The proof is currently insufficient for a new portable rendering contract. The substantive test executes only the Python primitive, while the generated-runtime test only asserts rendered source strings. Add a package-owned synthetic conformance fixture that executes the same declared views through generated Python and TypeScript callables. It should cover matched/default views, The PR metadata also needs correction. The implementation no longer adds a |
|
Re-review: the original blockers are resolved, but two portable-contract issues remain before merge.
Add focused generated Python/TypeScript conformance cases for the chosen restrictions and negative paths. Also document the The previous |
|
Re-review: the previous structured-value and formatting issues are substantially addressed, but four portability/contract issues remain before merge.
The architecture, scalar-only structured-value restrictions, Unicode handling, documentation, negative-path proof, labels, and CI are otherwise in good shape. |
|
Latest review: two narrow blocking issues remain.
Everything else from the previous reviews is now addressed: boolean/number scalar equality is explicit, portable numbers are finite safe integers only, malformed hidden lines fail before selection, structured placeholders/joins fail closed, JSON Unicode and number validation are covered, documentation is present, and CI is green. |
|
Latest review: one final portability issue remains before merge.
Please require Everything else from the previous reviews is now addressed: line-field types and view-level keys are validated, booleans and numbers compare distinctly, numbers are restricted to finite safe integers, malformed nested lines fail before selection, canonical JSON serialization preserves lexicographic key order including |
|
Post-merge review: the final Python renders templates by collecting tokens and repeatedly calling Reproducer: {
"result": {"first": "{second}", "second": "resolved"},
"template": "{first} {second}"
}Python produces Please define substitution as a single pass and change the Python renderer to replace matches through a callback over the original template rather than repeatedly mutating it. Add an executed generated Python/TypeScript regression case where one scalar value contains another valid placeholder expression. Apart from this issue, the merged contract and conformance coverage are in good shape. |
Summary
output.emittext_viewsrendering for generated runtimesjoin, JSON-domain truthiness, and explicit JSON blocks for arrays/objectstext_viewslanguage{}, nested object rows, empty/non-empty conditions,len,join,empty, JSON blocks, root lookup, and malformed/invalid specsProof