IronClaw
IronClaw opens unbound turns while measuring their database bill
IronClaw proposes an unbound execution lane with prepared-context acceptance, while companion work coalesces runtime milestone writes and measures per-turn PostgreSQL traffic. The cluster expands execution flexibility while putting write amplification under observation.
nearai/ironclaw PR #7633 is the inspected primary source: “feat(unbound-turns): prepared-context accept door, unbound run lane, kernel binding-ref deletion.” The related records below were inspected as supporting context rather than independent confirmation.
The facts
- nearai/ironclaw PR #7633 was created 2026-08-14T00:29:40Z and was open at inspection; its title is “feat(unbound-turns): prepared-context accept door, unbound run lane, kernel binding-ref deletion.” - nearai/ironclaw PR #7631 was created 2026-08-13T22:20:21Z and was open at inspection; its title is “perf(events): coalesce runtime milestone writes.” - nearai/ironclaw PR #7630 was created 2026-08-13T22:19:28Z and was open at inspection; its title is “perf(stress): measure per-turn Postgres writes.” - The repository reported 12606 stars, 1507 open issues, default branch main, and last push 2026-08-14T00:56:25Z. - The latest tagged-release baseline checked was ironclaw-v1.2.0 published 2026-08-13T23:30:51Z.
What changed
nearai/ironclaw PR #7633 reports: Implements the unbound-turns design (#7562) end-state-first: threads are the coordinator's unit of work, a conversation is a thread plus a *product-side* binding, and the kernel no longer carries reply routing at all. Design doc (renamed + delta-annotated in this PR): docs/internal/design/2026-08-12-unbound-turns.md. Naming pivot from the draft: "detached" → **unbound** (threads/profiles/families/concurrency class), accept door → **accept_prepared_context**, result tool → **builtin.structured_result**. Review by commit 1. test(turns,threads): pin today's behavior…** — pins written against unmodified code: coordinator prepare/submit contract, run-metadata serde compat, ownerless thread listing exclusion (both thread backends). 2. feat(unbound-turns): prepared-context accept door, unbound lane, and kernel binding-ref deletion** — the core change: **Kernel ref deletion.** SubmitTurnRequest/ResumeTurnRequest/RetryTurnRequest/SubmitChildRunRequest, TurnRunState, TurnRunRecord, agent-turn metadata, and SubmitTurnResponse::Accepted lose source_binding_ref/reply_target_binding_ref entirely. Old persisted rows rehydrate (serde ignores retired keys); a frozen legacy-shape struct proves old readers fail closed on new rows. ProcessGateRecord stops surfacing resume/reply refs and legacy journal migration stops copying them. **Prepared-context accept door** (ironclaw_threads): accept_prepared_context/read_prepared_context on SessionThreadService, both backends. Deterministic unbound-{sha256} thread ids and seed-row ids, CAS-guarded seeding, journaled PreparedContextRecord written last as the commit marker, idempotent replay by key. v1 rejects tool/reasoning seed parts with a typed error. **ironclaw_llm::agent_message**: provider-neutral bounded AgentMessage vocabulary
nearai/ironclaw PR #7631 reports: Summary create one composition-owned CoalescingEventSink and share it across host-runtime events, durable loop milestones, and WebUI loop-cancelled events flush the shared sink during graceful runtime shutdown keep live model-start/model-terminal milestones unchanged while persisting only terminal model events with bounded duration metadata retain decoding and projection compatibility for historical ModelStarted rows and terminal rows without duration Issue coverage Closes #7594 Implements only bullet 1 of #7604 Advances epic #7591 Explicitly excludes #7596 and #7605. The thread-activity coalescer and transcript lookup-index migration are not partially implemented here; they remain independent follow-up PRs. Compatibility Historical ModelStarted rows remain part of RuntimeEventKind and deserialize with duration_ms = None. Historical and new terminal-only streams fold to the same semantic final run projection. The audit sink remains separate, synchronous, durable, and append-only. Rollback Revert commit ea9fb9917e. This restores direct durable milestone/WebUI appends and paired durable model start/terminal rows. No data migration or destructive rollback is required. Risks Best-effort runtime events now share one bounded write-behind channel, so the existing documented coalescing sink overload/crash-tail semantics apply uniformly. Graceful shutdown now surfaces a sink flush failure instead of silently dropping the buffered tail. Model duration is process-local elapsed
nearai/ironclaw PR #7630 reports: Summary Add a fixed db-write-measurement stress preset for one Postgres user turn with 10 tool calls and a separately configurable idle window. Add typed before/after/delta snapshots for pg_stat_user_tables writes and normalized pg_stat_statements calls, grouped by table and query ID with totals in JSON and human output. Fail before the workload when pg_stat_statements is unavailable. Keep resets opt-in and limited to the current database plus the measured table counters. Preserve URL redaction and never emit captured SQL text. Change Type [ ] Bug fix [x] New feature [ ] Refactor [x] Documentation [ ] CI/Infrastructure [ ] Security [ ] Dependencies Linked Issue Closes #7592 Related #7591 Issue Coverage and Scope Covers the Tier 0 measurement harness only. It reports RootFilesystem entries, events, index specs, ordered-index rows, sequences, and trigger record/history tables. Process-journal and transcript writes are measured through their RootFilesystem tables. Explicit exclusions: no production persistence behavior changes, schema changes, generic database abstraction, workload retry logic, or optimization work from later #7591 sub-issues. Validation [ ] cargo fmt --all -- --check — pending coordinator validation; intentionally not run in this parallel batch. [ ] cargo clippy --all --benches --tests --examples
Why it matters
Unbound turns can remove orchestration friction, but they also create new ownership and persistence paths. Without measured event writes and explicit context acceptance, flexibility becomes invisible database churn. The operator test is whether visible state, retained state and authority still describe the same event after retries, switching or restart.
Current
The primary record was open when captured on 2026-08-14. The tagged-release baseline was ironclaw-v1.2.0 published 2026-08-13T23:30:51Z. Repository metadata, full source bodies, current pull requests and issues, releases, Google News, Hacker News, Lobsters, Metamesh and the rendered ClawCharts row were inspected. ClawCharts selected the subject; it did not prove the claim.
Evidence
The primary URL is https://github.com/nearai/ironclaw/pull/7633. Supporting records are https://github.com/nearai/ironclaw/pull/7631 and https://github.com/nearai/ironclaw/pull/7630. Source bodies, timestamps and states are preserved in the daily evidence bundle. Test counts and reproductions remain attributed to their authors unless identified as independently rerun.
Source boundary
Open work is described as open, closed work as closed, and operator reports as reports. A pull request is evidence of proposed or reviewed direction, not proof of a shipped release. Search residue, package mirrors and historically published source spines were excluded.
Operator take
Require a binding receipt before durable side effects, publish per-turn write budgets and coalesce milestones only where recovery semantics remain intact. Preserve a before-state receipt, make the smallest reversible change, and verify the original failure independently.
Caveat
Public project records are mutable. Status, scope and evidence can change after publication. This brief records the inspected state and does not authorize changes to a reader’s deployment.
Source inspected; source state, environment and release boundary remain explicit.