at main
10 folders
7 files
feat(conf): serializeConf, lintRegistryForConf, round-trip guarantee
serializeConf renders a RunConfig to canonical TOML (hand-rolled, byte-exact
goldens): fixed section order, default flags omitted, deterministic key
order. Empty and scalar arrays render inline; object arrays become
array-of-tables; nested objects become dotted keys. Options: header comment
lines and annotate (each block's rendered assumptionTemplate as a comment).
The round trip is value-lossless: parseConf(serializeConf(c)) reproduces c
through the schema — asserted over the goldens, every standard block at its
defaultShadow, and a deterministic generated corpus (random subsets,
weights incl. "report"/null, lexicographic tiers). A schema-coverage test
pins runConfigSchema's top-level keys so a future addition fails loudly. An
integration test runs a project, serializes the filled config, reparses, and
reruns — identical schedule, scores, and embedded provenance.
lintRegistryForConf flags conf-inexpressible blocks (reserved-key param
collisions, null-admitting or unrenderable schemas); the standard registry
is clean.
feat(conf): parseConf — TOML pipeline configs (levelset/conf)
New levelset/conf subpath: parseConf reads a .conf (TOML 1.0) file — a text
projection of RunConfig — into a raw RunConfig. Sections map [levelset]/
[resolve]/[pipeline]/[blocks.<id>]/[weights]/[objective] onto the config;
reserved block keys (code/enabled/provenance/shadow) peel off as instance
fields, everything else is a param (dotted keys nest, array-of-tables become
object arrays, "report" ⇄ null). Every framework section is strict.
Coded issues E301–E308: TOML syntax (line/column), config shape (conf-path),
missing/unsupported format, datetime literal, reserved-key collision,
non-finite number, and registry validation (instanceId-attributed). With a
registry, parse also runs validateGraph + the shared checkRunConfigRefs
(extracted from fillRunConfig so the two can't drift). Adds smol-toml as a
regular dependency and the ./conf export.
Grammar goldens (fixture .conf ⇄ raw config JSON) plus one error fixture per
code.
feat(conf): serializeConf, lintRegistryForConf, round-trip guarantee
serializeConf renders a RunConfig to canonical TOML (hand-rolled, byte-exact
goldens): fixed section order, default flags omitted, deterministic key
order. Empty and scalar arrays render inline; object arrays become
array-of-tables; nested objects become dotted keys. Options: header comment
lines and annotate (each block's rendered assumptionTemplate as a comment).
The round trip is value-lossless: parseConf(serializeConf(c)) reproduces c
through the schema — asserted over the goldens, every standard block at its
defaultShadow, and a deterministic generated corpus (random subsets,
weights incl. "report"/null, lexicographic tiers). A schema-coverage test
pins runConfigSchema's top-level keys so a future addition fails loudly. An
integration test runs a project, serializes the filled config, reparses, and
reruns — identical schedule, scores, and embedded provenance.
lintRegistryForConf flags conf-inexpressible blocks (reserved-key param
collisions, null-admitting or unrenderable schemas); the standard registry
is clean.