feat: add Phase 3 durable effect execution - #326
Conversation
e8c31f0 to
6652608
Compare
2bf175b to
6395a86
Compare
9ca4ae5 to
6ca8089
Compare
eshulman2
left a comment
There was a problem hiding this comment.
Integration testing found a durable-effect idempotency regression with Jira repository labels.
Reproduction:
- Start a Feature workflow with
repo:forge-sdlc/forgeinferred during PRD generation. - Forge successfully adds that label.
- Manually remove the repository label while the workflow is paused.
- Revise/approve the PRD so spec generation runs.
generate_spec calls ensure_repo_labels() and correctly infers forge-sdlc/forge, but Jira never receives the second label update. The durable effect created by JiraClient._write() has the same identity as the earlier successful add-label effect (run, definition revision, operation, target, payload, and caller origin), so the journal reuses the completed result and suppresses execution. This prevents the executor from re-reading Jira and restoring external drift.
Observed on AISOS-2482. Expected behavior: convergent/idempotent label operations should re-check current provider state and restore a missing required label when invoked again. Please revise the effect identity/replay semantics so repeated reconciliation calls can execute after external drift, and add a regression test covering label removal between PRD and spec generation.
|
Superseded by the Forge 2.0 squash merged in #339. |
Summary
Stack
Correctness properties
Verification
uv run ruff check src/uv run mypy src/forge/effectsuv run pytest tests/unit/ -q --strict-markers— 2,412 passeduv run pytest tests/contracts tests/flows -q --strict-markers— 319 passed