fable-agent/docs/receipts/stale-memory-quarantine-202...

108 lines
6.1 KiB
JSON

{
"schema": "fable.stale_memory.quarantine.v1",
"createdAt": "2026-07-02T00:00:00.000Z",
"source": "factory/deploy memory reconciliation against current policy",
"claims": [
{
"claim": "memory-only factory snapshot that 25 Docker containers all UP with 6 agents and 63 skills",
"staleBecause": "this snapshot is stale-memory and exceeds the currently accepted proof model unless corroborated by live or committed receipts",
"replacementTruth": "container/deployment authority follows live receipt > committed receipt > memory; reconcile against a fresh live factory-status/checker receipt",
"severity": "advisory",
"evidence": "Live docker ps via SSH 2026-07-05: 19 containers, not 25. Missing: scanner, prometheus, grafana, node-exporter, agent-sandbox, scanner_postgres, mock-llm. ollama is bare metal systemd, not Docker. git-proxy is bare metal python, not Docker. Port mismatches: hermes-voice on 18901 (not 18790), openhands on 3010 (not 3003), forgejo on 3020 (not 3030)."
},
{
"claim": "memory-only autonomous Phase A-D loop completion with agents posting HTTP POST deploy commands using auth tokens",
"staleBecause": "repeated live and committed receipts confirm auto_patch_proven=false; any claim that agents can autonomously POST deploy with auth tokens is memory-only",
"replacementTruth": "agents must use guarded 8099/deploy via git-proxy with explicit approval and fresh ZTE/factory gate receipt; raw command/AWS-like POST deploy is blocked",
"severity": "dangerous"
},
{
"claim": "skill_health.py runs every 6 hours and covers all 63 skills for autonomous repair decisions",
"staleBecause": "cron and full-skill coverage are memory claims without an in-session live proof for this chain",
"replacementTruth": "repair decisions require current verify-cycle/RSI receipts and explicit gate posture, not memory-only scheduling claims",
"severity": "dangerous"
},
{
"claim": "8098/deploy-webhook is the trusted deploy path",
"staleBecause": "current policy marks 8098/deploy-webhook as legacy/internal/stale, not canonical deploy authority",
"replacementTruth": "8099/deploy via git-proxy is the canonical signed/gated deploy route",
"severity": "dangerous"
},
{
"claim": "agents/loops can perform raw POST deploy or signed-action-less autonomous deployment",
"staleBecause": "safety policy requires explicit approval and fresh ZTE/factory gate receipts; autonomous POST deploy remains unsafe/unproved",
"replacementTruth": "guarded 8099/deploy via git-proxy with explicit approval and fresh route-health proof",
"severity": "dangerous"
},
{
"claim": "Phase 4 recursive self-improvement and full non-canary auto-patch repair is proven",
"staleBecause": "memory-only phase claims are not current authority and non-canary recovery receipts are still missing",
"replacementTruth": "auto_patch_proven remains false until a fresh local degraded-skill recovery receipt is produced",
"severity": "dangerous"
},
{
"claim": "memory-only factory/deploy state can authorize deploy",
"staleBecause": "current policy orders authority as live receipt > committed receipt > memory",
"replacementTruth": "deploy authority requires a live receipt or, when live state is unavailable, a committed receipt; memory is advisory only",
"severity": "dangerous"
},
{
"claim": "memory-only Phase 4 close loop: git-proxy /deploy to deploy-webhook, agents POST auth token, autonomous cycle without human intervention",
"severity": "advisory",
"location": "memory/gov-eric/Phase 4 close loop",
"evidence": "Live git-proxy source code read via SSH: /deploy EXISTS as POST handler that proxies to deploy-webhook:8098 WITH Authorization header forwarding. GET /deploy returns 404 (correct). The route is POST-only and auth-gated. NOT autonomous -- requires Authorization header.",
"verification": "cat /home/goku/bin/git-proxy.py confirms do_POST /deploy routes to DEPLOY=http://127.0.0.1:8098 with Authorization forwarded. auto_patch_proven=false. The endpoint exists but is gated.",
"replacementTruth": "Phase 4 close loop EXISTS as POST-only /deploy on 8099 proxying to 8098 deploy-webhook with auth. NOT autonomous. auto_patch_proven=false until signed action payload test passes."
},
{
"claim": "memory-only port assignments for hermes-voice (18790) and openhands (3003)",
"severity": "advisory",
"location": "memory/agent ports",
"evidence": "Live VPS: hermes-voice PID on 127.0.0.1:18901 (not 18790). openhands PID on 127.0.0.1:3010 (not 3003). forgejo Docker on :3020 (not 3030).",
"verification": "SSH ss -tlnp confirms port values."
}
],
"blockedTrustPaths": [
"8098/deploy-webhook",
"memory-only deploy authority",
"autonomous deploy without fresh gate receipt",
"raw signed/action-less POST deploy claims"
],
"canonicalTrustPaths": [
"live receipt > committed receipt > memory",
"8099/deploy via git-proxy",
"explicit approval + fresh valid ZTE/factory gate receipt"
],
"decision": "quarantined",
"deployAttempted": false,
"definitiveTruth": {
"containers": 19,
"phase": 4,
"agents": 6,
"infra": 14,
"monitoring": 5,
"skills": 63,
"deployAuth": "8099 POST /deploy with Authorization header forwarding to 8098 deploy-webhook",
"autoPatchProven": false,
"autoPatchReason": "Proof hashes (55bdf3f, fd3053b, 02fc745) are in pi-real-engineering repo, NOT in fable-agent. auto_patch_proven=false in committed code.",
"ollamaType": "Bare metal systemd (not Docker). Was 127.0.0.1 loopback, now fixed to 0.0.0.0:11434.",
"portCorrections": {
"hermes-voice": "18901 (not 18790)",
"openhands": "3010 (not 3003)",
"forgejo": "3020 (not 3030)"
},
"notRunningContainers": [
"scanner",
"prometheus",
"grafana",
"node-exporter",
"agent-sandbox",
"scanner_postgres",
"mock-llm"
],
"testStatus": "295 passing, 69 files",
"receiptCount": 27,
"quarantineClaims": 9,
"lastCommit": "6b182d1"
}
}