From mst
Generates objective.md via JTBD-based Q&A from project goals or design docs, initializes reviewable agile planning sessions before execution.
npx claudepluginhub myrtlepn/gran-maestro --plugin mstThis skill uses the workspace's default tool permissions.
**목적**: `/mst:agile-plan`으로 JTBD + 프로젝트 DoD 중심의 objective.md를 생성한다. 이 스킬은 플래닝 전용이며 Story 생성/실행은 담당하지 않는다.
Turns vague goals into structured requirements.md via systematic interview across business/user/tech axes, extraction, and cross-check. Outputs for /blueprint in greenfield/feature/refactor/bugfix formats.
Builds manifests to plan work, scope tasks, spec requirements, and break down complex tasks before coding. Converts needs into deliverables, invariants, and verification criteria for features, bugs, refactors.
Transforms business analyses into epics, features, user stories, and tech-agnostic success criteria. Creates handoff documents for architects.
Share bugs, ideas, or general feedback.
목적: /mst:agile-plan으로 JTBD + 프로젝트 DoD 중심의 objective.md를 생성한다. 이 스킬은 플래닝 전용이며 Story 생성/실행은 담당하지 않는다.
이 스킬 실행 중 Write/Edit 도구를 사용할 수 있는 경로는 아래만 해당합니다:
{PROJECT_ROOT}/.gran-maestro/agile/AGI-*/objective/objective.md (신규 생성){PROJECT_ROOT}/.gran-maestro/agile/AGI-*/objective/details/*.md (신규 생성){PROJECT_ROOT}/.gran-maestro/state/${PPID}/snapshot.json (MST_STATE_PPID="${PPID}"가 주입된 state 명령으로 기록되는 상태 파일; state/default/snapshot.json은 legacy fallback 전용)그 외 모든 경로에 대한 Write/Edit 사용은 금지합니다.
mst.py 명령을 통해 수행한다.[MST skill={name} step={N}/{M} return_to={parent_skill/step | null}]skill: 현재 실행 중인 스킬 이름step: 현재 단계(N/M) 또는 서브스킬 종료 시 returnedreturn_to: 최상위 스킬이면 null, 서브스킬이면 {parent_skill}/{step_number}[MST skill={subskill} step=returned return_to={parent/step}]mst.py agile init으로 AGI 세션을 먼저 생성한다.--doc 미지정 시 1A(Q&A 생성 모드), 지정 시 1B(문서 파싱 모드)로 분기한다.templates/objective.md 포맷으로 objective.md 저장 완료mst.py agile update {AGI_ID} --status active --objective-version 1 --json 완료MST_STATE_PPID="${PPID}" python3 {PLUGIN_ROOT}/scripts/mst.py state set --skill agile-plan --step 3 --total 3 [--return-to ...] 기록 완료--return-to가 있으면 stop-hook continuation guard로 상위 스킬 복귀(re-feed), 없으면 독립 실행을 종료하고 --resume 안내경로 규칙 (MANDATORY): 이 스킬의 모든
.gran-maestro/경로는 절대경로로 사용합니다. 스킬 실행 시작 시PROJECT_ROOT를 취득하고, 이후 모든 경로에{PROJECT_ROOT}/접두사를 붙입니다.PROJECT_ROOT=$(pwd)
{PLUGIN_ROOT}는 이 스킬의 "Base directory"에서skills/{스킬명}/을 제거한 절대경로입니다. 상대경로(.claude/...)는 절대 사용하지 않습니다.
python3 {PLUGIN_ROOT}/scripts/mst.py hooks sync --silent || true
플러그인 버전이 .claude/hooks/.mst-hook-version과 다르면 hook 파일을 자동 동기화합니다. 동일 버전이면 no-op(수 ms). 실패해도 워크플로우를 차단하지 않습니다.
[MST skill=agile-plan step=0/3 return_to={RETURN_TO_OR_NULL}]
| 플래그 | 설명 | 예시 |
|---|---|---|
--doc 파일경로 | 기존 문서 파싱 모드 | --doc docs/spec.md |
--return-to parent/step | 서브스킬 복귀 지점 | --return-to agile/1 |
--return-to 미지정 시 독립 실행으로 간주 (return_to=null)python3 {PLUGIN_ROOT}/scripts/mst.py agile init --steering-every 3 --json 실행agi_id를 파싱해 AGI_ID에 저장[신규 세션] AGI-{NNN} 생성됨 (스티어링 설정은 agile에서 확정) 출력[의도 확인: objective 생성으로 진행] 한 줄 통지를 출력한다.질문/선택지 표기 규칙 (MANDATORY):
A, B, C, 1, 2, 3, A1, B2α, β, γ, i, ii, iii, I, II, III이 요청을 objective 생성으로 진행할까요?objective 생성으로 진행다른 의도 설명objective 생성으로 진행이면 Step 1A로 진행한다.다른 의도 설명이면 Step 0.5.3으로 진행한다.목적:
/mst:agile-plan호출 자체는 objective 정의 의도 신호이지만, args 본문이 메타/질문이거나 0.5.2에서 "다른 의도"로 응답한 경우, 요청 동작을 먼저 수행한 뒤 objective 후보를 선제시한다.
[objective 후보] A) {후보1} B) {후보2} C) {후보3} 또는 [objective 후보] 1) {후보1} 2) {후보2} 3) {후보3}[MST skill=agile-plan step=1/3 return_to={RETURN_TO_OR_NULL}]
--doc가 있으면 1B, 없으면 1A를 수행한다.
mst.py agile recall이 patch manifest를 전달한 경우에는 아래 규칙을 우선 적용한다.
version을 1 증가시키고 last_event_id, semantic_hash를 갱신한다..gran-maestro/agile/{AGI_ID}/objective/history/에 append-only Level 3 변경 로그를 추가하고 기존 엔트리는 수정하지 않는다.목표: JTBD 5개 질문과 프로젝트 단위 DoD/설계/제약 정보를 수집해 objective.md를 생성한다.
⚠️ 상세 보존 원칙 (CRITICAL — 전 Step 공통): 사용자가 대화 중 이야기한 모든 설계 내용, 결정 근거, 합의 사항, 프로세스 설명, 기술 선택, 구조 명세는 objective 산출물(objective.md + details/*.md)에 구체화·문서화되어야 한다.
- 사용자가 설명한 원본 설계는 요약/축약하지 않고 원본 이상의 구체성으로 details/에 기록한다.
- plan 모드처럼 Q&A 정보까지 포함하여 더 구체화된 형태가 되어야 한다.
- objective.md + details/ 하위 문서만으로 충분히 개발할 수 있는 기반이 되어야 한다.
- 대화에서 논의되었으나 산출물 어디에도 기록되지 않은 내용이 있으면 저장 전 보완 필수.
JTBD 직후 아래 항목을 점검한다. WHO/WHAT/WHY는 JTBD에서 이미 수집되므로 여기서 재질문하지 않는다.
운영 규칙:
프로젝트 NFR, 설계 결정, 프로젝트 완료 기준 섹션에 반영한다.아래 4단계를 순서대로 수행하고, 각 결과를 objective.md에 즉시 반영한다.
제약사항 수집
## 제약사항 (Out-of-scope / 기술 / 비즈니스)MoSCoW 우선순위 수집
## 우선순위 (MoSCoW)priority 마커 값에 우선순위를 연결한다.리스크 식별 + 의존성 확인
## 리스크 레지스터, ## 설계 결정 (Architecture Decisions)Reference Lookup Protocol 실행
## 참조 레퍼런스외부 의존성(라이브러리/API/프레임워크/버전/프로토콜) 판단이 포함되면 아래를 적용한다.
자동 트리거 게이트
Bash(python3 {PLUGIN_ROOT}/scripts/mst.py config get reference.auto_search)로 reference.auto_search 확인cache_ttl_days=2cutoff_threshold_months=0.5max_searches_per_step=5llm_auto_trigger=trueauto_fact_check=true키워드 감지
library/framework/api/sdk/protocol/version/dependency 및 한국어 동의어 감지llm_auto_trigger == true면 키워드 매칭 외에도 최신성 리스크가 있으면 검색 가능3단계 신선도 체크
mst.py reference search --keyword "{keyword}" --jsoncache_ttl_days 기준 fresh/stalecutoff_threshold_months 초과 시 expired검색 실행
stale/expired만 검색auto_search == true일 때만 WebSearch 실행auto_fact_check == true면 핵심 claim 1회 교차 검증REF 저장 (MANDATORY — WebSearch 실행 시 Bash 호출 필수)
Bash로 mst.py reference add를 호출해야 한다.content.md는 raw 발췌(원문 근거) 중심으로 남긴다.mst.py reference add 최소 N회 호출 (1:1 대응 원칙).python3 {PLUGIN_ROOT}/scripts/mst.py reference add --topic "{topic}" --url "{url}" --summary "{summary}" --content "{raw 발췌 본문}"summary는 한 줄 인덱스 유지).skills/plan/SKILL.md의 Reference Lookup Protocol 4번 항목을 동일 기준으로 따른다.컨텍스트 주입 블록 생성
[REFERENCE_CONTEXT]
current_date: {YYYY-MM-DD}
model_cutoff: {cutoff_date_or_unknown}
references:
- REF-001 (fresh|stale|expired) {topic} | {url}
[/REFERENCE_CONTEXT]
references: none아래 루프를 수행한다.
WHILE (사용자 종료 선언 전):
round += 1
현재 상태 요약 -> PM 개선안 제시 -> 사용자 피드백 수집(자연어 대화) -> 반영 -> 수렴 체크
END WHILE
라운드 운영 규칙:
http://{host}:{port}/agile/{AGI_ID}/objective[대시보드 변경 감지] {N}건의 수정 / {M}건의 코멘트가 있었습니다{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/round-history.md에 라운드 요약을 append한다.detail_content_buffer(메모리)에 도메인별로 축적한다.
각 라운드 종료 시 직전 라운드 대비 delta를 측정한다.
N_t: DoD 추가·삭제 건수 정규화 값E_t: DoD 본문 수정 건수 정규화 값S_t: 구조 변경 이벤트(순서 재배치, split/merge, 의존성 변경) 정규화 값P_t: 상태 변경/미해결 코멘트 영향도 정규화 값D_t = (N_t + E_t + S_t + P_t) / 4EMA3_t = alpha * D_t + (1 - alpha) * EMA3_(t-1) (alpha=0.5, 초기값=D_1)D_t <= convergence_threshold_abs (기본 0.12)EMA3_t <= convergence_threshold_trend (기본 0.18)<= 1coverage_ratio >= config.agile.coverage_threshold (기본 0.85) — --doc 모드 1A.10 직전 details/*.md 집합에 대해 python3 {PLUGIN_ROOT}/scripts/mst.py agile coverage-check {원본문서경로} --details-dir {details_dir}를 실행해 coverage 값을 사용한다. 이 조건이 미충족이면 다른 3개 조건이 통과해도 수렴 종료를 권장하지 않는다.[수렴 감지] 변경량이 임계값 이하입니다. 현재 상태로 확정할까요?soft limit:
soft_limit_rounds=8 (설정값이 있으면 우선 적용)round == soft_limit_rounds에 도달하면 합의사항/미해결 쟁점을 요약하고 종료/연장 선택을 받는다.각 라운드 반영 직후(또는 최종 저장 직전) 9개 통합 품질 기준으로 DoD를 판정한다.
| # | 기준명 | 출처 | PM 판정 질문 |
|---|---|---|---|
| 1 | 정확성 (Correctness) | IEEE 830 | 이 DoD가 프로젝트 목표(JTBD)와 일치하는가? |
| 2 | 비모호성 (Unambiguity) | IEEE+IREB | 해석 분기 없이 단 하나의 의미만 가지는가? |
| 3 | 완전성 (Completeness) | IEEE+IREB | 정상/에러/경계 조건이 모두 정의되었는가? |
| 4 | 일관성 (Consistency) | IEEE 830 | 다른 DoD 항목과 모순되지 않는가? |
| 5 | 검증가능성 (Verifiability) | IEEE+IREB | 관찰/측정으로 완료 여부를 판정할 수 있는가? |
| 6 | 필요성 (Necessity) | IREB | 이 DoD 없이는 프로젝트 목표 달성이 불가능한가? |
| 7 | 이해가능성 (Understandability) | IREB | 비기술 이해관계자도 의미를 이해할 수 있는가? |
| 8 | 중요도 순위 (Ranked) | IEEE 830 | 우선순위가 부여되었는가? |
| 9 | ODI 구조 (Outcome Format) | ODI | 방향+측정+대상+맥락+목표값이 포함되었는가? |
운영 규칙:
{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/quality-gate-log.md에 DoD별 1행 요약으로 기록한다.DoD ID, pass/total, 결과, 실패 기준 수, 타임스탬프결과=fail인 DoD만 <details>로 상세(기준명, 미충족 사유)를 추가한다.## 설계 결정 (Architecture Decisions) 및 objective/details/*.md에서는 기술 상세를 허용한다.dod_count_min/dod_count_max, 기본 5~15)를 안내하되 차단하지 않는다X 한다, so that 사용자는 Y 할 수 있다로 연결되는지 확인quality-gate-log.md에 observable_by_sprint: unclear 메타데이터 기록을 권장한다. 이 항목은 강제 게이트가 아닌 사고 보조 프롬프트다.최종 저장(1A.10) 전에 아래를 확인한다.
priority 마커 반영)detail_content_buffer에 축적된 내용과 대화 이력을 대조하여, 사용자가 논의 중 제시한 설계·결정·프로세스·구조 중 아직 details/ 소재에 반영되지 않은 항목이 없는지 확인한다. 누락 항목이 있으면 저장 전 보완한다.이 단계는 저장 전 품질 강화용 프로세스이며 objective.md에 섹션으로 남기지 않는다.
WebSearch로 최신 패턴/대안/함정 점검CRITICAL / MAJOR / MINOR / NO_ISSUESCRITICAL 또는 MAJOR 존재 시, 저장 전에 보완 질의 후 재검토Clarity, Feasibility, Risk Coverage, Evidence Freshness, TestabilityCRITICAL 해소 완료전략 검토를 통과한 뒤, objective 저장 전에 디자인 단계를 수행한다.
웹사이트, 앱, 화면, UI, 페이지, 대시보드, 컴포넌트, 레이아웃, 프론트엔드, 디자인, 목업, 시안, 랜딩, 포털[디자인 단계 skip] UI 프로젝트 미감지AUTO_MODE 분기:
AUTO_MODE=false: 감지 시 사용자에게 디자인 단계 진행 여부를 1회 확인한다.AUTO_MODE=true: 감지 시 사용자 확인 없이 자동 진입한다.확정된 DoD/설계 결정을 기준으로 아래 3종을 모두 포함한 와이어프레임을 작성한다.
화면명 + 1줄 설명→ 기반 흐름저장 경로:
{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/details/design-wireframe.mdAUTO_MODE 분기:
AUTO_MODE=false: 생성한 와이어프레임을 제시하고 보완 피드백을 반영한다.AUTO_MODE=true: 와이어프레임을 자동 생성/저장하고 핵심 결정 근거를 auto-decisions.md에 기록한다.design-wireframe.md에 함께 저장한다.AUTO_MODE 분기:
AUTO_MODE=false: DoD/usecase 변경안을 사용자와 합의 후 반영한다.AUTO_MODE=true: PM이 자율 반영하고 변경 사유/근거를 auto-decisions.md에 기록한다.Skill(skill: "mst:stitch")mcp__stitch__* 도구 호출은 금지한다.throw / timeout / 빈 결과[Stitch 실패] {오류 요약} — 텍스트 와이어프레임으로 진행AUTO_MODE 분기:
AUTO_MODE=false: 생성된 시안을 사용자에게 제시하고 선택/피드백을 반영한다.AUTO_MODE=true: 생성된 시안을 PM이 자율 선택하고 근거를 auto-decisions.md에 기록한다.디자인 단계에서 기능 설계로 회귀하는 방향 전환 1건 = 1회AUTO_MODE 분기:
AUTO_MODE=false: 회귀 횟수 제한 없이 사용자 확정 시까지 반복 가능AUTO_MODE=true: agile.design_regression_max(기본 3) 상한을 적용한다.
auto-decisions.md에 기록한 뒤 Step 1A.9.5로 진행한다.objective 저장 전에 수집된 모든 상세 내용을 도메인 단위로 정리한다.
--doc 모드(1B): 원본 문서의 섹션별 내용 전체 + Q&A 보완 내용. 원본 문서의 H1/H2 구조를 클러스터링 참고 입력으로 우선 활용한다.details/{domain-slug}.md 파일명을 제안하고, 도메인명 + 1줄 요약을 작성한다.AUTO_MODE에서는 사용자 확인 대신 PM이 자율 확정하고 근거를 함께 기록한다.Step 1A.9.5의 도메인 클러스터링 결과와 누적 detail_content_buffer를 입력으로, Step 1A.9.7 적대적 검토 전에 사용자가 "완성된 모습"을 검증할 수 있도록 자연어 미리보기와 정제 라운드를 수행한다. PM이 미리보기가 불필요하거나 오히려 흐름을 방해한다고 판단하면 사용자 질문 없이 skip할 수 있다.
AskUserQuestion을 사용하지 않는다.[완성 모습 미리보기 skip] {사유}진행 시 아래 3종을 자연어로 제시한다. PM은 프로젝트 성격상 필요하다고 판단하면 추가 시각화나 표를 자유롭게 더할 수 있다.
{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/round-history.md에 라운드 요약을 append한다.detail_content_buffer에 축적하고, Step 1A.10에서 details/*.md에 흡수한다.completion-preview.md 같은 별도 산출물 파일은 생성하지 않는다.AUTO_MODE 분기:
AUTO_MODE=false: 사용자 확정 시까지 라운드 횟수 제한 없이 반복 가능AUTO_MODE=true: 최대 2회 반복한다. 설정값 agile.completion_preview.max_rounds_auto가 있으면 해당 값을 상한으로 사용한다.
detail_content_buffer에 반영하고 Step 1A.9.7로 진행한다.완성된 모습 미리보기에서 DoD/JTBD/도메인 정제로 회귀하는 방향 전환 1건 = 1회AUTO_MODE=true에서는 agile.completion_preview.regression_max(기본 2) 상한을 적용한다.
auto-decisions.md에 기록한 뒤 Step 1A.9.7로 진행한다.AUTO_MODE=false에서는 사용자 확정 시까지 회귀 횟수 제한 없이 반복 가능하다.Step 1A.9.5 도메인 클러스터링 (및 Step 1A.9.6 완성된 모습 미리보기/정제 — 통과 또는 PM skip) 직후, objective 저장 직전에 완전성 보강 목적의 적대적 검토를 수행한다. 이 게이트는 D3의 명료도 검증이 아니라 엣지케이스, 누락 흐름, 통합 경계, persona/NFR gap을 찾아 Step 1A.4 재귀 정제 루프에 "적대적 검토 라운드" 1회로 주입하는 절차다.
Bash(python3 {PLUGIN_ROOT}/scripts/mst.py config get agile.adversarial_review)로 설정을 읽는다.
agile.adversarial_review.enabled != true이면 graceful skip 후 Step 1A.10으로 진행한다.edge, flow, integration이며 persona, nfr은 설정이 true인 경우에만 실행한다.max_rounds 기본값은 3, current_round 초기값은 1이다.python3 {PLUGIN_ROOT}/scripts/mst.py agile review --agi {AGI_ID} --perspective {name} --json
context_files 경로와 output_schema 경로만 독립 에이전트에 전달한다. 허용 호출은 Skill(skill:"mst:codex") 또는 Task(subagent_type:"general-purpose")이며 반드시 독립 컨텍스트로 실행한다. 프롬프트에는 plan/objective 원문, detail 본문, DoD/JTBD 원문을 절대 포함하지 않는다.
역할: {perspective} 관점의 적대적 검토자.
Read로 context_files 경로를 로드하고 output_schema에 맞게 findings JSON을 반환하시오.
{PROJECT_ROOT}/.gran-maestro/agile/AGI-NNN/objective/adversarial-review-findings.md에 기록한다. 각 append 블록에는 round, perspective, severity, finding, suggested_dod, 반영 여부를 포함한다.findings 배열이 비어있음 OR current_round >= max_rounds이다. 수렴 전에는 critical finding과 PM이 필요하다고 판단한 major finding을 Step 1A.4 재귀 정제 루프의 추가 입력으로 반영하고 current_round += 1 후 재검토한다.AUTO_MODE=true:
parallel_in_auto_mode=true이면 enabled perspective를 병렬 실행하고, false이면 순차 실행한다.severity=critical finding은 자동 반영하고 {PROJECT_ROOT}/.gran-maestro/agile/AGI-NNN/auto-decisions.md에 근거와 반영 내용을 기록한다.AUTO_MODE=false:
edge + flow 2종을 순차 실행한다. 설정에서 다른 perspective가 enabled여도 PM이 필요하다고 판단한 경우에만 추가 실행한다.severity=critical finding은 AskUserQuestion으로 사용자 confirm 후 objective/detail 보강에 반영한다. major/minor는 요약만 제시하고 사용자가 반영을 선택한 경우에만 재정제한다.| 필드 | plan-time | sprint-runtime | sprint-end |
|---|---|---|---|
artifact_paths | 필수 (자동 채움) | - | 파일 실존 검증 |
entrypoint_path | 필수 (entrypoint: none + reason 예외 허용) | - | grep 실매칭 검증 |
integration_smoke_id | 예약 필수 (ID + user flow + 성공의도) | 선택 보강 | tests/ 실존 경로 강제 |
verify_cmd | 골격 필수 (비대화식 실행 정의) | 실제 명령 확정 | 실행 + 신호 매칭, true/exit 0/echo 단독 거부 |
expected_signal | TBD 허용 | TBD 해소 | 정규식/문자열 매칭 |
templates/objective.md 포맷으로 아래 경로에 저장:
{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/objective.md
{PROJECT_ROOT}/.gran-maestro/agile/{AGI_ID}/objective/details/{domain}.md
저장 규칙:
## 디자인 컨텍스트 섹션을 추가한다. 디자인 단계를 거치지 않은 경우(비-UI 프로젝트 포함) 해당 섹션은 생성하지 않고 skip한다.
## 상세 문서 (Details) 인덱스 이전## 디자인 컨텍스트
> 이 프로젝트의 디자인 baseline입니다. sprint 진행 중 수정될 수 있습니다.
- DES-ID: DES-NNN
- Stitch 프로젝트 URL: {URL}
- 생성일: {YYYY-MM-DD}
- 상태: baseline | updated
### 화면 목록
| 화면명 | Stitch URL | HTML 경로 | 설명 |
|--------|-----------|-----------|------|
| {화면명} | {url} | designs/DES-NNN/{screen-file}.html | {설명} |
### 화면 흐름
{텍스트 와이어프레임에서 정의된 화면 간 네비게이션 흐름}
### 텍스트 와이어프레임
{Step 1A.9.2.2에서 생성된 와이어프레임 원본 — 변경 추적용}
wireframe-only) 구조:## 디자인 컨텍스트
> 텍스트 와이어프레임만 생성됨 (Stitch 시안 미생성)
- DES-ID: 없음
- 상태: wireframe-only
### 텍스트 와이어프레임
{와이어프레임 원본}
## 상세 문서 (Details)에는 domain별 detail 파일 링크 + 도메인명 + 1줄 요약을 기록한다.objective/details/*.md)에는 해당 도메인의 모든 상세 내용을 원본 수준으로 보존한다(요약/축약 금지).
## 상세 명세 하위에 1:1 보존한다 — 설계 결정과 그 근거, 기술 선택과 비교 대안, 디렉토리 구조, 프로세스 흐름, Gate/체크리스트, 스키마/템플릿, 예시, 합의 사항 등. PM은 사용자 발화를 누락 없이 기록하며, 대화에서 논의되었으나 details/에 없는 내용이 있으면 안 된다.--doc 모드(1B): 원본 문서의 해당 도메인 내용 전체 + Q&A로 추가 보완된 내용. 원본 문서에 기술된 내용이 details/에서 누락되어서는 안 된다.details/{domain}.md 파일의 첫 줄에는 반드시 <!-- source-mapping: original=<원본경로> sections=[<H1/H2 헤더 목록>] --> 메타데이터를 작성한다.python3 {PLUGIN_ROOT}/scripts/mst.py agile detail validate-mapping {details_file_path} 명령으로 source-mapping 메타데이터를 검증한다.python3 {PLUGIN_ROOT}/scripts/mst.py agile coverage-check {원본문서경로} --details-dir {details_dir} 명령으로 원본 ↔ details 집합 매칭률을 검증한다. 매칭률이 임계 미만이면 저장을 실패로 처리하고, 누락된 원본 슬러그 목록을 사용자에게 보고한 뒤 details 보강 후 재실행한다.details/{domain}.md 파일은 아래 구조를 따른다.
# {도메인명}
> 이 문서는 objective.md의 상세 참조 문서입니다.
> 관련 DoD: DOD-NNN, DOD-MMM
## 개요
{이 도메인이 다루는 영역의 1~2문장 요약}
## 설계 결정
### AD-NNN: {결정 제목}
- **결정**: {무엇을 결정했는가}
- **근거**: {왜 이렇게 결정했는가 — Q&A에서 논의된 이유}
- **대안 검토**: {비교한 대안과 기각 사유}
- **영향 범위**: {이 결정이 영향을 주는 영역}
## 상세 명세
{대화에서 정제된 구체적 설계 내용 — tree 구조로 항목별 정리}
{프로세스 흐름, Gate 체크리스트, 스키마, 템플릿, 디렉토리 구조, 예시 등}
{원본 제시 내용 + Q&A를 통해 구체화/보강된 내용 모두 포함}
## Q&A 보강 사항
{대화 중 추가로 결정/보완된 항목들 — 결정 내용 + 근거}
## 상세 명세 섹션이 핵심이다. 여기에 대화를 통해 정제된 설계 원본이 tree 구조(제목/소제목/불릿)로 항목별 정리되어야 한다.Direction/Measure/Object/Context/Target)를 사용한다.<!-- dod:DOD-NNN status:todo priority:must domain:{slug} -->{slug}는 해당 DoD가 속한 도메인의 상세 문서 파일명 (예: details/intent-context-propagation.md → domain:intent-context-propagation)priority 값은 MoSCoW 결과를 반영해 must|should|could|wont 중 하나를 사용한다.Step 1A.10 저장 직후, 각 detail 파일에 대해 독립적으로 D3 검증을 수행한다.
Bash(python3 {PLUGIN_ROOT}/scripts/mst.py config get d3.objective_detail_threshold)에서 d3.objective_detail_threshold를 조회한다.0.1을 사용한다.objective/details/*.md 각 파일마다 독립 에이전트로 D3 역방향 시뮬레이션을 실행한다.mst:plan Step 3.9) 패턴을 따르되, 임계치는 objective_detail_threshold를 사용한다.저장 후:
python3 {PLUGIN_ROOT}/scripts/mst.py agile update {AGI_ID} --status active --objective-version 1 --json 실행목표: 기존 문서의 내용 전체를 프로젝트 DoD 중심 구조로 정규화하고, 원본 문서의 상세 내용을 details/에 도메인별로 전량 보존하며, 누락 항목을 Q&A로 보완한다.
Read({PROJECT_ROOT}/{--doc 경로}) 실행 (절대경로 변환)PARSED_CONTEXT에 저장
PARSED_CONTEXT 기반으로 JTBD/DoD/설계/제약 초안을 생성한다.--doc 모드도 아래 단계를 동일 적용한다.
python3 {PLUGIN_ROOT}/scripts/mst.py agile update {AGI_ID} --status active --objective-version 1 --json 실행[MST skill=agile-plan step=2/3 return_to={RETURN_TO_OR_NULL}]
objective 저장 후 반드시 상태 스냅샷을 기록한다:
MST_STATE_PPID="${PPID}" python3 {PLUGIN_ROOT}/scripts/mst.py state set \
--skill agile-plan \
--step 3 \
--total 3 \
[--return-to {RETURN_TO}]
--return-to가 있으면 아래 종료 마커 출력 후 즉시 종료:
[MST skill=agile-plan step=returned return_to={RETURN_TO}]return_to를 감지하여 상위 스킬 re-feed를 강제한다./mst:agile --resume {AGI_ID}evidence_ref를 반드시 포함한다.