polydeukes 0.5.0 → 0.6.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 (79) hide show
  1. package/README.ko.md +54 -74
  2. package/README.md +55 -86
  3. package/dist/baseline.d.ts +82 -0
  4. package/dist/baseline.js +166 -0
  5. package/dist/bin.d.ts +1 -1
  6. package/dist/bin.js +26 -6
  7. package/dist/claude-code-hook.d.ts +7 -5
  8. package/dist/claude-code-hook.js +69 -17
  9. package/dist/claude-code.d.ts +6 -0
  10. package/dist/claude-code.js +6 -0
  11. package/dist/covenant-check.d.ts +10 -17
  12. package/dist/covenant-check.js +44 -12
  13. package/dist/covenant-module.d.ts +2 -2
  14. package/dist/covenant-module.js +9 -1
  15. package/dist/docs/README.ko.md +60 -0
  16. package/dist/docs/README.md +64 -0
  17. package/dist/docs/catalog.json +464 -0
  18. package/dist/docs/concepts/judgment.ko.md +113 -0
  19. package/dist/docs/concepts/judgment.md +113 -0
  20. package/dist/docs/how-to/configure-project.ko.md +99 -0
  21. package/dist/docs/how-to/configure-project.md +95 -0
  22. package/dist/docs/how-to/connect-surfaces.ko.md +115 -0
  23. package/dist/docs/how-to/connect-surfaces.md +118 -0
  24. package/dist/docs/how-to/write-disciplines.ko.md +124 -0
  25. package/dist/docs/how-to/write-disciplines.md +125 -0
  26. package/dist/docs/index.json +2046 -0
  27. package/dist/docs/reference/cli/covenant-check.ko.md +101 -0
  28. package/dist/docs/reference/cli/covenant-check.md +98 -0
  29. package/dist/docs/reference/cli/docs.ko.md +97 -0
  30. package/dist/docs/reference/cli/docs.md +95 -0
  31. package/dist/docs/reference/cli/explain.ko.md +79 -0
  32. package/dist/docs/reference/cli/explain.md +84 -0
  33. package/dist/docs/reference/cli/init.ko.md +119 -0
  34. package/dist/docs/reference/cli/init.md +131 -0
  35. package/dist/docs/reference/configuration/index.ko.md +448 -0
  36. package/dist/docs/reference/configuration/index.md +474 -0
  37. package/dist/docs/reference/packages/adapter-claude-code.ko.md +83 -0
  38. package/dist/docs/reference/{adapter-claude-code.md → packages/adapter-claude-code.md} +16 -10
  39. package/dist/docs/reference/packages/adapter-git.ko.md +101 -0
  40. package/dist/docs/reference/{adapter-git.md → packages/adapter-git.md} +25 -15
  41. package/dist/docs/reference/packages/core.ko.md +128 -0
  42. package/dist/docs/reference/{core.md → packages/core.md} +32 -13
  43. package/dist/docs/reference/packages/covenant.ko.md +115 -0
  44. package/dist/docs/reference/{covenant.md → packages/covenant.md} +41 -26
  45. package/dist/docs/reference/packages/polydeukes.ko.md +134 -0
  46. package/dist/docs/reference/packages/polydeukes.md +139 -0
  47. package/dist/docs/troubleshooting.ko.md +142 -0
  48. package/dist/docs/troubleshooting.md +97 -122
  49. package/dist/docs/tutorials/first-judgment.ko.md +82 -0
  50. package/dist/docs/tutorials/first-judgment.md +81 -0
  51. package/dist/docs-catalog.d.ts +25 -0
  52. package/dist/docs-catalog.js +450 -0
  53. package/dist/docs-library.d.ts +23 -0
  54. package/dist/docs-library.js +347 -0
  55. package/dist/docs-markdown.d.ts +32 -0
  56. package/dist/docs-markdown.js +150 -0
  57. package/dist/docs-query.d.ts +11 -40
  58. package/dist/docs-query.js +28 -122
  59. package/dist/docs-types.d.ts +105 -0
  60. package/dist/docs-types.js +2 -0
  61. package/dist/explain.d.ts +3 -5
  62. package/dist/explain.js +48 -47
  63. package/dist/index.d.ts +2 -3
  64. package/dist/index.js +1 -2
  65. package/dist/init-claude-code.d.ts +5 -3
  66. package/dist/init-claude-code.js +226 -63
  67. package/dist/init-grok.d.ts +51 -0
  68. package/dist/init-grok.js +242 -0
  69. package/dist/load-config.d.ts +5 -1
  70. package/dist/load-config.js +2 -1
  71. package/dist/pre-state-reader.d.ts +22 -0
  72. package/dist/pre-state-reader.js +32 -0
  73. package/dist/scaffold-project.js +48 -8
  74. package/dist/schema/polydeukes.schema.json +38 -91
  75. package/package.json +7 -7
  76. package/dist/docs/configuration.md +0 -103
  77. package/dist/docs/installation.md +0 -212
  78. package/dist/docs/reference/configuration.md +0 -338
  79. package/dist/docs/reference/polydeukes.md +0 -287
