Skip to content

CR-01: Separate checkpoints from Echo anchor authority - #265

Merged
flyingrobots merged 11 commits into
mainfrom
causal-rope-cr-01
Jul 15, 2026
Merged

CR-01: Separate checkpoints from Echo anchor authority#265
flyingrobots merged 11 commits into
mainfrom
causal-rope-cr-01

Conversation

@flyingrobots

@flyingrobots flyingrobots commented Jul 6, 2026

Copy link
Copy Markdown
Owner

Summary

  • separate Jim-owned RopeCheckpointFact declarations from optional RopeCheckpointAnchoredFact associations
  • remove Jim-local Echo anchor, digest, receipt, basis, retention-policy, and authority fabrication
  • require an explicitly injected anchor-admission capability and fail closed with typed obstructions when it is absent or fails
  • validate and snapshot Jim-owned checkpoint/materialization semantics before capability invocation, then snapshot returned Echo evidence and retain its identities as opaque references
  • accept adapter evidence only after a literal boolean success result; discard all adapter-owned extra properties
  • keep the deterministic fake under spec/support with explicit injection and no Echo-authority claim
  • frame Jim-owned checkpoint and association identities so opaque fields containing separators cannot collide

Slices

Validation

  • npm run check: 1,257 tests; 1,244 passed; 13 intentionally skipped; 0 failed
  • npm run quality: 381 files; regressions: none
  • npx markdownlint-cli2 docs/design/0149-graph-backed-rope-runtime-discovery.md: 0 errors

Transitional boundary

The TypeScript capability is a narrow, single-operation seam, not the permanent Jim/Echo protocol. Once Echo can install and invoke the relevant generated Edict package, the generated Edict client replaces this port operation by operation. This PR deliberately does not implement that migration or copy Edict/Echo authority logic into Jim.

npm run dev currently fails closed with MissingGraphRopeTextAuthorityError because the composition root does not yet install graph-rope authority. That separate CR-02 slice is tracked by #222; this PR does not weaken the production guard or reintroduce snapshot authority to conceal it.

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@flyingrobots, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 3 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 515b326d-368d-4ec6-870a-9e5b69a71bb9

📥 Commits

Reviewing files that changed from the base of the PR and between c386370 and 7fe6237.

📒 Files selected for processing (7)
  • spec/graph-rope-checkpoint-runtime.spec.mjs
  • spec/graph-rope-runtime.spec.mjs
  • spec/support/graph-rope-runtime-test-kit.mjs
  • src/domain/graph-rope-checkpoint-validation.ts
  • src/domain/graph-rope-runtime-checkpoint.ts
  • src/domain/graph-rope-runtime-echo-adapter.ts
  • src/domain/graph-rope-runtime.ts

Walkthrough

Changes

The PR separates jedit checkpoint declarations from Echo causal-anchor admission. It adds opaque admission evidence and checkpoint-association facts, validates their identities and references, updates runtime failure handling, and expands contract and runtime tests.

Checkpoint anchor flow

Layer / File(s) Summary
Checkpoint contracts and fact validation
src/domain/graph-rope-types.ts, src/domain/graph-rope-checkpoint-identity.ts, src/domain/graph-rope-checkpoint-validation.ts, src/domain/graph-rope-validation.ts, src/domain/graph-rope-fact-id.ts
Checkpoint facts no longer embed causal-anchor IDs; anchored association facts, admission contracts, deterministic IDs, and dedicated validation dispatch are added.
Runtime admission and association
src/domain/graph-rope-runtime-checkpoint.ts, src/domain/graph-rope-runtime-echo-adapter.ts, src/domain/graph-rope-runtime.ts, src/domain/graph-rope-causal-anchor-validation.ts, src/domain/graph-rope-runtime-issues.ts
Checkpoint creation is separated from anchoring, which validates requests, calls the optional Echo adapter, creates an association fact, and maps unavailable or malformed evidence to typed obstructions.
Runtime behavior and contract coverage
spec/graph-rope-runtime.spec.mjs, spec/graph-rope-contract.spec.mjs, spec/support/test-echo-causal-anchor-admission.mjs, spec/design-cycle-policy.spec.mjs, docs/design/0149-graph-backed-rope-runtime-discovery.md
Tests and design assertions cover independent declarations, opaque evidence, fail-closed admission, identity stability, and updated ownership and admitted-fact semantics.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related issues

  • flyingrobots/jedit#206 — Covers the graph-backed rope runtime design and checkpoint implementation updated by this PR.

