Skip to content

spec(policy): verdict-disposal classifier and explicit tier escalation #296

Description

@LeXwDeX

Blocked by: #294

Ticket 4/4 of the harness workstream (see #293). Primary source: docs/harness-review-2026-08-16.md (sections C-1, C-2). Blocked by ticket 2/4 (the disposal wording is only meaningful once REJECT leaves the workflow reopenable). Files live in this repository's orchestration guide surface (packages/core), not the config repo.

Problem Statement

The Verdict Disposal Contract lists four disposal options for a non-ACCEPT checkpoint verdict but gives no rule for choosing among them. In practice the parent therefore either stops at summarizing the verdict (the exact failure the contract forbids) or reaches for the most destructive option — a replacement workflow — when a bounded in-graph wave was the right answer. Separately, escalation from a lite route to full-shaped assurance exists only as a hint and is never applied at checkpoints.

Solution

Add a finding classification table to the policy guide's Verdict Disposal Contract — the missing selector between the four existing options, informed by situation classification (the ask-matt insight, repurposed as a disposal classifier, never as a route selector):

Finding nature Disposal Contract option
Bounded within current scope Bounded correction wave in the same graph, tier unchanged extend
Reveals cross-module / boundary risk the lite shape cannot cover Escalate: extend with full-shaped assurance lanes extend (escalated)
The situation itself was misclassified (e.g. change assumed, unknown-cause defect found) The only legitimate route switch: new workflow on the correct backbone, naming carried-over evidence new workflow
Unbounded / foggy Stop shape-change; produce decisions, not deliverables (future decision route) reasoned stop or escalation

Additionally, promote lite→full tier escalation from hint to explicit rule, restate the tier discriminator as risk dimensions only (never role count), and forbid route-reselection as a default disposal.

User Stories

  1. As a parent orchestrator facing a REJECT checkpoint, I want one deterministic question — "what kind of finding is this?" — to select the disposal, so that I never default to starting over.
  2. As a parent orchestrator, I want tier escalation stated as an explicit disposal, so that a lite graph whose gate reveals boundary risk grows full-shaped lanes instead of silently under-assuring.
  3. As a maintainer, I want the classifier in the same guide as the contract, so that four options and their selector stay in one authoritative place.
  4. As a maintainer, I want role-count-based tier selection forbidden in text, so that risk (reversibility, module span, contracts, persistence, CI) stays the only discriminator.

Implementation Decisions

  1. Guide-text-only change to the orchestration policy guide; the blocks guide gains one cross-reference. No runtime code.
  2. The classifier is a disposal selector, not a router: same-objective work stays in one workflow; route reselection remains the exception bound to situation misclassification.
  3. Escalation keeps additive semantics — full-shaped assurance lanes are appended waves, not replacement graphs.
  4. Any command/test snapshot covering the guide content is updated with the text.

Testing Decisions

  • Acceptance is textual: the disposition table present in the policy guide, tier rules restated, snapshot tests (if any cover this file) green.
  • Prior art: existing guide-text review in this repo's command plugin tests.

Out of Scope

Further Notes

  • The "foggy / decisions-not-deliverables" row points at a future decision route (workstream D-1); the classifier must stay valid when that route arrives.

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentFully specified and ready for an agent

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions