feat: add optional ACP semantic edges - #2449
Conversation
3687c7f to
34e9387
Compare
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This change adds a new ACP semantic-edge protocol and serialized trace-graph surface, wiring request headers, retry resolution, cycle validation, and close-time metadata through interception and harness execution. It also changes the default RLM pin/install cache and provider idempotency-header handling, giving the PR a broader runtime and compatibility impact than a small isolated option. You can add or adjust custom eligibility rules. Learn more. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 4bf8f0b. Configure here.
mikasenghaas
left a comment
There was a problem hiding this comment.
nice this looks quite clean indeed. i think one thing we need to make super clear in the api itself is that the difference between
- vf-owned message node linking (rn we have a list of nodes and use indices to point ot parents and link model calls to nodes)
- harness-owned (via acp) linking, rn via
request_id
it shoud be ultra clear which ids/indices come from vf and which are advertised by the harness

Summary
Adds an optional, versioned ACP extension for semantic relationships between model requests, while leaving Verifiers' existing exact-prefix training graph unchanged.
SemanticEdgeSetpayloads underai.prime.acp/semantic-edges-v1ModelCall.acp.request_idMessageNode.semantic_parentsmainat verified merge commit4a63696from #153This is one message-node DAG with physical and semantic parent links, not a separate lineage graph.
Data model
TraceMessageNode.parentMessageNode.semantic_parentsParentLinks. The list supports multiple parents, incremental append, and stable wire order.ParentLink{node, type}, wherenodeis a Verifiers-owned index intoTrace.nodes.Branchparentlinks; not an agent or session identity.ACPInfo.request_idFor example, a main-agent request that consumes two subagent results is stored directly on its committed node:
The initial Nano-RLM vocabulary is:
These labels are conventions, not a closed enum. Unknown labels such as
critic_reviewor namespaced relations such asvendor:reviewsurvive validation, application, serialization, and restoration.Transport and incremental application
X-ACP-Model-Request-IDon the model request.ModelCall.acp.request_id.Trace.add_semantic_edgesmaps each newly advertised source and target request to its last committed sampled node, rejects duplicate or cyclic additions atomically, and appends aParentLinkto the target node.WireTracepersists semantic parents beside the message nodes used by rollout viewers and trainers.continuationpreserves same-agent causality when retokenization, dropped reasoning, or another prompt rewrite breaks physical prefix reuse. Acompactionedge replacescontinuationfor that transition.Idempotency-Keyremains independent and provider-facing. Harnesses that omit the header and ACP metadata behave exactly as before, withModelCall.acp=Noneandsemantic_parents=[].Validation
WireTraceround-trips on the request-edge wire format