universal-dev-standards 6.2.6 → 6.2.7

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.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  source: ../../CHANGELOG.md
3
- source_version: 6.2.6
4
- translation_version: 6.2.6
3
+ source_version: 6.2.7
4
+ translation_version: 6.2.7
5
5
  last_synced: 2026-07-31
6
6
  status: current
7
7
  ---
@@ -17,6 +17,12 @@ status: current
17
17
 
18
18
  ## [Unreleased]
19
19
 
20
+ ## [6.2.7] - 2026-07-31
21
+
22
+ ### 修复
23
+
24
+ - **reconciler 在任何 npm 安装下都取不到 extension。** `manifest.extensions` 的条目(locale 包之类)抵达 executor 时没有已解析的来源路径,因为发布包的 `files` 清单不含 `extensions/` 目录——于是 `uds update --force` 对它们报告 `No source path available`,而 `uds update` 却更新了同一个文件。executor 现在改以 `copyStandard` 解析 extension,那是它处理 registry entry 时本来就在用的 bundled → repo → download fallback,也正是 legacy 路径一直在用的那一条。完全没有任何来源的条目仍然会失败,本来就该如此。
25
+
20
26
  ## [6.2.6] - 2026-07-31
21
27
 
22
28
  ### 新增
@@ -15,7 +15,7 @@ status: current
15
15
 
16
16
  > **语言**: [English](../../README.md) | [繁體中文](../zh-TW/README.md) | 简体中文
17
17
 
18
- **版本**: 6.2.6 | **发布日期**: 2026-07-31 | **授权**: [双重授权](../../LICENSE) (CC BY 4.0 + MIT)
18
+ **版本**: 6.2.7 | **发布日期**: 2026-07-31 | **授权**: [双重授权](../../LICENSE) (CC BY 4.0 + MIT)
19
19
 
20
20
  语言无关、框架无关的软件项目文档标准。通过 AI 原生工作流,确保不同技术栈之间的一致性、质量和可维护性。
21
21
 
@@ -13,7 +13,7 @@ status: current
13
13
  <!-- UDS_SUPPORTED_VERSIONS_START -->
14
14
  | 版本 | 支持状态 |
15
15
  |------|--------|
16
- | 6.2.6 | ✅ 最新正式版 |
16
+ | 6.2.7 | ✅ 最新正式版 |
17
17
  | < 6.0.0 | ❌ 已终止支持 |
18
18
  <!-- UDS_SUPPORTED_VERSIONS_END -->
19
19
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  source: ../../CHANGELOG.md
3
- source_version: 6.2.6
4
- translation_version: 6.2.6
3
+ source_version: 6.2.7
4
+ translation_version: 6.2.7
5
5
  last_synced: 2026-07-31
6
6
  status: current
7
7
  ---
@@ -17,6 +17,12 @@ status: current
17
17
 
18
18
  ## [Unreleased]
19
19
 
20
+ ## [6.2.7] - 2026-07-31
21
+
22
+ ### 修復
23
+
24
+ - **reconciler 在任何 npm 安裝下都取不到 extension。** `manifest.extensions` 的項目(locale 包之類)抵達 executor 時沒有已解析的來源路徑,因為發布包的 `files` 清單不含 `extensions/` 目錄——於是 `uds update --force` 對它們回報 `No source path available`,而 `uds update` 卻更新了同一個檔案。executor 現在改以 `copyStandard` 解析 extension,那是它處理 registry entry 時本來就在用的 bundled → repo → download fallback,也正是 legacy 路徑一直在用的那一條。完全沒有任何來源的項目仍然會失敗,本來就該如此。
25
+
20
26
  ## [6.2.6] - 2026-07-31
21
27
 
22
28
  ### 新增
@@ -15,7 +15,7 @@ status: current
15
15
 
16
16
  > **語言**: [English](../../README.md) | 繁體中文 | [简体中文](../zh-CN/README.md)
17
17
 
18
- **版本**: 6.2.6 | **發布日期**: 2026-07-31 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
18
+ **版本**: 6.2.7 | **發布日期**: 2026-07-31 | **授權**: [雙重授權](../../LICENSE) (CC BY 4.0 + MIT)
19
19
 
20
20
  語言無關、框架無關的軟體專案文件標準。透過 AI 原生工作流,確保不同技術堆疊之間的一致性、品質和可維護性。
21
21
 
@@ -13,7 +13,7 @@ status: current
13
13
  <!-- UDS_SUPPORTED_VERSIONS_START -->
14
14
  | 版本 | 支援狀態 |
15
15
  |------|--------|
16
- | 6.2.6 | ✅ 最新正式版 |
16
+ | 6.2.7 | ✅ 最新正式版 |
17
17
  | < 6.0.0 | ❌ 已終止支援 |
18
18
  <!-- UDS_SUPPORTED_VERSIONS_END -->
19
19
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "universal-dev-standards",
3
- "version": "6.2.6",
3
+ "version": "6.2.7",
4
4
  "description": "CLI tool for adopting Universal Development Standards",
