skill-family-engineering-kit 0.2.0 → 0.3.0

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 (74) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/CHANGELOG.zh-CN.md +43 -0
  3. package/NOTICE +10 -0
  4. package/README.md +160 -55
  5. package/README.zh-CN.md +210 -0
  6. package/candidate/index.mjs +4 -0
  7. package/candidate/profile-bundle.mjs +1150 -0
  8. package/candidate/projection-bundle-cli.mjs +64 -0
  9. package/candidate/skill-naming-cli.mjs +59 -0
  10. package/candidate/skill-naming-policy.json +46 -0
  11. package/candidate/skill-naming.mjs +280 -0
  12. package/docs/404.html +1434 -408
  13. package/docs/agents/architecture-routing/index.html +1944 -0
  14. package/docs/agents/capability-catalog.en.json +1564 -0
  15. package/docs/agents/capability-catalog.json +935 -0
  16. package/docs/agents/capability-catalog.schema.json +179 -0
  17. package/docs/agents/capability-catalog.zh-CN.json +1564 -0
  18. package/docs/agents/index.html +1914 -0
  19. package/docs/architecture/index.html +1706 -497
  20. package/docs/assets/javascripts/lunr/tinyseg.js +2 -2
  21. package/docs/assets/javascripts/lunr/wordcut.js +37 -37
  22. package/docs/en/agents/architecture-routing/index.html +1944 -0
  23. package/docs/en/agents/index.html +1925 -0
  24. package/docs/en/architecture/index.html +2187 -0
  25. package/docs/en/examples-and-fixtures/index.html +1888 -0
  26. package/docs/en/help/index.html +2035 -0
  27. package/docs/en/index.html +1895 -0
  28. package/docs/en/licensing/index.html +1917 -0
  29. package/docs/en/migration/index.html +2335 -0
  30. package/docs/en/quickstart/index.html +1919 -0
  31. package/docs/en/recipes/adapter-text-closure/index.html +2000 -0
  32. package/docs/en/recipes/adopt-existing-repository/index.html +1987 -0
  33. package/docs/en/recipes/deterministic-human-report/index.html +1998 -0
  34. package/docs/en/recipes/domain-schema-validation/index.html +2009 -0
  35. package/docs/en/recipes/durable-local-state/index.html +2009 -0
  36. package/docs/en/recipes/host-profile-integration/index.html +2001 -0
  37. package/docs/en/recipes/index.html +1877 -0
  38. package/docs/en/recipes/safe-filesystem-and-atomic-write/index.html +1994 -0
  39. package/docs/en/reference/api/index.html +1941 -0
  40. package/docs/en/reference/compatibility/index.html +2036 -0
  41. package/docs/en/reference/failure-and-side-effect-matrix/index.html +2216 -0
  42. package/docs/examples-and-fixtures/index.html +1871 -0
  43. package/docs/git-lifecycle/index.html +1508 -482
  44. package/docs/help/index.html +1655 -554
  45. package/docs/index.html +1479 -450
  46. package/docs/integration/audit/failure-evidence/index.html +1488 -462
  47. package/docs/integration/audit/independence/index.html +1513 -487
  48. package/docs/integration/audit/index.html +1514 -488
  49. package/docs/integration/audit/mutation-taxonomy/index.html +1548 -522
  50. package/docs/integration/audit/version-compatibility/index.html +1489 -463
  51. package/docs/licensing/index.html +1917 -0
  52. package/docs/migration/index.html +1679 -586
  53. package/docs/public/status/index.html +1542 -516
  54. package/docs/quickstart/index.html +1589 -539
  55. package/docs/recipes/adapter-text-closure/index.html +2000 -0
  56. package/docs/recipes/adopt-existing-repository/index.html +1987 -0
  57. package/docs/recipes/deterministic-human-report/index.html +1998 -0
  58. package/docs/recipes/domain-schema-validation/index.html +2009 -0
  59. package/docs/recipes/durable-local-state/index.html +2009 -0
  60. package/docs/recipes/host-profile-integration/index.html +2001 -0
  61. package/docs/recipes/index.html +1877 -0
  62. package/docs/recipes/safe-filesystem-and-atomic-write/index.html +1994 -0
  63. package/docs/reference/api/contracts/index.html +2558 -0
  64. package/docs/reference/api/engineering-kit/index.html +2577 -0
  65. package/docs/reference/api/harness/index.html +2634 -0
  66. package/docs/reference/api/index.html +1881 -0
  67. package/docs/reference/compatibility/index.html +2036 -0
  68. package/docs/reference/failure-and-side-effect-matrix/index.html +2216 -0
  69. package/docs/search/search_index.json +1 -1
  70. package/docs/setup/index.html +1494 -468
  71. package/docs/sitemap.xml +152 -0
  72. package/package.json +16 -5
  73. package/release-notes/0.2.1.yaml +23 -0
  74. package/release-notes/0.3.0.yaml +25 -0
