Skip to content

feat(session): ground recovery in the platform harness - #526

Open
yordis wants to merge 13 commits into
mainfrom
yordis/claude-session-types
Open

feat(session): ground recovery in the platform harness#526
yordis wants to merge 13 commits into
mainfrom
yordis/claude-session-types

Conversation

@yordis

@yordis yordis commented Aug 4, 2026

Copy link
Copy Markdown
Member
  • Keep the core Session contract independent from third-party transcript and resume semantics.
  • Make authoritative event replay the recovery baseline while allowing safe checkpoint acceleration.
  • Preserve the Claude SDK findings as comparative evidence without making them platform dependencies.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI lite review requested due to automatic review settings August 4, 2026 04:12
@cursor

cursor Bot commented Aug 4, 2026

Copy link
Copy Markdown

PR Summary

Medium Risk
Large draft ADR edits define harness recovery, checkpoint admission, and v1 implementation boundaries that future runtime and proto work must follow; no application code in the diff, but design mistakes here are expensive to unwind.

Overview
Normative session execution shifts in draft ADR#0031 and ADR#0035: the platform-managed harness is the only built-in v1 implementation; Codex, Claude Code, and OpenClaw are future registered_extension edge cases, not core Session schema. Terminology moves from adapter/native to harness (e.g. effective_harness_configuration_digest, harness contract).

Recovery is explicitly layered. Four durable concepts must not be conflated: authoritative event log, advisory aggregate snapshot, opaque harness recovery checkpoint (wire Checkpoint), and read-side consumer checkpoint. Harness checkpoints are an optimization only: admission requires sealing, digest verification, capture attestation over effective history through covers_through, and restoration replays the tail after the cut; rewind, redaction, or artifact erasure at or before the cut disqualifies the checkpoint. Invalid or missing checkpoint evidence falls back to full event replay and a fresh execution attempt.

ADR#0035 aligns the session store with that model: CheckpointProduced fold rules (first evidence per checkpoint_id), stricter StartExecutionAttempt eligibility, split between validate_session_event (single-event shape) and decide/evolve (history-dependent joins), plus orphan commuting-fact fold behavior. The Checkpoint glossary disambiguates read-side position from harness recovery state.

Tooling and research: ADR link lint ignores .context; session-store corpus adds stage-two comparison workflow, backlog, nested products/{slug}/ layout, and new artifacts (e.g. Aider dossier and vs-session-events).

Reviewed by Cursor Bugbot for commit 40fdaaf. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

The PR makes the platform-managed harness the normative v1 implementation, formalizes checkpoint admission and restoration, removes resume_cursor, and expands session-store research with product dossiers, comparisons, evidence rules, and synthesis updates.

Changes

Harness and session recovery

