Skip to content

fix: harden replaying CLI checkpoints - #70

Merged
shivros merged 1 commit into
mainfrom
runner/COD-548-cli-replay-acceptance
Oct 7, 2026
Merged

shivros merged 1 commit into
mainfrom
runner/COD-548-cli-replay-acceptance

Conversation

@shivros

@shivros shivros commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Repair incremental iris watch SSE framing for complete CR-only frames, split CRLF (including empty chunks), and preserve frame-local cursor IDs.
  • Require object-shaped checkpoint payloads and reject malformed/non-object/missing/empty-ID frames without emitting or echoing payload data.
  • Harden the compiled CLI replay acceptance against the real loopback router with an independent wire keeper, gated replay-window filter checks, exact full-payload/ID assertions, bounded cleanup, and watch --help discovery.
  • Record the residual CLI acceptance evidence in the living OpenSpec task ledger; frozen proposal/design and generated artifacts are unchanged.

Verification

  • cargo test --locked -p iris-cli watch::tests — 24 passed.
  • cargo test --locked -p iris-cli --test replay_cli — 1 passed.
  • Compiled replay acceptance repeated 100 times — all 100 passed.
  • cargo build --locked --all-targets — passed.
  • cargo test --locked --all-targets — passed.
  • cargo clippy --locked --all-targets -- -D warnings — passed.
  • cargo fmt --all -- --check — passed.
  • cargo run --locked -p iris-codegen --bin iris-codegen -- check — passed.
  • git diff --check — passed.

The only recurring output is the existing non-failing imap-proto future-incompatibility warning.

Scope boundaries

No server broker, API schema, generated artifact, dependency, authentication, deployment, release, or live-provider behavior changed. The four committed generated artifacts and frozen OpenSpec proposal/design/spec files remain unchanged.

Review status

The dual review panel was run against the exact branch diff. Reviewer A's initial reconnect-flakiness finding and Reviewer B's empty-chunk parser finding were fixed, then the targeted/full gates and 100-run stress validation were rerun. Reviewer B's final confirmation approved the updated implementation; the remaining review notes are bounded test-fixture observations with no correctness blocker.

@shivros

shivros commented Oct 6, 2026

Copy link
Copy Markdown
Contributor Author

🤖 Automated Review Panel

Reviewer A — initial review

BLOCK finding (resolved before handoff): the first replay fixture observed event-request queries only after next.run completed and killed the first compiled consumer before server-side SSE teardown was synchronized, which produced a reconnect timeout under repeated execution. The fixture now signals query arrival before handler execution, gates reconnect registration while replay-window mismatches are injected, keeps the original compiled consumer alive until its matching replay/live outputs are drained, and then performs bounded cleanup. The exact replay acceptance was rerun 100 times with all 100 passes, followed by the full locked workspace gates.

MINOR findings (resolved): empty id: and malformed checkpoint JSON now have explicit regression coverage; split-CRLF state is preserved across empty chunks.

Reviewer B — final confirmation

APPROVE. Confirmed CR-only/split-CRLF handling, object-only checkpoint validation with generic diagnostics, authoritative keeper observations, replay-window provider/thread filtering, equal-body distinct identity/order checks, gated registration, and controlled lifecycle cleanup.

Minor observation: Probe::send uses bounded notification-based draining; the fixture remains deterministic under the 100-run stress loop and all required gates pass.

@shivros
shivros marked this pull request as ready for review October 6, 2026 15:16
@shivros

shivros commented Oct 6, 2026

Copy link
Copy Markdown
Contributor Author

CI note — inherited Clippy baseline

GitHub run 37486072985 has six successful checks and one failing check: Clippy. Its log reports Rust 1.99 clippy::double_must_use errors from existing async_trait interfaces in iris-core/src/ingest.rs, crates/iris-core/src/provider.rs, and crates/iris-core/src/storage.rs; none of those files are changed by this PR.

The exact current main commit 516fae01f146455e3e98007235129ca660dd5322 has the same failing Clippy check while its other required checks pass. Local locked Clippy passes for this branch. This is inherited baseline CI debt, separately tracked as COD-562; PR #70 remains open for review and is not being merged automatically.

@shivros
shivros merged commit 9a01a0f into main Oct 7, 2026
6 of 7 checks passed
@shivros
shivros deleted the runner/COD-548-cli-replay-acceptance branch October 7, 2026 00:53
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.

1 participant