Skip to content
Back to skills

Run Milestone

ASecurity

Run a sealed milestone's remaining tasks in one main session, sidelining blocked tasks and batching decisions.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 29, 2026
ai-agentsbashgit

Works with

  • mcp

Security analysis

A100/100

Scanned September 29, 2026

npx -y skills add kohj1018/agentic-dev-harness --skill run-milestone --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Run Milestone?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Run Milestone
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kohj1018-run-milestone-agentic-dev-harness/badge)](https://www.skillsdirectory.com/skills/kohj1018-run-milestone-agentic-dev-harness)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: run-milestone
description: Run a sealed milestone's remaining tasks in one main session, sidelining blocked tasks and batching decisions.
argument-hint: "<milestone-id> [--handoff]"
disable-model-invocation: true
allowed-tools: Read Glob Grep Write Edit Bash Skill Agent
---

너는 마일스톤 연속 실행의 **운전자**다. 절차는 하위 skill 4종(`/implement-`·`/validate-`·`/repair-`·`/finalize-workitem`)이 소유한다. 너는 다음 단계를 파일로 판정·실행·확인하고, 진행 불가 task는 빼두고 끝에 모아 보고한다. **커밋하지 않는다**(task 커밋은 finalize 단독). auto 권한 모드 전제. 정책: [ADR-076](../../../docs/90-decisions/boilerplate/ADR-076-run-milestone-orchestration.md).

## 핵심 루프 (컴팩션 뒤에도 이 절부터)
1. §2로 다음 단계를 판정한다(매 task 전, 기억 대신 파일로).
2. §3대로 하위 절차를 실행하고 산출물로 확인한다.
3. 진행 불가면 §4로 그 task만 빼고 1로.
4. 더 돌릴 task가 없거나 §4-4 종료·전체 멈춤이면 §6.
- **하위 skill 호출**: 처음 쓸 때와 컴팩션 뒤 처음 쓸 때만 Skill 도구로 부르고, 그 사이에는 컨텍스트의 본문을 따른다(절차 생략 금지). 단계 시작 때 `▶ /<skill> T-NNN <인자>`를 출력하고, 재사용 본문의 치환된 인자 대신 이 줄의 값을 쓴다.
- **컴팩션 직후**(대화가 요약으로 시작): 이 파일·인계 파일 2개·`## 운영 함정` 재독 → §1-3 → §2 재판정 → 진행 중이던 하위 절차를 재진입 지점부터.
- 실행 중 해결 알림은 현재 하위 절차 뒤 §4-5로.

## 0. 입력·승인 범위
- `$ARGUMENTS`: `M[0-9]+` 정확히 1개 + 선택 `--handoff`. 그 밖이면 안내 후 종료.
- 이 호출 = 이 M의 task 사이클 연속 진행 + finalize 로컬 커밋 승인. push·배포·제품 결정·새 실행 권한은 불포함 — 따로 받은 권한(대화·인계 `## 1`)만 그 범위에서 쓰고, 거부된 명령은 우회·재시도하지 않는다.
- 특정 task를 지목한 실행 증거 면제 사유는 그 task implement에만 문구 그대로 `--waiver "<문구>"`.
- `--handoff`·대화로 인계·중단 요청: 진행 중 하위 절차가 끝난 지점에서(없으면 §1 없이 바로) §5 인계를 쓰고 종료.
- «상태» = `git -c core.quotePath=false status --porcelain -uall`.

## 1. 시작 (1회)
1. `docs/30-workitems/handoffs/M<N>.md`·`_common.md`, `docs/00-meta/STACK_SETUP_PLAN.md`의 `## 운영 함정`을 읽는다. `## 1`은 복구·질문보다 먼저 첫 출력에 `이어받는 지시·권한 N건: …`으로 인용 그대로.
2. milestone `## 10` `- 봉인일:`이 비면 `/seal-milestone M<N>` 안내 후 종료.
3. **마감 중단 복구**: 트리의 task 문서만 `done`이면(HEAD는 아님) — staged이고 staged diff에 마지막 `- closure`가 있으면(`Needs Commit` 잔존) 그대로 finalize(§3-5 표), 아니면 status를 `in-progress`로, HEAD에 없는 마지막 `- closure` 줄은 지운다(`- ac-pending`은 둔다).
4. **막힌 목록** = `git stash list --format='%gd %H %s'`에서 이름이 `run-milestone M<N> T-NNN:`인 항목(`## 4`에 `적용 완료 <hash>`면 제외) + 인계 `## 4`의 `- T-NNN —` 줄. 트리 status가 `done`인 task는 제외. stash 목록에 없는 hash의 `적용 완료` 줄과 `done` task의 `- T-NNN —` 줄은 지운다.
5. 산하 task(`## 7` Milestone 링크가 이 M)가 전부 `done`이고 막힌 목록이 비었으면 `/stabilize-milestone M<N>` 안내 후 종료.
6. «상태»의 변경이 진행 중 task 것이 아니면 사용자 변경 — 건드리지 않고 멈춰 보고.
7. **시작 점검**: 트리가 깨끗하고 통합 명령이 있으면 1회 실행 — 실패(기준선 깨짐)나 «상태» 변경(통합 명령 부작용)이면 **전체 멈춤** + 안내(부작용 경로는 `.gitignore` 또는 명령이 원복).
8. **시작 질문**(해당할 때만, 첫 task 전 한 메시지): 막힌 목록·필요한 행동 → 해결된 task / `## 1`의 push·배포·외부 write·운영 환경 접근 권한 → 한 줄씩 재확인 / 남은 task에 `## 2` `(a) 영속 저장소 쓰기`가 있고 `## 로컬 환경 동기화`의 DB 초기화가 `허용`이 아님 → 이번 실행 동안 필요할 때마다 자동 초기화 허용(명령을 보이고 답에 명령 포함 — 행이 없으면 명령도. 인계 안 함). 고른 task는 §4-5로 되살린다. 재확인 못 받은 권한은 쓰지 않고 인계에서 빼고, 나머지는 승계.

## 2. 다음 task·단계 판정 (HTML 주석 밖 줄만)
- 후보: `## 9`의 `T-<번호>:AC-<번호>` 토큰 전부가 선행이다(`:AC-` 없는 ID는 의존 아님). 선행이 모두 `done`이고 막힌 목록에 없는 task를 번호순으로 — 단 트리에 변경이 남은 `in-progress` task(막힌 목록 밖)가 있으면 그것부터. **막힌 목록의 task는 `ready`로 보여도 미완**이며 직·간접 후행도 후보가 아니다. 트리에 막힌 task의 변경이 남아 있으면(재개방 done task) 후보를 고르지 않고 **전체 멈춤**. `blocked`·`deprecated` task는 건너뛰고 §6에.

| 상태 | 다음 |
|---|---|
| `ready` | `/implement-workitem T-NNN --run-milestone` |
| `in-progress` + 구현 완료 미충족 | 같은 implement (재개 — task당 이번 실행 2회, 넘으면 §4) |
| `in-progress` + 구현 완료 + report 신선하지 않음 | `/validate-workitem T-NNN` |
| report 신선 | §3-3 |

- **구현 완료** = ① 기계 AC(`## 6-1`의 `[자동 테스트]`·`[산출물 검사]`·표기 없음)가 있으면 `## 4-1`이 비어 있지 않고 그 AC마다 `## 8` `- verify-power`, 없으면 관측 AC마다 `- ac-pending` ② `## 2` `- 외부 경계:` 종류마다 `- exec-evidence`(마지막 줄이 `미확보`가 아님) ③ `## 3`에 `[미실측]` 없음 ④ 정지 신호(3-1)가 없거나 해소됨 — 다음 implement·repair가 신호 없이 끝나거나 사용자가 해결을 알림(뒤 단계 Pass는 해소 아님).
- **신선** = 이 컨텍스트에서 그 task의 validate가 쓴 report이고 그 뒤 편집이 없다(새 세션·컴팩션 직후 report는 아님).

## 3. 한 task 사이클
결과는 하위 skill의 말 대신 산출물(report `- 판정:`·task 문서·git)로. implement 직전 이 task의 이월(인계 `## 3`·세션 메모)·관련 함정·사용자의 해석 답(말 그대로)을 대화에 적는다.

**3-1 정지 신호 (implement·repair 출력만)** — `Needs SSOT Amendment`·`Fact Resolution`·`Execution Evidence`·`Install`·`MCP Access`·`Dependency Tool Decision`·미해소 `Research`·잠정 금지 범주의 해석 보고·repair `Needs Follow-up`, 또는 사용자만 할 수 있는 행동(자격증명·원격 실행·권한 거부)이 필요하면 §4. implement 3-R (1)(선행 done task 산출 누락)이면 트리를 비운 뒤(§4-1) 선행 task를 §5 done task 수리로 고치고 재시도. `Needs Stack Guard`·마일스톤 게이트 거부(같은 M `draft` task·미해결 plan-review)는 **전체 멈춤**. 아래 표에 없는 결과도 §4.

**3-2 validate 직전 대조 (매번)** — «상태» 중 `## 4-1`에 없는 경로(finalize 자동 add·제외 대상 빼고)가 있으면 §4(되돌리지 않음). 이 «상태»를 기억한다.

**3-3 validate 뒤** — «상태»에 3-2 때 없던 경로가 생기면 §1-7의 부작용: **전체 멈춤** + 안내.

| report | 행동 |
|---|---|
| `Needs Fix` + `P0 [Spec-gap]`·상위 결정 필요 | §4 |
| `Needs Fix`, 실패가 전부 `감사 미완` | validate 1회 재실행, 또 그러면 §4 |
| 그 외 `Needs Fix` | `/repair-workitem T-NNN` → validate |
| `Pass`·`Pending Acceptance` + 이번 라운드 코드가 만든 계약 P1 | `/repair-workitem T-NNN "<요약>"` (task당 1라운드) → validate |
| 그 외 `Pass`·`Pending Acceptance` | 3-5 |

- 계약 P1 = 라벨 `[Arch-iface-*]`·`[Design-*]`·`[Seam]`이거나 승인 프로토타입 `PX-`·닫힌 결정 `D-NNN`을 인용하는 P1. 위치 파일이 `## 4-1`에 있으면 이번 라운드 것. P2 제외(일반 repair는 전 severity). `Reject-*`로 기각되면 다시 부르지 않는다. 다른 task 소유면 §5.

**3-4 루프 상한** — 일반 repair 3라운드. 먼저 끊는다: (a) repair가 기각한 P0가 같은 라벨·같은 파일(AC 지적은 같은 AC — repair 줄 위치 칸, 줄 번호 무시)로 재등장(§6 교차 검증 권장) (b) 한 라운드 뒤 같은 테스트가 같은 이유로 실패. 둘 다 §4.

**3-5 finalize** — validate 뒤에는 task 문서·작업 트리를 고치지 않는다(고칠 것이 생기면 고친 뒤 validate부터). `/finalize-workitem T-NNN`:

| 관측 | 행동 |
|---|---|
| HEAD 커밋에 T-NNN 문서(status=`done`·마지막 `- closure`=T-NNN) + `## 4-1` 파일 잔존 없음 | 성공 |
| `Needs Commit` | finalize 1회 재실행(1-G가 커밋만 재시도), 또 그러면 **전체 멈춤** + 원인 |
| `Needs Fix` | repair → validate → finalize (3-4 상한) |
| `Needs Review`·`Needs Validation` | 이 task 변경의 `## 4-1` 누락이면 추가 후 validate부터 1회 재시도, 그 밖이거나 또 그러면 §4 |
| 다른 task가 커밋·변경됨 | **전체 멈춤**·보고(되돌리지 않음) |

## 4. 빼두기 (전체를 멈추지 않는다)
1. 트리에 그 task 변경이 있으면(task 문서 상태 줄뿐이어도) `git stash push -u -m "run-milestone M<N> T-NNN: <사유 1줄>"`. task status는 쓰지 않는다. **done·재개방 task면 stash하지 않고 전체 멈춤.**
2. 곧바로 인계 `## 4`에 `- T-NNN — <사유> / 필요한 것: <행동·결정> / stash: <hash>|없음`(없으면 §5 양식으로). 필요한 것을 한 줄로 요청하고 **기다리지 않고** 계속한다.
3. **환경 동기화**(stash를 만들거나 되살렸을 때) — 그 변경에 의존성 목록·lockfile이 있으면 `STACK_SETUP_PLAN.md` `## 로컬 환경 동기화`의 의존성 명령(없으면 `## Dependency Tools`의 lockfile 고정 설치), DB 마이그레이션·스키마가 있거나 그 task `## 2`에 `(a) 영속 저장소 쓰기`가 있으면 DB 명령(`(예:` 행 무시). 명령이 거부·실패하거나, DB 명령이 없거나 `확인 필요`인데 §1-8 허용이 없으면 **전체 멈춤**.
4. 같은 원인(같은 `Needs *` 대상·실패 명령)으로 **연속 2건**이면 그 원인에 걸릴 남은 task를 문서로 가린다(같은 `- 외부 경계:` 종류·대상, `## 3`의 같은 설치·MCP 항목). 가려지면 시도 없이 2의 줄(`같은 원인: T-NNN`, stash 없음)로 빼두고 계속, 가릴 수 없으면 §6.
5. **재개**: 트리가 깨끗할 때 그 hash의 `stash@{k}`를 `git stash pop`(한 번에 하나, finalize 뒤 다음). 충돌 없으면 `## 4` 줄 삭제 → 3 → §2. 충돌이면 확신이 있을 때만 풀고 `git reset -q` → `## 4` 줄을 `- 적용 완료 <hash> (T-NNN)`로 → 3 → implement 재개(**stash 항목은 지우지 않는다**). 확신이 없거나 부분 실패면 그 상태로 **전체 멈춤**(충돌 파일·hash·되돌리는 법 안내). stash 없는 task는 `## 4` 줄 삭제 → §2.
6. done task(task 층) 수리는 현재 task를 finalize하거나 빼둬 트리를 비운 직후, 다음 후보보다 먼저.
- **즉시 전체 멈춤**: 굵게 적은 «전체 멈춤» 전부 + 되돌릴 수 없는 외부 운영 환경 작업 + stash 명령(push·pop) 거부·실패. 멈춘 task는 `## 4` 줄을 남긴다(있으면 유지, 없으면 2의 줄을 실제 stash hash나 `없음`으로).

## 5. 이월·함정·인계
- **이월**: 같은 M 뒤 task 소유 → 그 task implement 때 대화로(세션을 넘기면 인계 `## 3`). done task(task 층) 소유 P0/P1 → §4-6 뒤 `/repair-workitem T-OLD "<요약>"` → validate(전부 기각 시 생략) → finalize. 그 밖(P2·마일스톤 층·cross-cutting·다음 M)은 report에(stabilize 회수).
- 운전자가 쓰는 커밋 대상은 현재 task `## 4-1`(3-5 `Needs Review` 해소)과 §1-3 복구뿐(§6 승격 제외). 반복 함정은 `_common.md`에 `- <규칙 1줄> — 근거: <T-NNN 사건>` 추가.
- **인계**(멈출 때만): §1-1의 인계 파일을 읽고 해소 안 된 `## 4` 줄은 유지한 채 새로 쓴다. `## 1`은 사용자 말 그대로 + 날짜·적용 범위(task·명령). 파일로 알 수 있는 것은 쓰지 않는다. 양식: `# M<N> 인계` / `- 기록: <YYYY-MM-DD> / HEAD <sha>` / `## 1. 사용자 지시·권한` / `## 2. 외부 상태 (확인 시점)` / `## 3. 이월` / `## 4. 막힌 task`.

## 6. 종료 — 배치 보고
한 메시지로 보고하고 §5 인계를 쓴다.
- 막힌 task와 필요한 행동 → 해결 후 재실행
- 잠정 해석 목록(M 전체의 `해석 확정:` 없는 `해석 잠정:` AC) — **묻지 않는다**(stabilize·repair-milestone이 확인)
- 교차 검증 권장(보안·인증·권한·데이터 무결성 경계를 건드렸고 oracle gap 보안 항목이 `not covered`/`partial`인 task·3-4 (a) task) → stabilize 뒤 `/validate-milestone --reviewer-tag`
- 정리할 stash: `## 4`의 `적용 완료` hash — 사용자가 지운다
- (전 task done·막힌 목록 빔일 때만) `_common.md`의 오래갈 함정을 `STACK_SETUP_PLAN.md ## 운영 함정`으로 승격 제안 — 승인분만 옮기고 `_common.md`에서 지운다. 커밋은 사용자. 인계 잔여 항목은 목적지 제안·확인 후 삭제. 다음 `/stabilize-milestone M<N>`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.