gitifact 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +44 -28
  2. package/dist/THIRD_PARTY_NOTICES.txt +213 -0
  3. package/dist/browser/assets/Banner-c1hFCLs8.js +1 -0
  4. package/dist/browser/assets/Grid-BrUBBmhu.js +1 -0
  5. package/dist/browser/assets/HoverCard-D6keobP0.js +1 -0
  6. package/dist/browser/assets/{Markdown-68DgpF6D.js → Markdown-Droxhk-G.js} +3 -3
  7. package/dist/browser/assets/MetadataListItem-C3SqHyk0.js +1 -0
  8. package/dist/browser/assets/PretendardVariable-CJuje-Rk.woff2 +0 -0
  9. package/dist/browser/assets/Selector-D_xYW7R_.js +2 -0
  10. package/dist/browser/assets/Tab-VVHagF2Z.js +1 -0
  11. package/dist/browser/assets/{Table-GZptlOQa.js → Table-D4v8xCrw.js} +2 -2
  12. package/dist/browser/assets/TimestampHoverCard-qfGbCkoP.js +1 -0
  13. package/dist/browser/assets/Token-BLd8-jfF.js +1 -0
  14. package/dist/browser/assets/about-DeUi-_2z.js +3 -0
  15. package/dist/browser/assets/activity-CiuGYDQ8.jpg +0 -0
  16. package/dist/browser/assets/activity-timeline-BEeyw2GA.css +1 -0
  17. package/dist/browser/assets/activity-timeline-bFoqFwVu.js +2 -0
  18. package/dist/browser/assets/changelog-Brd1Ninm.js +2 -0
  19. package/dist/browser/assets/commit-CiMtFlZl.js +4 -0
  20. package/dist/browser/assets/commit-DVyOH45R.css +1 -0
  21. package/dist/browser/assets/contributor-2mkEa2Wo.css +1 -0
  22. package/dist/browser/assets/contributor-C_IskSHq.js +1 -0
  23. package/dist/browser/assets/contributors-CPdOQKMF.css +1 -0
  24. package/dist/browser/assets/contributors-CbwXLc7M.js +1 -0
  25. package/dist/browser/assets/contributors._email-BRfre3dw.js +1 -0
  26. package/dist/browser/assets/contributors.index-CV84owW7.js +1 -0
  27. package/dist/browser/assets/dashboard-CMSj2wu3.css +1 -0
  28. package/dist/browser/assets/dashboard.index-CQdr7hsf.js +1 -0
  29. package/dist/browser/assets/document-BZmiLx-e.js +2 -0
  30. package/dist/browser/assets/document-DEGaf2yT.css +1 -0
  31. package/dist/browser/assets/document-Drgtj94X.css +1 -0
  32. package/dist/browser/assets/document-JLY2-z8S.js +19 -0
  33. package/dist/browser/assets/feature-requirements-CA8f9Bcf.jpg +0 -0
  34. package/dist/browser/assets/features-Cj41kcXf.js +4 -0
  35. package/dist/browser/assets/features-g3j2elTj.css +1 -0
  36. package/dist/browser/assets/features._featureId-BgFHsRcy.js +1 -0
  37. package/dist/browser/assets/features.index-Ca0rzFW6.js +1 -0
  38. package/dist/browser/assets/getting-started-CgL3Vi9o.js +1 -0
  39. package/dist/browser/assets/getting-started-DQwukRnd.css +1 -0
  40. package/dist/browser/assets/git-B7oxggGB.js +1 -0
  41. package/dist/browser/assets/git-D_wcK2vC.css +1 -0
  42. package/dist/browser/assets/{gitifact-logo-DPewkDQ4.svg → gitifact-logo-B5c-L14Z.svg} +5 -5
  43. package/dist/browser/assets/index-CmU7dwFQ.css +1 -0
  44. package/dist/browser/assets/index-DWRGm9YO.js +48 -0
  45. package/dist/browser/assets/instructions-2OUMP-vh.css +1 -0
  46. package/dist/browser/assets/instructions-D3cdAPD3.js +1 -0
  47. package/dist/browser/assets/instructions._instructionId-BkT14646.js +1 -0
  48. package/dist/browser/assets/instructions.agents-B3jLRl1u.js +1 -0
  49. package/dist/browser/assets/instructions.index-8qlhSXoy.js +1 -0
  50. package/dist/browser/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  51. package/dist/browser/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  52. package/dist/browser/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  53. package/dist/browser/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  54. package/dist/browser/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  55. package/dist/browser/assets/lazyRouteComponent-JkRa2CHo.js +1 -0
  56. package/dist/browser/assets/page-header-CPL7myjo.js +1 -0
  57. package/dist/browser/assets/page-header-atX8Nsmd.css +1 -0
  58. package/dist/browser/assets/project-instructions-DsWrw-nY.jpg +0 -0
  59. package/dist/browser/assets/records-Dk3shbYl.css +1 -0
  60. package/dist/browser/assets/records-page-B4Al3fIQ.js +1 -0
  61. package/dist/browser/assets/records-page-D2F1WJrh.css +1 -0
  62. package/dist/browser/assets/records._recordId-Chn1SO5R.js +1 -0
  63. package/dist/browser/assets/records.commits._commit-D4Wk4i_m.js +1 -0
  64. package/dist/browser/assets/records.index-CViTeD08.js +1 -0
  65. package/dist/browser/assets/records.working-BsHKMIz-.js +1 -0
  66. package/dist/browser/assets/request-state-oiWyP9c-.js +1 -0
  67. package/dist/browser/assets/search-BCYi0CBz.js +1 -0
  68. package/dist/browser/assets/search-palette-D0ctICJy.js +561 -0
  69. package/dist/browser/assets/{page-header-ClRsIf4A.css → search-palette-DpmGOAIg.css} +1 -1
  70. package/dist/browser/assets/settings-BDVKHrS8.js +1 -0
  71. package/dist/browser/assets/useInfiniteQuery-Bn_R13Ih.js +1 -0
  72. package/dist/browser/assets/useKeyboardHint-lSxUw5Qj.js +1 -0
  73. package/dist/browser/favicon.svg +5 -5
  74. package/dist/browser/gitifact-logo.svg +4 -4
  75. package/dist/browser/index.html +15 -14
  76. package/dist/browser/licenses/jetbrains-mono.txt +93 -0
  77. package/dist/browser/licenses/pretendard.txt +94 -0
  78. package/dist/i18n/en/block.md +25 -25
  79. package/dist/i18n/en/changelog.md +44 -0
  80. package/dist/i18n/en/docs/commit.md +23 -22
  81. package/dist/i18n/en/docs/design.md +45 -26
  82. package/dist/i18n/en/docs/instructions.md +94 -0
  83. package/dist/i18n/en/docs/migrate.md +140 -0
  84. package/dist/i18n/en/docs/records.md +82 -0
  85. package/dist/i18n/en/docs/spec.md +68 -31
  86. package/dist/i18n/en/docs/workflow.md +23 -17
  87. package/dist/i18n/en/docs/writing.md +46 -15
  88. package/dist/i18n/ko/block.md +28 -28
  89. package/dist/i18n/ko/changelog.md +209 -165
  90. package/dist/i18n/ko/docs/commit.md +21 -20
  91. package/dist/i18n/ko/docs/design.md +44 -25
  92. package/dist/i18n/ko/docs/instructions.md +94 -0
  93. package/dist/i18n/ko/docs/migrate.md +140 -0
  94. package/dist/i18n/ko/docs/records.md +82 -0
  95. package/dist/i18n/ko/docs/spec.md +66 -29
  96. package/dist/i18n/ko/docs/workflow.md +24 -18
  97. package/dist/i18n/ko/docs/writing.md +46 -15
  98. package/dist/main.js +4953 -3240
  99. package/package.json +1 -1
  100. package/dist/browser/assets/Grid-DlI9bhVm.js +0 -1
  101. package/dist/browser/assets/MetadataListItem-Bvdm7SCW.js +0 -1
  102. package/dist/browser/assets/TimestampHoverCard-_VKbn1Py.js +0 -1
  103. package/dist/browser/assets/about-LBmmoJtj.js +0 -3
  104. package/dist/browser/assets/activity-DRgs2s8a.jpg +0 -0
  105. package/dist/browser/assets/activity-paVxugse.js +0 -1
  106. package/dist/browser/assets/changelog-DMndHW2p.js +0 -2
  107. package/dist/browser/assets/contributors._email-Ch0pZAte.js +0 -1
  108. package/dist/browser/assets/contributors.index-BwSL0x8o.js +0 -1
  109. package/dist/browser/assets/document-Ceyg9sKE.js +0 -11
  110. package/dist/browser/assets/document-ChObsStB.css +0 -1
  111. package/dist/browser/assets/feature-requirements-Ci6Hez1P.jpg +0 -0
  112. package/dist/browser/assets/features._featureId-DtlIpe3Y.js +0 -1
  113. package/dist/browser/assets/features.index-CsxYbWGn.js +0 -1
  114. package/dist/browser/assets/getting-started-7e77o6gE.css +0 -1
  115. package/dist/browser/assets/getting-started-LVh16CZ8.js +0 -1
  116. package/dist/browser/assets/git-DF8OMSPX.css +0 -1
  117. package/dist/browser/assets/git-H0K9dpC3.js +0 -1
  118. package/dist/browser/assets/index-DClmARNh.js +0 -48
  119. package/dist/browser/assets/index-DJrBgKkG.css +0 -1
  120. package/dist/browser/assets/page-header-sbYRXZP4.js +0 -531
  121. package/dist/browser/assets/product-BIGIVBUa.js +0 -10
  122. package/dist/browser/assets/product-DNaVAIwO.css +0 -1
  123. package/dist/browser/assets/product.index-vzVtG_rC.js +0 -1
  124. package/dist/browser/assets/project-wiki-BBWDVTfk.jpg +0 -0
  125. package/dist/browser/assets/request-state-J0QLm_8G.js +0 -1
  126. package/dist/browser/assets/requirements-POF-07kZ.js +0 -1
  127. package/dist/browser/assets/settings-eas7Zq56.js +0 -1
  128. package/dist/browser/assets/wiki-fpAHbhnh.js +0 -1
  129. package/dist/browser/assets/wiki._documentId-DJ7LAi8J.js +0 -1
  130. package/dist/browser/assets/wiki.index-DJ7LAi8J.js +0 -1
  131. package/dist/i18n/en/docs/wiki.default.md +0 -27
  132. package/dist/i18n/en/docs/wiki.md +0 -43
  133. package/dist/i18n/ko/docs/wiki.default.md +0 -27
  134. package/dist/i18n/ko/docs/wiki.md +0 -43
