8.1 KiB
8.1 KiB
diagnosis-eval-demo-gatekeeper-closure Decisions
Clarify
- Entry summary: implement the next three interview-readiness items together: diagnosis eval fixture matrix, stable demo data set, and Gatekeeper rule configuration/audit version.
- Slug:
diagnosis-eval-demo-gatekeeper-closure - Devflow scale:
standard - Interface impact: expected L2 internal contract change because
gatekeeper_resultaudit JSON will gain rule metadata/version fields.
Context
devflow/index.mdused: related entries found for diagnosis eval harness, fixture expansion, MVP demo runbook, Gatekeeper hook, and verifier evidence reference fidelity.- Relevant glossary:
- Evidence Tools produce incident facts and must be recorded in
tool_invocation. - Verifier should not use skills/runbooks as incident evidence.
tool_invocation.retrieval_detailsis the structured evidence/audit home for tool-specific details.
- Evidence Tools produce incident facts and must be recorded in
- Historical constraints that must enter OpenSpec:
- Diagnosis eval is offline and deterministic; no LLM-as-judge.
- Demo assets should be runnable, but fixed regression should use saved fixtures.
- Gatekeeper remains in the Verifier hook path.
- No new database table for Gatekeeper audit; use
self_evaluation.verifier_evaluation.gatekeeper_result. $.no_evidenceis a query no-hit signal, not proof that a problem is impossible.
Question Pool
| ID | Dimension | Mode | Question | Status |
|---|---|---|---|---|
| Q1 | Terminology | evidence-driven | What names should this change use for the matrix, demo set, and Gatekeeper rule metadata? | Resolved |
| Q2 | Boundary | evidence-driven | Should this change alter public APIs, database schema, Planner output, or retry behavior? | Resolved |
| Q3 | Acceptance | evidence-driven | Which existing tests and baseline assets define the current acceptance style? | Resolved |
| Q4 | Technical | evidence-driven | Where should Gatekeeper rule metadata live with minimal implementation risk? | Pending code research |
| Q5 | Scope | user-interview | Should the stable demo set be documentation/payloads only, or should it include live E2E scripts for all scenarios? | Confirmed |
Evidence-driven Conclusions
- Q1 conclusion: use
diagnosis eval matrix,stable demo scenarios, andGatekeeper rule set versionas terms. - Q2 conclusion: keep this as an internal contract change. Do not add public endpoints, tables, Planner
scope_contract, or Gatekeeper retry. - Q3 conclusion: existing
DiagnosisTraceEvaluatorTest,ExecutorGatekeeperServiceTest,VerifierInputHookTest,ToolInvocationRecorderTest, andmvp/eval/reportsdefine the current acceptance style. - Q4 conclusion: Gatekeeper metadata should live behind a small rule catalog loaded by
ExecutorGatekeeperService; the audit output should include a rule set version and enabled rule metadata summary, without adding tables or remote registry.
User-interview Confirmations
- Q5 confirmed by resumed objective: complete items 1/2/3 with sm-flow, archive, submit, and run end-to-end if necessary.
- Implementation interpretation: stable demo scenarios will be fixed request payloads and runbook docs plus deterministic fixture-backed eval. Live E2E remains necessary only for at least one main path or where unit/fixture evidence is insufficient.
OpenSpec Backfill
- Created Draft proposal at
openspec/changes/diagnosis-eval-demo-gatekeeper-closure/proposal.md. - Context constraints from historical devflow entries were written into the proposal.
- Scope confirmation and Gatekeeper catalog placement were written into the proposal/design.
Current Checkpoint
- Discover completed.
- No implementation files changed yet.
Specify / Alignment
Cross-artifact Alignment
| Check | Status | Notes |
|---|---|---|
| brief/proposal goals -> proposal | Aligned | Proposal covers eval matrix, stable demo scenarios, and Gatekeeper rule catalog/audit version. |
| proposal scope/constraints -> design | Aligned | Design records offline deterministic eval, fixture-backed demo distinction, local rule catalog, and no new table/API. |
| design decisions -> specs/tasks | Aligned | Specs cover eval matrix, rule set version validation, demo scenarios, and Gatekeeper rule metadata; tasks cover matching implementation slices. |
| specs observable behavior -> tasks | Aligned | Each requirement has an executable task and acceptance check. |
Interface Impact
- Level: L2 internal contract change.
- Reason:
gatekeeper_resultinternal audit JSON gainsrule_set_versionand rule metadata summary. Eval case/result fields may gain optional rule set checks. No public HTTP API, database schema, or external DTO contract changes.
Audit
Input -> processing -> output chain:
mvp/demo request docs + mvp/eval fixtures
-> DiagnosisTraceEvaluator
-> baseline reports
-> interview/demo evidence
Gatekeeper rule catalog
-> ExecutorGatekeeperService
-> VerifierInputHook / ChatService persisted self_evaluation
-> Trace and eval audit
Architecture risk assessment:
- The change is intentionally internal and should not add new public consumers.
- Gatekeeper catalog must stay metadata-only; dynamic rule execution would be a different, riskier architecture.
- Fixture-backed demo scenarios should be documented as deterministic regression artifacts, not live LLM guarantees.
- Baseline report churn is expected and must be committed with case/fixture changes.
- No devflow/OpenSpec conflict found.
Commit Gate
cmd /c openspec validate diagnosis-eval-demo-gatekeeper-closure --strict: passed.cmd /c openspec validate --specs: passed, 10 specs passed.- File completeness:
- proposal.md: present.
- design.md: present.
- specs: present for
diagnosis-eval-harness,mvp-demo-trace-acceptance,chat-verifier-agent. - tasks.md: present.
- Consistency:
- Proposal concepts have corresponding design sections.
- Design decisions are reflected in specs/tasks.
- Task acceptance checks are verifiable.
Current Checkpoint
- Commit completed.
.committedmarker created.
Apply Verification
- Focused verification passed:
mvn "-Dtest=ExecutorGatekeeperServiceTest,DiagnosisTraceEvaluatorTest,DiagnosisEvalBaselineDiffTest,VerifierInputHookTest" test- Result: 36 tests, 0 failures, 0 errors.
- Broader relevant regression passed:
mvn "-Dtest=DiagnosisTraceEvaluatorTest,DiagnosisEvalBaselineDiffTest,ExecutorGatekeeperServiceTest,VerifierInputHookTest,ChatServiceSequentialAgentTest,ToolInvocationRecorderTest,QueryLogsToolsTest" test- Result: 61 tests, 0 failures, 0 errors.
- E2E startup repro found a Spring bean construction issue:
- Command:
mvn spring-boot:run "-Dspring-boot.run.profiles=mvp-demo" - Failure:
ExecutorGatekeeperServicehad two public constructors and no annotated constructor, so Spring attempted a no-arg constructor and failed withNo default constructor found. - Classification: code deviation from OpenSpec implementation intent, not a spec gap.
- Fix: annotate the production constructor with
@Autowired.
- Command:
- Post-fix focused regression passed:
mvn "-Dtest=ExecutorGatekeeperServiceTest,VerifierInputHookTest" test- Result: 23 tests, 0 failures, 0 errors.
- Live E2E passed for demo compatibility:
- Start:
mvn spring-boot:run "-Dspring-boot.run.profiles=mvp-demo" - Run:
powershell -ExecutionPolicy Bypass -File mvp/demo/scripts/run-payment-timeout-demo.ps1 - Result:
/api/chat,/api/diagnosis/{sessionId}/trace, and/api/feedbackcompleted successfully. - Trace summary included
hasVerifierEvaluation=true. - Persisted Gatekeeper audit included
rule_set_version=gatekeeper-rules-v1. - Residual quality note: the live payment-timeout response remained
LOW_CONFIDbecause some model-produced evidence bindings still lacked explicitsource_invocation_id; deterministic PASS/LOW_CONFID/REJECT claims are covered by fixture-backed eval.
- Start:
Archive Readiness
- OpenSpec tasks 1-4 completed.
- Verification is recorded in devflow acceptance artifacts.
- Remaining known risk: live LLM output is not deterministic and may still produce LOW_CONFID on the payment-timeout path; this is intentionally documented as demo compatibility, not a fixed PASS guarantee.