9.4 KiB
Plan - TEST
이 파일을 읽는 구현 에이전트에게
CODE_REVIEW-cloud-G06.md의 구현 에이전트 소유 섹션을 채우는 것까지가 구현이다. task metadata와 workspace slot terminal state를 실제 출력으로 기록하고 active 파일을 그대로 둔 채 리뷰 준비를 보고한다. SDD/Milestone lock 결정 외에는 직접 사용자에게 묻지 않는다.
배경
slot-finalize는 projected, failed, timeout, queue timeout, push failed, identity missing 결과가 task metadata와 workspace slot state에 일관되게 반영되는지 닫는 작업이다. 성공은 available, 수동 git 복구가 필요한 상태는 dirty, bridge/provider 오류는 error로 수렴해야 한다.
사용자 리뷰 요청 흐름
선택된 SDD 결정 또는 Milestone lock 결정만 review stub의 사용자 리뷰 요청에 기록한다. External service, secret, device, evidence gap은 일반 검증/후속 문제로 남긴다.
Archive Evidence Snapshot
- Prior dependency:
agent-task/archive/2026/06/m-plane-origin-authoring-roundtrip-sync/07+05,06_slug_reconcile/complete.log - Immediate predecessor required by directory name:
10+09_plane_todo/complete.log - Carryover: Plane projection path is expected to be verified before slot finalization evidence is collected.
Roadmap Targets
- Milestone:
agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/plane-origin-authoring-roundtrip-sync.md - Task ids:
slot-finalize: projected/failed/timeout/queue timeout/push failed/identity missing map consistently to task metadata and workspace slot state
- Completion mode: check-on-pass
Spec Targets
- SDD:
agent-roadmap/sdd/agent-ops-mcp-control-plane/plane-origin-authoring-roundtrip-sync/SDD.md - Acceptance scenarios:
S16: task=slot-finalize; evidence=terminal task metadata and slot state evidence recorded
- Completion mode: spec-check-on-pass
분석 결과
읽은 파일
agent-test/local/rules.mdagent-test/local/core-smoke.mdagent-test/live-cycle-smoke.mdagent-roadmap/phase/agent-ops-mcp-control-plane/milestones/plane-origin-authoring-roundtrip-sync.mdagent-roadmap/sdd/agent-ops-mcp-control-plane/plane-origin-authoring-roundtrip-sync/SDD.mdservices/core/internal/scheduler/jobs.goservices/core/internal/scheduler/jobs_test.goservices/core/internal/scheduler/roadmap_sync_jobs.goservices/core/internal/scheduler/river.goservices/core/internal/scheduler/river_test.goservices/core/internal/scheduler/slot_finalizer.goservices/core/internal/scheduler/stale.goservices/core/internal/scheduler/stale_test.goservices/core/internal/authoring/result.goservices/core/internal/authoring/result_test.goservices/core/migrations/00005_create_workspace_slots.sqlservices/core/queries/workspace_slots.sql
테스트 환경 규칙
- test_env:
local - Env rules read:
agent-test/local/rules.md - Profiles read:
agent-test/local/core-smoke.md,agent-test/live-cycle-smoke.md - Current precheck passed:
cd services/core && go test -count=1 ./cmd/server ./internal/http ./internal/gitosync ./internal/roadmapsync ./internal/roadmapsyncpipeline ./internal/scheduler ./internal/adapters/plane ./internal/authoring - Final commands use remote runner focused tests plus live task/slot DB evidence.
테스트 커버리지 공백
- Unit tests cover projected/complete finalizer ->
available, push failure ->dirty, bridge/identity failure ->error, and stale queue helper behavior. - Remaining gap: same live cycle evidence showing task metadata
authoring_run_state=succeededand workspace slot state after Plane projection, plus failure categories if a live negative path is exercised.
심볼 참조
- none
분할 판단
- Split policy evaluated before choosing files.
- This task depends on
10+09_plane_todo, because successful slot release evidence should follow verified Plane projection. - It is separate because finalizer and workspace slot updates can fail after projection succeeds.
범위 결정 근거
- Scope includes scheduler finalizer, authoring result category mapping, stale helper, and live slot DB evidence.
- Excludes Plane body/status projection internals already owned by task 10.
- Excludes Plane
Todo -> In Progresslifecycle and child-ticket execution.
빌드 등급
cloud-G06: focused Go tests are bounded, but live task/slot state requires remote runner and DB evidence.
구현 체크리스트
- Predecessor
10+09_plane_todocomplete log이 있는지 확인하고, 없으면 구현을 시작하지 않고 review stub에 dependency blocker로 기록한다. - Scheduler/authoring focused tests를 remote runner에서 실행하고 projected, dirty, error, stale queue coverage를 기록한다.
- Live task metadata에서
authoring_run_state,authoring_run_updated_at,wait_type, failure category 또는 success summary를 기록한다. - DB/API에서 workspace slot state가 success
available, git recoverydirty, bridge/provider/identity errorerror기준과 일치함을 기록한다. - CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
[TEST-1] Slot Terminal State Evidence
문제
- Milestone line 79 requires projected/failed/timeout/queue timeout/push failed/identity missing to map consistently to task metadata and workspace slot state.
RoadmapCreationSyncWorkerfinalizes projected/complete tasks and updates the slot to available atservices/core/internal/scheduler/roadmap_sync_jobs.go:91.applyTaskSlotTerminalStateskips missing slot metadata and writes slot state atservices/core/internal/scheduler/slot_finalizer.go.SlotStateForAuthoringOutcomemaps success/dirty/error categories atservices/core/internal/authoring/result.go:112.- Queue stale helper applies to queued authoring tasks at
services/core/internal/scheduler/stale.go:14.
해결 방법
- Use remote focused tests to prove unit-level mappings.
- Use the live task from task 10 to record success metadata and slot
available. - If live negative categories are naturally present, record them; otherwise rely on existing focused tests and state the live negative cases were not force-induced.
- Patch only scheduler/authoring mapping if a mismatch is found, with a regression test.
수정 파일 및 체크리스트
services/core/internal/scheduler/roadmap_sync_jobs.go: optional defect fix if projected/complete finalization payload or available update is wrong.services/core/internal/scheduler/jobs.go: optional defect fix if failure categories map incorrectly.services/core/internal/authoring/result.go: optional defect fix if category-to-slot mapping is wrong.services/core/internal/scheduler/stale.go: optional defect fix if queue timeout/stale classification is wrong.CODE_REVIEW-cloud-G06.md: record remote tests, task metadata, and slot state evidence.
테스트 작성
- Skip new tests if all existing focused tests pass and live success evidence matches.
- If a defect is found, add a focused regression test in
river_test.go,jobs_test.go,result_test.go, orstale_test.go.
중간 검증
ssh toki@toki-labs.com 'zsh -lc '\''cd "$HOME/agent-work/nomadcode/services/core" && go test -count=1 ./internal/scheduler ./internal/authoring'\'''
Expected: packages pass.
의존 관계 및 구현 순서
- Wait for predecessor
10+09_plane_todocomplete log. - Run focused tests, then collect live task/slot state from the same cycle.
수정 파일 요약
| 파일 | 항목 |
|---|---|
services/core/internal/scheduler/roadmap_sync_jobs.go |
TEST-1 optional defect fix |
services/core/internal/scheduler/jobs.go |
TEST-1 optional defect fix |
services/core/internal/authoring/result.go |
TEST-1 optional defect fix |
services/core/internal/scheduler/stale.go |
TEST-1 optional defect fix |
CODE_REVIEW-cloud-G06.md |
TEST-1 evidence |
최종 검증
ssh toki@toki-labs.com 'zsh -lc '\''cd "$HOME/agent-work/nomadcode/services/core" && go test -count=1 ./internal/scheduler ./internal/authoring'\'''
Expected: all listed packages pass.
ssh toki@toki-labs.com 'zsh -lc '\''docker exec code-server-postgres psql -U nomadcode -d nomad-core-dev -c "select t.id, t.status, t.external_provider, t.external_id, t.metadata->>'\''authoring_run_state'\'' as run_state, t.metadata->>'\''wait_type'\'' as wait_type, t.metadata->>'\''authoring_failure_category'\'' as failure_category from tasks t where t.source = '\''plane'\'' order by t.updated_at desc limit 10;"'\'''
Expected: latest target task shows succeeded/completed metadata after projection or explicit failure category for a negative path.
ssh toki@toki-labs.com 'zsh -lc '\''docker exec code-server-postgres psql -U nomadcode -d nomad-core-dev -c "select id, slot_index, state, path, updated_at from workspace_slots order by updated_at desc limit 10;"'\'''
Expected: target slot state matches available, dirty, or error mapping described in the milestone, with no secrets printed.
모든 코드 변경 완료 후 반드시 CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.