Layer / File(s) Summary
Platform harness execution and implementation contracts
docs/adr/0031-agent-implementation-and-session-plan.md
Defines platform-harness and registered-extension arms, effective harness configuration, artifact attestation, implementation compatibility, and execution-boundary rules.
Checkpoint authority and recovery rules
docs/adr/0035-session-store-decider-aggregate.md, docs/glossary/checkpoint.md
Separates event-log, aggregate-snapshot, harness-recovery-checkpoint, and read-side-checkpoint authority. Defines evidence validation, restoration, tail replay, invalidation, and authoritative-replay fallback.
Checkpoint protobuf and validation
proto/trogonai/session/sessions/v1alpha1/*, rsworkspace/crates/platform/trogonai-proto/src/session/sessions/*
Adds checkpoint attestation and effective-history digests, reserves resume_cursor, validates restored plan-digest matching, and updates fixtures and tests.
Research methodology and corpus synthesis
docs/research/session-store/RESEARCH_PROMPT.md, docs/research/session-store/RESEARCH_PROMPT_COMPARISON.md, docs/research/session-store/backlog.md, docs/research/session-store/index.md, docs/research/session-store/synthesis.md
Defines evidence, citation, payload-inspection, comparison, maturity-scoring, backlog, corpus-status, and synthesis rules.
Product session-store dossiers and comparisons
docs/research/session-store/products/*
Adds or updates product dossiers and comparisons covering persistence models, schemas, replay, checkpoints, compaction, delegation, retention, interoperability, and open ADR questions.
Research references and lint support
docs/research/acp/products/*, .config/mise/tasks/github-actions/lint-adr-refs
Updates directory-based dossier links and excludes .context from ADR-reference scanning.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested labels: buf:skip:breaking

Suggested reviewers: copilot

Poem

A rabbit checks each sealed-up byte,
While harnesses hop through replayed night.
Digests align, old cursors rest,
New dossiers map each storage nest.
The event-log trail stays clear and bright.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 70.37% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: grounding session recovery in the platform harness.
Description check ✅ Passed The description directly matches the session recovery, event replay, checkpoint, and dependency-boundary changes.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch yordis/claude-session-types

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR tightens the Session recovery/restore contract by removing third-party resume semantics from ExecutionAttemptStarted and making event replay + digest-coupled checkpoint restoration the baseline, while expanding the internal research/docs around session-store recovery boundaries.

Changes:

  • Removed resume_cursor from ExecutionAttemptStarted (proto + generated Rust + tests) and reserved the retired field number.
  • Added per-event validation ensuring a restored checkpoint’s session_execution_plan_digest matches the containing ExecutionAttemptStarted’s plan digest, plus a new regression test.
  • Updated ADR/glossary/research docs to sharpen the distinction between event logs, aggregate snapshots, harness recovery checkpoints, and read-side checkpoints; added a pinned Claude Agent SDK session-type snapshot doc.

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
rsworkspace/crates/platform/trogonai-proto/src/session/sessions/validate/tests.rs Removes resume_cursor from test fixtures and adds a plan-digest mismatch validation test for restored checkpoints.
rsworkspace/crates/platform/trogonai-proto/src/session/sessions/validate.rs Adds RestoredCheckpointPlanDigestMismatch and enforces per-event digest equality between restored checkpoints and the attempt event.
rsworkspace/crates/platform/trogonai-proto/src/session/sessions/codec/tests.rs Updates codec test fixtures to match the removed resume_cursor field.
rsworkspace/crates/platform/trogonai-proto/src/gen/trogonai.session.sessions.v1alpha1.execution_attempt_started.rs Regenerated type removing resume_cursor from the Rust surface and codec implementation.
rsworkspace/crates/platform/trogonai-proto/src/gen/trogonai.session.sessions.v1alpha1.execution_attempt_started.__view.rs Regenerated view/encode/serialize logic removing resume_cursor.
rsworkspace/crates/platform/trogonai-proto/src/gen/trogonai.session.sessions.v1alpha1.checkpoint.rs Updates generated docs to reflect per-event plan digest validation vs aggregate binding.
rsworkspace/crates/platform/trogonai-proto/src/gen/trogonai.session.sessions.v1alpha1.checkpoint.__view.rs Same doc clarification in the generated view file.
proto/trogonai/session/sessions/v1alpha1/execution_attempt_started.proto Removes resume_cursor and reserves tag/name for forward-compatibility.
proto/trogonai/session/sessions/v1alpha1/checkpoint.proto Clarifies checkpoint semantics and validation boundaries in comments.
docs/research/session-store/products/claude-agent-sdk.md Tightens language around Claude SessionStore being non-authoritative and links to the pinned type snapshot.
docs/research/session-store/products/claude-agent-sdk-session-types.md New pinned inspection snapshot of Claude Agent SDK session-related TypeScript surface and comparison.
docs/research/session-store/index.md Adds the new Claude session type snapshot to the research index.
docs/glossary/checkpoint.md Disambiguates read-side checkpoint vs aggregate snapshot vs protobuf Checkpoint.
docs/adr/0035-session-store-decider-aggregate.md Refines ADR terminology and validation-boundary ownership around checkpoints/snapshots/recovery.
docs/adr/0031-agent-implementation-and-session-plan.md Updates ownership model to emphasize platform harness as v1 baseline and separates recovery artifacts/positions.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread rsworkspace/crates/platform/trogonai-proto/src/session/sessions/validate.rs Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
docs/glossary/checkpoint.md (1)

9-16: 🗄️ Data Integrity & Integration | 🔵 Trivial | 💤 Low value

Point to ADR#0013 for the read-side checkpoint contract.

physical stream sequence and read-side checkpoint authority now come from ADR#0013, with ADR#0035 forwarding to it, not from ADR#0031. Update the referenced authority.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/glossary/checkpoint.md` around lines 9 - 16, Update the checkpoint
glossary entry’s ADR reference to point to ADR#0013 as the authority for the
read-side checkpoint contract, replacing the current ADR#0031 reference while
preserving the existing distinction from snapshots and protobuf checkpoints.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/adr/0031-agent-implementation-and-session-plan.md`:
- Around line 206-213: The ADR’s normative SessionExecutionPlan requirements
conflict with AgentConfiguration’s current model-selection contract and
ADR#0032’s unresolved ownership decision. Reconcile the AgentConfiguration
model-selection contract before treating SessionExecutionPlan as normative:
either expose typed primary and auxiliary ModelSelection values from
AgentConfiguration, or mark the plan fields and admission reads provisional
while explicitly defining their authoritative interim source.
- Around line 321-343: Define an opaque checkpoint admission proof for the
CheckpointProduced gate, such as a manifest, attestation, verifier, or recorded
replay evidence, that binds the sealed artifact to the producing
ExecutionAttempt, immutable SessionExecutionPlan digest, effective Session
history, covered platform ordinal, checkpoint format, and captured state. Update
the admission requirements around Checkpoint.covers_through so this proof
establishes semantic coverage and replay equivalence before CheckpointProduced
is recorded; unavailable or failed proof must reject the checkpoint.

In `@docs/adr/0035-session-store-decider-aggregate.md`:
- Around line 214-219: The ADR’s CheckpointProduced idempotency contract must
distinguish requests that share checkpoint_id and artifact bytes but differ in
other checkpoint evidence. Update the command matrix and event identity
description to derive the key from checkpoint_id plus a digest of the canonical
complete checkpoint evidence or request, ensuring conflicting later evidence is
retained while byte-identical redelivery still collapses.

---

Nitpick comments:
In `@docs/glossary/checkpoint.md`:
- Around line 9-16: Update the checkpoint glossary entry’s ADR reference to
point to ADR#0013 as the authority for the read-side checkpoint contract,
replacing the current ADR#0031 reference while preserving the existing
distinction from snapshots and protobuf checkpoints.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f77fe418-a6dd-4715-9d11-86fab65cebcc

📥 Commits

Reviewing files that changed from the base of the PR and between f6d3e5c and b9ae2c8.

⛔ Files ignored due to path filters (4)
  • rsworkspace/crates/platform/trogonai-proto/src/gen/trogonai.session.sessions.v1alpha1.checkpoint.__view.rs is excluded by !**/gen/**
  • rsworkspace/crates/platform/trogonai-proto/src/gen/trogonai.session.sessions.v1alpha1.checkpoint.rs is excluded by !**/gen/**
  • rsworkspace/crates/platform/trogonai-proto/src/gen/trogonai.session.sessions.v1alpha1.execution_attempt_started.__view.rs is excluded by !**/gen/**
  • rsworkspace/crates/platform/trogonai-proto/src/gen/trogonai.session.sessions.v1alpha1.execution_attempt_started.rs is excluded by !**/gen/**
📒 Files selected for processing (11)
  • docs/adr/0031-agent-implementation-and-session-plan.md
  • docs/adr/0035-session-store-decider-aggregate.md
  • docs/glossary/checkpoint.md
  • docs/research/session-store/index.md
  • docs/research/session-store/products/claude-agent-sdk-session-types.md
  • docs/research/session-store/products/claude-agent-sdk.md
  • proto/trogonai/session/sessions/v1alpha1/checkpoint.proto
  • proto/trogonai/session/sessions/v1alpha1/execution_attempt_started.proto
  • rsworkspace/crates/platform/trogonai-proto/src/session/sessions/codec/tests.rs
  • rsworkspace/crates/platform/trogonai-proto/src/session/sessions/validate.rs
  • rsworkspace/crates/platform/trogonai-proto/src/session/sessions/validate/tests.rs
💤 Files with no reviewable changes (1)
  • rsworkspace/crates/platform/trogonai-proto/src/session/sessions/codec/tests.rs

Comment thread docs/adr/0031-agent-implementation-and-session-plan.md
Comment thread docs/adr/0031-agent-implementation-and-session-plan.md
Comment thread docs/adr/0035-session-store-decider-aggregate.md
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

badge

Code Coverage Summary

Details
Filename                                                                                            Stmts    Miss  Cover    Missing
------------------------------------------------------------------------------------------------  -------  ------  -------  ----------------------------------------------------------------------------------------------------------------------------------------------------------------
crates/platform/trogon-gateway/src/source/linear/server.rs                                             83       0  100.00%
crates/platform/trogon-gateway/src/source/linear/signature.rs                                           8       1  87.50%   16
crates/platform/trogon-gateway/src/source/linear/config.rs                                              9       0  100.00%
crates/scheduler/trogon-scheduler/src/telemetry/trace.rs                                               20       0  100.00%
crates/scheduler/trogon-scheduler/src/telemetry/metrics.rs                                             27       0  100.00%
crates/platform/trogon-std/src/args.rs                                                                 12       9  25.00%   11-28
crates/platform/trogon-std/src/uuid.rs                                                                  3       0  100.00%
crates/platform/trogon-std/src/http.rs                                                                  8       0  100.00%
crates/platform/trogon-std/src/secret_string.rs                                                        13       0  100.00%
crates/platform/trogon-std/src/duration.rs                                                             19       0  100.00%
crates/platform/trogon-std/src/signal.rs                                                               22      12  45.45%   6-11, 18-25, 34
crates/platform/trogon-std/src/json.rs                                                                 23       0  100.00%
crates/acp/acp-nats/src/nats/subjects/stream.rs                                                        56       0  100.00%
crates/decider/trogon-decider-runtime/src/headers/header_value.rs                                      34       0  100.00%
crates/decider/trogon-decider-runtime/src/headers/header_map.rs                                        54       0  100.00%
crates/decider/trogon-decider-runtime/src/headers/header_name.rs                                       28       0  100.00%
crates/decider/trogon-decider-runtime/src/stream/stream_position.rs                                    26       0  100.00%
crates/decider/trogon-decider-runtime/src/stream/read_stream.rs                                         7       0  100.00%
crates/decider/trogon-decider-runtime/src/stream/append_stream.rs                                       5       0  100.00%
crates/acp/acp-nats-agent/src/connection.rs                                                           482       1  99.79%   726
crates/acp/acp-nats/src/nats/jsonrpc.rs                                                                51      11  78.43%   46, 54-55, 57-63, 81-83
crates/acp/acp-nats/src/nats/extensions.rs                                                              3       0  100.00%
crates/acp/acp-nats/src/nats/mod.rs                                                                    61      13  78.69%   22-33, 75
crates/acp/acp-nats/src/nats/parsing.rs                                                               123       0  100.00%
crates/platform/trogonai-proto/src/agents/agents/codec.rs                                              30       0  100.00%
crates/decider/trogon-decider-wit/src/lib.rs                                                           53       1  98.11%   35
crates/aauth/trogon-aauth-verify/src/mission.rs                                                        33       0  100.00%
crates/aauth/trogon-aauth-verify/src/challenge.rs                                                      77       0  100.00%
crates/aauth/trogon-aauth-verify/src/nats_pop.rs                                                      125       1  99.20%   313
crates/aauth/trogon-aauth-verify/src/test_support.rs                                                   86       0  100.00%
crates/aauth/trogon-aauth-verify/src/token.rs                                                         184       1  99.46%   181
crates/aauth/trogon-aauth-verify/src/replay.rs                                                         26       0  100.00%
crates/aauth/trogon-aauth-verify/src/time_source.rs                                                    10       0  100.00%
crates/aauth/trogon-aauth-verify/src/upstream.rs                                                       20       0  100.00%
crates/aauth/trogon-aauth-verify/src/http_pop.rs                                                      268       0  100.00%
crates/aauth/trogon-aauth-verify/src/delegation.rs                                                     53       0  100.00%
crates/aauth/trogon-aauth-verify/src/jkt.rs                                                            33       0  100.00%
crates/aauth/trogon-aauth-verify/src/jwks_cache.rs                                                     39       0  100.00%
crates/aauth/trogon-aauth-verify/src/jwks.rs                                                           15       0  100.00%
crates/aauth/trogon-aauth-verify/src/jwks_http.rs                                                     144       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/push/delete.rs                                            15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/push/set.rs                                               12       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/push/list.rs                                              15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/push/get.rs                                               12       0  100.00%
crates/mcp/mcp-nats/src/client.rs                                                                      12       0  100.00%
crates/mcp/mcp-nats/src/transport.rs                                                                  224      12  94.64%   246, 258-260, 345-346, 353-354, 357-358, 401-402
crates/mcp/mcp-nats/src/mcp_peer_id.rs                                                                 15       0  100.00%
crates/mcp/mcp-nats/src/mcp_prefix.rs                                                                  15       0  100.00%
crates/mcp/mcp-nats/src/mcp_transport_headers.rs                                                       53       0  100.00%
crates/mcp/mcp-nats/src/config.rs                                                                      59       0  100.00%
crates/mcp/mcp-nats/src/jsonrpc.rs                                                                      5       0  100.00%
crates/mcp/mcp-nats/src/server.rs                                                                      12       0  100.00%
crates/mcp/mcp-nats/src/wire.rs                                                                        40       1  97.50%   49
crates/decider/trogon-decider-runtime/src/event/stream_event.rs                                         8       0  100.00%
crates/decider/trogon-decider-runtime/src/event/event_id.rs                                            32       0  100.00%
crates/decider/trogon-decider-runtime/src/event/event_identity.rs                                       3       0  100.00%
crates/acp/acp-nats/src/boundary/abort_on_drop.rs                                                      19       0  100.00%
crates/acp/acp-nats/src/boundary/connect_agent_boundary.rs                                            128       0  100.00%
crates/acp/acp-nats/src/boundary/eof_signal_reader.rs                                                  20       0  100.00%
crates/acp/acp-nats/src/boundary/connection_client.rs                                                  29       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/cancel.rs                                               15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/set_config_option.rs                                    15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/set_mode.rs                                             15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/load.rs                                                 15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/close.rs                                                15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/prompt.rs                                               15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/delete.rs                                               15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/fork.rs                                                 15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/resume.rs                                               15       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/snapshot_type.rs                                    42       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/read_snapshot.rs                                     3       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/mod.rs                                               3       0  100.00%
crates/platform/trogon-std/src/dirs/system.rs                                                          39       0  100.00%
crates/platform/trogon-std/src/dirs/fixed.rs                                                           32       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/codec.rs                        318      17  94.65%   340-341, 361-362, 373-377, 405-406, 412-413, 442-443, 480, 485-487
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/failure.rs                       27       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/record.rs                         6       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/store.rs                        142      16  88.73%   103, 121, 125, 132, 221-227, 276-280
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/go_duration.rs                40       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/reconcile.rs                 303      13  95.71%   244-253, 318-320
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/request.rs                   221       2  99.10%   255, 260
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/recorded_events.rs           238      12  94.96%   196-201, 238, 246, 267, 287, 293, 299, 332, 342, 360, 444
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/rrule_wakeup_payload.rs       35       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject.rs           34       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/all_client.rs                                       9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/all_agent_ext.rs                                    9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/global_all.rs                                       9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/one_agent.rs                                       15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/one_session.rs                                     12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/one_client.rs                                      15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/prompt_wildcard.rs                                  9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/all_session.rs                                      9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/all_agent.rs                                        9       0  100.00%
crates/platform/trogon-std/src/time/mock.rs                                                            32       0  100.00%
crates/platform/trogon-std/src/time/system.rs                                                           9       0  100.00%
crates/platform/trogon-gateway/src/source/twitter/config.rs                                             9       0  100.00%
crates/platform/trogon-gateway/src/source/twitter/signature.rs                                         16       0  100.00%
crates/platform/trogon-gateway/src/source/twitter/server.rs                                           144       0  100.00%
crates/scheduler/trogon-scheduler/src/projections/schedules/twin.rs                                    53       0  100.00%
crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs                                    176       3  98.30%   702-704
crates/platform/trogon-nats/src/telemetry/messaging.rs                                                 37       0  100.00%
crates/a2a/a2a-nats-http/src/handlers/mod.rs                                                          185      12  93.51%   68, 88-91, 121, 155, 169-172, 185
crates/platform/trogon-gateway/src/source/sentry/sentry_client_secret.rs                                9       0  100.00%
crates/platform/trogon-gateway/src/source/sentry/server.rs                                             69       0  100.00%
crates/platform/trogon-gateway/src/source/sentry/signature.rs                                           6       0  100.00%
crates/ard/ard-nats/src/memory_catalog_store.rs                                                        32       0  100.00%
crates/ard/ard-nats/src/catalog_index.rs                                                               82       2  97.56%   37, 104
crates/ard/ard-nats/src/catalog_event.rs                                                               71       0  100.00%
crates/ard/ard-nats/src/catalog_subject.rs                                                             14       3  78.57%   16-18
crates/ard/ard-nats/src/store.rs                                                                        3       0  100.00%
crates/a2a/a2a-nats-http/src/runtime.rs                                                                 8       8  0.00%    54-124
crates/a2a/a2a-nats-http/src/headers.rs                                                               129       1  99.22%   154
crates/a2a/a2a-nats-http/src/rest.rs                                                                  316       8  97.47%   123-126, 282-285
crates/a2a/a2a-nats-http/src/main.rs                                                                    1       0  100.00%
crates/a2a/a2a-nats-http/src/router.rs                                                                 55      13  76.36%   60-63, 69-79
crates/a2a/a2a-nats-http/src/sse.rs                                                                    44      27  38.64%   15-51, 61-62, 65-68
crates/decider/trogon-decider-guest-macros/src/lib.rs                                                 136      28  79.41%   14-19, 29-40, 116-119, 437-446, 450
crates/platform/trogon-std/src/env/system.rs                                                           12       0  100.00%
crates/platform/trogon-std/src/env/read_env.rs                                                          3       0  100.00%
crates/platform/trogon-std/src/env/in_memory.rs                                                        30       0  100.00%
crates/platform/trogon-std/src/env/enumerate_env.rs                                                     6       0  100.00%
crates/platform/trogonai-proto/src/convert.rs                                                          53       0  100.00%
crates/platform/trogonai-proto/src/lib.rs                                                              20       0  100.00%
crates/platform/trogonai-proto/src/codec.rs                                                            16       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/principal.rs                                                9       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/allow_all.rs                                                2       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier1_declarative/bundle.rs                                          57       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier1_declarative/time_predicate.rs                                 118       2  98.31%   103, 125
crates/a2a/a2a-gateway/src/policy/tier1_declarative/loader.rs                                          85       9  89.41%   93-95, 97-99, 124-126
crates/a2a/a2a-gateway/src/policy/tier1_declarative/evaluator.rs                                      158      13  91.77%   26-28, 146, 195-197, 267-271, 294
crates/a2a/a2a-auth-callout/src/jwt/user_jwt_subject.rs                                                12       0  100.00%
crates/a2a/a2a-auth-callout/src/jwt/mod.rs                                                            232       0  100.00%
crates/a2a/a2a-auth-callout/src/jwt/nats_permission_claims.rs                                          10       0  100.00%
crates/a2a/a2a-auth-callout/src/jwt/nats_user_jwt.rs                                                  187       1  99.47%   129
crates/aauth/trogon-aauth-person/src/http/mod.rs                                                      213       0  100.00%
crates/platform/trogon-identity-types/src/act_chain.rs                                                 13       0  100.00%
crates/platform/trogon-std/src/fs/mem.rs                                                               85       0  100.00%
crates/platform/trogon-std/src/fs/system.rs                                                            15       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/module.rs                                               71       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/domain_error_detail.rs                                   7       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/module_name.rs                                          34       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/module_version.rs                                       34       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/execution.rs                                           756      31  95.90%   134, 556, 728, 775-779, 827-831, 870-874, 933, 938-942, 1014-1018, 1106, 1127
crates/decider/trogon-decider-wasm-runtime/src/command_type.rs                                         31       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/opaque_snapshot.rs                                      18       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/registry.rs                                             94       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/command_spec.rs                                         12       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/engine.rs                                              145       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/test_doubles.rs                                         73       5  93.15%   64, 85-87, 90
crates/decider/trogon-decider-wasm-runtime/src/snapshot_id.rs                                          18       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/test_fixture.rs                                          7       0  100.00%
crates/platform/jsonrpc-nats/src/transport.rs                                                         102       4  96.08%   26, 30-31, 118
crates/platform/jsonrpc-nats/src/id.rs                                                                 62      20  67.74%   44-61, 81-82, 84-85, 91-92, 98-99, 112
crates/platform/jsonrpc-nats/src/message.rs                                                            11       3  72.73%   37-39
crates/platform/trogonai-proto/src/scheduler/schedules/codec.rs                                        57       0  100.00%
crates/a2a/a2a-bridge/src/auth/callout_mint.rs                                                         49       1  97.96%   94
crates/scheduler/trogon-scheduler/src/queries/read_model/schedule.rs                                   15       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/read_model/message.rs                                    77       0  100.00%
crates/scheduler/trogon-scheduler/src/mocks.rs                                                        413      51  87.65%   80, 120-123, 272, 289-292, 334-336, 350-354, 363, 416-420, 475-476, 480, 498-502, 519-522, 565-585
crates/scheduler/trogon-scheduler/src/config.rs                                                        27       0  100.00%
crates/scheduler/trogon-scheduler/src/error.rs                                                         83      12  85.54%   131-133, 152-154, 159-161, 176-180
crates/scheduler/trogon-scheduler/src/nats.rs                                                          10       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/stream.rs                                                        50       0  100.00%
crates/ard/ard-registry/src/bin/ard-registry-demo/main.rs                                              64      20  68.75%   13-35
crates/a2a/a2a-nats-stdio/src/io_loop.rs                                                               49       0  100.00%
crates/a2a/a2a-nats-stdio/src/main.rs                                                                   1       0  100.00%
crates/a2a/a2a-nats-stdio/src/dispatch.rs                                                             212       8  96.23%   119, 122-124, 232, 235-237
crates/a2a/a2a-nats-stdio/src/wire.rs                                                                  22       0  100.00%
crates/a2a/a2a-nats-stdio/src/runtime.rs                                                               21       0  100.00%
crates/platform/trogon-gateway/src/source/incidentio/incidentio_signing_secret.rs                      22       0  100.00%
crates/platform/trogon-gateway/src/source/incidentio/server.rs                                         72       0  100.00%
crates/platform/trogon-gateway/src/source/incidentio/signature.rs                                       8       0  100.00%
crates/platform/trogon-gateway/src/source/incidentio/incidentio_event_type.rs                          20       0  100.00%
crates/a2a/a2a-bridge/src/nats_transport_harness.rs                                                    42       0  100.00%
crates/a2a/a2a-bridge/src/outbound.rs                                                                  70       7  90.00%   126, 197-209
crates/a2a/a2a-bridge/src/inbound.rs                                                                  326      91  72.09%   114-118, 141-143, 190-230, 291-416, 468-470, 481, 579, 630-645, 686-691
crates/a2a/a2a-bridge/src/auth.rs                                                                      47      15  68.09%   78-99, 148
crates/a2a/a2a-bridge/src/identity.rs                                                                  63       0  100.00%
crates/a2a/a2a-bridge/src/main.rs                                                                       1       1  0.00%    199
crates/a2a/a2a-gateway/src/policy/per_skill.rs                                                         87       0  100.00%
crates/a2a/a2a-gateway/src/policy/error.rs                                                             16       0  100.00%
crates/a2a/a2a-gateway/src/policy/spicedb_tier1.rs                                                    157      13  91.72%   226-228, 381, 451, 453-461
crates/a2a/a2a-gateway/src/policy/wasmtime_substrate.rs                                                31       0  100.00%
crates/platform/trogon-jwks-publisher/src/provider.rs                                                 118       0  100.00%
crates/platform/trogon-jwks-publisher/src/publisher.rs                                                 92       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/subscriptions/task_all_events.rs                                  9       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/subscriptions/task_one_events.rs                                 12       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/subscriptions/agent_all.rs                                       12       0  100.00%
crates/a2a/a2a-nats/src/push/push_notification_config.rs                                                6       0  100.00%
crates/a2a/a2a-nats/src/push/push_payload.rs                                                           18       0  100.00%
crates/a2a/a2a-nats/src/push/dlq.rs                                                                    56       0  100.00%
crates/a2a/a2a-nats/src/push/dispatch_error.rs                                                         24       0  100.00%
crates/a2a/a2a-nats/src/push/status_transition_id.rs                                                   15       0  100.00%
crates/a2a/a2a-nats/src/push/push_notification_config_id.rs                                            17       0  100.00%
crates/a2a/a2a-nats/src/push/target.rs                                                                 19       0  100.00%
crates/a2a/a2a-nats/src/push/idempotency_key_header.rs                                                 16       0  100.00%
crates/a2a/a2a-nats/src/push/delivery_semantics.rs                                                     98       0  100.00%
crates/a2a/a2a-nats/src/push/nats_push_subject.rs                                                      12       0  100.00%
crates/a2a/a2a-nats/src/push/push_idempotency_key.rs                                                   43       0  100.00%
crates/a2a/a2a-nats/src/push/terminal_push_task_state.rs                                               17       0  100.00%
crates/a2a/a2a-nats/src/push/dlq_dedup.rs                                                              51       1  98.04%   79
crates/a2a/a2a-nats/src/push/caller_id.rs                                                              41       0  100.00%
crates/a2a/a2a-nats/src/push/push_delivery_semantics_registry.rs                                       17       0  100.00%
crates/a2a/a2a-nats/src/push/authentication_header.rs                                                  31       0  100.00%
crates/a2a/a2a-nats/src/push/push_notification_target.rs                                               32       0  100.00%
crates/decider/trogon-decider-runtime/src/memory.rs                                                   104       5  95.19%   77-82
crates/decider/trogon-decider-runtime/src/replay_limit.rs                                              26       0  100.00%
crates/decider/trogon-decider-runtime/src/execution.rs                                                626       3  99.52%   73, 187-188
crates/platform/trogon-gateway/src/source/notion/signature.rs                                           9       0  100.00%
crates/platform/trogon-gateway/src/source/notion/notion_event_type.rs                                  20       0  100.00%
crates/platform/trogon-gateway/src/source/notion/server.rs                                            120       4  96.67%   116-117, 136-137
crates/platform/trogon-gateway/src/source/notion/verification_token.rs                                 46       0  100.00%
crates/platform/trogon-gateway/src/source/notion/notion_verification_token.rs                           9       0  100.00%
crates/a2a/a2a-redaction/src/signed_bundle/digest.rs                                                   26       0  100.00%
crates/a2a/a2a-redaction/src/signed_bundle/verify.rs                                                   64       2  96.88%   86-87
crates/a2a/a2a-redaction/src/signed_bundle/manifest.rs                                                 56       1  98.21%   82
crates/a2a/a2a-redaction/src/signed_bundle/signature.rs                                                30       3  90.00%   37-39
crates/a2a/a2a-redaction/src/signed_bundle/public_key.rs                                               36       2  94.44%   44-45
crates/aauth/trogon-aauth-sdk/src/capabilities.rs                                                       7       0  100.00%
crates/aauth/trogon-aauth-sdk/src/signer.rs                                                            91       0  100.00%
crates/aauth/trogon-aauth-sdk/src/lib.rs                                                                3       0  100.00%
crates/aauth/trogon-aauth-sdk/src/subagent.rs                                                          34       0  100.00%
crates/aauth/trogon-aauth-sdk/src/verify_response.rs                                                   70       0  100.00%
crates/aauth/trogon-aauth-sdk/src/delegation.rs                                                        15       0  100.00%
crates/mcp/mcp-nats/src/nats/mod.rs                                                                    23       0  100.00%
crates/mcp/mcp-nats/src/nats/parsing.rs                                                                54       1  98.15%   13
crates/decider/trogon-decider-runtime/src/snapshot/codec/encoded_snapshot.rs                           44       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_encode_error.rs                      16       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_envelope_encode_error.rs              3       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_envelope_decode_error.rs              6       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_decode_error.rs                      19       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_payload_decode.rs                     3       0  100.00%
crates/scheduler/trogon-scheduler/src/commands/record_schedule_occurrence.rs                          113       1  99.12%   182
crates/scheduler/trogon-scheduler/src/commands/schedule_next_occurrence.rs                             74       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/ext.rs                                                     9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/providers_disable.rs                                       6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/authenticate.rs                                            6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/session_new.rs                                             6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/providers_set.rs                                           6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/session_list.rs                                            6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/ext_notify.rs                                              9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/logout.rs                                                  6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/providers_list.rs                                          6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/initialize.rs                                              6       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier2_cel/bundle.rs                                                 120      26  78.33%   70-72, 74-76, 86, 92, 111-113, 123-127, 158, 162-164, 166-168, 171, 178, 181
crates/a2a/a2a-gateway/src/policy/tier2_cel/evaluator.rs                                              138       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier2_cel/compiler.rs                                                25       3  88.00%   61-63
crates/aauth/trogon-aauth-sdk/src/exchange/client.rs                                                  283       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/core.rs                                                    138       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/mod.rs                                                      17       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/challenge.rs                                                50       0  100.00%
crates/acp/acp-nats-server/src/compat.rs                                                              174       0  100.00%
crates/acp/acp-nats-server/src/component.rs                                                            70       0  100.00%
crates/acp/acp-nats-server/src/config.rs                                                               39       0  100.00%
crates/acp/acp-nats-server/src/main.rs                                                                 31       1  96.77%   81
crates/platform/trogon-gateway/src/http.rs                                                             13       0  100.00%
crates/platform/trogon-gateway/src/source_plugin.rs                                                   288       3  98.96%   83, 140-141
crates/platform/trogon-gateway/src/main.rs                                                             26       0  100.00%
crates/platform/trogon-gateway/src/source_integration_id.rs                                            28       2  92.86%   58, 60
crates/platform/trogon-gateway/src/source_status.rs                                                    12       0  100.00%
crates/platform/trogon-gateway/src/streams.rs                                                           7       0  100.00%
crates/platform/trogon-gateway/src/config.rs                                                         1198      32  97.33%   80, 724, 891, 1038, 1041, 1050, 1136-1143, 1221, 1224, 1233, 1292, 1295, 1379, 1382, 1391, 1456, 1459, 1536, 1539, 1548, 1624, 1627, 1641, 1700, 1703, 2013-2015
crates/a2a/a2a-auth-callout/src/wire/server_auth_request_claims.rs                                    100       4  96.00%   24-26, 127
crates/a2a/a2a-auth-callout/src/wire/bridge_adapter.rs                                                 73       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/test_encode.rs                                                    59       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/xkey_public.rs                                                    23       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/callout_auth_response_claims.rs                                   54       3  94.44%   70-72
crates/a2a/a2a-auth-callout/src/wire/server_auth_request_envelope.rs                                   68       1  98.53%   64
crates/a2a/a2a-auth-callout/src/wire/nkey_seed.rs                                                      20       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/wire_codec.rs                                                     58       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/nkey_public.rs                                                    83       3  96.39%   102, 118-119
crates/acp/acp-nats/src/acp_prefix.rs                                                                  13       0  100.00%
crates/acp/acp-nats/src/in_flight_slot_guard.rs                                                         9       0  100.00%
crates/acp/acp-nats/src/req_id.rs                                                                      21       0  100.00%
crates/acp/acp-nats/src/wire.rs                                                                        80      14  82.50%   38, 46-60, 103
crates/acp/acp-nats/src/client_proxy.rs                                                                67       1  98.51%   57
crates/acp/acp-nats/src/agent_handler.rs                                                               28       0  100.00%
crates/acp/acp-nats/src/lib.rs                                                                         11       0  100.00%
crates/acp/acp-nats/src/error.rs                                                                       31       0  100.00%
crates/acp/acp-nats/src/ext_method_name.rs                                                             18       0  100.00%
crates/acp/acp-nats/src/config.rs                                                                      84       0  100.00%
crates/acp/acp-nats/src/pending_prompt_waiters.rs                                                      68       0  100.00%
crates/acp/acp-nats/src/session_id.rs                                                                  21       0  100.00%
crates/acp/acp-nats/src/client_handler.rs                                                              22       0  100.00%
crates/platform/trogon-identity-types/src/aauth/mission.rs                                             33       0  100.00%
crates/platform/trogon-identity-types/src/aauth/error.rs                                               14       0  100.00%
crates/platform/trogon-identity-types/src/aauth/person_server.rs                                       23       0  100.00%
crates/platform/trogon-identity-types/src/aauth/headers.rs                                             47       0  100.00%
crates/platform/trogon-identity-types/src/aauth/login.rs                                               78       0  100.00%
crates/platform/trogon-identity-types/src/aauth/mod.rs                                                 69       0  100.00%
crates/decider/trogon-decider-sim/src/scenario.rs                                                     189      12  93.65%   352-354, 366-374, 504
crates/decider/trogon-decider-sim/src/ir.rs                                                           113      11  90.27%   212-214, 235, 251-253, 265-267, 283
crates/decider/trogon-decider-sim/src/fixture.rs                                                       18       2  88.89%   33-35
crates/decider/trogon-decider-sim/src/parity.rs                                                        66       6  90.91%   91-93, 95-97
crates/decider/trogon-decider-sim/src/import_check.rs                                                  52       4  92.31%   81-83, 103
crates/decider/trogon-decider-sim/src/native.rs                                                        81       2  97.53%   196, 214
crates/decider/trogon-decider-sim/src/session.rs                                                       23       4  82.61%   47-55
crates/decider/trogon-decider-sim/src/host.rs                                                          69       0  100.00%
crates/decider/trogon-decider/src/event/codec/event_decode.rs                                          13       0  100.00%
crates/decider/trogon-decider/src/event/codec/event_payload_error.rs                                    5       0  100.00%
crates/acp/acp-nats-stdio/src/main.rs                                                                  56       8  85.71%   58, 101-108, 120
crates/acp/acp-nats-stdio/src/config.rs                                                                15       0  100.00%
crates/mcp/mcp-nats-stdio/src/config.rs                                                                26       0  100.00%
crates/mcp/mcp-nats-stdio/src/main.rs                                                                  36       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/decode.rs                                                95       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/get_schedule.rs                                           3       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/schedule_id.rs                                           28       0  100.00%
crates/platform/trogon-nats/src/jetstream/claim_check.rs                                              104       3  97.12%   43-45
crates/platform/trogon-nats/src/jetstream/create_conflicts.rs                                          14       0  100.00%
crates/platform/trogon-nats/src/jetstream/traits.rs                                                    46      34  26.09%   181-239
crates/platform/trogon-nats/src/jetstream/claim_retention.rs                                           10       0  100.00%
crates/platform/trogon-nats/src/jetstream/object_store.rs                                              11       0  100.00%
crates/platform/trogon-nats/src/jetstream/mocks.rs                                                    941       1  99.89%   507
crates/platform/trogon-nats/src/jetstream/publish.rs                                                   30       0  100.00%
crates/platform/trogon-nats/src/jetstream/stream_max_age.rs                                             8       0  100.00%
crates/a2a/a2a-redaction/src/redactor.rs                                                               32       0  100.00%
crates/a2a/a2a-redaction/src/a2a_method.rs                                                             41       0  100.00%
crates/a2a/a2a-redaction/src/skill_id.rs                                                               26       0  100.00%
crates/a2a/a2a-redaction/src/tier3_sentinel.rs                                                         12       0  100.00%
crates/a2a/a2a-redaction/src/skill_manifest.rs                                                        310      14  95.48%   139, 169-171, 177, 184-188, 358-360, 452
crates/a2a/a2a-redaction/src/wasm_bundle_path.rs                                                       18       0  100.00%
crates/platform/trogon-std/src/telemetry/http.rs                                                       58       0  100.00%
crates/a2a/a2a-gateway/src/push_dlq_mirror.rs                                                         133      16  87.97%   155-159, 211, 216-219, 229, 254, 375-382
crates/a2a/a2a-gateway/src/gw_pull_backpressure.rs                                                    209       3  98.56%   487, 687, 700
crates/a2a/a2a-gateway/src/jwt_caller_identity.rs                                                     151       4  97.35%   164-168, 181-185
crates/a2a/a2a-gateway/src/agent_card_surface.rs                                                        3       0  100.00%
crates/a2a/a2a-gateway/src/aauth.rs                                                                   288       0  100.00%
crates/a2a/a2a-gateway/src/gw_ingress_stream.rs                                                       144       4  97.22%   312-314, 529
crates/a2a/a2a-gateway/src/main.rs                                                                      1       0  100.00%
crates/a2a/a2a-gateway/src/runtime.rs                                                                  11       0  100.00%
crates/a2a/a2a-gateway/src/audit_ingress.rs                                                           110       0  100.00%
crates/a2a/a2a-gateway/src/config.rs                                                                   57       0  100.00%
crates/a2a/a2a-gateway/src/lib.rs                                                                       3       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/pause_schedule.rs                                31       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/resume_schedule.rs                               34       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/create_schedule.rs                               32       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/state.rs                                         82       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/remove_schedule.rs                               30       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/proto_wire.rs                                   138       1  99.28%   231
crates/platform/trogon-gateway/src/source/slack/signature.rs                                           17       0  100.00%
crates/platform/trogon-gateway/src/source/slack/config.rs                                              32       0  100.00%
crates/platform/trogon-gateway/src/source/slack/socket_mode.rs                                        139       0  100.00%
crates/platform/trogon-gateway/src/source/slack/server.rs                                             272       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/update.rs                                              20       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/ext_ready.rs                                           12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/cancelled.rs                                           15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/prompt_response.rs                                     20       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/response.rs                                            20       0  100.00%
crates/platform/trogon-gateway/src/source/github/server.rs                                             50       0  100.00%
crates/platform/trogon-gateway/src/source/github/signature.rs                                           9       0  100.00%
crates/platform/trogon-gateway/src/source/github/config.rs                                              9       0  100.00%
crates/ard/ard-registry/src/search_request.rs                                                          32       1  96.88%   43
crates/ard/ard-registry/src/source_url.rs                                                              26       1  96.15%   30
crates/ard/ard-registry/src/lexical_rank.rs                                                            55       2  96.36%   15, 64
crates/ard/ard-registry/src/extract.rs                                                                 12       0  100.00%
crates/ard/ard-registry/src/explore_request.rs                                                         30       0  100.00%
crates/ard/ard-registry/src/filters.rs                                                                 31       0  100.00%
crates/ard/ard-registry/src/facet_field.rs                                                             13       0  100.00%
crates/ard/ard-registry/src/http_error.rs                                                              17       0  100.00%
crates/ard/ard-registry/src/registry.rs                                                               134       3  97.76%   78, 174, 183
crates/ard/ard-registry/src/list_agents_request.rs                                                     21       0  100.00%
crates/ard/ard-registry/src/registry_config.rs                                                         16       0  100.00%
crates/ard/ard-registry/src/router.rs                                                                  33       0  100.00%
crates/ard/ard-registry/src/page_token.rs                                                              14       0  100.00%
crates/ard/ard-registry/src/search_filters.rs                                                          28       0  100.00%
crates/platform/trogon-nats/src/connect.rs                                                             26       6  76.92%   42-47
crates/platform/trogon-nats/src/mocks.rs                                                              246       0  100.00%
crates/platform/trogon-nats/src/nats_token.rs                                                          56       0  100.00%
crates/platform/trogon-nats/src/messaging.rs                                                          168       2  98.81%   146, 156
crates/platform/trogon-nats/src/auth.rs                                                                45       0  100.00%
crates/platform/trogon-nats/src/client.rs                                                              22      22  0.00%    50-86
crates/platform/trogon-nats/src/test_support.rs                                                        26       0  100.00%
crates/platform/trogon-nats/src/server_info.rs                                                         21       3  85.71%   19-21
crates/platform/trogon-nats/src/token.rs                                                                6       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/progress.rs                                               12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/cancelled.rs                                              12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/initialized.rs                                            12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/roots_list_changed.rs                                     12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/create_message.rs                                         12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/ping.rs                                                    9       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/create_elicitation.rs                                     12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/list_roots.rs                                             12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_kill.rs                                      12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_release.rs                                   12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/elicitation_complete.rs                               12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/session_update.rs                                     12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_create.rs                                    12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/fs_read_text_file.rs                                  12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_output.rs                                    12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_wait_for_exit.rs                             12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/session_request_permission.rs                         12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/fs_write_text_file.rs                                 12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/elicitation_create.rs                                 12       0  100.00%
crates/platform/trogon-telemetry/src/resource_attribute.rs                                             13       0  100.00%
crates/platform/trogon-telemetry/src/trace.rs                                                          15       1  93.33%   24
crates/platform/trogon-telemetry/src/metric.rs                                                         18       1  94.44%   30
crates/platform/trogon-telemetry/src/lib.rs                                                           135      23  82.96%   119, 124, 129, 139-140, 146-164, 200, 203, 206, 212
crates/platform/trogon-telemetry/src/service_name.rs                                                   17       0  100.00%
crates/platform/trogon-telemetry/src/log.rs                                                            36       0  100.00%
crates/platform/trogonai-proto/src/session/sessions/validate.rs                                       689       0  100.00%
crates/platform/trogonai-proto/src/session/sessions/codec.rs                                          152       0  100.00%
crates/platform/trogon-gateway/src/source/gitlab/gitlab_signing_token.rs                               30       0  100.00%
crates/platform/trogon-gateway/src/source/gitlab/server.rs                                             78       0  100.00%
crates/platform/trogon-gateway/src/source/gitlab/signature.rs                                          13       0  100.00%
crates/a2a/a2a-auth-callout/src/credentials/oidc.rs                                                   188       4  97.87%   212-215
crates/a2a/a2a-auth-callout/src/credentials/api_key.rs                                                 46       1  97.83%   33
crates/a2a/a2a-auth-callout/src/credentials/mtls.rs                                                   153      13  91.50%   71-72, 168-169, 209-213, 216-219
crates/platform/trogon-gateway/src/source/standard_webhooks.rs                                        138       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_cancel.rs                                                         12       0  100.00%
crates/a2a/a2a-nats/src/server/push_get.rs                                                             12       0  100.00%
crates/a2a/a2a-nats/src/server/handler.rs                                                              39       0  100.00%
crates/a2a/a2a-nats/src/server/bridge.rs                                                               65       0  100.00%
crates/a2a/a2a-nats/src/server/message_stream.rs                                                       56       6  89.29%   154-156, 164-166
crates/a2a/a2a-nats/src/server/test_support.rs                                                         81      25  69.14%   134-159
crates/a2a/a2a-nats/src/server/tasks_resubscribe.rs                                                    12       0  100.00%
crates/a2a/a2a-nats/src/server/push_set.rs                                                             12       0  100.00%
crates/a2a/a2a-nats/src/server/message_send.rs                                                         15       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_get.rs                                                            12       0  100.00%
crates/a2a/a2a-nats/src/server/dispatch.rs                                                             33       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_list.rs                                                           12       0  100.00%
crates/a2a/a2a-nats/src/server/push_delete.rs                                                          12       0  100.00%
crates/a2a/a2a-nats/src/server/push_list.rs                                                            12       0  100.00%
crates/a2a/a2a-nats/src/server/wire.rs                                                                 34       4  88.24%   21-23, 30
crates/a2a/a2a-nats/src/server/agent_card.rs                                                           16       0  100.00%
crates/a2a/a2a-nats/src/client/wire.rs                                                                 13       0  100.00%
crates/a2a/a2a-nats/src/client/gateway_headers.rs                                                      19       0  100.00%
crates/a2a/a2a-nats/src/client/event_stream.rs                                                         76       0  100.00%
crates/a2a/a2a-nats/src/client/handle.rs                                                              218       0  100.00%
crates/a2a/a2a-nats/src/client/resubscribe.rs                                                          28       0  100.00%
crates/a2a/a2a-nats/src/client/streaming.rs                                                            73       0  100.00%
crates/a2a/a2a-nats/src/client/unary.rs                                                                39       1  97.44%   57
crates/a2a/a2a-nats/src/client/error.rs                                                                14       0  100.00%
crates/acp/acp-nats/src/telemetry/metrics.rs                                                           22       0  100.00%
crates/platform/trogon-gateway/src/source/discord/gateway.rs                                          116       1  99.14%   135
crates/platform/trogon-gateway/src/source/discord/config.rs                                            45       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/subject.rs                                                26       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/message_send.rs                                           15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/message_stream.rs                                         15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/card.rs                                                   12       0  100.00%
crates/a2a/a2a-identity-types/src/principal.rs                                                         16       0  100.00%
crates/a2a/a2a-identity-types/src/jwt.rs                                                               71       0  100.00%
crates/a2a/a2a-identity-types/src/caller.rs                                                            24       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/codec/twin.rs                    96       0  100.00%
crates/aauth/trogon-aauth-as/src/http.rs                                                               82       0  100.00%
crates/aauth/trogon-aauth-as/src/mint.rs                                                               56       0  100.00%
crates/aauth/trogon-aauth-as/src/trust.rs                                                              60       0  100.00%
crates/aauth/trogon-aauth-as/src/policy.rs                                                             38       0  100.00%
crates/aauth/trogon-aauth-as/src/test_support.rs                                                      122       0  100.00%
crates/aauth/trogon-aauth-as/src/pending.rs                                                            26       0  100.00%
crates/aauth/trogon-aauth-as/src/server.rs                                                            139       0  100.00%
crates/aauth/trogon-aauth-as/src/subagent.rs                                                           10       0  100.00%
crates/aauth/trogon-aauth-as/src/verify.rs                                                             96       0  100.00%
crates/decider/trogon-decider-nats/src/projector.rs                                                    88       3  96.59%   57-59
crates/decider/trogon-decider-nats/src/processor.rs                                                   109      17  84.40%   85-88, 217-220, 268-270, 277, 280-282, 308-310
crates/decider/trogon-decider-nats/src/snapshot_store.rs                                              467      48  89.72%   34-72, 260-262, 300-303, 413-419, 501, 637, 642, 738-740, 746-748, 782-783, 793-794, 813, 841-842
crates/decider/trogon-decider-nats/src/stream_store.rs                                                252      18  92.86%   66-68, 280, 308-309, 312, 328-332, 448-449, 507, 520-524
crates/decider/trogon-decider-nats/src/provision.rs                                                   100      22  78.00%   159, 164-172, 192, 197-208, 221
crates/decider/trogon-decider-nats/src/store.rs                                                        73      45  38.36%   100-104, 151-217
crates/a2a/a2a-nats/src/catalog/agent_view.rs                                                          47       0  100.00%
crates/a2a/a2a-nats/src/catalog/registrar.rs                                                           56       0  100.00%
crates/a2a/a2a-nats/src/catalog/spicedb_permission.rs                                                 178      17  90.45%   148-153, 172, 337-341, 370-371, 382-384, 391-393
crates/a2a/a2a-nats/src/catalog/store.rs                                                              117       0  100.00%
crates/a2a/a2a-nats/src/catalog/nats_kv.rs                                                              8       0  100.00%
crates/a2a/a2a-nats/src/catalog/watch.rs                                                               18       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/execution_schedules/mod.rs                   82       0  100.00%
crates/acp/acp-nats/src/jetstream/streams.rs                                                           18       0  100.00%
crates/acp/acp-nats/src/jetstream/ext_policy.rs                                                         3       0  100.00%
crates/acp/acp-nats/src/jetstream/consumers.rs                                                         41       0  100.00%
crates/acp/acp-nats/src/jetstream/provision.rs                                                         13       0  100.00%
crates/platform/trogon-service-config/src/lib.rs                                                       38       0  100.00%
crates/a2a/a2a-auth-callout/src/permissions.rs                                                         85       0  100.00%
crates/a2a/a2a-auth-callout/src/subscriber.rs                                                          96      96  0.00%    23-174
crates/a2a/a2a-auth-callout/src/error.rs                                                                3       0  100.00%
crates/a2a/a2a-auth-callout/src/dispatcher.rs                                                          34      13  61.76%   83-112
crates/a2a/a2a-auth-callout/src/denial_reason.rs                                                       15       0  100.00%
crates/a2a/a2a-auth-callout/src/main.rs                                                                 1       1  0.00%    223
crates/a2a/a2a-auth-callout/src/test_support.rs                                                        20      20  0.00%    16-36
crates/a2a/a2a-auth-callout/src/denial_category.rs                                                     29       0  100.00%
crates/a2a/a2a-auth-callout/src/denial_claims.rs                                                       68       0  100.00%
crates/a2a/a2a-auth-callout/src/account_resolver.rs                                                    31       0  100.00%
crates/a2a/a2a-auth-callout/src/caller_jwt_header.rs                                                   20       0  100.00%
crates/mcp/mcp-nats-server/src/allowed_host.rs                                                         52       0  100.00%
crates/mcp/mcp-nats-server/src/main.rs                                                                  1       1  0.00%    67
crates/mcp/mcp-nats-server/src/runtime.rs                                                             565     275  51.33%   189-202, 249-271, 284-290, 304, 308-427, 436-439, 443-515, 520, 524-541, 580-582, 600-601, 612, 645-649, 691-699, 704-739, 765-776
crates/mcp/mcp-nats-server/src/config.rs                                                               58       0  100.00%
crates/mcp/mcp-nats/src/telemetry/transport.rs                                                          6       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/jetstream.rs                                                   45       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/http.rs                                                        19       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/mod.rs                                                         16       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/composite.rs                                                   15       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/nats.rs                                                        37       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/worker/consumer.rs                           77       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/worker/processor.rs                         307      10  96.74%   441-442, 448, 503-505, 537-540
crates/scheduler/trogon-scheduler/src/processor/execution/worker/testkit.rs                           312       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/worker/dispatcher.rs                        281       1  99.64%   202
crates/a2a/a2a-nats/src/nats/subjects/agents/tasks/list.rs                                             15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/tasks/get.rs                                              15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/tasks/resubscribe.rs                                      15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/tasks/cancel.rs                                           15       0  100.00%
crates/a2a/a2a-redaction/src/bin/sign-bundle.rs                                                         1       1  0.00%    163
crates/acp/acp-nats/src/agent/ext_notification.rs                                                      12       0  100.00%
crates/acp/acp-nats/src/agent/bridge.rs                                                               138       4  97.10%   119-122
crates/acp/acp-nats/src/agent/initialize.rs                                                             6       0  100.00%
crates/acp/acp-nats/src/agent/js_request.rs                                                            73       6  91.78%   84-89
crates/acp/acp-nats/src/agent/providers_list.rs                                                         5       0  100.00%
crates/acp/acp-nats/src/agent/ext_method.rs                                                            12       0  100.00%
crates/acp/acp-nats/src/agent/list_sessions.rs                                                          5       0  100.00%
crates/acp/acp-nats/src/agent/prompt.rs                                                               156       7  95.51%   202-208
crates/acp/acp-nats/src/agent/providers_set.rs                                                          5       0  100.00%
crates/acp/acp-nats/src/agent/providers_disable.rs                                                      5       0  100.00%
crates/acp/acp-nats/src/agent/test_support.rs                                                         194       0  100.00%
crates/acp/acp-nats/src/agent/cancel.rs                                                                12       0  100.00%
crates/acp/acp-nats/src/agent/close_session.rs                                                         16       0  100.00%
crates/acp/acp-nats/src/agent/delete_session.rs                                                        16       0  100.00%
crates/acp/acp-nats/src/agent/fork_session.rs                                                          16       0  100.00%
crates/acp/acp-nats/src/agent/load_session.rs                                                          16       0  100.00%
crates/acp/acp-nats/src/agent/set_session_mode.rs                                                      16       0  100.00%
crates/acp/acp-nats/src/agent/logout.rs                                                                 5       0  100.00%
crates/acp/acp-nats/src/agent/authenticate.rs                                                           5       0  100.00%
crates/acp/acp-nats/src/agent/resume_session.rs                                                        16       0  100.00%
crates/acp/acp-nats/src/agent/new_session.rs                                                            5       0  100.00%
crates/acp/acp-nats/src/agent/rpc_call.rs                                                              23       0  100.00%
crates/acp/acp-nats/src/agent/set_session_config_option.rs                                             16       0  100.00%
crates/decider/trogon-decider-nats/src/stream_store/replay.rs                                         135      10  92.59%   114, 142, 160, 216-224
crates/mcp/mcp-nats/src/nats/subjects/subscriptions/one_client.rs                                       9       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/subscriptions/all_server.rs                                       6       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/subscriptions/all_client.rs                                       6       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/subscriptions/one_server.rs                                       9       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/set_logging_level.rs                                      12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/unsubscribe_resource.rs                                   12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/list_resource_templates.rs                                12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/cancel_task.rs                                            12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/list_prompts.rs                                           12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/list_resources.rs                                         12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/get_prompt.rs                                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/logging_message.rs                                        12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/read_resource.rs                                          12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/list_tools.rs                                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/subscribe_resource.rs                                     12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/update_task.rs                                            12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/subscriptions_acknowledged.rs                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/prompt_list_changed.rs                                    12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/tool_list_changed.rs                                      12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/progress.rs                                               12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/task_status.rs                                            12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/get_task.rs                                               12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/discover.rs                                               12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/complete.rs                                               12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/initialize.rs                                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/call_tool.rs                                              12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/resource_list_changed.rs                                  12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/cancelled.rs                                              12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/resource_updated.rs                                       12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/subscriptions_listen.rs                                   12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/ping.rs                                                    9       0  100.00%
crates/platform/trogon-gateway/src/source/microsoft_graph/client_state.rs                              14       0  100.00%
crates/platform/trogon-gateway/src/source/microsoft_graph/server.rs                                    73       0  100.00%
crates/scheduler/trogon-scheduler/src/commands/domain/recurrence.rs                                    78       1  98.72%   99
crates/scheduler/trogon-scheduler/src/commands/domain/schedule_occurrence_sequence.rs                  16       0  100.00%
crates/platform/jsonrpc-nats/src/codec/reconstruct.rs                                                  90       5  94.44%   56-59, 91
crates/platform/jsonrpc-nats/src/codec/encode.rs                                                       31       0  100.00%
crates/platform/jsonrpc-nats/src/codec/decode.rs                                                       57       0  100.00%
crates/platform/jsonrpc-nats/src/codec/canonical.rs                                                   169      22  86.98%   98, 101, 166-170, 194-196, 207, 212, 214, 231-232, 239, 243-250
crates/decider/trogon-decider/src/testing.rs                                                          284       0  100.00%
crates/decider/trogon-decider/src/events.rs                                                            49       0  100.00%
crates/decider/trogon-decider/src/act.rs                                                               62       0  100.00%
crates/decider/trogon-decider/src/decision.rs                                                          27       0  100.00%
crates/decider/trogon-decider/src/testing/codec.rs                                                     14       0  100.00%
crates/a2a/a2a-nats/src/audit/emitter.rs                                                               58       0  100.00%
crates/a2a/a2a-nats/src/audit/task_lifecycle.rs                                                        17       0  100.00%
crates/a2a/a2a-nats/src/audit/envelope.rs                                                              57       0  100.00%
crates/a2a/a2a-gateway/src/runtime/env.rs                                                              55       0  100.00%
crates/a2a/a2a-gateway/src/runtime/policy_stack.rs                                                     78      31  60.26%   82, 89, 101-110, 117-118, 133-143, 152-168, 173
crates/a2a/a2a-gateway/src/runtime/aauth_env.rs                                                       162       0  100.00%
crates/a2a/a2a-gateway/src/runtime/audit_publish.rs                                                    16       0  100.00%
crates/a2a/a2a-gateway/src/runtime/reply.rs                                                             5       0  100.00%
crates/a2a/a2a-gateway/src/runtime/streaming.rs                                                        35       0  100.00%
crates/a2a/a2a-gateway/src/runtime/tier1.rs                                                            30       0  100.00%
crates/a2a/a2a-gateway/src/runtime/tier1_denial.rs                                                     34       1  97.06%   60
crates/a2a/a2a-nats/src/nats/subjects/tasks/events.rs                                                  17       0  100.00%
crates/platform/trogon-nats/src/lease/lease_key.rs                                                     19       0  100.00%
crates/platform/trogon-nats/src/lease/acquire.rs                                                        5       5  0.00%    9-14
crates/platform/trogon-nats/src/lease/lease_timing.rs                                                  15       0  100.00%
crates/platform/trogon-nats/src/lease/mod.rs                                                          107      13  87.85%   113-126
crates/platform/trogon-nats/src/lease/renew.rs                                                         82      19  76.83%   23-29, 48-59
crates/platform/trogon-nats/src/lease/renew_interval.rs                                                25       0  100.00%
crates/platform/trogon-nats/src/lease/provision.rs                                                     83      10  87.95%   82-92
crates/platform/trogon-nats/src/lease/release.rs                                                        5       5  0.00%    8-12
crates/platform/trogon-nats/src/lease/lease_bucket.rs                                                  19       0  100.00%
crates/platform/trogon-nats/src/lease/ttl.rs                                                           27       0  100.00%
crates/platform/trogon-nats/src/lease/nats_kv_lease_config.rs                                          26       0  100.00%
crates/a2a/a2a-nats/src/gateway_ingress.rs                                                            153      21  86.27%   148-151, 155, 169, 177-183, 216, 231-237
crates/a2a/a2a-nats/src/agent_id.rs                                                                    21       0  100.00%
crates/a2a/a2a-nats/src/wire.rs                                                                        59       2  96.61%   85, 98
crates/a2a/a2a-nats/src/context_id.rs                                                                  22       0  100.00%
crates/a2a/a2a-nats/src/a2a_prefix.rs                                                                  16       0  100.00%
crates/a2a/a2a-nats/src/req_id.rs                                                                      21       0  100.00%
crates/a2a/a2a-nats/src/config.rs                                                                     114       0  100.00%
crates/a2a/a2a-nats/src/jsonrpc.rs                                                                     27       0  100.00%
crates/a2a/a2a-nats/src/task_id.rs                                                                     22       0  100.00%
crates/aauth/trogon-aauth-person/src/subagent.rs                                                       10       0  100.00%
crates/aauth/trogon-aauth-person/src/pending.rs                                                        73       0  100.00%
crates/aauth/trogon-aauth-person/src/interaction.rs                                                     2       0  100.00%
crates/aauth/trogon-aauth-person/src/agent.rs                                                          84       0  100.00%
crates/aauth/trogon-aauth-person/src/mint.rs                                                           59       0  100.00%
crates/aauth/trogon-aauth-person/src/mission.rs                                                        65       0  100.00%
crates/aauth/trogon-aauth-person/src/error.rs                                                          48       0  100.00%
crates/aauth/trogon-aauth-person/src/server.rs                                                        353       0  100.00%
crates/aauth/trogon-aauth-person/src/login.rs                                                           3       0  100.00%
crates/aauth/trogon-aauth-person/src/store.rs                                                          21       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_event_schedule.rs                35       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/message.rs                               139       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_event_status.rs                   6       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id.rs                            22       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule.rs                              383       5  98.69%   327, 335, 350-352
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_event_sampling_source.rs         11       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_event_delivery.rs                14       0  100.00%
crates/ard/ard-catalog/src/catalog_entry_wire.rs                                                        3       0  100.00%
crates/ard/ard-catalog/src/catalog_manifest.rs                                                         44       0  100.00%
crates/ard/ard-catalog/src/url_or_data.rs                                                              20       0  100.00%
crates/ard/ard-catalog/src/ard_storage_key.rs                                                          10       0  100.00%
crates/ard/ard-catalog/src/registry_error_wire.rs                                                       8       0  100.00%
crates/ard/ard-catalog/src/catalog_manifest_wire.rs                                                     3       0  100.00%
crates/ard/ard-catalog/src/catalog_entry.rs                                                           107       0  100.00%
crates/ard/ard-catalog/src/media_type.rs                                                               20       0  100.00%
crates/ard/ard-catalog/src/representative_queries.rs                                                   18       0  100.00%
crates/ard/ard-catalog/src/catalog_manifest_schema.rs                                                  65       4  93.85%   105-106, 108-109
crates/ard/ard-catalog/src/trust_manifest.rs                                                           45       1  97.78%   35
crates/ard/ard-catalog/src/ard_identifier.rs                                                           54       0  100.00%
crates/ard/ard-catalog/src/catalog_host.rs                                                             26       0  100.00%
crates/ard/ard-catalog/src/federation_mode.rs                                                           3       0  100.00%
crates/ard/ard-catalog/src/metadata.rs                                                                 14       0  100.00%
crates/ard/ard-catalog/src/catalog_host_wire.rs                                                         6       0  100.00%
crates/ard/ard-catalog/src/display_name.rs                                                             13       0  100.00%
crates/platform/trogon-gateway/src/source/datadog/signature.rs                                          7       0  100.00%
crates/platform/trogon-gateway/src/source/datadog/datadog_event_type.rs                                20       0  100.00%
crates/platform/trogon-gateway/src/source/datadog/datadog_webhook_token.rs                              9       0  100.00%
crates/platform/trogon-gateway/src/source/datadog/server.rs                                           108       0  100.00%
crates/a2a/a2a-nats/src/jetstream/consumers.rs                                                         50       0  100.00%
crates/a2a/a2a-nats/src/jetstream/provision.rs                                                         16       0  100.00%
crates/a2a/a2a-nats/src/jetstream/stream_options.rs                                                    50       0  100.00%
crates/a2a/a2a-nats/src/jetstream/streams.rs                                                            9       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/json_path.rs                                         84       5  94.05%   37, 49, 85, 104, 115
crates/a2a/a2a-gateway/src/policy/tier3_redaction/rewrite.rs                                           49       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/real_gate.rs                                        138      33  76.09%   18-26, 42-44, 67, 76-80, 119, 148-152, 155-159, 170-174, 192, 265
crates/a2a/a2a-gateway/src/policy/tier3_redaction/decision.rs                                          22       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/mod.rs                                               33       2  93.94%   54, 58
crates/a2a/a2a-gateway/src/policy/tier3_redaction/context.rs                                           40       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/manifest.rs                                          69       3  95.65%   112, 121, 132
crates/a2a/a2a-gateway/src/policy/tier3_redaction/gate.rs                                               3       0  100.00%
crates/acp/acp-nats/src/client/terminal_kill.rs                                                        41       0  100.00%
crates/acp/acp-nats/src/client/test_support.rs                                                         17       0  100.00%
crates/acp/acp-nats/src/client/elicitation_create.rs                                                   41       0  100.00%
crates/acp/acp-nats/src/client/terminal_release.rs                                                     35       0  100.00%
crates/acp/acp-nats/src/client/mod.rs                                                                 105       1  99.05%   59
crates/acp/acp-nats/src/client/fs_write_text_file.rs                                                   43       0  100.00%
crates/acp/acp-nats/src/client/terminal_create.rs                                                      41       0  100.00%
crates/acp/acp-nats/src/client/session_update.rs                                                        8       0  100.00%
crates/acp/acp-nats/src/client/ext_session_prompt_response.rs                                          22       0  100.00%
crates/acp/acp-nats/src/client/request_permission.rs                                                   40       0  100.00%
crates/acp/acp-nats/src/client/ext.rs                                                                  62       0  100.00%
crates/acp/acp-nats/src/client/fs_read_text_file.rs                                                    27       0  100.00%
crates/acp/acp-nats/src/client/terminal_output.rs                                                      29       0  100.00%
crates/acp/acp-nats/src/client/elicitation_complete.rs                                                  8       0  100.00%
crates/acp/acp-nats/src/client/terminal_wait_for_exit.rs                                               55       0  100.00%
crates/acp/acp-nats/src/client/rpc_reply.rs                                                           107      43  59.81%   45-47, 61-63, 80-120
crates/a2a/a2a-auth-callout/src/signing_key_source/minting_material.rs                                 18       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/key_version.rs                                      16       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/env.rs                                              40       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/static_source.rs                                    25       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/loader.rs                                           23       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/vault.rs                                             3       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/file.rs                                             38       6  84.21%   38-40, 59-61
crates/a2a/a2a-auth-callout/src/signing_key_source/signing_key_handle.rs                               15       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier2/mod.rs                                                         46       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier2/rule_name.rs                                                   19       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/wakeup.rs                                    91       1  98.90%   123
crates/a2a/a2a-nats-server/src/main.rs                                                                  1       0  100.00%
crates/a2a/a2a-nats-server/src/runtime.rs                                                              17       0  100.00%
crates/a2a/a2a-nats-server/src/noop_handler.rs                                                         22       0  100.00%
crates/a2a/a2a-redaction/src/wasm/engine.rs                                                            62      11  82.26%   29-31, 63-64, 76-78, 82-84
crates/a2a/a2a-redaction/src/wasm/mod.rs                                                              110       9  91.82%   132-134, 147-149, 162-164
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/cache.rs                                           36       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/config.rs                                          70       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/client.rs                                          29      15  48.28%   43-69, 97-99, 108-117
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/mod.rs                                            108       0  100.00%
crates/a2a/a2a-pack/src/resource_tuples.rs                                                            152       0  100.00%
crates/a2a/a2a-pack/src/agent_card_read.rs                                                             23       0  100.00%
crates/a2a/a2a-pack/src/agent_card_schema.rs                                                           40       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/config.rs                                           42       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/server.rs                                           53       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/registration.rs                                     82       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/signature.rs                                         7       0  100.00%
TOTAL                                                                                               39502    1789  95.47%

Diff against main

Filename                                                           Stmts    Miss  Cover
---------------------------------------------------------------  -------  ------  --------
crates/platform/trogonai-proto/src/session/sessions/validate.rs      +12       0  +100.00%
TOTAL                                                                +12       0  +0.00%

Results for commit: 2d8bc8c

Minimum allowed coverage is 95%

♻️ This comment has been updated with latest results

The corpus described how ten products store sessions but only measured one of
them against our own catalog, so nothing weighted a product's evidence by how
proven its store is, and the two gaps the synthesis leaves open stayed open.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 4, 2026 06:08

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 31 out of 32 changed files in this pull request and generated no new comments.

Suppressed comments (1)

proto/trogonai/session/sessions/v1alpha1/execution_attempt_started.proto:30

  • reserved field names in protobuf must be quoted string literals. reserved resume_cursor; is invalid proto syntax and will fail compilation with protoc/buf.

Use reserved "resume_cursor"; (and keep reserved 7;) to reserve both the field number and the former name.

  reserved 7;
  reserved resume_cursor;

Comment thread docs/adr/0031-agent-implementation-and-session-plan.md
yordis added 2 commits August 4, 2026 03:54
…convention

The rest of docs/ uses no em dash, and a corpus that mixes both makes the
punctuation itself look like a signal about which artifact came from where.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
…atalog

Our Session Store decisions were drawn from ten products, and the sample was
too small to tell a considered design apart from an accident of who we happened
to read. Weighting each store by how proven it is rather than how popular its
product is, is what lets a recommendation cite evidence instead of taste.

Two decisions in ADR#0035 are the ones this evidence is meant to test, so the
comparisons are written to argue against them where the sources support it.

Mechanical verification only earns trust when it runs over the whole corpus at
once: run per artifact as each landed, it passed six files that were not clean,
because a basename unique in one tree becomes ambiguous the moment a sibling
tree joins the run.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 4, 2026 08:05

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Comment thread docs/adr/0031-agent-implementation-and-session-plan.md
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 4, 2026 08:18

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

Due to the large number of review comments, Critical severity comments were prioritized as inline comments.

🟠 Major comments (23)
docs/research/session-store/index.md-42-59 (1)

42-59: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Correct the verification-status claim.

Lines 42-48 say that every listed artifact passed both verification layers. Lines 56-59 then say that ten listed dossiers received hand verification only. Separate the locally swept artifacts from the hand-only dossiers so the corpus does not claim mechanical coverage that it does not have.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/index.md` around lines 42 - 59, Update the
verification-status wording in the introductory claims around the corpus sweep
to distinguish artifacts covered by both mechanical and hand verification from
the ten hand-only dossiers. Remove the blanket claim that every listed artifact
passed both layers, while preserving the reported 1912-citation sweep and its
resolved-status details for the locally checked-out products.
docs/research/session-store/RESEARCH_PROMPT_COMPARISON.md-40-42 (1)

40-42: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Use markdown links for every ADR#0035 reference.

The ADR-reference lint failure has the same cause in both files. Replace each bare reference with the canonical relative link.

  • docs/research/session-store/RESEARCH_PROMPT_COMPARISON.md#L40-L42: link the ADR reference.
  • docs/research/session-store/RESEARCH_PROMPT_COMPARISON.md#L112-L118: link the ADR reference in the recommendation requirements.
  • docs/research/session-store/RESEARCH_PROMPT_COMPARISON.md#L159-L166: link the ADR reference in the method.
  • docs/research/session-store/RESEARCH_PROMPT_COMPARISON.md#L172-L180: link the ADR reference in the output skeleton.
  • docs/research/session-store/index.md#L15-L20: link the ADR reference in the stage-two description.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/RESEARCH_PROMPT_COMPARISON.md` around lines 40 -
42, Replace every bare ADR#0035 reference with the canonical relative Markdown
link in docs/research/session-store/RESEARCH_PROMPT_COMPARISON.md at lines
40-42, 112-118, 159-166, and 172-180, and in
docs/research/session-store/index.md at lines 15-20. Ensure all five references
use the same canonical link format.

Source: Pipeline failures

docs/research/session-store/products/letta/vs-session-events.md-6-6 (1)

6-6: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Convert bare ADR references to markdown links.

The file uses bare ADR#0031 and ADR#0035 references. The ADR reference linter rejects these references, and CI currently fails.

Use the repository-relative links below, then apply the same change to every bare ADR reference in this file and the affected comparison documents.

Proposed fix
-Compared against `proto/trogonai/session/sessions/v1alpha1/` and ADR#0035 on 2026-08-04.
+Compared against `proto/trogonai/session/sessions/v1alpha1/` and [ADR#0035](../../../../adr/0035-session-store-decider-aggregate.md) on 2026-08-04.

-because ADR#0031 already scopes a Session
+because [ADR#0031](../../../../adr/0031-agent-implementation-and-session-plan.md) already scopes a Session

Also applies to: 164-168

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/letta/vs-session-events.md` at line 6,
Replace every bare ADR reference in this document and the affected comparison
documents with repository-relative Markdown links, including ADR#0035 in the
comparison sentence and the references near the other flagged section. Preserve
the surrounding text while ensuring no unlinked ADR#NNNN references remain.

Source: Pipeline failures

docs/research/session-store/products/mastra/vs-session-events.md-6-6 (1)

6-6: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Replace all bare ADR references with Markdown links.

Line 6 and many later lines use plain ADR#0035 text. The lint-adr-refs pipeline rejects these references. Convert every occurrence in this file to a relative link to docs/adr/0035-session-store-decider-aggregate.md. Preserve any surrounding line-number text.

The pipeline currently reports 335 bare ADR references across the product documentation, so CI cannot pass until these references are linked.

Proposed fix
-Compared against `proto/trogonai/session/sessions/v1alpha1/` and ADR#0035 on 2026-08-04.
+Compared against `proto/trogonai/session/sessions/v1alpha1/` and [ADR#0035](../../../../adr/0035-session-store-decider-aggregate.md) on 2026-08-04.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/mastra/vs-session-events.md` at line 6,
Replace every bare ADR#0035 reference in the document with a relative Markdown
link targeting docs/adr/0035-session-store-decider-aggregate.md, preserving any
surrounding text and line-number references.

Source: Pipeline failures

docs/research/session-store/products/google-adk/vs-session-events.md-6-6 (1)

6-6: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Link all unlinked ADR references before merge.

The affected documents use plain ADR references, and the ADR validation job reports 335 unresolved references.

  • docs/research/session-store/products/google-adk/vs-session-events.md#L6-L6: Link ADR#0035 and convert the remaining bare ADR#... references in the file.
  • docs/research/session-store/products/hermes-agent/index.md#L492-L492: Link ADR 0031 to ../../../../adr/0031-agent-implementation-and-session-plan.md.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/google-adk/vs-session-events.md` at line
6, The ADR references are unlinked and fail ADR validation. In
docs/research/session-store/products/google-adk/vs-session-events.md:6, link
ADR#0035 and convert every remaining bare ADR#... reference in the file; in
docs/research/session-store/products/hermes-agent/index.md:492, link ADR 0031 to
the specified agent implementation and session plan document.

Source: Pipeline failures

docs/research/session-store/products/crush/index.md-943-951 (1)

943-951: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Correct the ListNewFiles status.

This paragraph says that db.New eagerly prepares ListNewFiles and would fail because files.is_new does not exist. That makes the mismatch a potential database-initialization failure, not a dormant issue. Change the conclusion to reflect the startup impact.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/crush/index.md` around lines 943 - 951,
The `ListNewFiles`/`is_new` mismatch is incorrectly described as dormant. Update
the paragraph’s conclusion to state that `db.New` eagerly prepares
`ListNewFiles`, so initialization can fail when the missing `files.is_new`
column is encountered; retain the existing evidence and unresolved-origin note.
docs/research/session-store/products/aider/vs-session-events.md-6-6 (1)

6-6: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Convert all bare ADR references before merge.

CI reports 335 ADR-reference failures. Replace every bare ADR#0035 occurrence with a relative Markdown link to docs/adr/0035-session-store-decider-aggregate.md.

  • docs/research/session-store/products/aider/vs-session-events.md#L6-L6: update the comparison line and all later bare ADR references.
  • docs/research/session-store/products/amazon-q/vs-session-events.md#L6-L6: update the comparison line and all later bare ADR references.
  • docs/research/session-store/products/continue/vs-session-events.md#L6-L6: update the comparison line and all later bare ADR references.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/aider/vs-session-events.md` at line 6,
Replace every bare ADR#0035 reference with a relative Markdown link to
docs/adr/0035-session-store-decider-aggregate.md, including the comparison line
and later references in
docs/research/session-store/products/aider/vs-session-events.md (line 6),
docs/research/session-store/products/amazon-q/vs-session-events.md (line 6), and
docs/research/session-store/products/continue/vs-session-events.md (line 6).

Source: Pipeline failures

docs/research/session-store/products/crush/vs-session-events.md-6-6 (1)

6-6: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Link every ADR reference.

This file contains multiple bare ADR#0035 and ADR#0029 references. CI reports 335 ADR-reference errors. Convert every bare reference to a relative Markdown link. Do not fix only Line 466.

Also applies to: 42-47, 118-123, 134-138, 211-217, 244-254, 256-260, 390-396, 454-466

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/crush/vs-session-events.md` at line 6,
Update every bare ADR#0035 and ADR#0029 reference throughout the document,
including the locations identified by the review, to use the appropriate
relative Markdown ADR links. Ensure no unlinked ADR references remain; do not
limit the change to the cited line.

Source: Pipeline failures

docs/research/session-store/products/aws-strands/index.md-467-476 (1)

467-476: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Correct the missing-field compatibility claim.

from_dict filters unknown keys, but it does not default every missing field. Session.session_id, Session.session_type, SessionAgent.agent_id, SessionAgent.state, SessionAgent.conversation_manager_state, SessionMessage.message, and SessionMessage.message_id are required fields. Missing values fail construction. Limit the conclusion to unknown-field tolerance and fields with dataclass defaults.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/aws-strands/index.md` around lines 467 -
476, Correct the compatibility finding in the documented analysis around
Session, SessionAgent, and SessionMessage: state only that from_dict filters
unknown keys and preserves fields with dataclass defaults, while explicitly
noting that required fields such as session_id, session_type, agent_id, state,
conversation_manager_state, message, and message_id fail construction when
missing. Remove the claim that missing fields generally default, while retaining
the conclusion about lacking migration and version negotiation.
docs/research/session-store/products/aws-strands/vs-session-events.md-93-93 (1)

93-93: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Separate session-log deletion from artifact erasure.

This row describes ArtifactErased as per-artifact byte destruction, then says v1alpha1 does not attempt erasure “at all.” Clarify that v1alpha1 does not delete session-log bytes, while ArtifactErased covers out-of-band artifacts. The current wording gives an incorrect privacy and retention comparison.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/aws-strands/vs-session-events.md` at
line 93, Update the comparison row describing v1alpha1 deletion semantics to
distinguish session-log retention from artifact handling: state that v1alpha1
does not delete session-log bytes, while ArtifactErased represents out-of-band
artifact erasure. Replace the wording that says v1alpha1 does not attempt
erasure “at all,” and preserve the existing Strands deletion comparison.
docs/research/session-store/products/cline/vs-session-events.md-87-87 (1)

87-87: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Correct the Cline deletion comparison.

Cline’s explicit deleteSession() path deletes session artifacts, including messages, manifests, compaction state, and checkpoint references. The statement “neither side deletes bytes” is incorrect. State that Cline performs manual physical deletion but has no automatic retention policy, while the platform’s v1 session log remains append-only.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/cline/vs-session-events.md` at line 87,
Update the Cline deletion comparison in the table row to state that Cline’s
manual deleteSession() path physically deletes session artifacts, while it has
no automatic retention or TTL policy. Clarify that the platform’s v1 session log
remains append-only, and remove the inaccurate claim that neither side deletes
bytes.
docs/research/session-store/products/aws-strands/vs-session-events.md-6-6 (1)

6-6: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Convert all bare ADR references to markdown links.

The ADR-reference lint reports 335 failures. Update every affected site to use [ADR#0035](../../../../adr/0035-session-store-decider-aggregate.md).

  • docs/research/session-store/products/aws-strands/vs-session-events.md#L6-L6: link the comparison header reference.
  • docs/research/session-store/products/aws-strands/vs-session-events.md#L111-L114: link the facet 3 reference.
  • docs/research/session-store/products/aws-strands/vs-session-events.md#L155-L160: link the facet 7 reference.
  • docs/research/session-store/products/aws-strands/vs-session-events.md#L195-L200: link the optional tiering reference.
  • docs/research/session-store/products/cline/vs-session-events.md#L6-L6: link the comparison header reference.
  • docs/research/session-store/products/cline/vs-session-events.md#L47-L50: link the append-only mutation reference.
  • docs/research/session-store/products/cline/vs-session-events.md#L69-L71: link the decision 1, 2, and 6 references.
  • docs/research/session-store/products/cline/vs-session-events.md#L84-L84: link the decision 6 reference.
  • docs/research/session-store/products/cline/vs-session-events.md#L93-L97: link the decision 6 reference.
  • docs/research/session-store/products/cline/vs-session-events.md#L141-L146: link the decision 6 reference.
  • docs/research/session-store/products/cline/vs-session-events.md#L164-L172: link the decision 6 reference.
  • docs/research/session-store/products/cline/vs-session-events.md#L312-L318: link the decision 6 reference.
  • docs/research/session-store/products/cline/vs-session-events.md#L361-L367: link the decision 6 reference.
  • docs/research/session-store/products/cline/vs-session-events.md#L418-L424: link the decision 7 reference.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/aws-strands/vs-session-events.md` at
line 6, Replace every bare ADR#0035 reference with the markdown link
[ADR#0035](../../../../adr/0035-session-store-decider-aggregate.md) at all
listed sites:
docs/research/session-store/products/aws-strands/vs-session-events.md lines 6,
111-114, 155-160, and 195-200; and
docs/research/session-store/products/cline/vs-session-events.md lines 6, 47-50,
69-71, 84, 93-97, 141-146, 164-172, 312-318, 361-367, and 418-424. Update each
comparison header, facet, tiering, mutation, and decision reference without
changing surrounding content.

Source: Pipeline failures

docs/research/session-store/products/cline/vs-session-events.md-447-456 (1)

447-456: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Label the snapshot recovery path as draft design.

session-types.md Lines 376-385 states that no Session-specific decider, event store composition, projection, snapshot policy, or reconciler exists yet. Replace “our runtime resumes” and similar present-tense claims with “the draft design intends” unless implementation evidence is added.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/cline/vs-session-events.md` around lines
447 - 456, Revise the claims in this discussion around decision 7 to describe
snapshot recovery as a draft design, replacing present-tense statements such as
“our runtime resumes” with wording that says the draft design intends to resume
from the newest snapshot and replay only the tail. Do not present the
session-specific decider, event store, projection, snapshot policy, or
reconciler as implemented.
docs/research/session-store/products/continue/index.md-765-766 (1)

765-766: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Link the ADR reference so CI passes.

ADR 0031 is a bare ADR reference. Convert it to the required linked form, such as [ADR#0031](../../../../adr/0031-agent-implementation-and-session-plan.md). The ADR validation job currently reports 335 bare-reference errors.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/continue/index.md` around lines 765 -
766, Update the ADR 0031 reference in the surrounding documentation text to the
required linked form, using the repository’s ADR 0031 document path and
preserving the existing sentence meaning.

Source: Pipeline failures

docs/research/session-store/products/continue/index.md-455-457 (1)

455-457: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Correct the Session.mode compatibility conclusion.

The dossier says format evolution is entirely additive and that old sessions simply lack mode. The earlier union included "edit", but the current union excludes it. Persisted sessions can therefore contain mode: "edit"; JSON.parse does not migrate or validate this value. Document this as a removed enum value and define the recovery behavior: migrate, normalize, or reject it.

Also applies to: 497-504

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/continue/index.md` around lines 455 -
457, Update the Session.mode compatibility discussion and the related section
around the earlier union to acknowledge that persisted sessions may contain the
removed "edit" enum value even though the current union excludes it. Document
the selected recovery behavior—migration, normalization, or rejection—and
distinguish this enum removal from additive optional-field evolution.
docs/research/session-store/products/openai-agents-sdk/vs-session-events.md-157-163 (1)

157-163: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Account for legacy digest compatibility before calling this change non-breaking.

If the canonical digest input changes, old CheckpointProduced records retain their previous digest. A redelivery computed with the new rule will not compare equal unless verification supports both canonicalizations or the digest algorithm is versioned. “No persisted-event rewrite needed” is not established.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/openai-agents-sdk/vs-session-events.md`
around lines 157 - 163, Revise the “Blast radius” discussion to account for
legacy digest compatibility: state that changing the canonical digest input
requires verification to support both old and new canonicalizations or to
version the digest algorithm, otherwise redelivered evidence will not match
existing CheckpointProduced digests. Remove the claim that no persisted-event
rewrite is needed unless this compatibility behavior is explicitly established.
docs/research/session-store/products/openhands/index.md-47-77 (1)

47-77: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Document the cross-file commit boundary.

events/ and base_state.json are written through separate operations. append_event appends the event, then advances leaf_event_id in the mutable base-state document. A crash between those writes can leave a durable event that the persisted HEAD does not reference. Define the recovery rule or add an integrity check before presenting both files as authoritative.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/openhands/index.md` around lines 47 -
77, Document the cross-file commit boundary for EventLog.append() and the
subsequent leaf_event_id update in ConversationState, including the crash window
between writes. Define and document recovery behavior for durable events not
referenced by persisted HEAD, or add an integrity check that detects this
mismatch before treating events/ and base_state.json as authoritative.
docs/research/session-store/products/openai-agents-sdk/vs-session-events.md-6-6 (1)

6-6: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Link all bare ADR references in the research corpus.

The ADR-reference validator rejects plain ADR references. Apply the same relative-link fix at every affected site.

  • docs/research/session-store/products/openai-agents-sdk/vs-session-events.md#L6-L6: link all ADR#0035 and ADR#0031 references.
  • docs/research/session-store/products/void/vs-session-events.md#L6-L6: link all ADR#0035 references.
  • docs/research/session-store/products/zed/index.md#L566-L566: link the ADR 0031/0035 references.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/openai-agents-sdk/vs-session-events.md`
at line 6, Replace every bare ADR reference with the appropriate relative ADR
link: in
docs/research/session-store/products/openai-agents-sdk/vs-session-events.md:6,
link all ADR#0035 and ADR#0031 references; in
docs/research/session-store/products/void/vs-session-events.md:6, link all
ADR#0035 references; and in
docs/research/session-store/products/zed/index.md:566, link the ADR 0031/0035
references.

Source: Pipeline failures

docs/research/session-store/products/openhands/index.md-166-177 (1)

166-177: 🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift

Document event-file recovery before claiming non-crash-safe compaction.

LocalFileStore.write() writes directly without temp-file-and-rename atomicity, so partial JSON from a crash can remain. The compaction guarantee needs an explicit resume policy for malformed files, such as repairing or quarantining them before compaction runs.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/openhands/index.md` around lines 166 -
177, The durability documentation should explicitly describe recovery for
malformed or partially written event files before compaction proceeds. Update
the event-store behavior described around the referenced event append flow to
state that invalid JSON is detected and repaired or quarantined according to an
explicit resume policy, then compaction continues safely; do not claim
crash-safe compaction without documenting this policy.
docs/research/session-store/products/zed/vs-session-events.md-6-6 (1)

6-6: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift

Link every ADR reference before merging.

This file contains bare ADR#0026 and ADR#0035 references. CI reports 335 bare-reference failures across the session-events documentation. Replace every bare reference in this file with a relative Markdown link.

For example:

-Compared against `proto/trogonai/session/sessions/v1alpha1/` and ADR#0035 on 2026-08-04.
+Compared against `proto/trogonai/session/sessions/v1alpha1/` and [ADR#0035](../../../../adr/0035-session-store-decider-aggregate.md) on 2026-08-04.

Also applies to: 325-327, 551-555, 619-623

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/zed/vs-session-events.md` at line 6,
Replace every bare ADR reference in the session-events documentation, including
ADR#0026 and ADR#0035, with relative Markdown links to the corresponding ADR
documents. Update all listed occurrences throughout the file and ensure no
unlinked ADR# references remain.

Source: Pipeline failures

docs/research/session-store/products/zed/vs-session-events.md-385-390 (1)

385-390: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Do not describe the delete walk as effectively atomic.

Mutex<Connection> serializes callers in one process, but it does not prove transactionally atomic or crash-atomic deletion across the full walk. The document later states that a crash can leave a partially deleted subtree at lines 580-589. Replace “effectively atomic from the caller's perspective” with wording that states the mutex serialization and the missing transaction guarantee.

Proposed wording
- at the cost of a single-process, single-database assumption that cannot
- survive a cross-stream write ... effectively atomic from the caller's perspective.
+ at the cost of a single-process, single-database assumption that cannot
+ survive a cross-stream write ... serialized under one process mutex, but not
+ proven transactionally or crash atomic across the full delete walk.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/zed/vs-session-events.md` around lines
385 - 390, Update the Zed ThreadsDatabase::delete_thread description to remove
“effectively atomic from the caller's perspective.” State that Mutex<Connection>
serializes callers within one process, while the missing explicit BEGIN/COMMIT
means the full recursive deletion has no transaction or crash-atomicity
guarantee.
docs/research/session-store/products/openhands/vs-session-events.md-6-6 (1)

6-6: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Replace bare ADR references with Markdown links.

The ADR lint failure has one root cause. CI reports 335 bare ADR references. Convert every bare ADR#... reference in these files to a relative Markdown link.

  • docs/research/session-store/products/openhands/vs-session-events.md#L6-L6: replace the first and all repeated bare ADR references.
  • docs/research/session-store/products/pi/index.md#L14-L14: replace the first and all repeated bare ADR references.
  • docs/research/session-store/products/pi/vs-session-events.md#L6-L6: replace the first and all repeated bare ADR references.
Proposed link form
-Compared against `proto/...` and ADR#0035 on 2026-08-04.
+Compared against `proto/...` and [ADR#0035](../../../../adr/0035-session-store-decider-aggregate.md) on 2026-08-04.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/openhands/vs-session-events.md` at line
6, Replace every bare ADR#... reference with a relative Markdown link in
docs/research/session-store/products/openhands/vs-session-events.md#L6-L6,
docs/research/session-store/products/pi/index.md#L14-L14, and
docs/research/session-store/products/pi/vs-session-events.md#L6-L6, including
the initial and repeated references. Preserve each ADR identifier and link it to
the corresponding ADR document using the repository’s relative-link convention.

Source: Pipeline failures

docs/research/session-store/products/swe-agent/vs-session-events.md-6-6 (1)

6-6: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Convert bare ADR references to Markdown links.

CI fails because this file uses bare ADR#0035 and ADR#0024 references. Convert every occurrence, including Lines 6 and 313, to relative links. Use the exact ADR filenames from docs/adr/.

Also applies to: 313-313

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/swe-agent/vs-session-events.md` at line
6, Update every bare ADR#0035 and ADR#0024 reference in the document, including
the occurrences near the comparison note and later referenced line, to relative
Markdown links using the exact matching filenames from docs/adr/.

Source: Pipeline failures

🟡 Minor comments (14)
docs/research/session-store/products/google-adk/vs-session-events.md-98-99 (1)

98-99: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Do not claim that contract drift is impossible.

A single SessionProjection contract reduces implementation surfaces. It does not prevent an implementation from diverging from the contract. Replace this claim with a testable guarantee that requires conformance tests or equivalent validation.

Also applies to: 328-334

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/google-adk/vs-session-events.md` around
lines 98 - 99, Revise the claim in the comparison table around the
`SessionProjection` entry so it no longer states that
documentation/implementation drift is impossible. Replace it with a testable
guarantee that explicitly depends on conformance tests or equivalent validation,
while preserving the point that one authoritative contract reduces
implementation surfaces. Apply the same correction to the corresponding claim
near the referenced second occurrence.
docs/research/session-store/products/google-adk/vs-session-events.md-258-258 (1)

258-258: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the ADR#0027 link target.

The target contains tenancity, but that file does not exist. Use the existing tenancy filename.

Proposed fix
-[ADR#0027](../../../../adr/0027-decider-multi-tenancity-primitive.md)
+[ADR#0027](../../../../adr/0027-decider-multi-tenancy-primitive.md)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/google-adk/vs-session-events.md` at line
258, Update the ADR#0027 Markdown link target in the session-store documentation
to reference the existing tenancy filename instead of the misspelled tenancity
filename; leave the link text and surrounding content unchanged.

Source: Pipeline failures

docs/research/session-store/products/amazon-q/index.md-693-698 (1)

693-698: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove the orphaned sentence fragment.

The bullet ends at Line 697. Line 698 contains the stray text the field.. Delete it or merge it into the preceding sentence.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/amazon-q/index.md` around lines 693 -
698, Remove the orphaned trailing text “the field.” after the tangent_state
bullet, leaving the preceding sentence complete and the bullet ending cleanly.
docs/research/session-store/products/amazon-q/index.md-171-173 (1)

171-173: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Distinguish checkpoint metadata from shadow-Git storage.

CheckpointManager is serialized inside ConversationState, so its metadata and history snapshots are persisted through Database. Only the workspace checkpoint contents use the separate shadow-Git store. Revise this sentence to avoid contradicting Lines 444-476.

Proposed wording
-There is no read/write interface at all for the checkpoint or delegate
-subsystems through `Database` -- those are separate, file-based stores
-described under Rewind/Subagents below.
+There is no dedicated `Database` interface for the checkpoint or delegate
+subsystems. Checkpoint metadata and history snapshots are persisted through
+`ConversationState`; workspace checkpoint contents and delegate bookkeeping
+use separate file-based stores.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/amazon-q/index.md` around lines 171 -
173, Revise the sentence in the database-storage description to distinguish
`CheckpointManager` metadata and history snapshots, which are serialized in
`ConversationState` and persisted through `Database`, from workspace checkpoint
contents stored in the separate shadow-Git store. Keep the separate file-based
treatment for delegate subsystems accurate and avoid stating that all checkpoint
data bypasses `Database`.
docs/research/session-store/products/crush/vs-session-events.md-255-255 (1)

255-255: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the reversed source range.

internal/agent/agent.go:1696-1502 is not a valid ascending line range. Replace it with the verified getSessionMessages range. The nearby citation uses 1692-1711.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/crush/vs-session-events.md` at line 255,
Correct the source citation in the Compacted records sentence by replacing the
reversed internal/agent/agent.go range with the verified getSessionMessages
range 1692-1711, leaving the surrounding text unchanged.
docs/research/session-store/products/zed/index.md-499-510 (1)

499-510: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Describe fallback persistence loss accurately.

open_fallback_db emits log::warn! before using an in-memory database. Threads are lost at process exit, but the loss is not silent at the implementation level. Replace “silently lost” with “lost after a warning” unless the warning is not visible to users.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/zed/index.md` around lines 499 - 510,
Update the fallback persistence description in the Crash/concurrency handling
bullet to replace “silently lost” with “lost after a warning,” accurately
reflecting the warning emitted by open_fallback_db before using the in-memory
database.
docs/research/session-store/products/openai-agents-sdk/index.md-51-58 (1)

51-58: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the blockquote structure.

The blank line between the two quoted paragraphs triggers Markdownlint MD028. Prefix the blank line with > or split the content into separate blockquotes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/openai-agents-sdk/index.md` around lines
51 - 58, Update the blockquote containing the session description and run
behavior so it does not have an unquoted blank line: prefix the separating blank
line with “>” or split the text into separate blockquotes, preserving both
quoted paragraphs.

Source: Linters/SAST tools

docs/research/session-store/products/zed/index.md-145-149 (1)

145-149: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Resolve the SessionId minting contradiction.

Lines 83-85 identify two Uuid::new_v4() call sites that mint acp::SessionId. This section says the exact minting call site was not found. State that the call sites were found and only ownership or completeness is uncertain, or remove the earlier uncertainty.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/zed/index.md` around lines 145 - 149,
Update the Session ids discussion in the Zed research document to reconcile it
with the identified Uuid::new_v4() call sites: state that the acp::SessionId
minting sites were found, while limiting uncertainty to ownership or
completeness, and remove the contradictory claim that no exact call site was
found.
docs/research/session-store/products/openai-agents-sdk/vs-session-events.md-42-58 (1)

42-58: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Mark product-intent claims as inference.

The cited code establishes two different storage models. It does not establish that OpenAI made a deliberate design choice or that the difference is not a tooling-age artifact. Mark those sentences [inference] or state only the observed divergence.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/openai-agents-sdk/vs-session-events.md`
around lines 42 - 58, Revise the comparison around the Agents SDK Session
protocol to distinguish observed implementation facts from inferred product
intent. Remove or mark as [inference] the claims that the divergence is
deliberate, not caused by tooling age, or reflects specific vendor optimization
goals; retain the cited evidence that Codex uses append-only markers while the
SDK backends perform destructive deletion and replacement.
docs/research/session-store/products/openai-agents-sdk/index.md-100-103 (1)

100-103: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Call the persisted history a list, not a set.

The backends can store duplicate items. Deduplication is Runner-side and content-based. “Ordered set” implies uniqueness that the storage contract does not provide. Use “ordered list” or “ordered sequence.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/openai-agents-sdk/index.md` around lines
100 - 103, Update the durable session description in the referenced paragraph to
call the conversation-item collection an “ordered list” or “ordered sequence”
instead of an “ordered set,” preserving the statement that backends may store
duplicate items and avoiding any implication of storage-level uniqueness.
docs/research/session-store/products/openai-agents-sdk/index.md-61-98 (1)

61-98: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Reconcile the backend count with the list.

The current list names eight concrete storage backends, but then says the SDK ships “nine concrete backends” while also listing OpenAIResponsesCompactionSession and EncryptedSession as decorators that wrap existing Session implementations. Add the missing backend or change the count to eight.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/openai-agents-sdk/index.md` around lines
61 - 98, Reconcile the backend count in the listed storage implementations:
either add the omitted concrete backend to match the claim of nine, or change
“at least nine concrete backends” to “eight concrete backends.” Keep
OpenAIResponsesCompactionSession and EncryptedSession identified as decorators
rather than counting them as storage backends.
docs/research/session-store/products/zed/vs-session-events.md-43-43 (1)

43-43: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use an H2 for Resolving the maturity tension.

Line 43 jumps from the document-level H1 to an H3 and triggers markdownlint MD001. Change ### to ##.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/zed/vs-session-events.md` at line 43,
Change the heading `Resolving the maturity tension` from H3 to H2 so it follows
the document-level H1 and satisfies markdownlint MD001.

Source: Linters/SAST tools

docs/research/session-store/products/pi/index.md-769-771 (1)

769-771: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Describe the harness version gate precisely.

The text says the harness “has no version concept,” but Lines 823-838 show that parseHeader() rejects headers unless version === 3. This is a strict version gate without migration support. Change the wording to avoid implying that the harness accepts unversioned data.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/pi/index.md` around lines 769 - 771,
Update the format-versioning description near the harness discussion to state
that the harness enforces a hard-coded version 3 header check via parseHeader(),
with no migration support, rather than implying it accepts unversioned data or
has no version gate.
docs/research/session-store/products/pi/index.md-1246-1259 (1)

1246-1259: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Scope Pi’s concurrency claims by backend.

The dossier documents SQLite transactions, WAL, and busy_timeout, so the statements below are too broad if they include every Pi implementation.

  • docs/research/session-store/products/pi/index.md#L1246-L1259: limit the no-coordination statement to the CLI and JSONL/in-memory backends; note SQLite transaction and locking behavior separately.
  • docs/research/session-store/products/pi/vs-session-events.md#L88-L89: compare At(current_position) with the CLI/JSONL backends, and state that SQLite lacks this expected-position contract rather than having no coordination.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/pi/index.md` around lines 1246 - 1259,
Scope the concurrency comparison to distinguish Pi’s CLI and JSONL/in-memory
backends from SQLite: revise the no-coordination claim in
docs/research/session-store/products/pi/index.md lines 1246-1259, and separately
acknowledge SQLite transactions, WAL, busy_timeout, and locking while noting it
lacks the expected-position append contract. In
docs/research/session-store/products/pi/vs-session-events.md lines 88-89,
compare At(current_position) specifically with the CLI/JSONL backends and state
that SQLite lacks this contract rather than lacking coordination entirely.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 56c25821-cffd-4c42-b1e7-8cf8803c7726

📥 Commits

Reviewing files that changed from the base of the PR and between b9ae2c8 and ddbf489.

📒 Files selected for processing (53)
  • docs/research/acp/products/gemini-cli.md
  • docs/research/acp/products/opencode.md
  • docs/research/session-store/RESEARCH_PROMPT.md
  • docs/research/session-store/RESEARCH_PROMPT_COMPARISON.md
  • docs/research/session-store/backlog.md
  • docs/research/session-store/index.md
  • docs/research/session-store/products/aider/index.md
  • docs/research/session-store/products/aider/vs-session-events.md
  • docs/research/session-store/products/amazon-q/index.md
  • docs/research/session-store/products/amazon-q/vs-session-events.md
  • docs/research/session-store/products/aws-strands/index.md
  • docs/research/session-store/products/aws-strands/vs-session-events.md
  • docs/research/session-store/products/claude-agent-sdk/index.md
  • docs/research/session-store/products/claude-agent-sdk/session-types.md
  • docs/research/session-store/products/cline/index.md
  • docs/research/session-store/products/cline/vs-session-events.md
  • docs/research/session-store/products/codex-cli/index.md
  • docs/research/session-store/products/continue/index.md
  • docs/research/session-store/products/continue/vs-session-events.md
  • docs/research/session-store/products/crush/index.md
  • docs/research/session-store/products/crush/vs-session-events.md
  • docs/research/session-store/products/fx/index.md
  • docs/research/session-store/products/fx/session-detail-json-reference.md
  • docs/research/session-store/products/fx/vs-session-events.md
  • docs/research/session-store/products/gemini-cli/index.md
  • docs/research/session-store/products/google-adk/index.md
  • docs/research/session-store/products/google-adk/vs-session-events.md
  • docs/research/session-store/products/goose/index.md
  • docs/research/session-store/products/grok-build/index.md
  • docs/research/session-store/products/hermes-agent/index.md
  • docs/research/session-store/products/kilo-code/index.md
  • docs/research/session-store/products/langgraph/index.md
  • docs/research/session-store/products/letta/index.md
  • docs/research/session-store/products/letta/vs-session-events.md
  • docs/research/session-store/products/mastra/index.md
  • docs/research/session-store/products/mastra/vs-session-events.md
  • docs/research/session-store/products/openai-agents-sdk/index.md
  • docs/research/session-store/products/openai-agents-sdk/vs-session-events.md
  • docs/research/session-store/products/opencode/index.md
  • docs/research/session-store/products/openhands/index.md
  • docs/research/session-store/products/openhands/vs-session-events.md
  • docs/research/session-store/products/pi/index.md
  • docs/research/session-store/products/pi/vs-session-events.md
  • docs/research/session-store/products/qwen-code/index.md
  • docs/research/session-store/products/roo-code/index.md
  • docs/research/session-store/products/swe-agent/index.md
  • docs/research/session-store/products/swe-agent/vs-session-events.md
  • docs/research/session-store/products/t3code/index.md
  • docs/research/session-store/products/void/index.md
  • docs/research/session-store/products/void/vs-session-events.md
  • docs/research/session-store/products/zed/index.md
  • docs/research/session-store/products/zed/vs-session-events.md
  • docs/research/session-store/synthesis.md

yordis added 2 commits August 4, 2026 04:25
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 4, 2026 08:25

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 4, 2026 08:43

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a1b2432. Configure here.

Comment thread docs/adr/0035-session-store-decider-aggregate.md Outdated
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 4, 2026 08:58

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

yordis added 2 commits August 4, 2026 04:58
…-side gap

Findings that only ever existed as conversation are findings we will re-derive
from scratch, so the ones the sixteen comparisons produced collectively, rather
than one product at a time, need somewhere to live that is not a chat log.

The provider side of the message payload turns out to be unstudied, which is
the one gap that bears on whether the schema's typed content arms are the right
ones. Naming it as a queued stage keeps it from reading as covered by the
per-product work that surrounds it.

Two dossiers document an entry's envelope and never open the payload inside it.
Nothing they say is wrong, which is why no citation check could have caught it.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
…avigable

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 4, 2026 18:13

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

…e the history

A command whose state read is none cannot reject a join at append time, so claiming decide enforces one leaves the invariant with no owner at all; the fold is where these facts were always going to be reconciled.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (11)
docs/research/session-store/products/mastra/vs-session-events.md (1)

174-177: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Test canonical stream order, not SessionOrdinal before folding.

The recommendation asks raw event readers to sort by fold-derived SessionOrdinal. The document states that SessionOrdinal is created during the canonical fold and is not read from JetStream metadata. Raw events cannot be ordered by a value that does not exist before folding. Test that the fold consumes canonical stream order and that derived projections preserve the assigned ordinal. Do not add a query-time ORDER BY SessionOrdinal.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/mastra/vs-session-events.md` around
lines 174 - 177, The proposed repo-level check incorrectly requires raw event
readers to sort by fold-derived SessionOrdinal before folding, even though that
value is created only during the canonical fold. Revise the change to test that
the fold consumes canonical stream order and that derived projections preserve
the assigned SessionOrdinal; do not add query-time ordering or independent sort
keys for raw events.
docs/research/session-store/products/crush/vs-session-events.md (1)

445-450: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Do not present cascade as an active guarantee before the sweep exists.

Line 445 says the default policy actively terminates orphaned children. Lines 446-450 state that the orphan-closure sweep is not built or verified. CascadePolicy defines intended behavior, but it does not execute the reconciler. Describe this as a design target until the sweep is deployed and tested. Otherwise, operators can assume orphan closure is available when orphaned sessions can still persist.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/crush/vs-session-events.md` around lines
445 - 450, Update the documentation’s description of the default cascade policy
to identify orphan-child termination as a design target, not an active
guarantee. Clarify that CascadePolicy only defines the intended behavior and
that enforcement depends on the orphan-closure sweep being implemented,
deployed, and verified; preserve the existing discussion of the sweep’s current
absence.
docs/research/session-store/products/letta/vs-session-events.md (1)

183-188: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Do not allow OCC to make a derived context pointer authoritative.

These lines require model-visible context to remain a pure fold, but then allow a directly writable current-window field when it has OCC. OCC protects concurrent writes. It does not prevent the field from diverging from the event log. Keep the prohibition absolute: a cache may be advisory and rebuildable, but it must not become an authoritative write path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/letta/vs-session-events.md` around lines
183 - 188, Update the ADR#0035 decision 8 or Non-Goal guidance referenced by the
session-store documentation to prohibit any directly writable or authoritative
derived context pointer, even when protected by OCC. State that model-visible
context remains a pure event-log fold; caches may only be advisory and
rebuildable, while all invariant-bearing transitions continue using the existing
OCC discipline.
docs/research/session-store/products/swe-agent/vs-session-events.md (2)

129-137: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Do not classify SessionHidden as a terminal outcome.

This paragraph groups SessionHidden with terminal events. Lines 324-327 define it as a visibility tombstone. Keep it out of terminal-outcome claims and do not state that all four events share a typed reason enum.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/swe-agent/vs-session-events.md` around
lines 129 - 137, Update the paragraph describing terminal markers to exclude
SessionHidden, treating it only as a visibility tombstone. Limit
terminal-outcome claims and typed-reason-enum claims to SessionClosed,
SessionCancelled, and SessionFailed.

345-350: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Narrow the retention conclusion.

The absence of automatic cleanup in SWE-agent does not validate our keep-forever policy. It shows that this benchmark harness has no deliberate retention contract. Rephrase this as neutral evidence or as evidence that unbounded storage is a default when retention is unspecified.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/swe-agent/vs-session-events.md` around
lines 345 - 350, Revise the retention conclusion in the discussion of decision 7
to avoid treating SWE-agent’s lack of automatic cleanup as validation of a
keep-forever policy. Describe it as neutral evidence that the harness has no
deliberate retention contract, or that unbounded storage is the default when
retention is unspecified.
docs/research/session-store/products/void/vs-session-events.md (1)

110-112: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Remove quotation marks from the paraphrase.

The text says it is paraphrasing the dossier, but it presents the paraphrase as a direct quote. The stage-one prompt now requires quoted text to match the source exactly. Copy the source wording exactly, or remove the quotation marks.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/void/vs-session-events.md` around lines
110 - 112, In the dossier conclusion sentence, remove the quotation marks around
the paraphrased “non-destructive rewind” wording, preserving the existing
attribution and link to “What this implies for our Session Store (our
inference).”
docs/research/session-store/index.md (1)

108-113: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Align the nested-directory claim with the product list.

Lines 108-113 say every product has at least two artifacts. The list shows only index.md for Codex CLI, Gemini CLI, Goose, Grok Build, Hermes, LangGraph, OpenCode, and T3 Code. Add the missing artifact links, or change the claim to cover only products with multiple artifacts.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/index.md` around lines 108 - 113, Update the
documentation around the nested product-directory description to match the
actual product listings: either add links for the missing second artifacts for
Codex CLI, Gemini CLI, Goose, Grok Build, Hermes, LangGraph, OpenCode, and T3
Code, or revise the claim so it only states that products with multiple
artifacts use nested directories.
docs/research/session-store/products/pi/vs-session-events.md (2)

24-31: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Use full repository-relative paths for first citations.

The updated prompt permits a basename only after a full, unambiguous path is established. These passages introduce abbreviated filenames before that point. Mechanical verification can therefore resolve the wrong file or fail when sibling files share a basename.

  • docs/research/session-store/products/pi/vs-session-events.md#L24-L31: qualify repository.ts and jsonl-repo.ts.
  • docs/research/session-store/products/pi/vs-session-events.md#L36-L42: qualify the first session-selector.ts reference.
  • docs/research/session-store/products/pi/vs-session-events.md#L86-L94: qualify workspace.proto.
  • docs/research/session-store/products/void/vs-session-events.md#L74-L89: qualify workspace.proto.
  • docs/research/session-store/products/zed/vs-session-events.md#L141-L150: qualify execution_attempt_started.proto.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/pi/vs-session-events.md` around lines 24
- 31, Qualify abbreviated repository citations with full repository-relative
paths. Update docs/research/session-store/products/pi/vs-session-events.md lines
24-31 to qualify repository.ts and jsonl-repo.ts, lines 36-42 to qualify the
first session-selector.ts reference, and lines 86-94 to qualify workspace.proto;
make the same workspace.proto qualification in
docs/research/session-store/products/void/vs-session-events.md lines 74-89 and
qualify execution_attempt_started.proto in
docs/research/session-store/products/zed/vs-session-events.md lines 141-150.

74-80: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Do not model an unused session as SessionHidden.

SessionHidden is a visibility tombstone with separate retention and cascade semantics. Reusing SESSION_HIDDEN_REASON_UNSPECIFIED or adding an “unused” reason would make an unused session appear hidden and apply the wrong lifecycle rules. Define a separate typed fact, or state that SessionStarted alone is sufficient.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/pi/vs-session-events.md` around lines 74
- 80, The session-without-a-real-turn decision must not reuse SessionHidden or
SESSION_HIDDEN_REASON_UNSPECIFIED, since those represent visibility and
lifecycle semantics. Update the decision section to either explicitly declare
SessionStarted alone sufficient or define a separate typed unused-session fact;
preserve the documented additive-versus-documentation-only outcome.
docs/research/session-store/products/zed/vs-session-events.md (2)

110-118: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Describe the whole-document stale-write trade-off accurately.

A whole-document overwrite can still lose a concurrent, earlier update. SQLite WAL mode and busy_timeout serialize or delay lock contention; they are not application-level compare-and-swap. Reword this so the document says Zed’s write unit does not guard against stale reads.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/zed/vs-session-events.md` around lines
110 - 118, Revise the whole-document overwrite discussion in the Zed comparison
so it explicitly acknowledges that a stale read can overwrite an earlier
concurrent update. Clarify that SQLite WAL mode and the busy-timeout only
serialize or delay lock contention, rather than providing application-level
compare-and-swap or stale-write protection, and preserve the contrast with the
per-command WRITE_PRECONDITION classification.

384-401: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Do not describe Zed’s cascade as effectively atomic.

The Mutex<Connection> only serializes one process’s walk. The delete statements still run autocommit by default, so a crash mid-walk can leave a partial subtree. Replace “effectively atomic from the caller's perspective” with “serialized but not crash-atomic,” matching lines 581-588.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/research/session-store/products/zed/vs-session-events.md` around lines
384 - 401, Update the Zed cascade comparison around
ThreadsDatabase::delete_thread to remove the claim that it is effectively
atomic; describe the Mutex<Connection> walk as “serialized but not
crash-atomic,” consistent with the documented autocommit behavior and the
discussion at lines 581-588.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@proto/trogonai/session/sessions/v1alpha1/checkpoint.proto`:
- Around line 41-52: Do not add capture_attestation_ref,
capture_attestation_digest, or effective_history_digest as LEGACY_REQUIRED
fields to the released v1alpha1 Checkpoint contract. Move them to a new
compatible message or package version, or implement an explicit legacy
validation path that permits older checkpoints without fields 9–11 while
requiring them for newly produced checkpoints.

---

Outside diff comments:
In `@docs/research/session-store/index.md`:
- Around line 108-113: Update the documentation around the nested
product-directory description to match the actual product listings: either add
links for the missing second artifacts for Codex CLI, Gemini CLI, Goose, Grok
Build, Hermes, LangGraph, OpenCode, and T3 Code, or revise the claim so it only
states that products with multiple artifacts use nested directories.

In `@docs/research/session-store/products/crush/vs-session-events.md`:
- Around line 445-450: Update the documentation’s description of the default
cascade policy to identify orphan-child termination as a design target, not an
active guarantee. Clarify that CascadePolicy only defines the intended behavior
and that enforcement depends on the orphan-closure sweep being implemented,
deployed, and verified; preserve the existing discussion of the sweep’s current
absence.

In `@docs/research/session-store/products/letta/vs-session-events.md`:
- Around line 183-188: Update the ADR#0035 decision 8 or Non-Goal guidance
referenced by the session-store documentation to prohibit any directly writable
or authoritative derived context pointer, even when protected by OCC. State that
model-visible context remains a pure event-log fold; caches may only be advisory
and rebuildable, while all invariant-bearing transitions continue using the
existing OCC discipline.

In `@docs/research/session-store/products/mastra/vs-session-events.md`:
- Around line 174-177: The proposed repo-level check incorrectly requires raw
event readers to sort by fold-derived SessionOrdinal before folding, even though
that value is created only during the canonical fold. Revise the change to test
that the fold consumes canonical stream order and that derived projections
preserve the assigned SessionOrdinal; do not add query-time ordering or
independent sort keys for raw events.

In `@docs/research/session-store/products/pi/vs-session-events.md`:
- Around line 24-31: Qualify abbreviated repository citations with full
repository-relative paths. Update
docs/research/session-store/products/pi/vs-session-events.md lines 24-31 to
qualify repository.ts and jsonl-repo.ts, lines 36-42 to qualify the first
session-selector.ts reference, and lines 86-94 to qualify workspace.proto; make
the same workspace.proto qualification in
docs/research/session-store/products/void/vs-session-events.md lines 74-89 and
qualify execution_attempt_started.proto in
docs/research/session-store/products/zed/vs-session-events.md lines 141-150.
- Around line 74-80: The session-without-a-real-turn decision must not reuse
SessionHidden or SESSION_HIDDEN_REASON_UNSPECIFIED, since those represent
visibility and lifecycle semantics. Update the decision section to either
explicitly declare SessionStarted alone sufficient or define a separate typed
unused-session fact; preserve the documented additive-versus-documentation-only
outcome.

In `@docs/research/session-store/products/swe-agent/vs-session-events.md`:
- Around line 129-137: Update the paragraph describing terminal markers to
exclude SessionHidden, treating it only as a visibility tombstone. Limit
terminal-outcome claims and typed-reason-enum claims to SessionClosed,
SessionCancelled, and SessionFailed.
- Around line 345-350: Revise the retention conclusion in the discussion of
decision 7 to avoid treating SWE-agent’s lack of automatic cleanup as validation
of a keep-forever policy. Describe it as neutral evidence that the harness has
no deliberate retention contract, or that unbounded storage is the default when
retention is unspecified.

In `@docs/research/session-store/products/void/vs-session-events.md`:
- Around line 110-112: In the dossier conclusion sentence, remove the quotation
marks around the paraphrased “non-destructive rewind” wording, preserving the
existing attribution and link to “What this implies for our Session Store (our
inference).”

In `@docs/research/session-store/products/zed/vs-session-events.md`:
- Around line 110-118: Revise the whole-document overwrite discussion in the Zed
comparison so it explicitly acknowledges that a stale read can overwrite an
earlier concurrent update. Clarify that SQLite WAL mode and the busy-timeout
only serialize or delay lock contention, rather than providing application-level
compare-and-swap or stale-write protection, and preserve the contrast with the
per-command WRITE_PRECONDITION classification.
- Around line 384-401: Update the Zed cascade comparison around
ThreadsDatabase::delete_thread to remove the claim that it is effectively
atomic; describe the Mutex<Connection> walk as “serialized but not
crash-atomic,” consistent with the documented autocommit behavior and the
discussion at lines 581-588.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 46fda845-bbef-4b37-8542-7cef243ba43a

📥 Commits

Reviewing files that changed from the base of the PR and between ddbf489 and 2d8bc8c.

⛔ Files ignored due to path filters (2)
  • rsworkspace/crates/platform/trogonai-proto/src/gen/trogonai.session.sessions.v1alpha1.checkpoint.__view.rs is excluded by !**/gen/**
  • rsworkspace/crates/platform/trogonai-proto/src/gen/trogonai.session.sessions.v1alpha1.checkpoint.rs is excluded by !**/gen/**
📒 Files selected for processing (27)
  • .config/mise/tasks/github-actions/lint-adr-refs
  • docs/adr/0031-agent-implementation-and-session-plan.md
  • docs/adr/0035-session-store-decider-aggregate.md
  • docs/research/session-store/RESEARCH_PROMPT.md
  • docs/research/session-store/RESEARCH_PROMPT_COMPARISON.md
  • docs/research/session-store/backlog.md
  • docs/research/session-store/index.md
  • docs/research/session-store/products/aider/vs-session-events.md
  • docs/research/session-store/products/amazon-q/vs-session-events.md
  • docs/research/session-store/products/aws-strands/vs-session-events.md
  • docs/research/session-store/products/cline/vs-session-events.md
  • docs/research/session-store/products/continue/vs-session-events.md
  • docs/research/session-store/products/crush/vs-session-events.md
  • docs/research/session-store/products/google-adk/vs-session-events.md
  • docs/research/session-store/products/letta/vs-session-events.md
  • docs/research/session-store/products/mastra/vs-session-events.md
  • docs/research/session-store/products/openai-agents-sdk/vs-session-events.md
  • docs/research/session-store/products/openhands/vs-session-events.md
  • docs/research/session-store/products/pi/vs-session-events.md
  • docs/research/session-store/products/swe-agent/vs-session-events.md
  • docs/research/session-store/products/void/vs-session-events.md
  • docs/research/session-store/products/zed/vs-session-events.md
  • docs/research/session-store/synthesis.md
  • proto/trogonai/session/sessions/v1alpha1/checkpoint.proto
  • rsworkspace/crates/platform/trogonai-proto/src/session/sessions/codec/tests.rs
  • rsworkspace/crates/platform/trogonai-proto/src/session/sessions/validate.rs
  • rsworkspace/crates/platform/trogonai-proto/src/session/sessions/validate/tests.rs
🚧 Files skipped from review as they are similar to previous changes (8)
  • docs/research/session-store/products/openhands/vs-session-events.md
  • rsworkspace/crates/platform/trogonai-proto/src/session/sessions/validate/tests.rs
  • docs/research/session-store/RESEARCH_PROMPT_COMPARISON.md
  • docs/research/session-store/products/continue/vs-session-events.md
  • docs/research/session-store/products/cline/vs-session-events.md
  • docs/research/session-store/products/aws-strands/vs-session-events.md
  • docs/research/session-store/products/openai-agents-sdk/vs-session-events.md
  • docs/adr/0035-session-store-decider-aggregate.md

Comment thread proto/trogonai/session/sessions/v1alpha1/checkpoint.proto
…d field

Reviewers keep reading the version suffix as the licence and flagging these additions as breaking; the licence is actually the absence of a deployed producer, and that is the fact a future reviewer needs stated, since buf breaking cannot see it.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 4, 2026 19:53

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/adr/0035-session-store-decider-aggregate.md`:
- Around line 678-698: Clarify the checkpoint evidence contract so first-wins
selection does not reject and discard later conflicting evidence before append.
Define conflicting evidence as separately retained fold data with audit
visibility, or specify the separate audit sink and key it by complete evidence;
update both the ownership summary and the corresponding checkpoint rules to
match.
- Around line 128-138: The ADR and proto comment currently define conflicting
compatibility gates for LEGACY_REQUIRED fields. Align the guidance to use one
rule, preferably the first deployed producer described in the ADR: retain that
producer-based rule in docs/adr/0035-session-store-decider-aggregate.md lines
128-138, and remove or revise the package-promotion condition in
proto/trogonai/session/sessions/v1alpha1/events.proto lines 54-61 to match;
update both sites as needed.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 235d1139-fc58-4a39-8c5c-0425a5710697

📥 Commits

Reviewing files that changed from the base of the PR and between 2d8bc8c and 40fdaaf.

📒 Files selected for processing (2)
  • docs/adr/0035-session-store-decider-aggregate.md
  • proto/trogonai/session/sessions/v1alpha1/events.proto

Comment on lines +128 to +138
Within `v1alpha1`, a field may still be added as `LEGACY_REQUIRED`, and the
reason it is admissible is narrower than the version suffix: no deployed producer
has written these events yet. A new required field breaks by having a current
validator reject already-stored bytes, and there are no stored bytes until a
producer ships. The gate is therefore the first deployed producer, not the
promotion to `v1` -- a producer shipping on `v1alpha1` would close this window
early, and from then on a new required field needs a new package version. Note
that `buf breaking` under `WIRE_JSON` passes either way, since it compares fields
present on both sides and a field new to one side is not among them; the check
here is a review obligation, not a mechanical one.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Use one LEGACY_REQUIRED compatibility gate.

The ADR uses the first deployed producer as the gate. The proto comment also uses package promotion. Align both files so required-field evolution cannot follow conflicting rules.

  • docs/adr/0035-session-store-decider-aggregate.md#L128-L138: keep the producer-based rule, or update it if promotion is intentionally a gate.
  • proto/trogonai/session/sessions/v1alpha1/events.proto#L54-L61: remove or retain the promotion condition to match the ADR.
📍 Affects 2 files
  • docs/adr/0035-session-store-decider-aggregate.md#L128-L138 (this comment)
  • proto/trogonai/session/sessions/v1alpha1/events.proto#L54-L61
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/adr/0035-session-store-decider-aggregate.md` around lines 128 - 138, The
ADR and proto comment currently define conflicting compatibility gates for
LEGACY_REQUIRED fields. Align the guidance to use one rule, preferably the first
deployed producer described in the ADR: retain that producer-based rule in
docs/adr/0035-session-store-decider-aggregate.md lines 128-138, and remove or
revise the package-promotion condition in
proto/trogonai/session/sessions/v1alpha1/events.proto lines 54-61 to match;
update both sites as needed.

Source: Learnings

Comment on lines +678 to +698
`decide` and `evolve` own every history-dependent relationship, and which of the
two owns a given one follows from whether its command reads state at all.
`decide` owns the relationships whose command declares a state read in the
command matrix: in-session ordinal existence and compaction ordering, exact
attempt lineage, first-wins checkpoint evidence selection, complete
restored-checkpoint equality with that evidence, continued effectiveness of
`covers_through` after rewind, and equality with the stored Session plan. Those
are checked before the append and rejected if they fail.
`evolve` owns the relationships carried by commuting facts whose state read is
`none` -- the assistant start/completion id and model joins, and the tool
lifecycle joins. Those append under `Any` with nothing to check against, so they
are fold rules rather than append-time rejections: an unmatched or disagreeing
fact lands on the log and is surfaced by a projection flag, exactly as the `Any`
fold rules above prescribe.
This split prevents a local payload validator from claiming facts that only
the command context or folded history can prove, and it keeps the command
matrix honest: a command whose state read is `none` cannot enforce a join, so
the matrix states its join as the fold rule it is.

Every unset oneof, unspecified enum, and malformed same-event shape above is
rejected before append, never persisted and reconciled later.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Define how conflicting checkpoint evidence is retained.

Lines 682-685 place first-wins checkpoint selection among checks that reject before append. The checkpoint contract also requires complete-evidence identity and audit visibility for conflicting evidence. Rejecting the later evidence before append would discard that conflict. Define first-wins as fold selection over separately retained evidence, or document the separate audit sink and key it by the complete evidence.

Also applies to: 1054-1062

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/adr/0035-session-store-decider-aggregate.md` around lines 678 - 698,
Clarify the checkpoint evidence contract so first-wins selection does not reject
and discard later conflicting evidence before append. Define conflicting
evidence as separately retained fold data with audit visibility, or specify the
separate audit sink and key it by complete evidence; update both the ownership
summary and the corresponding checkpoint rules to match.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants