Skip to content

Lambë 0.12.0#12

Merged
hakimjonas merged 1 commit into
mainfrom
release/0.12.0
Jun 1, 2026
Merged

Lambë 0.12.0#12
hakimjonas merged 1 commit into
mainfrom
release/0.12.0

Conversation

@hakimjonas
Copy link
Copy Markdown
Owner

Summary

Release commit for 0.12.0. Bundles the version bump, the regenerated
embedded artefacts, and a tree-wide diacritic correction that should
ride along with the release rather than land in a follow-up.

The release content itself was merged ahead of this PR via #10 and
#11. This PR is the release housekeeping plus the cleanup.

Release content (from #10 and #11)

Fixes (#10)

  • null | type returned JSON null instead of the string "null". The
    Pipe evaluator unconditionally short-circuited on null input;
    type now opts into a nullSafePipeOpNames set.
  • inferShape didn't model the null short-circuit, so null | length
    inferred any and --explain warned length rejects null; this will throw at runtime against both the documented contract and
    runtime behaviour. Fixed in inferPipeOpShape, _analyzeRejection,
    and the As branch in infer.dart.
  • null | as(toml) falsely advertised TOML and HCL as writable;
    As shape inference went through a separate code path that skipped
    inferPipeOpShape. Fixed by short-circuiting before synthesis.
  • SKILL.md claimed and/or/not would be parser-rejected. and
    and or are accepted as keyword aliases for && and ||; not
    is not. Doc and idiom hints corrected.

Features (#10)

  • lam --skill prints the embedded .agents/skills/lambe/SKILL.md.
    Intended use: lam --skill > .agents/skills/lambe/SKILL.md.
  • def is redirected with a non-goal hint.

CI (#10)

  • New generated-files-in-sync job re-runs gen_version.dart,
    gen_skill.dart, and manpage.dart, and fails if any output
    differs from the committed copy.
  • --ndjson stdin streaming test reframed lockstep, no CI skip.

Refactor: as flows through the spec table (#11)

Every pipe op (BuiltinPipeOp and the typed-argument As) now goes
through the same pipeOpInfoFor -> spec.eval / spec.infer dispatch.
The null short-circuit fix had to land in two parallel places before
this refactor; after this release there is one place.

Breaking

  • PipeOpInfo.eval signature changed from (ctx, args, eval) to
    (ctx, op, eval). Specs that need arguments destructure the AST
    themselves: (op as BuiltinPipeOp).args[0] for the generic case,
    (op as As).target for the typed case.
  • Public Remediation() and Remediation.withDisplay() factories
    that took a source string are removed. Internal callers
    exclusively used the private Remediation._.

Diacritic correction

The Quenya original is Lambë (umlaut). Two typos had spread:
Lambé (acute) and bare-ASCII Lambe in prose. Both flipped
tree-wide; legitimate ASCII references (package:lambe, URLs,
lambe.dart import paths, REPL prompt lambe>, banner lambe v...,
identifiers like lambeVersion, MCP tool names like lambe_query)
were left untouched. server.json "title" and the matching
template in release.yml flipped together so the MCP-registry
display name renders Lambë.

Release housekeeping

  • pubspec.yaml: 0.11.0 -> 0.12.0
  • lib/src/_version.dart regenerated
  • lib/src/_skill.dart regenerated from updated SKILL.md
  • doc/lam.1 regenerated; frontmatter source bumped to
    Lambë 0.12.0 and date to June 2026
  • CHANGELOG.md: 0.12.0 entry prepended
  • README.md REPL banner example: lambe v0.9.0 -> lambe v0.12.0
  • test/manpage_test.dart: pinned date updated to match frontmatter

Test plan

  • dart format --set-exit-if-changed . clean
  • dart analyze --fatal-infos clean
  • dart test -> 1676 pass
  • lambe_test/ subpackage tests pass
  • tool/release_prep.sh clean except for the expected
    "uncommitted changes" gate (running pre-commit) and the
    optional pana check (not installed locally)
  • tool/lint_changelog.sh -> all invariants pass (version 0.12.0)
  • generated-files-in-sync will pass: ran the three generators
    locally and the diff is empty

Tagging

After this lands on main, tag v0.12.0 to trigger the release
workflow. Not done in this PR.

PR #10 fixed six bugs against the 0.11.0 binary surfaced by an audit
against the published skill. PR #11 (stacked) addressed the underlying
smell: `as` was the lone pipe op outside the spec table, so per-op
invariants like the null short-circuit had to be reimplemented at its
callsite. Both PRs landed before the release tag; this commit bumps
versions, regenerates embedded artefacts, and corrects the diacritic
spelling of "Lambë" (the umlaut form is the Quenya original; both an
acute-form typo and a bare-ASCII typo had spread across docs and
prose).

Test count: 1676. Breaking: PipeOpInfo.eval signature and the public
Remediation source-string factories.
@hakimjonas hakimjonas merged commit f514e30 into main Jun 1, 2026
5 checks passed
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