Skip to content

[SYMPP-23B6] Reactivate packages after final blocker resolution - #628

Merged
Pimpmuckl merged 2 commits into
mainfrom
fix/resolved-blocker-reactivation
Aug 18, 2026
Merged

[SYMPP-23B6] Reactivate packages after final blocker resolution#628
Pimpmuckl merged 2 commits into
mainfrom
fix/resolved-blocker-reactivation

Conversation

@Pimpmuckl

@Pimpmuckl Pimpmuckl commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Context

Architect blocker resolution recorded the final resolution but left the WorkPackage raw status blocked, so workers could not call mark_ready without manual status repair.

TL;DR

Restore blocked WorkPackages to active after their final blocker is resolved.

Summary

  • Centralize final-blocker reactivation in the WorkPackage repository.
  • Apply the shared lifecycle rule to worker and architect resolution paths.
  • Preserve blocked state while another blocker remains and preserve terminal states.
  • Add canonical lifecycle and architect-resolution regression coverage.

Alternatives

  • A guidance-only patch was rejected because worker and architect resolution must share one lifecycle rule.

Test Plan

  • make -C elixir all
  • make -C elixir ci-full when release/full validation is required
  • Focused blocker, guidance, readiness, and architect delivery tests: 39 passed
  • Review Suite fast: clean and conformant (rvw_1e6d3be5)

Summary by CodeRabbit

  • New Features

    • Work packages now automatically return to an active state after all blockers are resolved.
    • Packages remain blocked while unresolved blockers exist.
    • Terminal statuses and already-active packages are preserved during reactivation.
  • Bug Fixes

    • Improved blocker-resolution handling across architect and worker workflows.
    • Gracefully handles deleted work packages during reactivation.
  • Tests

    • Added coverage for blocker lifecycles, repeated reactivation, and status preservation.

Pimpmuckl and others added 2 commits August 18, 2026 13:29
Summary:
- centralize final-blocker reactivation in the WorkPackage repository
- apply the shared lifecycle rule to worker and architect resolution
- cover multiple blockers, replay, terminal states, and architect resolution

Rationale:
- architect resolution previously left raw lifecycle status blocked
- a shared owner keeps mark_ready legal without manual status repair

Tests:
- mix test blocker_lifecycle_test.exs worker_tools_09_test.exs
  comments_guidance_test.exs worker_tools_ready_gate_test.exs

Co-authored-by: Codex <codex@openai.com>
Summary:
- update the canonical architect blocker assertion for final resolution

Rationale:
- final blocker resolution now restores the package to active

Tests:
- mix test mcp_delivery_tools_test.exs blocker_lifecycle_test.exs
  worker_tools_09_test.exs comments_guidance_test.exs
  worker_tools_ready_gate_test.exs

Co-authored-by: Codex <codex@openai.com>
@coderabbitai

coderabbitai Bot commented Aug 18, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 0b5d275b-901a-47c5-a6ab-0a4148ca89d2

📥 Commits

Reviewing files that changed from the base of the PR and between ada1780 and a9ef645.

📒 Files selected for processing (6)
  • elixir/lib/symphony_elixir/symphony_plus_plus/mcp/guidance_tools.ex
  • elixir/lib/symphony_elixir/symphony_plus_plus/mcp/worker_tools.ex
  • elixir/lib/symphony_elixir/symphony_plus_plus/work_packages/repository.ex
  • elixir/test/symphony_elixir/symphony_plus_plus/mcp/comments_guidance_test.exs
  • elixir/test/symphony_elixir/symphony_plus_plus/mcp_delivery_tools_test.exs
  • elixir/test/symphony_elixir/symphony_plus_plus/work_packages/blocker_lifecycle_test.exs

Included review availability: Your plan includes up to 3 reviews per rolling hour; 1 remains after this review.


📝 Walkthrough

Walkthrough

Changes

Blocker reactivation

Layer / File(s) Summary
Centralize blocker reactivation
elixir/lib/symphony_elixir/symphony_plus_plus/work_packages/repository.ex
The repository checks blocker events and reactivates blocked packages when no active blockers remain. Other statuses remain unchanged.
Route blocker resolution through the repository
elixir/lib/symphony_elixir/symphony_plus_plus/mcp/guidance_tools.ex, elixir/lib/symphony_elixir/symphony_plus_plus/mcp/worker_tools.ex
Architect and worker blocker-resolution flows use reactivate_if_unblocked/2. The worker-local reactivation helper was removed.
Validate blocker lifecycle behavior
elixir/test/symphony_elixir/symphony_plus_plus/work_packages/blocker_lifecycle_test.exs, elixir/test/symphony_elixir/symphony_plus_plus/mcp/comments_guidance_test.exs, elixir/test/symphony_elixir/symphony_plus_plus/mcp_delivery_tools_test.exs
Tests cover final-blocker reactivation, remaining blockers, terminal statuses, deleted packages, and MCP resolution flows.

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

Merge Risk: ⚪ Minimal · up to a9ef6

The PR reactivates blocked WorkPackages after their final blocker is resolved while preserving remaining blockers and terminal states; no actionable merge-blocking risk remains after normal checks and review.

Sequence Diagram(s)

sequenceDiagram
  participant ArchitectOrWorker
  participant ProgressEvents
  participant WorkPackageRepository
  ArchitectOrWorker->>ProgressEvents: Record blocker resolution
  ProgressEvents-->>ArchitectOrWorker: Resolution recorded
  ArchitectOrWorker->>WorkPackageRepository: reactivate_if_unblocked/2
  WorkPackageRepository-->>ArchitectOrWorker: Return updated or unchanged package
``

</details>

<!-- walkthrough_end -->
<!-- pre_merge_checks_walkthrough_start -->

<details>
<summary>🚥 Pre-merge checks | ✅ 5</summary>

<details>
<summary>✅ Passed checks (5 passed)</summary>

|         Check name         | Status   | Explanation                                                                                                             |
| :------------------------: | :------- | :---------------------------------------------------------------------------------------------------------------------- |
|         Title check        | ✅ Passed | The title clearly and concisely describes reactivation after the final blocker resolution.                              |
|      Description check     | ✅ Passed | The description includes all required sections and clearly explains the change, alternatives, and completed validation. |
|     Docstring Coverage     | ✅ Passed | No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.              |
|     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.                                                |

</details>

</details>

<!-- pre_merge_checks_walkthrough_end -->
<!-- finishing_touch_checkbox_start -->

<details>
<summary>✨ Finishing Touches</summary>

<details>
<summary>📝 Generate docstrings</summary>

- [ ] <!-- {"checkboxId":"7962f53c-55bc-4827-bfbf-6a18da830691"} --> Create stacked PR
- [ ] <!-- {"checkboxId":"3e1879ae-f29b-4d0d-8e06-d12b7ba33d98"} --> Commit on current branch

</details>
<details>
<summary>🧪 Generate unit tests (beta)</summary>

- [ ] <!-- {"checkboxId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} -->   Create PR with unit tests
- [ ] <!-- {"checkboxId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} -->   Commit unit tests in branch `fix/resolved-blocker-reactivation`

</details>

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---




<sub>Comment `@coderabbitai help` to get the list of available commands.</sub>

<!-- tips_end -->
Loading

@Pimpmuckl
Pimpmuckl merged commit a9fab0b into main Aug 18, 2026
24 checks passed
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