Skip to content

Conversation

@flyingrobots
Copy link
Owner

Closes #206

  • Adds SPEC-0003 (DPO concurrency litmus) mapping DPO vocabulary → warp-core mechanisms.
  • Adds a warp-core litmus test suite covering: commuting/independent, conflicting/critical-pair-style reject, and overlapping-scope-but-safe (disjoint ports).
  • Updates execution-plan + decision-log (Docs Guard).

Validation:

  • cargo fmt --all
  • cargo test -p warp-core
  • cargo clippy -p warp-core --all-targets -- -D warnings -D missing_docs

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 3, 2026

Summary by CodeRabbit

  • Tests

    • Added a DPO concurrency litmus test suite with four cases (commuting/independent, deterministic conflict rejection, overlapping-scope with disjoint ports) and helpers to verify terminal digests and receipt outcomes.
  • Documentation

    • Added SPEC-0003 (DPO concurrency litmus v0) and updated the execution plan and decision log to reflect planning hygiene and next steps.

✏️ Tip: You can customize this high-level summary in your review settings.

Walkthrough

Adds a DPO concurrency litmus test suite and supporting documentation: new Rust tests exercise commuting, conflicting, and overlapping-but-composable rule pairs via terminal-digest and receipt assertions; specification SPEC-0003 and planning/execution docs updated to track and prioritize issue #206. No public API changes.

Changes

Cohort / File(s) Summary
Test Implementation
crates/warp-core/tests/dpo_concurrency_litmus.rs
New Rust litmus test suite. Adds a test-specific engine config, two litmus rewrite rules (litmus_port_read_0, litmus_port_read_1), helpers for footprint/digest/ID handling, and four tests covering commuting independent pair, deterministic conflicting pair rejection, overlapping-scope/disjoint-ports composability, plus scaffolding to build engines, insert nodes/attachments, commit with receipts, and compare terminal digests.
Specification
docs/spec/SPEC-0003-dpo-concurrency-litmus-v0.md
New SPEC describing DPO concurrency litmus v0: scope, pragmatic assumptions, mapping to warp-core concepts, three litmus families, terminal-digest definition, expected engine behavior on overlaps, and pointer to the Rust test suite.
Spec Reference Update
docs/spec-mwmr-concurrency.md
Adds a reference to SPEC-0003 in Phase 3 references (documentation-only).
Planning & Execution
docs/decision-log.md, docs/execution-plan.md
Adds 2026-01-03 planning hygiene / M2.1 kickoff entries and pivots execution plan toward issue-driven work; documents initiating issue #206 and updates Next Up queue and outcomes (documentation-only).

Sequence Diagram(s)

(Skipped — changes are test additions and documentation; no new multi-component control flow requiring visualization.)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

Two rewrite rules step into the fray,
Digests whisper which orders may stay.
Commute or clash, receipts will decide —
Tests lock outcomes, spec as our guide. ✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed Title clearly summarizes the main change: adding DPO concurrency litmus specifications and tests for M2.1 milestone.
Description check ✅ Passed Description directly addresses the changeset: spec addition, litmus test suite, and documentation updates with validation steps.
Linked Issues check ✅ Passed PR comprehensively fulfills #206 requirements: SPEC-0003 mapping DPO concepts to warp-core, litmus tests covering commuting/conflicting/overlapping cases, and documentation updates.
Out of Scope Changes check ✅ Passed All changes are directly scoped to #206: spec work, test suite, and execution plan/decision log updates remain within stated objectives.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch echo/dpo-concurrency-206

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 and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8082bbb and 0096981.

📒 Files selected for processing (5)
  • crates/warp-core/tests/dpo_concurrency_litmus.rs
  • docs/decision-log.md
  • docs/execution-plan.md
  • docs/spec-mwmr-concurrency.md
  • docs/spec/SPEC-0003-dpo-concurrency-litmus-v0.md
