Skip to content

feat(orchestration): lead↔worker delegation lineage ledger#631

Merged
arul28 merged 3 commits into
mainfrom
ade/take-look-at-https-github-20562532
Jun 22, 2026
Merged

feat(orchestration): lead↔worker delegation lineage ledger#631
arul28 merged 3 commits into
mainfrom
ade/take-look-at-https-github-20562532

Conversation

@arul28

@arul28 arul28 commented Jun 22, 2026

Copy link
Copy Markdown
Owner

What

Adds a delegation lineage ledger to the orchestration system — the lead↔worker/validator spawn and result edges, recorded as first-class manifest state (manifest.lineage). Today an agent row carries no parent link, so "who spawned whom, for what, and what came back" is only implicit (parent passed to createSession + transient status pings). This makes it durable and inspectable.

Idea adapted from t3code PR #2829's thread-lineage model, scoped to ADE's disk-bundle manifest (no event-sourcing rewrite). Lead↔worker/validator only — a worker's own provider-native subagents stay in the observability pane and are deliberately not ingested.

How

  • DelegationEdge/DelegationStatus types + optional manifest.lineage, normalized to [] (back-compat) and shape-validated alongside the existing planning-state validators.
  • recordDelegationSpawn — best-effort, idempotent per child session, sha256 of the dispatched brief + resolved fingerprint; wired into both spawn sites (desktop tool + daemon domain).
  • Result recorded in releaseTask on a worker's terminal transition; releaseStaleClaims reconciles edges whose child went terminal without a release (e.g. a self-completed validator) — lead-triggered.
  • /lineage denied to every role in patchPolicy; edges are written only through the service's directPatch, exactly like the gate-controlled planning state.

Scope notes

  • v1 semantic (documented + pinned by a characterization test): one edge per child-session lifetime, terminalizing at the first terminal transition. taskIds is a snapshot; live truth stays derivable from task.assigneeSessionId.
  • cancelled/superseded/supersededBy/parentRunId are reserved forward-schema (matches the existing coordinatorSessionId/parentRunId manifest reservations), not written in v1.

Validation

  • /quality dual-review: 0 Blocker / 0 High; 2 behavior-preserving fixes applied; 1 Medium gated as documented v1 semantic.
  • /test: orchestration suite 156/156 green (+9 new tests). Typecheck clean.
  • Parity: docs updated; iOS/CLI/TUI — no changes required (none model the manifest).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added delegation lineage tracking to record agent-to-agent work delegation relationships with spawn and completion metadata.
    • Automatic closure of delegation records when delegated tasks complete or fail.
    • Enhanced recovery from interrupted tasks by reconciling delegation records against agent states.
  • Tests

    • Comprehensive test coverage for delegation lineage functionality added, including spawn recording, idempotency, and terminal state handling.

Greptile Summary

