'page=1' substring-matched 'per_page=100', so the fake served page 1
forever and the pagination loop hung — caught by the new 120s test
timeout on every CI leg.
Signed-off-by: phernandez <paul@basicmachines.co>
Unit legs intermittently hang mid-suite (FastMCP/asyncpg cleanup-hang
family) and sit until the runner gives up, eating 20+ minutes per
occurrence. pytest-timeout turns a hang into a fast failure with a
stack dump naming the test.
Signed-off-by: phernandez <paul@basicmachines.co>
(cherry picked from commit 0295cd9d56)
Remove the Codex LLM review and the per-PR image job — both spent API
tokens on every Bossbot run and the connector review already covers
code review. The gate is now fully deterministic: Tests passed for the
head SHA, non-draft, trusted author, zero unresolved review threads.
Prompt/schema files removed; guard tests updated to forbid
openai/codex-action and image generation from reappearing.
Signed-off-by: phernandez <paul@basicmachines.co>
The recheck path posts a status per review-thread event, so a busy PR
can exceed one page of statuses and the original approval record falls
off page one — resolving the last thread would then never restore it.
Page through all statuses for the BM Bossbot context.
Signed-off-by: phernandez <paul@basicmachines.co>
The guard banned any github.event.pull_request reference, but the
recheck job legitimately needs the numeric PR id. Allow exactly
.number and keep forbidding head checkout and attacker-controlled
string fields.
Signed-off-by: phernandez <paul@basicmachines.co>
Mirror the ProjectUpdateContext shape the basic-memory.yml capture flow
collects: the image prompt now receives a compact change-shape digest —
labels, linked issues with titles, commit subjects (the PR's narrative
arc), and a churn-ranked changed-files summary with totals — from a
single 'gh pr view --json' call passed as --pr-context-file (replacing
--pr-title/--pr-body-file). The digest is explicitly context, not
captions: the prompt forbids rendering paths, stats, issue numbers, or
commit subjects verbatim in the image.
Signed-off-by: phernandez <paul@basicmachines.co>
Two BM Bossbot fixes:
1. Unresolved review threads now block approval. The review prompt only
sees metadata+diff, so an approve verdict said nothing about
outstanding feedback — #932 merged with two open Codex P2 threads.
finalize now counts unresolved reviewThreads via GraphQL and fails
the status when any remain. A new recheck command, triggered by
pull_request_review / review_comment / review_thread events, flips
the status to failure when feedback arrives after approval and
restores a previously earned approval for the same head SHA once
every thread is resolved. Review and recheck jobs use separate
job-level concurrency groups so neither cancels the other.
2. PR images depict the PR's content, not the review outcome. The image
prompt previously used the BM Bossbot review summary (verdict/status)
as its only source material, so every image rendered an APPROVED
stamp. The prompt now sources the PR title and the author's own
description (managed bot blocks stripped) and explicitly bans
approval stamps, verdict wording, badges, checkmarks, and Bossbot
branding. Theme selection seeds on PR number+title for stability
across re-reviews.
Signed-off-by: phernandez <paul@basicmachines.co>
Disable the silently-on semantic embedding stack in default test fixtures and deselect on-demand benchmarks from CI int jobs. int SQLite 337s -> 110s, Postgres unit ~25min -> ~13min.
Signed-off-by: phernandez <paul@basicmemory.com>
Adds additive, git-style `bm cloud push`/`pull` that are safe on shared Team workspaces (never delete on the destination; conflicts abort by default with `--on-conflict {fail|keep-local|keep-cloud|keep-both}`), and gates the destructive `bm cloud sync`/`bisync` mirrors to Personal workspaces. Closes#858. Longer-term Team-safe reconciler tracked in #862; workspace-scoped mount info (Codex P1) tracked as a follow-up.
L2-normalizes FastEmbed output vectors at the provider boundary so SQLite vector scoring keeps its unit-vector contract for custom FastEmbed models such as multilingual MiniLM variants.
Zero vectors are preserved as-is to avoid division errors, and the provider tests cover both non-unit vectors and zero-vector behavior.
Verification:
- uv run pytest tests/repository/test_fastembed_provider.py -q
- uv run ruff check src/basic_memory/repository/fastembed_provider.py tests/repository/test_fastembed_provider.py
- uv run ruff format --check src/basic_memory/repository/fastembed_provider.py tests/repository/test_fastembed_provider.py
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: tk-pkm111 <133480534+tk-pkm111@users.noreply.github.com>
Signed-off-by: phernandez <paul@basicmachines.co>
Adds LiteLLM as a semantic embedding provider, including provider configuration, vector normalization, live-provider evaluation tooling, and documentation for OpenAI, Cohere, Azure Foundry, Azure OpenAI, and NVIDIA NIM-style cases.
Maintainer follow-up on this PR added provider hardening, asymmetric document/query embedding support, dimension-forwarding controls, SQLite/Postgres vector invalidation coverage, and the repeatable live LiteLLM harness.
Verification:
- Full base-repo Tests workflow passed for 3d4e092ceb: https://github.com/basicmachines-co/basic-memory/actions/runs/27072071785
- Live LiteLLM harness passed locally for OpenAI, Cohere, and Azure Foundry.
Co-authored-by: Aarish Alam <arishalam121@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: RheagalFire <arishalam121@gmail.com>
Signed-off-by: phernandez <paul@basicmachines.co>