@@ -0,0 +1,464 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "documents": [
4
+ {
5
+ "id": "home",
6
+ "category": "navigation",
7
+ "order": 0,
8
+ "bundled": true,
9
+ "en": {
10
+ "path": "README.md",
11
+ "title": "Polydeukes documentation",
12
+ "summary": "Choose a task, guide, or reference."
13
+ },
14
+ "ko": {
15
+ "path": "README.ko.md",
16
+ "title": "폴리데우케스 문서",
17
+ "summary": "작업에 맞는 안내와 참조 문서를 고릅니다."
18
+ }
19
+ },
20
+ {
21
+ "id": "first-judgment",
22
+ "category": "tutorial",
23
+ "order": 1,
24
+ "bundled": true,
25
+ "en": {
26
+ "path": "tutorials/first-judgment.md",
27
+ "title": "Install and get your first judgment",
28
+ "summary": "Install Claude Code integration and observe a first judgment.",
29
+ "terms": [
30
+ "install",
31
+ "claude-code"
32
+ ]
33
+ },
34
+ "ko": {
35
+ "path": "tutorials/first-judgment.ko.md",
36
+ "title": "설치하고 첫 판정 확인하기",
37
+ "summary": "클로드 코드 연동을 설치하고 첫 판정 결과를 확인합니다.",
38
+ "terms": [
39
+ "클로드",
40
+ "코드",
41
+ "설치"
42
+ ]
43
+ }
44
+ },
45
+ {
46
+ "id": "connect-surfaces",
47
+ "category": "how-to",
48
+ "order": 2,
49
+ "bundled": true,
50
+ "en": {
51
+ "path": "how-to/connect-surfaces.md",
52
+ "title": "Connect the surfaces",
53
+ "summary": "Connect Claude Code, Grok, and git; distinguish their witness paths."
54
+ },
55
+ "ko": {
56
+ "path": "how-to/connect-surfaces.ko.md",
57
+ "title": "표면 연결하기",
58
+ "summary": "Claude Code, Grok, git을 연결하고 표면별 증인 사용법을 구별합니다."
59
+ }
60
+ },
61
+ {
62
+ "id": "configure-project",
63
+ "category": "how-to",
64
+ "order": 3,
65
+ "bundled": true,
66
+ "en": {
67
+ "path": "how-to/configure-project.md",
68
+ "title": "Configure the project",
69
+ "summary": "Find configuration, enable IDE support, and choose enforcement."
70
+ },
71
+ "ko": {
72
+ "path": "how-to/configure-project.ko.md",
73
+ "title": "프로젝트 설정하기",
74
+ "summary": "설정 파일을 찾고 IDE 지원과 강제 수준을 설정합니다."
75
+ }
76
+ },
77
+ {
78
+ "id": "write-disciplines",
79
+ "category": "how-to",
80
+ "order": 4,
81
+ "bundled": true,
82
+ "en": {
83
+ "path": "how-to/write-disciplines.md",
84
+ "title": "Write disciplines",
85
+ "summary": "Write and exercise a locale key pairing declaration."
86
+ },
87
+ "ko": {
88
+ "path": "how-to/write-disciplines.ko.md",
89
+ "title": "규율 작성하기",
90
+ "summary": "번역 키 짝 맞춤 선언을 작성하고 위반과 정상 사례를 검사합니다."
91
+ }
92
+ },
93
+ {
94
+ "id": "troubleshooting",
95
+ "category": "how-to",
96
+ "order": 5,
97
+ "bundled": true,
98
+ "en": {
99
+ "path": "troubleshooting.md",
100
+ "title": "Troubleshooting Polydeukes",
101
+ "summary": "Diagnose invalid config, Grok witness limits, and config-fault skips."
102
+ },
103
+ "ko": {
104
+ "path": "troubleshooting.ko.md",
105
+ "title": "폴리데우케스 문제 해결",
106
+ "summary": "설정 오류, Grok 증인 제한, 미판정 config-fault의 원인을 확인합니다."
107
+ }
108
+ },
109
+ {
110
+ "id": "concepts",
111
+ "category": "concepts",
112
+ "order": 6,
113
+ "bundled": true,
114
+ "en": {
115
+ "path": "concepts/judgment.md",
116
+ "title": "How a judgment works",
117
+ "summary": "Understand observations, verdicts, relations, and mechanism limits."
118
+ },
119
+ "ko": {
120
+ "path": "concepts/judgment.ko.md",
121
+ "title": "판정은 어떻게 이루어지는가",
122
+ "summary": "관측, 판정 결과, 관계와 메커니즘의 한계를 이해합니다."
123
+ }
124
+ },
125
+ {
126
+ "id": "cli-covenant-check",
127
+ "category": "reference",
128
+ "order": 7,
129
+ "bundled": true,
130
+ "en": {
131
+ "path": "reference/cli/covenant-check.md",
132
+ "title": "`pdks covenant check`",
133
+ "summary": "Inspect staged changes, --worktree, or a revision range."
134
+ },
135
+ "ko": {
136
+ "path": "reference/cli/covenant-check.ko.md",
137
+ "title": "`pdks covenant check`",
138
+ "summary": "스테이징한 변경, 작업 트리 검사, 리비전 범위 검사를 설명합니다."
139
+ }
140
+ },
141
+ {
142
+ "id": "cli-init",
143
+ "category": "reference",
144
+ "order": 8,
145
+ "bundled": true,
146
+ "en": {
147
+ "path": "reference/cli/init.md",
148
+ "title": "`pdks init`",
149
+ "summary": "Install the Claude Code or Grok integration."
150
+ },
151
+ "ko": {
152
+ "path": "reference/cli/init.ko.md",
153
+ "title": "`pdks init`",
154
+ "summary": "Claude Code 또는 Grok 연동을 설치합니다."
155
+ }
156
+ },
157
+ {
158
+ "id": "cli-explain",
159
+ "category": "reference",
160
+ "order": 9,
161
+ "bundled": true,
162
+ "en": {
163
+ "path": "reference/cli/explain.md",
164
+ "title": "`pdks explain`",
165
+ "summary": "Inspect assembled registrations and their enforcement levels."
166
+ },
167
+ "ko": {
168
+ "path": "reference/cli/explain.ko.md",
169
+ "title": "`pdks explain`",
170
+ "summary": "조립된 등록과 강제 수준을 확인합니다."
171
+ }
172
+ },
173
+ {
174
+ "id": "cli-docs",
175
+ "category": "reference",
176
+ "order": 10,
177
+ "bundled": true,
178
+ "en": {
179
+ "path": "reference/cli/docs.md",
180
+ "title": "`pdks docs`",
181
+ "summary": "Search and retrieve installed documentation without network access."
182
+ },
183
+ "ko": {
184
+ "path": "reference/cli/docs.ko.md",
185
+ "title": "`pdks docs`",
186
+ "summary": "네트워크 없이 설치된 문서를 검색하고 조회합니다."
187
+ }
188
+ },
189
+ {
190
+ "id": "configuration",
191
+ "category": "reference",
192
+ "order": 11,
193
+ "bundled": true,
194
+ "en": {
195
+ "path": "reference/configuration/index.md",
196
+ "title": "Configuration reference",
197
+ "summary": "Look up configuration keys and declaration grammar."
198
+ },
199
+ "ko": {
200
+ "path": "reference/configuration/index.ko.md",
201
+ "title": "설정 레퍼런스",
202
+ "summary": "설정 키와 선언 문법을 조회합니다."
203
+ }
204
+ },
205
+ {
206
+ "id": "package-polydeukes",
207
+ "category": "reference",
208
+ "order": 12,
209
+ "bundled": true,
210
+ "en": {
211
+ "path": "reference/packages/polydeukes.md",
212
+ "title": "`polydeukes`",
213
+ "summary": "Consult the polydeukes package contract and its limits."
214
+ },
215
+ "ko": {
216
+ "path": "reference/packages/polydeukes.ko.md",
217
+ "title": "`polydeukes`",
218
+ "summary": "polydeukes 패키지의 계약과 한계를 확인합니다."
219
+ }
220
+ },
221
+ {
222
+ "id": "package-core",
223
+ "category": "reference",
224
+ "order": 13,
225
+ "bundled": true,
226
+ "en": {
227
+ "path": "reference/packages/core.md",
228
+ "title": "`@polydeukes/core`",
229
+ "summary": "Consult the core package contract and its limits."
230
+ },
231
+ "ko": {
232
+ "path": "reference/packages/core.ko.md",
233
+ "title": "`@polydeukes/core`",
234
+ "summary": "core 패키지의 계약과 한계를 확인합니다."
235
+ }
236
+ },
237
+ {
238
+ "id": "package-covenant",
239
+ "category": "reference",
240
+ "order": 14,
241
+ "bundled": true,
242
+ "en": {
243
+ "path": "reference/packages/covenant.md",
244
+ "title": "`@polydeukes/covenant`",
245
+ "summary": "Consult the covenant package contract and its limits."
246
+ },
247
+ "ko": {
248
+ "path": "reference/packages/covenant.ko.md",
249
+ "title": "`@polydeukes/covenant`",
250
+ "summary": "covenant 패키지의 계약과 한계를 확인합니다."
251
+ }
252
+ },
253
+ {
254
+ "id": "package-adapter-claude-code",
255
+ "category": "reference",
256
+ "order": 15,
257
+ "bundled": true,
258
+ "en": {
259
+ "path": "reference/packages/adapter-claude-code.md",
260
+ "title": "`@polydeukes/adapter-claude-code`",
261
+ "summary": "Consult the adapter-claude-code package contract and its limits."
262
+ },
263
+ "ko": {
264
+ "path": "reference/packages/adapter-claude-code.ko.md",
265
+ "title": "`@polydeukes/adapter-claude-code`",
266
+ "summary": "adapter-claude-code 패키지의 계약과 한계를 확인합니다."
267
+ }
268
+ },
269
+ {
270
+ "id": "package-adapter-git",
271
+ "category": "reference",
272
+ "order": 16,
273
+ "bundled": true,
274
+ "en": {
275
+ "path": "reference/packages/adapter-git.md",
276
+ "title": "`@polydeukes/adapter-git`",
277
+ "summary": "Consult the adapter-git package contract and its limits."
278
+ },
279
+ "ko": {
280
+ "path": "reference/packages/adapter-git.ko.md",
281
+ "title": "`@polydeukes/adapter-git`",
282
+ "summary": "adapter-git 패키지의 계약과 한계를 확인합니다."
283
+ }
284
+ },
285
+ {
286
+ "id": "why-polydeukes",
287
+ "category": "explanation",
288
+ "order": 17,
289
+ "bundled": false,
290
+ "en": {
291
+ "path": "why-polydeukes.md",
292
+ "title": "Why Polydeukes?",
293
+ "summary": "Read the motivation and design of the discipline framework."
294
+ },
295
+ "ko": {
296
+ "path": "why-polydeukes.ko.md",
297
+ "title": "왜 폴리데우케스인가?",
298
+ "summary": "개발 규율 프레임워크의 동기와 설계를 읽습니다."
299
+ }
300
+ },
301
+ {
302
+ "id": "contributing-docs",
303
+ "category": "how-to",
304
+ "order": 24,
305
+ "bundled": false,
306
+ "en": {
307
+ "path": "contributing.md",
308
+ "title": "Contributing to the documentation",
309
+ "summary": "Bilingual pairs, stable IDs, catalog rules, and what to run before a docs change."
310
+ },
311
+ "ko": {
312
+ "path": "contributing.ko.md",
313
+ "title": "문서에 기여하기",
314
+ "summary": "영한 쌍, 안정 ID, 카탈로그 규칙, 문서 변경 전에 실행할 명령을 적습니다."
315
+ }
316
+ },
317
+ {
318
+ "id": "post-1",
319
+ "category": "history",
320
+ "order": 18,
321
+ "bundled": false,
322
+ "en": {
323
+ "path": "build-in-public/2026-07-v0.1-covenant-core.md",
324
+ "title": "<!--",
325
+ "summary": "Historical development account; not a current usage reference."
326
+ },
327
+ "ko": {
328
+ "path": "build-in-public/2026-07-v0.1-covenant-core.ko.md",
329
+ "title": "<!--",
330
+ "summary": "당시의 개발 기록이며 현재 사용법을 설명하는 참조 문서는 아닙니다."
331
+ }
332
+ },
333
+ {
334
+ "id": "post-2",
335
+ "category": "history",
336
+ "order": 19,
337
+ "bundled": false,
338
+ "en": {
339
+ "path": "build-in-public/2026-08-v0.2-user-disciplines.md",
340
+ "title": "<!--",
341
+ "summary": "Historical development account; not a current usage reference."
342
+ },
343
+ "ko": {
344
+ "path": "build-in-public/2026-08-v0.2-user-disciplines.ko.md",
345
+ "title": "<!--",
346
+ "summary": "당시의 개발 기록이며 현재 사용법을 설명하는 참조 문서는 아닙니다."
347
+ }
348
+ },
349
+ {
350
+ "id": "post-3",
351
+ "category": "history",
352
+ "order": 20,
353
+ "bundled": false,
354
+ "en": {
355
+ "path": "build-in-public/2026-08-v0.3-installable-release.md",
356
+ "title": "<!--",
357
+ "summary": "Historical development account; not a current usage reference."
358
+ },
359
+ "ko": {
360
+ "path": "build-in-public/2026-08-v0.3-installable-release.ko.md",
361
+ "title": "<!--",
362
+ "summary": "당시의 개발 기록이며 현재 사용법을 설명하는 참조 문서는 아닙니다."
363
+ }
364
+ },
365
+ {
366
+ "id": "post-4",
367
+ "category": "history",
368
+ "order": 21,
369
+ "bundled": false,
370
+ "en": {
371
+ "path": "build-in-public/2026-08-v0.4-gate-closing.md",
372
+ "title": "<!--",
373
+ "summary": "Historical development account; not a current usage reference."
374
+ },
375
+ "ko": {
376
+ "path": "build-in-public/2026-08-v0.4-gate-closing.ko.md",
377
+ "title": "<!--",
378
+ "summary": "당시의 개발 기록이며 현재 사용법을 설명하는 참조 문서는 아닙니다."
379
+ }
380
+ },
381
+ {
382
+ "id": "post-5",
383
+ "category": "history",
384
+ "order": 22,
385
+ "bundled": false,
386
+ "en": {
387
+ "path": "build-in-public/2026-08-v0.5-diagnostic-pivot.md",
388
+ "title": "<!--",
389
+ "summary": "Historical development account; not a current usage reference."
390
+ },
391
+ "ko": {
392
+ "path": "build-in-public/2026-08-v0.5-diagnostic-pivot.ko.md",
393
+ "title": "<!--",
394
+ "summary": "당시의 개발 기록이며 현재 사용법을 설명하는 참조 문서는 아닙니다."
395
+ }
396
+ },
397
+ {
398
+ "id": "post-6",
399
+ "category": "history",
400
+ "order": 23,
401
+ "bundled": false,
402
+ "en": {
403
+ "path": "build-in-public/2026-09-v0.6-algebra-refoundation.md",
404
+ "title": "<!--",
405
+ "summary": "Historical development account; not a current usage reference."
406
+ },
407
+ "ko": {
408
+ "path": "build-in-public/2026-09-v0.6-algebra-refoundation.ko.md",
409
+ "title": "<!--",
410
+ "summary": "당시의 개발 기록이며 현재 사용법을 설명하는 참조 문서는 아닙니다."
411
+ }
412
+ }
413
+ ],
414
+ "topics": {
415
+ "install": {
416
+ "references": [
417
+ {
418
+ "documentId": "first-judgment"
419
+ }
420
+ ],
421
+ "seeAlso": "connect-surfaces"
422
+ },
423
+ "config": {
424
+ "references": [
425
+ {
426
+ "documentId": "configuration"
427
+ }
428
+ ],
429
+ "seeAlso": "configure-project"
430
+ },
431
+ "discipline": {
432
+ "references": [
433
+ {
434
+ "documentId": "configuration",
435
+ "sectionId": "disciplines"
436
+ }
437
+ ],
438
+ "seeAlso": "write-disciplines"
439
+ },
440
+ "covenant": {
441
+ "references": [
442
+ {
443
+ "documentId": "concepts",
444
+ "sectionId": "enforcement-and-witness"
445
+ }
446
+ ],
447
+ "seeAlso": "connect-surfaces"
448
+ },
449
+ "witness": {
450
+ "references": [
451
+ {
452
+ "documentId": "configuration",
453
+ "sectionId": "witness"
454
+ },
455
+ {
456
+ "documentId": "troubleshooting",
457
+ "sectionId": "opening-a-blocked-call"
458
+ }
459
+ ],
460
+ "seeAlso": "troubleshooting"
461
+ }
462
+ },
463
+ "redirects": []
464
+ }
@@ -0,0 +1,113 @@
1
+ # 판정은 어떻게 이루어지는가
2
+
3
+ [English](./judgment.md) · **한국어**
4
+
5
+ Polydeukes는 연결된 표면이 공급하는 증거를 바탕으로 선언된 관행을 확인합니다.
6
+ 에이전트가 관행을 지켰다고 말하는 것만으로 이행을 인정하지 않습니다. 정상 판정이
7
+ 설명하는 범위도 실제로 관측한 파일, 호출, 대화 기록에 한정됩니다.
8
+
9
+ <a id="terms"></a>
10
+ ## 약속, 규율, 표면
11
+
12
+ **약속(covenant)**은 작업에 관해 함께 지키기로 한 약속입니다. **규율(discipline)**은
13
+ 프로젝트 설정에 등록한 개별 관행입니다. **판정기(judge)**가 증거를 평가하고,
14
+ **판정 결과(verdict)**가 그 결과를 나타냅니다.
15
+
16
+ **표면(surface)**은 언제 증거를 수집하는지 결정합니다.
17
+
18
+ - 세션 표면은 지원하는 호스트의 도구 호출을 실행 전에 관측합니다.
19
+ - 커밋 표면은 스테이징한 변경, 작업 트리의 변경 또는 두 리비전 사이의 변경을 관측합니다.
20
+
21
+ 패키지를 설치하는 것과 표면을 연결하는 것은 다릅니다. 에이전트가 지침을 읽었다고 해서
22
+ 도구 호출에 자동으로 판정이 적용되지는 않습니다. 지원하는 연동을 설정하고 실제 호출로
23
+ 확인하세요. [표면 연결하기](../how-to/connect-surfaces.ko.md)를 참고하세요.
24
+
25
+ <a id="declarations"></a>
26
+ ## 선언과 관측 한계
27
+
28
+ 판정할 규율에는 `id`와 `declare` 블록이 있습니다. 적용 범위로 관측 대상을 고르고,
29
+ 소스에서 증거를 얻고, 추출 단계로 증거를 변환한 뒤, 관계로 약속을 어긴 원소를 찾습니다.
30
+ `why`는 관행의 이유를 설명할 뿐 실행할 논리가 아닙니다.
31
+
32
+ 고정 소스는 `target.path`, `pre`, `post`, `state`, `changes`, `command`, `actor`입니다.
33
+ 추가 바인딩으로 특정 파일, 보조 채널 또는 세션의 대화 기록을 읽을 수 있습니다.
34
+ 선언은 표면이 공급하는 소스만 사용할 수 있습니다. 따라서 같은 선언도 한 표면에서는
35
+ 판정할 수 있지만 다른 표면에서는 미판정으로 기록되거나 적용 범위와 맞지 않을 수 있습니다.
36
+
37
+ `state`는 파일 수정의 변경 전후 값을 한 쌍으로 제공합니다. 실행 사이에 저장되는 상태도,
38
+ 작업 단계가 진행됐다는 주장도, 명령이 성공했다는 증거도 아닙니다. `unchanged` 관계는
39
+ 쌍으로 된 추출 결과를 사용하고, 나머지 관계는 단일 추출 결과를 사용합니다. 파일 추가와
40
+ 삭제에는 수정의 전후 쌍이 없습니다. 증거가 없을 때는 선언의 `supply` 정책을 따릅니다.
41
+ 빈 파일이 있었다고 가정하지 않습니다.
42
+
43
+ `draft: true`인 항목은 아직 선언으로 전환하지 않은 관행을 기록합니다. 판정하지 않고
44
+ 텔레메트리 행도 남기지 않습니다. 유효한 선언에 검사가 더 필요하다는 이유만으로 초안으로
45
+ 남기지는 마세요. 반대로 현재 문법에 필요한 증거나 비교가 없다면 단계나 메커니즘을
46
+ 지어내지 마세요. [규율 작성하기](../how-to/write-disciplines.ko.md)에서는 실행 가능한
47
+ 번역 키 비교와 현재 지원하지 않는 약속을 각각 보여 줍니다.
48
+
49
+ <a id="relations"></a>
50
+ ## 일곱 관계
51
+
52
+ 관계는 비교 조건을 만족하지 않는 원소의 목록을 반환합니다. 그 목록이 비어 있으면 관계가
53
+ 성립합니다. 이는 `empty` 관계가 추출 결과에 요구하는 조건과 구별해야 합니다.
54
+
55
+ | 관계 | 요구하는 조건 |
56
+ |---|---|
57
+ | `empty` | 추출 결과에 항목이 없어야 합니다. |
58
+ | `nonEmpty` | 추출 결과에 항목이 하나 이상 있어야 합니다. |
59
+ | `equal` | 양쪽에서 추출한 집합이 같아야 합니다. |
60
+ | `subset` | 왼쪽의 모든 항목이 오른쪽에도 있어야 합니다. |
61
+ | `implies` | 왼쪽이 요구하는 키에 대응하는 키가 오른쪽에 있어야 합니다. |
62
+ | `ordered` | 추출한 순서가 선언한 정렬 조건을 만족해야 합니다. |
63
+ | `unchanged` | 파일 수정 전후에 공통으로 있는 키의 값이 같아야 합니다. |
64
+
65
+ 키와 값은 역할이 다릅니다. 키를 기준으로 비교하거나 결합할 때는 키로 항목을 식별합니다.
66
+ 값끼리는 구조가 같은지 비교합니다. 번역 키를 비교하는 선언은 번역 문구를 비교하지 않습니다. 관계가 무엇을
67
+ 구별할 수 있는지는 추출 과정에 달려 있습니다.
68
+
69
+ <a id="mechanisms"></a>
70
+ ## 열여덟 메커니즘 이름
71
+
72
+ 메커니즘은 선언의 목적과 허용하는 구성을 나타냅니다. 새로운 비교 연산자가 아닙니다.
73
+ 컴파일러는 문법에서 증거의 축과 관계를 도출하고, 선택한 메커니즘에 맞는지 확인합니다.
74
+
75
+ 이름은 `pairing`, `companion`, `monotonic-order`, `fingerprint-sync`, `producer-owned`,
76
+ `self-absolution-ban`, `actor-scope`, `precedent`, `phase-order`, `turn-locality`, `stated-ground`,
77
+ `controlled-vocabulary`, `naming`, `added-only`, `one-way-marker`, `delegated-scope`,
78
+ `scoped-valve`, `forbidden-command`로 한정됩니다.
79
+
80
+ `delegated-scope`는 **예약된 이름**이며 이번 버전에서 사용할 수 있는 선언이 아닙니다.
81
+ `scoped-valve`에는 자체 증인 블록이 필요합니다. `naming`은 `target.path`를,
82
+ `forbidden-command`는 `command`를 적용 범위의 소스로 사용합니다. 구문과 추출 단계는
83
+ [설정 참조](../reference/configuration/index.ko.md#disciplines)에 있습니다.
84
+
85
+ <a id="verdicts"></a>
86
+ ## 종료 코드만 보지 말고 결과를 읽기
87
+
88
+ | 기록 | 의미 |
89
+ |---|---|
90
+ | `passed` | 관측한 입력을 판정했으며 약속을 지켰습니다. |
91
+ | `blocked` | 관측한 입력이 약속을 어겨 작업을 거부했습니다. |
92
+ | `witnessed` | 차단 판정 뒤 증인 밸브가 작업을 허용했습니다. |
93
+ | `advised` | 위반을 기록하되 작업을 멈추지는 않았습니다. |
94
+ | `skipped` | 판정하지 못했음을 기록했습니다. 정상 판정이 아닙니다. |
95
+ | `unattributed` | 기준 상태와 비교했을 때 판정으로 설명되지 않는 보호 대상의 변경이 있었습니다. |
96
+
97
+ 마지막 항목은 판정기의 판정 결과가 아니라 비교에서 발견한 사실입니다. 텔레메트리는 이를
98
+ 같은 이벤트 열에 기록합니다. `advised`나 `skipped`가 있어도 exit 0일 수 있습니다.
99
+ 그렇다고 관행을 지켰다는 뜻은 아닙니다. 관측한 변경이 없다는 결과도 다른 파일의 상태를
100
+ 설명하지 않습니다.
101
+
102
+ <a id="enforcement-and-witness"></a>
103
+ ## 강제 수준과 증인
104
+
105
+ 규율 항목의 기본 강제 수준은 `advise`입니다. 위반과 정상 사례를 모두 확인한 뒤
106
+ `enforce: block`으로 승격하세요. 커밋 표면의 수준과 항목의 수준을 함께 적용할 때는
107
+ **더 관대한 쪽을 따릅니다**. 표면만 `block`으로 설정해도 모든 항목이 차단 수준으로
108
+ 바뀌지는 않습니다. 판정 체계 자체의 보호는 일반 규율 항목과 별개입니다.
109
+
110
+ 증인(witness) 밸브는 차단 판정 뒤에 확인하며, 판정을 대신하지 않습니다. 세션과 커밋의
111
+ 증인은 전달 방식과 사용하는 증거가 다릅니다. 커밋 프롬프트로 대기 중인 세션 호출을
112
+ 허용할 수는 없습니다. [증인과 회복](../how-to/connect-surfaces.ko.md#witness-and-recovery)과
113
+ [문제 해결](../troubleshooting.ko.md)을 참고하세요.