Decision 2026-07-12: do NOT containerize. Document actual deployment state: - Bare Python scripts under vpsadmin user, Hermes cron drives oracle-pipeline.sh - Container hardening / 150MB cap / Docker build retained as future target (design intent) - Ollama not deployed; summarization deferred (graceful degradation is live) - .env (chmod 600) is the live secret mechanism, not /etc/athena/secrets.yaml
3.8 KiB
Deployment Plan — Athena MVP
Deployment reality (updated 2026-07-12): This plan originally required Docker. The deployed system does not use containers — it runs as bare Python scripts under the
vpsadminstandard user, driven by Hermes cron (oracle-pipeline.shat 13:00 UTC). Ollama is also not deployed; summarization is deferred (graceful degradation is live). The Docker steps below are retained as the future containerization target, not the current procedure.
Prerequisites
- Python 3 +
pipon the target host (no Docker required for current deployment) - Network access to the 6 source APIs/feeds (arxiv, github, huggingface, hackernews, reddit, rss_feeds)
GITHUB_TOKENavailable as an environment variable (optional, but raises the GitHub rate limit from 60/hr to 5000/hr)HUGGINGFACE_TOKENavailable as an environment variable- (Future/optional) A local Ollama instance running
llama3.2:1b, or an alternate reachable inference backend if swapping — per the model-agnosticsummarize(text) -> (summary, model)contract - Hermes cron infrastructure available and able to invoke
oracle-pipeline.sh
Setup
- Clone
main(not a milestone branch) onto the target host pip install -r requirements.txtif present; otherwise confirm stdlib +requestsare available- Run
schema.sqlagainst a freshoracle.db— this file is git-ignored and created locally, never committed - Create
/home/vpsadmin/oracle/.envwithGITHUB_TOKENandHUGGINGFACE_TOKEN, thenchmod 600 .env— never hardcode these - (Future container target) Build and run inside Docker with the 150MB memory cap and non-root user enforced, per the PRD platform requirements
- Manual smoke test: run
python3 pipeline.pyonce and confirm ingest → store → score completes without errors before handing off to cron
Current state: steps 1–4 + 6 are the live procedure. Oracle-pipeline.sh sources
.envand runs the bare pipeline; no Docker involved.
Cron / Scheduling
- Confirm
oracle-pipeline.shis the entry point Hermes cron calls - Schedule for 13:00 UTC daily
- Add a lock file or PID check so overlapping runs can't happen if a prior run is still in progress
- Confirm the cron environment actually carries the exported tokens — cron environments are frequently minimal and won't inherit an interactive shell's exports
Hermes Integration
- Confirm the wrapper script's exit codes are meaningful (0 = success, non-zero = failure) so Hermes can act on them
- Define where Hermes should look for pipeline output/logs
- Decide on a failure-notification path (Hermes alert, log flag, etc.) — not yet specified, needs a decision
Monitoring
- Aggregate logs from each pipeline stage (ingest, store, summarize, score)
- Track theme-scan new-arrival counts per cycle per theme — this is the core signal the falsification logic depends on, so it deserves visibility beyond raw logs
- Add a heartbeat/dead-man's-switch alert if a scheduled run doesn't fire, rather than relying on someone noticing missing data days later
- Watch memory usage against the 150MB cap under real production load, not just dev conditions
Rollback
- Back up
oracle.dbbefore any schema change — it's git-ignored and not recoverable from the repo itself - If a bad deploy breaks the pipeline, revert to the last known-good commit on
mainand redeploy the bare scripts - (Future container target) revert to last known-good commit on
mainand redeploy the Docker image - Check falsification state (new-arrivals counters) after any rollback — rolling back mid-window could distort the 7-day dead-thesis calculation if not handled carefully
Draft prepared by Claude from the README, whitepaper falsification logic, and MVP-PRD platform requirements on main. The Hermes failure-notification path is the one open decision blocking this from being final.