create-yss-spec 3.5.5 → 3.5.6
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/README.md
CHANGED
|
@@ -191,6 +191,8 @@ npm pack --dry-run
|
|
|
191
191
|
|
|
192
192
|
## 固定计划实例迁移
|
|
193
193
|
|
|
194
|
+
创建实例时默认安装 `yss-harness-upgrade`;已有实例执行 `sync` 时自动补齐该技能、已选择运行时的投影和升级协议,并更新技能锁与分发登记。`sync --dry-run` 只预览,不安装。补装保留原有技能、运行时和阶段选择。
|
|
195
|
+
|
|
194
196
|
`migrate plan --target-dir <项目绝对路径> --output <项目外新计划.json>` 生成项目只读计划;`migrate apply --plan <计划>` 执行固定候选并保存持久归档。计划后输入变化必须重新规划。需要旧布局迁移或安全退出分发清理时,规划阶段显式加入 `--migrate-layout` / `--prune`。
|
|
195
197
|
|
|
196
198
|
`migrate status` 查看状态;`migrate recover` 预览中断恢复,`migrate rollback` 预览最近一次成功迁移的整体回退,均需显式 `--apply` 才写入。后续修改、跨家族、未知基线及损坏归档阻断,禁止用 force 绕过。所有新接口支持 `--json`。
|
package/cli-core.lock.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"sourceRepository": "https://github.com/iloveZzz/yss-spec-project-template.git",
|
|
4
|
-
"sourceRevision": "
|
|
4
|
+
"sourceRevision": "dd58fc3929b3958579ac8a426f06f087682f2f6c",
|
|
5
5
|
"sourceState": "committed",
|
|
6
6
|
"sourcePath": ".template-source/cli-core",
|
|
7
7
|
"coreVersion": "0.2.0",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"mode": 420
|
|
85
85
|
},
|
|
86
86
|
"tests/package-contract.mjs": {
|
|
87
|
-
"digest": "
|
|
87
|
+
"digest": "ce8fcaa4e4f4498e2f4f49e86c9ab455b54c9ce386fe0911396ffe8f5eb6ff49",
|
|
88
88
|
"mode": 420
|
|
89
89
|
},
|
|
90
90
|
"transaction.mjs": {
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"mode": 420
|
|
113
113
|
}
|
|
114
114
|
},
|
|
115
|
-
"digest": "
|
|
115
|
+
"digest": "9a4cfce884a706efa91ae8dd8dc2fc82cd7d17e8a84f633bdb049ea531436ae1",
|
|
116
116
|
"upgradeResources": {
|
|
117
117
|
"SKILL.md": {
|
|
118
118
|
"digest": "40495ca033ebd0345363714e45571ee77258a435ea1523ae716dc2402ced0487",
|
package/package.json
CHANGED
|
@@ -244,7 +244,9 @@ function assetPaths(root, distribution) {
|
|
|
244
244
|
for (const ref of bundle.files || []) addFile(root, result, ref);
|
|
245
245
|
for (const ref of bundle.scripts || []) moduleClosure(root, result, ref, selectedSkills);
|
|
246
246
|
}
|
|
247
|
-
|
|
247
|
+
const resourceSkills = new Set(distribution.resourceSkills || []);
|
|
248
|
+
if (selectedSkills.has("yss-harness-upgrade")) resourceSkills.add("yss-harness-upgrade");
|
|
249
|
+
for (const skill of resourceSkills) skillReferences(root, result, skill, selectedSkills);
|
|
248
250
|
return result;
|
|
249
251
|
}
|
|
250
252
|
|
|
@@ -275,7 +275,9 @@ function buildSyncVariables(metadata) {
|
|
|
275
275
|
variables.includeExampleDocs === undefined
|
|
276
276
|
? !(metadata.metadataSchemaVersion >= 3)
|
|
277
277
|
: Boolean(variables.includeExampleDocs),
|
|
278
|
-
distribution: metadata.metadataSchemaVersion >= 3
|
|
278
|
+
distribution: metadata.metadataSchemaVersion >= 3 && metadata.distribution?.mode === "selected"
|
|
279
|
+
? { ...metadata.distribution, installedSkills: [...new Set([...metadata.distribution.installedSkills, "yss-harness-upgrade"])] }
|
|
280
|
+
: metadata.metadataSchemaVersion >= 3 ? metadata.distribution : { mode: "legacy-all" },
|
|
279
281
|
};
|
|
280
282
|
}
|
|
281
283
|
|
|
@@ -495,7 +497,7 @@ function buildNextSyncMetadata(metadata, syncPlan, {
|
|
|
495
497
|
return {
|
|
496
498
|
...metadata,
|
|
497
499
|
metadataSchemaVersion: METADATA_SCHEMA_VERSION,
|
|
498
|
-
distribution: metadata.
|
|
500
|
+
distribution: buildSyncVariables(metadata).distribution,
|
|
499
501
|
templateName: PACKAGE_MANIFEST.name,
|
|
500
502
|
cliVersion: PACKAGE_MANIFEST.version,
|
|
501
503
|
templateVersion: PACKAGE_MANIFEST.version,
|
package/template.snapshot.json
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"templateName": "yss-spec-project-template",
|
|
4
4
|
"templateSource": "github:iloveZzz/yss-spec-project-template",
|
|
5
5
|
"templateRepository": "https://github.com/iloveZzz/yss-spec-project-template.git",
|
|
6
|
-
"requestedRef": "
|
|
7
|
-
"templateCommit": "
|
|
6
|
+
"requestedRef": "dd58fc3929b3958579ac8a426f06f087682f2f6c",
|
|
7
|
+
"templateCommit": "dd58fc3929b3958579ac8a426f06f087682f2f6c",
|
|
8
8
|
"sourceState": "committed",
|
|
9
9
|
"manifestHash": "544e8ae01c49ef451a784237b06772137876f8e8d6b5334094827e2ca2fe0f13",
|
|
10
10
|
"encodedPaths": {
|
|
@@ -17,5 +17,5 @@
|
|
|
17
17
|
".pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/.gitignore": ".pi/skills/yss-frontend-scaffold-generator/assets/data-quality-v1/__yss_dotfile__.gitignore"
|
|
18
18
|
},
|
|
19
19
|
"snapshotHash": "e97773b2461a3bb7a35551a1f97371af689b94f281bbdb7a635e687d5239b405",
|
|
20
|
-
"generatedAt": "2026-10-
|
|
20
|
+
"generatedAt": "2026-10-01T15:17:35.092Z"
|
|
21
21
|
}
|
|
@@ -27,6 +27,19 @@ export function packageContract(root) {
|
|
|
27
27
|
verifyCore(root);loadBundle(root);
|
|
28
28
|
success(run('init',[...init,'--dry-run']));assert.equal(fs.existsSync(target),false);
|
|
29
29
|
success(run('init',init));
|
|
30
|
+
const upgrade='yss-harness-upgrade',protocol='.template-spec/process/harness-upgrade.md';
|
|
31
|
+
const checkUpgrade=()=>{
|
|
32
|
+
const lock=JSON.parse(fs.readFileSync(path.join(target,'skills-lock.json')));
|
|
33
|
+
assert.ok(lock.skills.shared[upgrade]);
|
|
34
|
+
for(const base of ['.agents/skills',...lock.projectionRoots])for(const ref of ['SKILL.md','references/cli-families.md'])assert.ok(fs.existsSync(path.join(target,base,upgrade,ref)));
|
|
35
|
+
assert.ok(fs.existsSync(path.join(target,protocol)));
|
|
36
|
+
};
|
|
37
|
+
checkUpgrade();
|
|
38
|
+
// Reproduce an older instance whose managed baseline did not include this skill.
|
|
39
|
+
const oldMeta=JSON.parse(fs.readFileSync(path.join(target,family.metadataFile)));
|
|
40
|
+
for(const ref of Object.keys(oldMeta.managedFiles))if(ref.includes('/'+upgrade+'/')||ref===protocol){fs.rmSync(path.join(target,ref),{force:true});delete oldMeta.managedFiles[ref];}
|
|
41
|
+
oldMeta.baselineDigest=hash(JSON.stringify(oldMeta.managedFiles));fs.writeFileSync(path.join(target,family.metadataFile),JSON.stringify(oldMeta,null,2)+'\n');
|
|
42
|
+
const oldLock=JSON.parse(fs.readFileSync(path.join(target,'skills-lock.json')));delete oldLock.skills.shared[upgrade];fs.writeFileSync(path.join(target,'skills-lock.json'),JSON.stringify(oldLock,null,2)+'\n');
|
|
30
43
|
const readme=path.join(target,'README.md'),context=path.join(target,'CONTEXT.md'),metadata=path.join(target,family.metadataFile);
|
|
31
44
|
fs.writeFileSync(readme,'# 用户文档\n');
|
|
32
45
|
const contextBefore=fs.readFileSync(context);
|
|
@@ -36,6 +49,7 @@ export function packageContract(root) {
|
|
|
36
49
|
success(run('sync',['--plan','--prune']));
|
|
37
50
|
assert.deepEqual(fs.readFileSync(metadata),before);assert.equal(journalCount(),count);
|
|
38
51
|
success(run('sync',['--apply','--prune']));
|
|
52
|
+
checkUpgrade();
|
|
39
53
|
assert.equal(fs.readFileSync(readme,'utf8'),'# 用户文档\n');assert.deepEqual(fs.readFileSync(context),contextBefore);
|
|
40
54
|
before=fs.readFileSync(metadata);success(run('sync',['--apply']));assert.deepEqual(fs.readFileSync(metadata),before);
|
|
41
55
|
if(family.side==='design') {
|