44 lines
1.6 KiB
Markdown
44 lines
1.6 KiB
Markdown
|
|
# Phase 2 Research
|
||
|
|
|
||
|
|
## Question
|
||
|
|
|
||
|
|
How should the diagnostic interview loop be implemented while preserving the
|
||
|
|
Phase 1 typed workflow boundary and avoiding premature infrastructure?
|
||
|
|
|
||
|
|
## Findings
|
||
|
|
|
||
|
|
### In-memory persistence is enough for Phase 2
|
||
|
|
|
||
|
|
The goal is to prove request/response flow and evidence preservation. A database
|
||
|
|
would add migration, repository, and lifecycle complexity before the product loop
|
||
|
|
is proven. An in-memory store with clear interface boundaries keeps the future
|
||
|
|
database replacement straightforward.
|
||
|
|
|
||
|
|
### Standard library routing remains sufficient
|
||
|
|
|
||
|
|
The current backend already uses `http.ServeMux`. Phase 2 can add route patterns
|
||
|
|
with path variables using Go 1.23's standard mux support. No router dependency
|
||
|
|
is needed.
|
||
|
|
|
||
|
|
### Deterministic grading is acceptable as a workflow stub
|
||
|
|
|
||
|
|
Phase 2 requires typed grading through the workflow boundary. It does not require
|
||
|
|
live LLM grading. A deterministic stub can grade on answer length and preserve
|
||
|
|
evidence. This proves the product state flow and keeps live model integration
|
||
|
|
for a later phase.
|
||
|
|
|
||
|
|
### Keep interview domain separate from HTTP
|
||
|
|
|
||
|
|
`internal/interview` should own session creation, question catalog selection,
|
||
|
|
answer recording, and grade attachment. HTTP handlers should translate requests
|
||
|
|
and responses only.
|
||
|
|
|
||
|
|
## Recommendation
|
||
|
|
|
||
|
|
1. Add `internal/interview` domain service and in-memory store.
|
||
|
|
2. Add a small backend developer question catalog.
|
||
|
|
3. Add typed endpoints for creating/getting sessions and submitting answers.
|
||
|
|
4. Extend workflow stub to return deterministic `GradedAnswer`.
|
||
|
|
5. Add tests at domain and HTTP layers.
|
||
|
|
6. Verify with `go test ./...`, OpenSpec, and line-count checks.
|