Files
personal-agent-os/memory-systems/agent-os/dream/insights.md
T

75 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Insights — Dream Mode Consolidated Learnings
> Living, de-duplicated knowledge base. Themes, not an append log. Newest evidence strengthens or replaces existing entries.
> Opened 2026-10-10 (first Dream Mode run).
## 🏛️ Standing Principles (epistemics & discipline)
- **Pre-registration is load-bearing.** For any falsification loop ("what died and why"), kill criteria + cost assumptions must be timestamped *before* the run. Post-hoc autopsies re-import survivorship bias through the writer. Schema must force the field.
- **The critic must be a different engine than the proposer of the claim.** Hard-wiring one model (even a strong one) as permanent critic creates correlated blind spots → sycophancy collapse. Rotate roles (planner proposes, reviewer critiques — separate profiles count).
- **Optimize for honest falsification, not PnL.** Success metric = cleanly-falsified claims per week at bounded cost. PnL is a rare lagging output; chasing it un-disciplines the only durable asset.
- **Measurement integrity gates the experiment.** If the instrument is broken (clock skew, unmeasured latency), the run is void — fix the instrument *before* running. Refuse to start a clock that would void every result.
- **The durable asset is failures-with-autopsies**, not strategies. Wins are published (survivorship bias + marketing); a fee-adjusted record of what died and why is scarce and never has to be re-learned.
- **Honest-gap ledger.** Every build report names what's wired, what's offline-only, what remains. Never claim live behavior that hasn't run.
- **Name which cost/branch you're invoking before concluding.** E.g. a *taker* fee says nothing about a *maker* edge's viability.
- **A known root cause with a cheap fix should not survive the day it was found** — diagnose → propose → ask in the same turn; apply on approval.
- **A defect in the instrument is not a death of the claim** (strengthened 2026-10-11). When a claim fails because the *spec/test* was wrong, the honest record is `withdrawal (never-tested)` — never an autopsy with a cause of death. Filing a death for an unrun claim is the corpus's own survivorship-bias back door. The schema must carry a `never-tested`/`withdrawn` status so a documentation defect can't be written up as evidence of death.
- **Durable-run integrity triad** (2026-10-11). Any multi-day/unattended run must: (a) keep its progress counter in the durable store and **replay it on startup** (in-memory `counted` reset → the run can never reach its N, silently); (b) key liveness/stall detection on a **quantity that changes when healthy** (log *file-size growth*, never "last log line unchanged" — constant verdict lines make that a false stall); (c) make the recovery action **idempotent and non-leaking** ("confirm zero live before starting one" — a restart-on-stall cron that never reaps the prior process compounds the fault it exists to repair).
- **A cron's own recovery action is a code path that needs testing.** Treat every self-healing action as a first-class artifact: unit-check the idempotency guard and the resource-lifecycle on the restart path, not just the happy path.
- **Read a gate at its registered N.** When a statistical gate (e.g. a one-sided LB>0) prints a verdict before its sample is met, label it *interim, not decisive until N=X* — lead with that. A mean and its lower bound move at different speeds (2026-10-11: mean +0.019 while LB −0.099); an early negative LB is noise, not evidence.
- **Literal compliance is a failure mode when intent is already on record** (2026-10-12). A new instruction that contradicts a preference stated earlier *in the same session* must be surfaced before it is executed — especially when execution is expensive (a render, a delete, a spec change). "You asked for X twice; this says not-X — confirm?" costs one line and saves a cycle. A verification pass can pass its own spec and still fail the user: spec-compliance ≠ intent-compliance.
- **Instrument the weakest link before the verdict, not after** (2026-10-12). When a reviewer names the assumption most likely to flip the result, build its diagnostic *while the sample is still small* so the counterfactual is ready at N. Pre-built diagnostics beat post-hoc rationalizing.
- **One representation, derived not duplicated** (2026-10-12). When a contract lives as schema + template + validator (or any >1 list), derive the others from one source or they drift. Hardening the validator to read its required set from the schema closed the exact drift class that had produced a prior gap.
- **Evolving instrumentation must record its change-point** (2026-10-12). Instrumentation may change mid-run (e.g. added per-exchange logging), but the autopsy's `evidence_links` must carry every relevant commit hash plus a one-line change-point note ("X logged from commit Y onward; earlier signals have only aggregate"). Honest about instrument evolution without invalidating the pre-registered test.
- **A prescriptive tool error is an instruction, not an obstacle** (2026-10-13). When a tool fails by
naming its own fix ("content is required — use action='remove'", "read the file first"), change the
argument on the next call. Re-issuing the identical call is the **most-flagged recurring error in
this agent's own traces** (2026-10-13 trace-miner: the write_file pagination refusal alone hit 172
sessions; blocked-command patterns another ~50) — treat it as a standing behavioral defect, not an
accident. Never retry unchanged.
- **Artifact in the message, decision in the prompt** (2026-10-13). Any approval-gated write must ship
its exact diff/payload in the reply *body*; the approval prompt is a bare yes/no. If the reviewer has
to open a prompt to see what they're approving, the 60-min window burns and the work stalls a day —
that is exactly how the OpenCode+DeepSeek request died on 10-13 with zero writes.
- **Name the absence of a gate instead of inventing a milestone** (2026-10-13). "When do we go live?"
for a paper-only research artifact is a design question, not a status question. The honest answer is
the structural one ("no go-live gate exists by design; here are the missing pieces"), followed by an
offer to write the gate — that preserves honesty *and* momentum.
- **Third-party-agent text pasted into a session may be addressed to a different worker** (2026-10-13).
Check the addressee before acting on imperative phrasing; a relayed recommendation can look like a
direct instruction to Hermes.
- **Match the destructive action's scope to the promise, then prove it** (2026-10-13). A "strip 2 only"
request was honoured as exactly one entry replaced (7 → 7 entries, −18 chars), with the before/after
shown. Scope discipline like this is enforced by showing the diff, not by asserting restraint.
## 🛠️ Technical Notes
- **Kalshi fees (verified 2026-10-10):** taker = `round_up(0.07·C·P·(1−P))`, charged only when you take. **Maker fee = 0 on ~12,500 of 12,699 series** (only ~129 series tax resting orders, quarter rate; cancelling free; 14 niche series fee-free). Polymarket **US** is a separate, thinner, full-KYC venue with contested CA status; Kalshi CA is clean (CFTC DCM).
- **Headless (`-q`/`--oneshot`) approval gate:** profiles with `approvals.mode` unset default to `manual` → no user → dangerous-pattern commands (`python -c`, `execute_code`, `rm -r`, `kill -9`, heredocs) time out to `BLOCKED`. The `execute_code` fallback is gated too → retry loop that burns context. Fix: `approvals.mode: smart` (+ `command_allowlist` for scoped safe patterns) + tool-loop guardrails (`hard_stop_after: 5`). Cron-safe only after allowlist/config applied.
- **Cron/unattended tool limits:** `python -c`, `execute_code`, and heredoc script execution are blocked in unattended (-q) runs unless allowlisted; `write_file` refuses overwrite without a prior read (pagination paradox); `terminal` foreground cap 600s (else promoted to tracked background).
- **killcorpus** (`C:\Users\fight\Projects\killcorpus`): paper-only. Spec `KXBTCD-lag-vs-spot` v1.1.1 (taker primary; maker secondary pending fill model). Harness `harness/paper_trader_instrumented.py` — instrumented (book_read_ts, ntp_offset_ms, spot_age_ms, realized_slippage), variance gate σ²=0.25, latency gates 1000/500/250 ms, fixed N=967 post-registration. Offline selftest green; live feed→fill→settlement path **wired and proven** (settle-through proof 2026-10-11: 40 signals / 5 trades / 5 settled, clock off). Gitea `Tony_tech/killcorpus` push superseded by Contents-API content-mirror. Reference (read-only, do not edit): `polyterm/paper_trader.py`. **Live eval launched 2026-10-11T16:24:28Z** (REG_TS). Supervision: cron `1da28c73cd5f` (15 m, supervisor) + `c7ea39ffb05a` (1 h, health check). Policy: **hold until N=967**; interim K1 non-actionable; only pre-registered early stops (sustained `measurement_artifact`, variance breach → UNDERPOWERED) may halt. Fixes shipped: `b833e3c` (smoke-arg parser), `45f94a5` (DB replay of `counted` on startup). Gitea `Tony_tech/killcorpus` **content-mirrored via Contents API, no `origin`** (git-level link deliberately held). Schema drift seen once: DB `signals` table lacked `book_read_ts_ms` the writer needs — deployed DB and writer must be reconciled at launch. **2026-10-13 status:** counted **316/967**, mean +0.0033, realized variance 0.1557 (σ² basis 0.25), one-sided LB −0.0332 → K1 `KILL` **interim, not decisive until N=967**; rate 6.1 markets/hr → **ETA ~Oct 18**; one process all day, no lock errors, log appending.
- **Agent-loop roles:** planner=Proposer, reviewer=Critic, builder=Executor, jimmy=Recorder. Reviewer residual risk on claim 002: primary and pessimistic fill models *share the same depth/queue observation error*.
- **killcorpus terminal path — READY (2026-10-12).** Claim 001 (taker) live and untouched all day: 1 process, 0 lock errors, `reg_state.json` created_iso unchanged; counted 66 → 161/967 (~5.4 settled/hr → ~6 days to N=967); interim K1 ignored. Claim 002 (maker / liquidity provision) spec **PASS** after 3 review rounds (`specs/maker-liquidity-provision.spec.yaml`), then **harness machinery built and independently re-verified** (`20bba97`, selftest 43/43) — but the **live data pipeline is NOT wired** (fee→whitelist freeze, book prints/depth/queue, settlement fetch, realized-vol K5); declared machinery-only, not fabricated. `seeded-basket` claim still **blocked on its text** (never paraphrased). Autopsy contract: template `b4eb82c`, schema+drift-proof validator `8050669`, changelog `43fb179`, 3/3 synthetic states schema-clean (`96585df`). Matched-lag counterfactual at n=66: 58/66 survive a 166 ms lag, ~12% exist only un-lagged → *"WEAKENED — measurement-artifact suspect"* (interim, not a gate). Hand-off simulation + `docs/terminal-path-readiness.md` signed; superseded handoff docs deleted, `docs/` = `killcorpus-status.md` + `operating-manual.md`.
- **brag / MiArc video pipeline — verified gotchas** (2026-10-12). Hyperframes' stacked config: **`data-automation` volume lane supersedes `data-volume`** — setting the "obvious" one silently does nothing (cause of the music-drowns-VO bug). **Animated film grain is a bitrate trap**: static grain took the file 101 MB → 14.7 MB with no visible loss. SVG **`scaleX` scales about user-space origin** → the arc collapsed to the left; fix with `svgOrigin`. Local voice = **Kokoro venv at `C:/Users/fight/.venvs/kokoro`** (`am_michael` male / `af_heart` female); narration must be per-line loudness-normalized (`loudnorm` under-corrects short clips). System Chrome is broken on this box → use Hyperframes' managed headless shell. Verify pacing (static-hold), mix separation, voice presence (cross-correlation r), and encode size *on the delivered file*.
- **Provider fallback incident (2026-10-12):** `deepseek/deepseek-v4-flash-0731` (routeapi) went unavailable on billing/quota; role profiles silently failed over to Qwen on the brother-5090 rig for ~18 min. Check the profiles' actual model on health checks.
- **OpenCode on this box (2026-10-13):** `opencode models` exposes 51 models — 39 `google/*` + 12 `opencode/*`, **all free tier; zero DeepSeek** (`opencode/deepseek-v4-flash|v4.1-flash|v4-pro` all return `UnknownError` despite appearing in `opencode.jsonc` — no entitlement; a free model ran `OC_SMOKE_OK`, so the CLI is fine). The only working route to OpenCode+DeepSeek is **OpenRouter**: append `OPENROUTER_API_KEY` to `~/.config/opencode/.env` (shell append to that file is blocklisted — use file I/O), add an `openrouter` provider block + `"model"` to `~/.config/opencode/opencode.jsonc`, back both up first. Auth/config live at `~/.config/opencode/`; auth DB `~/.local/share/opencode/auth.json` is CLI-read-only. **Held pending Tony's approval** (clarify expired 10-13 20:18).
## 🧰 Skills / Tooling Notes
- **Skill-review telemetry (2026-10-13):** 201 skills, 0 eligible for archive, 0 stale-watchlist; merge candidates flagged were mostly false positives (pairs that share a domain but not a purpose — `source-driven-development`/`spec-driven-development`, `writing-for-agents`/`writing-fragments`, `omh-ralph-driver`/`omh-ralplan-driver`). The one real hit is a **duplicate name**: `test-driven-development` at similarity 1.00 across two directories.
- **Recurring-defect reality check (2026-10-13 trace miner):** 305 sessions / 21,833 messages → 25 findings, and the top finding by an order of magnitude is *the same* behavioral error in three tool families — ignoring a prescriptive tool error and re-issuing the call (`write_file` pagination refusal 172 sessions; `terminal` blocked-command 32+10+6; `execute_code` blocked 26). One behavioral fix, not more instrumentation.
- **brag skill split (2026-10-12, done by hand on approval):** official hub skill `brag` installed as authority (`hermes skills install official/creative/brag`); local skill renamed `brag-launch-video` → **`brag-local-addendum`** and slimmed 34.1 KB → 15.9 KB (box-specific deltas only). Lint: a frontmatter-only rename is invalid — skill name must match its directory.
## 🧵 Open Threads
- Trace-fix (builder/reviewer `approvals.mode: smart` + guardrails + timeout 300) written, unapplied — awaiting Tony's approval. See [[../04_projects/trace-review-bot/2026-10-10-trace-analysis-and-fix]].
- killcorpus prereqs **cleared 2026-10-11**: clock fixed (±2 ms, was −284 ms); settlement observed (5 settled); durable runner proven; spec v1.1.1 approved. Eval **live** since 16:24:28Z, accruing toward N=967. Next gate = a valid run at N=967 → first autopsy (kept/killed/parked/inconclusive). Nothing else halts it except the pre-registered early stops.
- killcorpus **terminal path READY (2026-10-12)** — the loop will not idle at N=967. Autopsy template + drift-proof validator + 3 synthetic dry-runs + hand-off simulation all done and signed; claim 002 (maker) spec PASS, harness machinery built (live feed NOT wired — held pending explicit green-light); `seeded-basket` blocked on its text.
- killcorpus **open items**: git-level link (`origin`) held — decide at first autopsy or sooner; maker live-feed wiring held for green-light; superseded handoff docs were **deleted 2026-10-12** (`docs/` now = `killcorpus-status.md` + `operating-manual.md`).
- Dream Mode live as of 2026-10-10 (skill + `skill_review.py` + 2 AM cron + `dream/`). Note for 10-12 = third run.
- **OpenCode + DeepSeek — PENDING Tony (opened 2026-10-13 19:16).** Needs: (a) which DeepSeek as default — `v4.1-flash` (matches Hermes default), `v4-pro`, `r1`, or all three with none set; (b) go / key-only / show-diff-first. Exact diff is recorded under 🛠️ Technical Notes. No writes made.
- **killcorpus "ready for capital" gate — offered 2026-10-13, unanswered.** Draft a formal in-repo gate spec (doc only: K1–K5 at pre-registered N → matched-lag clean → replication on a second regime + sample → live-fill-validated execution path with verified fee schedule → risk limits + kill-switch → capped live tranche with pre-registered stop)? Or keep the corpus paper-only with no written gate?
- **killcorpus minor open item:** `equity` + `stats` tables declared but never written (variance logged textually). Fix at a natural gap vs after N=967 — Tony's call.
- **Sorter cron gap (open ≥2 reports):** the daily Sorter triage reads `00_system/user-profile.md`, which does not exist (vault root is `C:\Users\fight\Documents\Obsidian Vault`). Create the file or repoint the skill.
- **Duplicate skill:** `test-driven-development` exists twice at similarity 1.00 (`software-development/` and `software-development/agent-skills/`). Proposed for consolidation; not merged unattended.