Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
263 commits
Select commit Hold shift + click to select a range
b98f579
fix(cli): uteke-cli crates.io publish failure + release verify step (…
ajianaz Aug 14, 2026
6e4dac1
chore: bump version to 0.14.2 (#1031)
ajianaz Aug 14, 2026
2253e07
ci(release): reject stale RELEASE_NOTES.md (#1033)
ajianaz Aug 14, 2026
9d3ad3a
fix: HTTP & MCP recall strategy — default hybrid, loud validation (#1…
ajianaz Aug 15, 2026
76d24b5
chore: bump version to 0.14.3 (#1039)
ajianaz Aug 15, 2026
c2d85de
fix(ci): release notes heredoc executed installer on runner — use tem…
ajianaz Aug 15, 2026
fdc0c68
docs: sync stale version refs, roadmap v0.13–v0.14, merge comparison …
ajianaz Aug 17, 2026
3780a3e
docs(agent): Critical Rule #14 — explicit approval before execution (…
ajianaz Aug 17, 2026
f5029a3
test: use ORT_LIB_NAME in find_ort_in_dir exact-match test (#1054) (#…
ajianaz Aug 17, 2026
de17609
chore: switch ID generation new_v4 → now_v7 (#1058) (#1060)
ajianaz Aug 17, 2026
ec23866
fix: soft-forgotten memories leak into list, search, and doctor count…
ajianaz Aug 17, 2026
8451a80
fix: search_content(None) coerced to default namespace — cross-namesp…
ajianaz Aug 17, 2026
5b8ec19
fix: recall cache hit skips salience/recency boosts — cold/warm score…
ajianaz Aug 17, 2026
021f22f
fix: /export drops namespace attribution + deprecated-row delta undoc…
ajianaz Aug 17, 2026
f6337fc
fix(mcp): uteke_dream destructive defaults — dry-run first, scope or …
ajianaz Aug 17, 2026
0a6331d
feat(mcp): enrich tool outputs agents need — stats tiers/namespaces, …
ajianaz Aug 17, 2026
faaf7f3
feat(mcp): uteke_get + uteke_update tools; short-ID resolution for al…
ajianaz Aug 17, 2026
b8c695e
feat: structural export — full-store round-trip (rooms, graph, edges,…
ajianaz Aug 17, 2026
33fad47
feat: supersession workflow — mark stale decisions superseded, flagge…
ajianaz Aug 17, 2026
db7299a
ci: add source-branch-check — PRs into main must come from develop (#…
ajianaz Aug 19, 2026
5983654
chore: bump version to 0.15.0 (#1073)
ajianaz Aug 19, 2026
072e188
ci: source-branch-check allows chore/release-* release branches (#1075)
ajianaz Aug 19, 2026
2102724
ci: bump actions/download-artifact v4 -> v8 (Node 24) (#1080)
ajianaz Aug 19, 2026
2076bc0
fix(core): structural import silently dropped room_documents + harden…
ajianaz Aug 19, 2026
38a5db8
fix(ci): skip CLA check for bots (dependabot, renovate, github-action…
ajianaz Aug 20, 2026
0dd4592
feat(core): add author_type (human|agent) to memory records (#1084)
ajianaz Aug 24, 2026
0ef1854
fix(server): wire 'at' time-travel param into /room/recall (#1085)
ajianaz Aug 24, 2026
d6ff6bb
docs(server): document deprecation time-travel limitation (#1086) (#1…
ajianaz Aug 24, 2026
bca7666
feat(core): room semantic segmentation (LLM-free, #1088) (#1090)
ajianaz Aug 25, 2026
1a61919
feat(core): expose semantic segments in room_summary (#1088) (#1091)
ajianaz Aug 25, 2026
5052c32
feat(core): segment-level consolidation planner, measure-only (#1088)…
ajianaz Aug 25, 2026
5ab4633
feat(core): provenance trust policy for consolidation (#1089) (#1093)
ajianaz Aug 25, 2026
f6bdb84
feat(core): LLM consolidation executor reusing extraction setup (#108…
ajianaz Aug 25, 2026
0c3f89e
feat: wire consolidation pipeline into core, CLI, and HTTP (#1088) (#…
ajianaz Aug 25, 2026
c1bba22
chore(docs): regenerate api-reference via docgen (#1095 follow-up) (#…
ajianaz Aug 25, 2026
9bc82c4
feat(core): vecq pure-Rust vector backend behind feature flag (#1099)
ajianaz Aug 26, 2026
17e2f91
fix(core): track deprecated_at for correct time-travel recall (#1086)…
ajianaz Aug 26, 2026
13b1d6d
chore: remove embed_cache.db artifact and ignore it (#1101)
ajianaz Aug 26, 2026
e7c127e
feat: per-pair dedup control via POST /consolidate/pair (#1076) (#1102)
ajianaz Aug 26, 2026
f07dfef
fix(ci): keep v prefix in release notes download table + pinned insta…
ajianaz Aug 26, 2026
19a1fe1
feat(server): add --version/-V flag to uteke-serve (#1044) (#1104)
ajianaz Aug 26, 2026
72fd7d9
fix(cli): honor UTEKE_HOME as store path override (#1105) (#1107)
ajianaz Aug 26, 2026
1a081e2
fix: echo author_type in remember responses + CLI --author-type flag …
ajianaz Aug 26, 2026
3f0cf32
fix(core): repair() no longer evicts document chunk vectors from inde…
ajianaz Aug 26, 2026
27a2b4f
fix(build): vecq binaries now buildable via forwarded backend feature…
ajianaz Aug 26, 2026
b4f0b8a
fix(core): backend-aware index filename, doctor label, forget --confi…
ajianaz Aug 26, 2026
668ed6c
fix(core): verify/doctor count doc chunks on DB side, no false MISMAT…
ajianaz Aug 26, 2026
9c1979e
fix(cli): repair report compares against memories + chunks (#1117)
ajianaz Aug 26, 2026
46e1c47
test(longmemeval): fast-eval foundation — datasets + Modal harness + …
ajianaz Aug 27, 2026
e65f36a
test(longmemeval): temporal date-window boost (#1119) (#1126)
ajianaz Aug 27, 2026
ac951f7
test(longmemeval): MMR diversity rerank flag + replay recording (#112…
ajianaz Aug 27, 2026
4e32746
fix(longmemeval): dataset-tagged volume paths + qid-set cache validat…
ajianaz Aug 27, 2026
9cb7cbb
fix(core): make sha2 non-optional — no-default-features profile compi…
ajianaz Aug 28, 2026
e27dbe5
feat(core): Fusion as default recall strategy + benchmark tooling (v0…
ajianaz Aug 28, 2026
c6cf669
feat(bench): UTEKE_GIT_REF — build validation binary from exact SHA i…
ajianaz Aug 29, 2026
bfbc296
fix(bench): install build-essential for git-ref image build (linker c…
ajianaz Aug 29, 2026
14b37ab
docs(bench): pure-default 500Q validation — fusion 0.946 R@5 (+9.2 vs…
ajianaz Aug 29, 2026
8a6d48f
docs: fusion weights = internal hasil tuning, bukan bagian kontrak pu…
ajianaz Aug 29, 2026
8dc6c4a
docs(bench): LongMemEval-S 500Q results page — dual-metric + comparis…
ajianaz Aug 29, 2026
bfed150
chore(release): CHANGELOG 0.16.0 — full-release validation numbers + …
ajianaz Aug 29, 2026
468f842
fix(core): repair --reembed can now repair NULL-embedding rows (#1146…
ajianaz Aug 29, 2026
7facdeb
fix(ci): CLA check skips bot PRs with exact allowlist (#1132) (#1148)
ajianaz Aug 29, 2026
18ff623
fix(cli): repair --reembed report reflects final index state (#1149) …
ajianaz Aug 29, 2026
da46d40
chore(ci): bump actions/github-script from v7 to v9 (#1151)
ajianaz Aug 29, 2026
febee27
test(cli): resolve_namespace precedence — flag > env > config > defau…
ajianaz Aug 29, 2026
512f379
test(cli,core): env parsing guards + validate_input_with_limits bound…
ajianaz Aug 29, 2026
d03375c
test(core): ensure_embedder branch coverage — unknown/custom/openai-m…
ajianaz Aug 29, 2026
978003f
test(cli): cover TOML helpers — migrate_content, global_config_path, …
ajianaz Aug 29, 2026
a0a400d
docs: refresh documentation for 0.16.0 — fusion default, updated benc…
ajianaz Aug 29, 2026
92b485b
chore: sync main back into develop after #1158 docs carry (#1159)
ajianaz Aug 29, 2026
a83987d
docs(contributing): require CLA + state contributions are unpaid (#1162)
ajianaz Aug 30, 2026
cf49be8
deps(core): bump vecq-core 0.1.1 -> 0.3.0, adopt 4-bit + residual pro…
ajianaz Aug 31, 2026
10ddcc4
fix(core): feature-aware embedder default in open() + open_with_backe…
ajianaz Aug 31, 2026
75b72ff
feat(core): runtime-selectable vector engine (usearch + vecq in one b…
ajianaz Aug 31, 2026
c0b92cb
feat(build): dual-engine default — official binaries ship usearch + v…
ajianaz Aug 31, 2026
652fca6
docs(bench): independent reproduction results + surfaced headline num…
ajianaz Sep 1, 2026
4dd7c54
chore(deps): bump flate2 from 1.1.9 to 1.1.10 (#1175)
dependabot[bot] Sep 3, 2026
39f877a
chore(deps): bump which from 8.0.5 to 8.0.6 (#1176)
dependabot[bot] Sep 3, 2026
2cc0474
chore(deps): bump usearch from 2.26.0 to 2.26.1 (#1177)
dependabot[bot] Sep 3, 2026
51707f3
chore(deps): bump uuid from 1.24.0 to 1.26.0 (#1178)
dependabot[bot] Sep 3, 2026
bd2288c
fix(room): honest room_delete reporting across CLI/HTTP/MCP — count u…
ajianaz Sep 3, 2026
cbccebb
fix(server): resolve memory IDs to graph nodes in /graph/edge endpoin…
ajianaz Sep 5, 2026
0f75a96
feat(api): namespace management — move, rename/merge, delete with str…
ajianaz Sep 5, 2026
16f1186
feat(core): provenance data model — source hash, event actor/evidence…
ajianaz Sep 5, 2026
841e990
feat: contradiction resolution ledger + undo across CLI/HTTP/MCP (#11…
ajianaz Sep 5, 2026
d0243a7
feat: explain recall — ranking signals on CLI, HTTP, and MCP (#1160) …
ajianaz Sep 6, 2026
8a28aef
fix: graph excludes stale memory nodes + readable node labels (#1189 …
ajianaz Sep 6, 2026
9bd004d
feat: /list pagination metadata envelope (#1188) (#1191)
ajianaz Sep 6, 2026
29d50d7
feat: contradiction benchmark segment + uteke supersede CLI (#1172 F3…
ajianaz Sep 6, 2026
b15c2c4
chore: release 0.17.0 (#1194)
ajianaz Sep 6, 2026
591f64d
chore: post-release sync main→develop + AGENTS.md (0.17.0) (#1198)
ajianaz Sep 6, 2026
100c3e2
docs: AGENTS.md points to codecora-workflow-standard room as workflow…
ajianaz Sep 6, 2026
c399678
feat(api): room rename, room update, memory room-move + CLI memory up…
ajianaz Sep 7, 2026
2da9693
docs(benchmarks): surface benchmark proof in README, fix stale versio…
ajianaz Sep 9, 2026
5ad4ce7
docs(benchmarks): restructure into internal/longmemeval/locomo, commi…
ajianaz Sep 9, 2026
5300c88
fix(core): verify dedup candidates are live before skipping insert (#…
ajianaz Sep 9, 2026
759dd13
docs(readme): benchmark-first restructure + self-service reproduction…
ajianaz Sep 9, 2026
fa38c48
bench(locomo): full 1536-QA results on v0.17.0 — fusion wins strict f…
ajianaz Sep 9, 2026
cfe217e
bench(longmemeval): v0.17.0 re-validation complete — headline numbers…
ajianaz Sep 9, 2026
05457d1
docs(readme): align headline numbers with owner decisions — 45ms late…
ajianaz Sep 9, 2026
d2aa018
docs(readme): fix badge anchor + humanizer/copywriting pass (zero em …
ajianaz Sep 9, 2026
2fbbd7d
docs(readme): embed v0.17 revalidation chart in the benchmark section…
ajianaz Sep 9, 2026
d1f2144
docs: sync Indonesian README + docs with v0.17.0 benchmark decisions …
ajianaz Sep 9, 2026
8657dbb
docs: document namespace management (#1181) and sync MCP tool table w…
ajianaz Sep 10, 2026
42d1e66
fix(benchmarks): correct LoCoMo category label mapping (official 1=si…
ajianaz Sep 10, 2026
b4d3991
fix(install): copy bundled ORT libs on binary install (#1221)
KazamiHazaki Sep 11, 2026
3fe6a6b
fix(ci): make cla-check work for fork PRs (#1224)
ajianaz Sep 11, 2026
7924453
chore(deps): bump usearch from 2.26.1 to 2.26.2 (#1204)
dependabot[bot] Sep 11, 2026
4e17273
chore(deps): bump tokenizers from 0.23.1 to 0.23.2 (#1206)
dependabot[bot] Sep 11, 2026
2804b55
chore(deps): bump dirs from 6.0.0 to 7.0.0 (#1207)
dependabot[bot] Sep 11, 2026
fd83959
fix(ci): skip branch naming and PR description checks for bot PRs (#1…
ajianaz Sep 11, 2026
b9bb420
chore(deps): bump toml from 1.1.4+spec-1.1.0 to 1.1.5+spec-1.1.0 (#1205)
dependabot[bot] Sep 11, 2026
f4bdae7
fix(cli): default recall min_score 0.3 -> 0.0 (#1223) (#1228)
ajianaz Sep 11, 2026
3b93b34
benchmarks: preserve AMB (agent-memory-benchmark) run kit (#1226) (#1…
ajianaz Sep 11, 2026
a6f1e5e
chore: revert "benchmarks: preserve AMB run kit (#1230)" (#1235)
ajianaz Sep 11, 2026
6ffd8db
feat(ingest): --timestamp date anchors for remember and text import (…
ajianaz Sep 12, 2026
c7329ab
test(recall): payload conformance — full payload contract, no stubs (…
ajianaz Sep 14, 2026
875a68a
chore: bump version 0.17.0 -> 0.18.0 (#1241)
ajianaz Sep 14, 2026
14da6d0
chore(release): v0.18.0 - changelog, docs, version refs (#1242)
ajianaz Sep 14, 2026
be8e99d
docs: sync remaining version refs to v0.18.0 (#1247)
ajianaz Sep 14, 2026
e5393e0
chore(deps): bump rustls to 0.23.45 for RUSTSEC-2026-0285 (#1250)
ajianaz Sep 15, 2026
d36e0c8
docs(changelog): add Contributors section to 0.18.0 (KazamiHazaki #12…
ajianaz Sep 15, 2026
0587024
ci(release): auto-append external contributor credits to release note…
ajianaz Sep 15, 2026
f914300
fix(export): keep junction dumps FK-consistent with soft-deleted memo…
ajianaz Sep 15, 2026
477ac67
fix(server): reject unknown keys in remember payloads with a 400 (#1254)
ajianaz Sep 15, 2026
2a2160b
fix(cli): upgrade companion binaries and ORT libs, normalize version …
ajianaz Sep 15, 2026
ae144a8
feat(cli): one-line footer after successful uteke doctor (#1256)
ajianaz Sep 15, 2026
564896d
fix(server): minimal health payload for tokenless requests (#1257)
ajianaz Sep 15, 2026
12cac65
chore(release): v0.18.1 - version bump, changelog, docs sync (#1259)
ajianaz Sep 15, 2026
8e57e1c
chore(deps): bump toml from 1.1.5+spec-1.1.0 to 1.1.6+spec-1.1.0 (#1263)
dependabot[bot] Sep 16, 2026
dc9c8d6
chore(deps): bump uuid from 1.26.0 to 1.26.1 (#1264)
dependabot[bot] Sep 16, 2026
c0573a4
docs: replace self-hosted star chart with star-history.com embed (#1265)
ajianaz Sep 16, 2026
e9f9fa5
fix: doc list honors --namespace on CLI, HTTP, and MCP (#1268) (#1269)
ajianaz Sep 17, 2026
8ccc600
fix: unified recall scopes docs to namespace, reports honest scores (…
ajianaz Sep 17, 2026
82caf9b
feat: expose verify/repair over HTTP and MCP (#1266) (#1272)
ajianaz Sep 17, 2026
e35ad95
feat: ship SKILL.md in version lockstep with the CLI (#1267) (#1274)
ajianaz Sep 17, 2026
9bdccbd
docs: point AGENTS.md at the written CORE/LAB contract (uteke doc kon…
ajianaz Sep 18, 2026
34fbc85
feat: tier-tag the API registry and generate the CORE contract list (…
ajianaz Sep 18, 2026
d09b2f6
fix: report embedding write failures honestly across remember surface…
ajianaz Sep 18, 2026
e2035d1
chore(release): v0.18.2 — backport unified doc recall fix (#1270) (#1…
ajianaz Sep 18, 2026
320ce62
chore(release): complete v0.18.2 metadata lost in #1278 squash (#1279)
ajianaz Sep 18, 2026
4cc1c13
feat(core): audit-grade timeline — history survives forget, deprecate…
ajianaz Sep 18, 2026
be905f1
chore(docs): evergreen README hero banner + install URL consistency (…
ajianaz Sep 23, 2026
11730c2
feat(recall): budgeted context pack — --pack on CLI, HTTP, and MCP (#…
ajianaz Sep 23, 2026
d9b29ac
chore(deps): bump clap_complete from 4.6.9 to 4.6.11 (#1285)
dependabot[bot] Sep 24, 2026
3298980
chore(deps): bump vecq-core from 0.3.0 to 0.3.1 (#1286)
dependabot[bot] Sep 24, 2026
7632a85
chore(deps): bump clap from 4.6.6 to 4.6.7 (#1287)
dependabot[bot] Sep 24, 2026
8e138ad
fix(api): honor namespace filter on GET /room/memories (#1288) (#1290)
ajianaz Sep 28, 2026
fbfed5f
feat(api): add GET /routes machine-readable endpoint registry (#1289)…
ajianaz Sep 28, 2026
a338176
chore: release v0.19.0 — version bump + CHANGELOG (#1292)
ajianaz Sep 28, 2026
29c9222
docs: remove non-existent Homebrew tap from install options (#1294)
ajianaz Sep 29, 2026
bf4b153
docs(benchmark): commit raw v0.19.0 500Q results (default-500q-v0.19.…
ajianaz Sep 29, 2026
5efe695
docs(benchmark): re-anchor headline to v0.19.0 raw (98.2% any@5) + th…
ajianaz Sep 29, 2026
4a7606c
docs(benchmark): fix v0.19.0 chart bottom spacing (tick gap + divider…
ajianaz Sep 29, 2026
d39a7b3
docs: sync mcp.md + architecture.md with 0.19.0 reality (#1298)
ajianaz Sep 29, 2026
aeee520
feat(integrations): committed Hermes plugin package + drift guard (#1…
ajianaz Oct 1, 2026
6307727
fix(server): honor explicit memory type on plain /remember (#1303)
ajianaz Oct 3, 2026
c545566
chore(deps): bump thiserror from 2.0.20 to 2.0.21 (#1299)
dependabot[bot] Oct 3, 2026
c862793
docs(branding): replace Zero cloud tagline with local-first wording (…
ajianaz Oct 3, 2026
2ad9e5c
fix(upgrade): make 302-redirect primary path actually work for latest…
ajianaz Oct 5, 2026
9c06b22
fix(upgrade): honor GITHUB_TOKEN in the API fallback (#1309)
ajianaz Oct 5, 2026
d9e3164
fix(upgrade): harden temp dir, download timeouts, checksum match, and…
ajianaz Oct 5, 2026
8cb2d47
ci(release): auto-update homebrew-tap formula on new release (#1311)
ajianaz Oct 5, 2026
fd6c0c1
docs: add Homebrew install option (#1312)
ajianaz Oct 5, 2026
f416076
chore(release): v0.19.1 - version bump, changelog, docs sync (#1313)
ajianaz Oct 5, 2026
31f6d53
fix: keep index on lock timeout, release server slot on panic, send C…
ajianaz Oct 7, 2026
8d225ed
security: untrusted project config, CORS off by default, list limit c…
ajianaz Oct 7, 2026
d47bdb9
docs(skill): refresh uteke-memory skill and add command coverage test…
ajianaz Oct 7, 2026
e49ce26
chore(deps): bump usearch from 2.26.2 to 2.26.3 (#1317)
dependabot[bot] Oct 7, 2026
1c1cb5a
chore(deps): bump uuid from 1.26.1 to 1.27.0 (#1316)
dependabot[bot] Oct 7, 2026
9d6d578
fix(upgrade): retry ETXTBSY when verifying the freshly copied binary …
ajianaz Oct 7, 2026
a1b6e07
fix(cli): checksum --json exit code, merge lifecycle/aging/top-level …
ajianaz Oct 7, 2026
12fe033
fix(core): FTS5 columns, unix index lock, pinned bulk delete, doc_sea…
ajianaz Oct 7, 2026
81189ef
refactor(core): share one column list between memory SELECTs and row_…
ajianaz Oct 7, 2026
6e00da0
refactor(core): index_sync module owns insert/remove/persist policy (…
ajianaz Oct 7, 2026
6aa7b37
refactor(core): route remaining index writes through index_sync (#1348)
ajianaz Oct 7, 2026
6d0b778
refactor(core): document upsert/update as embed-then-commit (#1350)
ajianaz Oct 7, 2026
b92f139
fix(core): correct documents_fts update/delete triggers for external-…
ajianaz Oct 7, 2026
9af3f07
refactor: shared config layer resolution in uteke-core (#1354)
ajianaz Oct 7, 2026
6748e47
docs(skill): add namespace/room/tag conventions to uteke-memory skill…
ajianaz Oct 7, 2026
c06e549
fix(mcp): add full_ids option so UUIDv7 id prefixes can be disambigua…
ajianaz Oct 7, 2026
efafe94
fix(server,mcp): harden /import limit, /mcp body+CORS, and resolve_id…
ajianaz Oct 7, 2026
8c25563
security(server): validate Host header to block DNS rebinding (#1360)
ajianaz Oct 7, 2026
05ce8b2
perf(core): release the embedder lock between document chunks (#1323)…
ajianaz Oct 7, 2026
bab1767
fix(core): verify index/.keys sidecar consistency on load (#1325) (#1…
ajianaz Oct 7, 2026
07f5328
perf(core): batch vector-index saves instead of rewriting per write (…
ajianaz Oct 7, 2026
c0b713d
perf(core): compact the vecq index when dead rows pass 25% (#1364)
ajianaz Oct 8, 2026
b1056e4
fix(graph): serve memory_edges in GET /graph; fix FK violations in MC…
ajianaz Oct 8, 2026
a1d5dc2
chore(bench): fix fast-eval id path; make Modal model dir and ORT rel…
ajianaz Oct 8, 2026
77f4bf9
fix(core): edges to deprecated memories no longer count in graph rera…
ajianaz Oct 8, 2026
4bd5592
perf(core): remember() no longer scans the namespace or holds the ind…
ajianaz Oct 8, 2026
686b73c
fix(core): documents has_children, legacy-path move, tag rename dupes…
ajianaz Oct 8, 2026
52c685d
fix(cli): recall flags via server, list filters, doc tree/export, upg…
ajianaz Oct 8, 2026
75a5324
fix(core): re-parenting doc upsert carries the whole subtree (#1378)
ajianaz Oct 8, 2026
939ab56
chore(release): v0.20.0 - version bump, changelog, docs sync (#1379)
ajianaz Oct 8, 2026
de305c8
ci(release): open the homebrew-tap PR in the tap's required format an…
ajianaz Oct 8, 2026
59e2017
ci: pass the PR base branch to the Cora review action (#1386)
ajianaz Oct 8, 2026
93e8145
docs(agents): document the real release procedure and where the cloud…
ajianaz Oct 8, 2026
fd01520
feat(mcp): uteke_room_recall parity with uteke_recall (#1335) (#1389)
ajianaz Oct 8, 2026
6eace89
docs: add Uteke memory conventions standard to AGENTS.md (#1382)
ajianaz Oct 8, 2026
d303694
docs(benchmark): commit raw v0.20.0 500Q results + four-release stabi…
ajianaz Oct 8, 2026
122ff87
fix(mcp): room recall pack keeps skipped reasons and applies limit af…
ajianaz Oct 9, 2026
3d1c427
feat(mcp): name filter for uteke_room_list (#1336) (#1393)
ajianaz Oct 9, 2026
bfe41d6
ci(release): sign checksums-sha256.txt with cosign keyless (#1327) (#…
ajianaz Oct 9, 2026
c4fceaa
feat(guide): generic 'conventions first' rule in guide, skill and MCP…
ajianaz Oct 9, 2026
22314a2
feat(core): count recall/search hits in recall_count, apart from expl…
ajianaz Oct 9, 2026
20f4f6c
fix(docker): skip the ONNX download for non-onnx backends and fail cl…
ajianaz Oct 9, 2026
3446ec1
fix(server): honour [embedding]/[vector] config and UTEKE_EMBEDDING_B…
ajianaz Oct 9, 2026
96e49c0
test(core): kill mutants missed in room recall and orphan scoring (#1…
ajianaz Oct 9, 2026
c315d78
docs(agents): make the pre-release mutation gate run on the release d…
ajianaz Oct 9, 2026
0e7b308
docs(recall): explain what recall scores mean per strategy (#1405) (#…
ajianaz Oct 9, 2026
475e8ca
docs(recall): correct the default salience/recency weights (#1408) (#…
ajianaz Oct 9, 2026
3af904e
docs(changelog): record the v0.20.1 patch on develop (#1411)
ajianaz Oct 9, 2026
a42d455
fix(core): count a recall once, and only the memories it returns (#14…
ajianaz Oct 9, 2026
460e832
refactor(server): read [embed_fallback] and resolve its env overrides…
ajianaz Oct 9, 2026
90e1012
refactor(server): read the graph-rerank and jaccard keys of [recall] …
ajianaz Oct 9, 2026
4cbe3a3
refactor(server): read [tier] from uteke.toml (#1418) (#1419)
ajianaz Oct 9, 2026
a95eb28
docs(docker): explain .env vs environment/env_file, UTEKE_AUTH_TOKEN …
ajianaz Oct 9, 2026
57c5278
fix(cli): harden uteke upgrade (tag chars, download size cap, archive…
ajianaz Oct 9, 2026
9e6c60d
refactor(core): typed recall request shared by HTTP, MCP and CLI (#13…
ajianaz Oct 9, 2026
3ead243
docs(readme): fix broken benchmark badge anchor (#1428)
ajianaz Oct 10, 2026
3a318fc
docs(changelog): add missing version link-refs (0.9.0..0.20.1) and re…
ajianaz Oct 10, 2026
e04cf21
docs(readme): fix trailing-dash FAQ anchor to Why Uteke (#1430)
ajianaz Oct 10, 2026
d811c93
refactor(core): typed list request shared by HTTP, MCP and CLI (#1343…
ajianaz Oct 12, 2026
af3da99
refactor(core): typed remember request shared by HTTP, MCP and CLI (#…
ajianaz Oct 12, 2026
4037d00
refactor(core): typed forget request shared by HTTP, MCP and CLI (#13…
ajianaz Oct 12, 2026
8aacfee
feat(core): namespace deprecation signal on writes (#1427, phase 1) (…
ajianaz Oct 12, 2026
33c3e30
fix(server): stop % and _ in a forget id from acting as LIKE wildcard…
ajianaz Oct 12, 2026
a6c5f52
refactor(server): registry drives dispatch and the read-only gate (#1…
ajianaz Oct 12, 2026
6a1273f
docs: LAN access guide and MCP authentication options (#1431, #1433) …
ajianaz Oct 12, 2026
d7c8007
security(deps): bump quinn-proto to 0.11.19 (RUSTSEC-2026-0338..0342)…
ajianaz Oct 13, 2026
5abb8b7
docs(agents): project room protocol and no AI attribution (#1440)
ajianaz Oct 13, 2026
7af227c
security(mcp): per-tool read-only gate for MCP over HTTP (#1441)
ajianaz Oct 13, 2026
0a62384
fix(core): no panics on embedder-less or missing-RRF recall paths; no…
ajianaz Oct 13, 2026
08f7183
fix(cli): an explicit --store never routes through a running server (…
ajianaz Oct 13, 2026
aacbf93
docs(install): suggest optional LAN access after install (#1431) (#1447)
ajianaz Oct 13, 2026
fc5b2d6
chore(release): v0.21.0 - version bump, changelog, docs sync (#1448)
ajianaz Oct 13, 2026
de1c78a
test(core): kill the mutants the 0.21.0 gate missed (#1449)
ajianaz Oct 13, 2026
4098ab7
security(deps): bump rustls to 0.23.46 (RUSTSEC-2026-0346..0349) (#1455)
ajianaz Oct 15, 2026
4427c42
chore(deps): bump toml, usearch, uuid and serde_json (dependabot batc…
ajianaz Oct 15, 2026
2c2a2eb
refactor(server): extract every route arm into a named handler (#1344…
ajianaz Oct 15, 2026
b023e15
fix(core): accept a directory in ORT_LIB_PATH when the library is ins…
ajianaz Oct 15, 2026
09fb50b
feat(cli): verify a minisign signature in uteke upgrade (#1327) (#1462)
ajianaz Oct 15, 2026
1738e7c
fix(cli): write console logs to stderr so --json output stays parseab…
ajianaz Oct 15, 2026
86e8882
ci(release): detect whether the latest release checksums are signed (…
ajianaz Oct 15, 2026
4ac0733
ci(release): open, re-ping and close the reminder issue (#1327) (#1473)
ajianaz Oct 15, 2026
aecb397
ci(release): close reminders for superseded releases (#1327) (#1474)
ajianaz Oct 15, 2026
4292df7
ci(release): run the signature reminder after Release and every 6 hou…
ajianaz Oct 15, 2026
48fe17f
chore(release): v0.21.1 - version bump, changelog, docs sync (#1478)
ajianaz Oct 15, 2026
912cfd3
chore: merge main into release v0.21.1 branch (keep develop)
ajianaz Oct 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .agents/skills/uteke-memory/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: "Persistent memory engine for AI agents via the uteke CLI — remem
# Uteke Memory Skill

Persistent memory engine for AI agents via the `uteke` CLI.
Version: **0.21.0** — SQLite + HNSW vector index (usearch default, or vecq) + FTS5 hybrid search (RRF k=60); `fusion` (weighted RRF of the vector and hybrid rankings) is the default recall strategy since 0.16.0. `unsafe_code = "forbid"` workspace-wide.
Version: **0.21.1** — SQLite + HNSW vector index (usearch default, or vecq) + FTS5 hybrid search (RRF k=60); `fusion` (weighted RRF of the vector and hybrid rankings) is the default recall strategy since 0.16.0. `unsafe_code = "forbid"` workspace-wide.

> This skill ships with each release — its version tracks the CLI version
> (a CI gate fails when they drift, see `skill-version-parity` test).
Expand Down
47 changes: 47 additions & 0 deletions .github/workflows/release-signature-reminder.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Release Signature Reminder

# Opens (and re-pings) a "Sign release vX.Y.Z (minisign)" issue while the latest
# release has no checksums-sha256.txt.minisig, and closes it once the signature
# is uploaded. It signs nothing and holds no signing secret: the minisign key
# stays offline (scripts/sign-release.sh, AGENTS.md "Release procedure" step 6).
#
# workflow_run is used because a release created with GITHUB_TOKEN does not
# trigger `release` events; the schedule re-pings and notices the signature.

on:
workflow_run:
workflows: ["Release"]
types: [completed]
schedule:
- cron: "17 */6 * * *"
workflow_dispatch:

concurrency:
group: release-signature-reminder
cancel-in-progress: false

permissions:
contents: read
issues: write

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

jobs:
remind:
name: Remind to sign
if: github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success'
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false

- name: Check the latest release for a signature
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
RELEASE_SIGNER: ajianaz
REMINDER_AFTER_HOURS: "12"
run: bash scripts/release-signature-reminder.sh
26 changes: 25 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,31 @@ Rust workspace: uteke-core (engine), uteke-cli, uteke-server, uteke-mcp, docgen.
the tag at the previous release (v0.15.0). The Release workflow takes ~35 min
(the legacy-ORT build is the long pole) and publishes GitHub assets, crates.io
(uteke-core/cli/mcp), Docker tags and opens the Homebrew tap PR.
6. **After the tag.** Merge the homebrew-tap PR the workflow opened (its title/body
6. **Sign the checksums (offline).** After the Release workflow is green, run
`scripts/sign-release.sh vX.Y.Z` on the owner's machine (`--dry-run` stops before
upload). It first verifies the release's cosign bundle (so `cosign` must be installed on the
signing machine), shows the checksums and asks for confirmation, then signs
`checksums-sha256.txt` with the minisign key (trusted comment
`uteke vX.Y.Z`), verifies it against `scripts/uteke-release.pub` and uploads
`checksums-sha256.txt.minisig` after a confirmation. Key custody: password
manager plus an offline backup; never in CI or GitHub secrets. It can only sign releases that carry a cosign
bundle (v0.21.0 and later). Test it with `bash scripts/tests/sign-release.test.sh`
(stub gh/cosign, throwaway key; not wired into CI). Verify the
`.minisig` is on the release before announcing. Until it is uploaded,
`uteke upgrade` fails closed for that release (#1327).
Reminder: `.github/workflows/release-signature-reminder.yml` runs after the
Release workflow and every 6 hours. While the latest release has a bundle but no
`.minisig` it opens the issue `Sign release vX.Y.Z (minisign)` (assigned to the
owner), re-pings it every 12 h and closes it itself once the `.minisig` is
uploaded. Reminders for older releases are closed automatically, as superseded
(`uteke upgrade` only installs the latest release) or when their `.minisig`
appears. "Latest" follows GitHub's definition (by creation date, the same release
`uteke upgrade` installs), so a backport patch published after a newer minor
supersedes the newer release's reminder. Only issues and comments authored by the
Actions bot or the owner are acted on. It signs nothing and holds no key. Test its
script with `bash scripts/tests/release-signature-reminder.test.sh` (stub gh, not
wired into CI).
7. **After the tag.** Merge the homebrew-tap PR the workflow opened (its title/body
follow the tap's rules since #1384, and the job already re-verified every SHA256
against `checksums-sha256.txt`; Cora there was fixed in homebrew-tap#6), then
`brew update && brew upgrade codecoradev/tap/uteke`. Verify crates.io and the
Expand Down
28 changes: 28 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,34 @@

## [Unreleased]

## [0.21.1] - 2026-10-15

Patch release. Theme: **`uteke upgrade` verifies a minisign signature, Homebrew
installs keep their embeddings, and `--json` output stays clean.** 0.21.1 is the
first release whose `checksums-sha256.txt` carries a minisign signature. A
0.21.0 binary only checks the SHA-256 and never verifies the signature, so the
signature protects `uteke upgrade` from 0.21.1 on.

### ⚠️ Behavior Change

- **`uteke upgrade` is stricter (#1327, #1462)** - it installs only stable releases (`vX.Y.Z`), refuses to downgrade, and fails closed unless the release has a valid minisign signature for `checksums-sha256.txt`. A release without a `.minisig` cannot be installed by `uteke upgrade` until the maintainer signs it.
- **CLI log lines go to stderr (#1461, #1471)** - scripts that read log lines from stdout must read stderr instead; `--json` output is now parseable even when a warning is logged.

### Security

- **`uteke upgrade` verifies a minisign signature over `checksums-sha256.txt` (#1327)** - the release maintainer signs the checksums offline (`scripts/sign-release.sh`) and uploads `checksums-sha256.txt.minisig`; the embedded public key (`scripts/uteke-release.pub`) and the trusted comment `uteke <tag>` are checked before any hash in the file is trusted, so a tampered file is rejected, one release's files cannot be served as another's (the signature is bound to the tag), and `uteke upgrade` now refuses to downgrade to an older release. It also installs only stable releases (`vX.Y.Z`), never a pre-release or build-metadata tag. The signature is checked by `uteke upgrade` only: `install.sh`, `install.ps1` and Homebrew do not verify it (verify manually per SECURITY.md). A missing or invalid signature is a hard failure; `UTEKE_UPGRADE_SKIP_CHECKSUM=1` skips it too. Manual steps are in SECURITY.md.
- **rustls 0.23.46 (#1455)** - fixes RUSTSEC-2026-0346 to RUSTSEC-2026-0349 in the TLS stack used by the HTTP client.

### Fixed

- **`ORT_LIB_PATH` pointing at a directory no longer leaves uteke without embeddings (#1459)** - the Homebrew shims exported the `libexec` directory (v0.19.0 onwards), `dlopen` failed on it, and every such install silently stored memories FTS5-only (`embedding_written: false`, `uteke verify` MISMATCH). A directory that holds the platform library (`libonnxruntime.so`, `libonnxruntime.dylib` or `onnxruntime.dll`) is now accepted with a warning; a directory without it is a clear error that says to set the library file. The tap fix is codecoradev/homebrew-tap#10 (`brew update && brew reinstall codecoradev/tap/uteke`). Docker and the release tarballs were not affected.
- **CLI log lines no longer corrupt `--json` output (#1461)** - the console log layer wrote to stdout, so any WARN or ERROR (for example a failed embedding) was printed in front of the command's JSON and `json.loads(stdout)` failed. Console logs now go to stderr; the log file and the command output are unchanged.

### Changed

- Internal: the server dispatch is split into one named handler per route group (#1344, #1458); dependabot batch for `toml`, `usearch`, `uuid` and `serde_json` (#1457).
- Internal: `release-signature-reminder` workflow and script open and re-ping a `Sign release vX.Y.Z (minisign)` issue until the offline minisign signature is on the release, and close reminders for superseded releases automatically (#1327).

## [0.21.0] - 2026-10-13

Minor release. Theme: **honest recall feedback, one access policy for MCP over
Expand Down
61 changes: 34 additions & 27 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ members = [
]

[workspace.package]
version = "0.21.0"
version = "0.21.1"
edition = "2024"
license = "Apache-2.0"
repository = "https://github.com/codecoradev/uteke"
Expand Down
2 changes: 1 addition & 1 deletion README.id.md
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ Bisa. Uteke punya MCP server yang langsung pakai dengan Claude Code, Cursor, dan
<details>
<summary><strong>Sudah production-ready?</strong></summary>

Uteke sekarang v0.21.0 dengan 200+ test, CI/CD di setiap commit, dan benchmark harness. Dipakai production oleh tim CodeCora dan early adopter lain. Masih di versi 0.x, jadi mungkin ada rough edges, tapi core-nya udah stabil.
Uteke sekarang v0.21.1 dengan 200+ test, CI/CD di setiap commit, dan benchmark harness. Dipakai production oleh tim CodeCora dan early adopter lain. Masih di versi 0.x, jadi mungkin ada rough edges, tapi core-nya udah stabil.
</details>

---
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ Yes. Uteke ships with an MCP server that works with Claude Code, Cursor, and Her
<details>
<summary><strong>Is it production-ready?</strong></summary>

Uteke is at v0.21.0 with 200+ tests, CI/CD on every commit, and a benchmark harness. It's used in production by the CodeCora team and other early adopters. Still in 0.x, so expect rough edges, but the core is stable.
Uteke is at v0.21.1 with 200+ tests, CI/CD on every commit, and a benchmark harness. It's used in production by the CodeCora team and other early adopters. Still in 0.x, so expect rough edges, but the core is stable.
</details>

---
Expand Down
34 changes: 31 additions & 3 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,34 @@ cosign verify-blob \
sha256sum --check --ignore-missing checksums-sha256.txt
```

`uteke upgrade` does not verify this signature yet; it still checks the archive
against the unsigned `checksums-sha256.txt` of the same release (corruption
detection only).
### minisign signature

The release maintainer also signs `checksums-sha256.txt` offline with a
[minisign](https://jedisct1.github.io/minisign/) key that never leaves their
machine (CI holds no signing key). The signature is published as
`checksums-sha256.txt.minisig`; its trusted comment is `uteke <tag>`, binding it
to one release. The public key is `scripts/uteke-release.pub`, key id
`96924B76E31B048B`.

```bash
curl -fsSLO "https://github.com/codecoradev/uteke/releases/download/$VER/checksums-sha256.txt.minisig"

minisign -Vm checksums-sha256.txt \
-P RWSLBBvjdkuSlvaQ/yoyoMlpQAOLTt5jACZGTgSOCKb+/1JoqhjOmT8G
# the output must show: Trusted comment: uteke vX.Y.Z (your $VER)
```

Since the release that ships this change, `uteke upgrade` verifies this
minisign signature over `checksums-sha256.txt` before trusting any hash in it,
then checks the archive against that file. The signature is bound to the tag
(the trusted comment must be `uteke <tag>`), so one release's files cannot be
served as another's, and `uteke upgrade` refuses to downgrade to an older
release. It installs only stable, published releases (`vX.Y.Z`): a pre-release
or build-metadata tag is refused. A missing or invalid signature is a hard failure, never a silent
downgrade to checksum-only. Setting `UTEKE_UPGRADE_SKIP_CHECKSUM=1` skips both
checks (not recommended). Releases published before the signature existed
cannot be installed with `uteke upgrade` from a build that verifies it.

The minisign signature is checked by `uteke upgrade` ONLY. `install.sh`,
`install.ps1` and Homebrew do not verify it: Homebrew relies on the SHA256s in
the formula, and for the scripts you should verify manually as described above.
Loading
Loading