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,1213 @@
|
|
|
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/migration/">
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
<link rel="prev" href="../architecture/">
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
<link rel="next" href="../integration/audit/">
|
|
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="#存量采用与迁移FND-070" 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
|
+
<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
|
+
|
|
395
|
+
|
|
396
|
+
<li class="md-nav__item md-nav__item--active">
|
|
397
|
+
|
|
398
|
+
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
<span class="md-ellipsis">
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
存量采用与迁移
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
</span>
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
<span class="md-nav__icon md-icon"></span>
|
|
420
|
+
</label>
|
|
421
|
+
|
|
422
|
+
<a href="./" class="md-nav__link md-nav__link--active">
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
<span class="md-ellipsis">
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
存量采用与迁移
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
</span>
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
</a>
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
<nav class="md-nav md-nav--secondary" aria-label="目录">
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
<label class="md-nav__title" for="__toc">
|
|
449
|
+
<span class="md-nav__icon md-icon"></span>
|
|
450
|
+
目录
|
|
451
|
+
</label>
|
|
452
|
+
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
453
|
+
|
|
454
|
+
<li class="md-nav__item">
|
|
455
|
+
<a href="#原则" class="md-nav__link">
|
|
456
|
+
<span class="md-ellipsis">
|
|
457
|
+
|
|
458
|
+
原则
|
|
459
|
+
|
|
460
|
+
</span>
|
|
461
|
+
</a>
|
|
462
|
+
|
|
463
|
+
</li>
|
|
464
|
+
|
|
465
|
+
<li class="md-nav__item">
|
|
466
|
+
<a href="#adopt-plan-输出结构" class="md-nav__link">
|
|
467
|
+
<span class="md-ellipsis">
|
|
468
|
+
|
|
469
|
+
adopt-plan 输出结构
|
|
470
|
+
|
|
471
|
+
</span>
|
|
472
|
+
</a>
|
|
473
|
+
|
|
474
|
+
</li>
|
|
475
|
+
|
|
476
|
+
<li class="md-nav__item">
|
|
477
|
+
<a href="#迁移清单skill-familymigrationjson" class="md-nav__link">
|
|
478
|
+
<span class="md-ellipsis">
|
|
479
|
+
|
|
480
|
+
迁移清单(skill-family.migration.json)
|
|
481
|
+
|
|
482
|
+
</span>
|
|
483
|
+
</a>
|
|
484
|
+
|
|
485
|
+
</li>
|
|
486
|
+
|
|
487
|
+
<li class="md-nav__item">
|
|
488
|
+
<a href="#迁移状态机" class="md-nav__link">
|
|
489
|
+
<span class="md-ellipsis">
|
|
490
|
+
|
|
491
|
+
迁移状态机
|
|
492
|
+
|
|
493
|
+
</span>
|
|
494
|
+
</a>
|
|
495
|
+
|
|
496
|
+
</li>
|
|
497
|
+
|
|
498
|
+
<li class="md-nav__item">
|
|
499
|
+
<a href="#完成判定门禁" class="md-nav__link">
|
|
500
|
+
<span class="md-ellipsis">
|
|
501
|
+
|
|
502
|
+
完成判定门禁
|
|
503
|
+
|
|
504
|
+
</span>
|
|
505
|
+
</a>
|
|
506
|
+
|
|
507
|
+
<nav class="md-nav" aria-label="完成判定门禁">
|
|
508
|
+
<ul class="md-nav__list">
|
|
509
|
+
|
|
510
|
+
<li class="md-nav__item">
|
|
511
|
+
<a href="#强制负例任一场景-completion-必须为-false" class="md-nav__link">
|
|
512
|
+
<span class="md-ellipsis">
|
|
513
|
+
|
|
514
|
+
强制负例(任一场景 completion 必须为 false)
|
|
515
|
+
|
|
516
|
+
</span>
|
|
517
|
+
</a>
|
|
518
|
+
|
|
519
|
+
</li>
|
|
520
|
+
|
|
521
|
+
</ul>
|
|
522
|
+
</nav>
|
|
523
|
+
|
|
524
|
+
</li>
|
|
525
|
+
|
|
526
|
+
<li class="md-nav__item">
|
|
527
|
+
<a href="#十字段-hand-off-草案" class="md-nav__link">
|
|
528
|
+
<span class="md-ellipsis">
|
|
529
|
+
|
|
530
|
+
十字段 hand-off 草案
|
|
531
|
+
|
|
532
|
+
</span>
|
|
533
|
+
</a>
|
|
534
|
+
|
|
535
|
+
<nav class="md-nav" aria-label="十字段 hand-off 草案">
|
|
536
|
+
<ul class="md-nav__list">
|
|
537
|
+
|
|
538
|
+
<li class="md-nav__item">
|
|
539
|
+
<a href="#INCOMPLETE-阻断规则" class="md-nav__link">
|
|
540
|
+
<span class="md-ellipsis">
|
|
541
|
+
|
|
542
|
+
INCOMPLETE 阻断规则
|
|
543
|
+
|
|
544
|
+
</span>
|
|
545
|
+
</a>
|
|
546
|
+
|
|
547
|
+
</li>
|
|
548
|
+
|
|
549
|
+
<li class="md-nav__item">
|
|
550
|
+
<a href="#绑定" class="md-nav__link">
|
|
551
|
+
<span class="md-ellipsis">
|
|
552
|
+
|
|
553
|
+
绑定
|
|
554
|
+
|
|
555
|
+
</span>
|
|
556
|
+
</a>
|
|
557
|
+
|
|
558
|
+
</li>
|
|
559
|
+
|
|
560
|
+
<li class="md-nav__item">
|
|
561
|
+
<a href="#渲染边界" class="md-nav__link">
|
|
562
|
+
<span class="md-ellipsis">
|
|
563
|
+
|
|
564
|
+
渲染边界
|
|
565
|
+
|
|
566
|
+
</span>
|
|
567
|
+
</a>
|
|
568
|
+
|
|
569
|
+
</li>
|
|
570
|
+
|
|
571
|
+
</ul>
|
|
572
|
+
</nav>
|
|
573
|
+
|
|
574
|
+
</li>
|
|
575
|
+
|
|
576
|
+
<li class="md-nav__item">
|
|
577
|
+
<a href="#危害类-fixture" class="md-nav__link">
|
|
578
|
+
<span class="md-ellipsis">
|
|
579
|
+
|
|
580
|
+
危害类 fixture
|
|
581
|
+
|
|
582
|
+
</span>
|
|
583
|
+
</a>
|
|
584
|
+
|
|
585
|
+
</li>
|
|
586
|
+
|
|
587
|
+
</ul>
|
|
588
|
+
|
|
589
|
+
</nav>
|
|
590
|
+
|
|
591
|
+
</li>
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
<li class="md-nav__item">
|
|
602
|
+
<a href="../integration/audit/" class="md-nav__link">
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
<span class="md-ellipsis">
|
|
607
|
+
|
|
608
|
+
|
|
609
|
+
独立审计集成
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
</span>
|
|
614
|
+
|
|
615
|
+
|
|
616
|
+
|
|
617
|
+
</a>
|
|
618
|
+
</li>
|
|
619
|
+
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
<li class="md-nav__item">
|
|
629
|
+
<a href="../integration/audit/mutation-taxonomy/" class="md-nav__link">
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
<span class="md-ellipsis">
|
|
634
|
+
|
|
635
|
+
|
|
636
|
+
审计变异分类学
|
|
637
|
+
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
</span>
|
|
641
|
+
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
</a>
|
|
645
|
+
</li>
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
|
|
655
|
+
<li class="md-nav__item">
|
|
656
|
+
<a href="../integration/audit/independence/" class="md-nav__link">
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
|
|
660
|
+
<span class="md-ellipsis">
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
审计独立性证明
|
|
664
|
+
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
</span>
|
|
668
|
+
|
|
669
|
+
|
|
670
|
+
|
|
671
|
+
</a>
|
|
672
|
+
</li>
|
|
673
|
+
|
|
674
|
+
|
|
675
|
+
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
|
|
682
|
+
<li class="md-nav__item">
|
|
683
|
+
<a href="../integration/audit/version-compatibility/" class="md-nav__link">
|
|
684
|
+
|
|
685
|
+
|
|
686
|
+
|
|
687
|
+
<span class="md-ellipsis">
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
审计版本兼容定义
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
|
|
694
|
+
</span>
|
|
695
|
+
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
</a>
|
|
699
|
+
</li>
|
|
700
|
+
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
|
|
709
|
+
<li class="md-nav__item">
|
|
710
|
+
<a href="../integration/audit/failure-evidence/" class="md-nav__link">
|
|
711
|
+
|
|
712
|
+
|
|
713
|
+
|
|
714
|
+
<span class="md-ellipsis">
|
|
715
|
+
|
|
716
|
+
|
|
717
|
+
审计失败证据与 AUD 码
|
|
718
|
+
|
|
719
|
+
|
|
720
|
+
|
|
721
|
+
</span>
|
|
722
|
+
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
</a>
|
|
726
|
+
</li>
|
|
727
|
+
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
</ul>
|
|
731
|
+
</nav>
|
|
732
|
+
</div>
|
|
733
|
+
</div>
|
|
734
|
+
</div>
|
|
735
|
+
|
|
736
|
+
|
|
737
|
+
|
|
738
|
+
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
|
739
|
+
<div class="md-sidebar__scrollwrap">
|
|
740
|
+
<div class="md-sidebar__inner">
|
|
741
|
+
|
|
742
|
+
|
|
743
|
+
<nav class="md-nav md-nav--secondary" aria-label="目录">
|
|
744
|
+
|
|
745
|
+
|
|
746
|
+
|
|
747
|
+
|
|
748
|
+
|
|
749
|
+
|
|
750
|
+
<label class="md-nav__title" for="__toc">
|
|
751
|
+
<span class="md-nav__icon md-icon"></span>
|
|
752
|
+
目录
|
|
753
|
+
</label>
|
|
754
|
+
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
755
|
+
|
|
756
|
+
<li class="md-nav__item">
|
|
757
|
+
<a href="#原则" class="md-nav__link">
|
|
758
|
+
<span class="md-ellipsis">
|
|
759
|
+
|
|
760
|
+
原则
|
|
761
|
+
|
|
762
|
+
</span>
|
|
763
|
+
</a>
|
|
764
|
+
|
|
765
|
+
</li>
|
|
766
|
+
|
|
767
|
+
<li class="md-nav__item">
|
|
768
|
+
<a href="#adopt-plan-输出结构" class="md-nav__link">
|
|
769
|
+
<span class="md-ellipsis">
|
|
770
|
+
|
|
771
|
+
adopt-plan 输出结构
|
|
772
|
+
|
|
773
|
+
</span>
|
|
774
|
+
</a>
|
|
775
|
+
|
|
776
|
+
</li>
|
|
777
|
+
|
|
778
|
+
<li class="md-nav__item">
|
|
779
|
+
<a href="#迁移清单skill-familymigrationjson" class="md-nav__link">
|
|
780
|
+
<span class="md-ellipsis">
|
|
781
|
+
|
|
782
|
+
迁移清单(skill-family.migration.json)
|
|
783
|
+
|
|
784
|
+
</span>
|
|
785
|
+
</a>
|
|
786
|
+
|
|
787
|
+
</li>
|
|
788
|
+
|
|
789
|
+
<li class="md-nav__item">
|
|
790
|
+
<a href="#迁移状态机" class="md-nav__link">
|
|
791
|
+
<span class="md-ellipsis">
|
|
792
|
+
|
|
793
|
+
迁移状态机
|
|
794
|
+
|
|
795
|
+
</span>
|
|
796
|
+
</a>
|
|
797
|
+
|
|
798
|
+
</li>
|
|
799
|
+
|
|
800
|
+
<li class="md-nav__item">
|
|
801
|
+
<a href="#完成判定门禁" class="md-nav__link">
|
|
802
|
+
<span class="md-ellipsis">
|
|
803
|
+
|
|
804
|
+
完成判定门禁
|
|
805
|
+
|
|
806
|
+
</span>
|
|
807
|
+
</a>
|
|
808
|
+
|
|
809
|
+
<nav class="md-nav" aria-label="完成判定门禁">
|
|
810
|
+
<ul class="md-nav__list">
|
|
811
|
+
|
|
812
|
+
<li class="md-nav__item">
|
|
813
|
+
<a href="#强制负例任一场景-completion-必须为-false" class="md-nav__link">
|
|
814
|
+
<span class="md-ellipsis">
|
|
815
|
+
|
|
816
|
+
强制负例(任一场景 completion 必须为 false)
|
|
817
|
+
|
|
818
|
+
</span>
|
|
819
|
+
</a>
|
|
820
|
+
|
|
821
|
+
</li>
|
|
822
|
+
|
|
823
|
+
</ul>
|
|
824
|
+
</nav>
|
|
825
|
+
|
|
826
|
+
</li>
|
|
827
|
+
|
|
828
|
+
<li class="md-nav__item">
|
|
829
|
+
<a href="#十字段-hand-off-草案" class="md-nav__link">
|
|
830
|
+
<span class="md-ellipsis">
|
|
831
|
+
|
|
832
|
+
十字段 hand-off 草案
|
|
833
|
+
|
|
834
|
+
</span>
|
|
835
|
+
</a>
|
|
836
|
+
|
|
837
|
+
<nav class="md-nav" aria-label="十字段 hand-off 草案">
|
|
838
|
+
<ul class="md-nav__list">
|
|
839
|
+
|
|
840
|
+
<li class="md-nav__item">
|
|
841
|
+
<a href="#INCOMPLETE-阻断规则" class="md-nav__link">
|
|
842
|
+
<span class="md-ellipsis">
|
|
843
|
+
|
|
844
|
+
INCOMPLETE 阻断规则
|
|
845
|
+
|
|
846
|
+
</span>
|
|
847
|
+
</a>
|
|
848
|
+
|
|
849
|
+
</li>
|
|
850
|
+
|
|
851
|
+
<li class="md-nav__item">
|
|
852
|
+
<a href="#绑定" class="md-nav__link">
|
|
853
|
+
<span class="md-ellipsis">
|
|
854
|
+
|
|
855
|
+
绑定
|
|
856
|
+
|
|
857
|
+
</span>
|
|
858
|
+
</a>
|
|
859
|
+
|
|
860
|
+
</li>
|
|
861
|
+
|
|
862
|
+
<li class="md-nav__item">
|
|
863
|
+
<a href="#渲染边界" class="md-nav__link">
|
|
864
|
+
<span class="md-ellipsis">
|
|
865
|
+
|
|
866
|
+
渲染边界
|
|
867
|
+
|
|
868
|
+
</span>
|
|
869
|
+
</a>
|
|
870
|
+
|
|
871
|
+
</li>
|
|
872
|
+
|
|
873
|
+
</ul>
|
|
874
|
+
</nav>
|
|
875
|
+
|
|
876
|
+
</li>
|
|
877
|
+
|
|
878
|
+
<li class="md-nav__item">
|
|
879
|
+
<a href="#危害类-fixture" class="md-nav__link">
|
|
880
|
+
<span class="md-ellipsis">
|
|
881
|
+
|
|
882
|
+
危害类 fixture
|
|
883
|
+
|
|
884
|
+
</span>
|
|
885
|
+
</a>
|
|
886
|
+
|
|
887
|
+
</li>
|
|
888
|
+
|
|
889
|
+
</ul>
|
|
890
|
+
|
|
891
|
+
</nav>
|
|
892
|
+
</div>
|
|
893
|
+
</div>
|
|
894
|
+
</div>
|
|
895
|
+
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
<div class="md-content" data-md-component="content">
|
|
899
|
+
|
|
900
|
+
<article class="md-content__inner md-typeset">
|
|
901
|
+
|
|
902
|
+
|
|
903
|
+
|
|
904
|
+
|
|
905
|
+
|
|
906
|
+
<h1 id="存量采用与迁移FND-070">存量采用与迁移(FND-070)<a class="headerlink" href="#存量采用与迁移FND-070" title="Permanent link">¶</a></h1>
|
|
907
|
+
<p>本页描述存量项目如何采用 Skill Family 基础设施,以及迁移完成判定的门禁。</p>
|
|
908
|
+
<h2 id="原则">原则<a class="headerlink" href="#原则" title="Permanent link">¶</a></h2>
|
|
909
|
+
<ol>
|
|
910
|
+
<li><strong>计划先行</strong>:任何存量仓先运行只读 <code>adopt-plan</code>,拿到现状、目标 Profile、
|
|
911
|
+
精确写集、冲突、旧实现退出清单与验收命令,再决定是否执行写入。</li>
|
|
912
|
+
<li><strong>只读计划零变化</strong>:<code>adopt-plan</code> 不写任何文件(含临时文件)、不运行 git
|
|
913
|
+
写命令、不改名、不触碰远端;对输入仓字节零变化(前后哈希走查可证)。</li>
|
|
914
|
+
<li><strong>采用与改名分离</strong>:基础设施采用绝不连带仓库改名或远端坐标变更;
|
|
915
|
+
两者是独立决策,工具不提供任何改名能力。</li>
|
|
916
|
+
<li><strong>双轨不算完成</strong>:迁移完成判定要求旧重复实现已删除;只接入新基础设施
|
|
917
|
+
而旧实现仍在,判定恒为 false。</li>
|
|
918
|
+
</ol>
|
|
919
|
+
<h2 id="adopt-plan-输出结构">adopt-plan 输出结构<a class="headerlink" href="#adopt-plan-输出结构" title="Permanent link">¶</a></h2>
|
|
920
|
+
<table>
|
|
921
|
+
<thead>
|
|
922
|
+
<tr>
|
|
923
|
+
<th>段落</th>
|
|
924
|
+
<th>内容</th>
|
|
925
|
+
</tr>
|
|
926
|
+
</thead>
|
|
927
|
+
<tbody>
|
|
928
|
+
<tr>
|
|
929
|
+
<td><code>target</code></td>
|
|
930
|
+
<td>现状:入口数、目标自有受管声明</td>
|
|
931
|
+
</tr>
|
|
932
|
+
<tr>
|
|
933
|
+
<td><code>project</code> / <code>traceability</code></td>
|
|
934
|
+
<td>目标 Profile 与每项写入的真源(Contracts 版本、skeleton 生成函数、许可证 Profile 与变体)</td>
|
|
935
|
+
</tr>
|
|
936
|
+
<tr>
|
|
937
|
+
<td><code>git</code></td>
|
|
938
|
+
<td>只读 Git 前置状态(仓库、HEAD、clean)</td>
|
|
939
|
+
</tr>
|
|
940
|
+
<tr>
|
|
941
|
+
<td><code>writeSet</code></td>
|
|
942
|
+
<td>精确写集:每路径的 action(仅 <code>create</code>/<code>unchanged</code>)、fileClass、sha256</td>
|
|
943
|
+
</tr>
|
|
944
|
+
<tr>
|
|
945
|
+
<td><code>conflicts</code></td>
|
|
946
|
+
<td>手写冲突、受管漂移、符号链接占位、缺字段临时例外</td>
|
|
947
|
+
</tr>
|
|
948
|
+
<tr>
|
|
949
|
+
<td><code>risks</code></td>
|
|
950
|
+
<td>dirty、嵌套仓、tracked-but-ignored、到期例外等</td>
|
|
951
|
+
</tr>
|
|
952
|
+
<tr>
|
|
953
|
+
<td><code>migration</code></td>
|
|
954
|
+
<td>迁移状态机:绑定(binding)、在盘证明(adoptionProof)、待写入数、check 门禁、四类验证证据、状态与完成判定</td>
|
|
955
|
+
</tr>
|
|
956
|
+
<tr>
|
|
957
|
+
<td><code>verificationPlan</code></td>
|
|
958
|
+
<td>验收命令序列(check → projection → 复查)</td>
|
|
959
|
+
</tr>
|
|
960
|
+
</tbody>
|
|
961
|
+
</table>
|
|
962
|
+
<h2 id="迁移清单skill-familymigrationjson">迁移清单(skill-family.migration.json)<a class="headerlink" href="#迁移清单skill-familymigrationjson" title="Permanent link">¶</a></h2>
|
|
963
|
+
<p>目标仓在根目录声明自己的迁移状态:</p>
|
|
964
|
+
<pre><code class="language-json">{
|
|
965
|
+
"kind": "skill-family.migration-manifest",
|
|
966
|
+
"legacyInfra": [
|
|
967
|
+
{ "path": "scripts/old-validator.mjs", "replacedBy": "sf-kit check" }
|
|
968
|
+
],
|
|
969
|
+
"exceptions": [
|
|
970
|
+
{
|
|
971
|
+
"owner": "负责人",
|
|
972
|
+
"reason": "具体原因",
|
|
973
|
+
"deadline": "2026-12-31",
|
|
974
|
+
"migrationTarget": "wave-m1"
|
|
975
|
+
}
|
|
976
|
+
],
|
|
977
|
+
"targetProfile": "generic",
|
|
978
|
+
"foundationPackages": [
|
|
979
|
+
{ "name": "skill-family-contracts", "version": "1.1.0", "digest": "sha256:<64 位十六进制>" }
|
|
980
|
+
],
|
|
981
|
+
"verification": {
|
|
982
|
+
"unit": "docs/evidence/unit.json",
|
|
983
|
+
"integration": "docs/evidence/integration.json",
|
|
984
|
+
"consumer": "docs/evidence/consumer.json",
|
|
985
|
+
"independentAudit": "docs/evidence/independent-audit.json"
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
</code></pre>
|
|
989
|
+
<ul>
|
|
990
|
+
<li><code>legacyInfra</code> 每项给出旧实现路径与替代物;工具只读评估存在性,绝不代为删除。</li>
|
|
991
|
+
<li><code>exceptions</code> 是<strong>临时例外</strong>:必须同时含负责人(owner)、原因(reason)、
|
|
992
|
+
截止时间(deadline)、迁移目标(migrationTarget)四项,缺任一字段即计为
|
|
993
|
+
冲突(计划失败);到期例外不自动续期,持续阻断完成判定。</li>
|
|
994
|
+
<li><code>targetProfile</code> / <code>foundationPackages</code>:采用绑定。目标 Profile
|
|
995
|
+
必须与计划 Profile 一致;三个 Foundation 包(contracts、harness-node、
|
|
996
|
+
engineering-kit)必须各自绑定<strong>精确版本号</strong>(不接受浮动范围)与
|
|
997
|
+
<code>sha256:</code> 摘要。</li>
|
|
998
|
+
<li><code>verification</code>:四类验证证据文档路径(unit、integration、
|
|
999
|
+
consumer、independentAudit)。每份证据必须是可解析 JSON 且其
|
|
1000
|
+
<code>projectId</code> 与目标项目身份一致,才计为 proven;路径越界、缺失、
|
|
1001
|
+
不可解析、身份不符均为未证明,fail-closed。</li>
|
|
1002
|
+
</ul>
|
|
1003
|
+
<h2 id="迁移状态机">迁移状态机<a class="headerlink" href="#迁移状态机" title="Permanent link">¶</a></h2>
|
|
1004
|
+
<p>状态单调递进,只由只读证据推导,任何工具都不通过写入推进状态:</p>
|
|
1005
|
+
<pre><code>not-declared → declared → adopted → verified → complete
|
|
1006
|
+
</code></pre>
|
|
1007
|
+
<table>
|
|
1008
|
+
<thead>
|
|
1009
|
+
<tr>
|
|
1010
|
+
<th>状态</th>
|
|
1011
|
+
<th>含义</th>
|
|
1012
|
+
</tr>
|
|
1013
|
+
</thead>
|
|
1014
|
+
<tbody>
|
|
1015
|
+
<tr>
|
|
1016
|
+
<td><code>not-declared</code></td>
|
|
1017
|
+
<td>不存在契约有效的迁移清单</td>
|
|
1018
|
+
</tr>
|
|
1019
|
+
<tr>
|
|
1020
|
+
<td><code>declared</code></td>
|
|
1021
|
+
<td>清单契约有效,但采用事实证明不全</td>
|
|
1022
|
+
</tr>
|
|
1023
|
+
<tr>
|
|
1024
|
+
<td><code>adopted</code></td>
|
|
1025
|
+
<td>Foundation 字节已在盘且旧实现已退出,check 门禁未绿</td>
|
|
1026
|
+
</tr>
|
|
1027
|
+
<tr>
|
|
1028
|
+
<td><code>verified</code></td>
|
|
1029
|
+
<td>check 门禁绿,验证证据未全部 proven</td>
|
|
1030
|
+
</tr>
|
|
1031
|
+
<tr>
|
|
1032
|
+
<td><code>complete</code></td>
|
|
1033
|
+
<td>八项完成条件全部满足;<code>complete</code> 为真当且仅当状态为 <code>complete</code></td>
|
|
1034
|
+
</tr>
|
|
1035
|
+
</tbody>
|
|
1036
|
+
</table>
|
|
1037
|
+
<h2 id="完成判定门禁">完成判定门禁<a class="headerlink" href="#完成判定门禁" title="Permanent link">¶</a></h2>
|
|
1038
|
+
<p><code>migration.completion.complete</code> 为 true 当且仅当<strong>全部八项</strong>成立:</p>
|
|
1039
|
+
<ol>
|
|
1040
|
+
<li>已声明契约有效的迁移清单(kind/字段经 Contracts schema 校验);</li>
|
|
1041
|
+
<li>采用绑定已证明:目标 Profile 与计划一致,三个 Foundation 包均绑定
|
|
1042
|
+
精确版本与 sha256 摘要;</li>
|
|
1043
|
+
<li>Project Manifest、managed lock、identity 与全部受管骨架文件在盘且
|
|
1044
|
+
摘要与计划一致(<code>adoptionProof.missing</code>/<code>mismatched</code> 为空);</li>
|
|
1045
|
+
<li>写集中无待执行的 create/replace/project 动作(<code>pendingWrites</code> 为 0);</li>
|
|
1046
|
+
<li>Foundation check 门禁绿;</li>
|
|
1047
|
+
<li>每项旧实现均已退出(absent)——containment 拒绝或畸形条目与 present
|
|
1048
|
+
同等 fail-closed;</li>
|
|
1049
|
+
<li>无缺字段、无不可解析截止时间、无已到期的临时例外;无未解决的采用冲突;</li>
|
|
1050
|
+
<li>四类验证证据(unit/integration/consumer/independentAudit)全部 proven
|
|
1051
|
+
且身份(projectId)匹配。</li>
|
|
1052
|
+
</ol>
|
|
1053
|
+
<p>未评估的输入与未证明等价:门禁只依据出示的证据前进。
|
|
1054
|
+
阻断理由(<code>blockers</code>)为稳定可读字符串,可直接进入迁移评审记录。</p>
|
|
1055
|
+
<h3 id="强制负例任一场景-completion-必须为-false">强制负例(任一场景 completion 必须为 false)<a class="headerlink" href="#强制负例任一场景-completion-必须为-false" title="Permanent link">¶</a></h3>
|
|
1056
|
+
<ul>
|
|
1057
|
+
<li>空仓 + 空清单(无契约有效清单 → <code>not-declared</code>);</li>
|
|
1058
|
+
<li>清单 kind 错误(schema-invalid → 视同未声明);</li>
|
|
1059
|
+
<li>9 个骨架文件仍待 create(<code>declared</code>,列出全部缺失路径);</li>
|
|
1060
|
+
<li>managed lock 漂移(<code>mismatched</code> 非空);</li>
|
|
1061
|
+
<li>只接入新实现、旧实现仍在(双轨 → <code>declared</code>);</li>
|
|
1062
|
+
<li>消费者验证证据缺失或身份不符(<code>verified</code>,不得 complete);</li>
|
|
1063
|
+
<li>临时例外过期(工具绝不续期)。</li>
|
|
1064
|
+
</ul>
|
|
1065
|
+
<h2 id="十字段-hand-off-草案">十字段 hand-off 草案<a class="headerlink" href="#十字段-hand-off-草案" title="Permanent link">¶</a></h2>
|
|
1066
|
+
<p><code>adopt-plan</code> 输出携带 <code>handoffDraft</code> 子块(kind=<code>skill-family.handoff-draft</code>,
|
|
1067
|
+
schemaVersion=1),为 planner 侧的十字段 hand-off 提供结构化数据草案。
|
|
1068
|
+
字段来源只有两种:<code>derived</code>(可由只读证据机械推导)与 <code>INCOMPLETE</code>
|
|
1069
|
+
(不可机械推导,绝不猜测)。十字段与源码常量 <code>HANDOFF_FIELDS</code> 逐一对应:</p>
|
|
1070
|
+
<table>
|
|
1071
|
+
<thead>
|
|
1072
|
+
<tr>
|
|
1073
|
+
<th>id</th>
|
|
1074
|
+
<th>字段名</th>
|
|
1075
|
+
<th>来源</th>
|
|
1076
|
+
</tr>
|
|
1077
|
+
</thead>
|
|
1078
|
+
<tbody>
|
|
1079
|
+
<tr>
|
|
1080
|
+
<td>1</td>
|
|
1081
|
+
<td><code>project-identity</code></td>
|
|
1082
|
+
<td>derived</td>
|
|
1083
|
+
</tr>
|
|
1084
|
+
<tr>
|
|
1085
|
+
<td>2</td>
|
|
1086
|
+
<td><code>repository-state</code></td>
|
|
1087
|
+
<td>derived</td>
|
|
1088
|
+
</tr>
|
|
1089
|
+
<tr>
|
|
1090
|
+
<td>3</td>
|
|
1091
|
+
<td><code>foundation-binding</code></td>
|
|
1092
|
+
<td>derived(清单已声明绑定)/INCOMPLETE(无清单声明)</td>
|
|
1093
|
+
</tr>
|
|
1094
|
+
<tr>
|
|
1095
|
+
<td>4</td>
|
|
1096
|
+
<td><code>write-set-policy</code></td>
|
|
1097
|
+
<td>derived</td>
|
|
1098
|
+
</tr>
|
|
1099
|
+
<tr>
|
|
1100
|
+
<td>5</td>
|
|
1101
|
+
<td><code>legacy-exits</code></td>
|
|
1102
|
+
<td>derived</td>
|
|
1103
|
+
</tr>
|
|
1104
|
+
<tr>
|
|
1105
|
+
<td>6</td>
|
|
1106
|
+
<td><code>business-logic-to-keep</code></td>
|
|
1107
|
+
<td>恒 INCOMPLETE</td>
|
|
1108
|
+
</tr>
|
|
1109
|
+
<tr>
|
|
1110
|
+
<td>7</td>
|
|
1111
|
+
<td><code>plan-summary</code></td>
|
|
1112
|
+
<td>derived</td>
|
|
1113
|
+
</tr>
|
|
1114
|
+
<tr>
|
|
1115
|
+
<td>8</td>
|
|
1116
|
+
<td><code>verification-entries</code></td>
|
|
1117
|
+
<td>derived(四类证据全部 proven)/INCOMPLETE(任一未证明)</td>
|
|
1118
|
+
</tr>
|
|
1119
|
+
<tr>
|
|
1120
|
+
<td>9</td>
|
|
1121
|
+
<td><code>legacy-removal-recovery</code></td>
|
|
1122
|
+
<td>恒 INCOMPLETE</td>
|
|
1123
|
+
</tr>
|
|
1124
|
+
<tr>
|
|
1125
|
+
<td>10</td>
|
|
1126
|
+
<td><code>authorization-status</code></td>
|
|
1127
|
+
<td>derived(commit/push/tag/publish 恒为 false)</td>
|
|
1128
|
+
</tr>
|
|
1129
|
+
</tbody>
|
|
1130
|
+
</table>
|
|
1131
|
+
<h3 id="INCOMPLETE-阻断规则">INCOMPLETE 阻断规则<a class="headerlink" href="#INCOMPLETE-阻断规则" title="Permanent link">¶</a></h3>
|
|
1132
|
+
<ul>
|
|
1133
|
+
<li>任何 INCOMPLETE 字段都使 <code>ready=false</code>:草案带缺口就不得进入 hand-off。</li>
|
|
1134
|
+
<li>工具绝不猜测不可机械推导的字段:</li>
|
|
1135
|
+
<li><code>business-logic-to-keep</code> 与 <code>legacy-removal-recovery</code> <strong>恒 INCOMPLETE</strong>,
|
|
1136
|
+
必须由人类负责人给出,工具无推导依据;</li>
|
|
1137
|
+
<li><code>foundation-binding</code> 在无迁移清单声明(<code>foundationPackages</code>)时
|
|
1138
|
+
INCOMPLETE,只计清单声明的绑定;</li>
|
|
1139
|
+
<li><code>verification-entries</code> 在四类证据(unit/integration/consumer/
|
|
1140
|
+
independentAudit)任一未达 proven 时 INCOMPLETE。</li>
|
|
1141
|
+
</ul>
|
|
1142
|
+
<h3 id="绑定">绑定<a class="headerlink" href="#绑定" title="Permanent link">¶</a></h3>
|
|
1143
|
+
<p>草案携带双 sha256 摘要(<code>binding</code> 块):<code>targetSetDigest</code> 汇总目标仓
|
|
1144
|
+
文件集合,<code>foundationPlanDigest</code> 汇总 Foundation 计划写集。同一目标两次
|
|
1145
|
+
计划得到相同摘要,草案与计划时刻的目标状态精确绑定。</p>
|
|
1146
|
+
<h3 id="渲染边界">渲染边界<a class="headerlink" href="#渲染边界" title="Permanent link">¶</a></h3>
|
|
1147
|
+
<ul>
|
|
1148
|
+
<li>渲染器只写 planner 侧的 hand-off 草案,<strong>绝不写消费者仓</strong>;</li>
|
|
1149
|
+
<li>不新增第五个 Kit 顶层命令:Kit 顶层命令恒为 scaffold、adopt-plan、
|
|
1150
|
+
projection、check 四个,<code>handoffDraft</code> 只是 <code>adopt-plan</code> 输出的子块。</li>
|
|
1151
|
+
</ul>
|
|
1152
|
+
<h2 id="危害类-fixture">危害类 fixture<a class="headerlink" href="#危害类-fixture" title="Permanent link">¶</a></h2>
|
|
1153
|
+
<p><code>fixtures/adoption/cases/</code> 覆盖七个危害类:dirty 仓、嵌套仓、
|
|
1154
|
+
tracked-but-ignored、符号链接占位、生成物漂移、旧实现退出门禁、
|
|
1155
|
+
临时例外字段。每个案例以字节级前后快照证明计划只读;案例说明见仓内
|
|
1156
|
+
<code>fixtures/adoption/README.md</code>。</p>
|
|
1157
|
+
|
|
1158
|
+
|
|
1159
|
+
|
|
1160
|
+
|
|
1161
|
+
|
|
1162
|
+
|
|
1163
|
+
|
|
1164
|
+
|
|
1165
|
+
|
|
1166
|
+
|
|
1167
|
+
|
|
1168
|
+
|
|
1169
|
+
|
|
1170
|
+
</article>
|
|
1171
|
+
</div>
|
|
1172
|
+
|
|
1173
|
+
|
|
1174
|
+
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
1175
|
+
</div>
|
|
1176
|
+
|
|
1177
|
+
</main>
|
|
1178
|
+
|
|
1179
|
+
<footer class="md-footer">
|
|
1180
|
+
|
|
1181
|
+
<div class="md-footer-meta md-typeset">
|
|
1182
|
+
<div class="md-footer-meta__inner md-grid">
|
|
1183
|
+
<div class="md-copyright">
|
|
1184
|
+
|
|
1185
|
+
|
|
1186
|
+
Made with
|
|
1187
|
+
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
|
1188
|
+
Material for MkDocs
|
|
1189
|
+
</a>
|
|
1190
|
+
|
|
1191
|
+
</div>
|
|
1192
|
+
|
|
1193
|
+
</div>
|
|
1194
|
+
</div>
|
|
1195
|
+
</footer>
|
|
1196
|
+
|
|
1197
|
+
</div>
|
|
1198
|
+
<div class="md-dialog" data-md-component="dialog">
|
|
1199
|
+
<div class="md-dialog__inner md-typeset"></div>
|
|
1200
|
+
</div>
|
|
1201
|
+
|
|
1202
|
+
|
|
1203
|
+
|
|
1204
|
+
|
|
1205
|
+
|
|
1206
|
+
<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>
|
|
1207
|
+
|
|
1208
|
+
|
|
1209
|
+
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
|
1210
|
+
|
|
1211
|
+
|
|
1212
|
+
</body>
|
|
1213
|
+
</html>
|