build(core): Git 자격증명 스토어 설정을 추가하고 Cloud G07 파일들을 정리한다
개발 워크스페이스 원격 HTTPS 푸시를 위해 호스트의 Git 자격증명 파일 기반 스토어를 컨테이너에서 재사용하도록 구성한다. Cloud G07 PLAN/CODE_REVIEW 파일들을 정리한다.
This commit is contained in:
parent
f2d7c4fc4a
commit
6b5a8246a4
3 changed files with 12 additions and 378 deletions
|
|
@ -1,147 +0,0 @@
|
||||||
<!-- task=m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke plan=0 tag=API -->
|
|
||||||
|
|
||||||
# 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-<milestone-slug>`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, 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?**
|
|
||||||
|
|
@ -1,231 +0,0 @@
|
||||||
<!-- task=m-agent-origin-milestone-creation-sync/04+01,02,03_field_smoke plan=0 tag=API -->
|
|
||||||
|
|
||||||
# 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`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
|
|
||||||
|
|
@ -37,6 +37,15 @@ services:
|
||||||
GITO_DEVELOP_REPO_PATH: ${GITO_DEVELOP_REPO_PATH:-}
|
GITO_DEVELOP_REPO_PATH: ${GITO_DEVELOP_REPO_PATH:-}
|
||||||
GITO_BRANCH: ${GITO_BRANCH:-develop}
|
GITO_BRANCH: ${GITO_BRANCH:-develop}
|
||||||
GITO_REMOTE_NAME: ${GITO_REMOTE_NAME:-origin}
|
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:-}
|
ROADMAP_CREATION_TODO_STATE_ID: ${ROADMAP_CREATION_TODO_STATE_ID:-}
|
||||||
PLANE_TODO_STATE_ID: ${PLANE_TODO_STATE_ID:-}
|
PLANE_TODO_STATE_ID: ${PLANE_TODO_STATE_ID:-}
|
||||||
PLANE_PROJECT_ID: ${PLANE_PROJECT_ID:-}
|
PLANE_PROJECT_ID: ${PLANE_PROJECT_ID:-}
|
||||||
|
|
@ -44,6 +53,9 @@ services:
|
||||||
- "${NOMADCODE_CORE_HOST_PORT:-18010}:8080"
|
- "${NOMADCODE_CORE_HOST_PORT:-18010}:8080"
|
||||||
volumes:
|
volumes:
|
||||||
- /Users/toki/agent-work:/Users/toki/agent-work
|
- /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:
|
networks:
|
||||||
- net_nginx
|
- net_nginx
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue