docs: Add APPLIER role and APPLY phase for Jira epic pipelines [doc-updater] - #2698
Conversation
Update docs/reference/agent-roles.md and README.md to reflect the new apply phase and applier agent role introduced in #2678. Authored-by: egg
This comment has been minimized.
This comment has been minimized.
Check Failure: Integration TestsWhat's failing: A single test timed out connecting to the orchestrator service in CI: Result line: Root cause: The test POSTs to Why this is unrelated to the PR:
What needs to be done:
Suggestion: If this test continues to flake on infra cold-start, consider either bumping the per-request timeout in — Authored by egg |
Autofix tracking{"Test/Integration Tests / Integration Tests": 1} |
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Review of #2698 (docs: APPLIER role and APPLY phase)
I verified the documentation against the implementation landed by #2678. Most of the additions match the code. One claim is wrong and would mislead readers.
Blocking
docs/reference/agent-roles.md:147 — wrong filename for the apply report.
The doc lists:
.egg-state/agent-outputs/{pipeline_id}-apply-report.json — Per-action apply results …
But this file is never produced. The actual filename used everywhere in the codebase is applier-output.json:
- The applier prompt itself documents producing
applier-output.json:
plugins/refine-plan/skills/refine-plan/agents/applier.md:217—
"a briefapplier-output.jsonsummarising what you did …" — and it listsapplier-output.jsonas a propose-time artifact at line 225. - The apply-phase reviewer reads from the same name:
plugins/refine-plan/skills/refine-plan/agents/reviewer-contract-apply.md:24—
"Applier output at.egg-state/agent-outputs/<pipeline-id>-applier-output.json"
(and at lines 79 and 94 it cites that path as ground truth for what landed). grep -rn "apply-report"across the repo returns only the new line you added — zero references in code, prompts, or tests. Nothing produces or consumes that name.- The
produces_outputs=["jira_apply_report", "wontdo_handoff"]entry inshared/egg_contracts/agent_roles.py:486is a logical handle, not a filename, and it does not pinapply-report.jsoneither — note the underscore vs. hyphen.
A reader following this doc to find apply results will look for a file that doesn't exist. Fix: change the filename to {pipeline_id}-applier-output.json to match the actual artifact emitted by the applier and consumed by reviewer-contract-apply.
Verified — correct as written
For the record, the rest of what the PR claims checks out against the implementation:
- Category and table row.
APPLIER_ROLEatshared/egg_contracts/agent_roles.py:445-488declarescategory=AgentCategory.EXECUTION,can_run_in_parallel=False, no dependencies — matches the new row in the Role Overview table atdocs/reference/agent-roles.md:30. - Phase insertion.
_reroute_auto_advance_through_applyinorchestrator/routes/pipelines.py:19119-19141inserts APPLY between PLAN and IMPLEMENT only whenpipeline.is_epicis true; matches the "conditional — only inserted between Plan and Implement whenPipeline.is_epicis true" wording at line 136. - Allowed/blocked writes.
file_accessatshared/egg_contracts/agent_roles.py:463-483allows.egg-state/agent-outputs/and blocks the source-code dirs plus contracts, drafts, and.github/. The doc's "all source code, docs, tests, contracts, drafts,.github/" is a fair summary (matches the abstraction style used elsewhere on this page, e.g. therefinerentry at line 54). - Won't-Do handoff filename.
.egg-state/agent-outputs/{pipeline_id}-wontdo.jsonmatchesorchestrator/routes/pipelines.py:19189(f"{pipeline.id}-wontdo.json") andorchestrator/wontdo_drain.py:5,194, plus the test assertions atorchestrator/tests/test_pipelines_apply.py:912-913. - Orchestrator-only
/api/v1/jira/ticket/transition. Defined atgateway/gateway.py:5375-5395with launcher-secret bearer + loopback/in-cluster source IP gating; called fromorchestrator/wontdo_drain.py:94and wired in via_drain_wontdo_batch_after_applyatorchestrator/routes/pipelines.py:19158. The "drained by the orchestrator after APPLY consensus" wording matches. - Prompt context env vars.
EGG_IS_EPICis set atorchestrator/routes/pipelines.py:20675(string"true"/"false");EGG_EPIC_MODEis set at line 20677 viaderive_pipeline_mode()inorchestrator/prompt_loader.py:159-184, which returns exactly'epic-fresh'or'epic-reassess'for epic pipelines. Names and values both match. - README
modeparameter.auto(default),fresh,reassessmatch the enum atorchestrator/mcp_tools.py:108-122. The "no existing children" / "existing children to classify" framing matchesderive_pipeline_mode's switch.
Non-blocking
docs/reference/agent-roles.md:140— jira_action enumeration is incomplete but probably intentional. The text lists "create, edit, split-of, consolidate-into" as the actions the applier dispatches;wontdois the fifth value inJIRA_ACTION_VALUESatshared/egg_contracts/plan_parser.py:79. The very next sentence explains that wontdo isn't dispatched by the applier (it's handed off), so omission is defensible — but a reader scanning for the full vocabulary won't see all five. Consider phrasing as "alljira_actionvalues exceptwontdo, which is handled via the handoff JSON described below" to make the exclusion explicit.
— Authored by egg
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Address review feedback on #2698: - Fix wrong filename: APPLY phase output is applier-output.json, not apply-report.json. The latter is never produced; the applier and the apply-phase reviewer both reference applier-output.json. - Make wontdo exclusion from applier dispatch explicit. The full jira_action vocabulary has five values; the applier dispatches four (create, edit, split-of, consolidate-into) and wontdo is handed off via JSON for orchestrator-side draining. Authored-by: egg
Response to review feedbackThanks for the careful verification against the implementation — both call-outs were correct. Blocking
Non-blocking
— Authored by egg |
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Re-review of #2698 (docs: APPLIER role and APPLY phase) at 2d9678e
Both findings from the previous review are correctly addressed. The delta is a two-line surgical fix in docs/reference/agent-roles.md.
Previously blocking — fixed
docs/reference/agent-roles.md:147 — applier output filename. Now reads {pipeline_id}-applier-output.json, which matches:
plugins/refine-plan/skills/refine-plan/agents/applier.md:217,225— applier producesapplier-output.json.plugins/refine-plan/skills/refine-plan/agents/reviewer-contract-apply.md:24,79,94— apply-phase reviewer reads from.egg-state/agent-outputs/<pipeline-id>-applier-output.json.
grep -rn "apply-report" returns zero hits across the repo, confirming the dead name is fully retired.
Previously non-blocking — fixed
docs/reference/agent-roles.md:140 — jira_action enumeration. Now reads "all jira_action values except wontdo (i.e., create, edit, split-of, consolidate-into); wontdo is handled via the handoff JSON described below — the applier emits the handoff entry, and the orchestrator drains it via the orchestrator-only /api/v1/jira/ticket/transition route." All five values from JIRA_ACTION_VALUES at shared/egg_contracts/plan_parser.py:79 (create, edit, wontdo, split-of, consolidate-into) are now visible at the point of use, with wontdo's exclusion from the applier dispatch made explicit.
Verified — still correct
Spot-checked that the unchanged claims from the prior review remain accurate against the implementation. Filename, action-set, and handoff-route wording are consistent with applier.md, reviewer-contract-apply.md, shared/egg_contracts/agent_roles.py, orchestrator/routes/pipelines.py, and orchestrator/wontdo_drain.py.
No new issues. Docs-only diff, scope limited to fixing the two identified problems.
— Authored by egg
|
egg review completed. View run logs 5 previous review(s) hidden. |
Update documentation to reflect changes from #2678 (Add SDLC pipeline support for Jira epics):
docs/reference/agent-roles.md: Addedapplierto the EXECUTION category table, addedapplierrow to the Role Overview table, and added a new Apply Phase section documenting the role's purpose, file access, and outputs.README.md: Added a note after the numbered pipeline steps describing the optional APPLY phase inserted for Jira epic-mode pipelines, including thefresh/reassess/automode options.The
sdlc-pipeline.mdguide already contained the epic mode documentation; theagent-roles.mdreference and the README pipeline overview were the gaps.Triggered by: #2678
Authored-by: egg