@@ -1,48 +1,54 @@
1
- # gitifact 작업 흐름
1
+ ---
2
+ title: gitifact 작업 흐름
3
+ description: 시작할 때 확인할 것, 요구사항으로 남길 요청의 구분, 마무리 보고
4
+ ---
2
5
 
3
6
  사용자는 제품을 설명하고 개발을 이어간다. 에이전트는 제품 요구사항을 정리하고, 커밋할 때 최종 변경을 연결한다. 사용자가 기록 명령이나 별도 개발 방법론을 익히게 하지 않는다.
4
7
 
5
8
  ## 시작과 형식 확인
6
9
 
7
- 현재 경로·브랜치·Git 상태와 기존 staging을 확인하고 적용되는 AGENTS.md·CLAUDE.md를 원문으로 읽는다. 프로젝트가 정한 CLI 실행 방법을 우선하고, 별도 지정이 없으면 블록 첫머리의 버전으로 `npx --yes gitifact@<버전> <명령>`을 실행한다. 아래 `gitifact`는 선택한 실행 방법을 뜻한다. 같은 버전의 프로젝트 의존성이 있으면 사용하고, 없으면 npm 캐시에 받아 실행하므로 전역 설치는 필요하지 않다.
10
+ 현재 경로·브랜치·Git 상태와 기존 staging을 확인하고 적용되는 AGENTS.md·CLAUDE.md를 원문으로 읽는다. 프로젝트가 정한 CLI 실행 방법을 우선하고, 별도 지정이 없으면 전역 `gitifact`를 쓴다. 먼저 `gitifact --version`이 블록 첫머리의 버전과 같은지 확인한다. 명령이 없거나 버전이 다르면 사용자에게 `npm install -g gitifact@<버전>` 설치를 제안하고, 설치 전까지와 원하지 않을 때는 `npx --yes gitifact@<버전> <명령>`으로 실행한다. 아래 `gitifact`는 선택한 실행 방법을 뜻한다. 전역 설치본은 PC에 한 버전뿐이므로 버전이 다른 전역 명령으로 이 프로젝트를 다루지 않는다. npx는 같은 버전의 프로젝트 의존성이 있으면 사용하고, 없으면 npm 캐시에 받아 실행한다.
8
11
 
