skill-family-engineering-kit 0.1.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.
- package/CODE_OF_CONDUCT.md +131 -0
- package/CONTRIBUTING.md +69 -0
- package/LICENSE +201 -0
- package/README.md +74 -0
- package/SECURITY.md +34 -0
- package/data/licensing/registry.json +211 -0
- package/data/licensing/schema.json +207 -0
- package/docs/.nojekyll +0 -0
- package/docs/404.html +613 -0
- package/docs/architecture/index.html +904 -0
- package/docs/assets/images/favicon.png +0 -0
- package/docs/assets/javascripts/bundle.d7400e89.min.js +16 -0
- package/docs/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
- package/docs/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
- package/docs/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
- package/docs/assets/javascripts/lunr/tinyseg.js +206 -0
- package/docs/assets/javascripts/lunr/wordcut.js +6708 -0
- package/docs/assets/javascripts/workers/search.2c215733.min.js +42 -0
- package/docs/assets/stylesheets/main.ec1eaa64.min.css +1 -0
- package/docs/assets/stylesheets/palette.ab4e12ef.min.css +1 -0
- package/docs/git-lifecycle/index.html +976 -0
- package/docs/help/index.html +907 -0
- package/docs/index.html +837 -0
- package/docs/integration/audit/baseline/audit-codes.json +62 -0
- package/docs/integration/audit/failure-evidence/index.html +872 -0
- package/docs/integration/audit/independence/index.html +841 -0
- package/docs/integration/audit/index.html +826 -0
- package/docs/integration/audit/mutation-taxonomy/index.html +1022 -0
- package/docs/integration/audit/schemas/audit-evidence.schema.json +182 -0
- package/docs/integration/audit/version-compatibility/index.html +845 -0
- package/docs/migration/index.html +1213 -0
- package/docs/quickstart/index.html +842 -0
- package/docs/search/search_index.json +1 -0
- package/docs/setup/index.html +941 -0
- package/docs/sitemap.xml +51 -0
- package/package.json +42 -0
- package/src/adopt-plan.mjs +594 -0
- package/src/check.mjs +415 -0
- package/src/cli.mjs +230 -0
- package/src/errors.mjs +144 -0
- package/src/gitprobe.mjs +230 -0
- package/src/identity-check.mjs +563 -0
- package/src/index.mjs +233 -0
- package/src/license-texts/Apache-2.0.txt +201 -0
- package/src/license-texts/MIT.txt +21 -0
- package/src/licensing.mjs +299 -0
- package/src/migration.mjs +427 -0
- package/src/projection.mjs +397 -0
- package/src/scaffold.mjs +178 -0
- package/src/skeleton.mjs +886 -0
- package/src/workspace.mjs +236 -0
|
@@ -0,0 +1,941 @@
|
|
|
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/setup/">
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
<link rel="prev" href="..">
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
<link rel="next" href="../quickstart/">
|
|
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>安装与环境 - 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="#安装与环境" 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
|
+
安装与环境
|
|
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
|
+
|
|
260
|
+
|
|
261
|
+
<li class="md-nav__item md-nav__item--active">
|
|
262
|
+
|
|
263
|
+
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
<span class="md-ellipsis">
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
安装与环境
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
</span>
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
<span class="md-nav__icon md-icon"></span>
|
|
285
|
+
</label>
|
|
286
|
+
|
|
287
|
+
<a href="./" class="md-nav__link md-nav__link--active">
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
<span class="md-ellipsis">
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
安装与环境
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
</span>
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
</a>
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
<nav class="md-nav md-nav--secondary" aria-label="目录">
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
<label class="md-nav__title" for="__toc">
|
|
314
|
+
<span class="md-nav__icon md-icon"></span>
|
|
315
|
+
目录
|
|
316
|
+
</label>
|
|
317
|
+
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
318
|
+
|
|
319
|
+
<li class="md-nav__item">
|
|
320
|
+
<a href="#必需环境" class="md-nav__link">
|
|
321
|
+
<span class="md-ellipsis">
|
|
322
|
+
|
|
323
|
+
必需环境
|
|
324
|
+
|
|
325
|
+
</span>
|
|
326
|
+
</a>
|
|
327
|
+
|
|
328
|
+
</li>
|
|
329
|
+
|
|
330
|
+
<li class="md-nav__item">
|
|
331
|
+
<a href="#安装依赖" class="md-nav__link">
|
|
332
|
+
<span class="md-ellipsis">
|
|
333
|
+
|
|
334
|
+
安装依赖
|
|
335
|
+
|
|
336
|
+
</span>
|
|
337
|
+
</a>
|
|
338
|
+
|
|
339
|
+
</li>
|
|
340
|
+
|
|
341
|
+
<li class="md-nav__item">
|
|
342
|
+
<a href="#合成与检查" class="md-nav__link">
|
|
343
|
+
<span class="md-ellipsis">
|
|
344
|
+
|
|
345
|
+
合成与检查
|
|
346
|
+
|
|
347
|
+
</span>
|
|
348
|
+
</a>
|
|
349
|
+
|
|
350
|
+
</li>
|
|
351
|
+
|
|
352
|
+
<li class="md-nav__item">
|
|
353
|
+
<a href="#文档站点Material-for-MkDocs" class="md-nav__link">
|
|
354
|
+
<span class="md-ellipsis">
|
|
355
|
+
|
|
356
|
+
文档站点(Material for MkDocs)
|
|
357
|
+
|
|
358
|
+
</span>
|
|
359
|
+
</a>
|
|
360
|
+
|
|
361
|
+
</li>
|
|
362
|
+
|
|
363
|
+
<li class="md-nav__item">
|
|
364
|
+
<a href="#公开静态站render-public-sitemjs" class="md-nav__link">
|
|
365
|
+
<span class="md-ellipsis">
|
|
366
|
+
|
|
367
|
+
公开静态站(render-public-site.mjs)
|
|
368
|
+
|
|
369
|
+
</span>
|
|
370
|
+
</a>
|
|
371
|
+
|
|
372
|
+
</li>
|
|
373
|
+
|
|
374
|
+
<li class="md-nav__item">
|
|
375
|
+
<a href="#文档事实与链接检查" class="md-nav__link">
|
|
376
|
+
<span class="md-ellipsis">
|
|
377
|
+
|
|
378
|
+
文档事实与链接检查
|
|
379
|
+
|
|
380
|
+
</span>
|
|
381
|
+
</a>
|
|
382
|
+
|
|
383
|
+
</li>
|
|
384
|
+
|
|
385
|
+
</ul>
|
|
386
|
+
|
|
387
|
+
</nav>
|
|
388
|
+
|
|
389
|
+
</li>
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
<li class="md-nav__item">
|
|
400
|
+
<a href="../quickstart/" class="md-nav__link">
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
<span class="md-ellipsis">
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
快速开始
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
</span>
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
</a>
|
|
416
|
+
</li>
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
<li class="md-nav__item">
|
|
427
|
+
<a href="../git-lifecycle/" class="md-nav__link">
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
|
|
431
|
+
<span class="md-ellipsis">
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
Git 生命周期指南
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
</span>
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
</a>
|
|
443
|
+
</li>
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
<li class="md-nav__item">
|
|
454
|
+
<a href="../help/" class="md-nav__link">
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
<span class="md-ellipsis">
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
能力与诊断
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
</span>
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
</a>
|
|
470
|
+
</li>
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
<li class="md-nav__item">
|
|
481
|
+
<a href="../architecture/" class="md-nav__link">
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
|
|
485
|
+
<span class="md-ellipsis">
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
架构边界
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
</span>
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
</a>
|
|
497
|
+
</li>
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
<li class="md-nav__item">
|
|
508
|
+
<a href="../migration/" class="md-nav__link">
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
<span class="md-ellipsis">
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
存量采用与迁移
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
</span>
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
</a>
|
|
524
|
+
</li>
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
<li class="md-nav__item">
|
|
535
|
+
<a href="../integration/audit/" class="md-nav__link">
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
<span class="md-ellipsis">
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
独立审计集成
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
|
|
546
|
+
</span>
|
|
547
|
+
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
</a>
|
|
551
|
+
</li>
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
<li class="md-nav__item">
|
|
562
|
+
<a href="../integration/audit/mutation-taxonomy/" class="md-nav__link">
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
<span class="md-ellipsis">
|
|
567
|
+
|
|
568
|
+
|
|
569
|
+
审计变异分类学
|
|
570
|
+
|
|
571
|
+
|
|
572
|
+
|
|
573
|
+
</span>
|
|
574
|
+
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
</a>
|
|
578
|
+
</li>
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
|
|
588
|
+
<li class="md-nav__item">
|
|
589
|
+
<a href="../integration/audit/independence/" class="md-nav__link">
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
|
|
593
|
+
<span class="md-ellipsis">
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
审计独立性证明
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
</span>
|
|
601
|
+
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
</a>
|
|
605
|
+
</li>
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
|
|
614
|
+
|
|
615
|
+
<li class="md-nav__item">
|
|
616
|
+
<a href="../integration/audit/version-compatibility/" class="md-nav__link">
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
<span class="md-ellipsis">
|
|
621
|
+
|
|
622
|
+
|
|
623
|
+
审计版本兼容定义
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
</span>
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
</a>
|
|
632
|
+
</li>
|
|
633
|
+
|
|
634
|
+
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
<li class="md-nav__item">
|
|
643
|
+
<a href="../integration/audit/failure-evidence/" class="md-nav__link">
|
|
644
|
+
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
<span class="md-ellipsis">
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
审计失败证据与 AUD 码
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
</span>
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
</a>
|
|
659
|
+
</li>
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
</ul>
|
|
664
|
+
</nav>
|
|
665
|
+
</div>
|
|
666
|
+
</div>
|
|
667
|
+
</div>
|
|
668
|
+
|
|
669
|
+
|
|
670
|
+
|
|
671
|
+
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
|
672
|
+
<div class="md-sidebar__scrollwrap">
|
|
673
|
+
<div class="md-sidebar__inner">
|
|
674
|
+
|
|
675
|
+
|
|
676
|
+
<nav class="md-nav md-nav--secondary" aria-label="目录">
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
|
|
682
|
+
|
|
683
|
+
<label class="md-nav__title" for="__toc">
|
|
684
|
+
<span class="md-nav__icon md-icon"></span>
|
|
685
|
+
目录
|
|
686
|
+
</label>
|
|
687
|
+
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
688
|
+
|
|
689
|
+
<li class="md-nav__item">
|
|
690
|
+
<a href="#必需环境" class="md-nav__link">
|
|
691
|
+
<span class="md-ellipsis">
|
|
692
|
+
|
|
693
|
+
必需环境
|
|
694
|
+
|
|
695
|
+
</span>
|
|
696
|
+
</a>
|
|
697
|
+
|
|
698
|
+
</li>
|
|
699
|
+
|
|
700
|
+
<li class="md-nav__item">
|
|
701
|
+
<a href="#安装依赖" class="md-nav__link">
|
|
702
|
+
<span class="md-ellipsis">
|
|
703
|
+
|
|
704
|
+
安装依赖
|
|
705
|
+
|
|
706
|
+
</span>
|
|
707
|
+
</a>
|
|
708
|
+
|
|
709
|
+
</li>
|
|
710
|
+
|
|
711
|
+
<li class="md-nav__item">
|
|
712
|
+
<a href="#合成与检查" class="md-nav__link">
|
|
713
|
+
<span class="md-ellipsis">
|
|
714
|
+
|
|
715
|
+
合成与检查
|
|
716
|
+
|
|
717
|
+
</span>
|
|
718
|
+
</a>
|
|
719
|
+
|
|
720
|
+
</li>
|
|
721
|
+
|
|
722
|
+
<li class="md-nav__item">
|
|
723
|
+
<a href="#文档站点Material-for-MkDocs" class="md-nav__link">
|
|
724
|
+
<span class="md-ellipsis">
|
|
725
|
+
|
|
726
|
+
文档站点(Material for MkDocs)
|
|
727
|
+
|
|
728
|
+
</span>
|
|
729
|
+
</a>
|
|
730
|
+
|
|
731
|
+
</li>
|
|
732
|
+
|
|
733
|
+
<li class="md-nav__item">
|
|
734
|
+
<a href="#公开静态站render-public-sitemjs" class="md-nav__link">
|
|
735
|
+
<span class="md-ellipsis">
|
|
736
|
+
|
|
737
|
+
公开静态站(render-public-site.mjs)
|
|
738
|
+
|
|
739
|
+
</span>
|
|
740
|
+
</a>
|
|
741
|
+
|
|
742
|
+
</li>
|
|
743
|
+
|
|
744
|
+
<li class="md-nav__item">
|
|
745
|
+
<a href="#文档事实与链接检查" class="md-nav__link">
|
|
746
|
+
<span class="md-ellipsis">
|
|
747
|
+
|
|
748
|
+
文档事实与链接检查
|
|
749
|
+
|
|
750
|
+
</span>
|
|
751
|
+
</a>
|
|
752
|
+
|
|
753
|
+
</li>
|
|
754
|
+
|
|
755
|
+
</ul>
|
|
756
|
+
|
|
757
|
+
</nav>
|
|
758
|
+
</div>
|
|
759
|
+
</div>
|
|
760
|
+
</div>
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
|
|
764
|
+
<div class="md-content" data-md-component="content">
|
|
765
|
+
|
|
766
|
+
<article class="md-content__inner md-typeset">
|
|
767
|
+
|
|
768
|
+
|
|
769
|
+
|
|
770
|
+
|
|
771
|
+
|
|
772
|
+
<h1 id="安装与环境">安装与环境<a class="headerlink" href="#安装与环境" title="Permanent link">¶</a></h1>
|
|
773
|
+
<h2 id="必需环境">必需环境<a class="headerlink" href="#必需环境" title="Permanent link">¶</a></h2>
|
|
774
|
+
<table>
|
|
775
|
+
<thead>
|
|
776
|
+
<tr>
|
|
777
|
+
<th>工具</th>
|
|
778
|
+
<th>版本</th>
|
|
779
|
+
<th>锁定点</th>
|
|
780
|
+
</tr>
|
|
781
|
+
</thead>
|
|
782
|
+
<tbody>
|
|
783
|
+
<tr>
|
|
784
|
+
<td>Node.js</td>
|
|
785
|
+
<td>22.22.2(锁定 major 22 并精确提高 floor:<code>>=22.22.2 <23</code>)</td>
|
|
786
|
+
<td><code>.node-version</code>(取精确 floor)、根与各叶子包 <code>package.json</code> 的 <code>engines.node</code>;floor 由 <code>scripts/engine-floor-check.mjs</code> 从固定根 devDependencies 的 engines 实时重算,fact-check J 节绑定文档表面</td>
|
|
787
|
+
</tr>
|
|
788
|
+
<tr>
|
|
789
|
+
<td>pnpm</td>
|
|
790
|
+
<td>10.30.0</td>
|
|
791
|
+
<td><code>package.json</code> 的 <code>packageManager</code></td>
|
|
792
|
+
</tr>
|
|
793
|
+
<tr>
|
|
794
|
+
<td>projen</td>
|
|
795
|
+
<td>0.101.23</td>
|
|
796
|
+
<td><code>package.json</code> 的 <code>devDependencies.projen</code>(精确版本,无范围符号)</td>
|
|
797
|
+
</tr>
|
|
798
|
+
<tr>
|
|
799
|
+
<td>Git</td>
|
|
800
|
+
<td>近年版本即可</td>
|
|
801
|
+
<td>仅开发者自行管理版本;本仓脚本不执行 Git 写操作</td>
|
|
802
|
+
</tr>
|
|
803
|
+
</tbody>
|
|
804
|
+
</table>
|
|
805
|
+
<p>工具版本与锁定点登记在 <code>.foundation/version-lock.json</code>(projen 生成的机器真源,禁止手改)。升级流程见 <code>scripts/README.md</code>。</p>
|
|
806
|
+
<h2 id="安装依赖">安装依赖<a class="headerlink" href="#安装依赖" title="Permanent link">¶</a></h2>
|
|
807
|
+
<pre><code class="language-bash">pnpm install
|
|
808
|
+
</code></pre>
|
|
809
|
+
<p><code>.npmrc</code> 启用 <code>save-exact=true</code>,新增依赖也会以精确版本写入。</p>
|
|
810
|
+
<h2 id="合成与检查">合成与检查<a class="headerlink" href="#合成与检查" title="Permanent link">¶</a></h2>
|
|
811
|
+
<pre><code class="language-bash">pnpm synth
|
|
812
|
+
pnpm check
|
|
813
|
+
</code></pre>
|
|
814
|
+
<ul>
|
|
815
|
+
<li><code>pnpm synth</code> 再生成 projen 受管文件。受管文件只能通过修改 <code>.projenrc.js</code> 间接变更;手写源码、文档和 fixture 不会被 synth 覆盖。</li>
|
|
816
|
+
<li><code>pnpm check</code> 是当前统一根门禁:10 个稳定门禁 ID 按固定顺序串联执行,任一步骤非 0 即整体失败;本仓没有任何 CI/CD workflow,全部门禁都在私有工作区内运行。下方区块由根 <code>package.json</code> 的 <code>scripts.check</code> 机械投影(<code>node scripts/docs/fact-check.mjs</code> 逐字核对,禁止手写清单再次滞后):</li>
|
|
817
|
+
</ul>
|
|
818
|
+
<!-- BEGIN SKILL-FAMILY-GATE-STAGES v2 (10 stable gate IDs; derived from package.json scripts.check; verified by fact-check) -->
|
|
819
|
+
<ol>
|
|
820
|
+
<li>pnpm run check:structure</li>
|
|
821
|
+
<li>pnpm run check:packages</li>
|
|
822
|
+
<li>pnpm run check:profiles</li>
|
|
823
|
+
<li>pnpm run check:public-boundary</li>
|
|
824
|
+
<li>pnpm run check:scaffold</li>
|
|
825
|
+
<li>pnpm run check:docs</li>
|
|
826
|
+
<li>pnpm run check:public-snapshots</li>
|
|
827
|
+
<li>pnpm run check:release-artifacts</li>
|
|
828
|
+
<li>pnpm run check:projen</li>
|
|
829
|
+
<li>pnpm run check:integration</li>
|
|
830
|
+
</ol>
|
|
831
|
+
<!-- END SKILL-FAMILY-GATE-STAGES -->
|
|
832
|
+
|
|
833
|
+
<ul>
|
|
834
|
+
<li>发布字节合同由两个固定入口承载:<code>pnpm run release-artifacts:build</code>(构建候选产物)与 <code>pnpm run release-artifacts:verify</code>(按合同校验),接口与拒绝矩阵详见 当前产品状态。</li>
|
|
835
|
+
<li>耗时的 Python 文档矩阵<strong>不属于</strong> <code>pnpm check</code>:它有独立入口 <code>node scripts/docs/verify-matrix.mjs</code>(矩阵版本覆盖由该脚本对照 <code>scripts/docs/toolchain.json</code> 机械核对;本仓无 CI,矩阵不声明在任何工作流里)。</li>
|
|
836
|
+
</ul>
|
|
837
|
+
<p>其余命令:<code>pnpm test</code>(仅测试)、<code>pnpm drift</code>(只读 synth 漂移检查)、<code>pnpm synth-idempotency</code>(幂等性验证)、<code>pnpm fixtures-projen</code>(projen 反例 fixture)。</p>
|
|
838
|
+
<h2 id="文档站点Material-for-MkDocs">文档站点(Material for MkDocs)<a class="headerlink" href="#文档站点Material-for-MkDocs" title="Permanent link">¶</a></h2>
|
|
839
|
+
<p>文档站点锁定 mkdocs 1.6.1 与 Material for MkDocs 9.7.7。依赖锁是 <code>pip-compile --generate-hashes</code> 生成的完整内容锁(全部顶层与传递依赖都带 SHA-256 hash),见 <code>scripts/docs/requirements.txt</code>(人工输入只有同目录的 <code>requirements.in</code>);工具链真源见 <code>scripts/docs/toolchain.json</code>。Python 3.10 或更高即可(<code>node scripts/docs/verify-matrix.mjs</code> 在最低版 3.10 与 tested 3.14 上都会用全新虚拟环境复现安装与严格构建)。</p>
|
|
840
|
+
<p>约定:<strong>不做系统级 pip install</strong>,虚拟环境必须建在仓库外部。原因是根 <code>pnpm check</code> 会对全仓做本地绝对路径字节扫描(见 <code>node scripts/check-structure.mjs</code>),而 macOS/Windows 上的虚拟环境内部嵌有本机绝对路径,放进仓库会造成误报。</p>
|
|
841
|
+
<p>安装命令统一使用 <code>--require-hashes</code>(内容锁要求逐条校验 hash):</p>
|
|
842
|
+
<pre><code class="language-bash"># 在仓库外部创建虚拟环境(路径可按需替换,示例用父目录)
|
|
843
|
+
python3 -m venv ../docs-site-venv
|
|
844
|
+
|
|
845
|
+
# 用哈希锁安装锁定版本(字节不符会直接失败)
|
|
846
|
+
../docs-site-venv/bin/pip install --require-hashes -r scripts/docs/requirements.txt
|
|
847
|
+
|
|
848
|
+
# 严格模式构建(任何警告都会失败),输出到 site/(已被 .gitignore 忽略)
|
|
849
|
+
../docs-site-venv/bin/mkdocs build --strict
|
|
850
|
+
|
|
851
|
+
# 本地预览(可选)
|
|
852
|
+
../docs-site-venv/bin/mkdocs serve
|
|
853
|
+
</code></pre>
|
|
854
|
+
<p>离线环境安装(固定流程):在线机器只下载 wheelhouse,离线安装必须进入一个<strong>从未在线安装过的新 offline venv</strong>——复用在线 venv 无法证明离线链路可用:</p>
|
|
855
|
+
<pre><code class="language-bash"># 1. 在线机器:下载 wheelhouse(下载同样逐条校验 hash;本步不安装到任何 venv)
|
|
856
|
+
python3 -m pip download --require-hashes -r scripts/docs/requirements.txt -d ./docs-wheels
|
|
857
|
+
|
|
858
|
+
# 2. 离线机器:新建一个从未在线安装过的 offline venv(路径可按需替换,不得复用 ../docs-site-venv)
|
|
859
|
+
python3 -m venv ../docs-site-offline-venv
|
|
860
|
+
|
|
861
|
+
# 3. 完全离线安装:不访问任何索引,只从 wheelhouse 解析,继续逐条校验 hash(字节不符直接失败)
|
|
862
|
+
../docs-site-offline-venv/bin/pip install --no-index --find-links ./docs-wheels --require-hashes -r scripts/docs/requirements.txt
|
|
863
|
+
|
|
864
|
+
# 4. 严格模式构建(任何警告都会失败)
|
|
865
|
+
../docs-site-offline-venv/bin/mkdocs build --strict
|
|
866
|
+
</code></pre>
|
|
867
|
+
<h2 id="公开静态站render-public-sitemjs">公开静态站(render-public-site.mjs)<a class="headerlink" href="#公开静态站render-public-sitemjs" title="Permanent link">¶</a></h2>
|
|
868
|
+
<p>公开静态站是本仓文档站的公开子集,唯一由 <code>scripts/render-public-site.mjs</code> 用上述冻结 MkDocs 环境渲染:</p>
|
|
869
|
+
<ul>
|
|
870
|
+
<li>脚本只发现并校验冻结虚拟环境(<code>SKILL_FAMILY_DOCS_VENV</code>,或按本节步骤建的 <code>../docs-site-venv</code> / <code>../docs-site-offline-venv</code>),自身不做任何安装;</li>
|
|
871
|
+
<li>执行两次 strict 构建并要求树哈希一致(确定性),随后复用 <code>scripts/leak-scan.mjs</code> 核心与 <code>scripts/leak-policy.json</code> 做内容泄漏扫描;</li>
|
|
872
|
+
<li><code>--write</code> 只写 <code>docs/public/site/**</code> 与 <code>docs/public/site-baseline.json</code>;<code>--check</code> 零写入重算并比对基线;<code>--self-test</code> 运行主动反例自测;</li>
|
|
873
|
+
<li>symlink、特殊文件、越界 realpath、单文件超限与不确定输出一律拒绝;基线禁止手改(渲染器是唯一写入面)。</li>
|
|
874
|
+
</ul>
|
|
875
|
+
<pre><code class="language-bash">node scripts/render-public-site.mjs --write
|
|
876
|
+
node scripts/render-public-site.mjs --check
|
|
877
|
+
</code></pre>
|
|
878
|
+
<p>站点文件与 engineering-kit public 发布镜像仓的 <code>docs/**</code> 逐文件对应(映射由发布配置执行,本仓不直接写镜像);Pages 实例是否在线是发布后验证事实,口径唯一见 当前产品状态。</p>
|
|
879
|
+
<h2 id="文档事实与链接检查">文档事实与链接检查<a class="headerlink" href="#文档事实与链接检查" title="Permanent link">¶</a></h2>
|
|
880
|
+
<p>文档中的版本、命令、包数与门禁事实由确定性脚本对照机器真源校验,链接由独立脚本解析:</p>
|
|
881
|
+
<pre><code class="language-bash">node scripts/docs/fact-check.mjs
|
|
882
|
+
node scripts/docs/link-check.mjs
|
|
883
|
+
</code></pre>
|
|
884
|
+
<p><code>fact-check.mjs</code> 是 Node 脚本,经仓内模块(<code>scripts/engine-floor-check.mjs</code>)消费根目录精确锁定的 <code>semver@7.8.5</code>,运行前必须先完成 <code>pnpm install --frozen-lockfile</code>;<code>link-check.mjs</code> 为纯 Node 实现(无第三方依赖)。两者退出码 0 表示通过。脚本职责见 <code>scripts/docs/README.md</code>。</p>
|
|
885
|
+
|
|
886
|
+
|
|
887
|
+
|
|
888
|
+
|
|
889
|
+
|
|
890
|
+
|
|
891
|
+
|
|
892
|
+
|
|
893
|
+
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
</article>
|
|
899
|
+
</div>
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
903
|
+
</div>
|
|
904
|
+
|
|
905
|
+
</main>
|
|
906
|
+
|
|
907
|
+
<footer class="md-footer">
|
|
908
|
+
|
|
909
|
+
<div class="md-footer-meta md-typeset">
|
|
910
|
+
<div class="md-footer-meta__inner md-grid">
|
|
911
|
+
<div class="md-copyright">
|
|
912
|
+
|
|
913
|
+
|
|
914
|
+
Made with
|
|
915
|
+
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
|
916
|
+
Material for MkDocs
|
|
917
|
+
</a>
|
|
918
|
+
|
|
919
|
+
</div>
|
|
920
|
+
|
|
921
|
+
</div>
|
|
922
|
+
</div>
|
|
923
|
+
</footer>
|
|
924
|
+
|
|
925
|
+
</div>
|
|
926
|
+
<div class="md-dialog" data-md-component="dialog">
|
|
927
|
+
<div class="md-dialog__inner md-typeset"></div>
|
|
928
|
+
</div>
|
|
929
|
+
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
|
|
933
|
+
|
|
934
|
+
<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>
|
|
935
|
+
|
|
936
|
+
|
|
937
|
+
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
|
938
|
+
|
|
939
|
+
|
|
940
|
+
</body>
|
|
941
|
+
</html>
|