Files

122 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## ADDED Requirements
### Requirement: StateGraph design baseline SHALL be versioned and authoritative
The project SHALL maintain an archived ISS-011 design baseline that defines Graph State, routing, retry limits, fallback classes, audit boundaries, migration stages, and test replacement scope without claiming runtime cutover is complete.
#### Scenario: Later stage starts implementation
- **WHEN** an ISS-011 stage 1–5 OpenSpec change is proposed
- **THEN** its context and design SHALL reference the archived stage 0 baseline
- **AND** any intentional deviation SHALL be resolved through that stage's OpenSpec before implementation
#### Scenario: Stage zero is accepted
- **WHEN** the design-freeze change is archived
- **THEN** no Java, SQL, Prompt, configuration, or runtime behavior SHALL have been changed by this change
- **AND** runtime specs SHALL NOT claim StateGraph cutover is already implemented
### Requirement: Graph State design SHALL use explicit bounded control state
Every cross-node field SHALL have one purpose, owner, and update strategy. Fields SHALL use Replace semantics except bounded `orchestration_events`, which SHALL use Append.
#### Scenario: Node state is designed
- **WHEN** an Agent or Java Node reads or writes parent Graph State
- **THEN** its allowed input projection and output fields SHALL be explicit
- **AND** Prompt text, model reasoning, complete tool output, and complete State snapshots SHALL NOT be control state
#### Scenario: Orchestration event is designed
- **WHEN** a node attempt reaches a handled terminal outcome
- **THEN** at most one event SHALL be appended for that attempt
- **AND** it SHALL contain only stable node, outcome, reason code, and attempt data
### Requirement: Routing design SHALL be complete and terminating
Every Planner, Executor, Gatekeeper, Verifier, Composer, evidence-retry, and Fallback outcome SHALL map to one next node or terminal result. Every loop SHALL have an explicit business limit and the Graph SHALL use a recursion limit.
#### Scenario: Technical retry is eligible
- **WHEN** Planner, Verifier, or Composer first returns INVALID_OUTPUT or RETRYABLE_FAILED with the same allowed input
- **THEN** only that node SHALL be retried once
- **AND** no preceding Agent, Gatekeeper, or tool SHALL be rerun
#### Scenario: Technical retry is exhausted
- **WHEN** Planner, Verifier, or Composer returns NON_RETRYABLE_FAILED or exhausts its retry
- **THEN** the route SHALL terminate through the defined safe Fallback
- **AND** no unbounded loop SHALL remain
#### Scenario: Executor cannot produce a legal contract
- **WHEN** Executor returns INVALID_OUTPUT, TOOL_BLOCKED, or FAILED without legal `executor_evidence_v2`
- **THEN** the route SHALL go directly to pre-verification Fallback
- **AND** Executor SHALL NOT be retried
#### Scenario: Evidence retry is eligible
- **WHEN** effective verdict is LOW_CONFID, it was not caused by Gatekeeper ceiling, valid evidence gaps exist, and the Run has not retried evidence
- **THEN** one EVIDENCE_GAP_ONLY retry SHALL return to a new Planner stage
- **AND** technical retry counters SHALL remain independent from evidence retry count
### Requirement: Verified evidence and fallback boundaries SHALL fail closed
PASS and eligible LOW_CONFID Gatekeeper outcomes SHALL pass through a verified-input builder. Verifier SHALL receive only claims and evidence projected from passed checked bindings, not complete `tool_trace_summary` or unverified Executor text.
#### Scenario: Gatekeeper result is unsafe or unknown
- **WHEN** Gatekeeper returns REJECT, unknown, or LOW_CONFID with zero verified bindings
- **THEN** the route SHALL enter pre-verification Fallback without Verifier
- **AND** the final answer SHALL NOT contain any Executor claim
#### Scenario: Gatekeeper permits verification
- **WHEN** Gatekeeper returns PASS or eligible LOW_CONFID
- **THEN** the builder SHALL project evidence only from passed bindings
- **AND** a LOW_CONFID ceiling SHALL NOT be upgraded to PASS
#### Scenario: Composer fails after verification
- **WHEN** Composer exhausts retry after receiving Verifier-allowed material
- **THEN** deterministic fallback MAY use only that allowed material
- **AND** it SHALL NOT read raw Executor or tool output
### Requirement: Orchestration audit design SHALL preserve Run ownership
Orchestration audit SHALL remain separate from self evaluation, AgentStep, ToolInvocation, and Graph checkpoint data. A compact summary SHALL be derived from bounded events and persisted only to the current Run.
#### Scenario: A safe response is produced
- **WHEN** Graph reaches Composer or handled Fallback and produces a safe answer
- **THEN** Run status SHALL be SUCCESS
- **AND** degradation SHALL be represented by verdict or `orchestrationTrace.degraded`
#### Scenario: Trace is exposed
- **WHEN** an exact new StateGraph Chat Run is queried
- **THEN** parsed audit SHALL appear only at `run.orchestrationTrace`
- **AND** it SHALL NOT be duplicated at top level, session projection, or raw field
#### Scenario: Audit ownership is evaluated
- **WHEN** events or summaries are persisted
- **THEN** `runId` SHALL be the ownership and Graph thread boundary
- **AND** no data SHALL include Prompt, reasoning, complete tool output, or another Run
### Requirement: Test migration design SHALL preserve safety behavior
The baseline SHALL identify Sequential/Hook implementation tests to replace and public/security contract tests to retain or extend. Fixed Agent call order SHALL NOT remain a correctness criterion.
#### Scenario: Old tests are replaced
- **WHEN** StateGraph tests become authoritative
- **THEN** `ChatServiceSequentialAgentTest` SHALL be replaced by route, node-contract, and Chat integration coverage
- **AND** `VerifierInputHookTest` SHALL be removed or rewritten for explicit nodes
#### Scenario: Safety tests are retained
- **WHEN** the new suite is assembled
- **THEN** Gatekeeper, Controller, Run/Trace, Repository, Composer, no-evidence, REJECT, and Eval safety contracts SHALL remain covered
- **AND** fixed-order-only assertions SHALL be removed