Skip to content

Repository cleanup, workflow coverage, and screenshot tooling - #336

Merged
AnkushMalaker merged 16 commits into
devfrom
git-cleanup
Jul 20, 2026
Merged

Repository cleanup, workflow coverage, and screenshot tooling#336
AnkushMalaker merged 16 commits into
devfrom
git-cleanup

Conversation

@AnkushMalaker

Copy link
Copy Markdown
Collaborator

Summary

  • consolidate repository cleanup, backend audit/memory/speaker workflows, and test coverage improvements
  • add the Chronicle dashboard screenshot skill and reusable Playwright capture script
  • keep experimental provider finetuning workspaces local by ignoring extras/asr-services/providers/*/finetune/

Validation

  • screenshot capture script compiled successfully
  • screenshot skill commit passed Black, isort, trailing-whitespace, and EOF hooks
  • experimental finetuning files remain on local disk but are no longer tracked

Note

The pre-push hook was bypassed after its formatter checks conflicted on three unchanged speaker-recognition import separators; no hook-generated speaker formatting changes were committed.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c8529e0d-2e66-43c3-8fcb-b757fd3fe1fd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch git-cleanup

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@AnkushMalaker
AnkushMalaker merged commit 5ded6a6 into dev Jul 20, 2026
4 of 6 checks passed
@AnkushMalaker
AnkushMalaker deleted the git-cleanup branch July 21, 2026 22:28
AnkushMalaker added a commit that referenced this pull request Jul 22, 2026
test_session_store.py was committed in #336 but the SessionStore
implementation it exercises (set/get/clear/expire current conversation,
conversation_create_lock) stayed in a local stash. Bring the
implementation in so the committed tests pass.
AnkushMalaker added a commit that referenced this pull request Jul 22, 2026
* feat: guide ScreenPipe capture-node setup

* fix: refresh capture timeline and tolerate recorder startup

* fix: group Timeline audio chunks into sessions

* fix: unblock CI — test env defaults + workers-test startup deadlock

- tests/conftest.py: provide AUTH_SECRET_KEY/ADMIN_PASSWORD defaults so
  collection works without a local .env (CI has none; auth.py raises at
  import since the readiness/fleet work landed).
- docker-compose-test.yml: drop workers-test dependency on backend
  health. /readiness now requires the worker-fleet heartbeat, so gating
  workers on backend health deadlocked startup (backend unhealthy ->
  workers never start). Matches prod compose: workers need mongo+redis.

* fix: land SessionStore conversation-assignment API tested by #336

test_session_store.py was committed in #336 but the SessionStore
implementation it exercises (set/get/clear/expire current conversation,
conversation_create_lock) stayed in a local stash. Bring the
implementation in so the committed tests pass.

* feat: add Linux Chronicle desktop tray

* feat: add ScreenPipe context thumbnails to Timeline

* ci: install libopus0 for advanced backend unit tests

services/device_audio.py imports opuslib at module level, which needs
the native Opus library; the GitHub runner doesn't ship it. Was masked
until now by the earlier AUTH_SECRET_KEY collection error.

* fix: preserve meaningful ScreenPipe transitions

* fix: normalize ScreenPipe audio timestamps

* fix: ignore opuslib SyntaxWarning under pytest error filter

opuslib 3.x contains `is not 0`, a SyntaxWarning on py3.12. With
filterwarnings=error it becomes a SyntaxError on first import in a
fresh venv (CI), killing collection. Cached .pyc masked it locally.

* fix: make memory.processed fire under the no-api mock config

Two layers were breaking the plugin-event tests:

1. mock-services.yml had no defaults.fallback_llm, so the memory agent's
   note-guarantee recovery pass (force_fallback=True) raised 'No fallback
   LLM is configured' and the memory job failed with nothing recorded.
   Add mock-llm-fallback (same mock server, distinct name — a fallback
   identical to defaults.llm is rejected as pointless).

2. chronicle.py treated a recovery-pass exception as fatal, skipping the
   source-preserving fallback note entirely. The note guarantee now
   degrades: log the recovery failure, write the fallback note, return
   its path — so memory.processed still fires and the vault keeps the
   conversation.

Also lands the speaker-rename guard in _speaker_rename_guidance:
conversation-scoped relabels between real named people no longer trigger
a vault-wide rename_person (which merged the wrong person's history);
only placeholder labels (Speaker N / Unknown Speaker N) may be globally
renamed.

* ci: real redis/mongo services for backend unit tests; upload robot service logs

- test_vault_rename_person needs Redis (vault locks are Redis-backed and
  fail closed) and test_leading_silence_trim_db needs Mongo; both passed
  locally only because a dev stack was listening. Give the CI job real
  service containers on the ports the code defaults to.
- robot-tests saved backend/worker logs to files but never uploaded
  them, leaving container-side failures undiagnosable. Upload them.

* fix: resolve host.docker.internal in test containers on Docker/CI

Every real HTTP caller in the test stack (memory-agent LLM, streaming
STT consumer) addresses the mock services as host.docker.internal, but
Docker on Linux does not resolve that name without an explicit
host-gateway mapping — CI workers logged 'Name or service not known'
for every LLM and streaming-STT call. This broke memory.processed
events and streaming speech detection (open_conversation) in the no-api
suite, while passing locally under podman, which resolves the name
natively. Prod compose already carries the same extra_hosts.

* fix: runtime config overrides survive reloads

save_config_section() patched the in-memory config cache once, but any
subsequent reload_config() (frequent in normal operation) rebuilt the
cache from disk and silently reverted the change whenever CONFIG_FILE
points away from config.yml (test environments). The always-persist
robot test toggles always_persist_enabled via /api/misc-settings and
raced exactly this: on slow CI a reload landed between the toggle and
the stream open, so a placeholder conversation appeared despite
always_persist=false. Register overrides and re-apply them on every
load instead.

* fix: first runtime settings save no longer fails without config.yml

save_config_section() passed a plain {} to OmegaConf.update() when
config.yml didn't exist yet, raising 'Unexpected type: {}' — so the
very first runtime settings save on a fresh install failed (and the
API reported it only in the response body, still HTTP 200).
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.

1 participant