2.2 KiB
Decisions
Scope Decision
Stage four is limited to Composer final-answer generation and routing.
Reason: Gatekeeper and Verifier contracts were stabilized in earlier stages; this phase should only close the final-expression path.
Composer Responsibility
Composer is an expression layer, not a diagnosis layer.
It may rephrase and organize only filtered material. It must not call tools, introduce new facts, rejudge root cause, or read raw Executor/tool output.
Filtering Decision
ChatService owns Composer input filtering:
| Verifier classification | Composer handling |
|---|---|
direct_observation |
allowed_claims |
reasonable_inference |
allowed_claims, with bounded wording |
overstated |
allowed_hypotheses or missing_info |
unsupported |
missing_info |
external_unknown |
missing_info |
contradicted |
missing_info / REJECT-safe output |
For REJECT, allowed_hypotheses is always empty.
Fallback Decision
Malformed Composer output falls back to deterministic rendering from filtered Composer input.
Fallback must never expose:
- raw Composer JSON;
- raw Executor JSON;
- Executor
user_facing_answer; - full unscreened tool output.
Audit Decision
No new table is added. Composer output is persisted under:
diagnosis_session.self_evaluation.verifier_evaluation.composer_output
The audit snapshot is intentionally compact and stores status plus parsed user-facing fields.
Apply Fix Record
Initial targeted verification exposed test drift:
- test file had a UTF-8 BOM and failed Java compilation;
- scripted chat model did not recognize
COMPOSER_TEST_PROMPT; - older tests expected three-Agent execution and temporary V2 renderer behavior;
- LOW_CONFID assertions required indirect support to disappear instead of appearing as a possible direction.
Resolution: remove BOM, add Composer script branch, and update assertions to match the committed Composer contract.
Interface Impact
L2 internal behavior change:
- external Chat API still returns a final answer string;
- internal final-answer source changes from Executor/temporary renderer to Composer or safe fallback;
- audit JSON gains
composer_outputunder existingself_evaluation.
No database schema change.