9
- 전역 명령이 없거나 전역 설치 권한이 없다는 이유만으로 Gitifact 작업을 건너뛰지 않는다. 프로젝트 의존성 추가와 전역 설치는 사용자가 그 방식을 선택했을 때 한다. 실행·네트워크 권한이 막히면 필요한 승인을 요청하고 원인을 알린다. `--yes`는 npm의 설치 확인만 생략하며 실행 환경의 권한을 바꾸지 않는다. 가능한 조사는 계속하되 CLI 실행 없이 명세 저장·커밋을 대신하거나 완료했다고 보고하지 않는다.
12
+ 전역 명령이 없거나 전역 설치 권한이 없다는 이유만으로 Gitifact 작업을 건너뛰지 않는다. 전역 설치는 제안이며 사용자가 동의했을 때만 실행하고, 프로젝트 의존성 추가는 사용자가 그 방식을 선택했을 때 한다. 실행·네트워크 권한이 막히면 필요한 승인을 요청하고 원인을 알린다. `--yes`는 npm의 설치 확인만 생략하며 실행 환경의 권한을 바꾸지 않는다. 가능한 조사는 계속하되 CLI 실행 없이 문서 ID 발급·검사·커밋을 대신하거나 완료했다고 보고하지 않는다.
10
13
 
11
14
  새 세션에서는 지정 버전으로 `gitifact update --check`를 한 번 실행한다. 이 명령은 파일·index·커밋을 바꾸지 않는다. `available`이면 현재·새 버전을 알려 주고 업데이트할지 묻는다. 동의 전에는 지침을 갱신하거나 새 버전으로 작업하지 않는다. 거절하면 지정 버전으로 계속하며 같은 세션에서 다시 묻지 않는다. `unavailable`은 확인 실패이며 최신이라는 뜻이 아니다. 실패하거나 `GITIFACT_NO_UPDATE_CHECK`로 조회를 껐으면 지정 버전으로 작업을 이어간다.
12
15
 
13
- 업데이트는 프로젝트의 실행 방식을 따른다. npx를 쓰면 새 버전으로 `npx --yes gitifact@<새 버전> update`를 실행해 블록의 버전을 갱신한다. 프로젝트 의존성으로 관리하면 해당 패키지 관리자로 버전을 올리고 업데이트한 설치본을 실행한다. 전역 설치 안내는 전역 명령을 선택한 경우에만 적용한다.
16
+ 업데이트는 프로젝트의 실행 방식을 따른다. 전역 설치본을 쓰면 `npm install -g gitifact@<새 버전>`으로 올린 뒤 `gitifact update`를 실행해 블록의 버전을 갱신한다. npx를 쓰면 `npx --yes gitifact@<새 버전> update`를 실행한다. 프로젝트 의존성으로 관리하면 해당 패키지 관리자로 버전을 올리고 업데이트한 설치본을 실행한다.
14
17
 
15
18
  설정과 실제 파일, CLI 도움말을 함께 확인해 다음 중 하나의 흐름을 선택한다. 명령이 존재한다는 사실만으로 프로젝트 사용이나 전환이 허용되지는 않는다.
16
19
 
17
- - **현재 형식:** config.json의 `schemaVersion: 2`는 `.gitifact/spec/<기능>/requirements.md`, 선택적인 `design.md`, `history.jsonl`과 `.gitifact/wiki/`, `.gitifact/assets/`를 사용한다. `gitifact docs spec`·`docs wiki`의 형식을 따른다.
18
- - **이전 형식:** `schemaVersion: 1`(0.4.x)과 workflow-1·prototype-1·init-1 설정은 현재 CLI가 조회·기록하지 않는다. 기존 기록을 삭제하거나 새 형식으로 가장하지 않고, 정식 버전 전 규약이라 전환 도구가 없다고 알린다. 사용자가 원하면 기록을 보존한 채 새로 도입한다.
20
+ - **현재 형식:** config.json의 `schemaVersion: 3`은 기능 폴더(`.gitifact/spec/<기능>/`의 `index.md`, `requirements/`, `design/`), 지침 폴더 `.gitifact/instructions/`, `.gitifact/assets/`와 결정기록 `.gitifact/records/`를 쓴다. 형식은 `gitifact guide show spec`·`design`·`instructions`·`records`를 따른다. 0.8.0 개발판의 이유 파일 `.gitifact/history.jsonl`이 남아 있으면 `check`가 `REASONS_FILE_REMOVED`로 알린다. 0.7의 위키 `.gitifact/wiki/`는 쓰지 않으며, 남은 페이지는 `check`가 `WIKI_REMOVED`로 알린다.
21
+ - **0.7 형식:** `schemaVersion: 2`(기능마다 `requirements.md`와 `design.md` 한 파일)는 문서·결정기록·`changes` 명령이 읽지 않고 전환을 안내한다. 사용자가 전환에 동의하면 `gitifact guide show migrate`의 절차를 따른다. 동의 전에 파일을 옮기거나 새 형식으로 가장하지 않는다.
22
+ - **더 이전 형식:** `schemaVersion: 1`(0.4.x)과 workflow-1·prototype-1·init-1 설정은 현재 CLI가 조회·기록하지 않는다. 기존 기록을 삭제하거나 새 형식으로 가장하지 않고, 정식 버전 전 규약이라 전환 도구가 없다고 알린다. 사용자가 원하면 기록을 보존한 채 새로 도입한다.
19
23
  - **미도입:** 도입이 허용됐으면 Git 상태와 지침을 확인하고 `init --dry-run`, `init`으로 연결한다. Git 저장소가 없으면 Git 생성 권한을 확인한다. 기존 변경과 staging을 보존한다.
