run-parity-test-b — Entry Skill
Entry point for the
parity-test-bpipeline. Orchestrates the sequential Task()-based dispatch of theanalyzer,reviewer, andreporteragents on Tier 1 (Claude Code). The reviewer runs with worktree isolation +permissionMode: plan+disallowedTools: Write, Edit, Bash— structural write/review isolation.
Platform Context
- Tier:
tier_1(Claude Code) - Dispatch mechanism:
native_task—DISPATCH(mode="task", agent="{name}", isolation="worktree", context={...}). - model_field_format:
shorthand—model_tierin each agent's YAML frontmatter; resolver maps to concrete model. - Reviewer isolation:
structural—permissionMode: plan+disallowedTools: Write, Edit, Bash+ separate worktree. - Degradation warnings: None for Tier 1.
Workflow
PHASE 0: PREFLIGHT
- Resolve
{ROOT}viask-pipeline-paths. - Resolve
{runId}= ISO-8601 compact timestamp. - Create temp directory:
{ROOT}/superpipelines/temp/parity-test-b/{runId}/. - Create
output/directory if absent:{ROOT}/output/. - If the user has not supplied the path to the input JSON file, ask for it now. Record as
{INPUT_PATH}. - Initialize
pipeline-state.jsonat{ROOT}/superpipelines/temp/parity-test-b/{runId}/pipeline-state.json:
{
"pipeline_id": "parity-test-b",
"run_id": "{runId}",
"started_at": "{iso8601}",
"plugin_version": "2.0.0",
"pattern": "1",
"status": "running",
"current_phase": 0,
"metadata": {
"source_tier": "tier_1",
"runtime_tier": "tier_1",
"model_field_format": "shorthand",
"resolved_models": {
"analyzer": "claude-haiku-4-5-20251001",
"reviewer": "claude-sonnet-4-6",
"reporter": "claude-haiku-4-5-20251001"
}
},
"phases": [
{
"index": 0,
"step_id": "analyzer",
"name": "analyze",
"status": "pending",
"agent": "agents/superpipelines/parity-test-b/analyzer.md",
"outputs": [],
"error": null
},
{
"index": 1,
"step_id": "reviewer",
"name": "review",
"status": "pending",
"agent": "agents/superpipelines/parity-test-b/reviewer.md",
"reviewer_isolation": "structural",
"outputs": [],
"error": null
},
{
"index": 2,
"step_id": "reporter",
"name": "report",
"status": "pending",
"agent": "agents/superpipelines/parity-test-b/reporter.md",
"outputs": [],
"error": null
}
]
}
PHASE 1: DISPATCH ANALYZER (native_task)
DISPATCH(
mode="task",
agent="analyzer",
isolation="worktree",
context={
"input_path": "{INPUT_PATH}",
"findings_output_path": "{ROOT}/superpipelines/temp/parity-test-b/{runId}/findings.json",
"state_path": "{ROOT}/superpipelines/temp/parity-test-b/{runId}/pipeline-state.json",
"run_id": "{runId}",
"root": "{ROOT}"
}
)
Wait for terminal status:
DONE→ update phases[0].status = "completed"; advance to Phase 2.DONE_WITH_CONCERNS→ update phases[0].status = "completed_with_concerns"; surface concerns; advance to Phase 2.NEEDS_CONTEXT→ update phases[0].status = "blocked"; top-level status = "blocked"; GO TO CLEANUP (preserve).BLOCKED→ update phases[0].status = "blocked"; top-level status = "blocked"; GO TO CLEANUP (preserve).
PHASE 2: DISPATCH REVIEWER (native_task — structural isolation)
The reviewer agent has permissionMode: plan and disallowedTools: Write, Edit, Bash. It cannot write files. Capture the REVIEWER VERDICT block from its terminal output text.
DISPATCH(
mode="task",
agent="reviewer",
isolation="worktree",
context={
"findings_path": "{ROOT}/superpipelines/temp/parity-test-b/{runId}/findings.json",
"state_path": "{ROOT}/superpipelines/temp/parity-test-b/{runId}/pipeline-state.json",
"run_id": "{runId}",
"root": "{ROOT}"
}
)
After the reviewer completes:
- Extract the REVIEWER VERDICT block from terminal output text. Record as
{REVIEWER_OUTPUT}. - Parse
verdictfrom the block:approved,approved_with_concerns, orrejected. - Update
pipeline-state.json:phases[1].outputs→[{ "verdict": "{verdict}", "reviewer_notes": "{REVIEWER_OUTPUT}" }]
Wait for terminal status:
DONE(verdict: approved) → update phases[1].status = "completed"; advance to Phase 3.DONE_WITH_CONCERNS(verdict: approved_with_concerns) → update phases[1].status = "completed_with_concerns"; surface concerns; advance to Phase 3.BLOCKED(verdict: rejected) → update phases[1].status = "blocked"; top-level status = "blocked"; surface rejection; GO TO CLEANUP (preserve). DO NOT dispatch reporter.NEEDS_CONTEXT→ update phases[1].status = "blocked"; GO TO CLEANUP (preserve).
PHASE 3: DISPATCH REPORTER (native_task)
Only dispatched if reviewer verdict is approved or approved_with_concerns.
DISPATCH(
mode="task",
agent="reporter",
isolation="worktree",
context={
"findings_path": "{ROOT}/superpipelines/temp/parity-test-b/{runId}/findings.json",
"reviewer_verdict": "{verdict}",
"reviewer_notes": "{REVIEWER_OUTPUT}",
"report_output_path": "{ROOT}/output/parity-test-b-report.md",
"state_path": "{ROOT}/superpipelines/temp/parity-test-b/{runId}/pipeline-state.json",
"run_id": "{runId}",
"root": "{ROOT}"
}
)
Wait for terminal status:
DONE→ update phases[2].status = "completed"; advance to Phase 4.DONE_WITH_CONCERNS→ update phases[2].status = "completed_with_concerns"; surface concerns; advance to Phase 4.NEEDS_CONTEXT→ update phases[2].status = "blocked"; GO TO CLEANUP (preserve).BLOCKED→ update phases[2].status = "blocked"; GO TO CLEANUP (preserve).
PHASE 4: FINALIZE
- Update
pipeline-state.json:status:"completed"(or"completed_with_concerns")completed_at: ISO-8601 timestamp
- Cleanup contract (C20):
- On
DONEorDONE_WITH_CONCERNS: writestatus: completedtopipeline-state.json, then delete{ROOT}/superpipelines/temp/parity-test-b/{runId}/. - On
BLOCKEDorNEEDS_CONTEXT: preserve the temp directory.
- On
- Confirm to the user:
Pipeline
parity-test-bcompleted. Data quality report written to:{ROOT}/output/parity-test-b-report.md - Emit terminal status:
DONE(orDONE_WITH_CONCERNS/BLOCKED/NEEDS_CONTEXTas applicable).