🧰 Additional context used
📓 Path-based instructions (1)
**/*.rs

📄 CodeRabbit inference engine (AGENTS.md)

**/*.rs: Run cargo clippy --all-targets -- -D missing_docs before every PR; CI will expect a zero-warning, fully documented surface
Every source file must start with exactly the SPDX header: // SPDX-License-Identifier: Apache-2.0 and // © James Ross Ω FLYING•ROBOTS <https://github.com/flyingrobots>

Files:

  • crates/warp-core/tests/dpo_concurrency_litmus.rs
🧠 Learnings (6)
📓 Common learnings
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Tests and benchmarks are mandatory for runtime changes once the harness exists
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Avoid introducing sources of nondeterminism without a mitigation plan in runtime code
📚 Learning: 2026-01-03T02:01:23.896Z
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Update `docs/execution-plan.md` and `docs/decision-log.md` when a PR touches non-doc code

Applied to files:

  • docs/decision-log.md
  • docs/execution-plan.md
📚 Learning: 2026-01-03T02:01:23.897Z
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.897Z
Learning: Start each session by updating 'Today's Intent' in `docs/execution-plan.md` and capture milestones, blockers, and decisions

Applied to files:

  • docs/decision-log.md
  • docs/execution-plan.md
📚 Learning: 2026-01-03T02:01:23.896Z
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Avoid introducing sources of nondeterminism without a mitigation plan in runtime code

Applied to files:

  • docs/decision-log.md
  • docs/spec/SPEC-0003-dpo-concurrency-litmus-v0.md
  • crates/warp-core/tests/dpo_concurrency_litmus.rs
📚 Learning: 2026-01-03T02:01:23.896Z
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Tests and benchmarks are mandatory for runtime changes once the harness exists

Applied to files:

  • crates/warp-core/tests/dpo_concurrency_litmus.rs
📚 Learning: 2026-01-03T02:01:23.896Z
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/**/*.rs : Public APIs across crates (`warp-core`, `warp-ffi`, `warp-wasm`, etc.) must carry rustdoc comments that explain intent, invariants, and usage

Applied to files:

  • crates/warp-core/tests/dpo_concurrency_litmus.rs
🧬 Code graph analysis (1)
crates/warp-core/tests/dpo_concurrency_litmus.rs (10)
crates/warp-core/src/demo/ports.rs (1)
  • port_rule (94-112)
crates/warp-core/src/payload.rs (1)
  • encode_motion_atom_payload (98-103)
crates/warp-core/src/ident.rs (2)
  • make_node_id (61-66)
  • make_type_id (53-58)
crates/warp-core/src/warp_state.rs (1)
  • store (61-63)
crates/warp-core/src/footprint.rs (1)
  • pack_port_key (206-214)
crates/warp-core/src/demo/motion.rs (1)
  • motion_rule (148-160)
crates/warp-core/src/tick_patch.rs (1)
  • policy_id (361-363)
crates/warp-core/src/engine_impl.rs (1)
  • apply (283-290)
crates/warp-geom/src/temporal/manifold.rs (1)
  • entity (28-30)
crates/warp-core/src/receipt.rs (1)
  • entries (55-57)
🔇 Additional comments (15)
docs/spec-mwmr-concurrency.md (1)

117-117: LGTM — cross-reference is consistent with the PR scope.

The reference addition aligns with the new SPEC-0003 document introduced in this PR.

docs/spec/SPEC-0003-dpo-concurrency-litmus-v0.md (2)

1-5: LGTM — spec document is well-structured and honest about scope.

The "low ceremony" framing (line 13) is appropriate — this pins executable evidence without overclaiming categorical DPO compliance. The mapping table (lines 39–44) is crisp.


46-59: Litmus taxonomy aligns with the implemented tests.

The three families map 1:1 to dpo_litmus_commuting_independent_pair, dpo_litmus_conflicting_pair_is_deterministically_rejected, and dpo_litmus_overlapping_scope_disjoint_ports_are_composable. No drift detected.