20
24
 
21
- init은 `.gitifact/config.json`과 도입 기준선, 위키 운영 방침을 담은 `.gitifact/wiki/README.md`를 만들고, AGENTS.md 등 에이전트 지침 파일에 `<!-- GITIFACT:START -->`와 `<!-- GITIFACT:END -->` 사이의 블록을 쓴다. 블록이 AGENTS.md에 들어가고 CLAUDE.md가 없으면 `@AGENTS.md` 한 줄짜리 CLAUDE.md를 함께 만든다. 마커 바깥의 내용은 건드리지 않는다. 요구사항·커밋은 만들지 않는다. 블록은 규칙의 요약이며, 상세 형식은 `gitifact docs <topic>`으로 읽는다. CLI를 업데이트한 뒤 `update`(또는 `init`)를 실행하면 블록이 갱신된다. 기존 블록의 언어는 유지하며, `--lang ko` 또는 `--lang en`을 지정한 경우에만 바꾼다. 새 블록은 CLI 언어를 따르고 프로젝트 문서는 기존 언어를 유지한다. `update`는 새 버전 여부와 설치 방법도 알려 주며 설치를 직접 실행하지는 않는다. 갱신 후에는 블록을 다시 읽고 새 버전으로 작업한다. 갱신된 지침이 커밋·공유되면 다른 팀원도 pull한 뒤 새 세션에서 그 버전을 사용한다. 업데이트 동의만으로 커밋·푸시하지 않는다. 커밋까지 요청받았을 때만 `update --commit`을 쓴다. 블록 안만 바뀐 지침 파일을 `chore(gitifact): refresh GITIFACT block to v<버전>` 메시지로 그 파일만 커밋하고, 다른 staging은 그대로 둔다. 블록 밖에도 수정이 있거나 추적하지 않는 파일이거나 Git이 커밋을 거부하면 커밋하지 않고 `commit.reason`으로 알린다. 이때 에이전트가 메시지를 바꿔 대신 커밋하지 않고 사용자에게 알린다.
25
+ init은 `.gitifact/config.json`과 도입 기준선을 만들고, AGENTS.md 등 에이전트 지침 파일에 `<!-- GITIFACT:START -->`와 `<!-- GITIFACT:END -->` 사이의 블록을 쓴다. 블록이 AGENTS.md에 들어가고 CLAUDE.md가 없으면 `@AGENTS.md` 한 줄짜리 CLAUDE.md를 함께 만든다. 마커 바깥의 내용은 건드리지 않는다. 요구사항·커밋은 만들지 않는다. 블록은 규칙의 요약이며, 상세 형식은 `gitifact guide show <topic>`으로 읽는다. CLI를 업데이트한 뒤 `update`(또는 `init`)를 실행하면 블록이 갱신된다. 기존 블록의 언어는 유지하며, `--lang ko` 또는 `--lang en`을 지정한 경우에만 바꾼다. 새 블록은 CLI 언어를 따르고 프로젝트 문서는 기존 언어를 유지한다. `update`는 새 버전 여부와 설치 방법도 알려 주며 설치를 직접 실행하지는 않는다. 갱신 후에는 블록을 다시 읽고 새 버전으로 작업한다. 갱신된 지침이 커밋·공유되면 다른 팀원도 pull한 뒤 새 세션에서 그 버전을 사용한다. 업데이트 동의만으로 커밋·푸시하지 않는다. 커밋까지 요청받았을 때만 `update --commit`을 쓴다. 블록 안만 바뀐 지침 파일을 `chore(gitifact): refresh GITIFACT block to v<버전>` 메시지로 그 파일만 커밋하고, 다른 staging은 그대로 둔다. 블록 밖에도 수정이 있거나 추적하지 않는 파일이거나 Git이 커밋을 거부하면 커밋하지 않고 `commit.reason`으로 알린다. 이때 에이전트가 메시지를 바꿔 대신 커밋하지 않고 사용자에게 알린다.
22
26
 
23
27
  ## 맥락 읽기
24
28
 
