3.3 KiB
Design
Data Flow
Gatekeeper rule catalog
-> ExecutorGatekeeperService.validate(...)
-> gatekeeper_result.rule_set_version + rule metadata summary
-> DiagnosisTraceEvaluator fixture checks
-> baseline report / demo runbook
Stable demo scenarios
-> request payloads and docs
-> optional live run for main path
-> saved trace fixtures for deterministic matrix
-> mvp/eval baseline report
Eval Matrix
The diagnosis eval matrix remains offline and deterministic. It should cover these rows:
| Matrix row | Expected signal |
|---|---|
| Positive supported evidence | PASS, Gatekeeper pass, Composer valid |
| Narrow-scope observation | PASS, one or minimal claims, no forbidden over-expansion |
| No-evidence negative observation | PASS or allowed non-reject verdict, $.no_evidence, no overstatement |
| Unsupported claim filtering | LOW_CONFID, unsupported claim not in final answer |
| Gatekeeper fabricated reference | REJECT or LOW_CONFID, Gatekeeper fail |
| Composer fallback | no raw Executor protocol leakage |
The evaluator should validate rule set version only for cases that opt into the new check. This keeps old fixtures readable while allowing the new matrix to prove Gatekeeper metadata persistence.
Stable Demo Scenarios
Stable demo scenarios are source-controlled payloads and documentation, not a live-only test harness. The demo set should include:
- A supported positive path.
- A no-evidence / negative-observation path.
- A safety/reject path explained through fixed fixture or evaluator output.
Only the main path needs a live script in this phase. Other scenarios may be represented by payloads, fixture names, and expected trace fields.
Gatekeeper Rule Catalog
Gatekeeper rules stay local and lightweight:
{
"version": "gatekeeper-rules-v1",
"rules": [
{
"id": "evidence.raw_path",
"description": "raw_path must exist in retrieval_details.evidence_refs",
"default_severity": "reject",
"enabled": true
}
]
}
The first implementation may use an in-memory default catalog or a classpath JSON resource. It must expose:
- rule set version
- enabled rule ids
- rule descriptions
- severity defaults or threshold parameters when present
Gatekeeper validation logic remains deterministic Java code. The catalog is metadata/config, not a dynamic scripting engine.
Audit Persistence
gatekeeper_result should include:
{
"rule_set_version": "gatekeeper-rules-v1",
"rules": [
{
"id": "evidence.raw_path",
"description": "raw_path must exist in retrieval_details.evidence_refs",
"enabled": true,
"default_severity": "reject"
}
]
}
Existing fields remain:
statusseveritychecked_bindingsfailed_ruleswarningserrors
Interface Impact
Impact level: L2 internal contract change.
This expands internal audit JSON and eval case/result fields. It does not change external HTTP APIs, database schema, Planner output, or public DTO contracts.
Risks
- Too much Gatekeeper flexibility could weaken safety. This phase only adds metadata/configuration and keeps rule implementations fixed in code.
- Demo scenarios should not promise deterministic LLM behavior. Deterministic claims should point to fixture-backed eval results.
- Baseline updates must be made together with new fixtures and tests.