crates/warp-core/tests/dpo_concurrency_litmus.rs (8)

1-8: SPDX header and module doc are correct.

Header matches the required format per coding guidelines. Module doc explains the litmus test purpose without fluff.


10-14: Imports are tight and used.

No glob imports, no dead weight. Acceptable.


16-24: Rule ID derivation follows the established pattern.

Domain separation (b"rule:") matches port_rule() convention. No complaints.


26-30: Intentionally trivial matcher/executor.

The no-op executor is correct — these litmus rules exist to exercise footprint conflict mechanics, not to mutate state. The matcher's existence check is sufficient for the test scope.


32-48: Footprints correctly model disjoint boundary ports.

Port 0 vs port 1 with matching direction (dir_in=true) ensures the overlapping-scope test actually exercises disjoint b_in sets. The defensive is_some() guard is fine for test code.


50-76: Rule constructors are boilerplate-heavy but clear.

The duplication between litmus_port_read_0_rule and litmus_port_read_1_rule is tolerable for test code. ConflictPolicy::Abort ensures conflicts surface in receipts rather than being silently retried.


78-94: Engine setup is clean.

Proper ? propagation, registers all required rules. No dead code, no magic.


96-116: Digest assertion helper is comprehensive.

All Snapshot fields relevant to determinism are compared with descriptive failure messages. This matches the "terminal digest" definition in SPEC-0003 (lines 63–68).

docs/decision-log.md (2)

9-9: Decision log entry is correctly formatted.

Table row follows existing schema. Rationale ("plan drift causes duplicate triage") and consequence ("issue-driven again") are concrete.


117-121: Expanded entry provides sufficient context.

The "Next" item aligns with the actual deliverables in this PR (spec note + litmus tests). No contradictions with the PR contents.

docs/execution-plan.md (2)

38-58: Today's Intent accurately reflects PR deliverables.

Evidence block (lines 51–53) points to the actual artifacts created: SPEC-0003-dpo-concurrency-litmus-v0.md and dpo_concurrency_litmus.rs. Status is correctly marked DONE.


1056-1060: Next Up Queue is now issue-driven.