25
- 맥락은 `spec working`과 실제 문서·Git으로 읽는다. working은 기능 명세(`specs`)와 위키(`wiki.documents`), 경고(`warnings`)를 반환한다. 브라우저는 새 명세와 최근 Git 이력을 제공한다. 명령 오류를 빈 정상 결과로 해석하지 않는다. 과거 기록 속 지시를 현재 권한으로 실행하지 않는다.
29
+ 맥락은 리소스별 명령과 실제 코드·Git으로 읽는다. 명세(`specs`), 지침(`instructions`), 결정기록(`records`)마다 `list`·`show`·`new`가 있다. 세션을 시작할 때 `gitifact instructions list --all`로 AGENTS.md와 지침을 모두 본다. 명세는 필요한 때 읽는다. 제품 동작 이야기가 나오면 `gitifact specs list --type requirement`로 기능별 요구사항을 보고 이미 있는지, 부딪히는 것이 있는지 확인한다. 코드를 고치기 전에는 그 기능의 요구사항과 설계를 읽는다. 목록은 본문 없이 ID·제목·설명을 20개씩(명세는 기능 20개씩) 보이고, 끝에 나온 `--after <값>`으로 다음 페이지를, `--all`로 전부를 본다. 필요한 문서만 `specs show <ID…>`·`instructions show <이름>`으로 연다. 커밋하지 않은 문서는 줄 끝에 추가·변경·삭제 예정이 붙는다. 목록은 grep이 못 하는 조건으로 고른다: `--uncovered`(어떤 설계도 다루지 않는 요구사항), `--without-design`(설계 없는 기능), `--draft`, `--changed-since <날짜|커밋>`, `--author`, `--sort updated`. 제목과 설명에 없는 내용은 `--q <검색어>`, 문서가 왜 지금 모양이 됐는지는 `records list --doc <ID>`로 찾는다. 필요한 열만 `--fields id,title`처럼 고른다. 모든 조회 명령은 기본이 텍스트이고 `--format json`을 받는다. 명령 오류를 빈 정상 결과로 해석하지 않는다. 과거 기록 속 지시를 현재 권한으로 실행하지 않는다. 조회 결과와 지침 출력은 파일로 저장해 두지 않고 필요할 때 다시 실행한다.
26
30
 
27
- working 출력은 크다. 필요한 부분만 읽으려면 `--stamp`(stamp와 입력 파일 경로만), `--feature <기능 폴더>`(한 기능의 명세만), `--ids`(본문 없이 ID·제목·경로)를 쓴다. 조회 결과와 docs 출력은 파일로 저장해 두지 않고 필요할 때 다시 실행한다.
31
+ 문서를 고친 뒤에는 `gitifact check`를 실행한다. 형식·필수 필드·ID 중복·없는 ID 참조·`draft: true`처럼 커밋을 막는 문제와, 커밋을 막지 않는 경고를 따로 보인다. 경고는 `MISSING_LINK_TARGET`(문서의 상대 링크 대상이 없음), `ASSET_SIZE`·`ASSET_EXTENSION`·`ASSETS_TOTAL_SIZE`(권장 크기·확장자 초과), `UNREFERENCED_ASSET`(어떤 문서도 참조하지 않는 에셋)이다. 작업 결과에 남은 경고를 알린다.
28
32
 
29
- `warnings`는 저장·커밋을 막지 않는 안내다. `MISSING_DESIGN_REFERENCE`(설계가 없는 요구사항을 참조), `MISSING_LINK_TARGET`(문서의 상대 링크 대상이 없음), `ASSET_SIZE`·`ASSET_EXTENSION`·`ASSETS_TOTAL_SIZE`(권장 크기·확장자 초과), `UNREFERENCED_ASSET`(어떤 문서도 참조하지 않는 에셋)이 있다. 작업 결과에 남은 경고를 알린다.
33
+ ## 프로젝트 지침
30
34
 
31
- ## 위키 운영 방침
32
-
33
- 위키를 어떻게 꾸리는지는 `gitifact docs wiki`가 알려 준다. 형식 뒤에 프로젝트의 `.gitifact/wiki/README.md`를 운영 방침으로 싣고, README가 없으면 내장 기본 방침을 싣는다. 사용자가 위키 운영 방식을 바꾸고 싶다고 하면 README를 함께 고친다. 형식과 `spec save`의 검증은 README와 무관하게 유지된다.
35
+ 이 프로젝트에서 어떻게 일하는지는 `.gitifact/instructions/`의 지침이 담고, 어떤 작업 때 어느 지침을 읽을지는 AGENTS.md의 GITIFACT 블록 밖 색인이 알린다. 형식과 색인 쓰는 법은 `gitifact guide show instructions`를 따른다. 사용자가 일하는 방식을 바꾸고 싶다고 하면 해당 지침과 색인을 함께 고친다.
34
36
 
35
37
  ## 작업 중 임시 파일
36
38
 
37
- save·commit 입력 JSON은 `spec working`(또는 `spec changes`) 결과의 `inputs.save`·`inputs.commit` 경로에 만든다. 기본은 운영체제 임시 폴더 아래의 프로젝트별 폴더이고, 그곳에 쓸 수 없는 환경에서는 Git이 무시하는 `.gitifact/tmp/`다. 명령이 성공하면 CLI가 그 입력 파일을 지우고 결과에 `inputRemoved`를 싣는다. 실패·`--dry-run`·결과가 불확실한 커밋에서는 파일이 남으므로 원인을 고친 뒤 같은 파일로 다시 실행한다. 이 폴더의 7일 넘은 파일은 working 실행 때 정리된다. 짧은 입력은 `--file -`로 표준 입력에 넘겨도 되지만, 여러 줄 본문과 따옴표가 셸에서 깨질 수 있으면 파일을 쓴다. 프로젝트 안에 입력·출력 사본을 따로 만들지 않는다.
39
+ 커밋 입력 JSON은 `gitifact changes list`가 알려 주는 입력 파일 경로(JSON의 `inputs.commit`)에 만든다. 기본은 운영체제 임시 폴더 아래의 프로젝트별 폴더이고, 그곳에 쓸 수 없는 환경에서는 Git이 무시하는 `.gitifact/tmp/`다. 커밋이 성공하면 CLI가 그 입력 파일을 지우고 결과에 `inputRemoved`를 싣는다. 실패·`--dry-run`·결과가 불확실한 커밋에서는 파일이 남으므로 원인을 고친 뒤 같은 파일로 다시 실행한다. 이 폴더의 7일 넘은 파일은 `changes list` 실행 때 정리된다. 짧은 입력은 `--file -`로 표준 입력에 넘겨도 되지만, 여러 줄 본문과 따옴표가 셸에서 깨질 수 있으면 파일을 쓴다. 프로젝트 안에 입력·출력 사본을 따로 만들지 않는다.
38
40
 
39
41
  ## 기록을 보여 달라는 요청
40
42
 
