Skip to content

Checked settings: string dropdowns with built-in display constants no longer break the settings receipt - #179

Merged
luisleo526 merged 4 commits into
mainfrom
lv/d3-enum-option-strings
Oct 5, 2026
Merged

luisleo526 merged 4 commits into
mainfrom
lv/d3-enum-option-strings

Conversation

@luisleo526

Copy link
Copy Markdown
Contributor

Strategy settings could not be inspected when an input.string dropdown used built-in display constants such as position.*, size.* or line.style_*. Those constants lower to integer codes, so the settings metadata carried null C++ strings, and building the settings receipt failed (basic_string: construction from null is not valid). The live runner therefore refused such libraries at start-up instead of running them.

Change

  • String values from known lowering only. String-input defaults and options in the settings metadata now take their values only from string literals that codegen's builtin lowering already knows.
  • Unrepresentable values are refused cleanly. A default or option with no faithful string value marks the input supported=false and publishes no choices; the dropdown can be inspected but not set.
  • Name echoes restricted. The member-name echo is limited to the real format.* and currency.* members. Unknown members become supported=false.
  • Execution unchanged. Generated strategy execution and the existing input getters and setters are unchanged.

Evidence

  • Focused tests: 252 passed, covering all 31 built-in constant families as options and as defaults, the six affected real-world sources, negative controls, and native receipt checks at -O0 and -O2.
  • Full suite (-n 16): 5,837 passed, 39 skipped, 1 failed. The failure is missing set_recorded_series in a host-member table; it fails identically on base c1df8a6 and is unrelated.
  • Corpus compile: 314/314.
  • Strategy bodies: byte-identical to base for 325 corpus sources plus the six affected sources. Only the settings metadata of those six sources changes.
  • Receipts: each of the six affected libraries now builds its settings receipt cleanly.
  • Independent review: merge with fixes, no P0 or P1. Both P2s are fixed in a40f72d and db9f7d3.

A pre-existing, separate issue is tracked on its own: comparing a string input against a display constant in the strategy body.

🤖 Generated with Claude Code

@luisleo526
luisleo526 merged commit ec993b5 into main Oct 5, 2026
8 checks passed
@luisleo526
luisleo526 deleted the lv/d3-enum-option-strings branch October 6, 2026 01:25
luisleo526 added a commit that referenced this pull request Oct 6, 2026
* docs: changelog and version scoping for 1.3.0

1.3.0 pairs only with engine v1.3.0. The changelog section takes in the
Unreleased note and covers #173, #178, #179, #177, #174 and #175: the
confirmed-bar receipt and what engine v1.3.0's live runner does with it,
the capability receipt's request entries now read from the lowering, the
order-shapes receipt, which no engine reads yet, the checked settings fix
for string dropdowns with built-in constants (now supported=false where
1.2.0 wrote an integer code or published the input as supported), the
PineForge Source License 1.2, and the pairing and migration steps. The
Python and JSON contract is unchanged; the engine's report harness is the
same file as in v1.2.0, so no report key changes.

The README, AGENTS.md / CLAUDE.md, CONTRIBUTING.md, LEGAL.md,
docs/PUBLIC_CONTRACT.md, docs/pine-cap-activation.md and npm/README.md
name 1.3.0 where they named 1.2.0 as the current release or pair, the
pairing table gets a 1.3.0 row, the "unreleased (after 1.2.0)" markers
name 1.3.0, and the license badge reads 1.2. The release scoreboard
sentence and the pf markers are left to the release lane.

Measured for 1.3.0: the engine's 325 corpus sources and the 277 gate
fixtures, each in a fresh process, transpile to 1.2.0's C++ byte for byte
once the confirmed-bar and order-shapes functions are removed (13
refusals, same messages), with transpile_full results and transpile_json
envelopes without cpp equal to 1.2.0's, each in under 0.1 s on CPython
3.14.6 on an Apple M4 Max. The tutorial run of the quick-start C++
against engine main 7a1f01c0 (Linux x86_64, GCC 13) prints 9 trades and
+738.20, and 13 trades with the old sizing declared, as 1.2.0 with engine
v1.2.0 does.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* docs: release 1.3.0's grades in the README and the changelog, from the facts tokens

The README's release sentence moves to the releases[1.3.0] tokens and its
main-scoreboard lines re-render, and the 1.3.0 changelog says which registry
baseline grades the release and why that baseline is the release's code,
all rendered from pineforge-release facts/facts.json at ff21de0 (#32).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant