diff --git a/docs/receipts/README.md b/docs/receipts/README.md index 1013943..c46a0c0 100644 --- a/docs/receipts/README.md +++ b/docs/receipts/README.md @@ -33,6 +33,8 @@ Current authority order: **live receipt > committed receipt > memory**. - `anthropic-fable5-prompting-guide-advisory-map-20260704.json` — maps Anthropic's official Fable 5 prompting guide and Thariq's map-vs-territory article as advisory-only prompting posture; live-verified from platform.claude.com (HTTP 200). - `external-ai-links-advisory-map-20260704.json` — maps Sakana Fugu, OpenAI Daybreak, and Cloudflare Temporary Accounts links as advisory-only external research (not deploy authority). - `fable-rsi-phase-advisory-map-20260704.json` — maps the memory-only RSI phase architecture (Phases 1-4, Phases A-D, 2026-06-19 auto-patch proof in pi-real-engineering) as advisory-only process documentation. +- `factory-live-readonly-20260704.json` — fresh live read-only 2026-07-04 8099 health/factory-status check; confirms 19 containers (not 25), phase 4, agents=6, infra=14, monitoring=5, skills=63; GET /deploy → 404. Reconciles new harness commit d4e2d3c. +- `armin-tool-calling-regression-advisory-map-20260704.json` — live-fetched map of Armin Ronacher's July 4 article on Opus 4.8 hallucinating extra fields in Pi's edit tool; validates fable-agent's hard verification gate approach. ## Memory quarantine diff --git a/docs/receipts/armin-tool-calling-regression-advisory-map-20260704.json b/docs/receipts/armin-tool-calling-regression-advisory-map-20260704.json new file mode 100644 index 0000000..f053ddc --- /dev/null +++ b/docs/receipts/armin-tool-calling-regression-advisory-map-20260704.json @@ -0,0 +1,48 @@ +{ + "schema": "fable.research_map.receipt.v1", + "createdAt": "2026-07-04T22:05:00.000Z", + "taskLabel": "armin-ronacher-better-models-worse-tools-advisory-map", + "task": "Map Armin Ronacher's July 4, 2026 article 'Better Models: Worse Tools' as advisory postmortem for fable-agent's harness philosophy", + "source": { + "classification": "live-fetched blog post", + "items": ["https://lucumr.pocoo.org/2026/7/4/better-models-worse-tools/"], + "contentVerified": true, + "localProofExists": true, + "liveVerification": { + "url": "https://lucumr.pocoo.org/2026/7/4/better-models-worse-tools/", + "httpStatus": 200, + "fetchedAt": "2026-07-04T22:05:25Z", + "confirmedThesis": "Newer Claude models (Opus 4.8) hallucinate extra, invented fields in Pi's edit tool's nested edits[] array — tool-calling regresses as models improve" + } + }, + "extractedPrinciples": [ + "Opus 4.8 calls Pi's edit tool with extra, invented fields in the nested edits[] array that don't exist in the tool schema", + "The model is generating tool calls that look structurally correct (same shape, same nesting) but add phantom keys", + "This is not a small-model problem — it's Opus 4.8, Anthropic's frontier model", + "The regression is intermittent — same prompt sometimes works, sometimes adds junk fields", + "Pi's tool schema is stricter than what the model chooses to send; the model is 'over-generating'", + "The practical consequence: better models produce more believable but subtly wrong tool invocations", + "This validates the Dario blueprint's hard verification gate approach — don't trust the model's output, verify every tool call against schema" + ], + "constraints": [ + "Article is advisory; Armin's specific Pi bug may not reproduce in fable-agent's tool harness", + "The principle generalizes: verify agent tool calls against schema, don't assume correct shape", + "fable-agent's verify-gate (build-test-lint) catches code errors but does not validate tool call schema compliance", + "The flat-ledger (JSONL state) and repo-mapper are structural mitigations — agent reads state, doesn't remember it", + "No deploy, vendoring, dashboards, or new packages were performed for this mapping" + ], + "fableAgentAlignment": [ + "fable-agent's verify-gate already rejects builds that fail; tool-call schema validation would be a new layer", + "The flat-ledger pattern (state outside LLM context) reduces hallucination surface area", + "The interrupt-gate (human approval before live actions) catches bad tool invocations before they execute", + "Worktree isolation (WorktreeManager) means bad tool calls only damage disposable worktrees, not main branches", + "Dario blueprint's 'hard automated verification' is directly validated by this article — models get smarter, tool-calling gets sloppier, so verify harder" + ], + "skipped": [ + "deploy actions or route checks", + "new dependency changes" + ], + "decision": "advisory", + "deployAttempted": false, + "autoPatchProven": false +} diff --git a/docs/receipts/factory-live-readonly-20260704.json b/docs/receipts/factory-live-readonly-20260704.json new file mode 100644 index 0000000..9d76d60 --- /dev/null +++ b/docs/receipts/factory-live-readonly-20260704.json @@ -0,0 +1,78 @@ +{ + "schema": "fable.factory_live_readonly.receipt.v1", + "createdAt": "2026-07-04T17:15:16.000Z", + "taskLabel": "factory-live-readonly-check-20260704", + "task": "Fresh live read-only check of factory 8099 after Dario blueprint harness build (verify-gate, interrupt-gate, flat-ledger, repo-mapper)", + "source": "read-only HTTPS GET checks against 77.42.112.29:8099", + "authorityOrder": ["live receipt", "committed receipt", "memory"], + "checks": [ + { + "url": "http://77.42.112.29:8099/health", + "method": "GET", + "status": 200, + "body": { "status": "ok", "service": "git-proxy" }, + "interpretation": "git-proxy is live and healthy; same as 2026-07-03 check" + }, + { + "url": "http://77.42.112.29:8099/factory-status", + "method": "GET", + "status": 200, + "bodySubset": { + "status": "stale", + "state": "STALE_FACTORY_STATE", + "phase": 4, + "containers": 19, + "live_containers": 19, + "catalog_containers": 18, + "agents": 6, + "infra": 14, + "monitoring": 5, + "skills": 63, + "truth": "live docker ps wins over catalog/memory when counts disagree" + }, + "interpretation": "Factory state unchanged since 2026-07-03. Still 19 live containers (memory says 25). Agents=6, infra=14, monitoring=5, skills=63 all match. Phase 4 confirmed." + }, + { + "url": "http://77.42.112.29:8099/deploy", + "method": "GET", + "status": 404, + "body": { "error": "not found" }, + "interpretation": "Read-only GET /deploy returns 404. No deploy endpoint exposed on read-only path. Memory claim that /deploy is connected to deploy-webhook is not confirmed." + } + ], + "memoryReconciliation": [ + { + "memoryClaim": "25 Docker containers all UP", + "liveReceipt": "factory-status reports 19 live containers, 18 catalog, status stale", + "decision": "memory stale/advisory for container count; live receipt wins" + }, + { + "memoryClaim": "8098/deploy-webhook autonomous deploy port is operational authority", + "liveReceipt": "checks only used 8099; committed receipts mark 8098 legacy/internal/stale", + "decision": "blocked as fable-agent deploy authority" + }, + { + "memoryClaim": "Phase A-D fully operational (skill_health.py cron, POST auto-patch to deploy-webhook, recursive self-improvement loop)", + "liveReceipt": "no fresh local degraded-skill recovery receipt was produced; auto_patch_proven=false", + "decision": "not proven; auto_patch_proven=false until fresh local evidence" + }, + { + "memoryClaim": "git-proxy serves /deploy connected to deploy-webhook for autonomous agent deploy", + "liveReceipt": "GET /deploy → 404; /deploy endpoint not confirmed", + "decision": "memory claim not confirmed; deploy goes through guarded 8099/deploy via git-proxy only" + } + ], + "harnessVerification": { + "builtAndCommitted": [ + "verify-gate (build-test-lint gate, worktree cleanup on fail)", + "interrupt-gate (stdin TTY human approval gate)", + "flat-ledger (JSONL state file outside LLM context)", + "repo-mapper (minified repo tree for system prompt injection)" + ], + "testStatus": "68 files, 291 tests passing", + "commit": "0236f35" + }, + "decision": "read-only check; no deploy actions attempted", + "deployAttempted": false, + "autoPatchProven": false +}