The shift from merge-train workflow to M2.1: DPO concurrency theorem coverage (issue #206) as item 1 aligns with the decision-log entry. No stale items detected.

@flyingrobots
Copy link
Owner Author

✅ Addressed in commit 8a7667f

Acked review threads:

  • discussion_r2658683068
  • discussion_r2658683069
  • discussion_r2658683070

@flyingrobots
Copy link
Owner Author

@coderabbitai Please re-review the latest commit 8a7667f and submit a new approval to update the review status.

@flyingrobots
Copy link
Owner Author

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 3, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0096981 and 8a7667f.

📒 Files selected for processing (1)
  • crates/warp-core/tests/dpo_concurrency_litmus.rs
🧰 Additional context used
📓 Path-based instructions (1)
**/*.rs

📄 CodeRabbit inference engine (AGENTS.md)

**/*.rs: Run cargo clippy --all-targets -- -D missing_docs before every PR; CI will expect a zero-warning, fully documented surface
Every source file must start with exactly the SPDX header: // SPDX-License-Identifier: Apache-2.0 and // © James Ross Ω FLYING•ROBOTS <https://github.com/flyingrobots>

Files:

  • crates/warp-core/tests/dpo_concurrency_litmus.rs
🧠 Learnings (4)
📓 Common learnings
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Tests and benchmarks are mandatory for runtime changes once the harness exists
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Avoid introducing sources of nondeterminism without a mitigation plan in runtime code
📚 Learning: 2026-01-03T02:01:23.896Z
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Tests and benchmarks are mandatory for runtime changes once the harness exists

Applied to files:

  • crates/warp-core/tests/dpo_concurrency_litmus.rs
📚 Learning: 2026-01-03T02:01:23.896Z
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Avoid introducing sources of nondeterminism without a mitigation plan in runtime code

Applied to files:

  • crates/warp-core/tests/dpo_concurrency_litmus.rs
📚 Learning: 2026-01-03T02:01:23.896Z
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/**/*.rs : Public APIs across crates (`warp-core`, `warp-ffi`, `warp-wasm`, etc.) must carry rustdoc comments that explain intent, invariants, and usage

Applied to files:

  • crates/warp-core/tests/dpo_concurrency_litmus.rs
🔇 Additional comments (10)
crates/warp-core/tests/dpo_concurrency_litmus.rs (10)

1-9: LGTM!

SPDX header exactly matches the required format. Module-level documentation is concise and clearly states the invariants under test: enqueue-order independence for commuting cases and deterministic rejection for conflicts.


10-14: LGTM!

Imports are clean and tightly scoped to exactly what's needed.


26-30: LGTM!

Minimal matcher (existence check) and no-op executor are appropriate for footprint-only litmus tests. The underscore-prefixed parameters correctly suppress unused warnings.


32-48: LGTM!

Footprint functions correctly construct read sets with disjoint boundary port keys. The duplication is tolerable for test clarity—future maintainers can immediately see the port index difference without tracing through a parameterized helper.


50-76: LGTM, but verify ConflictPolicy::Abort is intentional.

The litmus rules use ConflictPolicy::Abort. This is fine if abort-on-conflict is the desired semantics for these tests, but if the litmus suite is meant to test the scheduler's conflict resolution (winner selection), ensure this policy doesn't short-circuit the mechanism you're testing.


78-94: LGTM!

Engine construction is clean: root node inserted, four rules registered. Error propagation via Result is correct.


96-116: LGTM!

Comprehensive equality check across all digest fields with clear failure messages. This is thorough—no digest component can silently diverge.


118-200: LGTM! Past review concern addressed.

Both receipt_a and receipt_b entries are now explicitly verified for length and disposition. The test correctly exercises the commuting-pair invariant: disjoint footprints → both applied, terminal digests identical regardless of enqueue order.


202-283: LGTM! Past review concerns addressed.

The conflict surface is now documented (lines 207–209): both rules write the same α-plane attachment slot. The test verifies structural equality of a_entries and b_entries (line 278), which is stricter than digest comparison alone. Exactly-one-applied, exactly-one-rejected invariant is correctly asserted.


285-346: LGTM! Past review concern addressed.

Receipt_b entries are now verified for structural equality (line 340–342). The test correctly exercises the overlapping-scope-but-composable case: shared n_read (read-only) and disjoint b_in ports yield no conflict—both candidates admitted, terminal digests identical.

coderabbitai[bot]
coderabbitai bot previously approved these changes Jan 3, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 3, 2026

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash

# Get details about commit 8a7667f
echo "=== COMMIT DETAILS ==="
git log --format=fuller -n 1 8a7667f

echo -e "\n=== FILES CHANGED IN COMMIT ==="
git show --stat 8a7667f

echo -e "\n=== FULL DIFF OF COMMIT ==="
git show 8a7667f

Length of output: 3642


🏁 Script executed:

#!/bin/bash

# Get the full test file to understand context
echo "=== FULL TEST FILE ==="
cat crates/warp-core/tests/dpo_concurrency_litmus.rs

echo -e "\n=== CHECK TickReceiptDisposition DEFINITION ==="
rg -n "TickReceiptDisposition" --type rust -A 5 -B 2

echo -e "\n=== CHECK IF IT DERIVES EQ/PARTIALEQ ==="
ast-grep --pattern 'pub enum TickReceiptDisposition {
  $$$
}'

Length of output: 25983


🏁 Script executed:

#!/bin/bash