Adds a durable delegation lineage ledger (manifest.lineage) to the orchestration system, recording the otherwise-implicit lead→worker/validator spawn and result edges as first-class manifest state. The two issues identified in prior review rounds (result-field replace vs add ops and stale-task-inclusive taskIds snapshot in reconcile) have both been addressed in this revision.

  • New types and normalization: DelegationEdge / DelegationStatus / SpawnFingerprint added to orchestration.ts; ensureLineage + validateLineage wire into the existing normalization + validation pipeline with full back-compat (missing lineage defaults to []).
  • Write paths: recordDelegationSpawn (best-effort, idempotent per child session) added to the service; releaseTask closes the open edge at terminal task release; releaseStaleClaims reconciles any edge whose child went terminal without a release (e.g. validator self-complete).
  • Access control: /lineage and /lineage/** added to LEAD_DENY_PATTERNS, so all three roles are blocked from forging or rewriting edges via raw manifestPatch; edges are written exclusively through directPatch inside dedicated service methods.

Confidence Score: 5/5

Safe to merge — the ledger is purely additive manifest state, written only through guarded service paths, and the two issues from prior review rounds have been correctly resolved.

Both previously identified concerns (result-field op semantics and stale-task-inclusive taskIds snapshot) are addressed: result-side fields now use add ops and releaseStaleClaims computes owned against the post-reset projected manifest. Access control is tight — raw /lineage writes are denied to all three roles. Back-compat normalization is consistent with existing patterns. Nine new integration tests cover the full lifecycle including idempotency, multi-task v1 semantics, reconcile accuracy, and legacy-manifest defaults.

No files require special attention.

Important Files Changed

Filename Overview
apps/desktop/src/main/services/orchestration/orchestrationService.ts Core delegation ledger implementation: recordDelegationSpawn, buildDelegationResultOps, summarizeDelegationOutcome; releaseTask and releaseStaleClaims wired correctly. Both previously-flagged issues (replace→add ops, projected-manifest taskIds snapshot) are resolved.
apps/desktop/src/shared/types/orchestration.ts DelegationEdge, DelegationStatus, DelegationId types added; ManifestPatchKind and ManifestSection union types extended; lineage field added to OrchestrationManifest as optional for back-compat.
apps/desktop/src/main/services/orchestration/manifestNormalization.ts ensureLineage deduplicates and validates lineage on every load/write; validateLineage integrated into validateManifestShape; mirrors existing normalization patterns correctly.
apps/desktop/src/main/services/orchestration/patchPolicy.ts /lineage and /lineage/** added to LEAD_DENY_PATTERNS; combined with allow-list-only access for workers/validators, all three roles are effectively denied raw lineage writes. Verified by the new patchPolicy test.
apps/desktop/src/main/services/orchestration/orchestrationService.test.ts 9 new integration tests covering spawn recording, idempotency, role mismatch, task-release close, stale-task-aware taskIds snapshot, validator reconcile, multi-task v1 semantic, and legacy-manifest back-compat.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant Lead
    participant SpawnPath as Spawn Path (Tool / Domain)
    participant Service as orchestrationService
    participant Manifest

    Lead->>SpawnPath: spawnAgent(role, brief, ...)
    SpawnPath->>Service: manifestPatch (add agent row)
    Service->>Manifest: persist → etag-B
    SpawnPath->>Service: recordDelegationSpawn(parentSessionId, childSessionId, briefText, fingerprint)
    Service->>Service: validate parent + child registered, role matches
    Service->>Service: idempotency check (one edge per childSessionId)
    Service->>Manifest: "directPatch: add /lineage/- {status:running, briefDigest, spawnEtag, ...}"
    Manifest-->>Service: etag-C
    Service-->>SpawnPath: "{ok:true, etag:etag-C, edgeId}"
    SpawnPath-->>Lead: "{sessionId, etag:etag-C}"

    Note over Service,Manifest: Worker executes task...

    alt Worker releases task (releaseTask)
        Service->>Manifest: "ops: task status, agent status=completed/failed"
        Service->>Service: buildDelegationResultOps(manifest, childSessionId, edgeStatus, taskIds)
        Service->>Manifest: "directPatch: replace /lineage/{id}/status, add resultSummary/completedAt/taskIds"
    else Validator self-completes (releaseStaleClaims backstop)
        Lead->>Service: releaseStaleClaims(runId, bundlePath)
        Service->>Service: compute projected (post stale-task resets)
        Service->>Service: find running edges with terminal agents in projected
        Service->>Manifest: directPatch: stale task resets + edge reconcile ops
    end
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant Lead
    participant SpawnPath as Spawn Path (Tool / Domain)
    participant Service as orchestrationService
    participant Manifest

    Lead->>SpawnPath: spawnAgent(role, brief, ...)
    SpawnPath->>Service: manifestPatch (add agent row)
    Service->>Manifest: persist → etag-B
    SpawnPath->>Service: recordDelegationSpawn(parentSessionId, childSessionId, briefText, fingerprint)
    Service->>Service: validate parent + child registered, role matches
    Service->>Service: idempotency check (one edge per childSessionId)
    Service->>Manifest: "directPatch: add /lineage/- {status:running, briefDigest, spawnEtag, ...}"
    Manifest-->>Service: etag-C
    Service-->>SpawnPath: "{ok:true, etag:etag-C, edgeId}"
    SpawnPath-->>Lead: "{sessionId, etag:etag-C}"

    Note over Service,Manifest: Worker executes task...

    alt Worker releases task (releaseTask)
        Service->>Manifest: "ops: task status, agent status=completed/failed"
        Service->>Service: buildDelegationResultOps(manifest, childSessionId, edgeStatus, taskIds)
        Service->>Manifest: "directPatch: replace /lineage/{id}/status, add resultSummary/completedAt/taskIds"
    else Validator self-completes (releaseStaleClaims backstop)
        Lead->>Service: releaseStaleClaims(runId, bundlePath)
        Service->>Service: compute projected (post stale-task resets)
        Service->>Service: find running edges with terminal agents in projected
        Service->>Manifest: directPatch: stale task resets + edge reconcile ops
    end
Loading

Reviews (3): Last reviewed commit: "fix(orchestration): return the post-line..." | Re-trigger Greptile

Record the otherwise-implicit lead→worker/validator spawn and result
edges as first-class manifest state (manifest.lineage). The agent row
carried no parent link; this captures who spawned whom, with what brief
(sha256 digest) + resolved model, and what came back.

- DelegationEdge/DelegationStatus types + optional manifest.lineage,
  normalized to [] (back-compat) and shape-validated.
- recordDelegationSpawn (best-effort, idempotent per child) wired into
  both spawn sites (desktop tool + daemon domain).
- Result recorded in releaseTask on a worker's terminal transition;
  releaseStaleClaims reconciles edges whose child went terminal without
  a release (e.g. a self-completed validator) — lead-triggered.
- /lineage denied to every role in patchPolicy; edges written only via
  the service's directPatch, like the planning-gate state.

Tests: +9 (spawn/result/reconcile/idempotency/legacy-default/policy +
a characterization test pinning the v1 per-session-lifetime semantic).
Docs: orchestration source map + tool-registration updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
ade Ignored Ignored Preview Jun 22, 2026 4:56pm

@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds delegation lineage tracking to the orchestration manifest. New DelegationEdge types model lead→child spawn and result edges. The manifest schema, normalization, and validation are extended. orchestrationService gains recordDelegationSpawn, edge-closure on releaseTask, and stale-claim reconciliation. Patch policy blocks direct lineage writes. Domain and tool spawn paths wire in best-effort spawn recording.

Changes

Delegation Lineage Tracking

Layer / File(s) Summary
Delegation lineage schema types and manifest extension
apps/desktop/src/shared/types/orchestration.ts
Exports DelegationId, DelegationStatus, and DelegationEdge types; adds optional lineage?: DelegationEdge[] to OrchestrationManifest; extends ManifestPatchKind and ManifestSection with "lineage".
Manifest normalization and validation
apps/desktop/src/main/services/orchestration/manifestNormalization.ts
Adds DELEGATION_STATUSES, exported isDelegationStatus guard, ensureLineage (defaults and deduplicates lineage on load), and validateLineage (enforces required fields and valid status in validateManifestShape).
Patch policy: block direct lineage writes
apps/desktop/src/main/services/orchestration/patchPolicy.ts, patchPolicy.test.ts
Appends /lineage and /lineage/** to LEAD_DENY_PATTERNS; tests assert checkPatchOp denies both add and lineage-status replace for all actor roles.
Service: spawn recording, edge closure, stale reconciliation
apps/desktop/src/main/services/orchestration/orchestrationService.ts
Initializes lineage: [] on runCreate; adds recordDelegationSpawn (idempotent edge creation), summarizeDelegationOutcome, and buildDelegationResultOps helpers; closes running edges in releaseTask on terminal agent status; reconciles orphaned running edges in releaseStaleClaims; exposes recordDelegationSpawn on the returned service object.
Domain and tool wiring
apps/desktop/src/main/services/orchestration/orchestrationDomain.ts, apps/desktop/src/main/services/ai/tools/orchestrationTools.ts
spawnAgent and createSpawnAgentTool.execute each add best-effort try/catch calls to service.recordDelegationSpawn after manifest registration, swallowing errors.
Service delegation lineage tests
apps/desktop/src/main/services/orchestration/orchestrationService.test.ts
New delegation lineage describe block covering spawn edge recording with brief digest/fingerprint, idempotency, edge closure on done/failed release, stale reconciliation, first-terminal-outcome retention, and legacy manifest backward compat.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Suggested labels

desktop

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 61.11% 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
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.
Title check ✅ Passed The title 'feat(orchestration): lead↔worker delegation lineage ledger' directly and accurately summarizes the main change: adding delegation lineage tracking to the orchestration system.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ade/take-look-at-https-github-20562532

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.

@arul28 arul28 changed the title Take Look At Https Github feat(orchestration): lead↔worker delegation lineage ledger Jun 22, 2026
@arul28

arul28 commented Jun 22, 2026

Copy link
Copy Markdown
Owner Author

@copilot review but do not make fixes

@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

🧹 Nitpick comments (1)
apps/desktop/src/main/services/orchestration/orchestrationService.test.ts (1)

1974-2025: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick win

Anchor spawn tests to a registered child and assert the full fingerprint.

These first spawn tests call recordDelegationSpawn without an /agents row, so they can pass for orphan lineage edges. They also only verify spawnFingerprint.provider, leaving the rest of the persisted fingerprint unprotected.

Proposed test tightening
   it("records a running delegation edge at spawn with a brief digest + fingerprint", async () => {
     const svc = createOrchestrationService({ resolveLaneWorktree: () => lane });
     const { manifest } = await makeRun(svc);
+    await seedChild(svc, manifest, { sessionId: "S-worker" });
+    const spawnFingerprint = {
+      provider: "claude",
+      modelId: "claude-sonnet-4-6",
+      reasoningEffort: null,
+      resolvedAt: "now",
+      routingKey: "default",
+    } as const;
     const res = await svc.recordDelegationSpawn(
       {
         runId: manifest.runId,
         parentSessionId: "S-lead",
         childSessionId: "S-worker",
         childRole: "worker",
         childTag: "impl",
         stepId: "T-1",
         briefText: BRIEF,
-        spawnFingerprint: {
-          provider: "claude",
-          modelId: "claude-sonnet-4-6",
-          reasoningEffort: null,
-          resolvedAt: "now",
-          routingKey: "default",
-        },
+        spawnFingerprint,
       },
       manifest.bundlePath,
     );
@@
     expect(edge.childRole).toBe("worker");
     expect(edge.briefDigest).toBe(crypto.createHash("sha256").update(BRIEF).digest("hex"));
-    expect(edge.spawnFingerprint?.provider).toBe("claude");
+    expect(edge.spawnFingerprint).toEqual(spawnFingerprint);
     expect(edge.resultSummary).toBeUndefined();
     await svc.dispose();
   });
 
   it("recordDelegationSpawn is idempotent per child session", async () => {
     const svc = createOrchestrationService({ resolveLaneWorktree: () => lane });
     const { manifest } = await makeRun(svc);
+    await seedChild(svc, manifest, { sessionId: "S-worker" });
     const first = await svc.recordDelegationSpawn(
       { runId: manifest.runId, parentSessionId: "S-lead", childSessionId: "S-worker", childRole: "worker", briefText: BRIEF },
       manifest.bundlePath,
🤖 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 `@apps/desktop/src/main/services/orchestration/orchestrationService.test.ts`
around lines 1974 - 2025, The spawn tests in the first and second test cases
need to be anchored to a registered child agent before calling
recordDelegationSpawn, and the spawnFingerprint assertions need to be expanded.
First, register a child agent or worker in the system before calling
recordDelegationSpawn to ensure the tests validate against actual registered
children rather than orphan lineage edges. Second, in the assertion block after
recording the delegation spawn, replace the single check on
edge.spawnFingerprint?.provider with comprehensive assertions that verify all
fingerprint fields including modelId, reasoningEffort, resolvedAt, and
routingKey match the provided spawnFingerprint object.
🤖 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 `@apps/desktop/src/main/services/orchestration/manifestNormalization.ts`:
- Around line 155-165: The filter callback in manifest.lineage assignment only
validates a subset of required DelegationEdge fields (id, parentSessionId,
childSessionId, status) but not others like childRole, spawnedAt, spawnEtag, and
briefDigest. Expand the validation logic within the filter callback to check all
required fields of the DelegationEdge shape before returning true. Additionally,
apply the same comprehensive validation to the validator function referenced
around line 435 to ensure consistency and prevent invalid edges from being
accepted.

In `@apps/desktop/src/main/services/orchestration/orchestrationService.ts`:
- Around line 1802-1825: Before creating the DelegationEdge object in the
recordDelegationSpawn method, add validation to ensure that both
args.parentSessionId and args.childSessionId exist as agents in manifest.agents,
and verify that args.childRole is consistent with the child agent's configured
role in the manifest. If any validation fails, return an error response with
appropriate details before proceeding to construct the edge object and add it to
the lineage array. This prevents orphaned or incorrect edges from being
persisted due to stale or wrong caller payloads.

---

Nitpick comments:
In `@apps/desktop/src/main/services/orchestration/orchestrationService.test.ts`:
- Around line 1974-2025: The spawn tests in the first and second test cases need
to be anchored to a registered child agent before calling recordDelegationSpawn,
and the spawnFingerprint assertions need to be expanded. First, register a child
agent or worker in the system before calling recordDelegationSpawn to ensure the
tests validate against actual registered children rather than orphan lineage
edges. Second, in the assertion block after recording the delegation spawn,
replace the single check on edge.spawnFingerprint?.provider with comprehensive
assertions that verify all fingerprint fields including modelId,
reasoningEffort, resolvedAt, and routingKey match the provided spawnFingerprint
object.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 6ac367a9-fc08-47cd-b5c0-3af8a0e69b9e

📥 Commits

Reviewing files that changed from the base of the PR and between 5cd0fec and cde172c.

⛔ Files ignored due to path filters (2)
  • docs/ARCHITECTURE.md is excluded by !docs/**
  • docs/features/agents/tool-registration.md is excluded by !docs/**
📒 Files selected for processing (8)
  • apps/desktop/src/main/services/ai/tools/orchestrationTools.ts
  • apps/desktop/src/main/services/orchestration/manifestNormalization.ts
  • apps/desktop/src/main/services/orchestration/orchestrationDomain.ts
  • apps/desktop/src/main/services/orchestration/orchestrationService.test.ts
  • apps/desktop/src/main/services/orchestration/orchestrationService.ts
  • apps/desktop/src/main/services/orchestration/patchPolicy.test.ts
  • apps/desktop/src/main/services/orchestration/patchPolicy.ts
  • apps/desktop/src/shared/types/orchestration.ts

@mintlify

mintlify Bot commented Jun 22, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
ade-ac1c6011 🟢 Ready View Preview Jun 22, 2026, 4:25 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

…ds, add-op semantics

CodeRabbit:
- ensureLineage/validateLineage now check the full required DelegationEdge
  shape (childRole/spawnedAt/spawnEtag/briefDigest), not just four fields.
- recordDelegationSpawn rejects edges whose parent/child aren't registered
  agents or whose child role mismatches the agent row (no orphan edges).

Greptile:
- result-side ops use add (not replace) for initially-absent edge fields —
  RFC-6902-correct and defensive against any applyPatches tightening.
- releaseStaleClaims snapshots taskIds against the post-reset projection so a
  recovered stale task is not recorded onto the edge.

+2 regression tests; orchestration suite green (69/69 on the two files), tsc clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@arul28

arul28 commented Jun 22, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@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: 8d3fc97977

ℹ️ 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".

// Record the lead→child delegation edge (best-effort; never fails the
// spawn — the agent row is the source of truth, the edge is provenance).
try {
await svc.recordDelegationSpawn(

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Return the post-lineage etag from spawnAgent

When this recordDelegationSpawn call succeeds it writes /lineage/- via directPatch, advancing serverGeneration and the manifest etag, but the tool ignores that result and later returns patchRes.etag from the earlier /agents/- patch. In the normal successful-spawn path, any caller that uses the returned etag for its next manifestPatch will immediately hit an avoidable etag_conflict; the daemon spawnAgent path in orchestrationDomain.ts has the same stale-etag pattern. Capture the successful lineage result's etag (falling back to patchRes.etag only when the best-effort lineage write fails).

Useful? React with 👍 / 👎.

recordDelegationSpawn advances the manifest etag after the agent-row append,
but both spawn sites returned the stale agent-append etag — a caller using it
for its next manifestPatch would hit an avoidable etag_conflict. Surface the
ledger's etag (fall back to the agent-append etag only when the best-effort
lineage write fails). Same fix in the daemon spawn path. (Codex review.)

+1 regression test: domain spawn surfaces the lineage etag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@arul28

arul28 commented Jun 22, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: 3cfdf3dd7d

ℹ️ 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".

@arul28
arul28 merged commit 965b9a0 into main Jun 22, 2026
27 checks passed
@arul28
arul28 deleted the ade/take-look-at-https-github-20562532 branch June 22, 2026 20:56
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