From 2744c37f58f7a2959fc706a941a6c4db39923839 Mon Sep 17 00:00:00 2001 From: user Date: Sun, 26 Apr 2026 15:45:56 +0900 Subject: [PATCH] docs: plan backend foundation phase --- .planning/PROJECT.md | 4 +- .planning/STATE.md | 12 +- .../001-CONTEXT.md | 93 ++++++++ .../001-PLAN.md | 108 ++++++++++ .../001-RESEARCH.md | 69 ++++++ docs/planning/ARCHITECTURE.md | 6 + docs/planning/INTERVIEW_TRACKS.md | 112 ++++++++++ docs/planning/PRD.md | 11 +- docs/planning/WORKFLOW_CONTRACTS.md | 200 ++++++++++++++++++ .../specs/job-seeker-tutor/spec.md | 8 + .../specs/tutor-workflows/spec.md | 9 + .../bootstrap-job-tutor-platform/tasks.md | 9 +- 12 files changed, 628 insertions(+), 13 deletions(-) create mode 100644 .planning/phases/001-go-backend-foundation-and-workflow-boundary/001-CONTEXT.md create mode 100644 .planning/phases/001-go-backend-foundation-and-workflow-boundary/001-PLAN.md create mode 100644 .planning/phases/001-go-backend-foundation-and-workflow-boundary/001-RESEARCH.md create mode 100644 docs/planning/INTERVIEW_TRACKS.md create mode 100644 docs/planning/WORKFLOW_CONTRACTS.md diff --git a/.planning/PROJECT.md b/.planning/PROJECT.md index d0491df..a12872f 100644 --- a/.planning/PROJECT.md +++ b/.planning/PROJECT.md @@ -54,6 +54,7 @@ each short practice loop. - Workflow behavior should be configuration-first and inspired by `agent-farm-go`. - LLM execution should use `third-one`, defaulting to `deepseek-v4-flash`. +- The first interview track is Backend Developer Interview. - Memory should be structured learner state, not a flat RAG transcript. - Gamification should use Flow, adaptive difficulty, growth lines, and strong session endings without exploitative mechanics. @@ -79,6 +80,7 @@ each short practice loop. | Structured learner memory, not RAG-first | Product value is learner modeling and readiness | Pending | | Game-inspired progression must be evidence-backed | Creates retention without empty rewards | Pending | | 600-line source limit | Forces responsibility boundaries early | Pending | +| Backend Developer Interview first track | Gives a broad but testable MVP concept set | Pending | --- -*Last updated: 2026-04-26 after Go backend and GSD planning direction were set.* +*Last updated: 2026-04-26 after first track and Phase 1 plan were set.* diff --git a/.planning/STATE.md b/.planning/STATE.md index d60d95c..f07bca9 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -19,18 +19,22 @@ interview-ready after each short practice loop. - Source files should stay at or below 600 lines. - SOLID, KISS, and YAGNI are active implementation constraints. - OpenSpec is the intent/requirements source of truth. +- First interview track is Backend Developer Interview. +- Phase 1 has context, research, and plan artifacts. ## Next Actions -1. Choose first interview track and canonical concept seed list. -2. Define typed contracts for diagnostic, grading, memory extraction, next - challenge, readiness update, ontology gap, and asset prompt. -3. Plan Phase 1 with GSD before writing backend code. +1. Execute Phase 1 Go backend foundation plan. +2. Keep `docs/planning/WORKFLOW_CONTRACTS.md` aligned with Go structs during + implementation. +3. After Phase 1, plan Phase 2 diagnostic interview loop. ## Validation Log - 2026-04-26: `openspec validate bootstrap-job-tutor-platform --strict` passed before GSD planning docs were created. +- 2026-04-26: First track, workflow contracts, and Phase 1 GSD plan were + created. --- *State initialized: 2026-04-26.* diff --git a/.planning/phases/001-go-backend-foundation-and-workflow-boundary/001-CONTEXT.md b/.planning/phases/001-go-backend-foundation-and-workflow-boundary/001-CONTEXT.md new file mode 100644 index 0000000..8b3e063 --- /dev/null +++ b/.planning/phases/001-go-backend-foundation-and-workflow-boundary/001-CONTEXT.md @@ -0,0 +1,93 @@ +# Phase 1: Go Backend Foundation and Workflow Boundary - Context + +**Gathered:** 2026-04-26 +**Status:** Ready for planning +**Source:** GSD continuation from product planning + + +## Phase Boundary + +Phase 1 establishes the Go backend foundation and the typed workflow boundary. +It does not need to implement the full tutoring loop. It should create the +minimal service skeleton that future phases can build on without violating the +600-line rule, SOLID/KISS/YAGNI, or OpenSpec. + + + + +## Implementation Decisions + +### Stack + +- Backend is Go. +- The first source package structure should separate app/bootstrap, HTTP + transport, config, workflow contracts, and domain placeholders. +- The implementation should not introduce a database, queue, UI, auth provider, + or image provider in Phase 1 unless needed for scaffold validation. + +### Workflow Boundary + +- `agent-farm-go` patterns are internalized behind typed Go interfaces. +- API/handler code must not shell out to workflow scripts directly. +- `third-one` / `deepseek-v4-flash` runtime selection belongs behind config and + workflow interfaces. +- Workflow result contracts should align with + `docs/planning/WORKFLOW_CONTRACTS.md`. + +### Engineering Constraints + +- No manually authored source file over 600 lines. +- SOLID, KISS, and YAGNI are active constraints. +- Keep learner memory, ontology, grading, progression, and assets separated as + future module boundaries. + + + + +## Canonical References + +Downstream agents MUST read these before planning or implementing. + +### Product and Requirements + +- `docs/planning/PRD.md` - product direction and MVP scope. +- `docs/planning/ARCHITECTURE.md` - Go backend and internalized workflow shape. +- `docs/planning/ENGINEERING.md` - implementation constraints. +- `.planning/REQUIREMENTS.md` - Phase 1 requirement IDs. +- `.planning/ROADMAP.md` - phase goal and success criteria. + +### Workflow Contracts and Specs + +- `docs/planning/WORKFLOW_CONTRACTS.md` - typed workflow contract plan. +- `openspec/changes/bootstrap-job-tutor-platform/specs/tutor-workflows/spec.md` + - workflow and Go backend requirements. +- `openspec/changes/bootstrap-job-tutor-platform/specs/engineering-quality/spec.md` + - code-size and design quality requirements. + + + + +## Specific Ideas + +- Start with a small Go module and one health endpoint or CLI smoke path. +- Add config structs for runtime/model keys without calling live providers yet. +- Add workflow interface definitions and stub implementations that return typed + errors or no-op evidence-safe results. +- Add tests for config loading and workflow interface behavior where practical. + + + + +## Deferred Ideas + +- Real diagnostic interview flow belongs to Phase 2. +- Persistent learner memory belongs to Phase 3. +- Progression/readiness map belongs to Phase 4. +- Ontology ingestion belongs to Phase 5. +- Image asset generation belongs to Phase 6. + + + +--- +*Phase: 001-go-backend-foundation-and-workflow-boundary* +*Context gathered: 2026-04-26* diff --git a/.planning/phases/001-go-backend-foundation-and-workflow-boundary/001-PLAN.md b/.planning/phases/001-go-backend-foundation-and-workflow-boundary/001-PLAN.md new file mode 100644 index 0000000..4e256e7 --- /dev/null +++ b/.planning/phases/001-go-backend-foundation-and-workflow-boundary/001-PLAN.md @@ -0,0 +1,108 @@ +# Phase 1 Plan: Go Backend Foundation and Workflow Boundary + +**Status:** Ready for execution +**Phase Goal:** Establish the Go service skeleton and typed workflow boundary +for internalized `agent-farm-go` patterns. + +## Scope + +This phase creates the backend foundation only. It should not implement the full +diagnostic interview loop, persistence, frontend, ontology ingestion, or image +generation. + +## Requirements Covered + +- BACK-01: Backend service is implemented in Go. +- BACK-02: Backend exposes typed interfaces for tutor workflows. +- BACK-03: Backend integrates internalized `agent-farm-go` workflow patterns + without ad hoc handler shellouts. +- BACK-04: Workflow LLM execution uses `third-one` with configurable runtime and + default `deepseek-v4-flash`. +- BACK-05: Manually authored source files stay at or below 600 lines. + +## Tasks + +### 1. Initialize Go backend scaffold + +- Create `go.mod`. +- Create `cmd/tutor-api/main.go`. +- Create minimal app assembly package under `internal/app`. +- Keep entrypoint thin and below 600 lines. + +### 2. Add configuration boundary + +- Add `internal/config`. +- Support app address, environment name, workflow runtime path, model key, and + third-one binary path as config fields. +- Default model key to `deepseek-v4-flash`. +- Avoid storing secrets in tracked files. + +### 3. Add typed workflow boundary + +- Add `internal/workflows`. +- Define minimal Go structs/interfaces for: + - `DiagnosticResult` + - `GradedAnswer` + - `MemoryUpdateCandidate` + - `NextChallenge` + - `ReadinessUpdate` +- Add a narrow runner interface that future internalized `agent-farm-go` + execution can satisfy. +- Do not call shell commands from HTTP handlers. + +### 4. Add HTTP smoke surface + +- Add `internal/httpapi`. +- Add health endpoint such as `GET /healthz`. +- Optionally expose config-safe runtime metadata, excluding secrets. + +### 5. Add validation tests + +- Test config defaults. +- Test health handler. +- Test workflow stub returns typed results or typed not-implemented errors. +- Verify no source file exceeds 600 lines. + +### 6. Update repo instructions + +- Add concrete Go build/test commands to `AGENTS.md`. +- Update OpenSpec/GSD state if implementation changes scope. + +## Verification + +Run: + +```powershell +go test ./... +openspec validate bootstrap-job-tutor-platform --strict +``` + +Also check manually authored source file length: + +```powershell +Get-ChildItem -Recurse -File *.go | ForEach-Object { + $lines = (Get-Content -LiteralPath $_.FullName | Measure-Object -Line).Lines + if ($lines -gt 600) { throw "$($_.FullName) has $lines lines" } +} +``` + +## Out of Scope + +- Database schema. +- Authentication. +- Real LLM calls. +- Live `third-one` execution. +- Frontend. +- Material ingestion. +- Image generation. + +## Plan Quality Check + +- Goal-backward fit: each task supports Go scaffold or typed workflow boundary. +- KISS/YAGNI: no database, queue, provider SDK, or full workflow engine in this + phase. +- SOLID: app, config, HTTP, and workflow responsibilities are separated. +- Evidence: build/tests/OpenSpec/file-length checks prove the phase. + +--- +*Plan created: 2026-04-26* diff --git a/.planning/phases/001-go-backend-foundation-and-workflow-boundary/001-RESEARCH.md b/.planning/phases/001-go-backend-foundation-and-workflow-boundary/001-RESEARCH.md new file mode 100644 index 0000000..8f5c7de --- /dev/null +++ b/.planning/phases/001-go-backend-foundation-and-workflow-boundary/001-RESEARCH.md @@ -0,0 +1,69 @@ +# Phase 1 Research + +## Question + +How should the first Go backend scaffold be shaped so it can internalize +`agent-farm-go` workflow patterns without overbuilding? + +## Findings + +### Keep the first backend narrow + +Phase 1 should prove structure, contracts, and validation, not product behavior. +The safest first slice is: + +- `cmd/tutor-api` entrypoint +- internal config package +- internal HTTP/app package +- internal workflow contract package +- small health or version endpoint +- tests for config and workflow boundary behavior + +### Prefer typed interfaces over runtime coupling + +The backend should expose a `WorkflowRunner` style interface that future phases +can implement using internalized `agent-farm-go` execution. Phase 1 can use +stub/no-op implementations as long as the interface boundaries and contracts are +clear. + +### Avoid premature infrastructure + +Do not add Postgres, migrations, queues, auth, frontend, or image generation in +Phase 1. Those are real needs later, but adding them before the backend boundary +exists would violate KISS/YAGNI. + +### Module boundary recommendation + +Initial Go package boundaries: + +- `internal/app`: service assembly and dependency wiring +- `internal/config`: environment/runtime config +- `internal/httpapi`: HTTP routing and handlers +- `internal/workflows`: workflow interfaces and typed contracts +- `internal/version`: version/build metadata if needed + +Future packages can be added when their phase arrives: + +- `internal/interview` +- `internal/learner_memory` +- `internal/progression` +- `internal/ontology` +- `internal/assets` + +## Risks + +- Making workflow interfaces too generic creates a framework before use. +- Putting typed contracts in HTTP handlers will make future phases hard to + isolate. +- Shelling out from handlers would contradict the internalized workflow decision. + +## Recommendation + +Plan Phase 1 as a scaffold and boundary proof: + +1. Create Go module and package skeleton. +2. Add config for app address and workflow runtime keys. +3. Add typed workflow contracts from the planning document in minimal Go form. +4. Add a stub workflow runner. +5. Add health endpoint and tests. +6. Document build/test commands in `AGENTS.md`. diff --git a/docs/planning/ARCHITECTURE.md b/docs/planning/ARCHITECTURE.md index 481f739..96a046a 100644 --- a/docs/planning/ARCHITECTURE.md +++ b/docs/planning/ARCHITECTURE.md @@ -58,6 +58,9 @@ Implementation should follow the engineering rules in SOLID responsibility boundaries, KISS implementation choices, and YAGNI for future-only abstractions. +Initial typed workflow contracts are defined in +`docs/planning/WORKFLOW_CONTRACTS.md`. + Initial workflow set: - `diagnose_job_seeker` @@ -91,6 +94,9 @@ Core progression surfaces: - strong-answer portfolio - interview-date campaign plan +The first progression track is the backend developer interview seed list in +`docs/planning/INTERVIEW_TRACKS.md`. + Progression decisions should read from learner memory and grading evidence. They should be exposed as workflow outputs so the service can explain why a question, reward, or unlock appeared. diff --git a/docs/planning/INTERVIEW_TRACKS.md b/docs/planning/INTERVIEW_TRACKS.md new file mode 100644 index 0000000..41aa828 --- /dev/null +++ b/docs/planning/INTERVIEW_TRACKS.md @@ -0,0 +1,112 @@ +# Interview Tracks + +## MVP Track: Backend Developer Interview + +The first interview track is backend developer preparation. This track is broad +enough to be valuable to job seekers and narrow enough to produce testable +diagnostic, grading, memory, and progression behavior. + +## Target User + +- Junior backend developer candidates. +- Bootcamp graduates preparing for backend interviews. +- Full-stack developers who need backend interview readiness. +- Developers changing stack into backend service work. + +## Canonical Concept Seed List + +### 1. HTTP and Web Fundamentals + +- request and response lifecycle +- headers, status codes, methods +- idempotency and safe methods +- cookies, sessions, tokens +- latency, timeout, retry basics + +### 2. REST and API Design + +- resource modeling +- endpoint shape +- validation and error responses +- pagination and filtering +- versioning +- backward compatibility + +### 3. Databases and Indexes + +- relational modeling +- primary keys and foreign keys +- index purpose and tradeoffs +- query plans at a conceptual level +- N+1 query problem +- migrations + +### 4. Transactions and Consistency + +- ACID +- isolation anomalies +- transaction boundaries +- optimistic vs pessimistic locking +- idempotent writes +- eventual consistency basics + +### 5. Caching + +- cache-aside +- TTL and invalidation +- stale data risks +- cache stampede +- CDN vs application cache +- when not to cache + +### 6. Concurrency and Async Work + +- race conditions +- locks and coordination +- worker queues +- retry and dead-letter basics +- backpressure +- Go goroutine/channel concepts for Go-oriented tracks + +### 7. Testing and Reliability + +- unit vs integration tests +- test doubles +- contract tests +- observability basics +- logging and metrics +- failure-mode thinking + +### 8. System Design Basics + +- load balancing +- horizontal scaling +- stateless service design +- database bottlenecks +- rate limiting +- file/object storage +- basic architecture tradeoffs + +## Challenge Ladder + +Each concept should support five levels: + +1. Define the concept. +2. Explain tradeoffs. +3. Debug a realistic scenario. +4. Design under constraints. +5. Answer under interview pressure. + +## First Boss Question + +"Design a rate-limited backend API for submitting job applications. Cover HTTP +API design, database transaction boundaries, duplicate submission prevention, +cache behavior, failure handling, and test strategy." + +## MVP Exclusions + +- Advanced distributed systems theory. +- Deep database internals. +- Language-specific trivia-heavy questions. +- Company-specific interview packs. +- Frontend, mobile, AI, and DevOps tracks. diff --git a/docs/planning/PRD.md b/docs/planning/PRD.md index c04d5c6..b5ebeb2 100644 --- a/docs/planning/PRD.md +++ b/docs/planning/PRD.md @@ -85,12 +85,13 @@ The first MVP should prove one loop: 7. User sees visible readiness progress, next unlocks, and a recommended next challenge. -Recommended first track: +First track: - Backend developer interview preparation. -- Topics: HTTP, REST, databases, transactions, caching, concurrency, testing, - system design basics, Go or JavaScript/TypeScript depending on first content - corpus. +- Topics: HTTP and web fundamentals, REST/API design, databases and indexes, + transactions and consistency, caching, concurrency/async work, testing and + reliability, and system design basics. +- Canonical seed list: `docs/planning/INTERVIEW_TRACKS.md`. ## Core User Flows @@ -183,6 +184,8 @@ the configured image generation provider. configuration. - Workflow outputs SHALL prefer typed JSON contracts for grading, memory extraction, ontology updates, and review-plan generation. +- Initial workflow contract plan SHALL follow + `docs/planning/WORKFLOW_CONTRACTS.md`. ### Visual teaching assets diff --git a/docs/planning/WORKFLOW_CONTRACTS.md b/docs/planning/WORKFLOW_CONTRACTS.md new file mode 100644 index 0000000..98877ac --- /dev/null +++ b/docs/planning/WORKFLOW_CONTRACTS.md @@ -0,0 +1,200 @@ +# Workflow Contracts + +## Purpose + +LLM workflow outputs that affect product state must be typed and inspectable. +The Go backend should call internalized workflow interfaces and then persist +validated results. Product state must not depend on parsing arbitrary prose. + +These contracts are initial planning contracts. Field names may evolve during +implementation, but the responsibilities should remain stable. + +## Shared Types + +```json +{ + "evidence_ref": { + "kind": "answer|grading|source|session|asset", + "id": "string", + "quote": "string", + "confidence": 0.0 + } +} +``` + +```json +{ + "concept_ref": { + "id": "string", + "label": "string", + "track": "backend-developer" + } +} +``` + +## DiagnosticResult + +Produced by `diagnose_job_seeker`. + +```json +{ + "user_id": "string", + "track": "backend-developer", + "target_role": "junior-backend-developer", + "stack": ["go", "postgres"], + "initial_readiness": "unknown|fragile|improving|interview_ready|strong_signal", + "concept_findings": [ + { + "concept": "concept_ref", + "readiness": "unknown|fragile|improving|interview_ready|strong_signal", + "reason": "string", + "evidence": ["evidence_ref"] + } + ], + "recommended_next_concepts": ["concept_ref"] +} +``` + +## GradedAnswer + +Produced by `grade_interview_answer`. + +```json +{ + "answer_id": "string", + "question_id": "string", + "concepts": ["concept_ref"], + "scores": { + "correctness": 0, + "depth": 0, + "communication": 0, + "production_judgment": 0 + }, + "overall": "miss|partial|solid|strong", + "strengths": ["string"], + "gaps": ["string"], + "misconception_candidates": [ + { + "label": "string", + "description": "string", + "evidence": ["evidence_ref"], + "confidence": 0.0 + } + ], + "follow_up": { + "needed": true, + "question": "string", + "purpose": "clarify|repair|stretch|pressure_test" + } +} +``` + +## MemoryUpdateCandidate + +Produced by `extract_learning_memory`. + +```json +{ + "user_id": "string", + "source_answer_id": "string", + "updates": [ + { + "kind": "concept_mastery|misconception|intervention|review_schedule", + "concept": "concept_ref", + "proposed_state": "unknown|fragile|improving|interview_ready|strong_signal", + "summary": "string", + "evidence": ["evidence_ref"], + "confidence": 0.0, + "durability": "tentative|confirmed" + } + ] +} +``` + +## NextChallenge + +Produced by `select_next_challenge`. + +```json +{ + "user_id": "string", + "track": "backend-developer", + "concept": "concept_ref", + "ladder_level": "define|tradeoffs|debug|design_constraints|interview_pressure", + "question": "string", + "rationale": "string", + "difficulty_action": "lower|hold|raise|recover", + "evidence": ["evidence_ref"] +} +``` + +## ReadinessUpdate + +Produced by `update_readiness_map`. + +```json +{ + "user_id": "string", + "track": "backend-developer", + "concept_updates": [ + { + "concept": "concept_ref", + "previous": "unknown|fragile|improving|interview_ready|strong_signal", + "next": "unknown|fragile|improving|interview_ready|strong_signal", + "reason": "string", + "evidence": ["evidence_ref"] + } + ], + "unlocks": [ + { + "kind": "boss_question|review_card|portfolio_entry", + "label": "string", + "reason": "string" + } + ] +} +``` + +## OntologyGap + +Produced by `detect_ontology_gaps`. + +```json +{ + "track": "backend-developer", + "missing_or_weak": [ + { + "concept": "concept_ref", + "gap_type": "missing_prerequisite|weak_evidence|outdated|needs_rubric", + "reason": "string", + "supporting_sources": ["evidence_ref"], + "proposed_action": "generate_candidate|request_source|human_review" + } + ] +} +``` + +## TeachingAssetPrompt + +Produced by `generate_teaching_asset_prompt`. + +```json +{ + "concept": "concept_ref", + "asset_type": "diagram|lesson_slice|worksheet|interview_card", + "prompt": "string", + "source_evidence": ["evidence_ref"], + "model_key": "gpt-image-v2", + "requires_model_id_verification": true, + "review_state": "candidate" +} +``` + +## Validation Rules + +- Required IDs must be non-empty. +- Any state-changing output must include evidence. +- Confidence values must be between 0 and 1. +- Generated or inferred content starts as `candidate` or `tentative`. +- `model_key` is a product config key; production code must verify the actual + provider model identifier before image calls. diff --git a/openspec/changes/bootstrap-job-tutor-platform/specs/job-seeker-tutor/spec.md b/openspec/changes/bootstrap-job-tutor-platform/specs/job-seeker-tutor/spec.md index c6ee3e5..b13e857 100644 --- a/openspec/changes/bootstrap-job-tutor-platform/specs/job-seeker-tutor/spec.md +++ b/openspec/changes/bootstrap-job-tutor-platform/specs/job-seeker-tutor/spec.md @@ -15,6 +15,14 @@ while preserving an architecture that can later support general students. - **AND** grades the user's answers against explicit rubrics - **AND** creates an initial concept weakness map. +#### Scenario: backend developer track is the first canonical track + +- **GIVEN** the MVP track catalog is initialized +- **WHEN** the system loads the first interview track +- **THEN** it provides the Backend Developer Interview track +- **AND** includes HTTP, REST/API design, databases, transactions, caching, + concurrency, testing, and system design basics as seed concept clusters. + #### Scenario: practice session adapts to weak answers - **GIVEN** a user answers an interview question weakly or incorrectly diff --git a/openspec/changes/bootstrap-job-tutor-platform/specs/tutor-workflows/spec.md b/openspec/changes/bootstrap-job-tutor-platform/specs/tutor-workflows/spec.md index 5e60123..a7060a7 100644 --- a/openspec/changes/bootstrap-job-tutor-platform/specs/tutor-workflows/spec.md +++ b/openspec/changes/bootstrap-job-tutor-platform/specs/tutor-workflows/spec.md @@ -23,6 +23,15 @@ The system SHALL express core tutor behavior as configurable workflows using - **THEN** it emits memory update candidates - **AND** each candidate identifies its evidence and confidence. +#### Scenario: initial contract set is available for backend planning + +- **GIVEN** the backend workflow boundary is planned +- **WHEN** implementation begins +- **THEN** the initial contract set includes DiagnosticResult, GradedAnswer, + MemoryUpdateCandidate, NextChallenge, ReadinessUpdate, OntologyGap, and + TeachingAssetPrompt +- **AND** each state-changing contract carries evidence references. + ### Requirement: Default LLM runtime is configurable The system SHALL keep the LLM model target configurable while defaulting the diff --git a/openspec/changes/bootstrap-job-tutor-platform/tasks.md b/openspec/changes/bootstrap-job-tutor-platform/tasks.md index 7abca1f..52b046b 100644 --- a/openspec/changes/bootstrap-job-tutor-platform/tasks.md +++ b/openspec/changes/bootstrap-job-tutor-platform/tasks.md @@ -7,8 +7,9 @@ - [x] 4. Incorporate game-design learning loop and progression planning. - [x] 5. Add repository engineering principles and code-size constraints. - [x] 6. Lock Go backend and internalized agent-farm workflow direction. -- [ ] 7. Choose the first interview track and canonical concept seed list. -- [ ] 8. Define typed JSON contracts for diagnostic, grading, memory extraction, +- [x] 7. Choose the first interview track and canonical concept seed list. +- [x] 8. Define typed JSON contracts for diagnostic, grading, memory extraction, ontology gap detection, and asset prompt generation. -- [ ] 9. Draft the first `agent-farm-go` YAML workflow package. -- [x] 10. Validate the OpenSpec change. +- [x] 9. Create Phase 1 GSD context, research, and plan artifacts. +- [ ] 10. Draft the first `agent-farm-go` YAML workflow package. +- [x] 11. Validate the OpenSpec change.