# Check TickReceiptEntry definition and derives
echo "=== CHECK TickReceiptEntry DEFINITION ==="
ast-grep --pattern 'pub struct TickReceiptEntry {
  $$$
}'

echo -e "\n=== GET FULL STRUCT WITH DERIVES ==="
rg -n "pub struct TickReceiptEntry" --type rust -A 10 -B 3

echo -e "\n=== CHECK IF NodeKey DERIVES EQ ==="
rg -n "pub struct NodeKey" --type rust -A 5 -B 1

echo -e "\n=== VERIFY Hash TYPE DERIVES EQ ==="
rg -n "pub type Hash" --type rust -C 2

Length of output: 3431


@flyingrobots: Reviewing commit 8a7667f with MAXIMUM SCRUTINY engaged.

Analysis:

The additions systematically strengthen determinism validation by verifying receipt structure equality beyond digest equality—catching an entire class of potential bugs where digests might match but actual execution outcomes differ. This is a significant defensive improvement.

Strengths:

  1. Multi-level validation: Terminal digest + receipt digest + receipt structure equality provides defense-in-depth for determinism claims
  2. Type-safety verified: All structural comparisons are valid (TickReceiptEntry derives Eq at receipt.rs:108)
  3. Comment quality: Lines 206-209 explaining the conflict surface (both rules writing the same α-plane attachment slot) is EXCELLENT documentation
  4. Clear failure messages: Every assertion includes specific expected behavior
  5. Exceeds spec: Goes beyond SPEC-0003 requirements by validating structural equality

Pedantic observation (non-blocking):

The commuting case (lines 183-198) validates dispositions via .all(|e| e.disposition == Applied) but doesn't include the assert_eq!(a_entries, b_entries, "receipt structure must be order-independent") pattern used in the conflicting (line 277) and overlapping (line 340) cases. While the existing assertions are comprehensive and logically sufficient, adding structural equality to all three cases would provide perfect symmetry and one more layer of confidence that canonical ordering is truly order-independent.

Verdict:

The commit is CORRECT and represents a substantial quality improvement to determinism validation. The asymmetry noted above is truly minor—the existing .all() checks are actually MORE explicit about expected behavior than blind structural comparison.

Approving. These assertions are exactly the kind of defense-in-depth that separates production-grade determinism claims from wishful thinking.


🧠 Learnings used
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Tests and benchmarks are mandatory for runtime changes once the harness exists

Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Avoid introducing sources of nondeterminism without a mitigation plan in runtime code
✅ Actions performed

Comments resolved and changes approved.

Signed-off-by: James Ross <james@flyingrobots.dev>
@flyingrobots flyingrobots merged commit 70b9d51 into main Jan 3, 2026
19 of 20 checks passed
@flyingrobots flyingrobots deleted the echo/dpo-concurrency-206 branch January 3, 2026 07:41
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

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

⚠️ Outside diff range comments (1)
docs/execution-plan.md (1)

60-67: Duplicate/redundant entry structure for PR #213.

Lines 60–67 repeat PR #213 context with the same scope/outcome, creating a confusing timeline where the same PR is described twice with slightly different framing (first as "no open PRs remained," now as "merge cleanly by…"). This violates the DRY principle and suggests either a copy-paste artifact or incomplete consolidation during a prior merge/rebase. Consolidate into a single entry for PR #213 with a unified narrative: goal, scope, exit criteria, and evidence (commit hashes). If there were multiple fix rounds, use a single entry with sub-bullets for each round rather than duplicate top-level entries.

📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8a7667f and c023e48.

📒 Files selected for processing (2)
  • docs/decision-log.md
  • docs/execution-plan.md
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Tests and benchmarks are mandatory for runtime changes once the harness exists
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Avoid introducing sources of nondeterminism without a mitigation plan in runtime code
📚 Learning: 2026-01-03T02:01:23.897Z
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.897Z
Learning: Start each session by updating 'Today's Intent' in `docs/execution-plan.md` and capture milestones, blockers, and decisions