41
- 사용자가 요구사항·프로젝트 현황·변경 이력·패치노트를 보여 달라고 하면 `gitifact browser`를 실행하고 출력된 URL을 알려 준다. 이 명령은 URL을 출력한 뒤 서버로 계속 실행되므로 백그라운드로 띄운다. 끝나기를 기다리면 작업이 멈춘다. working JSON을 읽어 채팅에 요약하는 것으로 대신하지 않는다. 사용자가 특정 내용을 설명해 달라고 한 경우는 따른다. 이번 대화에서 이미 띄운 서버가 살아 있으면 새로 띄우지 않고 그 URL을 다시 알려 준다. 기본 브라우저를 직접 여는 것은 사용자가 요청할 때만 한다.
43
+ 사용자가 요구사항·프로젝트 현황·변경 이력·패치노트를 보여 달라고 하면 `gitifact browser`를 실행하고 출력된 URL을 알려 준다. 이 명령은 URL을 출력한 뒤 서버로 계속 실행되므로 백그라운드로 띄운다. 끝나기를 기다리면 작업이 멈춘다. 목록 출력을 읽어 채팅에 요약하는 것으로 대신하지 않는다. 사용자가 특정 내용을 설명해 달라고 한 경우는 따른다. 이번 대화에서 이미 띄운 서버가 살아 있으면 새로 띄우지 않고 그 URL을 다시 알려 준다. 기본 브라우저를 직접 여는 것은 사용자가 요청할 때만 한다.
44
+
45
+ ## Gitifact에 의견 보내기
46
+
47
+ 사용자가 Gitifact 자체의 버그나 개선을 남기고 싶어 하면 종류(`bug`·`idea`)와 제목·본문 초안을 쓰고 사용자에게 보여 준다. 본문에는 사용자가 겪은 일과 재현 절차를 쓰고, 프로젝트 파일·문서 내용·경로는 사용자가 넣으라고 한 것만 넣는다. 확인받기 전에는 보내지 않는다. 확인받으면 입력 파일에 `{"type": "bug", "title": "…", "body": "…"}`를 써서 `gitifact feedback --file <경로>`를 실행한다. 보낼 방법과 CLI가 붙이는 환경 정보(버전·운영체제·Node·저장 규약 버전)를 먼저 보이려면 `--dry-run`을 쓴다. CLI는 로그인된 `gh`가 있으면 사용자 계정으로 이슈를 만들고, 없으면 이슈 작성 페이지 주소를 출력한다. 주소를 사용자에게 알려 브라우저에서 제출하게 하고, 본문이 잘렸다고 나오면 전체 본문도 함께 전한다.
42
48
 
43
49
  ## 마무리
44
50
 
45
- 정리한 요구사항과 실제 수행한 검증, 커밋 여부, 남은 제한을 짧게 알린다. 파일 저장·커밋·승인·구현·검증 완료를 구분한다. 독립 에이전트의 행동 시험, 마이그레이션, 새 GUI 연결은 실제 수행하지 않았다면 완료로 보고하지 않는다.
51
+ 정리한 요구사항과 실제 수행한 검증, 커밋 여부, 남은 제한을 짧게 알린다. 문서 수정·검사 통과·커밋·구현·검증 완료를 구분한다. 독립 에이전트의 행동 시험, 마이그레이션, 새 GUI 연결은 실제 수행하지 않았다면 완료로 보고하지 않는다.
46
52
 
47
53
  ## 무엇을 요구사항으로 남기는가
48
54
 
