Appearance
Handoff: SVC-009-share-link-workflow-tests exam-service share-link workflow tests
Scope
- Service/area:
exam-service - Task pack:
docs/agents/service-tasks/exam-service.md - Goal: accept the bounded
SVC-009default access-link publish and runtime-access resolver test evidence, while keeping full legacy share-link CRUD and attempt-start promotion blocked. - Non-goals: full legacy
POST /api/exams/:id/share-linksCRUD parity, guest registration parity, public/api/exams*route promotion, attempt creation in exam-service, default attempt-start route cutover, or changes to legacy source under/Users/velikho/Desktop/WORKING/HOCTAPAZ/.
Docs Read
go-platform/docs/architecture/service-responsibility-matrix.mdgo-platform/docs/architecture/legacy-api-map.mdgo-platform/docs/agents/service-agent-execution-queue.jsongo-platform/docs/agents/service-agent-closeout-ledger.jsongo-platform/docs/agents/service-tasks/exam-service.mdgo-platform/docs/agents/agent-handoff-format.mdgo-platform/docs/api/exam-service.mdgo-platform/docs/qa/exam-authoring-route-rehearsals.mdgo-platform/docs/qa/service-agent-goal-completion-audit.mdgo-platform/docs/qa/service-agent-readiness-smoke.md
Legacy Evidence Read
/Users/velikho/Desktop/WORKING/HOCTAPAZ/node-platform/apps/api/src/modules/exams/exams.controller.ts/Users/velikho/Desktop/WORKING/HOCTAPAZ/node-platform/apps/api/prisma/schema.prisma- Legacy source was read-only evidence only; full share-link CRUD and public start endpoint parity are not claimed.
Files Changed
go-platform/docs/agents/handoffs/SVC-009-share-link-workflow-tests.mdgo-platform/docs/agents/service-agent-closeout-ledger.jsongo-platform/docs/agents/service-agent-closeout-ledger.md
Behavior Implemented
- No new runtime code was implemented in this handoff.
- Existing audited exam-service publish behavior creates a default access link and event for published exams.
- Existing audited runtime-access resolution returns trusted
startInput, rejects invalid link/password/window/snapshot/assignment states, and does not create attempts. - Existing audited HTTP handling redacts password hashes and link codes from public responses.
Tests And Verification
- Command:
GOTOOLCHAIN=go1.25.11 go test ./services/exam-service/... -count=1 - Result: passed.
- Evidence: exam-service usecase and HTTP packages passed, including default access-link publish, runtime-access resolver, assignment gating, and redaction coverage.
- Command:
make test-exam-authoring-routes - Result: passed.
- Evidence: default route table stayed legacy, and non-default exam authoring route examples validated without public promotion.
Route State
- Legacy route: default
/api/exams,/api/attempts, and fallback routes remain legacy-proxied indeploy/gateway/routes.json. - Native route: non-default authoring examples route only teacher/admin authoring paths to exam-service; broad exams and attempts remain legacy.
- Gateway state:
make test-exam-authoring-routespassed and is static route proof only, not public promotion evidence. - Rollback: keep
deploy/gateway/routes.jsonas the active route table. Do not promote exam authoring/start routes until exam-attempt contract proof, live/browser proof, idempotency/count enforcement, and rollback evidence are attached.
Data Notes
- Tables touched: none in this handoff run.
- Migration run: none.
- Validation report: not applicable because no live data was migrated or backfilled.
Risks / Blockers
- Full legacy share-link CRUD and guest registration behavior are not implemented in Go.
- Attempt-start promotion remains blocked until attempt-service and gateway proof exist.
- Real live/browser route proof and rollback-after-candidate evidence are still missing.
- Legacy exam, access-link, assignment, and attempt data remain coupled in the monolith until a later migration/backfill slice proves otherwise.
Next Step
- Implement or assign the remaining share-link CRUD and exam-attempt public start contract slice, then attach route-specific live/browser and rollback evidence before any default exam route promotion.