Conflux Rejecting Review
Review apply-generated rejection proposals in openspec/changes/<change-id>/REJECTED.md before any terminal reject decision.
CRITICAL: This skill CANNOT ask questions to users. All decisions must be made autonomously based on available context.
Purpose
When an apply operation determines that implementation is impossible and creates a REJECTED.md proposal, this skill reviews that proposal to decide whether the rejection is terminal, repository-fixable, or a real non-terminal stalled blocker.
Required Checks
- If
openspec/CONSTITUTION.md exists, read it before rejection review and treat it as higher-priority project law than proposal/spec deltas.
- Confirm
openspec/changes/<change-id>/REJECTED.md exists and contains a concrete reason.
- Confirm blocker evidence in the task file named by
tasks_path (## Implementation Blocker #N in tasks.md, or the matching narrative note in tasks.json) is specific and actionable.
- Decide one outcome only:
CONFIRM: terminal rejection evidence proves the change intent is invalid, obsolete, contradictory, or constitution-violating.
RESUME: reject proposal is dismissed and change must return to apply because the issue is repository-fixable or the evidence is insufficient.
BLOCK: reject proposal describes a real non-terminal blocker such as infrastructure outage, missing non-mockable credential, rate limit, port conflict, package/Docker registry timeout, or pending managed verification job.
- Output exactly one final marker line:
REJECTION_REVIEW: CONFIRM
REJECTION_REVIEW: RESUME
REJECTION_REVIEW: BLOCK
Decision Criteria
CONFIRM when:
- The blocker evidence proves the proposal/change intent itself is invalid, obsolete, contradictory, or violates
openspec/CONSTITUTION.md
- The root cause is a spec contradiction or required spec amendment, not merely an unavailable verification dependency
- Terminal closure is the correct lifecycle and base branch should record
REJECTED.md
RESUME when:
- The blocker evidence is vague, speculative, or lacks concrete file/line references
- The blocker could be resolved by a different implementation approach within the repo
- The apply agent did not exhaust reasonable alternatives before escalating
- The rejection reason is about difficulty rather than impossibility
BLOCK when:
- The change intent remains valid, but required verification or execution cannot currently complete for an external/local infrastructure reason
- Examples: Docker daemon unavailable, Docker image pull DNS timeout, package registry timeout, external service outage, missing non-mockable external credential, rate limit, port conflict, or managed verification job still running/pending
- The correct lifecycle is resumable stalled hold, not terminal rejected
Outcome Rules
- On
REJECTION_REVIEW: CONFIRM, runtime finalizes rejection flow and base branch records only openspec/changes/<change-id>/REJECTED.md.
- On
REJECTION_REVIEW: RESUME, runtime removes worktree-local REJECTED.md, appends at least one incomplete non-rejection recovery task to the change's task file, in that file's own format, and routes directly back to apply.
- On
REJECTION_REVIEW: BLOCK, runtime removes worktree-local REJECTED.md, appends/retains recovery work in the change's task file, records a non-terminal stalled hold, and MUST NOT write base-branch REJECTED.md.
- Rejecting review MUST NOT output
ACCEPTANCE: GATED; that marker is reserved for acceptance operation output.
Output Contract
Output exactly ONE verdict marker at the end on its own line:
REJECTION_REVIEW: CONFIRM
or
REJECTION_REVIEW: RESUME
or
REJECTION_REVIEW: BLOCK
Never:
- Ask user for clarification
- Stop and wait for input
- Output both markers
- Output acceptance-related markers
1---2name: cflx-rejecting3description: Review apply-generated rejection proposals (REJECTED.md) before any terminal reject decision. Returns REJECTION_REVIEW CONFIRM, RESUME, or BLOCK. CRITICAL - This skill CANNOT ask questions or request user input.4---56# Conflux Rejecting Review78Review apply-generated rejection proposals in `openspec/changes/<change-id>/REJECTED.md` before any terminal reject decision.910**CRITICAL**: This skill CANNOT ask questions to users. All decisions must be made autonomously based on available context.1112## Purpose1314When an apply operation determines that implementation is impossible and creates a `REJECTED.md` proposal, this skill reviews that proposal to decide whether the rejection is terminal, repository-fixable, or a real non-terminal stalled blocker.1516## Required Checks1718- If `openspec/CONSTITUTION.md` exists, read it before rejection review and treat it as higher-priority project law than proposal/spec deltas.19201. Confirm `openspec/changes/<change-id>/REJECTED.md` exists and contains a concrete reason.212. Confirm blocker evidence in the task file named by `tasks_path` (`## Implementation Blocker #N` in `tasks.md`, or the matching narrative note in `tasks.json`) is specific and actionable.223. Decide one outcome only:23 - `CONFIRM`: terminal rejection evidence proves the change intent is invalid, obsolete, contradictory, or constitution-violating.24 - `RESUME`: reject proposal is dismissed and change must return to apply because the issue is repository-fixable or the evidence is insufficient.25 - `BLOCK`: reject proposal describes a real non-terminal blocker such as infrastructure outage, missing non-mockable credential, rate limit, port conflict, package/Docker registry timeout, or pending managed verification job.264. Output exactly one final marker line:27 - `REJECTION_REVIEW: CONFIRM`28 - `REJECTION_REVIEW: RESUME`29 - `REJECTION_REVIEW: BLOCK`3031## Decision Criteria3233### CONFIRM when:34- The blocker evidence proves the proposal/change intent itself is invalid, obsolete, contradictory, or violates `openspec/CONSTITUTION.md`35- The root cause is a spec contradiction or required spec amendment, not merely an unavailable verification dependency36- Terminal closure is the correct lifecycle and base branch should record `REJECTED.md`3738### RESUME when:39- The blocker evidence is vague, speculative, or lacks concrete file/line references40- The blocker could be resolved by a different implementation approach within the repo41- The apply agent did not exhaust reasonable alternatives before escalating42- The rejection reason is about difficulty rather than impossibility4344### BLOCK when:45- The change intent remains valid, but required verification or execution cannot currently complete for an external/local infrastructure reason46- Examples: Docker daemon unavailable, Docker image pull DNS timeout, package registry timeout, external service outage, missing non-mockable external credential, rate limit, port conflict, or managed verification job still running/pending47- The correct lifecycle is resumable stalled hold, not terminal rejected4849## Outcome Rules5051- On `REJECTION_REVIEW: CONFIRM`, runtime finalizes rejection flow and base branch records only `openspec/changes/<change-id>/REJECTED.md`.52- On `REJECTION_REVIEW: RESUME`, runtime removes worktree-local `REJECTED.md`, appends at least one incomplete non-rejection recovery task to the change's task file, in that file's own format, and routes directly back to apply.53- On `REJECTION_REVIEW: BLOCK`, runtime removes worktree-local `REJECTED.md`, appends/retains recovery work in the change's task file, records a non-terminal stalled hold, and MUST NOT write base-branch `REJECTED.md`.54- Rejecting review MUST NOT output `ACCEPTANCE: GATED`; that marker is reserved for acceptance operation output.5556## Output Contract5758Output exactly ONE verdict marker at the end on its own line:5960```61REJECTION_REVIEW: CONFIRM62```63or64```65REJECTION_REVIEW: RESUME66```67or68```69REJECTION_REVIEW: BLOCK70```7172**Never**:73- Ask user for clarification74- Stop and wait for input75- Output both markers76- Output acceptance-related markers