ADE-48: Orchestration: reject duplicate task IDs (shadow task deadlocks phase completion)#436
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
|
Warning Review limit reached
More reviews will be available in 26 minutes and 10 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
|
Capy auto-review is paused for this organization because the monthly auto-review limit has been reached. Increase the limit or turn it off in billing settings to resume automatic reviews. |
|
@copilot review but do not make fixes |
228a0c6 to
4c5d11f
Compare
|
@copilot review but do not make fixes |
4c5d11f to
f005304
Compare
|
@copilot review but do not make fixes |
f005304 to
fe7623d
Compare
|
@copilot review but do not make fixes |
fe7623d to
29391cb
Compare
|
@copilot review but do not make fixes |
Fixes ADE-48
Summary
Describe the change.
What Changed
Key files and behaviors.
Validation
How you tested.
Risks
Anything to watch.
Linked Linear issues
Greptile Summary
Adds duplicate-task-ID rejection to the manifest validation layer so that a shadow task can no longer silently occupy an ID and prevent phase completion. The guard runs at validation time, before any write is committed, and works across both same-patch and cross-patch duplication scenarios.
validateTasksnow maintains aSet<string>of trimmed IDs and returns an early error on the first duplicate found, preventing the poisoned manifest from ever reaching disk.manifestPatchreturnsvalidation_failedand leaves on-disk state unchanged (or at the pre-duplicate length) for both scenarios.Confidence Score: 5/5
Safe to merge — the change is a targeted, additive validation guard with no side effects on the happy path.
The implementation is a minimal, focused addition: a Set is allocated once per validateTasks call, the duplicate check fires before any write, and the existing validation chain is otherwise untouched. Both same-patch and cross-patch duplicate scenarios are covered by integration tests that also verify on-disk state. No regressions were introduced.
No files require special attention.
Important Files Changed
Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD A[manifestPatch called] --> B[Apply JSON patches in memory] B --> C[validateManifestShape] C --> D[validateTasks] D --> E{task.id empty?} E -- yes --> F[return error: non-empty id required] E -- no --> G[taskId = task.id.trim] G --> H{seenIds.has taskId?} H -- yes --> I[return error: duplicate id] H -- no --> J[seenIds.add taskId] J --> K[validate phaseId, title, description, status, validationGate] K --> L{more tasks?} L -- yes --> E L -- no --> M[return null — valid] M --> N[Persist manifest to disk] I --> O[Reject patch — no write] F --> OReviews (5): Last reviewed commit: "Fix duplicate orchestration task id reje..." | Re-trigger Greptile