@namewta/speculo 0.1.13 → 0.1.14

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@namewta/speculo",
3
- "version": "0.1.13",
3
+ "version": "0.1.14",
4
4
  "description": "Speculo — specification-driven development framework assets, with a CLI to install and update them across AI coding tools.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -48,7 +48,7 @@
48
48
  "node": "22.22.3"
49
49
  },
50
50
  "devDependencies": {
51
- "@types/node": "^22.15.30",
51
+ "@types/node": "^26.0.0",
52
52
  "typescript": "^5.8.3"
53
53
  },
54
54
  "dependencies": {
@@ -26,11 +26,17 @@ keywords: [archive, 归档, 清理]
26
26
 
27
27
  ## 执行步骤
28
28
 
29
- 1. 扫描 `speculo/.speculo/<cat>/*/.status.json`,当前内置分类至少包括 `dev` 与 `doc`,仅选择 `change_status: completed` 的 change。
29
+ 1. **预扫描:** 列出 `speculo/.speculo/<cat>/`(内置分类至少包括 `dev` 与 `doc`)下所有符合 `YYYY-MM-DD-<kebab-name>` 格式的 change 目录。对每个目录检查 `.status.json` 是否存在:
30
+ - 存在且 `change_status: completed` → 加入待归档候选。
31
+ - 存在但 `change_status` 为其他值 → 跳过(非完成状态)。
32
+ - **不存在 `.status.json`** → 标记为 `broken-change: missing .status.json`,**不归档、不删除、不移动**,在清单中单独列出并跳过。
30
33
  2. 排除已经位于 `speculo/.speculo/archive/` 下的目录;若目标归档路径已存在,标记为冲突并停止,不覆盖。
31
- 3. 列出待归档清单:源路径、目标路径、当前分类、`updated_at`、最后 phase、是否仍在 `<cat>-status.json active[]`。
32
- 4. 向用户展示清单并等待明确确认。没有确认时只输出计划,不移动目录、不改索引。
33
- 5. 用户确认后逐项执行:
34
+ 3. 列出完整清单(分三组):
35
+ - **待归档:** 源路径、目标路径、当前分类、`updated_at`、最后 phase、是否仍在 `<cat>-status.json active[]`。
36
+ - **broken-change:** 缺少 `.status.json` 的 change 目录路径。
37
+ - **冲突:** 目标路径已存在的 change。
38
+ 4. 向用户展示清单并等待明确确认。没有确认时只输出计划,不移动目录、不改索引。对于 `broken-change`,提示用户需先通过对应 workflow 入口(`dev/00-INDEX.md` 或 `doc/00-INDEX.md`)补建 `.status.json`,或将 `change_status` 手动置为 `completed` 后再归档。
39
+ 5. 用户确认后逐项执行(仅对待归档项):
34
40
  - 创建 `speculo/.speculo/archive/<cat>/<YYYY-MM>/`
35
41
  - 移动 change 目录到 `speculo/.speculo/archive/<cat>/<YYYY-MM>/<change-name>/`
36
42
  - 从对应 `speculo/.speculo/<cat>-status.json` 的 `active[]` 删除该 change
@@ -51,6 +57,9 @@ keywords: [archive, 归档, 清理]
51
57
  ## 归档清单
52
58
  [TODO: 列出本次归档的所有 change,格式 "<source-path> → <dest-path>"]
53
59
 
60
+ ## 跳过清单
61
+ [TODO: 列出被跳过的 broken-change(缺少 .status.json)和冲突项]
62
+
54
63
  ## 用户确认记录
55
64
  [TODO: 记录用户确认的原始内容]
56
65
 
@@ -32,7 +32,11 @@ keywords: [dev, 开发, workflow, index, 状态]
32
32
  1. 若用户未指定 change,扫描 `speculo/.speculo/dev-status.json` 和 `speculo/.speculo/dev/*/.status.json`,列出 active changes。
33
33
  - **命名校验**:扫描时仅处理符合 `YYYY-MM-DD-<kebab-name>` 格式的目录。不符合的目录标记为 `malformed`,单独列出路径并提示用户修复或手动清理,不自动删除或重命名。
34
34
  2. 若只有一个 active change,默认继续该 change;若有多个 active change,要求用户选择。
35
- 3. 若没有 active change,按用户意图创建新的 change 目录,**目录名必须为 `YYYY-MM-DD-<kebab-name>`**(使用当前日期,`<kebab-name>` 从用户意图提取),并初始化 `.status.json` 与 `speculo/.speculo/dev-status.json`。
35
+ 3. 若没有 active change,按用户意图创建新的 change。**以下三步为原子操作,不可跳过,前一步失败时停止后续并报告:**
36
+ - **3a. 创建 change 目录** —— `speculo/.speculo/dev/<YYYY-MM-DD>-<kebab-name>/`(使用当前日期,`<kebab-name>` 从用户意图提取,不超过 5 个词)。
37
+ - **3b. 写入 `.status.json`** —— 在 change 目录下创建 `.status.json`,按 `docs/persistence-contract.md` §2.2 最小初始化模板填入所有必填字段(`name`、`category: "dev"`、`change_status: "active"`、`created_at`、`updated_at`、`current_phase: "00-init"`、`phase_history`)。
38
+ - **3c. 更新 `dev-status.json`** —— 读取 `speculo/.speculo/dev-status.json`,在 `active[]` 中追加该 change 的索引条目(`name`、`current_phase: "00-init"`、`updated_at`),写回文件。
39
+ - 以上三步全部成功后,方可继续推荐入口。
36
40
  4. 推荐入口时优先使用用户显式别名;没有别名时按执行模式推荐。
37
41
  5. 执行任何 workflow 前,读取该 workflow 入口文件、阶段文件、模板和被调用 skill wrapper。
38
42
  6. **Worktree 隔离(可选,默认 off)**:仅当用户**显式请求**隔离时,新 change 在 `dev/01` 的 Phase 0 经 `../../skills/worktree-isolation/SKILL.md` 建立隔离分支 `speculo/dev/<change>` 与 `.worktree/<change>/` 工作树,并把 `base_branch`、`change_branch` 记入 `.status.json`。扫描 active changes 时,对 `worktree_enabled` 为真者可结合 `git worktree list` 核对工作树是否存在。
@@ -29,7 +29,11 @@ keywords: [doc, writing, article, fragments, edit, 文档, 写作]
29
29
  1. 若用户未指定 change,扫描 `speculo/.speculo/doc-status.json` 和 `speculo/.speculo/doc/*/.status.json`,列出 active changes。
30
30
  - **命名校验**:扫描时仅处理符合 `YYYY-MM-DD-<kebab-name>` 格式的目录。不符合的目录标记为 `malformed`,单独列出路径并提示用户修复或手动清理,不自动删除或重命名。
31
31
  2. 若只有一个 active change,默认继续该 change;若有多个 active change,要求用户选择。
32
- 3. 若没有 active change,按用户意图创建新的 doc change 目录,**目录名必须为 `YYYY-MM-DD-<kebab-name>`**(使用当前日期,`<kebab-name>` 从用户意图提取),并初始化 `.status.json` 与 `speculo/.speculo/doc-status.json`。
32
+ 3. 若没有 active change,按用户意图创建新的 doc change。**以下三步为原子操作,不可跳过,前一步失败时停止后续并报告:**
33
+ - **3a. 创建 change 目录** —— `speculo/.speculo/doc/<YYYY-MM-DD>-<kebab-name>/`(使用当前日期,`<kebab-name>` 从用户意图提取,不超过 5 个词)。
34
+ - **3b. 写入 `.status.json`** —— 在 change 目录下创建 `.status.json`,按 `docs/persistence-contract.md` §2.2 最小初始化模板填入所有必填字段(`name`、`category: "doc"`、`change_status: "active"`、`created_at`、`updated_at`、`current_phase: "00-init"`、`phase_history`)。
35
+ - **3c. 更新 `doc-status.json`** —— 读取 `speculo/.speculo/doc-status.json`,在 `active[]` 中追加该 change 的索引条目(`name`、`current_phase: "00-init"`、`updated_at`),写回文件。
36
+ - 以上三步全部成功后,方可继续推荐入口。
33
37
  4. 推荐入口时优先使用用户显式别名;没有别名时按用户意图推荐一个横向 workflow。
34
38
  5. 执行任何 workflow 前,读取该 workflow 入口文件、阶段文件和模板。
35
39