From 6b5a8246a47be4ce17d0bd43ff6df9ffbdf65a5d Mon Sep 17 00:00:00 2001 From: toki Date: Fri, 3 Jul 2026 11:20:33 +0900 Subject: [PATCH] =?UTF-8?q?build(core):=20Git=20=EC=9E=90=EA=B2=A9?= =?UTF-8?q?=EC=A6=9D=EB=AA=85=20=EC=8A=A4=ED=86=A0=EC=96=B4=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=98=EA=B3=A0=20Clo?= =?UTF-8?q?ud=20G07=20=ED=8C=8C=EC=9D=BC=EB=93=A4=EC=9D=84=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 개발 워크스페이스 원격 HTTPS 푸시를 위해 호스트의 Git 자격증명 파일 기반 스토어를 컨테이너에서 재사용하도록 구성한다. Cloud G07 PLAN/CODE_REVIEW 파일들을 정리한다. --- .../CODE_REVIEW-cloud-G07.md | 147 ----------- .../04+01,02,03_field_smoke/PLAN-cloud-G07.md | 231 ------------------ services/core/docker-compose.yml | 12 + 3 files changed, 12 insertions(+), 378 deletions(-) delete mode 100644 agent-task/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/CODE_REVIEW-cloud-G07.md delete mode 100644 agent-task/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/PLAN-cloud-G07.md diff --git a/agent-task/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/CODE_REVIEW-cloud-G07.md b/agent-task/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/CODE_REVIEW-cloud-G07.md deleted file mode 100644 index 8f4ad9a..0000000 --- a/agent-task/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/CODE_REVIEW-cloud-G07.md +++ /dev/null @@ -1,147 +0,0 @@ - - -# Code Review Reference - API - -> **[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation.** -> The task is NOT complete until every implementation-owned section below is filled in. -> Complete the `구현 체크리스트`; the final checklist item is mandatory before saving. -> Fill implementation-owned sections, then stop with active files in place and report ready for review. -> If implementation is blocked by a selected Milestone `구현 잠금 > 결정 필요` item, fill `사용자 리뷰 요청` with linked evidence and stop with active files in place; code-review decides whether to write `USER_REVIEW.md`. -> Do not ask the user directly, present choices in chat, or call `request_user_input` during implementation. -> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only. - -## 개요 - -date=2026-07-02 -task=m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke, plan=0, tag=API - -## Roadmap Targets - -- Milestone: `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/agent-origin-milestone-creation-sync.md` -- Task ids: - - `field-smoke`: dev 환경에서 agent가 active Milestone을 직접 추가해 push한 뒤 Plane ticket 생성, identity backfill commit, 재전달 no-op까지 확인한다. -- Completion mode: check-on-pass - -## 이 파일을 읽는 리뷰 에이전트에게 - -> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다. - -각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요. -리뷰 완료는 판정 append, active 파일 log archive, PASS 시 `complete.log` 작성과 task directory archive까지 끝난 상태를 의미합니다. - ---- - -## 구현 항목별 완료 여부 - -| 항목 | 완료 여부 | -|------|---------| -| [API-1] Remote Runner Preflight And Deploy | [ ] | -| [API-2] Agent-Origin Missing Create And Backfill Smoke | [ ] | -| [API-3] Redelivery No-Op Evidence And Cleanup | [ ] | - -## 구현 체크리스트 - -- [ ] Remote runner checkout `toki@toki-labs.com:$HOME/agent-work/nomadcode`를 현재 검증 대상 상태로 동기화하고 Core server를 빌드/재배포한다. -- [ ] identity 없는 disposable active Milestone을 `develop`에 push하고 Gito `branch.updated` webhook delivery 또는 equivalent wakeup을 확인한다. -- [ ] Core가 `after` SHA를 fetch/verify하고 missing-create path로 Plane ticket을 생성한 증거를 DB/log/Plane에서 secret redaction 상태로 수집한다. -- [ ] identity backfill commit이 `develop`에 push됐고 diff가 provider identity block만 포함하는지 git evidence를 수집한다. -- [ ] backfill commit 재전달이 provider create/update 반복 없이 complete/no-op으로 수렴하는지 DB/log evidence를 수집한다. -- [ ] disposable smoke Milestone/Plane item cleanup 여부와 남은 dev 환경 상태를 기록한다. -- [ ] `git diff --check`, focused unit fallback tests, live smoke 명령을 실행한다. -- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. - -## 코드리뷰 전용 체크리스트 - -> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다. - -- [ ] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다. -- [ ] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다. -- [ ] active `CODE_REVIEW-*-G??.md`를 `code_review_cloud_G07_N.log`로 아카이브한다. -- [ ] active `PLAN-*-G??.md`를 `plan_cloud_G07_M.log`로 아카이브한다. -- [ ] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하고 `agent-roadmap/current.md`를 ignore하는지 확인한다. -- [ ] PASS이면 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다. -- [ ] PASS이면 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/`로 이동한다. -- [ ] PASS이고 task group이 `m-`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다. -- [ ] PASS split 작업이면 이동 후 빈 active parent를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다. -- [ ] WARN/FAIL이면 다음 active plan/review 파일 또는 `USER_REVIEW.md`를 작성하고 `complete.log`를 작성하지 않는다. - -## 계획 대비 변경 사항 - -_구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다._ - -## 주요 설계 결정 - -_구현 에이전트가 주요 설계 결정 사항을 기록한다._ - -## 사용자 리뷰 요청 - -_기본값은 `없음`이다. 구현 중 새 결정이 필요해 보여도 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 이 섹션은 선택된 Milestone `구현 잠금 > 결정 필요` 항목이 실구현을 차단할 때만 채운다. 외부 환경/secret/서비스 준비, 검증 증거 공백, 반복 실패, 일반 범위 조정은 사용자 리뷰 요청이 아니며 `검증 결과`, `계획 대비 변경 사항`, 또는 code-review의 일반 follow-up plan으로 처리한다._ - -- 상태: 없음 -- 사유 유형: 없음 -- 연결 대상: 없음 -- 결정 필요: 없음 -- 차단 근거: 없음 -- 실행한 검증/명령: 없음 -- 자동 후속 불가 이유: 없음 -- 재개 조건: 없음 - -## 리뷰어를 위한 체크포인트 - -- Implementation waited for predecessor `01_scan_create_ledger`, `02+01_identity_backfill`, and `03+01,02_self_loop_update_conflict` completion. -- Evidence includes Plane ticket creation, identity backfill commit, and redelivery no-op. -- Tracked evidence is secret-free: no token, webhook secret, signature, password, or private credential value is copied. -- Any live smoke blocker is classified separately from Milestone lock decisions. - -## 검증 결과 - -_구현 에이전트가 각 중간 검증 및 최종 검증 명령 실행 후 출력을 여기에 붙여 넣는다._ - -### API-1 중간 검증 -```sh -$ ssh toki@toki-labs.com 'cd $HOME/agent-work/nomadcode && git rev-parse HEAD && git status --short' -(output) -$ ssh toki@toki-labs.com 'cd $HOME/agent-work/nomadcode/services/core && docker compose ps' -(output) -$ ssh toki@toki-labs.com 'curl -s http://127.0.0.1:18010/api/tasks | python3 -c "import sys,json; d=json.load(sys.stdin); print(\"task_count:\", len(d.get(\"tasks\",[])))"' -(output) -``` - -### API-2 중간 검증 -```sh -$ CORE_URL="http://127.0.0.1:18010" -$ curl -s "$CORE_URL/api/tasks" | python3 -c 'import sys,json; d=json.load(sys.stdin); print("task_count:", len(d.get("tasks",[])))' -(output) -$ git fetch origin develop -(output) -$ git rev-parse origin/develop -(output) -``` - -### API-3 중간 검증 -```sh -$ git diff --check -(output) -$ cd services/core && go test -count=1 ./internal/gitosync ./internal/roadmapsyncpipeline ./internal/storage ./internal/http ./internal/scheduler -(output) -$ cd services/core && go vet ./internal/gitosync ./internal/roadmapsyncpipeline ./internal/storage ./internal/http ./internal/scheduler -(output) -``` - -### 최종 검증 -```sh -$ git diff --check -(output) -$ cd services/core && go test -count=1 ./internal/gitosync ./internal/roadmapsyncpipeline ./internal/storage ./internal/http ./internal/scheduler -(output) -$ cd services/core && go vet ./internal/gitosync ./internal/roadmapsyncpipeline ./internal/storage ./internal/http ./internal/scheduler -(output) -$ ssh toki@toki-labs.com 'cd $HOME/agent-work/nomadcode && git rev-parse HEAD && git status --short' -(output) -$ ssh toki@toki-labs.com 'curl -s http://127.0.0.1:18010/api/tasks | python3 -c "import sys,json; d=json.load(sys.stdin); print(\"task_count:\", len(d.get(\"tasks\",[])))"' -(output) -``` - ---- - -> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?** diff --git a/agent-task/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/PLAN-cloud-G07.md b/agent-task/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/PLAN-cloud-G07.md deleted file mode 100644 index 7a5ac37..0000000 --- a/agent-task/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/PLAN-cloud-G07.md +++ /dev/null @@ -1,231 +0,0 @@ - - -# Plan - API - -## 이 파일을 읽는 구현 에이전트에게 - -구현 후 active `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 반드시 실제 구현 내용과 검증 출력으로 채운다. 검증을 실행하고, active 파일은 그대로 둔 뒤 리뷰 준비를 보고한다. 최종 판정, log rename, `complete.log`, archive 이동은 code-review 스킬 전용이다. - -선택된 Milestone의 `구현 잠금 > 결정 필요` 항목이 실구현을 막을 때만 review stub의 `사용자 리뷰 요청` 섹션을 채우고 멈춘다. 구현 중 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. secret, 외부 서비스 준비, 배포 상태, evidence 공백은 사용자 리뷰 요청이 아니라 검증 결과나 follow-up 대상이다. - -## 배경 - -이 plan은 S08 field smoke 전용이다. 앞선 subtasks가 agent-origin 생성, identity ledger, identity backfill, self-loop, update, conflict policy를 구현한 뒤 dev Plane/Gito/NomadCode 환경에서 실제 active Milestone 추가 push를 통해 Plane ticket 생성, identity backfill commit, 재전달 no-op까지 확인한다. - -## 사용자 리뷰 요청 흐름 - -사용자 리뷰 요청은 선택된 Milestone lock decision만 active review stub의 `사용자 리뷰 요청` 섹션에 기록한다. 직접 사용자 prompt는 금지이며, code-review가 정당성을 검증하고 실제 `USER_REVIEW.md` 작성을 소유한다. - -## Roadmap Targets - -- Milestone: `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/agent-origin-milestone-creation-sync.md` -- Task ids: - - `field-smoke`: dev 환경에서 agent가 active Milestone을 직접 추가해 push한 뒤 Plane ticket 생성, identity backfill commit, 재전달 no-op까지 확인한다. -- Completion mode: check-on-pass - -## 분석 결과 - -### 읽은 파일 - -- `agent-roadmap/phase/agent-ops-mcp-control-plane/milestones/agent-origin-milestone-creation-sync.md` -- `agent-roadmap/sdd/agent-ops-mcp-control-plane/agent-origin-milestone-creation-sync/SDD.md` -- `agent-contract/outer/gito-branch-webhook-consumer-v1.md` -- `agent-test/local/rules.md` -- `agent-test/local/core-smoke.md` -- `agent-test/live-cycle-smoke.md` -- `agent-test/plane-dev.md` -- `services/core/internal/gitosync/scanner.go` -- `services/core/internal/roadmapsyncpipeline/service.go` -- `services/core/internal/storage/roadmap_sync_identities.go` -- `services/core/internal/storage/roadmap_sync_steps.go` -- `services/core/internal/http/gito_webhook.go` -- `services/core/internal/scheduler/roadmap_sync_jobs.go` -- `services/core/docker-compose.yml` - -### SDD 기준 - -- SDD: `agent-roadmap/sdd/agent-ops-mcp-control-plane/agent-origin-milestone-creation-sync/SDD.md` -- 상태: `[승인됨]`, SDD 잠금 해제, 사용자 리뷰 없음. -- Targeted scenario: S08=`field-smoke`. -- Evidence Map row: dev field smoke with redacted logs/DB/Plane/git evidence; completion evidence must show Roadmap Completion and final dev cycle evidence without secrets. -- Field smoke must confirm Plane ticket creation, identity backfill commit, self-loop redelivery no-op, and secret redaction. - -### 테스트 환경 규칙 - -- test_env: `local` with remote runner deployment for live smoke. -- `agent-test/local/rules.md`, `agent-test/live-cycle-smoke.md`, and `agent-test/plane-dev.md` present/read. -- Current preflight: repo root `/config/workspace/nomadcode`, branch `main`, HEAD `d80abe83579dd0d6fbc86b1a74c83db6d18c756d`, `go version go1.26.2 linux/arm64`, `git version 2.43.0`. -- Remote runner: `toki@toki-labs.com`, checkout `$HOME/agent-work/nomadcode`. -- Core URL for remote local profile: `http://127.0.0.1:18010`. -- Plane dev non-secret fixtures: - - Plane base URL: `https://plane.toki-labs.com` - - Workspace slug/id: `general` / `dadf050e-cd1e-4590-bc33-672511630841` - - Project id/identifier: `a6beb42f-7a8a-410c-b50f-ea3ca94828f3` / `NOMAD` - - Todo state id: `45ba7449-f684-4381-af6d-5854747c5e8d` - - Backlog state id: `62d4c50c-0cea-4a76-a0ed-ec97498b2d5f` - - AGENT assignee id: `5d116a77-d3df-4f54-80bf-eca61e0118c4` -- Secrets are loaded only from ignored/SOPS-backed local sources such as `.env.plane.local` or `secrets/nomadcode.dev.sops.yaml`; secret values must not be copied into tracked files or final output. - -### 테스트 커버리지 공백 - -- Unit/focused tests can prove behavior, but S08 requires live dev evidence that the whole path works through Gito delivery, Core worker, Plane mutation, git backfill push, and redelivery. -- Existing live-cycle smoke describes Plane-origin lifecycle; this plan adapts the same runner/secret/evidence discipline to agent-origin missing-create/backfill. - -### 심볼 참조 - -- No production symbol change is planned in this smoke subtask unless field validation exposes a bug. If a code fix is required, implementation must make the smallest fix and update this review file with the exact deviation. - -### 분할 판단 - -- Split decision policy evaluated before file selection. -- This dependent subtask is `04+01,02,03_field_smoke`. -- Predecessors required: - - `agent-task/m-agent-origin-milestone-creation-sync/01_scan_create_ledger/complete.log` - - `agent-task/m-agent-origin-milestone-creation-sync/02+01_identity_backfill/complete.log` - - `agent-task/m-agent-origin-milestone-creation-sync/03+01,02_self_loop_update_conflict/complete.log` -- Active predecessor lookup: no predecessor `complete.log` files exist at plan creation. -- Archive predecessor lookup: not performed because no active predecessor completion exists and no runtime-provided archive evidence was specified. -- Implementer must wait for all predecessor PASS/complete.log files before starting this plan. - -### 범위 결정 근거 - -- Include live dev smoke evidence and small bug fixes discovered only by the smoke. -- Exclude new feature design, broad refactors, non-agent-origin lifecycle, child ticket sync, and secrets/documentation of secret values. - -### 빌드 등급 - -- `cloud-G07`: the task is primarily validation/evidence, but it touches live dev Plane/Gito/NomadCode and may require narrow fixes if integration drift appears. - -## 의존 관계 및 구현 순서 - -`04+01,02,03_field_smoke` depends on sibling predecessors `01_scan_create_ledger`, `02+01_identity_backfill`, and `03+01,02_self_loop_update_conflict`. Start implementation only after all three active `complete.log` files exist or matching archived `complete.log` evidence is explicitly provided by runtime. - -## 구현 체크리스트 - -- [ ] Remote runner checkout `toki@toki-labs.com:$HOME/agent-work/nomadcode`를 현재 검증 대상 상태로 동기화하고 Core server를 빌드/재배포한다. -- [ ] identity 없는 disposable active Milestone을 `develop`에 push하고 Gito `branch.updated` webhook delivery 또는 equivalent wakeup을 확인한다. -- [ ] Core가 `after` SHA를 fetch/verify하고 missing-create path로 Plane ticket을 생성한 증거를 DB/log/Plane에서 secret redaction 상태로 수집한다. -- [ ] identity backfill commit이 `develop`에 push됐고 diff가 provider identity block만 포함하는지 git evidence를 수집한다. -- [ ] backfill commit 재전달이 provider create/update 반복 없이 complete/no-op으로 수렴하는지 DB/log evidence를 수집한다. -- [ ] disposable smoke Milestone/Plane item cleanup 여부와 남은 dev 환경 상태를 기록한다. -- [ ] `git diff --check`, focused unit fallback tests, live smoke 명령을 실행한다. -- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. - -## [API-1] Remote Runner Preflight And Deploy - -### 문제 - -S08 evidence는 현재 reviewed code가 실행 중인 Core server에 배포되어 있을 때만 의미가 있다. remote checkout이 낡았거나 dirty여도 차단으로 간주하지 않고, 검증 대상 상태와 같게 동기화한 뒤 smoke를 수행해야 한다. - -### 해결 방법 - -Remote runner checkout을 reset/clean/reclone or file sync로 현재 작업 상태와 맞추고 Docker Compose Core server를 rebuild/recreate한다. Secret은 ignored local file or SOPS에서 로드하되 값을 출력하지 않는다. - -### 수정 파일 및 체크리스트 - -- [ ] `agent-task/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/CODE_REVIEW-cloud-G07.md`: preflight command output 기록. -- [ ] If code/config fix is needed, update only the smallest related Core file and rerun predecessor-relevant focused tests. - -### 테스트 작성 - -No new unit test is expected for deploy-only work unless smoke exposes a code bug. - -### 중간 검증 - -```sh -ssh toki@toki-labs.com 'cd $HOME/agent-work/nomadcode && git rev-parse HEAD && git status --short' -ssh toki@toki-labs.com 'cd $HOME/agent-work/nomadcode/services/core && docker compose ps' -ssh toki@toki-labs.com 'curl -s http://127.0.0.1:18010/api/tasks | python3 -c "import sys,json; d=json.load(sys.stdin); print(\"task_count:\", len(d.get(\"tasks\",[])))"' -``` - -Expected: checkout matches reviewed change set, Core is reachable, and no secret values are printed. - -## [API-2] Agent-Origin Missing Create And Backfill Smoke - -### 문제 - -The milestone acceptance requires a real agent-origin active Milestone push that starts without provider identity and ends with Plane ticket creation plus provider identity backfill commit. - -### 해결 방법 - -Create a disposable active Milestone file on `develop` with a unique slug and no `Provider identity` block. Push it through Gito, wait for Core webhook/worker processing, then record Plane item id, `roadmap_sync_identities` row, completed steps, and backfill commit diff. Redact tokens, webhook signatures, and raw credentials. - -### 수정 파일 및 체크리스트 - -- [ ] Record disposable milestone slug and pushed `after` SHA. -- [ ] Record Gito webhook delivery id or equivalent accepted wakeup evidence if available. -- [ ] Record Plane work item id/key and state using non-secret evidence. -- [ ] Record DB identity row and completed steps with secret-free SQL/curl output. -- [ ] Record backfill commit SHA and `git show --stat`/diff excerpt proving identity-block-only scope. - -### 테스트 작성 - -Live smoke evidence is required for S08. If live service is unavailable, run the runtime-equivalent unit fallback and record the blocker as follow-up rather than marking S08 complete. - -### 중간 검증 - -```sh -# On remote runner after secrets are loaded from ignored/SOPS-backed sources. -CORE_URL="http://127.0.0.1:18010" -curl -s "$CORE_URL/api/tasks" | python3 -c 'import sys,json; d=json.load(sys.stdin); print("task_count:", len(d.get("tasks",[])))' -git fetch origin develop -git rev-parse origin/develop -``` - -Expected: Core reachable; target develop revision visible to the checkout. - -## [API-3] Redelivery No-Op Evidence And Cleanup - -### 문제 - -Plane ticket creation and identity backfill are insufficient if the backfill webhook creates or updates provider state again. S08 requires the redelivery no-op evidence and secret-redacted final record. - -### 해결 방법 - -Trigger or observe the backfill commit's Gito redelivery. Verify the same milestone slug/Plane item keeps one identity row, no second create/update happens, and the job completes or no-ops. Cleanup disposable data only if safe and record what was left behind for traceability. - -### 수정 파일 및 체크리스트 - -- [ ] Record redelivery job/log/DB evidence showing no duplicate provider mutation. -- [ ] Record Plane item remains single and linked to the same milestone slug. -- [ ] Record cleanup decision and final dev environment state. -- [ ] `agent-task/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/CODE_REVIEW-cloud-G07.md`: fill implementation-owned sections. - -### 테스트 작성 - -If redelivery cannot be triggered live, use the runtime-equivalent unit fallback and keep S08 incomplete or WARN according to code-review policy. - -### 중간 검증 - -```sh -git diff --check -cd services/core && go test -count=1 ./internal/gitosync ./internal/roadmapsyncpipeline ./internal/storage ./internal/http ./internal/scheduler -cd services/core && go vet ./internal/gitosync ./internal/roadmapsyncpipeline ./internal/storage ./internal/http ./internal/scheduler -``` - -Expected: local/focused fallback stays green after any smoke-driven fix. - -## 수정 파일 요약 - -| 파일 | 항목 | -|------|------| -| `agent-task/m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke/CODE_REVIEW-cloud-G07.md` | API-1, API-2, API-3 | -| `services/core/internal/gitosync/*` | only if smoke exposes a minimal bug | -| `services/core/internal/roadmapsyncpipeline/*` | only if smoke exposes a minimal bug | -| `services/core/internal/storage/*` | only if smoke exposes a minimal bug | -| `services/core/internal/http/*` | only if smoke exposes a minimal bug | -| `services/core/internal/scheduler/*` | only if smoke exposes a minimal bug | - -## 최종 검증 - -```sh -git diff --check -cd services/core && go test -count=1 ./internal/gitosync ./internal/roadmapsyncpipeline ./internal/storage ./internal/http ./internal/scheduler -cd services/core && go vet ./internal/gitosync ./internal/roadmapsyncpipeline ./internal/storage ./internal/http ./internal/scheduler -ssh toki@toki-labs.com 'cd $HOME/agent-work/nomadcode && git rev-parse HEAD && git status --short' -ssh toki@toki-labs.com 'curl -s http://127.0.0.1:18010/api/tasks | python3 -c "import sys,json; d=json.load(sys.stdin); print(\"task_count:\", len(d.get(\"tasks\",[])))"' -``` - -Expected: all commands exit 0, live smoke evidence is secret-free, and S08 evidence includes Plane ticket, identity backfill commit, and redelivery no-op. - -모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다. diff --git a/services/core/docker-compose.yml b/services/core/docker-compose.yml index 806cda9..024faa3 100644 --- a/services/core/docker-compose.yml +++ b/services/core/docker-compose.yml @@ -37,6 +37,15 @@ services: GITO_DEVELOP_REPO_PATH: ${GITO_DEVELOP_REPO_PATH:-} GITO_BRANCH: ${GITO_BRANCH:-develop} GITO_REMOTE_NAME: ${GITO_REMOTE_NAME:-origin} + # Reuse the host's existing file-based git credential store inside the + # Linux container: the develop workspace remote is HTTPS, and without a + # credential helper the Core-authored identity backfill push fails with + # "could not read Username". The credential material itself stays in the + # ignored host file mounted read-only below; only the helper wiring lives + # here. GIT_CONFIG_* is git's env-based config (>= 2.31). + GIT_CONFIG_COUNT: ${GIT_CONFIG_COUNT:-1} + GIT_CONFIG_KEY_0: ${GIT_CONFIG_KEY_0:-credential.helper} + GIT_CONFIG_VALUE_0: ${GIT_CONFIG_VALUE_0:-store --file=/Users/toki/.git-credentials} ROADMAP_CREATION_TODO_STATE_ID: ${ROADMAP_CREATION_TODO_STATE_ID:-} PLANE_TODO_STATE_ID: ${PLANE_TODO_STATE_ID:-} PLANE_PROJECT_ID: ${PLANE_PROJECT_ID:-} @@ -44,6 +53,9 @@ services: - "${NOMADCODE_CORE_HOST_PORT:-18010}:8080" volumes: - /Users/toki/agent-work:/Users/toki/agent-work + # Ignored host credential file (never tracked); read-only so the container + # can authenticate git push without embedding any secret in this compose. + - ${GIT_CREDENTIALS_FILE:-/Users/toki/.git-credentials}:/Users/toki/.git-credentials:ro networks: - net_nginx