Possibly related PRs

Poem

Checkpoints stand on their own,
Echo guards the anchor throne.
Opaque IDs cross the seam,
Facts record the durable dream.
Failures close the gate tight—
Rope and evidence align just right.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning [#220] is not met because RopeCheckpointFact no longer carries causalAnchorId; the anchor moved to a separate association fact. Align the implementation with #220 or revise the issue spec; if splitting association data was intentional, update acceptance criteria and tests accordingly.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Out of Scope Changes check ✅ Passed The diff stays focused on Echo anchor integration, checkpoint validation, and matching spec updates; no unrelated feature work stands out.
Title check ✅ Passed The title clearly summarizes the main change: separating checkpoints from Echo anchor authority.
Description check ✅ Passed The description is directly aligned with the changeset and explains the checkpoint/Echo boundary work in detail.

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.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1f7549ef30

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/domain/graph-rope-runtime.ts Outdated
Comment thread src/domain/graph-rope-causal-anchor-validation.ts Outdated
Comment thread src/domain/graph-rope-runtime.ts Outdated

Copy link
Copy Markdown
Owner Author

Code Lawyer self-audit: merge blocked

The current head cannot be merged as an Echo causal-anchor integration. The three unresolved Codex P2 threads are valid, and the deeper authority audit found two additional blocking defects.

# Severity Source Evidence Finding Required mitigation
1 P1 High Self src/domain/graph-rope-causal-anchor-admission.ts:44-89; src/domain/graph-rope-runtime.ts:164-171 Jim fabricates an authority: "echo" receipt in a local deterministic constructor and installs that constructor as the runtime default. Echo's canonical contract explicitly states that its current CausalAnchorFact::from_request creates no WAL record, retention pin, or trusted admission receipt, and applications cannot confer Echo admission. This makes the checkpoint evidence claim stronger than its authority. Implement an application-requested, Echo-admitted anchor transition at Echo's durable commit boundary. Inject its real adapter into Jim. Rename/quarantine any deterministic local constructor as an explicit fixture and remove the silent production fallback.
2 P1 High Self src/domain/graph-rope-causal-anchor-digest.ts:8-37; src/domain/graph-rope-types.ts:281-380; Echo crates/warp-core/src/causal_anchor.rs:220-315 Jim independently redefines Echo's anchor schema and digest. It adds retention.retentionClass to the digest, uses a different digest domain/serialization, and returns string-shaped IDs. An anchor produced here cannot be the canonical Echo value it claims to represent. Make Echo's exported contract/codec the boundary authority. Jim may own rope semantics, but it must not mint a second incompatible Echo anchor identity scheme. Add cross-boundary parity witnesses.
3 P2 Medium PR thread src/domain/graph-rope-runtime.ts:238-258 Invalid root policy is detected only after the injected admission port may have durably consumed the request. Validate the complete request before calling the port, then test that invalid requests make zero port calls.
4 P2 Medium PR thread src/domain/graph-rope-causal-anchor-validation.ts:135-167 Checkpoint validation can dereference missing legacy anchor retention metadata. Treat malformed/legacy anchor references as typed invalid facts without throwing.
5 P2 Medium PR thread src/domain/graph-rope-runtime.ts:262-265 Admission matching checks only receipt correlation, so an adapter may alter subject, basis, roots, purpose, or retention while still being accepted. Compare every request-derived field against the admitted canonical anchor and reject any mismatch.

Echo evidence: docs/topics/CausalAnchors.md:123-145,245-275 and crates/warp-core/src/causal_anchor.rs:264-315 on current main.

@codex review please: confirm whether #1 and #2 are correctly classified as merge-blocking authority violations, and inspect for any additional boundary mismatch.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1f7549ef30

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/domain/graph-rope-runtime.ts Outdated
Comment thread src/domain/graph-rope-causal-anchor-digest.ts Outdated
Comment thread src/domain/graph-rope-runtime.ts Outdated
Comment thread src/domain/graph-rope-runtime.ts Outdated
Comment thread src/domain/graph-rope-causal-anchor-validation.ts Outdated
Comment thread src/domain/graph-rope-runtime.ts Outdated
@flyingrobots flyingrobots changed the title CR-01: Integrate Echo causal anchors CR-01: Separate checkpoints from Echo anchor authority Jul 15, 2026
@flyingrobots

Copy link
Copy Markdown
Owner Author

Activity summary

Severity Finding Resolution Commit Outcome
P1 Jim silently fabricated Echo authority Removed production fallback; anchoring now requires explicit injection and fails closed c386370 Resolved
P1 Jim copied Echo anchor identity, digest, basis, receipt, and retention policy Deleted local Echo anchor/digest machinery; returned Echo IDs are opaque c386370 Resolved
P2 Invalid materialization roots could reach Echo first Jim validates the complete request before invocation; zero-call witness added c386370 Resolved
P2 Legacy/malformed anchor shapes could crash validation Removed copied Echo fact validation; malformed evidence returns typed obstruction c386370 Resolved
P2 Adapter output matching trusted weak authority claims Jim no longer accepts or manufactures authority fields; association stores opaque evidence IDs only c386370 Resolved
P2 Checkpoint and anchor were incorrectly one proposition Split standalone RopeCheckpointFact from optional RopeCheckpointAnchoredFact c386370 Resolved
P2 Opaque identity fields could collide through separator joining Added RED witness and canonical tuple framing c386370 Resolved

All nine prior review threads are now outdated and resolved.

Validation: npm run check (1,254 total; 1,241 pass; 13 intentional skips; 0 fail), quality gate clean, Markdown lint clean. npm run dev remains fail-closed on the separate CR-02 composition-root slice #222; no snapshot fallback was restored.

The handwritten capability is explicitly transitional and will be replaced by a generated Edict client once native package installation/invocation is ready.

@codex review please

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c386370b49

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/domain/graph-rope-runtime-checkpoint.ts Outdated
Comment thread src/domain/graph-rope-runtime-echo-adapter.ts Outdated
Comment thread src/domain/graph-rope-runtime-echo-adapter.ts Outdated
@flyingrobots

Copy link
Copy Markdown
Owner Author

Follow-up e37db43 closes the boundary TOCTOU found during the final self-audit: materialization-root inputs and returned Echo evidence are now copied into plain snapshots exactly once before validation/use. Two RED witnesses cover accessor-backed mutable values. Full local gate: 1,256 total; 1,243 pass; 13 skip; 0 fail; quality clean.

@codex review please

@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

Caution

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

⚠️ Outside diff range comments (2)
src/domain/graph-rope-runtime.ts (2)

1-482: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Keep src/domain/graph-rope-runtime.ts under the 500-line cap. It’s already at 485 lines, so one small addition will push it over; move more of the anchoring/checkpoint orchestration out of this file before it becomes a hard violation.

🤖 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 `@src/domain/graph-rope-runtime.ts` around lines 1 - 482, Reduce
graph-rope-runtime.ts below the 500-line limit by extracting additional
checkpoint/anchoring orchestration from createCheckpoint and anchorCheckpoint
into the existing graph-rope-runtime-checkpoint or a focused helper module. Keep
createGraphRopeRuntime’s public methods and result/error behavior unchanged,
leaving the runtime file within the cap.

Source: Coding guidelines


33-66: 🎯 Functional Correctness | 🔴 Critical | ⚡ Quick win

Remove the duplicate named imports from ./graph-rope-runtime-issues.js. GRAPH_ROPE_RUNTIME_OBSTRUCTION_CAUSAL_ANCHOR_ADMISSION_FAILED, GRAPH_ROPE_RUNTIME_OBSTRUCTION_CAUSAL_ANCHOR_UNAVAILABLE, and GRAPH_ROPE_RUNTIME_OBSTRUCTION_MISSING_CHECKPOINT are imported twice in the same file, which is a duplicate-identifier syntax error. Consolidate them into a single import block.

🤖 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 `@src/domain/graph-rope-runtime.ts` around lines 33 - 66, Remove the duplicate
named imports for GRAPH_ROPE_RUNTIME_OBSTRUCTION_CAUSAL_ANCHOR_ADMISSION_FAILED,
GRAPH_ROPE_RUNTIME_OBSTRUCTION_CAUSAL_ANCHOR_UNAVAILABLE, and
GRAPH_ROPE_RUNTIME_OBSTRUCTION_MISSING_CHECKPOINT from the top-level
graph-rope-runtime-issues.js import, while preserving their existing re-exports
in the export block.
🤖 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 `@src/domain/graph-rope-runtime-echo-adapter.ts`:
- Around line 10-45: Update requestCheckpointAnchorAdmission and
isUsableEchoEvidence to validate returned evidence against the submitted
request, including checkpointId, worldlineId, headId, reason, and
materializationRoots, rejecting stale or mismatched responses before returning
them. Preserve null for invalid admissions, but stop blanket-swallowing port
failures: distinguish and propagate genuine admitCheckpointAnchor errors
according to the adapter’s existing error contract.

In `@src/domain/graph-rope-types.ts`:
- Around line 302-310: Persist checkpoint materialization roots through the
anchoring flow: in src/domain/graph-rope-types.ts:302-310 add
materializationRoots to RopeCheckpointAnchoredFact and include it in
ropeCheckpointAnchorAssociationIdFor identity input if association identity
requires it; in src/domain/graph-rope-runtime-checkpoint.ts:75-95 extend
createCheckpointAnchorAssociation to accept and copy the roots; in
src/domain/graph-rope-runtime.ts:272-304 pass request.materializationRoots or
input.materializationRoots into that factory call.
- Around line 280-286: Extend RopeCheckpointAnchorAdmissionRequest with
retainedRoots, purpose, and all required retention metadata fields, matching the
retention payload used at the Echo boundary and the validation contract in
graph-rope-causal-anchor-validation.ts. Update the corresponding validation
logic so these fields are accepted and preserved rather than discarded, while
retaining validation for the existing checkpointId, worldlineId, headId, reason,
and materializationRoots fields.

---

Outside diff comments:
In `@src/domain/graph-rope-runtime.ts`:
- Around line 1-482: Reduce graph-rope-runtime.ts below the 500-line limit by
extracting additional checkpoint/anchoring orchestration from createCheckpoint
and anchorCheckpoint into the existing graph-rope-runtime-checkpoint or a
focused helper module. Keep createGraphRopeRuntime’s public methods and
result/error behavior unchanged, leaving the runtime file within the cap.
- Around line 33-66: Remove the duplicate named imports for
GRAPH_ROPE_RUNTIME_OBSTRUCTION_CAUSAL_ANCHOR_ADMISSION_FAILED,
GRAPH_ROPE_RUNTIME_OBSTRUCTION_CAUSAL_ANCHOR_UNAVAILABLE, and
GRAPH_ROPE_RUNTIME_OBSTRUCTION_MISSING_CHECKPOINT from the top-level
graph-rope-runtime-issues.js import, while preserving their existing re-exports
in the export block.
🪄 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: ASSERTIVE

Plan: Pro

Run ID: 0bf72ba7-aace-4708-8804-cf36cf0e0a28

📥 Commits

Reviewing files that changed from the base of the PR and between 400a42d and c386370.

📒 Files selected for processing (16)
  • docs/design/0149-graph-backed-rope-runtime-discovery.md
  • spec/design-cycle-policy.spec.mjs
  • spec/graph-rope-contract.spec.mjs
  • spec/graph-rope-runtime.spec.mjs
  • spec/support/test-echo-causal-anchor-admission.mjs
  • src/domain/graph-rope-causal-anchor-digest.ts
  • src/domain/graph-rope-causal-anchor-validation.ts
  • src/domain/graph-rope-checkpoint-identity.ts
  • src/domain/graph-rope-checkpoint-validation.ts
  • src/domain/graph-rope-fact-id.ts
  • src/domain/graph-rope-runtime-checkpoint.ts
  • src/domain/graph-rope-runtime-echo-adapter.ts
  • src/domain/graph-rope-runtime-issues.ts
  • src/domain/graph-rope-runtime.ts
  • src/domain/graph-rope-types.ts
  • src/domain/graph-rope-validation.ts
💤 Files with no reviewable changes (1)
  • src/domain/graph-rope-causal-anchor-digest.ts
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
  • GitHub Check: test / cycle-proofs
  • GitHub Check: test / contract-api
  • GitHub Check: test / echo-authority
  • GitHub Check: release-gate / jedit-echo
🧰 Additional context used
📓 Path-based instructions (3)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx}: No any type usage in TypeScript code
No unknown type usage in TypeScript code
No TypeScript file over 500 lines of code
Make invalid states unrepresentable at runtime where possible
Prefer constructor or factory injection over ambient singletons for new code

