Skip to content

Release v0.9.0 → main - #751

Merged
ajianaz merged 32 commits into
mainfrom
release/v0.9.0
Jul 21, 2026
Merged

Release v0.9.0 → main#751
ajianaz merged 32 commits into
mainfrom
release/v0.9.0

Conversation

@ajianaz

@ajianaz ajianaz commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

gnoviawan and others added 30 commits July 16, 2026 00:15
Guides new users from zero to productive in one command:
- Detects install (binary on PATH, existing store)
- Asks which AI agent they use (Hermes/Claude/Cursor/Pi/OpenCode)
- Picks integration mode (tool vs memory-provider)
- Toggles features on/off (Aging, Auto-maintenance, Graph rerank,
  Salience/Recency boost, Server mode)
- Writes uteke.toml config with selections
- Runs uteke init with selected agent automatically
- Prints a full feature showcase (all commands grouped by category)

Non-interactive mode: uteke onboard --yes --agent hermes --namespace default

Docs updated: getting-started.md, cli-reference.md, AGENT.md, CHANGELOG.md
New dep: which crate for PATH detection
Add a prominent "🚀 Onboarding" section right after install, before
"Why Uteke?". Includes an agent-readable callout so when a user drops
the GitHub link to an AI agent (Hermes, Claude, etc.), the agent reads
the README and knows to run `uteke onboard.
🔴 Must Fix:
- AGENT.md: correct schema version v13 → v15 (room↔document junction, #689)
- onboard.rs: remove misleading get_stats() placeholder, drop count claim
- onboard.rs: write_config() now backs up existing uteke.toml to .bak and
  prompts for confirmation before overwriting (prevents credential loss)

🟡 Should Fix:
- prompt_integration_mode(): print message for custom agents (no longer silent)
- validate_agent(): now warns on unrecognized agents instead of being a no-op
- Banner boxes: replace misaligned Unicode box drawing with consistent ASCII
  print_banner() helper (fixes off-by-1 alignment, ambiguous em-dash width)
- --json flag: intentionally ignored in onboard to avoid mixing ASCII banners
  with parseable JSON output

🟢 Nice to Have:
- Install URL: main → develop (matches repo default branch convention)
- Add 7 unit tests for pure functions (get_toggle, validate_agent, print_banner,
  write_config TOML structure)

All tests pass: cargo fmt --check ✅, cargo clippy -D warnings ✅, cargo test (50 passed) ✅

Co-authored-by: ajianaz <reviewer>
BREAKING: The room summary document endpoint is renamed from POST /room/document
to POST /room/summary to eliminate confusion with the room↔document junction
routes (/room/document/add, /room/document/list, /room/document/remove).

Changes:
- Server: POST /room/summary is the new primary endpoint
- Server: POST /room/document retained as deprecated alias with warn! log
- Core: room_document() → room_summary_document() across all crates
- CLI: 'uteke room document' command unchanged (help text updated)
- MCP: uteke_room_document tool updated to use new function
- Docs: cli-reference, docker, mcp, rooms updated

Closes #735
…om/summary

Clippy caught unreachable pattern: POST /room/summary already used by
room_summary() (tag clustering). Renamed to POST /room/summary-document
to eliminate ambiguity with both junction routes AND the clustering endpoint.

Refs #735
…room-summary

refactor(api): rename POST /room/document → POST /room/summary (#735)
Adds API versioning middleware to uteke-server.

Changes:
- ApiVersion enum (V1, V2) with path prefix parser
- /api/v1/* routes return v1 format (flat recall results for backward compat)
- /api/v2/* routes return current v2 format (wrapped UnifiedSearchResult)
- Unversioned routes (/recall, /remember, etc.) continue to work (→ latest)
- Health endpoint now includes api_versions and api_latest fields
- to_v1_flat() adapter converts UnifiedSearchResult → v1 flat format

v1 vs v2 differences:
- v1 recall: [{id, content, score, namespace, tags, ...}] (flat)
- v2 recall: [{memory: {id, content, ...}, score}] (wrapped)

Routes affected:
- /recall → /api/v1/recall (flat) or /api/v2/recall (wrapped)
- /remember, /memory, /forget, /list, /search, /stats, etc.
- /room/*, /doc/* — all sub-routes versioned
- /health — unversioned, includes version info
feat(api): URL prefix versioning /api/v1 and /api/v2 (#737)
Replaces hardcoded dream pipeline constants with configurable values.

Changes:
- DreamConfig struct (uteke-core + uteke-cli config)
  - contradict_similarity_threshold: 0.6 (cosine > this → NOT contradiction)
  - contradict_tag_jaccard_min: 0.4 (up from 0.3, reduces false positives)
  - contradict_max_memories: 200 (O(n²) scan limit)
  - dedup_threshold: 0.92 (cosine > this → merge candidate)
  - orphan_importance_threshold: 0.15 (safer than old 0.3)
- MaintenanceConfig defaults changed to safer values:
  - auto_aging_enabled: true → false (opt-in)
  - auto_aging_interval_hours: 6 → 24 (daily)
  - auto_dream_interval_days: 3 → 7 (weekly)
- DreamConfig wired into CLI main.rs and server main.rs via set_dream_config()
- dream.rs reads from self.dream_config instead of const values
- DEFAULT_ORPHAN_THRESHOLD updated 0.3 → 0.15
- Server reads [dream] section from uteke.toml

Config example:
  [dream]
  contradict_similarity_threshold = 0.6
  contradict_tag_jaccard_min = 0.4
  contradict_max_memories = 200
  dedup_threshold = 0.92
  orphan_importance_threshold = 0.15

Closes #731
- consolidate() expects f32 not f64 — remove incorrect cast
- Server dream config: unwrap_or_default() for Option<usize> returns 0
  (wrong), use unwrap_or(DreamConfig::default().*) instead
- Format: restructure server dream config block for rustfmt compliance
…sholds

feat(config): configurable dream pipeline thresholds (#731)
- Remove unused 'toggles' vec in test_write_config_generates_valid_toml
- Replace useless format! with raw string literal
- Remove stray closing parenthesis
feat: add  — interactive onboarding wizard
…ming (#740)

- Add connect timeout (30s) and read timeout (300s) to prevent
  infinite hangs on slow/unstable connections
- Retry up to 3 attempts on transient failures with cleanup
- Stream download to disk via 64KB chunks instead of buffering
  entire 187MB model_data file in RAM
- Add progress indicator (file size + percentage milestones)
- Add human-readable byte formatting (KB/MB/GB)
- Verify content-length matches downloaded bytes
fix(core): robust embedding model download (#740)
- SECURITY.md: supported versions, vulnerability reporting process, SLA
- PULL_REQUEST_TEMPLATE.md: type checklist, CI verification, conventional commits
Cora caught that instructing reporters to open a public issue with
[SECURITY] prefix contradicts the 'do not open a public issue' policy.
GitHub issues are public by default — only Private Vulnerability Reporting
provides proper confidentiality.
fix(core): prevent os error 33 on Windows by reading usearch index from locked file handle
recall() vector search path was missing a deprecated filter, causing
deprecated memories to appear in search results (61.7% in reported case).

FTS5 path already filters at SQL level (m.deprecated = 0).
recall_at_time() already filters in post-filter.

Adding the filter in recall() fixes all downstream paths:
- Vector strategy
- Hybrid RRF (calls recall())
- Graph rerank (calls recall_rrf -> recall())
fix(core): filter deprecated memories in recall() (#748)
v0.9.0 features:
- uteke onboard interactive wizard
- API URL versioning /api/v1, /api/v2
- Configurable dream pipeline thresholds
- SECURITY.md + PR template

v0.9.0 fixes:
- Deprecated memories in vector search (#748)
- Windows OS error 33 (#747)
- Embedding download robustness (#740)
ajianaz and others added 2 commits July 21, 2026 07:37
uteke-cli, uteke-mcp, and uteke-server had hardcoded uteke-core/mcp
version = "0.8.0" instead of using workspace version. Updated all
to 0.9.0 to match workspace.package.version.
chore: release v0.9.0 — version bump, CHANGELOG
@github-actions

Copy link
Copy Markdown

🔍 Cora AI Code Review

⚠️ Review could not complete. Cora produced an empty result. Check the workflow logs for errors.


Review powered by cora-cli · BYOK · MIT

@ajianaz
ajianaz merged commit c6bd36a into main Jul 21, 2026
8 checks passed
@ajianaz
ajianaz deleted the release/v0.9.0 branch July 21, 2026 01:00
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.

2 participants