Files
library-desk/AGENTS.md
T
jpmschweitzerandClaude Fable 5 90515e0f6d fix(config): use dataplane container names in service URL defaults
The homelab is retiring *.schweitz.internal and will rebind most
published container ports from 0.0.0.0 to 127.0.0.1 (Phase 4), so
host-IP:published-port URLs will stop working for container-to-container
traffic. Point the .env.example defaults at docker-dataplane container
names and INTERNAL ports instead: wiki:3000, neo4j:7687, searxng:8080
(internal port, not the 8087 host publish), paperless:8000, ollama:11434.
All names and ports verified against the running containers.

Also correct the AGENTS.md deploy health-check URL, which claimed the
service runs on port 8000; it runs on 8089.

static/wikijs-integration.js is left unchanged: it already derives the
API base from its own script URL (document.currentScript.src, split on
/static/) and only uses the hardcoded IP:8089 as a last-resort fallback.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 12:21:43 +02:00

3.6 KiB

AGENTS.md

Start every session by reading this file. This file outlines the operational protocols, coding standards, and architectural decisions for this FastAPI project.

1. Agent Operational Protocols

🧠 Work Patterns (Plan-Act-Reflect)

  • Plan: Before writing code, briefly outline your plan. Identify which files you will touch and what the side effects might be.
  • Act: Execute the changes in small, atomic steps.
  • Reflect: After coding, verify your work. Did you break existing tests? Did you add new tests?

🛡️ Git Discipline

  • NEVER commit to main or master directly. Always create a feature branch: feature/your-feature-name or fix/issue-description.
  • Commit Messages: Use the Conventional Commits format.
    • feat: add user login endpoint
    • fix: resolve database connection timeout
    • refactor: split monolith dependency file
  • Atomic Commits: Keep commits small. One logical change = one commit.

📝 Changelog Maintenance

  • Update CHANGELOG.md with every user-facing change.
  • Format: ## [Unreleased] - YYYY-MM-DD followed by ### Added, ### Changed, or ### Fixed.

🚀 Release Flow

When changes are ready for deployment:

  1. **Ask user if deploy cycle is desired **

  2. Update version in pyproject.toml:

    • Bug fixes: bump patch version (1.8.3 → 1.8.4)
    • New features: bump minor version (1.8.4 → 1.9.0)
  3. Update CHANGELOG.md:

    • Move items from [Unreleased] to new version section
    • Add release date: ## [1.8.4] - 2025-12-16
  4. Commit and tag:

    git add -A
    git commit -m "fix: description of changes"
    git tag v1.8.4
    git push origin main --tags
    
  5. CI/CD triggers automatically:

    • Gitea CI builds Docker image on new tag
    • Watchtower pulls and deploys to production
    • Verify deployment: curl http://192.168.86.149:8089/health

🧪 Local Development Setup

  • Always test locally first before committing and deploying. The build-deploy loop is slow.
  • Start the local server with ./wakeup.sh - logs are written to logs/server.log for easy tailing
  • Auto-reload: The wakeup script runs uvicorn in reload mode - code changes are picked up automatically without restart (except for requirements.txt changes)
  • Test REST endpoints against http://localhost:8778 using curl or similar tools
  • Only deploy when a phase or feature is complete and tested locally
  • Environment: Copy .env.example to .env and configure for your local setup (Ollama, Redis, Neo4j, Qdrant, Wiki.js hosts)
  • Running tests: Always use the venv explicitly to avoid environment mismatches:
    .venv/bin/python -m pytest tests/           # All tests
    .venv/bin/python -m pytest tests/ -v        # Verbose output
    

2. FastAPI Architecture & Best Practices

Reference: FastAPI Best Practices

📂 Project Structure (Directory-based, NOT File-type based)

Do not group files by type (e.g., one huge routers folder). Group by domain/module inside a src/ directory.

Correct Structure:

src/
├── auth/
│   ├── router.py      # Endpoints
│   ├── schemas.py     # Pydantic models
│   ├── service.py     # Business logic (CRUD, etc.)
│   ├── dependencies.py# Module-specific dependencies
│   └── config.py      # Module-specific settings
├── posts/
│   ├── router.py
│   └── ...
└── main.py            # App entry point