5
5
  "keywords": [
6
6
  "documentation",
@@ -221,32 +221,49 @@ async function executeCreateOrUpdate(projectPath, action, manifest) {
221
221
  if (action.category === 'standard' || action.category === 'option') {
222
222
  const sourcePath = action.details?.sourcePath;
223
223
  if (!sourcePath) {
224
- // Use copyStandard which handles bundled/repo/download fallback
224
+ // No absolute path was resolved, so fall back to copyStandard, which walks
225
+ // bundled → repo → download. Two kinds of entry arrive here.
225
226
  const metadata = action.details?.metadata;
226
- if (metadata?.registryEntry) {
227
+ let sourceStr = null;
228
+ let targetDir = '.standards';
229
+
230
+ if (metadata?.extensionSource) {
231
+ // An entry from `manifest.extensions`. PathResolver cannot resolve these
232
+ // from an npm install: the published package's `files` list is bin, src,
233
+ // bundled, standards-registry.json and README.md — no `extensions/`. So
234
+ // `sourcePath` is null for every adopter who did not install from a
235
+ // source checkout, and this function answered "No source path available"
236
+ // for a file it was perfectly able to fetch.
237
+ //
238
+ // The legacy update path never had the bug because it calls copyStandard
239
+ // directly (`update.js`, "Update extensions"). The same upgrade therefore
240
+ // refreshed `.standards/zh-tw.md` under `uds update` and failed under the
241
+ // reconciler — the two paths disagreed about whether the file was
242
+ // reachable, and only one of them was right. (XSPEC-343)
243
+ sourceStr = metadata.extensionSource;
244
+ } else if (metadata?.registryEntry) {
227
245
  const source = metadata.registryEntry.source;
228
- const sourceStr = typeof source === 'string'
246
+ sourceStr = typeof source === 'string'
229
247
  ? source
230
248
  : (source?.[metadata.format] || source?.ai || source?.human);
231
- if (sourceStr) {
232
- const targetDir = action.category === 'option'
233
- ? dirname(action.path)
234
- : '.standards';
235
- const result = await copyStandard(sourceStr, targetDir, projectPath);
236
- if (result.success) {
237
- // Update hash in manifest
238
- const hashInfo = computeFileHash(join(projectPath, action.path));
239
- if (hashInfo) {
240
- const normalizedPath = action.path.replace(/\\/g, '/');
241
- manifest.fileHashes[normalizedPath] = {
242
- ...hashInfo,
243
- installedAt: new Date().toISOString()
244
- };
245
- }
246
- return { action, success: true };
249
+ targetDir = action.category === 'option' ? dirname(action.path) : '.standards';
250
+ }
251
+
252
+ if (sourceStr) {
253
+ const result = await copyStandard(sourceStr, targetDir, projectPath);
254
+ if (result.success) {
255
+ // Update hash in manifest
256
+ const hashInfo = computeFileHash(join(projectPath, action.path));
257
+ if (hashInfo) {
258
+ const normalizedPath = action.path.replace(/\\/g, '/');
259
+ manifest.fileHashes[normalizedPath] = {
260
+ ...hashInfo,
261
+ installedAt: new Date().toISOString()
262
+ };
247
263
  }
248
- return { action, success: false, error: result.error };
264
+ return { action, success: true };
249
265
  }
266
+ return { action, success: false, error: result.error };
250
267
  }
251
268
  return { action, success: false, error: 'No source path available' };
252
269
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "version": "6.2.6",
3
+ "version": "6.2.7",
4
4
  "lastUpdated": "2026-05-13",
5
5
  "description": "Standards registry for universal-dev-standards with integrated skills and AI-optimized formats",
6
6
  "formats": {
@@ -58,14 +58,14 @@
58
58
  "standards": {
59
59
  "name": "universal-dev-standards",
60
60
  "url": "https://github.com/AsiaOstrich/universal-dev-standards",
61
- "version": "6.2.6"
61
+ "version": "6.2.7"
62
62
  },
63
63
  "skills": {
64
64
  "name": "universal-dev-standards",
65
65
  "url": "https://github.com/AsiaOstrich/universal-dev-standards",
66
66
  "localPath": "skills",
67
67
  "rawUrl": "https://raw.githubusercontent.com/AsiaOstrich/universal-dev-standards/main/skills",
68
- "version": "6.2.6",
68
+ "version": "6.2.7",
69
69
  "note": "Skills are now included in the main repository under skills/"
70
70
  }
71
71
  },
@@ -2236,7 +2236,7 @@
2236
2236
  "id": "license-compliance",
2237
2237
  "name": "License Compliance Standards",
2238
2238
  "nameZh": "授權合規標準",
2239
- "version": "6.2.6",
2239
+ "version": "6.2.7",
2240
2240
  "source": {
2241
2241
  "human": "core/license-compliance.md",
2242
2242
  "ai": "ai/standards/license-compliance.ai.yaml"
@@ -2248,7 +2248,7 @@
2248
2248
  "id": "verification-oracle",
2249
2249
  "name": "Verification Oracle Standards",
2250
2250
  "nameZh": "驗證 Oracle 標準",
2251
- "version": "6.2.6",
2251
+ "version": "6.2.7",
2252
2252
  "source": {
2253
2253
  "human": "core/verification-oracle.md",
2254
2254
  "ai": "ai/standards/verification-oracle.ai.yaml"
@@ -2260,7 +2260,7 @@
2260
2260
  "id": "model-provenance",
2261
2261
  "name": "Model Provenance Policy Standards",
2262
2262
  "nameZh": "模型來源政策標準",
2263
- "version": "6.2.6",
2263
+ "version": "6.2.7",
2264
2264
  "source": {
2265
2265
  "human": "core/model-provenance.md",
2266
2266
  "ai": "ai/standards/model-provenance.ai.yaml"
@@ -2272,7 +2272,7 @@
2272
2272
  "id": "resource-cost-boundary",
2273
2273
  "name": "Resource / Cost Boundary Declaration Standards",
2274
2274
  "nameZh": "資源/成本邊界宣告標準",
2275
- "version": "6.2.6",
2275
+ "version": "6.2.7",
2276
2276
  "source": {
2277
2277
  "human": "core/resource-cost-boundary.md",
2278
2278
  "ai": "ai/standards/resource-cost-boundary.ai.yaml"