Conversation
Owner
Author
|
Owner
Author
Renovate Ignore NotificationBecause you closed this PR without merging, Renovate will ignore this update. You will not get PRs for any future If you accidentally closed this PR, or if you changed your mind: rename this PR to get a fresh replacement PR. |
l3ocifer
pushed a commit
that referenced
this pull request
Sep 3, 2026
…ocabulary types (nearai#7758) * refactor(turns): delete the duplicate agent-turn metadata struct `AgentTurnProcessMetadata` was a 13-field strict subset of `AgentTurnProcessStateMetadata` serializing under the same durable `"agent_turn"` key. Two Rust types writing one key is the structural cause of the bug class fixed in nearai#7752: a row written by the subset type deserializes into the superset with serde defaults for the missing fields, which is exactly how `subagent_activation_provenance` was silently read back as `None` and left the autonomous-wake cap unable to fire. nearai#7752 fixed the instance; this removes the second writer so the class cannot recur through this path. Its only entry point was `TurnRunProcessExt::to_process_snapshot`, whose only caller was a test. Deleting the trait orphans `process_suspension_from_record` and `process_lease_from_record`, which die in the same commit. Three tests pinned real behavior through the deleted type and are re-pointed at the surviving one rather than dropped: - the `output_contract` serde-default pin (the survivor carries the identical attribute but nothing pinned it); - the five blocked-status -> suspension-kind mappings, now driven through `to_process_state_snapshot` (`process_suspension_from_state` is field-identical to the deleted twin and shares both underlying mapping fns); - the typed failure-metadata read-back in `ironclaw_turn_runner`, which was reading a superset payload through the subset type. Behavior unchanged. The deleted struct's fields are a strict subset of the survivor's, all serde-defaulted, under the same key, so removing the writer is invisible to every reader. Non-consumers confirmed: the journal-store migration builds a raw map, the rolling-compat contract uses its own frozen shape, and the suggestions observer reads untyped JSON. Evidence: cargo test -p ironclaw_turns --no-fail-fast 234 passed, 0 failed cargo test -p ironclaw_turn_runner --no-fail-fast 320 passed, 0 failed cargo test -p ironclaw_architecture_tests all green Both re-pointed tests were mutation-verified to fail when the behavior they pin is broken. Refs nearai#7755 (F2). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * refactor(subagent): collapse the two transposed spawn-mode enums `SubagentSpawnMode` (ironclaw_turn_runner) and `SpawnSubagentMode` (ironclaw_loop_host) had identical variant sets, identical derives, and the identical `#[serde(rename_all = "snake_case")]` attribute — transposed names for one concept, sitting on disjoint paths and reconciled by a hand-written identity mapping. This is the duplicate shape `.claude/rules/type-placement.md` names explicitly: different names, same variant set, invisible to name matching, and joined by a `From`-equivalent that never diverges. Per that rule a field-for-field identity mapping means the mirror is a violation — delete it and import the source type. The near-identical naming is separately flagged there as a grep/agent-discovery hazard, which is what made the pair survive this long. `ironclaw_loop_host` keeps the enum: it already owns `SubagentKindId` and the spawn wire contract, and `ironclaw_turn_runner` already imported from it, so no new dependency edge appears and the same-layer edge inventory is unchanged. Deleted: - SubagentSpawnMode (the turn_runner duplicate) - payload_spawn_mode, its identity converter - the aliased PayloadSpawnMode import Wire safety. Both enums carried the same serde attribute, so the emitted strings were already byte-identical; the collapse cannot move them. The mode is model-visible in `SpawnedChildRunPayload` and rides durable records (`AwaitedChildSetRecord.mode`, `SubagentThreadMetadata.mode`), so the strings are now pinned explicitly: a round-trip test covering *both* variants was added and proven green BEFORE the move, then re-run unchanged after it. The pre-existing payload test only ever asserted "background" and never round-tripped. Behavior unchanged. Evidence (full unfiltered runs): cargo test -p ironclaw_loop_host --no-fail-fast 980 passed, 0 failed cargo test -p ironclaw_turn_runner --no-fail-fast 321 passed, 0 failed cargo test -p ironclaw_turns --no-fail-fast 234 passed, 0 failed cargo test -p ironclaw_architecture_tests 42 suites, 0 failed Refs nearai#7755 (F1). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * docs(subagent): repoint two live design docs at the surviving spawn-mode type F1 deleted `SubagentSpawnMode`, leaving the name dangling in two design docs that are still live guidance. AGENTS.md requires searching docs and guidance for old paths after a move or rename; that search was missed in the F1 commit. - `thread-harness-design.md` is marked "Accepted design" and is the canonical tiebreaker for the await-edge harness; its `AwaitEdge` shape named a type that no longer exists. - `pr2-pr6-shape.md` is a one-day-old decision record for the *unimplemented* Slice 2. It instructed the future implementer to reach for `spawn_result.rs SubagentSpawnMode::Background` — a symbol and a location that are both now wrong. `phase-2-mechanisms.md` is deliberately left alone: it carries an explicit "Code citations are point-in-time (2026-05) and have drifted" banner, so it is a frozen historical snapshot rather than live guidance. Editing one symbol inside a block that is documented as drifted would falsely imply the rest is current. Docs only; no code change. Found by the design and coverage review lanes. Refs nearai#7755. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(ci): re-anchor two coverage exemptions this branch's deletions moved `Fast deterministic checks` failed with: changed coverage gate failed: exemption #97 names a line beyond current EOF (125) Exemption #97 covers `steering_allowed_metadata_default` in `process_projection/metadata.rs`. It was pinned at lines 130-132, but the fn has actually lived at 184-186 on main for some time — the anchor was already stale and only passed because the file was long enough to clear the EOF check. F2 shrank the file from 186 to 125 lines, which pushed those numbers past EOF and surfaced it. Re-anchored to 123-125, the fn's real location now. Auditing the rest of this branch's changed files turned up a second, quieter one. F1 consolidated a three-line import in `await_edge/resolver.rs` into two, shifting every line below it up by one. Exemption #38 is written for the background spawn-mode gate-token statement; at line 2033 it now lands on a closing brace instead. It stayed within EOF so CI never complained, but a coverage exemption pointing at the wrong statement exempts the wrong line. Re-anchored to 2032. Both exemptions keep their original owner, reason, issue, and review_after — only the line anchors move, because only the lines moved. Verified with the exact CI command: python3 scripts/ci/reborn_changed_coverage.py \ --manifest tests/integration/changed-coverage-exemptions.toml \ --validate-manifest-only changed coverage manifest valid: 198 exemptions, line floor 90.0% Refs nearai#7755. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Henry Park <16583448+henrypark133@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
0.8→1.1.2Release Notes
toml-rs/toml (toml)
v1.1.2Compare Source
v1.1.1Compare Source
v1.1.0Compare Source
v1.0.7Compare Source
v1.0.6Compare Source
v1.0.5Compare Source
v1.0.4Compare Source
v1.0.3Compare Source
v1.0.2Compare Source
v1.0.1Compare Source
v1.0.0Compare Source
v0.9.12Compare Source
v0.9.11Compare Source
v0.9.10Compare Source
v0.9.9Compare Source
v0.9.8Compare Source
v0.9.7Compare Source
v0.9.6Compare Source
v0.9.5Compare Source
v0.9.4Compare Source
v0.9.3Compare Source
v0.9.2Compare Source
v0.9.1Compare Source
v0.9.0Compare Source
Configuration
📅 Schedule: (in timezone America/New_York)
* * * * 0,6)🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Renovate Bot.