@@ -0,0 +1,2558 @@
1
+
2
+ <!doctype html>
3
+ <html lang="zh" class="no-js">
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width,initial-scale=1">
8
+
9
+ <meta name="description" content="Skill Family 生命周期公共工程基础设施父工作区">
10
+
11
+
12
+
13
+ <link rel="canonical" href="https://ifoohoo.github.io/skill-family-engineering-kit/reference/api/contracts/">
14
+
15
+
16
+ <link rel="prev" href="../">
17
+
18
+
19
+ <link rel="next" href="../harness/">
20
+
21
+
22
+
23
+
24
+
25
+ <link rel="icon" href="../../../assets/images/favicon.png">
26
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
27
+
28
+
29
+
30
+ <title>中文 · Contracts API - Skill Family Foundation</title>
31
+
32
+
33
+
34
+ <link rel="stylesheet" href="../../../assets/stylesheets/main.ec1eaa64.min.css">
35
+
36
+
37
+ <link rel="stylesheet" href="../../../assets/stylesheets/palette.ab4e12ef.min.css">
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+ <script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
51
+
52
+
53
+
54
+
55
+
56
+ </head>
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
67
+
68
+
69
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
70
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
71
+ <label class="md-overlay" for="__drawer"></label>
72
+ <div data-md-component="skip">
73
+
74
+
75
+ <a href="#skill-family-contracts-公共-API-参考" class="md-skip">
76
+ 跳转至
77
+ </a>
78
+
79
+ </div>
80
+ <div data-md-component="announce">
81
+
82
+ </div>
83
+
84
+
85
+
86
+
87
+
88
+
89
+ <header class="md-header md-header--shadow" data-md-component="header">
90
+ <nav class="md-header__inner md-grid" aria-label="页眉">
91
+ <a href="../../.." title="Skill Family Foundation" class="md-header__button md-logo" aria-label="Skill Family Foundation" data-md-component="logo">
92
+
93
+
94
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
95
+
96
+ </a>
97
+ <label class="md-header__button md-icon" for="__drawer">
98
+
99
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
100
+ </label>
101
+ <div class="md-header__title" data-md-component="header-title">
102
+ <div class="md-header__ellipsis">
103
+ <div class="md-header__topic">
104
+ <span class="md-ellipsis">
105
+ Skill Family Foundation
106
+ </span>
107
+ </div>
108
+ <div class="md-header__topic" data-md-component="header-topic">
109
+ <span class="md-ellipsis">
110
+
111
+ 中文 · Contracts API
112
+
113
+ </span>
114
+ </div>
115
+ </div>
116
+ </div>
117
+
118
+
119
+ <form class="md-header__option" data-md-component="palette">
120
+
121
+
122
+
123
+
124
+ <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="切换到深色模式" type="radio" name="__palette" id="__palette_0">
125
+
126
+ <label class="md-header__button md-icon" title="切换到深色模式" for="__palette_1" hidden>
127
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
128
+ </label>
129
+
130
+
131
+
132
+
133
+
134
+ <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="切换到浅色模式" type="radio" name="__palette" id="__palette_1">
135
+
136
+ <label class="md-header__button md-icon" title="切换到浅色模式" for="__palette_0" hidden>
137
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
138
+ </label>
139
+
140
+
141
+ </form>
142
+
143
+
144
+
145
+ <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
146
+
147
+
148
+
149
+
150
+
151
+ <label class="md-header__button md-icon" for="__search">
152
+
153
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
154
+ </label>
155
+ <div class="md-search" data-md-component="search" role="dialog">
156
+ <label class="md-search__overlay" for="__search"></label>
157
+ <div class="md-search__inner" role="search">
158
+ <form class="md-search__form" name="search">
159
+ <input type="text" class="md-search__input" name="query" aria-label="搜索" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
160
+ <label class="md-search__icon md-icon" for="__search">
161
+
162
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
163
+
164
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
165
+ </label>
166
+ <nav class="md-search__options" aria-label="查找">
167
+
168
+ <button type="reset" class="md-search__icon md-icon" title="清空当前内容" aria-label="清空当前内容" tabindex="-1">
169
+
170
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
171
+ </button>
172
+ </nav>
173
+
174
+ </form>
175
+ <div class="md-search__output">
176
+ <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
177
+ <div class="md-search-result" data-md-component="search-result">
178
+ <div class="md-search-result__meta">
179
+ 正在初始化搜索引擎
180
+ </div>
181
+ <ol class="md-search-result__list" role="presentation"></ol>
182
+ </div>
183
+ </div>
184
+ </div>
185
+ </div>
186
+ </div>
187
+
188
+
189
+
190
+ </nav>
191
+
192
+ </header>
193
+
194
+ <div class="md-container" data-md-component="container">
195
+
196
+
197
+
198
+
199
+
200
+
201
+ <main class="md-main" data-md-component="main">
202
+ <div class="md-main__inner md-grid">
203
+
204
+
205
+
206
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
207
+ <div class="md-sidebar__scrollwrap">
208
+ <div class="md-sidebar__inner">
209
+
210
+
211
+
212
+
213
+ <nav class="md-nav md-nav--primary" aria-label="导航栏" data-md-level="0">
214
+ <label class="md-nav__title" for="__drawer">
215
+ <a href="../../.." title="Skill Family Foundation" class="md-nav__button md-logo" aria-label="Skill Family Foundation" data-md-component="logo">
216
+
217
+
218
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
219
+
220
+ </a>
221
+ Skill Family Foundation
222
+ </label>
223
+
224
+ <ul class="md-nav__list" data-md-scrollfix>
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+ <li class="md-nav__item">
233
+ <a href="../../.." class="md-nav__link">
234
+
235
+
236
+
237
+ <span class="md-ellipsis">
238
+
239
+
240
+ 中文 · 首页
241
+
242
+
243
+
244
+ </span>
245
+
246
+
247
+
248
+ </a>
249
+ </li>
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+ <li class="md-nav__item">
260
+ <a href="../../../setup/" class="md-nav__link">
261
+
262
+
263
+
264
+ <span class="md-ellipsis">
265
+
266
+
267
+ 中文 · 安装与环境
268
+
269
+
270
+
271
+ </span>
272
+
273
+
274
+
275
+ </a>
276
+ </li>
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+ <li class="md-nav__item">
287
+ <a href="../../../quickstart/" class="md-nav__link">
288
+
289
+
290
+
291
+ <span class="md-ellipsis">
292
+
293
+
294
+ 中文 · 快速开始
295
+
296
+
297
+
298
+ </span>
299
+
300
+
301
+
302
+ </a>
303
+ </li>
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+ <li class="md-nav__item">
314
+ <a href="../../../git-lifecycle/" class="md-nav__link">
315
+
316
+
317
+
318
+ <span class="md-ellipsis">
319
+
320
+
321
+ 中文 · Git 生命周期指南
322
+
323
+
324
+
325
+ </span>
326
+
327
+
328
+
329
+ </a>
330
+ </li>
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+ <li class="md-nav__item">
341
+ <a href="../../../help/" class="md-nav__link">
342
+
343
+
344
+
345
+ <span class="md-ellipsis">
346
+
347
+
348
+ 中文 · 能力与诊断
349
+
350
+
351
+
352
+ </span>
353
+
354
+
355
+
356
+ </a>
357
+ </li>
358
+
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+ <li class="md-nav__item">
368
+ <a href="../../../architecture/" class="md-nav__link">
369
+
370
+
371
+
372
+ <span class="md-ellipsis">
373
+
374
+
375
+ 中文 · 架构边界
376
+
377
+
378
+
379
+ </span>
380
+
381
+
382
+
383
+ </a>
384
+ </li>
385
+
386
+
387
+
388
+
389
+
390
+
391
+
392
+
393
+
394
+ <li class="md-nav__item">
395
+ <a href="../../../public/status/" class="md-nav__link">
396
+
397
+
398
+
399
+ <span class="md-ellipsis">
400
+
401
+
402
+ 中文 · 公开状态
403
+
404
+
405
+
406
+ </span>
407
+
408
+
409
+
410
+ </a>
411
+ </li>
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+ <li class="md-nav__item">
422
+ <a href="../../../migration/" class="md-nav__link">
423
+
424
+
425
+
426
+ <span class="md-ellipsis">
427
+
428
+
429
+ 中文 · 存量采用与迁移
430
+
431
+
432
+
433
+ </span>
434
+
435
+
436
+
437
+ </a>
438
+ </li>
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+ <li class="md-nav__item">
449
+ <a href="../../../licensing/" class="md-nav__link">
450
+
451
+
452
+
453
+ <span class="md-ellipsis">
454
+
455
+
456
+ 中文 · 许可与署名
457
+
458
+
459
+
460
+ </span>
461
+
462
+
463
+
464
+ </a>
465
+ </li>
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+ <li class="md-nav__item">
476
+ <a href="../../../agents/" class="md-nav__link">
477
+
478
+
479
+
480
+ <span class="md-ellipsis">
481
+
482
+
483
+ 中文 · 智能体入口
484
+
485
+
486
+
487
+ </span>
488
+
489
+
490
+
491
+ </a>
492
+ </li>
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+ <li class="md-nav__item">
503
+ <a href="../../../agents/architecture-routing/" class="md-nav__link">
504
+
505
+
506
+
507
+ <span class="md-ellipsis">
508
+
509
+
510
+ 中文 · 架构路由
511
+
512
+
513
+
514
+ </span>
515
+
516
+
517
+
518
+ </a>
519
+ </li>
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+ <li class="md-nav__item">
530
+ <a href="../../compatibility/" class="md-nav__link">
531
+
532
+
533
+
534
+ <span class="md-ellipsis">
535
+
536
+
537
+ 中文 · 兼容性
538
+
539
+
540
+
541
+ </span>
542
+
543
+
544
+
545
+ </a>
546
+ </li>
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+ <li class="md-nav__item">
557
+ <a href="../../failure-and-side-effect-matrix/" class="md-nav__link">
558
+
559
+
560
+
561
+ <span class="md-ellipsis">
562
+
563
+
564
+ 中文 · 失败与副作用
565
+
566
+
567
+
568
+ </span>
569
+
570
+
571
+
572
+ </a>
573
+ </li>
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+ <li class="md-nav__item">
584
+ <a href="../" class="md-nav__link">
585
+
586
+
587
+
588
+ <span class="md-ellipsis">
589
+
590
+
591
+ 中文 · API 参考
592
+
593
+
594
+
595
+ </span>
596
+
597
+
598
+
599
+ </a>
600
+ </li>
601
+
602
+
603
+
604
+
605
+
606
+
607
+
608
+
609
+
610
+
611
+
612
+ <li class="md-nav__item md-nav__item--active">
613
+
614
+ <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
615
+
616
+
617
+
618
+
619
+
620
+ <label class="md-nav__link md-nav__link--active" for="__toc">
621
+
622
+
623
+
624
+ <span class="md-ellipsis">
625
+
626
+
627
+ 中文 · Contracts API
628
+
629
+
630
+
631
+ </span>
632
+
633
+
634
+
635
+ <span class="md-nav__icon md-icon"></span>
636
+ </label>
637
+
638
+ <a href="./" class="md-nav__link md-nav__link--active">
639
+
640
+
641
+
642
+ <span class="md-ellipsis">
643
+
644
+
645
+ 中文 · Contracts API
646
+
647
+
648
+
649
+ </span>
650
+
651
+
652
+
653
+ </a>
654
+
655
+
656
+
657
+ <nav class="md-nav md-nav--secondary" aria-label="目录">
658
+
659
+
660
+
661
+
662
+
663
+
664
+ <label class="md-nav__title" for="__toc">
665
+ <span class="md-nav__icon md-icon"></span>
666
+ 目录
667
+ </label>
668
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
669
+
670
+ <li class="md-nav__item">
671
+ <a href="#对象校验-foundationcontractsobject-validation" class="md-nav__link">
672
+ <span class="md-ellipsis">
673
+
674
+ 对象校验 (foundation.contracts.object-validation)
675
+
676
+ </span>
677
+ </a>
678
+
679
+ <nav class="md-nav" aria-label="对象校验 (foundation.contracts.object-validation)">
680
+ <ul class="md-nav__list">
681
+
682
+ <li class="md-nav__item">
683
+ <a href="#validateDocument" class="md-nav__link">
684
+ <span class="md-ellipsis">
685
+
686
+ validateDocument
687
+
688
+ </span>
689
+ </a>
690
+
691
+ </li>
692
+
693
+ <li class="md-nav__item">
694
+ <a href="#compileSchema" class="md-nav__link">
695
+ <span class="md-ellipsis">
696
+
697
+ compileSchema
698
+
699
+ </span>
700
+ </a>
701
+
702
+ </li>
703
+
704
+ <li class="md-nav__item">
705
+ <a href="#detectDialect" class="md-nav__link">
706
+ <span class="md-ellipsis">
707
+
708
+ detectDialect
709
+
710
+ </span>
711
+ </a>
712
+
713
+ </li>
714
+
715
+ </ul>
716
+ </nav>
717
+
718
+ </li>
719
+
720
+ <li class="md-nav__item">
721
+ <a href="#登记与协议-foundationcontractsregistry-protocol" class="md-nav__link">
722
+ <span class="md-ellipsis">
723
+
724
+ 登记与协议 (foundation.contracts.registry-protocol)
725
+
726
+ </span>
727
+ </a>
728
+
729
+ <nav class="md-nav" aria-label="登记与协议 (foundation.contracts.registry-protocol)">
730
+ <ul class="md-nav__list">
731
+
732
+ <li class="md-nav__item">
733
+ <a href="#loadRegistry--listSchemas--listProtocols--findSchemaRegistration--findSchemaByObject--findProtocol" class="md-nav__link">
734
+ <span class="md-ellipsis">
735
+
736
+ loadRegistry / listSchemas / listProtocols / findSchemaRegistration / findSchemaByObject / findProtocol
737
+
738
+ </span>
739
+ </a>
740
+
741
+ </li>
742
+
743
+ <li class="md-nav__item">
744
+ <a href="#registerSchema--registerProtocol" class="md-nav__link">
745
+ <span class="md-ellipsis">
746
+
747
+ registerSchema / registerProtocol
748
+
749
+ </span>
750
+ </a>
751
+
752
+ </li>
753
+
754
+ </ul>
755
+ </nav>
756
+
757
+ </li>
758
+
759
+ <li class="md-nav__item">
760
+ <a href="#内核协议-foundationcontractskernel-protocol" class="md-nav__link">
761
+ <span class="md-ellipsis">
762
+
763
+ 内核协议 (foundation.contracts.kernel-protocol)
764
+
765
+ </span>
766
+ </a>
767
+
768
+ <nav class="md-nav" aria-label="内核协议 (foundation.contracts.kernel-protocol)">
769
+ <ul class="md-nav__list">
770
+
771
+ <li class="md-nav__item">
772
+ <a href="#loadKernelProtocol--findOperation--checkOperation" class="md-nav__link">
773
+ <span class="md-ellipsis">
774
+
775
+ loadKernelProtocol / findOperation / checkOperation
776
+
777
+ </span>
778
+ </a>
779
+
780
+ </li>
781
+
782
+ </ul>
783
+ </nav>
784
+
785
+ </li>
786
+
787
+ <li class="md-nav__item">
788
+ <a href="#强制检查-foundationcontractsmandatory-checks" class="md-nav__link">
789
+ <span class="md-ellipsis">
790
+
791
+ 强制检查 (foundation.contracts.mandatory-checks)
792
+
793
+ </span>
794
+ </a>
795
+
796
+ <nav class="md-nav" aria-label="强制检查 (foundation.contracts.mandatory-checks)">
797
+ <ul class="md-nav__list">
798
+
799
+ <li class="md-nav__item">
800
+ <a href="#runChecks--collectUnresolvedRefs" class="md-nav__link">
801
+ <span class="md-ellipsis">
802
+
803
+ runChecks / collectUnresolvedRefs
804
+
805
+ </span>
806
+ </a>
807
+
808
+ </li>
809
+
810
+ </ul>
811
+ </nav>
812
+
813
+ </li>
814
+
815
+ <li class="md-nav__item">
816
+ <a href="#fixture-校验-foundationcontractsfixture-verification" class="md-nav__link">
817
+ <span class="md-ellipsis">
818
+
819
+ fixture 校验 (foundation.contracts.fixture-verification)
820
+
821
+ </span>
822
+ </a>
823
+
824
+ <nav class="md-nav" aria-label="fixture 校验 (foundation.contracts.fixture-verification)">
825
+ <ul class="md-nav__list">
826
+
827
+ <li class="md-nav__item">
828
+ <a href="#listFixtures--fixtureClasses--verifyFixture--verifyAllFixtures" class="md-nav__link">
829
+ <span class="md-ellipsis">
830
+
831
+ listFixtures / fixtureClasses / verifyFixture / verifyAllFixtures
832
+
833
+ </span>
834
+ </a>
835
+
836
+ </li>
837
+
838
+ </ul>
839
+ </nav>
840
+
841
+ </li>
842
+
843
+ <li class="md-nav__item">
844
+ <a href="#错误码-foundationcontractserror-codes" class="md-nav__link">
845
+ <span class="md-ellipsis">
846
+
847
+ 错误码 (foundation.contracts.error-codes)
848
+
849
+ </span>
850
+ </a>
851
+
852
+ <nav class="md-nav" aria-label="错误码 (foundation.contracts.error-codes)">
853
+ <ul class="md-nav__list">
854
+
855
+ <li class="md-nav__item">
856
+ <a href="#ContractsError--errorCodeRegistry--errorCodeInfo--isRegisteredErrorCode--assertRegisteredErrorCode--stableError" class="md-nav__link">
857
+ <span class="md-ellipsis">
858
+
859
+ ContractsError / errorCodeRegistry / errorCodeInfo / isRegisteredErrorCode / assertRegisteredErrorCode / stableError
860
+
861
+ </span>
862
+ </a>
863
+
864
+ </li>
865
+
866
+ </ul>
867
+ </nav>
868
+
869
+ </li>
870
+
871
+ <li class="md-nav__item">
872
+ <a href="#审计表面-foundationcontractsaudit-surface" class="md-nav__link">
873
+ <span class="md-ellipsis">
874
+
875
+ 审计表面 (foundation.contracts.audit-surface)
876
+
877
+ </span>
878
+ </a>
879
+
880
+ <nav class="md-nav" aria-label="审计表面 (foundation.contracts.audit-surface)">
881
+ <ul class="md-nav__list">
882
+
883
+ <li class="md-nav__item">
884
+ <a href="#canonicalJson--digestDocument--describeAuditSurface--digestAuditSurface" class="md-nav__link">
885
+ <span class="md-ellipsis">
886
+
887
+ canonicalJson / digestDocument / describeAuditSurface / digestAuditSurface
888
+
889
+ </span>
890
+ </a>
891
+
892
+ </li>
893
+
894
+ </ul>
895
+ </nav>
896
+
897
+ </li>
898
+
899
+ <li class="md-nav__item">
900
+ <a href="#Quickstart-Profile-v2-candidate" class="md-nav__link">
901
+ <span class="md-ellipsis">
902
+
903
+ Quickstart Profile v2 candidate
904
+
905
+ </span>
906
+ </a>
907
+
908
+ </li>
909
+
910
+ <li class="md-nav__item">
911
+ <a href="#与机器事实层的互链" class="md-nav__link">
912
+ <span class="md-ellipsis">
913
+
914
+ 与机器事实层的互链
915
+
916
+ </span>
917
+ </a>
918
+
919
+ </li>
920
+
921
+ </ul>
922
+
923
+ </nav>
924
+
925
+ </li>
926
+
927
+
928
+
929
+
930
+
931
+
932
+
933
+
934
+
935
+ <li class="md-nav__item">
936
+ <a href="../harness/" class="md-nav__link">
937
+
938
+
939
+
940
+ <span class="md-ellipsis">
941
+
942
+
943
+ 中文 · Harness API
944
+
945
+
946
+
947
+ </span>
948
+
949
+
950
+
951
+ </a>
952
+ </li>
953
+
954
+
955
+
956
+
957
+
958
+
959
+
960
+
961
+
962
+ <li class="md-nav__item">
963
+ <a href="../engineering-kit/" class="md-nav__link">
964
+
965
+
966
+
967
+ <span class="md-ellipsis">
968
+
969
+
970
+ 中文 · Engineering Kit API
971
+
972
+
973
+
974
+ </span>
975
+
976
+
977
+
978
+ </a>
979
+ </li>
980
+
981
+
982
+
983
+
984
+
985
+
986
+
987
+
988
+
989
+ <li class="md-nav__item">
990
+ <a href="../../../examples-and-fixtures/" class="md-nav__link">
991
+
992
+
993
+
994
+ <span class="md-ellipsis">
995
+
996
+
997
+ 中文 · 样例与 Fixture
998
+
999
+
1000
+
1001
+ </span>
1002
+
1003
+
1004
+
1005
+ </a>
1006
+ </li>
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+ <li class="md-nav__item">
1017
+ <a href="../../../recipes/" class="md-nav__link">
1018
+
1019
+
1020
+
1021
+ <span class="md-ellipsis">
1022
+
1023
+
1024
+ 中文 · Recipes
1025
+
1026
+
1027
+
1028
+ </span>
1029
+
1030
+
1031
+
1032
+ </a>
1033
+ </li>
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+
1041
+
1042
+
1043
+ <li class="md-nav__item">
1044
+ <a href="../../../recipes/adopt-existing-repository/" class="md-nav__link">
1045
+
1046
+
1047
+
1048
+ <span class="md-ellipsis">
1049
+
1050
+
1051
+ 中文 · 采用存量仓库
1052
+
1053
+
1054
+
1055
+ </span>
1056
+
1057
+
1058
+
1059
+ </a>
1060
+ </li>
1061
+
1062
+
1063
+
1064
+
1065
+
1066
+
1067
+
1068
+
1069
+
1070
+ <li class="md-nav__item">
1071
+ <a href="../../../recipes/safe-filesystem-and-atomic-write/" class="md-nav__link">
1072
+
1073
+
1074
+
1075
+ <span class="md-ellipsis">
1076
+
1077
+
1078
+ 中文 · 安全文件系统与原子写
1079
+
1080
+
1081
+
1082
+ </span>
1083
+
1084
+
1085
+
1086
+ </a>
1087
+ </li>
1088
+
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+
1097
+ <li class="md-nav__item">
1098
+ <a href="../../../recipes/adapter-text-closure/" class="md-nav__link">
1099
+
1100
+
1101
+
1102
+ <span class="md-ellipsis">
1103
+
1104
+
1105
+ 中文 · Adapter 文本闭包
1106
+
1107
+
1108
+
1109
+ </span>
1110
+
1111
+
1112
+
1113
+ </a>
1114
+ </li>
1115
+
1116
+
1117
+
1118
+
1119
+
1120
+
1121
+
1122
+
1123
+
1124
+ <li class="md-nav__item">
1125
+ <a href="../../../recipes/deterministic-human-report/" class="md-nav__link">
1126
+
1127
+
1128
+
1129
+ <span class="md-ellipsis">
1130
+
1131
+
1132
+ 中文 · 确定性人类报告
1133
+
1134
+
1135
+
1136
+ </span>
1137
+
1138
+
1139
+
1140
+ </a>
1141
+ </li>
1142
+
1143
+
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+ <li class="md-nav__item">
1152
+ <a href="../../../recipes/durable-local-state/" class="md-nav__link">
1153
+
1154
+
1155
+
1156
+ <span class="md-ellipsis">
1157
+
1158
+
1159
+ 中文 · 持久本地状态
1160
+
1161
+
1162
+
1163
+ </span>
1164
+
1165
+
1166
+
1167
+ </a>
1168
+ </li>
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+ <li class="md-nav__item">
1179
+ <a href="../../../recipes/host-profile-integration/" class="md-nav__link">
1180
+
1181
+
1182
+
1183
+ <span class="md-ellipsis">
1184
+
1185
+
1186
+ 中文 · 宿主 Profile 集成
1187
+
1188
+
1189
+
1190
+ </span>
1191
+
1192
+
1193
+
1194
+ </a>
1195
+ </li>
1196
+
1197
+
1198
+
1199
+
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+ <li class="md-nav__item">
1206
+ <a href="../../../recipes/domain-schema-validation/" class="md-nav__link">
1207
+
1208
+
1209
+
1210
+ <span class="md-ellipsis">
1211
+
1212
+
1213
+ 中文 · 领域 Schema 校验
1214
+
1215
+
1216
+
1217
+ </span>
1218
+
1219
+
1220
+
1221
+ </a>
1222
+ </li>
1223
+
1224
+
1225
+
1226
+
1227
+
1228
+
1229
+
1230
+
1231
+
1232
+ <li class="md-nav__item">
1233
+ <a href="../../../en/" class="md-nav__link">
1234
+
1235
+
1236
+
1237
+ <span class="md-ellipsis">
1238
+
1239
+
1240
+ English · Home
1241
+
1242
+
1243
+
1244
+ </span>
1245
+
1246
+
1247
+
1248
+ </a>
1249
+ </li>
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+ <li class="md-nav__item">
1260
+ <a href="../../../en/quickstart/" class="md-nav__link">
1261
+
1262
+
1263
+
1264
+ <span class="md-ellipsis">
1265
+
1266
+
1267
+ English · Quickstart
1268
+
1269
+
1270
+
1271
+ </span>
1272
+
1273
+
1274
+
1275
+ </a>
1276
+ </li>
1277
+
1278
+
1279
+
1280
+
1281
+
1282
+
1283
+
1284
+
1285
+
1286
+ <li class="md-nav__item">
1287
+ <a href="../../../en/help/" class="md-nav__link">
1288
+
1289
+
1290
+
1291
+ <span class="md-ellipsis">
1292
+
1293
+
1294
+ English · Capabilities and diagnostics
1295
+
1296
+
1297
+
1298
+ </span>
1299
+
1300
+
1301
+
1302
+ </a>
1303
+ </li>
1304
+
1305
+
1306
+
1307
+
1308
+
1309
+
1310
+
1311
+
1312
+
1313
+ <li class="md-nav__item">
1314
+ <a href="../../../en/architecture/" class="md-nav__link">
1315
+
1316
+
1317
+
1318
+ <span class="md-ellipsis">
1319
+
1320
+
1321
+ English · Architecture
1322
+
1323
+
1324
+
1325
+ </span>
1326
+
1327
+
1328
+
1329
+ </a>
1330
+ </li>
1331
+
1332
+
1333
+
1334
+
1335
+
1336
+
1337
+
1338
+
1339
+
1340
+ <li class="md-nav__item">
1341
+ <a href="../../../en/migration/" class="md-nav__link">
1342
+
1343
+
1344
+
1345
+ <span class="md-ellipsis">
1346
+
1347
+
1348
+ English · Migration
1349
+
1350
+
1351
+
1352
+ </span>
1353
+
1354
+
1355
+
1356
+ </a>
1357
+ </li>
1358
+
1359
+
1360
+
1361
+
1362
+
1363
+
1364
+
1365
+
1366
+
1367
+ <li class="md-nav__item">
1368
+ <a href="../../../en/licensing/" class="md-nav__link">
1369
+
1370
+
1371
+
1372
+ <span class="md-ellipsis">
1373
+
1374
+
1375
+ English · Licensing
1376
+
1377
+
1378
+
1379
+ </span>
1380
+
1381
+
1382
+
1383
+ </a>
1384
+ </li>
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+
1391
+
1392
+
1393
+
1394
+ <li class="md-nav__item">
1395
+ <a href="../../../en/agents/" class="md-nav__link">
1396
+
1397
+
1398
+
1399
+ <span class="md-ellipsis">
1400
+
1401
+
1402
+ English · Agent entry
1403
+
1404
+
1405
+
1406
+ </span>
1407
+
1408
+
1409
+
1410
+ </a>
1411
+ </li>
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+ <li class="md-nav__item">
1422
+ <a href="../../../en/agents/architecture-routing/" class="md-nav__link">
1423
+
1424
+
1425
+
1426
+ <span class="md-ellipsis">
1427
+
1428
+
1429
+ English · Architecture routing
1430
+
1431
+
1432
+
1433
+ </span>
1434
+
1435
+
1436
+
1437
+ </a>
1438
+ </li>
1439
+
1440
+
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+ <li class="md-nav__item">
1449
+ <a href="../../../en/reference/compatibility/" class="md-nav__link">
1450
+
1451
+
1452
+
1453
+ <span class="md-ellipsis">
1454
+
1455
+
1456
+ English · Compatibility
1457
+
1458
+
1459
+
1460
+ </span>
1461
+
1462
+
1463
+
1464
+ </a>
1465
+ </li>
1466
+
1467
+
1468
+
1469
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+ <li class="md-nav__item">
1476
+ <a href="../../../en/reference/failure-and-side-effect-matrix/" class="md-nav__link">
1477
+
1478
+
1479
+
1480
+ <span class="md-ellipsis">
1481
+
1482
+
1483
+ English · Failures and side effects
1484
+
1485
+
1486
+
1487
+ </span>
1488
+
1489
+
1490
+
1491
+ </a>
1492
+ </li>
1493
+
1494
+
1495
+
1496
+
1497
+
1498
+
1499
+
1500
+
1501
+
1502
+ <li class="md-nav__item">
1503
+ <a href="../../../en/reference/api/" class="md-nav__link">
1504
+
1505
+
1506
+
1507
+ <span class="md-ellipsis">
1508
+
1509
+
1510
+ English · API reference
1511
+
1512
+
1513
+
1514
+ </span>
1515
+
1516
+
1517
+
1518
+ </a>
1519
+ </li>
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1527
+
1528
+
1529
+ <li class="md-nav__item">
1530
+ <a href="../../../en/examples-and-fixtures/" class="md-nav__link">
1531
+
1532
+
1533
+
1534
+ <span class="md-ellipsis">
1535
+
1536
+
1537
+ English · Examples and fixtures
1538
+
1539
+
1540
+
1541
+ </span>
1542
+
1543
+
1544
+
1545
+ </a>
1546
+ </li>
1547
+
1548
+
1549
+
1550
+
1551
+
1552
+
1553
+
1554
+
1555
+
1556
+ <li class="md-nav__item">
1557
+ <a href="../../../en/recipes/" class="md-nav__link">
1558
+
1559
+
1560
+
1561
+ <span class="md-ellipsis">
1562
+
1563
+
1564
+ English · Recipes
1565
+
1566
+
1567
+
1568
+ </span>
1569
+
1570
+
1571
+
1572
+ </a>
1573
+ </li>
1574
+
1575
+
1576
+
1577
+
1578
+
1579
+
1580
+
1581
+
1582
+
1583
+ <li class="md-nav__item">
1584
+ <a href="../../../en/recipes/adopt-existing-repository/" class="md-nav__link">
1585
+
1586
+
1587
+
1588
+ <span class="md-ellipsis">
1589
+
1590
+
1591
+ English · Adopt an existing repository
1592
+
1593
+
1594
+
1595
+ </span>
1596
+
1597
+
1598
+
1599
+ </a>
1600
+ </li>
1601
+
1602
+
1603
+
1604
+
1605
+
1606
+
1607
+
1608
+
1609
+
1610
+ <li class="md-nav__item">
1611
+ <a href="../../../en/recipes/safe-filesystem-and-atomic-write/" class="md-nav__link">
1612
+
1613
+
1614
+
1615
+ <span class="md-ellipsis">
1616
+
1617
+
1618
+ English · Safe filesystem and atomic write
1619
+
1620
+
1621
+
1622
+ </span>
1623
+
1624
+
1625
+
1626
+ </a>
1627
+ </li>
1628
+
1629
+
1630
+
1631
+
1632
+
1633
+
1634
+
1635
+
1636
+
1637
+ <li class="md-nav__item">
1638
+ <a href="../../../en/recipes/adapter-text-closure/" class="md-nav__link">
1639
+
1640
+
1641
+
1642
+ <span class="md-ellipsis">
1643
+
1644
+
1645
+ English · Adapter text closure
1646
+
1647
+
1648
+
1649
+ </span>
1650
+
1651
+
1652
+
1653
+ </a>
1654
+ </li>
1655
+
1656
+
1657
+
1658
+
1659
+
1660
+
1661
+
1662
+
1663
+
1664
+ <li class="md-nav__item">
1665
+ <a href="../../../en/recipes/deterministic-human-report/" class="md-nav__link">
1666
+
1667
+
1668
+
1669
+ <span class="md-ellipsis">
1670
+
1671
+
1672
+ English · Deterministic human report
1673
+
1674
+
1675
+
1676
+ </span>
1677
+
1678
+
1679
+
1680
+ </a>
1681
+ </li>
1682
+
1683
+
1684
+
1685
+
1686
+
1687
+
1688
+
1689
+
1690
+
1691
+ <li class="md-nav__item">
1692
+ <a href="../../../en/recipes/durable-local-state/" class="md-nav__link">
1693
+
1694
+
1695
+
1696
+ <span class="md-ellipsis">
1697
+
1698
+
1699
+ English · Durable local state
1700
+
1701
+
1702
+
1703
+ </span>
1704
+
1705
+
1706
+
1707
+ </a>
1708
+ </li>
1709
+
1710
+
1711
+
1712
+
1713
+
1714
+
1715
+
1716
+
1717
+
1718
+ <li class="md-nav__item">
1719
+ <a href="../../../en/recipes/host-profile-integration/" class="md-nav__link">
1720
+
1721
+
1722
+
1723
+ <span class="md-ellipsis">
1724
+
1725
+
1726
+ English · Host Profile integration
1727
+
1728
+
1729
+
1730
+ </span>
1731
+
1732
+
1733
+
1734
+ </a>
1735
+ </li>
1736
+
1737
+
1738
+
1739
+
1740
+
1741
+
1742
+
1743
+
1744
+
1745
+ <li class="md-nav__item">
1746
+ <a href="../../../en/recipes/domain-schema-validation/" class="md-nav__link">
1747
+
1748
+
1749
+
1750
+ <span class="md-ellipsis">
1751
+
1752
+
1753
+ English · Domain Schema validation
1754
+
1755
+
1756
+
1757
+ </span>
1758
+
1759
+
1760
+
1761
+ </a>
1762
+ </li>
1763
+
1764
+
1765
+
1766
+
1767
+
1768
+
1769
+
1770
+
1771
+
1772
+ <li class="md-nav__item">
1773
+ <a href="../../../integration/audit/" class="md-nav__link">
1774
+
1775
+
1776
+
1777
+ <span class="md-ellipsis">
1778
+
1779
+
1780
+ 审计集成 · 入口
1781
+
1782
+
1783
+
1784
+ </span>
1785
+
1786
+
1787
+
1788
+ </a>
1789
+ </li>
1790
+
1791
+
1792
+
1793
+
1794
+
1795
+
1796
+
1797
+
1798
+
1799
+ <li class="md-nav__item">
1800
+ <a href="../../../integration/audit/mutation-taxonomy/" class="md-nav__link">
1801
+
1802
+
1803
+
1804
+ <span class="md-ellipsis">
1805
+
1806
+
1807
+ 审计集成 · 变异分类学
1808
+
1809
+
1810
+
1811
+ </span>
1812
+
1813
+
1814
+
1815
+ </a>
1816
+ </li>
1817
+
1818
+
1819
+
1820
+
1821
+
1822
+
1823
+
1824
+
1825
+
1826
+ <li class="md-nav__item">
1827
+ <a href="../../../integration/audit/independence/" class="md-nav__link">
1828
+
1829
+
1830
+
1831
+ <span class="md-ellipsis">
1832
+
1833
+
1834
+ 审计集成 · 独立性证明
1835
+
1836
+
1837
+
1838
+ </span>
1839
+
1840
+
1841
+
1842
+ </a>
1843
+ </li>
1844
+
1845
+
1846
+
1847
+
1848
+
1849
+
1850
+
1851
+
1852
+
1853
+ <li class="md-nav__item">
1854
+ <a href="../../../integration/audit/version-compatibility/" class="md-nav__link">
1855
+
1856
+
1857
+
1858
+ <span class="md-ellipsis">
1859
+
1860
+
1861
+ 审计集成 · 版本兼容
1862
+
1863
+
1864
+
1865
+ </span>
1866
+
1867
+
1868
+
1869
+ </a>
1870
+ </li>
1871
+
1872
+
1873
+
1874
+
1875
+
1876
+
1877
+
1878
+
1879
+
1880
+ <li class="md-nav__item">
1881
+ <a href="../../../integration/audit/failure-evidence/" class="md-nav__link">
1882
+
1883
+
1884
+
1885
+ <span class="md-ellipsis">
1886
+
1887
+
1888
+ 审计集成 · 失败证据与 AUD 码
1889
+
1890
+
1891
+
1892
+ </span>
1893
+
1894
+
1895
+
1896
+ </a>
1897
+ </li>
1898
+
1899
+
1900
+
1901
+ </ul>
1902
+ </nav>
1903
+ </div>
1904
+ </div>
1905
+ </div>
1906
+
1907
+
1908
+
1909
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
1910
+ <div class="md-sidebar__scrollwrap">
1911
+ <div class="md-sidebar__inner">
1912
+
1913
+
1914
+ <nav class="md-nav md-nav--secondary" aria-label="目录">
1915
+
1916
+
1917
+
1918
+
1919
+
1920
+
1921
+ <label class="md-nav__title" for="__toc">
1922
+ <span class="md-nav__icon md-icon"></span>
1923
+ 目录
1924
+ </label>
1925
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
1926
+
1927
+ <li class="md-nav__item">
1928
+ <a href="#对象校验-foundationcontractsobject-validation" class="md-nav__link">
1929
+ <span class="md-ellipsis">
1930
+
1931
+ 对象校验 (foundation.contracts.object-validation)
1932
+
1933
+ </span>
1934
+ </a>
1935
+
1936
+ <nav class="md-nav" aria-label="对象校验 (foundation.contracts.object-validation)">
1937
+ <ul class="md-nav__list">
1938
+
1939
+ <li class="md-nav__item">
1940
+ <a href="#validateDocument" class="md-nav__link">
1941
+ <span class="md-ellipsis">
1942
+
1943
+ validateDocument
1944
+
1945
+ </span>
1946
+ </a>
1947
+
1948
+ </li>
1949
+
1950
+ <li class="md-nav__item">
1951
+ <a href="#compileSchema" class="md-nav__link">
1952
+ <span class="md-ellipsis">
1953
+
1954
+ compileSchema
1955
+
1956
+ </span>
1957
+ </a>
1958
+
1959
+ </li>
1960
+
1961
+ <li class="md-nav__item">
1962
+ <a href="#detectDialect" class="md-nav__link">
1963
+ <span class="md-ellipsis">
1964
+
1965
+ detectDialect
1966
+
1967
+ </span>
1968
+ </a>
1969
+
1970
+ </li>
1971
+
1972
+ </ul>
1973
+ </nav>
1974
+
1975
+ </li>
1976
+
1977
+ <li class="md-nav__item">
1978
+ <a href="#登记与协议-foundationcontractsregistry-protocol" class="md-nav__link">
1979
+ <span class="md-ellipsis">
1980
+
1981
+ 登记与协议 (foundation.contracts.registry-protocol)
1982
+
1983
+ </span>
1984
+ </a>
1985
+
1986
+ <nav class="md-nav" aria-label="登记与协议 (foundation.contracts.registry-protocol)">
1987
+ <ul class="md-nav__list">
1988
+
1989
+ <li class="md-nav__item">
1990
+ <a href="#loadRegistry--listSchemas--listProtocols--findSchemaRegistration--findSchemaByObject--findProtocol" class="md-nav__link">
1991
+ <span class="md-ellipsis">
1992
+
1993
+ loadRegistry / listSchemas / listProtocols / findSchemaRegistration / findSchemaByObject / findProtocol
1994
+
1995
+ </span>
1996
+ </a>
1997
+
1998
+ </li>
1999
+
2000
+ <li class="md-nav__item">
2001
+ <a href="#registerSchema--registerProtocol" class="md-nav__link">
2002
+ <span class="md-ellipsis">
2003
+
2004
+ registerSchema / registerProtocol
2005
+
2006
+ </span>
2007
+ </a>
2008
+
2009
+ </li>
2010
+
2011
+ </ul>
2012
+ </nav>
2013
+
2014
+ </li>
2015
+
2016
+ <li class="md-nav__item">
2017
+ <a href="#内核协议-foundationcontractskernel-protocol" class="md-nav__link">
2018
+ <span class="md-ellipsis">
2019
+
2020
+ 内核协议 (foundation.contracts.kernel-protocol)
2021
+
2022
+ </span>
2023
+ </a>
2024
+
2025
+ <nav class="md-nav" aria-label="内核协议 (foundation.contracts.kernel-protocol)">
2026
+ <ul class="md-nav__list">
2027
+
2028
+ <li class="md-nav__item">
2029
+ <a href="#loadKernelProtocol--findOperation--checkOperation" class="md-nav__link">
2030
+ <span class="md-ellipsis">
2031
+
2032
+ loadKernelProtocol / findOperation / checkOperation
2033
+
2034
+ </span>
2035
+ </a>
2036
+
2037
+ </li>
2038
+
2039
+ </ul>
2040
+ </nav>
2041
+
2042
+ </li>
2043
+
2044
+ <li class="md-nav__item">
2045
+ <a href="#强制检查-foundationcontractsmandatory-checks" class="md-nav__link">
2046
+ <span class="md-ellipsis">
2047
+
2048
+ 强制检查 (foundation.contracts.mandatory-checks)
2049
+
2050
+ </span>
2051
+ </a>
2052
+
2053
+ <nav class="md-nav" aria-label="强制检查 (foundation.contracts.mandatory-checks)">
2054
+ <ul class="md-nav__list">
2055
+
2056
+ <li class="md-nav__item">
2057
+ <a href="#runChecks--collectUnresolvedRefs" class="md-nav__link">
2058
+ <span class="md-ellipsis">
2059
+
2060
+ runChecks / collectUnresolvedRefs
2061
+
2062
+ </span>
2063
+ </a>
2064
+
2065
+ </li>
2066
+
2067
+ </ul>
2068
+ </nav>
2069
+
2070
+ </li>
2071
+
2072
+ <li class="md-nav__item">
2073
+ <a href="#fixture-校验-foundationcontractsfixture-verification" class="md-nav__link">
2074
+ <span class="md-ellipsis">
2075
+
2076
+ fixture 校验 (foundation.contracts.fixture-verification)
2077
+
2078
+ </span>
2079
+ </a>
2080
+
2081
+ <nav class="md-nav" aria-label="fixture 校验 (foundation.contracts.fixture-verification)">
2082
+ <ul class="md-nav__list">
2083
+
2084
+ <li class="md-nav__item">
2085
+ <a href="#listFixtures--fixtureClasses--verifyFixture--verifyAllFixtures" class="md-nav__link">
2086
+ <span class="md-ellipsis">
2087
+
2088
+ listFixtures / fixtureClasses / verifyFixture / verifyAllFixtures
2089
+
2090
+ </span>
2091
+ </a>
2092
+
2093
+ </li>
2094
+
2095
+ </ul>
2096
+ </nav>
2097
+
2098
+ </li>
2099
+
2100
+ <li class="md-nav__item">
2101
+ <a href="#错误码-foundationcontractserror-codes" class="md-nav__link">
2102
+ <span class="md-ellipsis">
2103
+
2104
+ 错误码 (foundation.contracts.error-codes)
2105
+
2106
+ </span>
2107
+ </a>
2108
+
2109
+ <nav class="md-nav" aria-label="错误码 (foundation.contracts.error-codes)">
2110
+ <ul class="md-nav__list">
2111
+
2112
+ <li class="md-nav__item">
2113
+ <a href="#ContractsError--errorCodeRegistry--errorCodeInfo--isRegisteredErrorCode--assertRegisteredErrorCode--stableError" class="md-nav__link">
2114
+ <span class="md-ellipsis">
2115
+
2116
+ ContractsError / errorCodeRegistry / errorCodeInfo / isRegisteredErrorCode / assertRegisteredErrorCode / stableError
2117
+
2118
+ </span>
2119
+ </a>
2120
+
2121
+ </li>
2122
+
2123
+ </ul>
2124
+ </nav>
2125
+
2126
+ </li>
2127
+
2128
+ <li class="md-nav__item">
2129
+ <a href="#审计表面-foundationcontractsaudit-surface" class="md-nav__link">
2130
+ <span class="md-ellipsis">
2131
+
2132
+ 审计表面 (foundation.contracts.audit-surface)
2133
+
2134
+ </span>
2135
+ </a>
2136
+
2137
+ <nav class="md-nav" aria-label="审计表面 (foundation.contracts.audit-surface)">
2138
+ <ul class="md-nav__list">
2139
+
2140
+ <li class="md-nav__item">
2141
+ <a href="#canonicalJson--digestDocument--describeAuditSurface--digestAuditSurface" class="md-nav__link">
2142
+ <span class="md-ellipsis">
2143
+
2144
+ canonicalJson / digestDocument / describeAuditSurface / digestAuditSurface
2145
+
2146
+ </span>
2147
+ </a>
2148
+
2149
+ </li>
2150
+
2151
+ </ul>
2152
+ </nav>
2153
+
2154
+ </li>
2155
+
2156
+ <li class="md-nav__item">
2157
+ <a href="#Quickstart-Profile-v2-candidate" class="md-nav__link">
2158
+ <span class="md-ellipsis">
2159
+
2160
+ Quickstart Profile v2 candidate
2161
+
2162
+ </span>
2163
+ </a>
2164
+
2165
+ </li>
2166
+
2167
+ <li class="md-nav__item">
2168
+ <a href="#与机器事实层的互链" class="md-nav__link">
2169
+ <span class="md-ellipsis">
2170
+
2171
+ 与机器事实层的互链
2172
+
2173
+ </span>
2174
+ </a>
2175
+
2176
+ </li>
2177
+
2178
+ </ul>
2179
+
2180
+ </nav>
2181
+ </div>
2182
+ </div>
2183
+ </div>
2184
+
2185
+
2186
+
2187
+ <div class="md-content" data-md-component="content">
2188
+
2189
+ <article class="md-content__inner md-typeset">
2190
+
2191
+
2192
+
2193
+
2194
+
2195
+ <h1 id="skill-family-contracts-公共-API-参考">skill-family-contracts 公共 API 参考<a class="headerlink" href="#skill-family-contracts-公共-API-参考" title="Permanent link">&para;</a></h1>
2196
+ <p>本页从真实导出(<code>src/index.mjs</code> 与各源模块)核对,不手写无法证明新鲜度的全集。每个公共入口按 hand-off §4.3 说明:签名、输入与输出、是否纯函数、文件/进程/Git/网络副作用、稳定错误码与 <code>details.kind</code>、前置条件与信任锚、<code>since</code> 与 <code>stability</code>、源文件与正例/负例测试、调用方仍拥有的业务语义。</p>
2197
+ <p>能力分组(与 <code>docs/agents/capability-catalog.json</code> 对应):</p>
2198
+ <ul>
2199
+ <li><a href="#对象校验-foundationcontractsobject-validation">对象校验</a> → <code>validateDocument</code> / <code>compileSchema</code> / <code>detectDialect</code></li>
2200
+ <li><a href="#登记与协议-foundationcontractsregistry-protocol">登记与协议</a> → <code>loadRegistry</code> / <code>findSchemaByObject</code> / <code>findProtocol</code> / <code>registerSchema</code> / <code>registerProtocol</code></li>
2201
+ <li><a href="#内核协议-foundationcontractskernel-protocol">内核协议</a> → <code>loadKernelProtocol</code> / <code>findOperation</code> / <code>checkOperation</code></li>
2202
+ <li><a href="#强制检查-foundationcontractsmandatory-checks">强制检查</a> → <code>runChecks</code> / <code>collectUnresolvedRefs</code></li>
2203
+ <li><a href="#fixture-校验-foundationcontractsfixture-verification">fixture 校验</a> → <code>listFixtures</code> / <code>verifyFixture</code> / <code>verifyAllFixtures</code></li>
2204
+ <li><a href="#错误码-foundationcontractserror-codes">错误码</a> → <code>ContractsError</code> / <code>isRegisteredErrorCode</code> / <code>stableError</code></li>
2205
+ <li><a href="#审计表面-foundationcontractsaudit-surface">审计表面</a> → <code>canonicalJson</code> / <code>digestDocument</code> / <code>digestAuditSurface</code></li>
2206
+ </ul>
2207
+ <p>包级常量(冻结,仅作事实投影,不另立权威):<code>CONTRACT_OBJECTS</code>(18 类顶层对象,闭集)、<code>CONTRACT_BOUNDARY</code>、<code>CONTRACTS_VERSION = "1.4.0"</code>、<code>SUPPORTED_DIALECTS</code>、<code>VALIDATION_POLICIES</code>、<code>CHECK_TYPES</code>(9 类机械检查)、<code>MANDATORY_RULES</code>、<code>RULE_BUDGET</code>、<code>ERROR_CODES</code>。</p>
2208
+ <hr />
2209
+ <h2 id="对象校验-foundationcontractsobject-validation">对象校验 (foundation.contracts.object-validation)<a class="headerlink" href="#对象校验-foundationcontractsobject-validation" title="Permanent link">&para;</a></h2>
2210
+ <h3 id="validateDocument">validateDocument<a class="headerlink" href="#validateDocument" title="Permanent link">&para;</a></h3>
2211
+ <ul>
2212
+ <li>签名:<code>validateDocument(document, { schemaId, schema, dialect, policy = "strict" } = {})</code></li>
2213
+ <li>输入:任意 JSON 文档;目标契约对象 <code>$id</code> 或 schema 对象;方言(<code>draft-07</code> / <code>2020-12</code>);策略(<code>strict</code> | <code>tolerant</code>)。</li>
2214
+ <li>输出:校验通过返回 <code>{valid:true}</code>(不含 <code>errorCode</code>);失败返回 <code>{valid:false, errorCode, errors}</code>,<strong>不抛出</strong>(已实测:未知 <code>$id</code> 返回 <code>SFC1002</code>,文档不符返回 <code>SFC1001</code>)。</li>
2215
+ <li>纯函数:是。仅读取进程内 Ajv 编译缓存,不触外部资源。</li>
2216
+ <li>副作用:无文件/Git/网络/进程副作用;首次编译写入内存编译缓存,后续同 <code>(schemaId,dialect,policy)</code> 复用。</li>
2217
+ <li>稳定错误码与 <code>details.kind</code>:<code>SFC1002</code>(未知 <code>$id</code>)、<code>SFC1001</code>(文档不符 Schema)。两者均经返回值 <code>errorCode</code> 表达,调用方以 <code>valid</code> 字段判断成败,不以 <code>try/catch</code> 捕获。</li>
2218
+ <li>前置条件与信任锚:待校验文档带已登记契约对象 <code>$id</code>;Node &gt;= 22.22.2;校验器固定为 Ajv 8.20.0。</li>
2219
+ <li><code>since</code> / <code>stability</code>:<code>0.2.0</code> / <code>stable</code>。</li>
2220
+ <li>源文件:<code>packages/skill-family-contracts/src/validator.mjs</code>。</li>
2221
+ <li>正例测试:<code>packages/skill-family-contracts/test/validator.test.mjs</code>、<code>schemas.test.mjs</code>、<code>host-contracts.test.mjs</code>、<code>report-contracts.test.mjs</code>。</li>
2222
+ <li>负例测试:同上(未知 <code>$id</code> 与不符 Schema 均返回 <code>valid:false</code>)。</li>
2223
+ <li>调用方仍拥有的业务语义:具体业务字段的语义解释、领域级校验规则。</li>
2224
+ </ul>
2225
+ <h3 id="compileSchema">compileSchema<a class="headerlink" href="#compileSchema" title="Permanent link">&para;</a></h3>
2226
+ <ul>
2227
+ <li>签名:<code>compileSchema(target, { dialect, policy = "strict" } = {})</code></li>
2228
+ <li>输入:schema 对象或 <code>$id</code>;方言;策略。</li>
2229
+ <li>输出:编译后的 Ajv <code>validate</code> 函数;或抛 <code>ContractsError</code>(<code>SFC1012</code> <code>SCHEMA_COMPILE_FAILED</code>,当 schema 自身无法在声明方言下编译)。</li>
2230
+ <li>纯函数:是。</li>
2231
+ <li>副作用:无外部副作用,仅写入编译缓存。</li>
2232
+ <li>稳定错误码与 <code>details.kind</code>:<code>SFC1012</code>(编译失败,抛异常——与 <code>validateDocument</code> 的返回式失败不同)、<code>SFC1006</code>(未知方言,由 <code>detectDialect</code> 抛)。</li>
2233
+ <li>前置条件与信任锚:Ajv 8.20.0 固定;<code>dialect</code> 属冻结支持集。</li>
2234
+ <li><code>since</code> / <code>stability</code>:<code>0.2.0</code> / <code>stable</code>。</li>
2235
+ <li>源文件:<code>packages/skill-family-contracts/src/validator.mjs</code>。</li>
2236
+ <li>正例/负例测试:同 <code>validateDocument</code>。</li>
2237
+ <li>调用方仍拥有的业务语义:schema 的业务含义。</li>
2238
+ </ul>
2239
+ <h3 id="detectDialect">detectDialect<a class="headerlink" href="#detectDialect" title="Permanent link">&para;</a></h3>
2240
+ <ul>
2241
+ <li>签名:<code>detectDialect(schema)</code></li>
2242
+ <li>输入:带 <code>$schema</code> 字段的 schema 对象。</li>
2243
+ <li>输出:方言字符串(<code>draft-07</code> / <code>2020-12</code>);未知方言抛 <code>ContractsError</code>(<code>SFC1006</code> <code>UNSUPPORTED_DIALECT</code>)。</li>
2244
+ <li>纯函数:是。</li>
2245
+ <li>副作用:无。</li>
2246
+ <li>稳定错误码与 <code>details.kind</code>:<code>SFC1006</code>(声明方言不在冻结支持集)。</li>
2247
+ <li>前置条件与信任锚:方言集冻结(<code>SUPPORTED_DIALECTS</code>)。</li>
2248
+ <li><code>since</code> / <code>stability</code>:<code>0.2.0</code> / <code>stable</code>。</li>
2249
+ <li>源文件:<code>packages/skill-family-contracts/src/validator.mjs</code>。</li>
2250
+ <li>正例/负例测试:同上。</li>
2251
+ <li>调用方仍拥有的业务语义:方言选择策略(何时用 tolerant)。</li>
2252
+ </ul>
2253
+ <hr />
2254
+ <h2 id="登记与协议-foundationcontractsregistry-protocol">登记与协议 (foundation.contracts.registry-protocol)<a class="headerlink" href="#登记与协议-foundationcontractsregistry-protocol" title="Permanent link">&para;</a></h2>
2255
+ <h3 id="loadRegistry--listSchemas--listProtocols--findSchemaRegistration--findSchemaByObject--findProtocol">loadRegistry / listSchemas / listProtocols / findSchemaRegistration / findSchemaByObject / findProtocol<a class="headerlink" href="#loadRegistry--listSchemas--listProtocols--findSchemaRegistration--findSchemaByObject--findProtocol" title="Permanent link">&para;</a></h3>
2256
+ <ul>
2257
+ <li>签名:</li>
2258
+ <li><code>loadRegistry()</code></li>
2259
+ <li><code>listSchemas(registry = REGISTRY)</code></li>
2260
+ <li><code>listProtocols(registry = REGISTRY)</code></li>
2261
+ <li><code>findSchemaRegistration(schemaId, registry = REGISTRY)</code></li>
2262
+ <li><code>findSchemaByObject(object, registry = REGISTRY)</code></li>
2263
+ <li><code>findProtocol(name, version, registry = REGISTRY)</code></li>
2264
+ <li>输入:对象名、<code>$id</code>、协议名/版本(其余默认读冻结 <code>REGISTRY</code>)。</li>
2265
+ <li>输出:已登记 schema 元信息或协议定义;未命中返回 <code>undefined</code>。</li>
2266
+ <li>纯函数:是。</li>
2267
+ <li>副作用:无。</li>
2268
+ <li>稳定错误码与 <code>details.kind</code>:登记类冲突经 <code>registerSchema</code> / <code>registerProtocol</code> 抛 <code>SFC1003</code>(<code>DUPLICATE_SCHEMA_ID</code>)/ <code>SFC1004</code>(<code>DUPLICATE_PROTOCOL_NAME</code>)。</li>
2269
+ <li>前置条件与信任锚:<code>registry.json</code> 随包发布;<code>schemaVersion=1</code>、<code>contractsVersion=1.4.0</code> 为唯一权威;18 类顶层对象集合固定,新增需 ADR。</li>
2270
+ <li><code>since</code> / <code>stability</code>:<code>0.2.0</code> / <code>stable</code>。</li>
2271
+ <li>源文件:<code>packages/skill-family-contracts/src/registry.mjs</code>、<code>registry.json</code>。</li>
2272
+ <li>正例/负例测试:<code>packages/skill-family-contracts/test/registry.test.mjs</code>。</li>
2273
+ <li>调用方仍拥有的业务语义:对象业务含义的解释。</li>
2274
+ </ul>
2275
+ <h3 id="registerSchema--registerProtocol">registerSchema / registerProtocol<a class="headerlink" href="#registerSchema--registerProtocol" title="Permanent link">&para;</a></h3>
2276
+ <ul>
2277
+ <li>签名:</li>
2278
+ <li><code>registerSchema(entry, registry = REGISTRY)</code></li>
2279
+ <li><code>registerProtocol(entry, registry = REGISTRY)</code></li>
2280
+ <li>输入:schema/protocol 登记项。</li>
2281
+ <li>输出:写入后的 registry(默认冻结 <code>REGISTRY</code> 上的副作用);重复 <code>$id</code>/协议名抛 <code>ContractsError</code>。</li>
2282
+ <li>纯函数:否(默认向进程内冻结 registry 登记,属受控内存副作用)。</li>
2283
+ <li>副作用:进程内 registry 变更;不落盘。</li>
2284
+ <li>稳定错误码与 <code>details.kind</code>:<code>SFC1003</code>(重复 <code>$id</code>)、<code>SFC1004</code>(重复协议名)。</li>
2285
+ <li>前置条件与信任锚:18 类对象集与协议名集冻结。</li>
2286
+ <li><code>since</code> / <code>stability</code>:<code>0.2.0</code> / <code>stable</code>。</li>
2287
+ <li>源文件:同上。</li>
2288
+ <li>正例/负例测试:同上。</li>
2289
+ <li>调用方仍拥有的业务语义:登记项的业务理由。</li>
2290
+ </ul>
2291
+ <hr />
2292
+ <h2 id="内核协议-foundationcontractskernel-protocol">内核协议 (foundation.contracts.kernel-protocol)<a class="headerlink" href="#内核协议-foundationcontractskernel-protocol" title="Permanent link">&para;</a></h2>
2293
+ <h3 id="loadKernelProtocol--findOperation--checkOperation">loadKernelProtocol / findOperation / checkOperation<a class="headerlink" href="#loadKernelProtocol--findOperation--checkOperation" title="Permanent link">&para;</a></h3>
2294
+ <ul>
2295
+ <li>签名:</li>
2296
+ <li><code>loadKernelProtocol()</code></li>
2297
+ <li><code>findOperation(name, kernel = KERNEL)</code></li>
2298
+ <li><code>checkOperation(operation, params)</code></li>
2299
+ <li>输入:协议名、操作名、操作参数。</li>
2300
+ <li>输出:协议定义或操作参数校验结果;失败时抛 <code>ContractsError</code>。</li>
2301
+ <li>纯函数:是(加载为只读解析,无外部副作用)。</li>
2302
+ <li>副作用:无。</li>
2303
+ <li>稳定错误码与 <code>details.kind</code>:<code>SFC2002</code>(<code>UNKNOWN_OPERATION</code>,操作名不在冻结词汇)、<code>SFC2003</code>(<code>INVALID_PARAMS</code>,参数违反操作参数契约)。</li>
2304
+ <li>前置条件与信任锚:<code>kernel-protocol.json</code> 随包发布;内核协议版本与 Contracts 版本绑定。</li>
2305
+ <li><code>since</code> / <code>stability</code>:<code>0.2.0</code> / <code>stable</code>。</li>
2306
+ <li>源文件:<code>packages/skill-family-contracts/src/kernel.mjs</code>、<code>kernel-protocol.json</code>。</li>
2307
+ <li>正例/负例测试:<code>packages/skill-family-contracts/test/kernel.test.mjs</code>。</li>
2308
+ <li>调用方仍拥有的业务语义:操作的具体业务语义(状态机/重试/终态转 <code>loop-agent</code>)。</li>
2309
+ </ul>
2310
+ <hr />
2311
+ <h2 id="强制检查-foundationcontractsmandatory-checks">强制检查 (foundation.contracts.mandatory-checks)<a class="headerlink" href="#强制检查-foundationcontractsmandatory-checks" title="Permanent link">&para;</a></h2>
2312
+ <h3 id="runChecks--collectUnresolvedRefs">runChecks / collectUnresolvedRefs<a class="headerlink" href="#runChecks--collectUnresolvedRefs" title="Permanent link">&para;</a></h3>
2313
+ <ul>
2314
+ <li>签名:</li>
2315
+ <li><code>runChecks({ schemaEntries, ... } = {})</code></li>
2316
+ <li><code>collectUnresolvedRefs(schemaEntries)</code></li>
2317
+ <li>输入:待检查契约集或合成 registry/fixtures。</li>
2318
+ <li>输出:检查结论与未解析引用清单;违反规则抛 <code>ContractsError</code>。</li>
2319
+ <li>纯函数:是。</li>
2320
+ <li>副作用:无。</li>
2321
+ <li>稳定错误码与 <code>details.kind</code>:<code>SFC1002</code>/<code>1003</code>/<code>1004</code>/<code>1005</code>/<code>1006</code>/<code>1008</code>/<code>1009</code>/<code>1010</code> 对应各规则 violated;<code>SFC1005</code>(<code>UNRESOLVED_REF</code>)、<code>SFC1008</code>(<code>RULE_BUDGET_EXCEEDED</code>)、<code>SFC1010</code>(<code>FIXTURE_EXPECTATION_MISMATCH</code>)。</li>
2322
+ <li>前置条件与信任锚:registry 与 rules 已加载;<code>CHECK_TYPES</code> 为 9 类闭集;<code>RULE_BUDGET</code> 限制 <code>firstVersionMax</code> 与 <code>absoluteMax</code>。</li>
2323
+ <li><code>since</code> / <code>stability</code>:<code>0.2.0</code> / <code>stable</code>。</li>
2324
+ <li>源文件:<code>packages/skill-family-contracts/src/checker.mjs</code>、<code>rules.json</code>。</li>
2325
+ <li>正例/负例测试:<code>packages/skill-family-contracts/test/checker.test.mjs</code>。</li>
2326
+ <li>调用方仍拥有的业务语义:规则业务理由的解释(语义接受/拒绝属外部独立审阅)。</li>
2327
+ </ul>
2328
+ <hr />
2329
+ <h2 id="fixture-校验-foundationcontractsfixture-verification">fixture 校验 (foundation.contracts.fixture-verification)<a class="headerlink" href="#fixture-校验-foundationcontractsfixture-verification" title="Permanent link">&para;</a></h2>
2330
+ <h3 id="listFixtures--fixtureClasses--verifyFixture--verifyAllFixtures">listFixtures / fixtureClasses / verifyFixture / verifyAllFixtures<a class="headerlink" href="#listFixtures--fixtureClasses--verifyFixture--verifyAllFixtures" title="Permanent link">&para;</a></h3>
2331
+ <ul>
2332
+ <li>签名:</li>
2333
+ <li><code>listFixtures()</code></li>
2334
+ <li><code>fixtureClasses()</code></li>
2335
+ <li><code>verifyFixture(fixture)</code></li>
2336
+ <li><code>verifyAllFixtures()</code></li>
2337
+ <li>输入:fixture 类或单个 fixture 标识。</li>
2338
+ <li>输出:逐 fixture 的校验结果(正例须通过、负例须以声明稳定码失败)。</li>
2339
+ <li>纯函数:是(只读 fixture 目录)。</li>
2340
+ <li>副作用:只读访问 fixture,无写。</li>
2341
+ <li>稳定错误码与 <code>details.kind</code>:<code>SFC1010</code>(<code>FIXTURE_EXPECTATION_MISMATCH</code>,负例未产生预期失败);<code>SFC1009</code>(<code>UNKNOWN_ERROR_CODE</code>,fixture 引用未登记码)。</li>
2342
+ <li>前置条件与信任锚:fixtures 目录为公开或完全虚构数据;fixture 与审计器预期结果不共享。</li>
2343
+ <li><code>since</code> / <code>stability</code>:<code>0.2.0</code> / <code>stable</code>。</li>
2344
+ <li>源文件:<code>packages/skill-family-contracts/src/fixtures.mjs</code>。</li>
2345
+ <li>正例/负例测试:<code>packages/skill-family-contracts/test/fixtures.test.mjs</code>。</li>
2346
+ <li>调用方仍拥有的业务语义:fixture 背后的业务意图(fixture 只证结构、不证语义)。</li>
2347
+ </ul>
2348
+ <hr />
2349
+ <h2 id="错误码-foundationcontractserror-codes">错误码 (foundation.contracts.error-codes)<a class="headerlink" href="#错误码-foundationcontractserror-codes" title="Permanent link">&para;</a></h2>
2350
+ <h3 id="ContractsError--errorCodeRegistry--errorCodeInfo--isRegisteredErrorCode--assertRegisteredErrorCode--stableError">ContractsError / errorCodeRegistry / errorCodeInfo / isRegisteredErrorCode / assertRegisteredErrorCode / stableError<a class="headerlink" href="#ContractsError--errorCodeRegistry--errorCodeInfo--isRegisteredErrorCode--assertRegisteredErrorCode--stableError" title="Permanent link">&para;</a></h3>
2351
+ <ul>
2352
+ <li>签名:</li>
2353
+ <li><code>class ContractsError extends Error</code>(构造 <code>(code, message, details)</code>)</li>
2354
+ <li><code>errorCodeRegistry()</code></li>
2355
+ <li><code>errorCodeInfo(code)</code></li>
2356
+ <li><code>isRegisteredErrorCode(code)</code></li>
2357
+ <li><code>assertRegisteredErrorCode(code)</code></li>
2358
+ <li><code>stableError(code, message, details)</code></li>
2359
+ <li>输入:错误码字符串、错误上下文。</li>
2360
+ <li>输出:带稳定错误码与 <code>details</code> 的错误对象;<code>assertRegisteredErrorCode</code> 对未登记码抛 <code>TypeError</code>。</li>
2361
+ <li>纯函数:是(<code>ContractsError</code> 构造为纯对象,无外部副作用)。</li>
2362
+ <li>副作用:无。</li>
2363
+ <li>稳定错误码与 <code>details.kind</code>:错误码体系本身冻结(<code>error-codes.json</code>),新增码属 Contracts 变更;<code>SFC1009</code> 用于未登记码断言。</li>
2364
+ <li>前置条件与信任锚:<code>error-codes.json</code> 随包发布;冻结对象不可变。</li>
2365
+ <li><code>since</code> / <code>stability</code>:<code>0.2.0</code> / <code>stable</code>。</li>
2366
+ <li>源文件:<code>packages/skill-family-contracts/src/errors.mjs</code>、<code>error-codes.json</code>。</li>
2367
+ <li>正例/负例测试:<code>packages/skill-family-contracts/test/boundary.test.mjs</code>、<code>immutability.test.mjs</code>、<code>audit-surface.test.mjs</code>。</li>
2368
+ <li>调用方仍拥有的业务语义:错误码的业务归因。</li>
2369
+ </ul>
2370
+ <p>Contracts 错误码一览(稳定、append-only):</p>
2371
+ <table>
2372
+ <thead>
2373
+ <tr>
2374
+ <th>码</th>
2375
+ <th>名称</th>
2376
+ <th>类别</th>
2377
+ </tr>
2378
+ </thead>
2379
+ <tbody>
2380
+ <tr>
2381
+ <td>SFC1001</td>
2382
+ <td>SCHEMA_VALIDATION_FAILED</td>
2383
+ <td>contract</td>
2384
+ </tr>
2385
+ <tr>
2386
+ <td>SFC1002</td>
2387
+ <td>UNKNOWN_SCHEMA_ID</td>
2388
+ <td>contract</td>
2389
+ </tr>
2390
+ <tr>
2391
+ <td>SFC1003</td>
2392
+ <td>DUPLICATE_SCHEMA_ID</td>
2393
+ <td>contract</td>
2394
+ </tr>
2395
+ <tr>
2396
+ <td>SFC1004</td>
2397
+ <td>DUPLICATE_PROTOCOL_NAME</td>
2398
+ <td>contract</td>
2399
+ </tr>
2400
+ <tr>
2401
+ <td>SFC1005</td>
2402
+ <td>UNRESOLVED_REF</td>
2403
+ <td>contract</td>
2404
+ </tr>
2405
+ <tr>
2406
+ <td>SFC1006</td>
2407
+ <td>UNSUPPORTED_DIALECT</td>
2408
+ <td>contract</td>
2409
+ </tr>
2410
+ <tr>
2411
+ <td>SFC1007</td>
2412
+ <td>UNKNOWN_CHECK_TYPE</td>
2413
+ <td>contract</td>
2414
+ </tr>
2415
+ <tr>
2416
+ <td>SFC1008</td>
2417
+ <td>RULE_BUDGET_EXCEEDED</td>
2418
+ <td>contract</td>
2419
+ </tr>
2420
+ <tr>
2421
+ <td>SFC1009</td>
2422
+ <td>UNKNOWN_ERROR_CODE</td>
2423
+ <td>contract</td>
2424
+ </tr>
2425
+ <tr>
2426
+ <td>SFC1010</td>
2427
+ <td>FIXTURE_EXPECTATION_MISMATCH</td>
2428
+ <td>contract</td>
2429
+ </tr>
2430
+ <tr>
2431
+ <td>SFC1011</td>
2432
+ <td>UNKNOWN_PROTOCOL</td>
2433
+ <td>contract</td>
2434
+ </tr>
2435
+ <tr>
2436
+ <td>SFC1012</td>
2437
+ <td>SCHEMA_COMPILE_FAILED</td>
2438
+ <td>contract</td>
2439
+ </tr>
2440
+ <tr>
2441
+ <td>SFC2002</td>
2442
+ <td>UNKNOWN_OPERATION</td>
2443
+ <td>kernel</td>
2444
+ </tr>
2445
+ <tr>
2446
+ <td>SFC2003</td>
2447
+ <td>INVALID_PARAMS</td>
2448
+ <td>kernel</td>
2449
+ </tr>
2450
+ <tr>
2451
+ <td>SFC2004</td>
2452
+ <td>EXECUTION_FAILED</td>
2453
+ <td>kernel(机制失败统一码,承载 <code>details.kind</code>)</td>
2454
+ </tr>
2455
+ <tr>
2456
+ <td>SFC3001</td>
2457
+ <td>REPORT_DIGEST_MISMATCH</td>
2458
+ <td>report</td>
2459
+ </tr>
2460
+ <tr>
2461
+ <td>SFC3002</td>
2462
+ <td>REPORT_ELEMENT_MISSING</td>
2463
+ <td>report</td>
2464
+ </tr>
2465
+ <tr>
2466
+ <td>SFC3003</td>
2467
+ <td>REPORT_FACT_DRIFT</td>
2468
+ <td>report</td>
2469
+ </tr>
2470
+ </tbody>
2471
+ </table>
2472
+ <hr />
2473
+ <h2 id="审计表面-foundationcontractsaudit-surface">审计表面 (foundation.contracts.audit-surface)<a class="headerlink" href="#审计表面-foundationcontractsaudit-surface" title="Permanent link">&para;</a></h2>
2474
+ <h3 id="canonicalJson--digestDocument--describeAuditSurface--digestAuditSurface">canonicalJson / digestDocument / describeAuditSurface / digestAuditSurface<a class="headerlink" href="#canonicalJson--digestDocument--describeAuditSurface--digestAuditSurface" title="Permanent link">&para;</a></h3>
2475
+ <ul>
2476
+ <li>签名:</li>
2477
+ <li><code>canonicalJson(value)</code></li>
2478
+ <li><code>digestDocument(value, { algorithm = "sha256" } = {})</code></li>
2479
+ <li><code>describeAuditSurface()</code></li>
2480
+ <li><code>digestAuditSurface(surface = describeAuditSurface())</code></li>
2481
+ <li>输入:任意 JSON 文档。</li>
2482
+ <li>输出:canonical 字符串与 sha256 摘要;审计表面结构描述与其摘要。</li>
2483
+ <li>纯函数:是。</li>
2484
+ <li>副作用:无。</li>
2485
+ <li>稳定错误码与 <code>details.kind</code>:非 JSON 值、未知算法(<code>AUDIT_DIGEST_ALGORITHMS</code> 仅 <code>sha256</code>)、冻结违规抛 <code>ContractsError</code>。</li>
2486
+ <li>前置条件与信任锚:<code>AUDIT_SURFACE_VERSION=1</code>;摘要算法仅 <code>sha256</code>;依赖方向 Audit → Contracts,本模块不反向导入审计产物。</li>
2487
+ <li><code>since</code> / <code>stability</code>:<code>0.2.0</code> / <code>stable</code>。</li>
2488
+ <li>源文件:<code>packages/skill-family-contracts/src/audit-surface.mjs</code>。</li>
2489
+ <li>正例/负例测试:<code>packages/skill-family-contracts/test/audit-surface.test.mjs</code>。</li>
2490
+ <li>调用方仍拥有的业务语义:审计语义结论(接受/拒绝属外部独立审阅)。</li>
2491
+ </ul>
2492
+ <hr />
2493
+ <h2 id="Quickstart-Profile-v2-candidate">Quickstart Profile v2 candidate<a class="headerlink" href="#Quickstart-Profile-v2-candidate" title="Permanent link">&para;</a></h2>
2494
+ <p><code>skill-family-contracts/candidate/quickstart-profile</code> 导出 v2 协议、按真实 <code>$id</code> 索引的 Resource/Task/Result Schema 集合,以及 <code>validateQuickstartProfileDocument</code>。唯一操作名是业务中立的 <code>execute-method</code>;Foundation 不登记 method 词表,也不解释 parameters、evidence 或 domainResult 的领域含义。</p>
2495
+ <p>该入口从 <code>0.2.1</code> 起公开,但稳定性仍为 <code>candidate</code>。0.3.0 已用 v2 替换 v1,两者不兼容:新接入需精确锁定 <code>0.3.0</code>,仍需 v1 的接入继续精确锁定 <code>0.2.1</code>。candidate Schema 不进入稳定 <code>src/registry.json</code>。</p>
2496
+ <hr />
2497
+ <h2 id="与机器事实层的互链">与机器事实层的互链<a class="headerlink" href="#与机器事实层的互链" title="Permanent link">&para;</a></h2>
2498
+ <ul>
2499
+ <li>能力稳定 ID 见 <code>docs/agents/capability-catalog.json</code>(<code>foundation.contracts.*</code>)。</li>
2500
+ <li>机械校验:<code>scripts/docs/capability-catalog-check.mjs</code> 解析 <code>src/index.mjs</code>,拒绝引用不存在的入口;<code>sourceRefs</code> 与测试引用均指向本页所列真实文件。</li>
2501
+ </ul>
2502
+
2503
+
2504
+
2505
+
2506
+
2507
+
2508
+
2509
+
2510
+
2511
+
2512
+
2513
+
2514
+
2515
+ </article>
2516
+ </div>
2517
+
2518
+
2519
+ <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
2520
+ </div>
2521
+
2522
+ </main>
2523
+
2524
+ <footer class="md-footer">
2525
+
2526
+ <div class="md-footer-meta md-typeset">
2527
+ <div class="md-footer-meta__inner md-grid">
2528
+ <div class="md-copyright">
2529
+
2530
+
2531
+ Made with
2532
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2533
+ Material for MkDocs
2534
+ </a>
2535
+
2536
+ </div>
2537
+
2538
+ </div>
2539
+ </div>
2540
+ </footer>
2541
+
2542
+ </div>
2543
+ <div class="md-dialog" data-md-component="dialog">
2544
+ <div class="md-dialog__inner md-typeset"></div>
2545
+ </div>
2546
+
2547
+
2548
+
2549
+
2550
+
2551
+ <script id="__config" type="application/json">{"annotate": null, "base": "../../..", "features": [], "search": "../../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": null}</script>
2552
+
2553
+
2554
+ <script src="../../../assets/javascripts/bundle.d7400e89.min.js"></script>
2555
+
2556
+
2557
+ </body>
2558
+ </html>