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): 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.