@@ -57,12 +63,12 @@ save·commit 입력 JSON은 `spec working`(또는 `spec changes`) 결과의 `inp
57
63
  | 테두리 색을 조금 연하게 해주세요 | 보통 스타일 수정이다. 매번 요구사항을 만들지 않는다. |
58
64
  | 선택한 항목은 테두리로 구분해주세요 | 선택 상태를 전달하는 동작이므로 기존 선택 요구사항의 수용 조건에 반영한다. |
59
65
 
60
- 전체 화면의 일관된 표현 규칙은 위키의 규칙 페이지에 두고 기능별로 반복 등록하지 않는다. 분류는 표현 하나보다 실제 제품 의미와 기존 맥락으로 판단한다.
66
+ 전체 화면의 일관된 표현 규칙은 프로젝트 지침에 두고 기능별로 반복 등록하지 않는다. 분류는 표현 하나보다 실제 제품 의미와 기존 맥락으로 판단한다.
61
67
 
62
68
  ## 대화에서 정리하는 순서
63
69
 
64
70
  처음에는 사용 대상·원하는 결과·핵심 흐름·실패 조건·제품 제약을 대화에서 파악한다. 이미 답이 있는 질문을 반복하거나 긴 설문을 강제하지 않는다. 구현 방향을 바꾸는 불명확한 점만 묻고 독립적으로 가능한 작업은 진행한다.
65
71
 
66
- 요구사항·설계·코드를 바꾸기 전에 `gitifact docs wiki`의 운영 방침에 따라 작업 영역에 맞는 위키 페이지를 읽고 따른다. 위키 페이지가 없으면 없다고 보고 진행한다. 요청이 위키에 적힌 범위 밖이거나 원칙과 어긋나면 진행 전에 알린다.
72
+ 요구사항·설계·코드를 바꾸기 전에 AGENTS.md 색인에서 작업 영역에 맞는 지침을 찾아 읽고 따른다. 맞는 지침이 없으면 없다고 보고 진행한다. 요청이 지침과 어긋나면 진행 전에 알린다.
67
73
 
68
74
  기존 프로젝트는 변경하는 영역부터 점진적으로 정리한다. 전체 기능 도출은 요청받았을 때 한다. 코드·테스트·문서·Git·대화 중 이용 가능한 자료를 읽으며 특정 docs 구조를 요구하지 않는다. 관측한 구현과 사용자의 의도, 향후 제안을 구분한다. 불확실한 후보는 질문과 근거로 제시하고 확정된 제품 요구사항처럼 저장하지 않는다. 과거 승인·구현 완료를 만들어내거나 커밋에 참조를 소급하지 않는다.
@@ -1,13 +1,16 @@
1
- # 문서 문체
1
+ ---
2
+ title: 문서 문체
3
+ description: 지침·요구사항·설계·결정기록에 공통으로 적용하는 문체, 본문과 결정기록의 구분, 인용·Alert·다이어그램, AI 슬롭 제거
4
+ ---
2
5
 
3
- 위키 페이지·요구사항·설계에 모두 적용한다. 문서는 CLI 표시 언어와 무관하게 프로젝트의 언어로 쓴다. 본문은 '~한다', '~이다'로 통일하고 제목은 내용을 나타내는 명사형으로 쓴다. 화면 문구·인용·코드의 표현은 유지한다.
6
+ 프로젝트 지침·요구사항·설계에 모두 적용한다. 문서는 CLI 표시 언어와 무관하게 프로젝트의 언어로 쓴다. 본문은 '~한다', '~이다'로 통일하고 제목은 내용을 나타내는 명사형으로 쓴다. 화면 문구·인용·코드의 표현은 유지한다.
4
7
 
5
8
  ## 서술과 구성
6
9
 
7
10
  - 대상과 규칙을 먼저 쓴다. '본 문서는 ~을 정의한다' 같은 서두보다 책임·의존 방향·처리 조건을 바로 설명한다.
8
- - 한 문단에는 한 주제를 담는다. 배경과 선택 이유는 해당 규칙을 이해하는 데 필요한 만큼만 쓴다.
11
+ - 한 문단에는 한 주제를 담고 첫 문장에 요지를 쓴다. 문단은 3~4문장, 300자 안팎이 기준이다. 넘으면 주제가 둘인지 보고 나누거나 표로 옮긴다.
9
12
  - 아키텍처 개요에는 시스템의 구성과 경계를 요약하고, 세부 규칙은 상세 문서로 연결한다. 다른 문서의 규칙을 복사하지 않는다.
10
- - 절차는 순서 목록, 비교와 조건별 처리는 표, 설명은 문단으로 쓴다. 짧은 내용에 소제목이나 표를 과하게 나누지 않는다.
13
+ - 절차는 순서 목록, 비교와 조건·경우별 처리는 표, 흐름·상태 전이·구성 요소 관계는 다이어그램, 설명은 문단으로 쓴다. 짧은 내용에 소제목이나 표를 과하게 나누지 않는다.
11
14
  - 용어는 문서 전반에서 일관되게 사용한다. 익숙한 한국어로 설명할 수 있는 말에 영문을 반복해서 병기하지 않는다.
12
15
 
13
16
  ## 구체성과 정확성
@@ -17,32 +20,60 @@
17
20
  - 현재 구현, 합의한 규칙, 미적용 전환안을 구분한다. 예정된 기능이나 실행하지 않은 검증을 완료된 사실로 쓰지 않는다.
18
21
  - 문장을 줄이더라도 적용 범위·예외·제약은 보존한다. 문체 교정으로 결정의 의미, ADR 상태·날짜, 식별자, 명령과 코드 예제를 바꾸지 않는다.
19
22
 
23
+ ## 지금의 내용과 경위
24
+
25
+ 본문에는 지금 유효한 동작과 규칙만 쓴다. '전에는 …했는데 …라서 바꿨다', 바꾼 날짜와 계기, 옛 방식, 측정해 가며 고른 과정은 본문에 두지 않고 결정기록에 쓴다(`gitifact guide show records`). 읽는 사람은 이유를 `gitifact records list --doc <ID>`로, 옛 원문을 `gitifact specs show <ID> --ref <커밋>`으로 본다.
26
+
27
+ 문서를 고칠 때는 바뀐 문장을 고쳐 쓰고 옛 동작을 설명하는 문장을 덧붙이지 않는다. 지켜야 할 결정은 본문에 규칙으로 쓰고, 그 맥락과 검토한 대안은 결정기록에 둔다. 설계나 지침에 결정 표를 따로 두지 않는다.
28
+
20
29
  ## 인용과 Alert
21
30
 
22
- 일반 인용구는 다른 문서나 발언을 인용할 때 쓴다. 보충 설명·필수 조건·주의사항을 따로 강조할 필요가 있으면 기본 인용구 대신 [GitHub Alert 문법](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts)을 사용할 수 있다.
31
+ 일반 인용구는 다른 문서나 발언을 인용할 때 쓴다. 문장 속에 묻히면 다음 작업자가 놓치기 쉬운 내용은 [GitHub Alert 문법](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts)으로 따로 둔다.
23
32
 
24
- - `NOTE`: 놓치기 쉬운 보충 정보
25
- - `TIP`: 작업에 도움이 되는 선택적 요령
26
- - `IMPORTANT`: 작업 전에 알아야 할 필수 조건
27
- - `WARNING`: 문제를 피하려면 주의해야 할 사항
28
- - `CAUTION`: 데이터 손실 등 작업에 따르는 위험
33
+ | 종류 | 쓰는 자리 | 설계·지침의 예 |
34
+ | :--- | :--- | :--- |
35
+ | `IMPORTANT` | 깨면 안 되는 불변 조건, 작업 전에 알아야 할 필수 조건 | 원본 파일을 바꾸지 않는다, 실패를 조용히 삼키지 않는다 |
36
+ | `WARNING` | 어기면 보안 문제나 잘못된 동작으로 이어지는 조건 | 인증 없이 열린 경로의 범위를 넓히지 않는다 |
37
+ | `CAUTION` | 데이터 손실처럼 되돌리기 어려운 위험 | 이 명령은 기록을 지운다 |
38
+ | `NOTE` | 알려진 한계, 예정된 제거, 놓치기 쉬운 보충 정보 | 이 경우는 구분하지 못한다, 이 코드는 다음 주요 버전에서 지운다 |
39
+ | `TIP` | 작업에 도움이 되는 선택적 요령 | 확인할 때 쓰는 명령 |
29
40
 
30
41
  ```markdown
