2026-07-22 · BUILD LOG · TRUTH & CLOSURE · ~10 MIN READ
Truth and Closure.
Not Another Feature Cycle.
The agents can build. Dream.OS still lets policy, deploy, partial scope, stale tasks, human gates, and enqueue attempts masquerade as truth.
A ChatAudit line that should have been impossible to misread:
FIRST_PAYMENT was interpreted as “freeze everything except Stripe” rather than “keep the primary revenue gate dominant while advancing adjacent money-producing work.”
That is not a bad task choice. It is a planner-policy defect. The swarm did not fail to ship code. It failed to enforce how capital attention is allocated when a human-only cash gate is open.
The Planner-Policy Defect
Prior audits already showed identity inference, routing sticky on stale DONE, transport enqueue without live receipts, and canonical-root drift. Economic control is the same family of failure applied to money.
When the primary gate is human (buy the Bot Lab pass), the wrong policy is exclusivity: only Stripe work may proceed. The correct policy is dominance: primary must still advance (verify, unblock board, sales surface), and adjacent money lanes may continue.
Allocation, Not Exclusivity
The planner now carries a machine-enforced portfolio:
revenue_allocation: primary_closure: 50 adjacent_revenue: 30 platform_reliability: 20 constraints: primary_gate_must_advance: true adjacent_money_lanes_may_continue: true unrelated_infrastructure: blocked
That blocks both extremes:
- abandoning the main cash objective
- sitting idle (or only polishing infra) while a human-only cash gate is open
Surface-Specific Closure
Unit tests and deployment are not live product verification. A Discord feature must move through a surface contract:
CODE_PASS → UNIT_PASS → DEPLOY_PASS → BOT_ONLINE → COMMAND_SMOKE_PASS → USER_FLOW_PASS → DONE
Without the live-smoke receipt, the correct state is
DEPLOYED_UNVERIFIED, not DONE.
Flowr’s timeblock work landed here on purpose: tests green, bot reload
still required — not closed.
Full-Scope Completeness
The blog-style miss showed a partial fix accepted because the changed subset passed. The invariant is arithmetic:
requested_scope − verified_matching_scope = 0
If any requested item remains non-compliant, the task cannot close unless it is explicitly assigned, blocked, or removed from scope by the operator.
Resolve “Today” Before Planning
“May 29 Flowr” was not a calendar opinion — it was stale task metadata treated as current. Planner language like “today,” “current,” or “next” must bind through a resolver first:
- current date
- active weekly objective
- latest task mutation
- current route fingerprint
- latest verified product state
Consolidated P0
The audits converge on five first-order capability groups:
- State Integrity — canonical roots, durable writes, path registry
- Execution Truth — identity/session, worktree completeness, evidence transitions
- Transport Truth — bus health, live receipts, wrong-agent guard, mute
- Planner Truth — stale suppression, today resolver, route fingerprint, revenue allocation
- Product Closure — full-scope checks, live-smoke contracts, objective states
What Shipped
This slice turned the audit into runtime law:
policy: runtime/policies/truth_and_closure_program_001.yaml policy: runtime/policies/planner_revenue_allocation_enforcement_001.yaml module: src/dreamvault/runtime/truth_and_closure_001.py cli: runtime/scripts/verify_truth_and_closure_program_001.py cli: runtime/scripts/verify_revenue_allocation_enforcement_001.py cli: runtime/scripts/verify_surface_live_smoke_closure_001.py cli: runtime/scripts/verify_scope_completeness_gate_001.py cli: runtime/scripts/planner_today_resolver_001.py --json tests: tests/runtime/test_truth_and_closure_program_001.py
Blockers
- FIRST_PAYMENT — still human purchase; allocation gate keeps adjacent money lanes legal while primary advances.
- Flowr Discord —
DEPLOYED_UNVERIFIEDuntil bot reload + command smoke + user-flow receipt. - Live A2A — enqueue without delivery receipt remains a transport-truth fail, not “sent.”
Next Actions
- Wire revenue-allocation check into
get_next_task/ fleet gas before lane assign. - Require surface-closure receipt on any Discord/product DONE claim.
- Refuse task closeout when scope completeness equation ≠ 0.
- Call
planner_today_resolver_001.pybefore every planner presentation.
The next platform phase is a truth-and-closure program — not another feature expansion cycle.