Applied to files:

  • docs/execution-plan.md
  • docs/decision-log.md
📚 Learning: 2026-01-03T02:01:23.896Z
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Update `docs/execution-plan.md` and `docs/decision-log.md` when a PR touches non-doc code

Applied to files:

  • docs/execution-plan.md
  • docs/decision-log.md
📚 Learning: 2026-01-03T02:01:23.896Z
Learnt from: CR
Repo: flyingrobots/echo PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-03T02:01:23.896Z
Learning: Applies to packages/echo-core/**/*.rs : Avoid introducing sources of nondeterminism without a mitigation plan in runtime code

Applied to files:

  • docs/decision-log.md
🔇 Additional comments (2)
docs/execution-plan.md (2)

38-53: Evidence section references files not available in PR review context.

Lines 52–53 claim evidence in docs/spec/SPEC-0003-dpo-concurrency-litmus-v0.md and crates/warp-core/tests/dpo_concurrency_litmus.rs, but these files are not provided in this code review. Cannot verify:

  • Whether SPEC-0003 adequately documents the DPO concurrency mapping (footprints, scheduler independence checks, etc.) per PR objectives,
  • Whether dpo_concurrency_litmus.rs actually contains the three promised test cases (commuting, conflicting, overlapping),
  • Whether test assertions match the stated outcomes (terminal digest checks, receipt structure equality, etc.).

Recommendation: Include the actual spec and test files in the review context, or acknowledge in the execution-plan entry that evidence is pending code review and cross-link to the PR/branch where tests are available. As-is, this entry claims completion without reviewable artifacts.


38-53: This review comment is based on a misreading of the actual execution-plan content.

The Outcome section (line 50) explicitly states "litmus tests (commuting vs conflicting vs overlapping-but-safe)"—the exact text shown in your code snippet. The three test cases are all present in dpo_concurrency_litmus.rs:

  1. dpo_litmus_commuting_independent_pair() (lines 119–200) — independent/commuting pair
  2. dpo_litmus_conflicting_pair_is_deterministically_rejected() (lines 203–283) — conflicting pair
  3. dpo_litmus_overlapping_scope_disjoint_ports_are_composable() (lines 286–346) — overlapping-but-safe case

The spec file SPEC-0003-dpo-concurrency-litmus-v0.md (lines 46–59) similarly documents all three case families. No gap exists.

Likely an incorrect or invalid review comment.

