Beislið v0.4.10
This release covers all changes since the last published GitHub release, v0.4.0.
Highlights
- The workflow.md parser contract is now canonical: a golden conformance corpus (17 cases), a frozen error-code catalog, and YAML-lite scalar semantics, all running in CI (BEI-131).
This is the port target for olin - implementations port againsttests/conformance/cases/, not against the Python code. - P0 integrity fixes: fail-closed action-policy payload validation, run-ledger redaction aligned with policy secret patterns, and interrupt-safe staged project installs (BEI-128, BEI-129, BEI-130).
- Execution-envelope contract extracted into declarative JSON schemas, orphaned validators wired into CI, and a nightly agent-smoke suite (BEI-133, BEI-134, BEI-135).
Parser behavior changes (BEI-131)
The deterministic decisions from the 2026-07-03 HITL session (docs/plans/2026-07-03-bei-131-canonical-parser-decisions.md) are now implemented and pinned by the corpus.
Each of these is a behavior change from v0.4.9 and earlier:
- Trailing comments in unquoted scalars are stripped (YAML semantics): a
#preceded by whitespace ends the value, soparallel_safe: true # optionalnow parses as booleantrue.
Quoted values keep#literally.
Previously the comment stayed inside the value. - Inline flow maps are rejected:
- { name: lint, command: 'pnpm lint' }is now aflow_map_unsupportederror instead of a silent literal string.
Block style is the one canonical mapping syntax. - Parse diagnostics report absolute workflow.md line numbers, not indexes into a comment-stripped array.
- Unknown
beislid:*fence keys now warn (unknown_fence_key, exit 0) against the full documented fence-key registry (~25 keys), instead of being silently ignored.
Newer fence keys degrade gracefully against older normalizers. - Registered-but-unconsumed fence blocks are now syntax-checked: a malformed
scopesorbabysitblock fails the file with a parse error, where the old normalizer never looked at it.
Well-formed blocks owned by other tools are still skipped silently. - Tier enums are validated at normalize time:
tierskeys must belight,standard,heavy, orfrontier, andtier_modemust bepreferorrequire; violations areinvalid_valueerrors. modelandmodelson one route are mutually exclusive: both present is now aninvalid_valueerror instead ofmodelbeing silently dropped.- Decimal floats parse as numbers:
-?\d+\.\d+(e.g.1.5) is a JSON number.
Exponents,1.,.5, and1.5.2stay strings. - Nested inline lists are rejected: a
[inside an inline list is anested_inline_listerror pointing at block style. - Strict quote semantics: double-quoted scalars process exactly
\n,\t,\\,\"; any other escape is anunknown_escapeerror.
Single-quoted scalars are literal except''->'.
Unterminated or mismatched quotes areunterminated_quoteerrors instead of silently passing through as literal strings. - Unterminated fence blocks are
malformed_blockerrors: abeislid:*fence without a closing fence line was previously ignored entirely; it now fails the file. - Unterminated inline lists are
malformed_blockerrors (a missing]with no trailing comment). gate_setsandlifecycle_actionspass through unknown keys in the normalized envelope instead of projecting down to their known fields, matching the other sections.
Note:sets: nullis no longer coerced to{}.- Duplicate
beislid:*fences keep the existing behavior (warn + first occurrence wins), now pinned by the corpus.
Parser infrastructure (BEI-131)
- Golden conformance corpus:
tests/conformance/cases/(17 input/expected-envelope pairs) with thescripts/run_conformance.pyrunner, wired into CI as thenormalizer-conformancejob. - Frozen diagnostic catalog:
docs/parser-conformance.mddocuments all 14 error/warning codes with severity and path conventions.
These codes are stable from this release onward. - Format doc amendments: the scopes examples use block style, and the YAML-lite scalar rules (comments, floats, quotes, inline lists) are documented in
.beislid/workflow-md-format.md, so doc and implementation agree.
Fixes and hardening
- Fail-closed action-policy payload schema validation (BEI-128).
- Run-ledger redaction aligned with policy secret patterns (BEI-129).
- Interrupt-safe staged project copy installs (BEI-130).
- Orphaned validators and tests wired into CI (BEI-133).
- Skill portability gaps fixed for non-Claude hosts.
Workflow and orchestration
- Execution-envelope contract extracted into declarative JSON schemas (BEI-134).
- Nightly agent-smoke suite with fixture library and blueprint/implement/review/rinse/setup scenarios (BEI-135).
command_proofsadded as a distinct per-slice envelope contract field (RON-146).- Babysit now requires a
rondo.final_report/v0JSON final response. - Workflow-signal heartbeat hook, sweep command, and stale reporting.
scripts/validate.shlocal CI mirror plusdocs/testing.md.