수렴 - QA 후 사양 쓰기 저장 (Converge - Spec Write-Back After QA)
실행 루프를 종료합니다: QA를 통과한 태스크는 살아있는 사양의 일부가 됩니다. 이 스킬은 라이프사이클에서 ConvergeTool 역할을 나타냅니다. 프로세스를 정의하며, 저장소 에이전트 규칙은 여전히 권한을 소유하고, 이 스킬은 추가 액세스를 부여하지 않습니다.
파이프라인 위치: dev -> qa -> 수렴(converge) -> 아카이브된 번들 + 업데이트된 사양.
사용 시기
- 태스크 번들의
03-qa-verification.md에 확인된QA_PASSED판정이 기록되어 있습니다. 02-dev-workspace.md에 고정된 구현 편차 표(행 또는 명시적 None 행)가 포함되어 있습니다.- 태스크의 확인된 동작을
.specs/02-tech-spec.md에 반영하고, 번들을 아카이브하며, 원본 변경 제안을 종료해야 합니다.
사용하지 말아야 할 경우
- 구현 또는 QA가 아직 진행 중이거나, 핸드오프 마커가 확인되지 않았거나,
REWORK_REQUIRED가 활성 상태인 경우 - 안정적인QA_PASSED판정을 기다리십시오. - 편차 로그가 비어 있거나 누락된 경우 - 추측하는 대신 태스크를 Dev로 되돌려 보내십시오.
- 사양 내용을 발명하거나 기존 사양 산문을 다시 작성해야 하는 경우 - 이는 계획 변경이지 수렴이 아닙니다.
입력
tasks/<task-id>/01-contract.md- 제목, 추적성 앵커, 선택적change_id.tasks/<task-id>/02-dev-workspace.md- 구현 편차 표(고정 형식).tasks/<task-id>/03-qa-verification.md- 확인된QA_PASSED판정 및 증거.tasks/<task-id>/04-process.md- 파생된 상태 카드 및 이벤트 로그..specs/02-tech-spec.md- 살아있는 기술 사양..specs/changes/<change-id>/proposal.md- 원본 변경 제안(있는 경우).
출력
- 사양의 Converged changes 섹션에 태스크당 날짜와 작성자가 표시된 하나의 항목.
- 태스크당 수렴 마커:
<!-- converged: <task-id> sha256:<hash> -->. 04-process.md에macro_status: "CONVERGED"및 하나의TASK_CONVERGED이벤트 행 (actorConvergeTool).- 태스크 번들이
tasks/archive/<task-id>/로 이동(절대 삭제되지 않음). - 제안이 있는 경우,
.specs/changes/<change-id>/convergence.md및 제안 상태archived.
확인 -> 적용 -> 검증
- 확인. 쓰기 전에 번들을 분류합니다:
python .agents/skills/converge/scripts/converge.py check --tasks-dir ./tasks --json번들은 QA 통과, 재작업 없음, 편차 표에 최소 하나의 행 또는 명시적 None 행이 있고, 사양에 이미 해당 마커가 없는 경우에만 수렴 준비가 된 것입니다. - 적용. 하나의 번들을 수렴합니다:
python .agents/skills/converge/scripts/converge.py apply --task tasks/<task-id>먼저--dry-run을 사용하여 계획된 쓰기를 검사하십시오. 헬퍼는 번들이 수렴 준비가 되지 않은 경우 종료 코드 1을 반환하고,--force가 제공되지 않은 경우 기존 아카이브 대상을 거부합니다. - 검증.
check를 다시 실행하여 마커가 존재하는지,04-process.md가CONVERGED를 나타내는지, 번들이 아카이브되었는지,--spec-sha256이 예상 CI 값과 일치하는지 확인합니다:python .agents/skills/converge/scripts/converge.py --spec .specs/02-tech-spec.md --spec-sha256
수동 폴백 (Python 없음)
헬퍼를 사용할 수 없는 경우, 동일한 단계를 수동으로 수행하고 마커를 정확하게 유지하십시오:
03에서QA_PASSED가 확인되었고REWORK_REQUIRED가 활성화되지 않았는지 확인합니다.02에서 편차 행을 읽고, 빈 로그를 거부합니다.- 사양의 Converged changes 섹션에 하나의 항목을 추가(편집하지 않음)합니다:
### <task-id>제목, 편차 표, 및<!-- converged: <task-id> sha256:<hash> -->마커. SHA-256 도구를 사용하여 정규화된 태스크 ID와 행에 대한 해시를 계산합니다. 04에서macro_status를CONVERGED로 설정하고TASK_CONVERGED/ConvergeTool행을 추가합니다.- 번들을
tasks/archive/<task-id>/로 이동(절대 삭제하지 않음)하고, 변경 제안이 있는 경우 제안을 아카이브하고convergence.md를 작성합니다. - 검증 단계를 다시 실행하고 증거를 기록합니다.
거부 조건
다음 중 하나라도 해당되면 수렴 대신 중지하고 보고하십시오:
- QA 미통과 -
03에 확인된QA_PASSED가 없거나REWORK_REQUIRED가 여전히 활성 상태입니다. - 해결되지 않은 재작업 - 재시도 증거에 태스크가 재작업 중임을 나타냅니다. 새 판정을 기다리십시오.
- 빈 편차 로그 - 구현 편차 표가 없거나 DEV 행 또는 명시적 None 행이 없습니다.
- 사양 불일치(Spec drift) -
modify/remove편차가 사양에 포함되지 않은#sec-*앵커를 가리키는 경우; 사양과 편차 로그가 일치하지 않습니다. CI에서check/apply와 함께--strict를 실행하여 이 경고를 거부로 전환하십시오. - 아카이브 충돌 -
tasks/archive/<task-id>/가 이미 존재하고--force가 제공되지 않았습니다.
구조적 편차(새 모듈, 변경된 경계, 새로운 ADR 수준 결정)는 spec-generator로 에스컬레이션되어야
하며, 조용히 수렴되지 않습니다.
기록 및 귀속
수렴은 기록을 다시 작성하지 않습니다: 기존 사양 산문을 편집하는 대신 날짜와 작성자가 표시된 섹션을 추가합니다. 기존 항목은 바이트 단위로 안정적으로 유지되며, 모든 항목은 소스 태스크, QA 판정 및 ConvergeTool 행위자의 이름을 지정합니다. 새 태스크를 맞추기 위해 이전 수렴 항목을 편집하지 마십시오. 새 항목을 추가하고 충돌을 기록하십시오.
참조
references/convergence-protocol.md- 상태 머신, 누가 무엇을 쓰는지, 아카이브 레이아웃, 멱등성 마커, 충돌 규칙 및 구조적 에스컬레이션.- 역할 경계:
references/role-boundaries.md— 쓰기 범위, 불변 조건 및 정직한 시행 모델(번들 포함, 외부 파일 불필요). - 태스크 번들 형식 및 역할 라이프사이클:
task-decomposition스킬(설치된 경우). - 핸드오프 입력:
dev스킬; 판정 입력:qa스킬. - 저장소 규칙: 채택 프로젝트가 정의하는 경우
AGENTS.md및 역할 규칙 파일을 읽으십시오. 이들은 요구 사항을 추가할 수 있지만 이 스킬에는 필요하지 않습니다.
정직한 한계
이 스킬은 쓰기 액세스를 부여하지 않으며 역할 격리를 강제할 수 없습니다. 저장소에 CI(예: git 기반 역할 감사) 또는 브랜치 보호가 있는 경우, 이것이 권위 있는 계층입니다. 번들된 헬퍼는 선택적 결정론적 보조 도구입니다. 마커와 기록된 증거가 계약입니다.