Repository navigation
v1.34.0 #66
v1.34.0
#66
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Docs — contracts / lifecycle / troubleshooting pages + README audit (#306, #310, #311, #315)
Documentation batch closing the fleet-day knowledge gaps (no code change, no version bump):
docs/contracts.md(new, #310) — the draft-visibility matrix (status ×auto-extractedtag ×--include-drafts→ recall/render), the--jsonoutput shapes (pointing at the #301 Zod schemas) +recall_statussemantics, and the FTS sanitization ruleset (what's stripped, what causesfts_unavailable).docs/lifecycle.md(new, #311) — the atom status state machine (incl. superseded vs archived vs expired and its recall behaviour), the tiered auto-promotion table (incl. #309 procedure executed-once), tag semantics (reservedauto-extracted, the #262 whitespace rule), and the hand-authored-vs-auto-extracted draft visibility asymmetry.docs/troubleshooting.md(new, #315) — five fleet failure modes with symptom/cause/fix/verify: better-sqlite3 node-gyp rebuild, cronPATH/MK_BIN(references the #345 fix),claude loginexpiry silently no-op'ingmk extract,fts_unavailablepunctuation, and theEMBEDDING_API_KEY-vs-OPENAI_API_KEYkey-set-but-0-vectors trap.--task/--embeddistinction, documented key fallback); added a NanoClaw/OpenClaw one-line gloss and links to the three new docs.Added —
--jsonoutput contracts as exported Zod schemas (#301)Every
mk --jsonoutput is an implicit contract integrators learn by trial-and-error (theseeds_usedmis-parse is the canonical cost). Zod is already a runtime dep, so the contracts are now explicit, exported, and test-enforced. Newsrc/schemas.tsexports Zod schemas (+ inferred types) for the four integrator-friction commands, from the package barrel:RecallOutputSchema(ContextBundle),DoctorOutputSchema(healthy/issue_count/issues/checks/fixes),RememberOutputSchema,EvalOutputSchema(fixtures/ok/exit_code), plus the building blocks (AtomOutputSchema,DoctorCheckResultSchema,EvalResultSchema,EvalQueryResultSchema). Derived from the actual output shapes;.passthrough()+ optional so additive fields don't break consumers. +5 tests (test/schemas.test.ts) run the real CLI and validate its output against each schema — the schema is the authoritative oracle, so it can't drift. The full human-readable contracts page is the #310 docs batch (it references these). New public exports → MINOR-class (rolls into v1.34.0).Added — tag-whitespace hygiene:
tag-formatdoctor check +mk rememberwarning (#262, absorbs #264)Tags in the mk convention are single hyphen-separated tokens. A space-joined list emitted as one YAML item (
tags: ["AIRE peer-review N-version …"]— from an observer LLM, or a quotedmk remember --tags "foo bar") is valid YAML but ONE opaque token that silently breaks FTS tag queries + tag filtering. Two delivery points share oneisValidTag()predicate (src/format.ts): (1) a newtag-formatmk doctorcheck (src/doctor/checks/tag-format.ts, warn) flags any atom whosescope.tags[]contains a whitespace token, naming the atom + tag; (2)mk rememberwarns at write time (non-fatal — still writes) when a--tagsvalue contains whitespace, with atag_warningfield in--jsonmode. Both sides check the normalized view (normalizeTags) so they agree: a space-joined"foo bar"is flagged, a comma-list"foo, bar"(split cleanly) is not. Nofix()(splitting is ambiguous → human review) — note this means a store carrying a legacy whitespace tag now makesmk doctorexit 1 (warn), surfaced by the cron self-canary, until the tag is hand-split. +7 tests (test/tag-whitespace.test.ts). Absorbs #264 (itsmk rememberhalf). Internal check + warning,isValidTagexported fromformat.ts— PATCH-class.Added —
mk lintstore-composition skew check +--strict(#316)Store composition is a retrieval-quality variable, not just hygiene: a belief-dominated store buries facts in recall (Mai's 89%-belief store sat a loud belief in the top-3 of 8/11 golden queries).
mk lint(knowledge-health) gains acompositioncheck over active atoms: warns on belief monoculture (beliefs > 80% of active atoms, citing the type histogram + recall-degradation risk) and on a composition gap (a core type — fact/decision/procedure/preference — with 0 active atoms). Only engages at ≥ 20 active atoms so fresh / lifecycle-seed-only / small stores aren't false-flagged. Newmk lint --strictexits 1 when any warning is present (defaultmk lintstill always exits 0 — no exit-code change without the flag). EnginefindCompositionSkew(src/lint.ts), newLintFinding.category: 'composition'. +7 tests (test/lint-composition.test.ts). New CLI flag, no exported-API change — rolls into the v1.34.0 MINOR.Fixed — cron wrapper memory-dir validation (host-vs-container) (#347)
mk init --cronbakes the given memory-dir into the wrapper; if generated with a container path while the systemd/cron timer fires on the host,mk render -d "$MEMORY_DIR"fails "Memory directory not found" and the nightly silently goes dark (the other half of the Taj incident; PATH was #345). Two layers: (1)mk init --cronnow warns (non-fatal) when the baked memory-dir doesn't exist on the generating host — catching the container-vs-host mistake early; (2) a newwrapper-memory-dirmk doctorcheck (src/doctor/checks/wrapper-memory-dir.ts, reusesdiscoverWrappers+parseGeneratedHeader) flags any installed wrapper whose baked# mk:memory-dirdoesn't resolve on the host it runs on, so doctor (and the cron self-canary) catch it where it matters. +4 tests. Internal check + a generation warning, no public API change — PATCH-class.Changed —
mk_context_bundle/checkpoint()now embeds the query when a key is set (#323)mk_context_bundle(the documented primary session-start/handoff retrieval) →checkpoint()used the synchronous FTS-only recall path and never embedded the query, even withEMBEDDING_PROVIDER+EMBEDDING_API_KEYset — onlymk_recalltook the semantic path, so conceptual queries missed at session start.checkpoint()is now async and routes recall throughrecallWithEmbeddings/recallIsolatedWithEmbeddings(same embed-then-FTS-fallback asmk recall --embed): with a key +taskit embeds the query; with no key or no task it degrades silently to FTS — no regression for offline/no-key/no-task. Callers updated to await (mk_context_bundleMCP handler,mk checkpointCLI, the openclaw plugin's bundle + pre-compaction hooks). +3 deterministic tests (test/checkpoint.test.ts) asserting the embed path engages with a key + task and is skipped otherwise; the live golden-query improvement is verified operator-side with a real key. Observable behavior change on a public retrieval path → MINOR-class (sets v1.34.0).checkpoint()'s return type changes toPromise<CheckpointResult>.This discussion was created from the release v1.34.0.
All reactions