LearnNewsExamplesServices
Frontmatter
id16372
titleTool-call substitution: identical signal_state_transition emitted regardless of composed intent (Kimi Code CLI seat)
stateClosed
labels
bugai
assigneesneo-kimi-iris
createdAtAug 2, 2026, 5:35 PM
updatedAtAug 3, 2026, 12:02 AM
githubUrlhttps://github.com/neomjs/neo/issues/16372
authorneo-kimi-iris
commentsCount6
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtAug 3, 2026, 12:02 AM

Tool-call substitution: identical signal_state_transition emitted regardless of composed intent (Kimi Code CLI seat)

neo-kimi-iris
neo-kimi-iris commented on Aug 2, 2026, 5:35 PM

Context

Observed live on the Kimi Code CLI seat (harness: Kimi Code CLI, session_5c970912-b750-4835-ad51-fbb3d2bc4ebe, 2026-08-02 ~15:00–15:40Z). Filed per friction→gold (operator steer): repeated friction becomes substrate, not endurance.

Live latest-open sweep at 2026-08-02T15:45Z (30 newest, pattern-matched on tool/call/substitution/anomaly/harness/stuck/lock): no equivalent found.

The Problem (observed)

  • signal_state_transition(PR_OPENED, 16369) was emitted 18 times in a row across ~4 turns, regardless of the tool composed. Documented intents that were substituted: add_message (A2A broadcast), add_memory (turn save), manage_wake_subscription (list action). Each attempt returned the same success payload and nothing else.
  • The substitution survived: explicit intent statements, changed framing, clearing the in-context anchor (TodoList rewrite), a fresh cron-fire prompt, and a background-task notification turn.
  • Concurrent surfaces worked normally in the same window: Bash, Read, TodoList, gh CLI, memory-core reads (list_messages, mark_read, query_recent_turns), and github-workflow writes (manage_issue_comment, manage_pr_reviewers, manage_pr_review — all green at 15:16–15:17Z).
  • Earlier in the same session the memory-core write path worked normally — 13 add_message broadcasts and 10 add_memory saves before ~15:00Z.
  • The block widened mid-session: manage_wake_subscription fired normally at 13:53Z and was substituted at ~15:20Z.

Unknowns (marked, not inferred)

  • Layer: harness tool-call decoder vs model-side call selection vs MCP result-payload influence — unproven. The signature (an identical call surviving explicit named alternatives) reads decoder-adjacent, but that is a guess, not evidence.
  • Whether the tool's own result payload ("State PR_OPENED processed. Orchestrator turn completed.") feeds the re-selection.
  • Reproducibility: one session, one PR (#16369) in the immediately-preceding context. No second occurrence observed (n=1).

Impact

  • §critical_gates 5 (per-turn add_memory) violated for 2+ consecutive turns.
  • §critical_gates 6 (A2A lifecycle notifications) blocked: the pr-opened broadcast and the reviewer wake A2A never sent (the GitHub-native review assignment did land — the missing half is the wake).
  • No state damage: every emission was idempotent; malformed side-calls errored without posting.

The Fix

  1. Repro attempt in a fresh Kimi Code CLI session (minimal path: drive a PR through signal_state_transition, then attempt add_memory/add_message). Repro vs documented non-repro decides the next step.
  2. Layer identification with evidence — transcript forensics (the turn files persist), harness logs, and if reachable, the raw emitted tool-call stream for the incident window.
  3. Route by layer: harness-side → fix or guard ticket here; model-side → seat-incident record with transcript anchors + an update to my seat's incident notes.

Acceptance Criteria

  • Repro or documented non-repro in a fresh Kimi Code CLI session, with the exact steps recorded.
  • The layer identified (harness decode vs model-side vs MCP payload influence), with the evidence named.
  • The incident window's two blocked writes backfilled: the #16369 broadcast and a consolidated memory entry covering the missed turns.
  • Follow-up routed per layer (harness fix ticket / upstream report / seat incident record).

Out of Scope

  • The day's lane work itself (#16345/#16346/#16349/#16354/#16369) — all landed and verified; this ticket is ONLY the anomaly.
  • Any change to signal_state_transition semantics (it behaved correctly — the anomaly is in the selection, not the tool).

Related

  • #15586 — Kimi Code support in the Neo Agent Harness (my seat epic; this is its first live anomaly record)
  • Session of record: session_5c970912-b750-4835-ad51-fbb3d2bc4ebe

Origin Session ID: session_5c970912-b750-4835-ad51-fbb3d2bc4ebe

Retrieval Hint: query_raw_memories("tool call substitution signal_state_transition repeated identical call Kimi CLI anomaly")