From c01e44633f433fd1050ccdbb471359d33117156b Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Mon, 5 Oct 2026 20:52:46 +0900 Subject: [PATCH 01/11] =?UTF-8?q?[docs][backlog]=20=EC=84=A4=EA=B3=84=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20draft=20=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Task-Id: GF-145 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude Tokens-Used: unavailable (transcript-not-found) Tool-Calls: unavailable (transcript-not-found) Hooks-Commit: ba16249 Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- ...4-\354\204\270\354\232\260\352\270\260.md" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "backlog/drafts/draft-22 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" diff --git "a/backlog/drafts/draft-22 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" "b/backlog/drafts/draft-22 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" new file mode 100644 index 0000000..f998cb3 --- /dev/null +++ "b/backlog/drafts/draft-22 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" @@ -0,0 +1,21 @@ +--- +id: DRAFT-22 +title: Sigkill Foundry 형식 설계 문서 세우기 +status: Draft +assignee: [] +created_date: '2026-10-05 11:52' +labels: + - docs +dependencies: [] +--- + +## Description + + +최상위 Sigkill Foundry 설계 문서와 같은 5문서 세트(design/: 0 문서 정보, 1 제안서 ~ 5 구현 결과 보고서, 부록)를 이 저장소에 세우고, Claude 앱 문서를 편집 원본으로 둔다. 이 저장소의 README·backlog 레퍼런스 문서·decision에서 1.01 배경과 문제, 1.02 원칙, 3.01 시스템 구성을 채우고 나머지 장은 골격으로 둔다(원천은 기존 문서). 진척 서술 금지. + +수용 기준(승격 시 AC로 등록): +1. design/ 구조·장 형식이 최상위 Sigkill Foundry와 같다 +2. 1.01 · 1.02 · 3.01을 기존 문서 근거로 채우고 나머지는 골격으로 둔다 +3. Claude 앱에 장별 문서와 목차 문서를 만들고 design/README.md에 링크한다 + From dd5bd5e234fc9839e9959515f1a263a414341b4d Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Mon, 5 Oct 2026 20:52:49 +0900 Subject: [PATCH 02/11] =?UTF-8?q?[docs][backlog]=20=EC=84=A4=EA=B3=84=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20draft=EB=A5=BC=20=20=EC=8A=B9=EA=B2=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Task-Id: GF-145 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude Tokens-Used: unavailable (transcript-not-found) Tool-Calls: unavailable (transcript-not-found) Hooks-Commit: fa74084 Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- ...4\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename "backlog/drafts/draft-22 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" => "backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" (97%) diff --git "a/backlog/drafts/draft-22 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" "b/backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" similarity index 97% rename from "backlog/drafts/draft-22 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" rename to "backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" index f998cb3..a17f02c 100644 --- "a/backlog/drafts/draft-22 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" +++ "b/backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" @@ -1,7 +1,7 @@ --- -id: DRAFT-22 +id: GF-145 title: Sigkill Foundry 형식 설계 문서 세우기 -status: Draft +status: To Do assignee: [] created_date: '2026-10-05 11:52' labels: From cbff3e2629891ae10ee3fc228e559f0fd671ca58 Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Mon, 5 Oct 2026 21:12:12 +0900 Subject: [PATCH 03/11] =?UTF-8?q?[chore][backlog]=20GF-145=EB=A5=BC=20?= =?UTF-8?q?=EC=A7=84=ED=96=89=20=EC=A4=91=EC=9C=BC=EB=A1=9C=20=EC=A0=84?= =?UTF-8?q?=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Task-Id: GF-145 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude Tokens-Used: unavailable (transcript-not-found) Tool-Calls: unavailable (transcript-not-found) Hooks-Commit: ccd50b7 Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- ...54\204\234-\354\204\270\354\232\260\352\270\260.md" | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git "a/backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" "b/backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" index a17f02c..00e9bc0 100644 --- "a/backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" +++ "b/backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" @@ -1,9 +1,10 @@ --- id: GF-145 title: Sigkill Foundry 형식 설계 문서 세우기 -status: To Do +status: In Progress assignee: [] created_date: '2026-10-05 11:52' +updated_date: '2026-10-05 12:10' labels: - docs dependencies: [] @@ -19,3 +20,10 @@ dependencies: [] 2. 1.01 · 1.02 · 3.01을 기존 문서 근거로 채우고 나머지는 골격으로 둔다 3. Claude 앱에 장별 문서와 목차 문서를 만들고 design/README.md에 링크한다 + +## Acceptance Criteria + +- [ ] #1 design/ 구조·장 형식이 최상위 Sigkill Foundry와 같다 +- [ ] #2 1.01 · 1.02 · 3.01을 기존 문서 근거로 채우고 나머지는 골격으로 둔다 +- [ ] #3 Claude 앱에 장별 문서와 목차 문서를 만들고 design/README.md에 링크한다 + From 9140636ba00bf9c787c2ca0ceffdf2caa6d3aa6b Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Mon, 5 Oct 2026 21:13:46 +0900 Subject: [PATCH 04/11] =?UTF-8?q?[docs][design]=20=EC=84=A4=EA=B3=84=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EA=B3=A8=EA=B2=A9=EA=B3=BC=200=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EC=A0=95=EB=B3=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Task-Id: GF-145 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude Tokens-Used: unavailable (transcript-not-found) Tool-Calls: unavailable (transcript-not-found) Hooks-Commit: c6d957c Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- ...0\354\204\234-\354\240\225\353\263\264.md" | 82 +++++++++ ...5\352\263\274-\353\254\270\354\240\234.md" | 16 ++ .../02-\354\233\220\354\271\231.md" | 13 ++ ...4\354\231\200-\353\262\224\354\234\204.md" | 18 ++ ...0-\353\246\254\354\212\244\355\201\254.md" | 17 ++ ...4\354\230\201-\355\231\230\352\262\275.md" | 17 ++ ...4\354\235\270-\353\252\250\353\215\270.md" | 19 ++ ...24\352\265\254\354\202\254\355\225\255.md" | 17 ++ ...24\352\265\254\354\202\254\355\225\255.md" | 18 ++ ...4\355\205\234-\352\265\254\354\204\261.md" | 14 ++ ...1\354\236\221-\353\252\205\354\204\270.md" | 19 ++ ...4\355\212\270-\353\252\205\354\204\270.md" | 20 +++ ...4\354\212\244-\352\263\204\354\225\275.md" | 19 ++ ...4\352\263\204-\352\262\260\354\240\225.md" | 16 ++ ...1\354\227\205-\353\266\204\355\225\264.md" | 15 ++ ...0\352\263\274-\352\262\200\354\246\235.md" | 17 ++ ...0\352\262\260-\354\202\254\355\225\255.md" | 19 ++ ...1-\354\202\260\354\266\234\353\254\274.md" | 16 ++ ...0\354\244\200-\355\214\220\354\240\225.md" | 15 ++ ...0\353\271\204-\355\216\270\354\260\250.md" | 14 ++ ...4\354\206\215-\352\263\274\354\240\234.md" | 16 ++ design/README.md | 78 ++++++++ design/build-diagrams.py | 169 ++++++++++++++++++ design/diagrams/_common.gv | 6 + ...5-\354\232\251\354\226\264\354\247\221.md" | 16 ++ ...0\352\263\240-\353\254\270\355\227\214.md" | 18 ++ 26 files changed, 704 insertions(+) create mode 100644 "design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" create mode 100644 "design/1-\354\240\234\354\225\210\354\204\234/01-\353\260\260\352\262\275\352\263\274-\353\254\270\354\240\234.md" create mode 100644 "design/1-\354\240\234\354\225\210\354\204\234/02-\354\233\220\354\271\231.md" create mode 100644 "design/1-\354\240\234\354\225\210\354\204\234/03-\353\252\251\355\221\234\354\231\200-\353\262\224\354\234\204.md" create mode 100644 "design/1-\354\240\234\354\225\210\354\204\234/04-\352\270\260\353\214\200-\355\232\250\352\263\274\354\231\200-\353\246\254\354\212\244\355\201\254.md" create mode 100644 "design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/01-\354\235\264\355\225\264\352\264\200\352\263\204\354\236\220\354\231\200-\354\232\264\354\230\201-\355\231\230\352\262\275.md" create mode 100644 "design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/02-\353\217\204\353\251\224\354\235\270-\353\252\250\353\215\270.md" create mode 100644 "design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/03-\352\270\260\353\212\245-\354\232\224\352\265\254\354\202\254\355\225\255.md" create mode 100644 "design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/04-\355\222\210\354\247\210-\354\232\224\352\265\254\354\202\254\355\225\255.md" create mode 100644 "design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/01-\354\213\234\354\212\244\355\205\234-\352\265\254\354\204\261.md" create mode 100644 "design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/02-\353\217\231\354\236\221-\353\252\205\354\204\270.md" create mode 100644 "design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/03-\354\273\264\355\217\254\353\204\214\355\212\270-\353\252\205\354\204\270.md" create mode 100644 "design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/04-\354\235\270\355\204\260\355\216\230\354\235\264\354\212\244-\352\263\204\354\225\275.md" create mode 100644 "design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/05-\354\204\244\352\263\204-\352\262\260\354\240\225.md" create mode 100644 "design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/01-\353\247\210\354\235\274\354\212\244\355\206\244\352\263\274-\354\236\221\354\227\205-\353\266\204\355\225\264.md" create mode 100644 "design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/02-\354\210\230\354\232\251-\352\270\260\354\244\200\352\263\274-\352\262\200\354\246\235.md" create mode 100644 "design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/03-\353\257\270\352\262\260-\354\202\254\355\225\255.md" create mode 100644 "design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/01-\354\202\260\354\266\234\353\254\274.md" create mode 100644 "design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/02-\354\210\230\354\232\251-\352\270\260\354\244\200-\355\214\220\354\240\225.md" create mode 100644 "design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/03-\352\263\204\355\232\215-\353\214\200\353\271\204-\355\216\270\354\260\250.md" create mode 100644 "design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/04-\355\233\204\354\206\215-\352\263\274\354\240\234.md" create mode 100644 design/README.md create mode 100755 design/build-diagrams.py create mode 100644 design/diagrams/_common.gv create mode 100644 "design/\353\266\200\353\241\235-\354\232\251\354\226\264\354\247\221.md" create mode 100644 "design/\353\266\200\353\241\235-\354\260\270\352\263\240-\353\254\270\355\227\214.md" diff --git "a/design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" "b/design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" new file mode 100644 index 0000000..f8064c1 --- /dev/null +++ "b/design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" @@ -0,0 +1,82 @@ +# 0. 문서 정보 + +이 문서는 coding-agent-git-commit-tool의 설계 문서다. 상위 문서는 최상위 Sigkill Foundry 설계 문서이고, +이 컴포넌트는 그 3.03 컴포넌트 명세 §3에 해당한다. 스펙 주도 개발(SDD)을 따른다 — 구현은 이 명세에서 +도출하고, 명세와 코드가 어긋나면 명세를 먼저 고친 뒤 코드를 맞춘다. + +## 문서 구성 + +설계 문서는 다섯 문서로 이어진다. 문서마다 하나의 질문에 답하고, 앞 문서의 답이 뒤 문서의 입력이 된다. + +| 번호 | 문서 | 답하는 질문 | +| --- | --- | --- | +| 1 | 프로젝트 제안서 | 왜 만들고, 무엇을 어디까지 하는가 | +| 2 | 요구사항 명세서 | 무엇을 만족해야 하는가 | +| 3 | 아키텍처 설계서 | 어떻게 구성되고 동작하는가 | +| 4 | 구현 계획서 | 어떤 순서로 만들고, 무엇으로 판정하는가 | +| 5 | 구현 결과 보고서 | 무엇을 만들었고, 판정은 어떻게 나왔는가 | + +장은 `문서 번호.장 번호`로 가리킨다 (예: 3.05 설계 결정). 장 안의 절은 `§`로 가리킨다 (예: 3.03 §1). +최상위 Sigkill Foundry 문서의 장은 앞에 "최상위"를 붙여 가리킨다 (예: 최상위 3.03 §3). + +## 규범 용어 + +| 표현 | 뜻 | +| --- | --- | +| 반드시 ~한다 (MUST) | 어기면 명세 위반이다 | +| ~해야 한다 (SHOULD) | 어길 때는 이유를 3.05 설계 결정에 남긴다 | +| ~할 수 있다 (MAY) | 선택 사항이다 | + +## 요구사항 표기 + +- 목표는 `G-<번호>`로 식별하고 1.03 목표와 범위에 둔다. 최상위 목표는 "최상위 G-n"으로 적는다. +- 원칙은 `P<번호>`로 식별하고 1.02 원칙에 둔다. 최상위 원칙은 "최상위 P<번호>"로 적는다. +- 기능 요구사항의 영역 접두어는 `TRL`이다. 최상위 2.03이 이 컴포넌트에 쓰는 접두어와 같다. 품질 요구사항은 `NFR`이다. +- 요구사항 ID는 `<영역>-<세 자리 번호>`이고 번호는 재사용하지 않는다. 번호 공간은 최상위와 나눠 쓴다. + +| 번호 범위 | 뜻 | 둘 곳 | +| --- | --- | --- | +| `TRL-001` ~ `TRL-099` | 최상위 2.03이 정한 요구사항. 같은 ID · 같은 뜻으로 받고, 이 저장소에서 문장을 바꾸지 않는다 | 2.03 | +| `TRL-101` ~ | 이 저장소에만 있는 기능 요구사항. 자신이 세분하는 최상위 `TRL-nnn`(또는 최상위 G-n)을 반드시 적는다 | 2.03 | +| `NFR-001` ~ `NFR-099` | 최상위 2.04가 정한 품질 요구사항 중 이 컴포넌트가 구현하는 것(NFR-004 · NFR-005) | 2.04 | +| `NFR-101` ~ | 이 저장소에만 있는 품질 요구사항. 상위 ID를 반드시 적는다 | 2.04 | + +- 설계 결정은 `ADR-<번호>`로 3.05에, 미결 사항은 `Q-<번호>`로 4.03에 둔다. 둘 다 이 저장소 안의 번호이고, + 최상위 것은 "최상위 ADR-n" · "최상위 Q-n"으로 적는다. +- 원천인 backlog decision은 `decision-<번호>`, 태스크는 `GF-<번호>`로 그대로 적는다. +- 모든 요구사항은 수용 기준을 하나 이상 가진다(4.02). +- 아직 정하지 않은 값은 `TBD(Q-n)`으로 적고, `Q-n`을 4.03 미결 사항에 둔다. + +## 추적 규칙 + +모든 요구사항은 다음 사슬로 앞뒤가 이어진다. 사슬이 끊긴 항목은 둘 수 없다. + +1. 최상위 요구사항 `TRL-0nn` · `NFR-0nn` (최상위 2.03 · 2.04) — 사슬의 위쪽 끝이다. +2. → 이 저장소의 목표 `G-n` (1.03) — 목표는 자신이 이바지하는 최상위 G-n을 적는다. +3. → 요구사항 `TRL-nnn` · `NFR-nnn` (2.03 · 2.04) — 최상위 ID를 그대로 받거나, `1nn`번대로 세분하며 상위 ID를 적는다. +4. → 구성 요소 · 인터페이스 (3.01 · 3.03 · 3.04) — 구성 요소는 자신이 구현하는 요구사항 ID를 적는다. +5. → 수용 기준 (4.02) · backlog 태스크 (4.01) — 요구사항 하나는 backlog 태스크의 AC로 내려간다. 태스크 카드는 자신이 구현하는 요구사항 ID를 적는다. +6. → 결과 판정 (5.02) — 수용 기준마다 통과/실패와 그 증거(테스트 로그 · 실측 커밋)를 남긴다. + +- 최상위 요구사항의 문장이 바뀌면 이 저장소의 2.03 · 2.04를 먼저 맞춘다. 이 저장소가 최상위 요구사항을 바꿀 필요를 찾으면 최상위 문서에 먼저 올린다. +- 원칙(1.02)에 어긋나는 요구사항은 둘 수 없다. 원칙을 바꾸려면 3.05 설계 결정에 결정을 먼저 남긴다. +- 계획과 다르게 구현한 것은 5.03 계획 대비 편차에 적고, 해당 설계 결정(3.05)에 연결한다. + +## 대상 저장소 + +| 컴포넌트 | 저장소 | 최상위 장 | +| --- | --- | --- | +| coding-agent-git-commit-tool | [coralstay/coding-agent-git-commit-tool][repo] | 3.03 §3 | + +## 편집 규칙 + +- 설계 내용의 원본은 이 설계 문서 하나다. 편집 원본은 Claude 앱의 문서이고, 저장소의 `design/**/*.md`는 Claude가 동기화하는 사본이다. 둘이 어긋나면 Claude 앱 문서가 맞다. 새 근거가 생기면 Claude 앱 문서를 먼저 고치고 사본을 맞춘다. +- `backlog/docs` · `backlog/decisions` · README는 이 설계 문서의 원천이다. 설계 문서가 원천을 대신하지 않고, 원천을 지우지 않는다. +- 한 장 = 한 문서. 같은 내용을 두 장에서 고치고 있다면 한쪽을 장 참조 한 줄로 접는다. +- 외부 문헌은 저장소에 옮겨 담지 않는다(decision-14). 인용과 검증 상태는 부록 참고 문헌에서만 관리한다. +- 다이어그램 원본은 `design/diagrams/*.dot`이다. DOT으로 먼저 쓰고, DOT으로 표현할 수 없는 것(시퀀스 등)만 mermaid(`.mmd`)로 쓴다. +- `design/build-diagrams.py`가 원본을 `design/diagrams/<이름>.svg`로 렌더한다. 색은 원본에 센티넬 hex로 적고, 빌드가 SVG 안의 CSS 변수(라이트 기본 · 다크 재정의)로 바꾼다. 빌드 전제: graphviz(`dot`), mermaid 렌더용 `npx` + 로컬 Chrome. +- 생성된 SVG는 손으로 고치지 않는다. 원본을 고치고 빌드를 다시 돌려 같은 커밋에 넣는다. 장 사본은 `![설명](../diagrams/<이름>.svg)`로 참조한다. +- 저장소 Markdown의 외부 링크는 문서 맨 아래 링크 정의 블록에 모으고, 본문은 `[표시][키]`로만 쓴다. + +[repo]: https://github.com/coralstay/coding-agent-git-commit-tool diff --git "a/design/1-\354\240\234\354\225\210\354\204\234/01-\353\260\260\352\262\275\352\263\274-\353\254\270\354\240\234.md" "b/design/1-\354\240\234\354\225\210\354\204\234/01-\353\260\260\352\262\275\352\263\274-\353\254\270\354\240\234.md" new file mode 100644 index 0000000..7d144c5 --- /dev/null +++ "b/design/1-\354\240\234\354\225\210\354\204\234/01-\353\260\260\352\262\275\352\263\274-\353\254\270\354\240\234.md" @@ -0,0 +1,16 @@ +# 1.01 배경과 문제 + +> 작성 전 + +이 컴포넌트가 왜 있는가 — 풀려는 문제와 Sigkill Foundry 안의 자리. + +## 담을 내용 + +- [ ] Sigkill Foundry 안의 역할(최상위 3.03 §3) +- [ ] 풀려는 문제 +- [ ] 다루는 범위의 세 기둥 + +## 원천 + +- README.md +- decision-25 · decision-29 diff --git "a/design/1-\354\240\234\354\225\210\354\204\234/02-\354\233\220\354\271\231.md" "b/design/1-\354\240\234\354\225\210\354\204\234/02-\354\233\220\354\271\231.md" new file mode 100644 index 0000000..57d6ad2 --- /dev/null +++ "b/design/1-\354\240\234\354\225\210\354\204\234/02-\354\233\220\354\271\231.md" @@ -0,0 +1,13 @@ +# 1.02 원칙 + +> 작성 전 + +모든 요구사항이 따라야 하는 불변 규칙. + +## 담을 내용 + +- [ ] 원칙 목록과 근거 decision + +## 원천 + +- backlog/decisions diff --git "a/design/1-\354\240\234\354\225\210\354\204\234/03-\353\252\251\355\221\234\354\231\200-\353\262\224\354\234\204.md" "b/design/1-\354\240\234\354\225\210\354\204\234/03-\353\252\251\355\221\234\354\231\200-\353\262\224\354\234\204.md" new file mode 100644 index 0000000..3e19421 --- /dev/null +++ "b/design/1-\354\240\234\354\225\210\354\204\234/03-\353\252\251\355\221\234\354\231\200-\353\262\224\354\234\204.md" @@ -0,0 +1,18 @@ +# 1.03 목표와 범위 + +> 작성 전 + +이 컴포넌트가 이루려는 것과 하지 않는 것. + +## 담을 내용 + +- [ ] 목표 `G-n` — 최상위 G-4(계측과 감사 추적)를 이 컴포넌트에서 어떻게 나누는가 +- [ ] 범위 — 형식 · 출처 기록 · 이력 불변 세 기둥이 각각 어디까지인가 +- [ ] 범위 밖 — 언어별 lint(decision-23), push 단계 테스트 · 빌드(decision-12), 서명된 증명(attestation) +- [ ] 지원하는 AI 도구의 범위 — Claude Code와 그 외 도구의 보장 수준 차이(decision-15 · decision-17 · decision-29) + +## 원천 + +- README.md — 다루는 범위 +- decision-23 · decision-25 · decision-29 +- doc-21 개념 지도 diff --git "a/design/1-\354\240\234\354\225\210\354\204\234/04-\352\270\260\353\214\200-\355\232\250\352\263\274\354\231\200-\353\246\254\354\212\244\355\201\254.md" "b/design/1-\354\240\234\354\225\210\354\204\234/04-\352\270\260\353\214\200-\355\232\250\352\263\274\354\231\200-\353\246\254\354\212\244\355\201\254.md" new file mode 100644 index 0000000..5a32a2c --- /dev/null +++ "b/design/1-\354\240\234\354\225\210\354\204\234/04-\352\270\260\353\214\200-\355\232\250\352\263\274\354\231\200-\353\246\254\354\212\244\355\201\254.md" @@ -0,0 +1,17 @@ +# 1.04 기대 효과와 리스크 + +> 작성 전 + +이 컴포넌트가 주는 것과 그 대가. + +## 담을 내용 + +- [ ] 기대 효과 — `git log`만으로 태스크 · 모델 · 비용을 읽는다 +- [ ] 리스크 — 트랜스크립트 형식 변경, GUI git 클라이언트의 PATH, `core.hooksPath` 점유, 토큰 귀속의 근사성 +- [ ] 리스크마다 완화 수단과 남는 한계 + +## 원천 + +- doc-6 주의점과 한계 +- doc-16 토큰 · 툴콜 측정 방법과 한계 +- README.md — 필요조건 diff --git "a/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/01-\354\235\264\355\225\264\352\264\200\352\263\204\354\236\220\354\231\200-\354\232\264\354\230\201-\355\231\230\352\262\275.md" "b/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/01-\354\235\264\355\225\264\352\264\200\352\263\204\354\236\220\354\231\200-\354\232\264\354\230\201-\355\231\230\352\262\275.md" new file mode 100644 index 0000000..71b895e --- /dev/null +++ "b/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/01-\354\235\264\355\225\264\352\264\200\352\263\204\354\236\220\354\231\200-\354\232\264\354\230\201-\355\231\230\352\262\275.md" @@ -0,0 +1,17 @@ +# 2.01 이해관계자와 운영 환경 + +> 작성 전 + +누가 이 훅을 쓰고 읽으며, 어떤 환경에서 도는가. + +## 담을 내용 + +- [ ] 이해관계자 — 커밋하는 에이전트 · 사람, 트레일러를 읽는 agent-orchestrator(`CommitLedger`), 이력을 감사하는 사람 +- [ ] 운영 환경 — git 버전, `python3` PATH, Claude Code 세션 신호(`CLAUDE_CODE_SESSION_ID` · `CLAUDE_PID` · `AI_AGENT`) +- [ ] 설치 형태 — 로컬(`core.hooksPath`) · 전역(`init.templateDir`) + +## 원천 + +- doc-1 설치 가이드 +- doc-15 훅 실행 경로 실측 +- doc-17 에이전트 판정 신호 레퍼런스 diff --git "a/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/02-\353\217\204\353\251\224\354\235\270-\353\252\250\353\215\270.md" "b/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/02-\353\217\204\353\251\224\354\235\270-\353\252\250\353\215\270.md" new file mode 100644 index 0000000..d6c3081 --- /dev/null +++ "b/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/02-\353\217\204\353\251\224\354\235\270-\353\252\250\353\215\270.md" @@ -0,0 +1,19 @@ +# 2.02 도메인 모델 + +> 작성 전 + +커밋 · 트레일러 · 세션 · 응답 · 귀속의 개념과 관계. + +## 담을 내용 + +- [ ] 커밋 메시지의 구성 — 제목(type · subsystem · 설명) · 본문 · 트레일러 블록 +- [ ] 트레일러 키와 값의 형식 +- [ ] 세션 트랜스크립트 · 응답(`requestId`/`message.id`) · `tool_use` 블록 +- [ ] 귀속 — 응답이 어느 커밋에 들어가는가(decision-27) +- [ ] 용어 구분 — 턴 · 트랜스크립트 · 귀속 · 마커(doc-14) + +## 원천 + +- doc-14 용어 정리 +- doc-3 AI 귀속 트레일러 레퍼런스 +- decision-27 diff --git "a/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/03-\352\270\260\353\212\245-\354\232\224\352\265\254\354\202\254\355\225\255.md" "b/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/03-\352\270\260\353\212\245-\354\232\224\352\265\254\354\202\254\355\225\255.md" new file mode 100644 index 0000000..3824f68 --- /dev/null +++ "b/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/03-\352\270\260\353\212\245-\354\232\224\352\265\254\354\202\254\355\225\255.md" @@ -0,0 +1,17 @@ +# 2.03 기능 요구사항 + +> 작성 전 + +이 컴포넌트가 만족해야 할 기능 요구사항. + +## 담을 내용 + +- [ ] 최상위 TRL-001 ~ TRL-009를 같은 ID로 받아 이 저장소의 말로 세분한 것 +- [ ] 이 저장소에만 있는 요구사항(TRL-101~) — 각자 상위 TRL ID를 적는다 +- [ ] 요구사항마다 목표 · 수용 기준(4.02) 연결 + +## 원천 + +- 최상위 2.03 TRL 절 +- README.md — 각 필드가 무엇이고 언제 만들어지는지 +- doc-2 커밋 메시지 규칙 상세 diff --git "a/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/04-\355\222\210\354\247\210-\354\232\224\352\265\254\354\202\254\355\225\255.md" "b/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/04-\355\222\210\354\247\210-\354\232\224\352\265\254\354\202\254\355\225\255.md" new file mode 100644 index 0000000..43c2fb9 --- /dev/null +++ "b/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/04-\355\222\210\354\247\210-\354\232\224\352\265\254\354\202\254\355\225\255.md" @@ -0,0 +1,18 @@ +# 2.04 품질 요구사항 + +> 작성 전 + +신뢰성 · 감사 가능성 · 이식성 같은 품질 요구사항. + +## 담을 내용 + +- [ ] 최상위 NFR-004 · NFR-005를 같은 ID로 받은 것 +- [ ] 견고성 — 비 UTF-8 로케일, 셸 메타문자, `python3` 부재, 설정 파일 읽기 실패 +- [ ] 감사 가능성 — 파일 하나로 훅 하나가 읽힌다(decision-16) +- [ ] 개인정보 — 세션 ID · 인증 정보 · 대화 내용을 커밋에 남기지 않는다 + +## 원천 + +- decision-8 견고성 테스트 전략 +- decision-16 · decision-20 +- tests/ diff --git "a/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/01-\354\213\234\354\212\244\355\205\234-\352\265\254\354\204\261.md" "b/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/01-\354\213\234\354\212\244\355\205\234-\352\265\254\354\204\261.md" new file mode 100644 index 0000000..9200c66 --- /dev/null +++ "b/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/01-\354\213\234\354\212\244\355\205\234-\352\265\254\354\204\261.md" @@ -0,0 +1,14 @@ +# 3.01 시스템 구성 + +> 작성 전 + +구성 요소와 그 배치. + +## 담을 내용 + +- [ ] 훅 · 설정 · 설치 스크립트 + +## 원천 + +- hooks/ +- install.sh diff --git "a/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/02-\353\217\231\354\236\221-\353\252\205\354\204\270.md" "b/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/02-\353\217\231\354\236\221-\353\252\205\354\204\270.md" new file mode 100644 index 0000000..deb61e4 --- /dev/null +++ "b/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/02-\353\217\231\354\236\221-\353\252\205\354\204\270.md" @@ -0,0 +1,19 @@ +# 3.02 동작 명세 + +> 작성 전 + +훅마다 입력에서 결과까지 어떤 순서로 판단하는가. + +## 담을 내용 + +- [ ] `prepare-commit-msg` — 재생 · 병합 면제, 에디터 경로 거부, 검증 마커 +- [ ] `commit-msg` — 형식 · 길이 · `Fixes` · 브랜치 `Task-Id` · `AI-Model` 게이트 +- [ ] `post-commit` — 트레일러 계산 순서, 중복 판정, `--amend` 재진입 가드 +- [ ] 토큰 귀속 알고리즘 — 응답 묶기, 대상 경로 대조, 귀속 기록(decision-27) +- [ ] 재생 · 병합 · rebase 같은 이력 연산에서의 동작(doc-19) + +## 원천 + +- hooks/ 코드 docstring +- doc-10 실행 순서와 병렬 구조 +- doc-16 · doc-19 diff --git "a/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/03-\354\273\264\355\217\254\353\204\214\355\212\270-\353\252\205\354\204\270.md" "b/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/03-\354\273\264\355\217\254\353\204\214\355\212\270-\353\252\205\354\204\270.md" new file mode 100644 index 0000000..ec4fe7e --- /dev/null +++ "b/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/03-\354\273\264\355\217\254\353\204\214\355\212\270-\353\252\205\354\204\270.md" @@ -0,0 +1,20 @@ +# 3.03 컴포넌트 명세 + +> 작성 전 + +훅 파일 하나하나의 책임 · 입력 · 출력 · 구현하는 요구사항. + +## 담을 내용 + +- [ ] §1 `prepare-commit-msg` +- [ ] §2 `commit-msg` +- [ ] §3 `post-commit` +- [ ] §4 `gitformat.conf` +- [ ] §5 `install.sh` · `template/` +- [ ] 컴포넌트마다 구현하는 요구사항 ID + +## 원천 + +- hooks/readme.md +- doc-5 저장소 구조 +- hooks/ 코드 docstring diff --git "a/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/04-\354\235\270\355\204\260\355\216\230\354\235\264\354\212\244-\352\263\204\354\225\275.md" "b/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/04-\354\235\270\355\204\260\355\216\230\354\235\264\354\212\244-\352\263\204\354\225\275.md" new file mode 100644 index 0000000..9d02534 --- /dev/null +++ "b/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/04-\354\235\270\355\204\260\355\216\230\354\235\264\354\212\244-\352\263\204\354\225\275.md" @@ -0,0 +1,19 @@ +# 3.04 인터페이스 계약 + +> 작성 전 + +이 컴포넌트가 밖과 주고받는 형식. + +## 담을 내용 + +- [ ] 커밋 메시지 형식 — 제목 · 본문 · 트레일러의 문법(소비자: agent-orchestrator `CommitLedger`, 최상위 3.04 §2) +- [ ] `unavailable (<사유>)` 사유 슬러그 목록 +- [ ] 컨슈머가 오버라이드하는 git config 키(`gitformat.taskPrefix` · `branchExempt` · `aiModel`) +- [ ] 환경변수 입력 — Claude Code가 주입하는 신호 +- [ ] 훅이 남기는 `$GIT_DIR` 상태 파일 + +## 원천 + +- doc-2 · doc-3 · doc-4 커스터마이즈 가이드 +- hooks/gitformat.conf +- 최상위 3.04 §2 diff --git "a/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/05-\354\204\244\352\263\204-\352\262\260\354\240\225.md" "b/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/05-\354\204\244\352\263\204-\352\262\260\354\240\225.md" new file mode 100644 index 0000000..2093334 --- /dev/null +++ "b/design/3-\354\225\204\355\202\244\355\205\215\354\262\230-\354\204\244\352\263\204\354\204\234/05-\354\204\244\352\263\204-\352\262\260\354\240\225.md" @@ -0,0 +1,16 @@ +# 3.05 설계 결정 + +> 작성 전 + +구조를 정한 결정과 그 대체 관계. + +## 담을 내용 + +- [ ] ADR 목록 — backlog decision 중 지금 유효한 것을 ADR-n으로 옮긴다 +- [ ] 대체 관계 — decision-1→10, 3→18, 6→23, 9→16, 13→14, 19의 일부→25 · 27 · 28, 25 · 26의 이름→29 +- [ ] 결정된 구조 변경 — 검사 · 트레일러 삽입을 `prepare-commit-msg` 하나로 모은다(decision-18 · decision-19) + +## 원천 + +- backlog/decisions +- doc-8 decision 이력 지도 diff --git "a/design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/01-\353\247\210\354\235\274\354\212\244\355\206\244\352\263\274-\354\236\221\354\227\205-\353\266\204\355\225\264.md" "b/design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/01-\353\247\210\354\235\274\354\212\244\355\206\244\352\263\274-\354\236\221\354\227\205-\353\266\204\355\225\264.md" new file mode 100644 index 0000000..0faf723 --- /dev/null +++ "b/design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/01-\353\247\210\354\235\274\354\212\244\355\206\244\352\263\274-\354\236\221\354\227\205-\353\266\204\355\225\264.md" @@ -0,0 +1,15 @@ +# 4.01 마일스톤과 작업 분해 + +> 작성 전 + +어떤 순서로 무엇을 만드는가. + +## 담을 내용 + +- [ ] 마일스톤과 backlog 태스크 — 태스크마다 구현하는 요구사항 ID +- [ ] 작업 사이의 의존성 + +## 원천 + +- backlog 태스크 · draft +- doc-18 재설계 작업 순서와 의존성 diff --git "a/design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/02-\354\210\230\354\232\251-\352\270\260\354\244\200\352\263\274-\352\262\200\354\246\235.md" "b/design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/02-\354\210\230\354\232\251-\352\270\260\354\244\200\352\263\274-\352\262\200\354\246\235.md" new file mode 100644 index 0000000..2136c05 --- /dev/null +++ "b/design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/02-\354\210\230\354\232\251-\352\270\260\354\244\200\352\263\274-\352\262\200\354\246\235.md" @@ -0,0 +1,17 @@ +# 4.02 수용 기준과 검증 + +> 작성 전 + +요구사항마다 무엇으로 판정하는가. + +## 담을 내용 + +- [ ] 요구사항 ID ↔ 수용 기준 ↔ 테스트 파일(`tests/test_*.py`) +- [ ] 검증 명령 — `python3 -m unittest discover -s tests`, `ruff`, `shellcheck -s sh install.sh` +- [ ] 실측으로만 판정할 수 있는 항목(토큰 귀속 정확도) + +## 원천 + +- tests/ +- decision-21 +- .github/workflows diff --git "a/design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/03-\353\257\270\352\262\260-\354\202\254\355\225\255.md" "b/design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/03-\353\257\270\352\262\260-\354\202\254\355\225\255.md" new file mode 100644 index 0000000..e808466 --- /dev/null +++ "b/design/4-\352\265\254\355\230\204-\352\263\204\355\232\215\354\204\234/03-\353\257\270\352\262\260-\354\202\254\355\225\255.md" @@ -0,0 +1,19 @@ +# 4.03 미결 사항 + +> 작성 전 + +아직 정하지 않은 것 — `Q-n`. + +## 담을 내용 + +- [ ] 역할 세션별 토큰 귀속의 정확도(최상위 Q-18) +- [ ] 컨슈머 저장소 자신의 훅과 함께 쓰는 방법(`core.hooksPath` 점유) +- [ ] 설정 키 · 파일명의 옛 이름(`gitformat.*`) 정리 +- [ ] CI 트레일러 검사를 컨슈머에게 배포할지(decision-25) +- [ ] 비 Claude Code 도구의 usage 실측 채널(decision-17) + +## 원천 + +- backlog draft +- decision-17 · decision-25 +- 최상위 4.03 diff --git "a/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/01-\354\202\260\354\266\234\353\254\274.md" "b/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/01-\354\202\260\354\266\234\353\254\274.md" new file mode 100644 index 0000000..a4e1d9e --- /dev/null +++ "b/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/01-\354\202\260\354\266\234\353\254\274.md" @@ -0,0 +1,16 @@ +# 5.01 산출물 + +> 작성 전 + +구현으로 만든 것 — 코드 · 문서 · 배포물과 그 위치. + +## 담을 내용 + +- [ ] 훅 · 설정 · 설치 스크립트 +- [ ] 문서 산출물 +- [ ] 커밋 · PR 링크 + +## 원천 + +- backlog 태스크 final summary +- git log · PR diff --git "a/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/02-\354\210\230\354\232\251-\352\270\260\354\244\200-\355\214\220\354\240\225.md" "b/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/02-\354\210\230\354\232\251-\352\270\260\354\244\200-\355\214\220\354\240\225.md" new file mode 100644 index 0000000..532da33 --- /dev/null +++ "b/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/02-\354\210\230\354\232\251-\352\270\260\354\244\200-\355\214\220\354\240\225.md" @@ -0,0 +1,15 @@ +# 5.02 수용 기준 판정 + +> 작성 전 + +수용 기준마다 통과 · 실패와 그 증거. + +## 담을 내용 + +- [ ] 수용 기준별 판정 +- [ ] 증거 — 테스트 로그 · 실측 커밋의 트레일러 + +## 원천 + +- 4.02 수용 기준과 검증 +- 테스트 로그 diff --git "a/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/03-\352\263\204\355\232\215-\353\214\200\353\271\204-\355\216\270\354\260\250.md" "b/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/03-\352\263\204\355\232\215-\353\214\200\353\271\204-\355\216\270\354\260\250.md" new file mode 100644 index 0000000..9f6b7a7 --- /dev/null +++ "b/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/03-\352\263\204\355\232\215-\353\214\200\353\271\204-\355\216\270\354\260\250.md" @@ -0,0 +1,14 @@ +# 5.03 계획 대비 편차 + +> 작성 전 + +계획과 다르게 구현한 것과 그 이유. + +## 담을 내용 + +- [ ] 편차 항목과 연결된 설계 결정(3.05) + +## 원천 + +- 4.01 마일스톤과 작업 분해 +- backlog 태스크 · decision diff --git "a/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/04-\355\233\204\354\206\215-\352\263\274\354\240\234.md" "b/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/04-\355\233\204\354\206\215-\352\263\274\354\240\234.md" new file mode 100644 index 0000000..fcf59cd --- /dev/null +++ "b/design/5-\352\265\254\355\230\204-\352\262\260\352\263\274-\353\263\264\352\263\240\354\204\234/04-\355\233\204\354\206\215-\352\263\274\354\240\234.md" @@ -0,0 +1,16 @@ +# 5.04 후속 과제 + +> 작성 전 + +남은 일과 다음 반복으로 넘기는 것. + +## 담을 내용 + +- [ ] 실패하거나 보류한 수용 기준(5.02) +- [ ] 남은 미결 사항(4.03) +- [ ] 다음 반복의 backlog 태스크 + +## 원천 + +- 5.02 수용 기준 판정 +- backlog 태스크 · draft diff --git a/design/README.md b/design/README.md new file mode 100644 index 0000000..34e7bbf --- /dev/null +++ b/design/README.md @@ -0,0 +1,78 @@ +# coding-agent-git-commit-tool 설계 문서 + +코딩 에이전트의 git 커밋을 검사하고, 누가 · 어떤 모델로 · 무슨 태스크로 · 얼마를 들여 만들었는지 커밋 +트레일러로 남기는 컴포넌트의 설계 문서. Sigkill Foundry의 계측 컴포넌트이고(최상위 3.03 §3), 스펙 주도 +개발(SDD)을 따른다. 규범 용어 · 요구사항 ID · 추적 규칙은 [0. 문서 정보](./00-문서-정보.md)에 있다. + +**편집 원본은 Claude 앱의 문서들이다** (목차 문서: 링크 예정). 이 디렉토리의 `**/*.md`는 Claude가 동기화하는 +사본이며, 문서와 어긋나면 문서가 맞다. + +## 문서 흐름 + +| 문서 | 답하는 질문 | +| --- | --- | +| 1. 프로젝트 제안서 | 왜 만들고, 무엇을 어디까지 하는가 | +| 2. 요구사항 명세서 | 무엇을 만족해야 하는가 | +| 3. 아키텍처 설계서 | 어떻게 구성되고 동작하는가 | +| 4. 구현 계획서 | 어떤 순서로 만들고, 무엇으로 판정하는가 | +| 5. 구현 결과 보고서 | 무엇을 만들었고, 판정은 어떻게 나왔는가 | + +## 목차 + +### 공통 + +| 장 | 제목 | 상태 | Claude 앱 문서 | +| --- | --- | --- | --- | +| 0 | [문서 정보](./00-문서-정보.md) | 초안 | (링크 예정) | + +### 1. 프로젝트 제안서 + +| 장 | 제목 | 상태 | Claude 앱 문서 | +| --- | --- | --- | --- | +| 1.01 | [배경과 문제](./1-제안서/01-배경과-문제.md) | 작성 전 | (링크 예정) | +| 1.02 | [원칙](./1-제안서/02-원칙.md) | 작성 전 | (링크 예정) | +| 1.03 | [목표와 범위](./1-제안서/03-목표와-범위.md) | 작성 전 | (링크 예정) | +| 1.04 | [기대 효과와 리스크](./1-제안서/04-기대-효과와-리스크.md) | 작성 전 | (링크 예정) | + +### 2. 요구사항 명세서 + +| 장 | 제목 | 상태 | Claude 앱 문서 | +| --- | --- | --- | --- | +| 2.01 | [이해관계자와 운영 환경](./2-요구사항-명세서/01-이해관계자와-운영-환경.md) | 작성 전 | (링크 예정) | +| 2.02 | [도메인 모델](./2-요구사항-명세서/02-도메인-모델.md) | 작성 전 | (링크 예정) | +| 2.03 | [기능 요구사항](./2-요구사항-명세서/03-기능-요구사항.md) | 작성 전 | (링크 예정) | +| 2.04 | [품질 요구사항](./2-요구사항-명세서/04-품질-요구사항.md) | 작성 전 | (링크 예정) | + +### 3. 아키텍처 설계서 + +| 장 | 제목 | 상태 | Claude 앱 문서 | +| --- | --- | --- | --- | +| 3.01 | [시스템 구성](./3-아키텍처-설계서/01-시스템-구성.md) | 작성 전 | (링크 예정) | +| 3.02 | [동작 명세](./3-아키텍처-설계서/02-동작-명세.md) | 작성 전 | (링크 예정) | +| 3.03 | [컴포넌트 명세](./3-아키텍처-설계서/03-컴포넌트-명세.md) | 작성 전 | (링크 예정) | +| 3.04 | [인터페이스 계약](./3-아키텍처-설계서/04-인터페이스-계약.md) | 작성 전 | (링크 예정) | +| 3.05 | [설계 결정](./3-아키텍처-설계서/05-설계-결정.md) | 작성 전 | (링크 예정) | + +### 4. 구현 계획서 + +| 장 | 제목 | 상태 | Claude 앱 문서 | +| --- | --- | --- | --- | +| 4.01 | [마일스톤과 작업 분해](./4-구현-계획서/01-마일스톤과-작업-분해.md) | 작성 전 | (링크 예정) | +| 4.02 | [수용 기준과 검증](./4-구현-계획서/02-수용-기준과-검증.md) | 작성 전 | (링크 예정) | +| 4.03 | [미결 사항](./4-구현-계획서/03-미결-사항.md) | 작성 전 | (링크 예정) | + +### 5. 구현 결과 보고서 + +| 장 | 제목 | 상태 | Claude 앱 문서 | +| --- | --- | --- | --- | +| 5.01 | [산출물](./5-구현-결과-보고서/01-산출물.md) | 작성 전 | (링크 예정) | +| 5.02 | [수용 기준 판정](./5-구현-결과-보고서/02-수용-기준-판정.md) | 작성 전 | (링크 예정) | +| 5.03 | [계획 대비 편차](./5-구현-결과-보고서/03-계획-대비-편차.md) | 작성 전 | (링크 예정) | +| 5.04 | [후속 과제](./5-구현-결과-보고서/04-후속-과제.md) | 작성 전 | (링크 예정) | + +### 부록 + +| 장 | 제목 | 상태 | Claude 앱 문서 | +| --- | --- | --- | --- | +| 부록 | [참고 문헌](./부록-참고-문헌.md) | 작성 전 | (링크 예정) | +| 부록 | [용어집](./부록-용어집.md) | 작성 전 | (링크 예정) | diff --git a/design/build-diagrams.py b/design/build-diagrams.py new file mode 100755 index 0000000..a9d6a07 --- /dev/null +++ b/design/build-diagrams.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python3 +"""design/diagrams/*.dot (·.mmd) → design/diagrams/<이름>.svg 독립 SVG 렌더. + +표기 원칙 — DOT 우선: + 그래프 · 트리 · DAG · 플로우차트 · 파이프라인 · 클래스 다이어그램 · 경계 표현은 전부 + Graphviz DOT(.dot)으로 쓴다. DOT에 대응물이 없는 것(시퀀스 다이어그램 등)만 mermaid(.mmd)로 + 쓴다. 이유는 레이아웃 품질(특히 의존성 DAG)과 소스 분리다. + +원본과 생성물: + 원본은 design/diagrams/ 안의 .dot(그리고 시퀀스 하나는 .mmd)이다. 같은 디렉토리의 .svg는 + 이 스크립트가 만드는 생성물이므로 직접 고치지 않는다. 그림을 고치려면 .dot/.mmd를 고치고 + 이 스크립트를 다시 돌린다. + +색 — 라이트/다크 대응: + 색은 .dot(그리고 mermaid-theme.json)에 센티넬 hex(#f00001 …)로 적는다. 이 스크립트가 + 센티넬을 CSS 변수(var(--diagram-*))로 치환하고, 그 변수를 SVG 안의 ") + + +def tokenize(svg: str) -> str: + for table in (TOKENS, MERMAID_TOKENS): + for sentinel, var in table.items(): + svg = svg.replace(sentinel, var).replace(sentinel.upper(), var) + return svg + + +def finish(svg: str, name: str, mermaid: bool) -> str: + """정리 · 토큰화 · 테마 + +commit_flow + +start + +git commit -m / -F +(--no-verify 포함) + + +pcm + +prepare-commit-msg +재생 · 병합 면제 → 에디터 경로 거부 +→ 검증 마커 기록 + + +start->pcm + + + + +replay + +재생 · 병합 커밋 +(MERGE_HEAD · CHERRY_PICK_HEAD · +REBASE_HEAD · REVERT_HEAD) +아무것도 하지 않음 + + +pcm->replay + + +재생 · 병합 + + +bypass + +--no-verify? + + +pcm->bypass + + +통과 + + +reject + +커밋 거부 (exit 1) +검증 마커 삭제 + + +pcm->reject + + +에디터 경로 + + +cm + +commit-msg +제목 형식 · 길이 · 빈 줄 · Fixes 해시 +· 브랜치 Task-Id · AI-Model 게이트 + + +bypass->cm + + +아니오 + + +create + +커밋 객체 생성 (git) + + +bypass->create + + +예 — commit-msg 건너뜀 + + +cm->reject + + +위반 + + +cm->create + + +통과 + + +pc + +post-commit +마커 유무로 우회 판정 → 트레일러 계산 +(Task-Id · AI-* · Tokens-Used · Tool-Calls · +Hooks-Commit · Signed-off-by · Verify-Bypassed) + + +create->pc + + + + +amend + +git interpret-trailers +→ git commit --amend --no-verify +(_GITFORMAT_AMEND_GUARD=1) + + +pc->amend + + +붙일 트레일러 있음 + + +done + +최종 커밋 +(트레일러 포함) + + +pc->done + + +없음 + + +amend->pcm + + +재진입 — 가드로 즉시 종료 + + +amend->done + + + + + From 61a3d9712749aaa5ed404e0a3329cf8e8ef6a527 Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Sun, 11 Oct 2026 07:11:03 +0900 Subject: [PATCH 08/11] =?UTF-8?q?[docs][design]=20=EC=9A=94=EA=B5=AC?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EB=B2=88=ED=98=B8=EB=A5=BC=20=EC=B5=9C?= =?UTF-8?q?=EC=83=81=EC=9C=84=20=EC=B2=B4=EA=B3=84=EB=A1=9C=20=ED=86=B5?= =?UTF-8?q?=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Task-Id: GF-145 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude Tokens-Used: unavailable (transcript-not-found) Tool-Calls: unavailable (transcript-not-found) Hooks-Commit: e1956d6 Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- ...3\254\270\354\204\234-\354\240\225\353\263\264.md" | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git "a/design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" "b/design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" index f8064c1..2fe4750 100644 --- "a/design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" +++ "b/design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" @@ -32,14 +32,9 @@ - 목표는 `G-<번호>`로 식별하고 1.03 목표와 범위에 둔다. 최상위 목표는 "최상위 G-n"으로 적는다. - 원칙은 `P<번호>`로 식별하고 1.02 원칙에 둔다. 최상위 원칙은 "최상위 P<번호>"로 적는다. - 기능 요구사항의 영역 접두어는 `TRL`이다. 최상위 2.03이 이 컴포넌트에 쓰는 접두어와 같다. 품질 요구사항은 `NFR`이다. -- 요구사항 ID는 `<영역>-<세 자리 번호>`이고 번호는 재사용하지 않는다. 번호 공간은 최상위와 나눠 쓴다. - -| 번호 범위 | 뜻 | 둘 곳 | -| --- | --- | --- | -| `TRL-001` ~ `TRL-099` | 최상위 2.03이 정한 요구사항. 같은 ID · 같은 뜻으로 받고, 이 저장소에서 문장을 바꾸지 않는다 | 2.03 | -| `TRL-101` ~ | 이 저장소에만 있는 기능 요구사항. 자신이 세분하는 최상위 `TRL-nnn`(또는 최상위 G-n)을 반드시 적는다 | 2.03 | -| `NFR-001` ~ `NFR-099` | 최상위 2.04가 정한 품질 요구사항 중 이 컴포넌트가 구현하는 것(NFR-004 · NFR-005) | 2.04 | -| `NFR-101` ~ | 이 저장소에만 있는 품질 요구사항. 상위 ID를 반드시 적는다 | 2.04 | +- 요구사항 ID는 `<영역>-<세 자리 번호>`이고 번호는 재사용하지 않는다. 번호 공간은 최상위 문서 하나다. + - 최상위 2.03의 `TRL-nnn`과 2.04의 `NFR-nnn`(이 컴포넌트는 NFR-004 · NFR-005)을 같은 ID · 같은 뜻으로 이어받는다. + - 하위 번호나 이 저장소 전용 번호 대역(`TRL-101` 같은)은 두지 않는다. 최상위에 없는 요구사항이 필요하면 최상위 2.03 · 2.04에 먼저 올려 번호를 받는다. - 설계 결정은 `ADR-<번호>`로 3.05에, 미결 사항은 `Q-<번호>`로 4.03에 둔다. 둘 다 이 저장소 안의 번호이고, 최상위 것은 "최상위 ADR-n" · "최상위 Q-n"으로 적는다. From e7e393b4e48ca4dfaaebff25850df0338a992202 Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Sun, 11 Oct 2026 07:11:12 +0900 Subject: [PATCH 09/11] =?UTF-8?q?[docs][design]=202.03=20=EA=B3=A8?= =?UTF-8?q?=EA=B2=A9=EC=9D=98=20=EB=A1=9C=EC=BB=AC=20=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EB=8C=80=EC=97=AD=20=EC=96=B8=EA=B8=89=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Task-Id: GF-145 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude Tokens-Used: unavailable (transcript-not-found) Tool-Calls: unavailable (transcript-not-found) Hooks-Commit: 54a583f Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- ...212\245-\354\232\224\352\265\254\354\202\254\355\225\255.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/03-\352\270\260\353\212\245-\354\232\224\352\265\254\354\202\254\355\225\255.md" "b/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/03-\352\270\260\353\212\245-\354\232\224\352\265\254\354\202\254\355\225\255.md" index 3824f68..d4cf06e 100644 --- "a/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/03-\352\270\260\353\212\245-\354\232\224\352\265\254\354\202\254\355\225\255.md" +++ "b/design/2-\354\232\224\352\265\254\354\202\254\355\225\255-\353\252\205\354\204\270\354\204\234/03-\352\270\260\353\212\245-\354\232\224\352\265\254\354\202\254\355\225\255.md" @@ -7,7 +7,7 @@ ## 담을 내용 - [ ] 최상위 TRL-001 ~ TRL-009를 같은 ID로 받아 이 저장소의 말로 세분한 것 -- [ ] 이 저장소에만 있는 요구사항(TRL-101~) — 각자 상위 TRL ID를 적는다 +- [ ] 최상위에 없어 새로 필요한 요구사항 — 최상위 2.03에 먼저 올려 번호를 받는다 - [ ] 요구사항마다 목표 · 수용 기준(4.02) 연결 ## 원천 From a2acc52c949d352c6a4b60f01b5a7ed158289f6d Mon Sep 17 00:00:00 2001 From: coralstay <231006716+coralstay@users.noreply.github.com> Date: Sun, 11 Oct 2026 07:36:30 +0900 Subject: [PATCH 10/11] =?UTF-8?q?[docs][design]=20=EC=84=A4=EA=B3=84=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EC=9B=90=EB=B3=B8=EC=9D=84=20design/=20?= =?UTF-8?q?=ED=95=98=EB=82=98=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Claude 앱 편집 원본 규칙과 링크 칸을 없애고 목차 상태를 실제 파일 기준으로 고친다. Co-Authored-By: Claude Opus 5.5 Task-Id: GF-145 AI-Tool: claude-code AI-Tool-Version: 2.1.285 Co-Authored-By: Claude Tokens-Used: unavailable (transcript-not-found) Tool-Calls: unavailable (transcript-not-found) Hooks-Commit: 2022c45 Signed-off-by: coralstay <231006716+coralstay@users.noreply.github.com> --- ...4-\354\204\270\354\232\260\352\270\260.md" | 4 +- ...0\354\204\234-\354\240\225\353\263\264.md" | 2 +- design/README.md | 77 +++++++++---------- design/build-diagrams.py | 2 +- 4 files changed, 42 insertions(+), 43 deletions(-) diff --git "a/backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" "b/backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" index 00e9bc0..3e0ada2 100644 --- "a/backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" +++ "b/backlog/tasks/gf-145 - Sigkill-Foundry-\355\230\225\354\213\235-\354\204\244\352\263\204-\353\254\270\354\204\234-\354\204\270\354\232\260\352\270\260.md" @@ -4,7 +4,7 @@ title: Sigkill Foundry 형식 설계 문서 세우기 status: In Progress assignee: [] created_date: '2026-10-05 11:52' -updated_date: '2026-10-05 12:10' +updated_date: '2026-10-10 22:36' labels: - docs dependencies: [] @@ -25,5 +25,5 @@ dependencies: [] - [ ] #1 design/ 구조·장 형식이 최상위 Sigkill Foundry와 같다 - [ ] #2 1.01 · 1.02 · 3.01을 기존 문서 근거로 채우고 나머지는 골격으로 둔다 -- [ ] #3 Claude 앱에 장별 문서와 목차 문서를 만들고 design/README.md에 링크한다 +- [ ] #3 설계 문서의 원본은 design/ 하나다 — Claude 앱 편집 원본 문구 · 링크 칸을 두지 않고, 목차 상태는 실제 파일 기준 diff --git "a/design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" "b/design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" index 2fe4750..362ed5f 100644 --- "a/design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" +++ "b/design/00-\353\254\270\354\204\234-\354\240\225\353\263\264.md" @@ -65,7 +65,7 @@ ## 편집 규칙 -- 설계 내용의 원본은 이 설계 문서 하나다. 편집 원본은 Claude 앱의 문서이고, 저장소의 `design/**/*.md`는 Claude가 동기화하는 사본이다. 둘이 어긋나면 Claude 앱 문서가 맞다. 새 근거가 생기면 Claude 앱 문서를 먼저 고치고 사본을 맞춘다. +- 설계 내용의 원본은 저장소의 `design/**/*.md` 하나다. 다른 곳(Claude 앱 문서 · 위키 등)에 사본이나 편집 원본을 두지 않는다. 고칠 때는 이 파일을 직접 고치고(Claude Code · GitHub 편집기) 커밋 · PR로 남긴다. 최상위 Sigkill Foundry도 같은 규칙이다. - `backlog/docs` · `backlog/decisions` · README는 이 설계 문서의 원천이다. 설계 문서가 원천을 대신하지 않고, 원천을 지우지 않는다. - 한 장 = 한 문서. 같은 내용을 두 장에서 고치고 있다면 한쪽을 장 참조 한 줄로 접는다. - 외부 문헌은 저장소에 옮겨 담지 않는다(decision-14). 인용과 검증 상태는 부록 참고 문헌에서만 관리한다. diff --git a/design/README.md b/design/README.md index e892be8..55f62b1 100644 --- a/design/README.md +++ b/design/README.md @@ -4,8 +4,7 @@ 트레일러로 남기는 컴포넌트의 설계 문서. Sigkill Foundry의 계측 컴포넌트이고(최상위 3.03 §3), 스펙 주도 개발(SDD)을 따른다. 규범 용어 · 요구사항 ID · 추적 규칙은 [0. 문서 정보](./00-문서-정보.md)에 있다. -**편집 원본은 Claude 앱의 문서들이다** (목차 문서: 링크 예정). 이 디렉토리의 `**/*.md`는 Claude가 동기화하는 -사본이며, 문서와 어긋나면 문서가 맞다. +**원본은 이 디렉토리의 `**/*.md` 하나다.** 고칠 때는 이 파일들을 직접 고치고(Claude Code · GitHub 편집기) 커밋 · PR로 남긴다. ## 문서 흐름 @@ -21,58 +20,58 @@ ### 공통 -| 장 | 제목 | 상태 | Claude 앱 문서 | -| --- | --- | --- | --- | -| 0 | [문서 정보](./00-문서-정보.md) | 초안 | (링크 예정) | +| 장 | 제목 | 상태 | +| --- | --- | --- | +| 0 | [문서 정보](./00-문서-정보.md) | 초안 | ### 1. 프로젝트 제안서 -| 장 | 제목 | 상태 | Claude 앱 문서 | -| --- | --- | --- | --- | -| 1.01 | [배경과 문제](./1-제안서/01-배경과-문제.md) | 초안 | (링크 예정) | -| 1.02 | [원칙](./1-제안서/02-원칙.md) | 초안 | (링크 예정) | -| 1.03 | [목표와 범위](./1-제안서/03-목표와-범위.md) | 작성 전 | (링크 예정) | -| 1.04 | [기대 효과와 리스크](./1-제안서/04-기대-효과와-리스크.md) | 작성 전 | (링크 예정) | +| 장 | 제목 | 상태 | +| --- | --- | --- | +| 1.01 | [배경과 문제](./1-제안서/01-배경과-문제.md) | 초안 | +| 1.02 | [원칙](./1-제안서/02-원칙.md) | 초안 | +| 1.03 | [목표와 범위](./1-제안서/03-목표와-범위.md) | 작성 전 | +| 1.04 | [기대 효과와 리스크](./1-제안서/04-기대-효과와-리스크.md) | 작성 전 | ### 2. 요구사항 명세서 -| 장 | 제목 | 상태 | Claude 앱 문서 | -| --- | --- | --- | --- | -| 2.01 | [이해관계자와 운영 환경](./2-요구사항-명세서/01-이해관계자와-운영-환경.md) | 작성 전 | (링크 예정) | -| 2.02 | [도메인 모델](./2-요구사항-명세서/02-도메인-모델.md) | 작성 전 | (링크 예정) | -| 2.03 | [기능 요구사항](./2-요구사항-명세서/03-기능-요구사항.md) | 작성 전 | (링크 예정) | -| 2.04 | [품질 요구사항](./2-요구사항-명세서/04-품질-요구사항.md) | 작성 전 | (링크 예정) | +| 장 | 제목 | 상태 | +| --- | --- | --- | +| 2.01 | [이해관계자와 운영 환경](./2-요구사항-명세서/01-이해관계자와-운영-환경.md) | 작성 전 | +| 2.02 | [도메인 모델](./2-요구사항-명세서/02-도메인-모델.md) | 작성 전 | +| 2.03 | [기능 요구사항](./2-요구사항-명세서/03-기능-요구사항.md) | 작성 전 | +| 2.04 | [품질 요구사항](./2-요구사항-명세서/04-품질-요구사항.md) | 작성 전 | ### 3. 아키텍처 설계서 -| 장 | 제목 | 상태 | Claude 앱 문서 | -| --- | --- | --- | --- | -| 3.01 | [시스템 구성](./3-아키텍처-설계서/01-시스템-구성.md) | 초안 | (링크 예정) | -| 3.02 | [동작 명세](./3-아키텍처-설계서/02-동작-명세.md) | 작성 전 | (링크 예정) | -| 3.03 | [컴포넌트 명세](./3-아키텍처-설계서/03-컴포넌트-명세.md) | 작성 전 | (링크 예정) | -| 3.04 | [인터페이스 계약](./3-아키텍처-설계서/04-인터페이스-계약.md) | 작성 전 | (링크 예정) | -| 3.05 | [설계 결정](./3-아키텍처-설계서/05-설계-결정.md) | 작성 전 | (링크 예정) | +| 장 | 제목 | 상태 | +| --- | --- | --- | +| 3.01 | [시스템 구성](./3-아키텍처-설계서/01-시스템-구성.md) | 초안 | +| 3.02 | [동작 명세](./3-아키텍처-설계서/02-동작-명세.md) | 작성 전 | +| 3.03 | [컴포넌트 명세](./3-아키텍처-설계서/03-컴포넌트-명세.md) | 작성 전 | +| 3.04 | [인터페이스 계약](./3-아키텍처-설계서/04-인터페이스-계약.md) | 작성 전 | +| 3.05 | [설계 결정](./3-아키텍처-설계서/05-설계-결정.md) | 작성 전 | ### 4. 구현 계획서 -| 장 | 제목 | 상태 | Claude 앱 문서 | -| --- | --- | --- | --- | -| 4.01 | [마일스톤과 작업 분해](./4-구현-계획서/01-마일스톤과-작업-분해.md) | 작성 전 | (링크 예정) | -| 4.02 | [수용 기준과 검증](./4-구현-계획서/02-수용-기준과-검증.md) | 작성 전 | (링크 예정) | -| 4.03 | [미결 사항](./4-구현-계획서/03-미결-사항.md) | 작성 전 | (링크 예정) | +| 장 | 제목 | 상태 | +| --- | --- | --- | +| 4.01 | [마일스톤과 작업 분해](./4-구현-계획서/01-마일스톤과-작업-분해.md) | 작성 전 | +| 4.02 | [수용 기준과 검증](./4-구현-계획서/02-수용-기준과-검증.md) | 작성 전 | +| 4.03 | [미결 사항](./4-구현-계획서/03-미결-사항.md) | 작성 전 | ### 5. 구현 결과 보고서 -| 장 | 제목 | 상태 | Claude 앱 문서 | -| --- | --- | --- | --- | -| 5.01 | [산출물](./5-구현-결과-보고서/01-산출물.md) | 작성 전 | (링크 예정) | -| 5.02 | [수용 기준 판정](./5-구현-결과-보고서/02-수용-기준-판정.md) | 작성 전 | (링크 예정) | -| 5.03 | [계획 대비 편차](./5-구현-결과-보고서/03-계획-대비-편차.md) | 작성 전 | (링크 예정) | -| 5.04 | [후속 과제](./5-구현-결과-보고서/04-후속-과제.md) | 작성 전 | (링크 예정) | +| 장 | 제목 | 상태 | +| --- | --- | --- | +| 5.01 | [산출물](./5-구현-결과-보고서/01-산출물.md) | 작성 전 | +| 5.02 | [수용 기준 판정](./5-구현-결과-보고서/02-수용-기준-판정.md) | 작성 전 | +| 5.03 | [계획 대비 편차](./5-구현-결과-보고서/03-계획-대비-편차.md) | 작성 전 | +| 5.04 | [후속 과제](./5-구현-결과-보고서/04-후속-과제.md) | 작성 전 | ### 부록 -| 장 | 제목 | 상태 | Claude 앱 문서 | -| --- | --- | --- | --- | -| 부록 | [참고 문헌](./부록-참고-문헌.md) | 작성 전 | (링크 예정) | -| 부록 | [용어집](./부록-용어집.md) | 작성 전 | (링크 예정) | +| 장 | 제목 | 상태 | +| --- | --- | --- | +| 부록 | [참고 문헌](./부록-참고-문헌.md) | 작성 전 | +| 부록 | [용어집](./부록-용어집.md) | 작성 전 | diff --git a/design/build-diagrams.py b/design/build-diagrams.py index a9d6a07..6faa509 100755 --- a/design/build-diagrams.py +++ b/design/build-diagrams.py @@ -15,7 +15,7 @@ 색은 .dot(그리고 mermaid-theme.json)에 센티넬 hex(#f00001 …)로 적는다. 이 스크립트가 센티넬을 CSS 변수(var(--diagram-*))로 치환하고, 그 변수를 SVG 안의