@seanyao/roll 3.606.2 → 3.606.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # Changelog
2
2
 
3
+ ## v3.606.3 — 2026-06-06
4
+
5
+ ### 新功能
6
+
7
+ - 档案制写入端:待办与交付物同夹的布局支持,含编号到史诗的索引与垃圾回收命令(US-META-001)
8
+
9
+ ### 稳定性
10
+
11
+ - 版本探针读冻结引擎的化石串:version 显示旧号、update 自检误报、升级 nag 永不消失,三症同根(FIX-202) `[loop]`
12
+
13
+ ### 可见性
14
+
15
+ - 完成状态抢跑:PR 还没合并卡片就翻了完成,违反完成即已合主干的纪律(FIX-211) `[loop]`
16
+ - 面板对历史全瞎:周期记录缺时间戳,八次真实交付显示零,统计无从分桶(FIX-213) `[loop]`
17
+ - 面板对运行中的周期全盲:活性探测还读旧信号,真在干活却显示空闲零周期(FIX-203) `[loop]`
18
+ - (最小核) — roll loop now 改前台直跑:重入本 CLI run-once,agent 转录经 ROLL_LOOP_STREAM 实时打到当前终端(零 tmux 零弹窗零 tail);launchd 排程仍走静默 runner;buffered 用量采集不变 (#470)(US-PORT-011)
19
+
20
+ ### 自动化流水线
21
+
22
+ - 终态失真:真实交付已合并完成,周期记录却写失败,失败语义被稀释(FIX-214) `[loop]`
23
+ - 无人值守周期自产实拍:给截屏调度器加终端通道,无图形环境时诚实跳过留痕(US-ATTEST-011)
24
+ - roll release v3 原生重写:版本号引导、changelog、PR 与 tag 流程提示;发版闸已在 CI(US-PORT-004)
25
+ - loop 读面子命令 TS 薄读取(eval、runs、story、signals);tmux 流的 monitor 与 attach 退役(US-PORT-007)
26
+ - dream 服务出 v3 runner(复用调度模板模式)或裁定退役;现状是断链僵尸(US-PORT-008)
27
+ - loop cycle cycle-20260606-050516-6852 (#477)(PR#477)
28
+
29
+ ### 工程和测试
30
+
31
+ - 迁移命令嵌套仓盲区:对私仓的搬迁打到主仓上,吞错自报成功,修执行面并补嵌套形态测试(FIX-215) `[loop]`
32
+ - 档案迁移命令:读索引按清单搬树改名重建链,演练模式先行,可重入有测试(US-META-002a)
33
+ - difftest 卸 oracle:领域服务层一批对拍全部转冻结期望,测试期不再起 bash 或 python 引擎(US-PORT-009b)
34
+
35
+ ### 其他
36
+
37
+ - v3 心脏首跑即瘫:skill 路径化石致 agent 盲开、改动漏回主仓、被杀不留痕、cycle 不可观测;修解析+钉题+连 .roll+信号善后+tmux 观测窗(FIX-204) `[loop]`
38
+ - 交付可以悄悄跳过验收报告:文本约束没牙,缺报告要在运行时留痕可审计,政策可升硬闸(FIX-207) `[loop]`
39
+ - 排程静默死亡:启用命令吞掉挂载失败照报成功,三小时无 tick 全靠人肉掩盖(FIX-212) `[loop]`
40
+ - 验收证据惯例升级:文本证据属 agent 自述可伪造,CLI 卡默认改为真实终端截屏走独立捕获通道,文本降级为补充(US-ATTEST-010)
41
+ - 验收口径补全:失败与阻塞有名分、敏感信息进档前遮蔽、报告生成后冒烟自检(US-ATTEST-012)
42
+ - 验收报告分层且自含待办全貌:卡情上下文与业务结论在前技术折叠,空章节裁剪,设计审查不改证据(US-ATTEST-013)
43
+ - 过程内联进报告:时间线与关键转折加折叠全转录,无人过程也可回溯(US-ATTEST-014)
44
+ - 执行存量迁移:演练过目后真跑,重写唯一活引用,全仓对账校验存档(US-META-002b)
45
+ - skills 验收文案同步新档案布局,跨仓改 roll-skills 后 bump submodule manual-only(US-META-004)
46
+ - changelog 生成同输入两次运行结果漂移:探针偶发失败静默切换过滤分支,17 条目消失(FIX-199) `[loop]`
47
+ - 观测窗可读性:裸流换三层关键节点转录,信号口径与验收报告时间线同源(US-PORT-012)
48
+ - roll brief TS 化:汇报口吻保留,默认一屏精简、细节折叠,跟随 locale 单语;agent 经结构化流只取终稿,绝不漏思考过程(US-PORT-002)
49
+ - roll idea TS 化:分类、自动编号、过 lint 规则落卡,与 backlog 存取同源(US-PORT-003)
50
+ - changelog 确定性输出转正:AI 润色降级为可选路径或退役,默认不再回落 bash(US-PORT-005)
51
+ - config 写面 TS 化,整个 config 命令收口(US-PORT-006)
52
+ - difftest 卸 oracle 第一步:立可复用的冻结期望转换范式,先转规格层与基础设施层两批验证可行(US-PORT-009a)
53
+ - difftest 卸 oracle:命令行只读命令一批对拍转冻结期望(US-PORT-009c)
54
+
3
55
  ## v3.606.2
4
56
 
5
57
  ### 稳定性
package/bin/roll CHANGED
@@ -1948,7 +1948,7 @@ _check_installed_version_or_retry() {
1948
1948
  local expected installed pkg_dir
1949
1949
  expected="$(npm view @seanyao/roll version 2>/dev/null || true)"
1950
1950
  pkg_dir="$(npm root -g 2>/dev/null || true)"
1951
- installed="$(grep "^VERSION=" "${pkg_dir}/@seanyao/roll/bin/roll" 2>/dev/null | sed 's/VERSION="\([^"]*\)"/\1/' || true)"
1951
+ installed="$(_tree_version "${pkg_dir}/@seanyao/roll")" # FIX-202: package.json, not fossil VERSION=
1952
1952
 
1953
1953
  [[ -z "$expected" || -z "$installed" ]] && return 0
1954
1954
 
@@ -1957,7 +1957,7 @@ _check_installed_version_or_retry() {
1957
1957
  npm cache clean --force &>/dev/null || true
1958
1958
  npm install -g @seanyao/roll@latest &>/dev/null || true
1959
1959
  local after
1960
- after="$(grep "^VERSION=" "${pkg_dir}/@seanyao/roll/bin/roll" 2>/dev/null | sed 's/VERSION="\([^"]*\)"/\1/' || true)"
1960
+ after="$(_tree_version "${pkg_dir}/@seanyao/roll")"
1961
1961
  if [[ -n "$after" && "$after" != "$expected" ]]; then
1962
1962
  warn "$(msg update.still_mismatch "$after")"
1963
1963
  fi
@@ -1987,7 +1987,7 @@ cmd_update() {
1987
1987
  fi
1988
1988
 
1989
1989
  local new_version
1990
- new_version="$(grep "^VERSION=" "$ROLL_PKG_DIR/bin/roll" 2>/dev/null | sed 's/VERSION="\([^"]*\)"/\1/' || true)"
1990
+ new_version="$(_tree_version "$ROLL_PKG_DIR")" # FIX-202: package.json, not fossil VERSION=
1991
1991
  if [[ -n "$new_version" ]]; then
1992
1992
  info "$(msg update.new_version "$new_version")"
1993
1993
  fi
@@ -15326,6 +15326,31 @@ _notify_update() {
15326
15326
  warn "$(msg update.available "$latest")"
15327
15327
  }
15328
15328
 
15329
+ # FIX-202: read an install tree's version — package.json is the single source of
15330
+ # truth (v3 bumps it on release); the bin/roll VERSION= literal is only a
15331
+ # last-resort fallback for a tree predating the package.json convention. Used for
15332
+ # $VERSION (the running version) and by the update self-checks. Defined at the
15333
+ # foot so the resolution runs after every helper is sourced and so it adds no
15334
+ # lines above the line-coupled extraction regions other difftests rely on.
15335
+ _tree_version() {
15336
+ local tree="$1" v=""
15337
+ if [[ -f "${tree}/package.json" ]]; then
15338
+ v="$(grep -m1 '"version"' "${tree}/package.json" 2>/dev/null \
15339
+ | sed 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/' || true)"
15340
+ fi
15341
+ if [[ -z "$v" ]]; then
15342
+ v="$(grep "^VERSION=" "${tree}/bin/roll" 2>/dev/null \
15343
+ | sed 's/.*VERSION="\([^"]*\)".*/\1/' || true)"
15344
+ fi
15345
+ echo "$v"
15346
+ }
15347
+
15348
+ # The running version is the tree containing THIS bin/roll ($(dirname SCRIPT_DIR)),
15349
+ # independent of any ROLL_PKG_DIR override (tests isolate the curl-swap tree there).
15350
+ _running_v="$(_tree_version "$(dirname "$SCRIPT_DIR")")"
15351
+ [[ -n "$_running_v" ]] && VERSION="$_running_v"
15352
+ unset _running_v
15353
+
15329
15354
  if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
15330
15355
  _check_update_async
15331
15356
  main "$@"