Files:

  • src/domain/graph-rope-runtime-echo-adapter.ts
  • src/domain/graph-rope-fact-id.ts
  • src/domain/graph-rope-checkpoint-validation.ts
  • src/domain/graph-rope-runtime-issues.ts
  • src/domain/graph-rope-causal-anchor-validation.ts
  • src/domain/graph-rope-types.ts
  • src/domain/graph-rope-runtime.ts
  • src/domain/graph-rope-validation.ts
  • src/domain/graph-rope-runtime-checkpoint.ts
  • src/domain/graph-rope-checkpoint-identity.ts
**/*.{ts,tsx,js}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx,js}: No ad hoc string comparison in core logic; prefer instanceof, numeric tags, symbols, or explicit runtime objects
No magic strings in code
No magic numbers in code

Files:

  • src/domain/graph-rope-runtime-echo-adapter.ts
  • src/domain/graph-rope-fact-id.ts
  • src/domain/graph-rope-checkpoint-validation.ts
  • src/domain/graph-rope-runtime-issues.ts
  • src/domain/graph-rope-causal-anchor-validation.ts
  • src/domain/graph-rope-types.ts
  • src/domain/graph-rope-runtime.ts
  • src/domain/graph-rope-validation.ts
  • src/domain/graph-rope-runtime-checkpoint.ts
  • src/domain/graph-rope-checkpoint-identity.ts
docs/design/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Use the template from docs/design/TEMPLATE.md for all full cycle designs

Files:

  • docs/design/0149-graph-backed-rope-runtime-discovery.md
🪛 LanguageTool
docs/design/0149-graph-backed-rope-runtime-discovery.md

[style] ~823-~823: To elevate your writing, try using an alternative expression here.
Context: ...edit declaration that a named rope head matters for a domain reason. That declaration d...

(MATTERS_RELEVANT)

🔇 Additional comments (20)
src/domain/graph-rope-types.ts (2)

22-25: LGTM!

Also applies to: 252-268, 323-323


288-300: 🗄️ Data Integrity & Integration

Drop this concern. These are local domain seam types in src/domain/graph-rope-types.ts, and admitCheckpointAnchor is consumed as an in-process port by requestCheckpointAnchorAdmission / anchorCheckpoint; there’s no basis here for an Echo-exported contract/codec mismatch or an async requirement.

			> Likely an incorrect or invalid review comment.
src/domain/graph-rope-checkpoint-identity.ts (1)

6-45: LGTM! The identityTuple/JSON.stringify switch is a genuine improvement over colon-joined strings — nice catch on the collision surface.

src/domain/graph-rope-checkpoint-validation.ts (1)

1-118: LGTM!

src/domain/graph-rope-fact-id.ts (1)

4-4: LGTM!

Also applies to: 29-29, 79-81

src/domain/graph-rope-validation.ts (1)

3-5: LGTM!

Also applies to: 29-29, 59-71, 313-315

src/domain/graph-rope-runtime-checkpoint.ts (2)

27-40: LGTM!

Also applies to: 42-60, 62-73


2-13: 🎯 Functional Correctness

Import path is correct. src/domain/graph-rope-contract.ts re-exports graph-rope-types.js, so ./graph-rope-contract.js is a valid barrel import.

			> Likely an incorrect or invalid review comment.
src/domain/graph-rope-runtime.ts (2)

84-86: LGTM! Constructor/factory injection of causalAnchorAdmission with a null fail-closed default is exactly the right pattern here.

Also applies to: 166-172, 178-211


436-443: 🎯 Functional Correctness

No issue here: cloneFact is generic, so echoEvidence type-checks.

			> Likely an incorrect or invalid review comment.
src/domain/graph-rope-runtime-issues.ts (1)

5-21: LGTM!

src/domain/graph-rope-causal-anchor-validation.ts (2)

20-33: 🎯 Functional Correctness

Confirm this request shape actually maps onto Echo's real boundary contract.

Good: validation runs fully before the admission port is invoked (matches the fix for the "invalid roots checked after port consumed request" self-audit finding), confirmed by anchorCheckpoint in graph-rope-runtime.ts calling validateCheckpointAnchorAdmissionRequest before checking state.causalAnchorAdmission.

However, RopeCheckpointAnchorAdmissionRequest here only carries checkpointId, worldlineId, headId, reason, materializationRoots. The PR objectives call for the Jim↔Echo boundary to carry subject, basis frontier, retained roots, purpose, and retention metadata, and the self-audit explicitly flags that Jim independently defining the anchor schema/digest (rather than Echo's exported contract) produces incompatible identities. If this file's shape is the actual payload sent to Echo (rather than an internal pre-image later translated by an adapter), it looks like that concern is still open.

Since graph-rope-runtime-echo-adapter.ts isn't in this review batch, can you confirm whether it translates this request into Echo's actual exported contract/codec, or whether this shape is what's sent to Echo?


35-75: LGTM!

spec/graph-rope-contract.spec.mjs (1)

4-8: LGTM!

Also applies to: 17-21, 189-199, 201-216, 218-252, 254-286, 415-421, 466-492

spec/graph-rope-runtime.spec.mjs (1)

4-4: LGTM!

Also applies to: 13-15, 182-218, 220-239, 241-287, 289-326, 328-354, 356-389, 391-417, 442-447, 449-481, 483-494, 514-530

spec/support/test-echo-causal-anchor-admission.mjs (1)

1-29: LGTM!

spec/design-cycle-policy.spec.mjs (1)

156-161: LGTM!

docs/design/0149-graph-backed-rope-runtime-discovery.md (3)

87-89: 📐 Maintainability & Code Quality | ⚡ Quick win

Clarify Echo's evidence ownership wording.

"Echo owns causal-anchor and admission evidence" reads as two separate nouns ("causal-anchor [evidence]" and "admission evidence"), whereas the rest of the doc (lines 96, 825) consistently uses the compound "causal-anchor admission" as one concept. Worth tightening so the ownership boundary reads unambiguously.

✏️ Suggested wording
-- `RopeRewrite`, `RopeDiff`, application tick evidence, checkpoint declarations,
-  and anchor associations are retained jedit evidence; Echo owns causal-anchor
-  and admission evidence.
+- `RopeRewrite`, `RopeDiff`, application tick evidence, checkpoint declarations,
+  and anchor associations are retained jedit evidence; Echo owns causal-anchor
+  admission evidence.

750-767: 🗄️ Data Integrity & Integration | ⚡ Quick win

Durable-truth list omits the new RopeCheckpointAnchoredFact evidence type.

This section's rule is "If deleting it changes history, it is evidence." The newly introduced RopeCheckpointAnchoredFact (lines 850-858) records an Echo-admitted causal-anchor association with a checkpoint — deleting it clearly changes recoverable history — yet it's absent from the durable-truth enumeration, which still only lists RopeCheckpoint. Leaving it out risks a future implementer treating the association fact as a rebuildable index.

✏️ Suggested addition
 - `RopeCheckpoint`.
+- `RopeCheckpointAnchoredFact`.

470-476: LGTM!

Also applies to: 509-509, 822-848, 849-859, 861-878

Comment thread src/domain/graph-rope-runtime-echo-adapter.ts
Comment thread src/domain/graph-rope-types.ts
Comment thread src/domain/graph-rope-types.ts
@flyingrobots

Copy link
Copy Markdown
Owner Author

Resolved the three Codex P2 threads from the c386370 review:

  • malformed materializationRoots containers now return the typed invalid-fact obstruction (e37db43 witness includes null and plain-object containers);
  • adapter evidence is copied into a fresh three-ID object, so extra authority claims and non-cloneable properties are discarded (e37db43, expanded witness in 79f698e);
  • adapter success now requires result.ok === true, with a RED/green non-boolean-tag witness (79f698e).

Full local gate at 79f698e: 1,257 total; 1,244 pass; 13 skip; 0 fail; quality clean.

@codex review please

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 79f698e8c0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/domain/graph-rope-runtime-checkpoint.ts Outdated
Comment thread src/domain/graph-rope-runtime-checkpoint.ts
Comment thread spec/graph-rope-runtime.spec.mjs Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 15, 2026
@flyingrobots

Copy link
Copy Markdown
Owner Author

Final-head review activity

Finding Commit Outcome
Malformed materialization root container escaped typed obstruction 06476d2 Real-array boundary and RED/GREEN witness
Invalid checkpoint reason reached identity hashing cb94726 Canonical pre-hash reason validation and RED/GREEN witness
Runtime spec exceeded the 500-line doctrine 7fe6237 232-line core spec, 498-line checkpoint spec, shared test kit

Local npm run check is green. All review threads are resolved against head 7fe6237.

@codex review please

@flyingrobots
flyingrobots merged commit 41fc636 into main Jul 15, 2026
13 checks passed
@flyingrobots
flyingrobots deleted the causal-rope-cr-01 branch July 15, 2026 11:55
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🚀

Reviewed commit: 7fe6237b56

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

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

Labels

None yet

Projects

None yet

1 participant