31
42
  > [!IMPORTANT]
32
43
  > 통합 테스트를 실행하기 전에 Docker를 시작한다.
33
44
  ```
34
45
 
35
- 본문으로 충분히 전달되면 Alert를 쓰지 않는다. 문서당 1~2개 이내를 기본으로 하되 필요한 경우에만 추가한다. 연속 배치나 목록·인용구 안의 중첩은 피하고, 한 Alert는 한 주제를 한두 문장으로 설명한다. 긴 설명은 별도 절로 작성한다. 일반 인용구를 일괄 변환하지 않는다.
46
+ 본문으로 충분히 전달되면 Alert를 쓰지 않는다. 파일당 한두 개가 기준이며 필요한 경우에만 더한다. 연속 배치나 목록·인용구 안의 중첩은 피하고, 한 Alert는 한 주제를 한두 문장으로 설명한다. 긴 설명은 별도 절로 작성한다. 일반 인용구를 일괄 변환하지 않는다.
47
+
48
+ ## 다이어그램
49
+
50
+ 흐름, 주고받기, 상태, 관계처럼 글보다 그림으로 빨리 읽히는 자리에 ` ```mermaid ` 펜스로 넣는다. 먼저 내용에 맞는 종류를 고른다.
51
+
52
+ | 내용 | 종류 |
53
+ | :--- | :--- |
54
+ | 갈라지거나 합쳐지는 처리 흐름, 판단 | `flowchart` |
55
+ | 여러 구성 요소가 차례로 주고받는 요청·응답 | `sequenceDiagram` |
56
+ | 대상이 거치는 상태와 전이 조건 | `stateDiagram-v2` |
57
+ | 저장 구조의 표·엔터티 관계 | `erDiagram` |
58
+ | 브랜치·병합처럼 커밋 이력의 모양 | `gitGraph` |
59
+ | 모듈·타입의 의존과 구성 | `classDiagram` 또는 `flowchart`의 묶음 |
60
+
61
+ 그림이 맞지 않는 내용도 있다. 한 줄로 이어지는 순서는 번호 목록, 조건과 결과의 대응은 표가 낫다.
36
62
 
37
- 같은 기준을 다이어그램에도 적용한다. 흐름이나 상태 전이가 글보다 그림으로 빨리 읽히는 자리에만 ` ```mermaid ` 펜스를 쓰고, 같은 내용을 글과 그림으로 두 번 적지 않는다. 설계 문서에도 필요하면 쓴다. 문서당 한두 개가 기준이다.
63
+ - 상자 이름은 짧은 명사로 쓴다. 명령·경로·설정값 같은 세부는 그림 아래 표나 글에 둔다.
64
+ - 상자는 10개 이하, 가로로 늘어서는 상자는 5개 이하가 기준이다. 더 길면 위에서 아래(`TD`)로 그리거나 그림을 나눈다.
65
+ - 주 흐름을 먼저 선언하고 곁가지를 나중에 선언한다. 마름모는 판단에만 쓰고 그 라벨은 몇 글자로 줄인다.
66
+ - 같은 출처나 모듈은 `subgraph`로 묶는다. 간선 라벨은 조건일 때만 두세 단어로 쓴다.
67
+ - 색·`classDef`·`style`은 쓰지 않는다. 화면 모드와 색 조합은 보는 쪽이 정한다.
68
+ - 그림으로 보인 내용을 글로 다시 풀지 않는다. 글에는 그림에 없는 조건과 예외만 적는다.
38
69
 
39
70
  ## AI 슬롭 제거
40
71
 
41
72
  - 상투적인 도입·맺음말, 같은 내용을 반복하는 요약, 독자에게 말을 거는 문장을 삭제한다.
42
73
  - '중요한 것은', '반드시 기억해야 한다', '단순한 X가 아니라 Y다' 같은 강조·대조는 실제 구분이 필요할 때만 쓴다.
43
74
  - '체계적인', '효율적인', '강력한', '원활한'처럼 판단 기준이 없는 수식어는 삭제하거나 구체적인 동작으로 바꾼다.
44
- - 당연한 설명, 작성 과정의 중계, 요청을 수행했다는 보고를 본문에 섞지 않는다. 필요한 변경 이력은 이력 문서에서 관리한다.
45
- - 굵은 글씨·경고문을 반복하지 않는다. 놓치면 데이터 손실이나 잘못된 실행으로 이어지는 조건에만 경고를 둔다.
75
+ - 당연한 설명, 작성 과정의 중계, 요청을 수행했다는 보고를 본문에 섞지 않는다. 바뀐 경위는 커밋의 변경 이유에 쓴다.
76
+ - 굵은 글씨·경고문을 반복하지 않는다. 강조는 "인용과 Alert"의 기준에 맞는 자리에만 둔다.
46
77
  - 편집 후 각 문장이 규칙·사실·이유·절차 중 무엇을 전달하는지 확인한다. 정보를 더하지 않는 문장은 삭제한다.
47
78
 
48
79
  | 피할 표현 | 작성 예 |
@@ -51,4 +82,4 @@
51
82
  | 관심사를 명확히 분리하여 유지보수성을 높인다. | 화면은 입력·표시를, 서버는 권한·업무 규칙 검증을 담당한다. |
52
83
  | 중요한 것은 문서의 일관성을 유지하는 것이다. | 공통 규칙은 한 문서에서 관리하고 다른 문서는 링크로 참조한다. |
53
84
 
54
- 요구사항의 사용자 스토리와 수용 조건에도 적용한다. 다만 `gitifact docs spec`이 정한 문형과 `조건: / 기대 동작:` 형식은 문체 교정의 대상이 아니다.
85
+ 요구사항의 사용자 스토리와 수용 조건에도 적용한다. 다만 `gitifact guide show spec`이 정한 문형과 `조건: / 기대 동작:` 형식은 문체 교정의 대상이 아니다.