pypi.black.local nginx routing was fixed to forward /simple/lilith-* to
Forgejo PyPI and everything else to pypiserver (which falls back to
pypi.org). With that in place, no explicit index config is needed in
pyproject.toml — uv picks up the default via ~/.config/uv/uv.toml.
Drops:
- [[tool.uv.index]] forgejo — no longer required
- [tool.uv.sources] — same, not needed per-package
Requires host uv.toml to set default index = http://pypi.black.local/simple/
(now configured on apricot).
Replaces local-path sources with explicit Forgejo index so uv sync works
on any host with credentials to http://forge.nasty.sh/api/packages/lilith/pypi/.
Published all 5 transitive lilith packages as a prerequisite:
- lilith-pipeline-framework 1.0.0
- lilith-service-fastapi-bootstrap 4.2.0
- lilith-queue-cli 0.1.3
- lilith-service-addresses 1.1.2
- lilith-model-boss 4.0.0
Credentials required at install time: UV_INDEX_FORGEJO_USERNAME and
UV_INDEX_FORGEJO_PASSWORD env vars (or equivalent uv.toml / .netrc entry).
The public pypi.black.local redirect only proxies pypi.org, not Forgejo,
so the explicit index config in this file is load-bearing.
Verified: rm -rf .venv && uv sync --extra dev produces a working install
with the new rebase-recovery code importing cleanly. commits.service
restarted successfully on the fresh venv.
- Drop unused lilith-auto-commit-pipeline dep (no imports in codebase)
- Rename lilith-fastapi-service-base → lilith-service-fastapi-bootstrap
(the former was the old name; code imports the new module)
- Move lilith-model-boss to required (runtime-loaded by llm/multi_model_client)
- Declare transitive workspace deps directly (lilith-queue-cli,
lilith-service-addresses) so tool.uv.sources path overrides reach them
- Add [tool.uv.sources] pointing at local package checkouts so
uv sync resolves without any packages being published to pypi.black.local
Verified: fresh uv sync builds a clean venv from scratch, imports the new
rebase-recovery code paths, and commits.service restarts cleanly.
Task #1 + Task #2 combined:
- _abort_rebase_verified: escalation ladder abort → quit → reset --hard ORIG_HEAD
- pre_cycle_recover: detect orphan rebase/merge state at cycle start
- Integrate into pre_cycle_sync: refuse to proceed if recovery fails
- Consolidate push.py:_pull_rebase to delegate to operations.py:git_pull_rebase
- conflict_resolution module with LOCKFILE_STRATEGIES (bun/npm/pnpm/yarn/cargo/uv/poetry)
- try_auto_resolve_lockfiles: conservative — acts only when all conflicts are lockfiles
- git_pull_rebase: attempt auto-resolution before falling back to abort
Removed PostgreSQL support and dependencies for single source of truth:
- Removed all PostgreSQL fallback logic from connection.py
- Removed asyncpg dependency (keeping only aiosqlite)
- Simplified database URL to direct SQLite path
- Updated config: database_path now points to file, not directory
- Default location: ~/.cache/commits/auto_commit.db (not nested in postgres/)
- Cleaner get_database_size_mb() using direct file stat
- Simplified VACUUM logic (SQLite-only)
Benefits:
- No fallback complexity or environment variable checks
- Single dependency (aiosqlite) instead of two (asyncpg + aiosqlite)
- Clearer configuration (file path vs directory path)
- Less code, less maintenance, no tech debt
- Same rolling data retention features (500MB limit, 90 day retention)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Made main() async and properly awaited create_auto_commit_service()
- Changed to manual uvicorn.Server() instead of uvicorn.run() factory mode
- Fixed TypeError that caused 500 errors on all HTTP requests
- Updated llama_service_url default from port 8000 to 8100
- Removed DependencyStartupConfig to avoid lilith-service-addresses dependency
This resolves the critical bug preventing daemon startup and HTTP operations.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>