Teleo evaluation pipeline infrastructure — Python async daemon for claim extraction, validation, evaluation, and merge
Find a file
m3taversal ba234ec4b3 fix(reaper): apply Ganymede review — dual-PATCH drift, breaker isolation, env config
Followup to f97dd15. Four fixes from review:

MUST-FIX #1 — Forgejo double-PATCH drift
  reaper closes PR via forgejo_api PATCH at line 689, then close_pr() at
  line 700 issued a second PATCH (default close_on_forgejo=True). On
  transient failure of the second PATCH, close_pr returns False without
  updating the DB → status='open' even though Forgejo is closed. Pass
  close_on_forgejo=False so DB close is unconditional after the explicit
  Forgejo PATCH succeeds.

MUST-FIX #2 — reaper exception trips fix breaker
  Unhandled exception in verdict_deadlock_reaper_cycle propagated to
  stage_loop, recording fix-stage failures. After 5 reaper failures the
  fix breaker would open and block mechanical+substantive for 15 min.
  Wrap reaper call in try/except in fix_cycle (same exception-isolation
  pattern as ingest_cycle's extract_cycle wrapper). Defense-in-depth
  must never block primary paths.

WARNING #1 — throttle SQL full-scan
  audit_log only has idx_audit_stage. Filtering on event alone caused
  full-table scans every 60s. Added stage='reaper' so the planner uses
  the existing index — reaper writes audit rows under stage='reaper'
  already so the filter is correct.

WARNING #2 — REAPER_DRY_RUN as code constant
  Flipping dry-run → live required edit + commit + push + deploy +
  restart. Moved REAPER_DRY_RUN, REAPER_DEADLOCK_AGE_HOURS,
  REAPER_INTERVAL_SECONDS, REAPER_MAX_PER_RUN to lib/config.py with
  os.environ.get() overrides. Operator now flips via systemctl edit
  teleo-pipeline.service (Environment=REAPER_DRY_RUN=false) + restart.
  Defaults remain safe: dry-run, 24h age, hourly throttle, 50/run cap.

NIT — dry-run counter naming
  Renamed local `closed` counter in dry-run path to `would_close` so the
  heartbeat audit ("X closed, Y would-close") and journal log are
  unambiguous. Function still returns closed + would_close so callers
  see total work done.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 23:43:53 -04:00
.forgejo/workflows ganymede: add dev infrastructure — pyproject.toml, CI, deploy script 2026-03-13 14:24:27 +00:00
agent-state Consolidate pipeline code from teleo-codex + VPS into single repo 2026-04-07 16:52:26 +01:00
deploy sync-mirror: surface tracker SELECT/INSERT failures to ops log 2026-05-01 15:48:28 +01:00
diagnostics fix(activity-feed): remove [:120] slug truncation 2026-04-27 15:27:31 +01:00
docs feat: reorganize repo with clear directory boundaries and agent ownership 2026-04-14 18:20:13 +01:00
hermes-agent fix: set execute bit on research-session.sh and install-hermes.sh 2026-04-18 11:54:39 +01:00
lib fix(reaper): apply Ganymede review — dual-PATCH drift, breaker isolation, env config 2026-05-07 23:43:53 -04:00
ops fix: wire commit_type into contributor role assignment 2026-04-21 10:27:36 +01:00
research fix(attribution): unify research-session format on "(self-directed)" suffix 2026-04-27 12:53:52 +01:00
scripts fix(tests): apply Ganymede review nits + add m3taversal reset script 2026-04-27 17:35:18 +01:00
systemd feat: add auto-deploy script and systemd units for teleo-infrastructure 2026-04-15 14:27:23 +01:00
telegram add rio and theseus telegram bot agent configs 2026-04-20 17:20:21 +01:00
tests fix(tests): apply Ganymede review nits + add m3taversal reset script 2026-04-27 17:35:18 +01:00
.gitignore feat: add auto-deploy script and systemd units for teleo-infrastructure 2026-04-15 14:27:23 +01:00
CODEOWNERS feat: reorganize repo with clear directory boundaries and agent ownership 2026-04-14 18:20:13 +01:00
fetch_coins.py Skip liquidated entities in portfolio fetcher 2026-04-20 18:55:04 +01:00
pyproject.toml ganymede: add dev infrastructure — pyproject.toml, CI, deploy script 2026-03-13 14:24:27 +00:00
README.md feat: reorganize repo with clear directory boundaries and agent ownership 2026-04-14 18:20:13 +01:00
reweave.py fix: quote YAML edge values containing colons, skip unparseable files in reweave merge 2026-04-18 12:07:28 +01:00
teleo-pipeline.py fix(reaper): apply Ganymede review — dual-PATCH drift, breaker isolation, env config 2026-05-07 23:43:53 -04:00

teleo-infrastructure

Pipeline infrastructure for the Teleo collective knowledge base. Async Python daemon that extracts, validates, evaluates, and merges claims via Forgejo PRs.

Directory Structure

teleo-infrastructure/
├── teleo-pipeline.py        # Daemon entry point
├── reweave.py               # Reciprocal edge maintenance
├── lib/                     # Pipeline modules (Python package)
├── diagnostics/             # Monitoring dashboard (port 8081)
├── telegram/                # Telegram bot interface
├── deploy/                  # Deployment + mirror scripts
├── systemd/                 # Service definitions
├── agent-state/             # Cross-session agent state
├── research/                # Nightly research orchestration
├── hermes-agent/            # Hermes agent setup
├── scripts/                 # One-off backfills + migrations
├── tests/                   # Test suite
└── docs/                    # Operational documentation

Ownership

Each directory has one owning agent. The owner is accountable for correctness and reviews all changes to their section. See CODEOWNERS for per-file detail.

Directory Owner What it does
lib/ (core) Ship Config, DB, merge, cascade, validation, LLM calls
lib/ (extraction) Epimetheus Source extraction, entity processing, pre-screening
lib/ (evaluation) Leo Claim evaluation, analytics, attribution
lib/ (health) Argus Health checks, search, claim index
diagnostics/ Argus 4-page dashboard, alerting, vitality metrics
telegram/ Ship Telegram bot, X integration, retrieval
deploy/ Ship rsync deploy, GitHub-Forgejo mirror
systemd/ Ship teleo-pipeline, teleo-diagnostics, teleo-agent@
agent-state/ Ship Bootstrap, state library, cascade inbox processor
research/ Ship Nightly research sessions, prompt templates
scripts/ Ship Backfills, migrations, one-off maintenance
tests/ Ganymede pytest suite, integration tests
docs/ Shared Architecture, specs, protocols

VPS Layout

Runs on Hetzner CAX31 (77.42.65.182) as user teleo.

VPS Path Repo Source Service
/opt/teleo-eval/pipeline/ lib/, teleo-pipeline.py, reweave.py teleo-pipeline
/opt/teleo-eval/diagnostics/ diagnostics/ teleo-diagnostics
/opt/teleo-eval/telegram/ telegram/ (manual)
/opt/teleo-eval/agent-state/ agent-state/ (used by research-session.sh)

Quick Start

# Run tests
pip install -e ".[dev]"
pytest

# Deploy to VPS
./deploy/deploy.sh --dry-run   # preview
./deploy/deploy.sh             # deploy