roadmap sync 과정에서 origin 프로젝트 간행본의 identity
정보를 채우는 backfill 파이프라인을 구현한다.
- git_backfiller: git 레이블/태그 간행본의 identity 백필
- migration: backfill 완료 단계 테이블 스키마 추가
- pipeline/service: backfill 호출 흐름 연동
- identity_write: backfill 결과 쓰기 통합
- Update tasks.sql.go with new query mappings
- Add scheduler job definitions and tests
- Extend storage store with new methods
- Update workflow lifecycle and service tests
- Add task query definitions for authoring
When the missing-create path stores a RoadmapRevision, a later reconcile push
(after the authoring roundtrip adds the Plane identity to the milestone file)
conflicts with ReconcileCreationCycle's revision guard because the new push has
a different revision than the original missing-create push.
Since missing-create has no completed projection steps, a future reconcile on a
different revision should be allowed to resume. Omit RoadmapRevision from the
missing-create job args so the persisted row stores NULL and the revision guard
does not block the subsequent reconcile push.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When a milestone file's provider identity block omits Tenant and Project
(both are optional since MatchDevelopMilestone fills them from expected),
the bridge's FetchWorkItem call fails with ErrInvalidInput because
planeWorkItemRef requires all three: tenant, project, id.
Fill in missing Tenant/Project from BridgeConfig before building the ref,
mirroring the missing-create path which always uses b.cfg.Tenant/Project.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
On the missing-create path, SyncCreation creates a new Plane work item and
returns SyncActionProjected before any workflow task has been registered for
the new work item UUID. Calling CompleteTaskByExternalRef with an empty Ref.ID
caused pgx.ErrNoRows → River retry → reconcile returning not_ready, leaving
only develop_matched recorded.
Fix 1 (roadmap_sync_jobs.go): guard CompleteTaskByExternalRef with args.Ref.ID != ""
so missing-create jobs complete cleanly without retrying.
Fix 2 (workflow/service.go): CompleteTaskByExternalRef now returns (zero, false, nil)
when GetTaskByExternalRef returns pgx.ErrNoRows, so reconcile jobs that have no
registered workflow task also complete cleanly rather than triggering retry loops.
Also adds PLANE_PROJECT_ID to docker-compose.yml environment so the missing-create
bridge receives non-empty tenant/project inputs at runtime.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- roadmapsync pipeline에 retry 로직 및 개발 일치 검증 로직 추가
- gitosync scanner에 slug 재조정 및 plane 매칭 로직 강화
- roadmap sync identity 관리를 위한 migration(00009) 및 SQL 쿼리 추가
- milestone parser 테스트 및 retry 테스트 보강
- agent-ops 문서(PHASE, SDD, milestones) 갱신
- agent-task archive 및 작업 디렉터리 추가
- authoring: identity write 도메인 구현 (identity_write.go)
- authoring: request/result 도메인 정리 및 테스트 개선
- scheduler: job/river 구조 리팩토링 및 테스트 보완
- gitosync: bridge/scanner 테스트 개선
- roadmap: plane-origin-authoring-roundtrip-sync 마일스톤 업데이트
- Add code review and plan logs for cloud G07, G08 subtasks
- Add stale task detection to scheduler
- Update OpenAI client config and tests
- Fix core services Makefile, README, docker-compose, and run script
- Update agent-roadmap ROADMAP.md and PHASE.md
- Add mcp-control-surface-sketch.md and plane-origin-authoring-roundtrip-sync.md
- Update live-cycle-smoke.md test doc
- Fix services/core: Dockerfile, docker-compose, config, OpenAI client, authoring request
- Update config and test files for core service
Change RoadmapRevision check from hardcoded string to comparing against
the HTTP payload's `after` variable directly, proving the full chain:
HTTP payload `after` → scanner → bridge → job.RoadmapRevision.
Add TestGitoHTTPWebhookDeliveryEnqueuesCreationSyncOnce to prove that a
signed HTTP branch.updated delivery reaches gitoBridgeHTTPAdapter, triggers
the bridge scanner, and enqueues exactly one RoadmapCreationSync job.
Also adds TestGitoHTTPWebhookDeliveryRejectedOnInvalidSignature and
TestGitoHTTPWebhookDeliveryOffTargetIgnored for completeness.
- Move strings.TrimSpace into validateBranchUpdatedPayload to avoid
duplicate validation in ReceiveGitoWebhook
- Update CODE_REVIEW to reflect the improvement
- Add validateBranchUpdatedPayload() to check body type and changed_files
- Extend gitoWebhookPayload struct with Type and ChangedFiles fields
- Add tests for wrong body type and malformed changed_files rejection
- All tests pass: ./internal/http, ./internal/config, ./cmd/server, ./...
- Rename gito-protosocket-consumer-wire to gito-http-webhook-consumer-readiness
- Move old milestone to archive
- Add new HTTP webhook consumer readiness milestone
- Add SDD documentation for gito-http-webhook-consumer