IronClaw

IronClaw extracts product contracts from its common crate

IronClaw’s architecture sequence extracts product, extension and loop contracts into neutral crates, removes dual import paths and narrows ironclaw_common so product code no longer depends on runner internals. The work is staged behind compile-checked migration gates rather than one repository-wide rename.

← Back to homeOriginal source ↗

nearai/ironclaw PR #6980 is the inspected primary source: “refactor(contracts): extract ironclaw_product_contracts and land the adapter half (WS1.4).” The two related records below were inspected as supporting context, not treated as independent confirmation.

The facts

- nearai/ironclaw PR #6980 was created 2026-07-31T22:38:56Z and was open at inspection; its title is “refactor(contracts): extract ironclaw_product_contracts and land the adapter half (WS1.4).” - nearai/ironclaw PR #6982 was created 2026-08-01T00:36:57Z and was open at inspection; its title is “Narrow ironclaw_common and shed the product→runner edge (WS1.6 + WS1.7).” - nearai/ironclaw PR #6977 was created 2026-07-31T21:01:20Z and was closed at inspection; its title is “refactor(contracts): extract ironclaw_extension_contracts and close the dual import paths (WS1.3).” - The repository reported 12585 stars, 1414 open issues, default branch main, and last push 2026-08-01T00:56:00Z. - The latest tagged-release baseline checked was ironclaw-v1.0.0 published 2026-07-27T19:32:01Z.

What changed

nearai/ironclaw PR #6980 reports: Stacked on #6977 (→ #6975) — merges after them; diff shown is against that branch. WS1.4 of the target architecture: carve the product tier's neutral contracts out of ironclaw_host_api into crates/ironclaw_product_contracts, **and land the WS1.3 adapter half it exists to unblock** — ChannelAdapter, ToolAdapter, and RestrictedEgress now live in ironclaw_extension_contracts where §6.1.2 assigns them. Flat crate directory today; the contracts/ family directory arrives in Wave 5. git mv moved **15 modules at 83–100% similarity**, so the diff reads as a move, not a rewrite: | → ironclaw_product_contracts | Owns | | --- | --- | | surface (from host_api::product_surface) | ProductSurface, BoundProductSurface, ProductSurfaceCaller, the invoke/query/stream

nearai/ironclaw PR #6982 reports: Stacked on #6981 (→ #6980 → #6977) — merges last in the wave. Closes Wave 1 with its last two rows: the ironclaw_common narrowing (WS1.6) and the two "single-symbol" product edges (WS1.7). Neither row survived contact with the code as written — **five of WS1.6's six clauses and both of WS1.7's edges measured differently on this base** — so the corrections, with evidence, are most of the value here. WS1.6 — ironclaw_common narrowing ironclaw_common now matches §6.1.5's *Owns* list exactly, plus three named exceptions. Eviction table: | item | §6.1.5 home | what actually happened | |---|---|---| | event.rs (1,234 lines) | product_contracts | **DELETED.**

nearai/ironclaw PR #6977 reports: Stacked on #6975 (→ #6967) — merges after them; diff shown is against that branch. WS1.3 of the target architecture: carve the extension tier's neutral contracts out of ironclaw_host_api into crates/ironclaw_extension_contracts, repoint every consumer, and close the dual import paths. Flat crate directory today; the contracts/ family directory arrives in Wave 5. git mv moved eight modules with 96–100% similarity, so the diff reads as a move, not a rewrite: | Module | Owns | | --- | --- | | channel | ChannelDescriptor / ChannelIngressDescriptor / ChannelEgressDescriptor / ChannelPresentation + connection strategy, notices, validators | | channel_identity | ChannelConnectionScopeSource, ChannelIdentityPostBind(Factory), ChannelIdentityOverride | | extension

Why it matters

Contract extraction matters when it changes who is allowed to mint evidence and depend on runtime internals. Neutral vocabulary can reduce coupling only if old paths close and adapters cannot bypass the new boundary. This is an operator boundary: persisted state, execution ownership and visible controls must describe the same event. A workaround that broadens access, deletes state or hides the symptom would trade a visible defect for an unmeasured one.

Current

The primary record was open when captured on 2026-08-01. The release baseline was ironclaw-v1.0.0 published 2026-07-27T19:32:01Z. Current repository metadata, pull requests, issues, release records, Google News discovery, Hacker News discovery, Lobsters, Metamesh and the rendered ClawCharts row were checked. ClawCharts selected the subject; it did not prove the claim.

Evidence

The primary URL is https://github.com/nearai/ironclaw/pull/6980. Supporting records are https://github.com/nearai/ironclaw/pull/6982 and https://github.com/nearai/ironclaw/pull/6977. Their source bodies, timestamps and states were captured in the daily evidence bundle. Test counts, reproductions and deployment observations remain attributed to their authors unless explicitly 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. Issue closure would not by itself prove a deployed fix. Search residue, package mirrors and historically published source spines were excluded.

Operator take

Track dependency edges before and after each slice, keep compatibility shims temporary, and require compile and behavior tests before deleting the old contract families. Preserve a before-state receipt, make the smallest reversible change, and verify the original failure independently after intervention.

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.