Repository navigation
Conversation
…tion, not content conversation_digest hashed every request item including the harness's system prompt. OpenCode regenerates that prompt per request with today's date, so the first model call after 00:00 UTC in any running session no longer matched its parent's recorded context: resolve_node returned UNRESOLVED (no_match), the call was poisoned, and the finalizer rejected the whole rollout. In a run whose step spanned 2026-09-24 00:00 UTC, 453 of 512 rollouts (every rollout that made calls on both sides of midnight) became placeholder rows; the healthy rollouts were exactly those that ran entirely before or entirely after midnight. system/developer items now contribute only their role and position to the digest. User, assistant and tool turns are hashed as before, so a summarized or rewritten conversation still fails verification. Reusing the parent's tokens then serves the instruction text the model actually saw, which is what the training rows need. FINGERPRINT_VERSION bumps to 2. [tkonuk: FINGERPRINT_VERSION 3 here, since #3382 already bumps it to 2] Signed-off-by: Tugrul Konuk <tkonuk@nvidia.com>
Claude Code echoes a served tool call after normalizing it: it drops a redundant `cd <cwd> &&` from Bash commands and maps legacy tool names (Task to Agent). The assistant fingerprint hashed the call's name and arguments, so the echo no longer matched the served call. That request and every later one in the conversation recorded unresolved_parent, and the fail-closed receipt masked the rollout. In an OpenCode + Claude Code SWE run, nearly every Claude Code rollout was poisoned this way. A tool call with a call id is now identified by that id alone (FINGERPRINT_VERSION 4). The backend issues the id and the harness echoes it verbatim; the name and arguments are what the harness executed. Calls without an id keep name and arguments as identity. conversation_digest still covers echoed arguments, so an earlier turn rewritten between two requests still fails context verification, and token_in splicing still trains the tokens the model produced. A reply that adds no model-authored content (reasoning only) left its request's fingerprint unchanged and was indexed under it, so every request continuing the previous turn became ambiguous. Claude Code drops such a reply and retries with a nudge. These calls are no longer lookup candidates (their ledger rows carry no fingerprint), and the ledger now verifies each candidate's context before counting candidates, as RolloutLineage.resolve_node already did. Replaying a recorded live Claude Code session (33 requests, main agent and 4 subagents) through the resolver: 4 unresolved calls before, 0 after. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tugrul Konuk <tkonuk@nvidia.com>
Contributor
|
@ertkonuk Could you rebase onto main to resolve the conflicts and add a short PR summary and validation notes? |
cmunley1
reviewed
Oct 15, 2026
| return continuation | ||
|
|
||
|
|
||
| def stamp_continuation(entry: TokenEntry, request_items: list[dict]) -> TokenEntry: |
Contributor
There was a problem hiding this comment.
should stamp_continuation use _continuation_key too? the NemoRL TQ capture ledger paths (record, _record) skip reasoning-only replies now, but the Gym-native TokenSink path still indexes them it seems
This was referenced Oct 22, 2026
This branch has not been deployed
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.
What does this PR do?
Validation
Rollouts
Compatibility and benchmark impact
Checklist
pre-commit run --all-files) (so CI lint/format checks pass).git commit -s) (so the DCO check passes).