Lambë 0.12.0#12
Merged
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 | typereturned JSON null instead of the string"null". ThePipeevaluator unconditionally short-circuited on null input;typenow opts into anullSafePipeOpNamesset.inferShapedidn't model the null short-circuit, sonull | lengthinferred
anyand--explainwarnedlength rejects null; this will throw at runtimeagainst both the documented contract andruntime behaviour. Fixed in
inferPipeOpShape,_analyzeRejection,and the
Asbranch ininfer.dart.null | as(toml)falsely advertised TOML and HCL as writable;Asshape inference went through a separate code path that skippedinferPipeOpShape. Fixed by short-circuiting before synthesis.and/or/notwould be parser-rejected.andand
orare accepted as keyword aliases for&&and||;notis not. Doc and idiom hints corrected.
Features (#10)
lam --skillprints the embedded.agents/skills/lambe/SKILL.md.Intended use:
lam --skill > .agents/skills/lambe/SKILL.md.defis redirected with a non-goal hint.CI (#10)
generated-files-in-syncjob re-runsgen_version.dart,gen_skill.dart, andmanpage.dart, and fails if any outputdiffers from the committed copy.
--ndjson stdin streamingtest reframed lockstep, no CI skip.Refactor:
asflows through the spec table (#11)Every pipe op (BuiltinPipeOp and the typed-argument
As) now goesthrough the same
pipeOpInfoFor -> spec.eval / spec.inferdispatch.The null short-circuit fix had to land in two parallel places before
this refactor; after this release there is one place.
Breaking
PipeOpInfo.evalsignature changed from(ctx, args, eval)to(ctx, op, eval). Specs that need arguments destructure the ASTthemselves:
(op as BuiltinPipeOp).args[0]for the generic case,(op as As).targetfor the typed case.Remediation()andRemediation.withDisplay()factoriesthat took a
sourcestring are removed. Internal callersexclusively used the private
Remediation._.Diacritic correction
The Quenya original is
Lambë(umlaut). Two typos had spread:Lambé(acute) and bare-ASCIILambein prose. Both flippedtree-wide; legitimate ASCII references (
package:lambe, URLs,lambe.dartimport paths, REPL promptlambe>, bannerlambe v...,identifiers like
lambeVersion, MCP tool names likelambe_query)were left untouched.
server.json"title"and the matchingtemplate in
release.ymlflipped together so the MCP-registrydisplay name renders
Lambë.Release housekeeping
lib/src/_version.dartregeneratedlib/src/_skill.dartregenerated from updated SKILL.mddoc/lam.1regenerated; frontmatter source bumped toLambë 0.12.0and date to June 2026lambe v0.9.0->lambe v0.12.0test/manpage_test.dart: pinned date updated to match frontmatterTest plan
dart format --set-exit-if-changed .cleandart analyze --fatal-infoscleandart test-> 1676 passlambe_test/subpackage tests passtool/release_prep.shclean 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-syncwill pass: ran the three generatorslocally and the diff is empty
Tagging
After this lands on
main, tagv0.12.0to trigger the releaseworkflow. Not done in this PR.