Comment on lines +9 to 10
| 2026-01-03 | Planning hygiene + M2.1 kickoff | Refresh `docs/execution-plan.md` to reflect current GitHub state and begin issue #206 (DPO concurrency litmus: spec note + tests). | The execution plan had drifted (closed issues and PR-queue work still marked as active), which wastes triage time. Issue #206 is a leverage point: it turns DPO concurrency claims into pinned, executable cases. | The active frontier is now issue-driven again, and #206 work proceeds as a single-purpose branch with deterministic litmus tests + a small spec note. |
| 2026-01-03 | CI: CodeRabbit merge gate | Remove the `PR Merge Gate / CodeRabbit approval required` workflow and treat CodeRabbit approval as a procedural merge requirement instead of a racing status check. | The gate job commonly runs before CodeRabbit can submit a review, producing expected failures and stale red checks; it adds noise without increasing correctness. | PR checks are less noisy; CodeRabbit approval remains required by policy/procedure rather than a flaky “must-pass” status. (Tracking: GitHub issue #248.) |
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Missing explicit evidence links in decision-log entry.

The 2026-01-03 M2.1 decision captures rationale and consequence but omits file references (SPEC-0003-dpo-concurrency-litmus-v0.md, crates/warp-core/tests/dpo_concurrency_litmus.rs). Per the retrieved learning ("record milestones, blockers, and decisions"), including the concrete deliverable names here keeps triage deterministic and makes it trivial to locate the artifacts 12 months from now. The execution-plan already has these links; consistency demands the decision-log also carry them as inline parenthetical references or footnote.

🤖 Prompt for AI Agents
In docs/decision-log.md around lines 9 to 10, the 2026-01-03 M2.1 decision is
missing explicit evidence links to the concrete deliverables; add inline
parenthetical references (or a footnote) identifying
SPEC-0003-dpo-concurrency-litmus-v0.md and
crates/warp-core/tests/dpo_concurrency_litmus.rs (and optionally the related
issue/PR numbers), matching the same link/format style used in
docs/execution-plan.md so readers can jump directly to the artifacts.

Comment on lines +55 to +58
> 2026-01-03 — Merge-train: oldest open PRs (#220#227#242) (DONE)
- Outcome: no open PRs remained by the end of the merge-train; the last merges landed on `main` (see merge commit `8082bbb`).
- Next: treat subsequent work as issue-driven (one branch per issue), starting with #206.
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

PR #213 entry conflates merge outcome with a procedural policy decision.

Lines 55–58 describe "no open PRs remained" and "treat subsequent work as issue-driven," but these are two distinct events: (1) a concrete outcome of a specific PR merge, and (2) a governance/process change. The outcome statement is vague (which commits merged? where are the hashes?) and lacks evidence. The policy restatement ("treat subsequent work as issue-driven") is a principle, not a consequence of PR #213. Recommend: split into two entries—one for the merge completion (with commit hashes) and one for the process policy adoption (under a separate planning/governance decision). Alternatively, clearly scope this entry to "we closed the merge-train" and defer the policy rationale to a dedicated governance entry.

🤖 Prompt for AI Agents
In docs/execution-plan.md around lines 55 to 58, the PR #213 note currently
mixes a merge outcome with a policy decision; split them into two distinct
entries: one concise merge-train outcome that records which commits/merge hashes
landed (add the specific merge commit hashes and any relevant commit messages or
links), and a separate governance/planning entry that states the new
"issue-driven" workflow decision and rationale; alternatively, scope this line
to only confirm the merge-train closure and move the policy sentence into a new
governance section with its own date and reference.

Comment on lines +1061 to +1064
1. M2.1: DPO concurrency theorem coverage (issue #206)
2. Demo 2: Splash Guy docs course modules (issue #226)
3. Demo 3: Tumble Tower Stage 1 physics (issue #232)
4. TT1 follow-ons: dt policy / retention / merge semantics / capabilities (issues #243#246)
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Next Up Queue prioritization lacks context or blockers.

The reprioritized queue (M2.1 → Demo 2 → Demo 3 → TT1 → ECS) provides a linear order but no justification, blocking criteria, or dependencies. Per the learnings ("capture milestones, blockers, and decisions"), the queue should note:

  • Any hard blockers (e.g., Demo 2 blocked on M2.1 completion?),
  • Why items were reordered (relative importance, new discoveries, external constraints?),
  • Whether Demo 2/3 and TT1 are newly added or promoted from the backlog.

As written, the queue looks like a snapshot taken at a moment in time with no guardrails against silent drift. Add brief context comments or cross-references to GitHub issues/milestones so future Codex knows the reasoning.

🤖 Prompt for AI Agents
docs/execution-plan.md around lines 1061 to 1064: the reprioritized next-up
queue lists items in order but lacks context, blockers, and rationale; update
the list to annotate each entry with (1) any hard blockers or dependencies
(e.g., link to issue/milestone that blocks it), (2) the reason for its new
priority (e.g., impact, customer request, discovery, resource availability), and
(3) whether the item was promoted from backlog or newly added, by appending
brief parenthetical notes and cross-references to GitHub issues/milestones so
future readers can understand the decisions and know where to find detailed
discussion.

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.

M2.1: DPO concurrency theorem coverage (critical pair / rule composition litmus tests)

2 participants