Skip to content

Releases: Fishsb/dsh-project-nav

@dsh-external/project-nav v0.10.4

Choose a tag to compare

@Fishsb Fishsb released this 12 Sep 17:00

v0.10.4 — 仓清理版(.gitignore 死规则收敛,不进包)

内容

.gitignore 收敛三条已失效的强制入仓规则!.internal/!.internal/events.jsonl!.internal/ARCH-MODEL.md(连同 .internal/runtime|legacy 规则)。

判因:本仓不是治理根(治理根是 D:\FF,事件流与模型快照在那边)。此前的 PROJECT.md / .internal/ARCH-MODEL.md / .internal/events.jsonl 是 0.9 自举期的历史快照——永远无法被 nav_render 重算,且携带假事实,已随死投影清理删除 ⇒ 为它们保留的 ! 规则成了空承诺。按 F3/F8「能删才不留假 STALE」收敛为单一 .internal/ 忽略。

files 不含 .gitignore除版本号外包内容与 0.10.3 相同,无运行时 delta

版本口径澄清(写进 README §8 与 AGENTS §2)

「每次更新」= 任何合并进 main 的改动,含不进包的仓清理(.gitignore / test/ / 本地脚本等),一律 +0.0.1不设「太小不必升」的判断口子;只有架构换代才跳位。
理由:可判定性高于省一个版本号 —— 0.10.0–0.10.2 的发布链缺档正是「靠判断决定要不要发布」的产物,留判断口子等于重造同类缺陷。

验证

  • npm test:19 pass / 0 fail(四套件)
  • install.ps1 自证:14 个进包文件逐文件 SHA256 一致
  • verify-install.ps1 + verify-runtime.mjs:全绿

@dsh-external/project-nav v0.10.3

Choose a tag to compare

@Fishsb Fishsb released this 12 Sep 13:49

v0.10.3 — 仓清理版(包内容与 0.10.2 逐字节相同)

内容

删除三个不进包的死投影:PROJECT.md / .internal/ARCH-MODEL.md / .internal/events.jsonl

判因:它们产自 0.9 自举期,而本仓不是治理根(治理根是 D:\FF,事件流在那边)⇒ 永远不会被 nav_render 重算 ⇒ 不是投影,是伪装成投影的历史快照,且携带假事实(主线仍写"安装 0.9.0"、引用已删的 HANDOFF.md / core/legacy.js)。三者都不在 package.jsonfiles 内,故本版包内容与 0.10.2 逐字节相同,仅版本号与三份文档变化,无运行时 delta

⚠ 发布链缺档(如实记录,不掩盖)

本仓此前只在远端有 v0.9.1 / v0.9.2 两个 tag0.10.0 → 0.10.1 → 0.10.2 三版从未打 tag、从未建 Release,而 README §8 与徽章早已按 0.10.x 记述 —— 即徽章链向的 release 长期不存在。本版起恢复 tag 习惯;前三版不回填(其 tgz 已不在仓内,回填只会造出无产物的空 tag)。

验证

  • npm test:19 pass / 0 fail(四套件)
  • install.ps1 自证:14 个进包文件逐文件 SHA256 一致
  • verify-install.ps1 + verify-runtime.mjs:四段全绿(事件流 154 事件可读 / 依赖图 132 文件有出边 / 七闸可调 / core/legacy.js 确不在实体 / 架构档指纹机制已移除)

@dsh-external/project-nav v0.9.2

Choose a tag to compare

@Fishsb Fishsb released this 11 Sep 10:53

v0.9.2 — 拆掉工作区边界:权限/沙箱归宿主

为什么拆

宿主 cordis.yml 已有完整权限面,插件从未实现任何强制:

- id: sandbox-policy                      # 全局默认
  config: { mode: !!js process.env.DSH_PERMISSION_MODE ?? 'workspace-write' }
- id: permission                          # 三档预设
  config: { presets: { read-only: …, workspace-write: …, danger-full-access: … } }
- id: ui-permission                       # 界面上切换

真正落地强制的是 dsh-sandbox-windows-acl / dsh-fs-sandbox / dsh-pwsh-sandbox
本插件做的唯一一件事,是在 agent/session-start 往会话日志 append('sandbox/mode', {mode:'workspace-write'})
把宿主模式重新钉回去——白名单默认还是空(什么都不绑)。所以拆掉不削弱任何安全边界
只去掉"替宿主按开关"这一层,并把模式归回一个地方管。

拆掉了什么

  • core/boundary.jsgovernedWorkspaceOf 纯函数)与 host 末尾 re-export
  • host 边界段(一次性只读探针 + 重探节流 + boundary-diag.json + 会话决策留痕,约 100 行)
  • Config 两键 boundaryWorkspaces / autoBindWorkspace
  • 依赖面 ['tools','shell']['tools']:shell 原是探针硬依赖,shell 不可用会拖住插件加载
  • renderHealth 的 boundary 输出行;测试 3 例(core 2 + host 1)
  • 历史设计档保留(事故事实,不是活代码)

顺带修掉一个真 bug(拆边界时暴露)

nav_node retire 写入的 id 用了模型全 id(feature:pn-f06)而不是裸标识(pn-f06),
折叠时 ensure() 再拼一次前缀 → 事件变成 retire of unknown … 被丢弃,而工具照样报「✓ 已退役」
修法:从模型节点 id 字面切回裸标识(与登记名大小写无关),并补写后核验——
状态不是 retired 就返回 ERROR 并附模型自检报告("接口返回不代表生效")。

验证

core 43/43 · architecture 22/22 · concurrency 12/12 · host 21/21   合计 98/98

产物 dsh-external-project-nav-0.9.2.tgz:内部 version = 0.9.2,core/ + host/ 12 个源文件与源码逐字节 SHA256 一致
(比 0.9.1 少一个 = 被删的 core/boundary.js)。

升级注意

0.9.2 起 boundaryWorkspaces / autoBindWorkspace 两个配置键已不存在,profile 的 patch 层里若还留着请一并删掉。
装完仍需手动重启 dsh-web 才生效。

@dsh-external/project-nav v0.9.1

Choose a tag to compare

@Fishsb Fishsb released this 11 Sep 03:00

v0.9.1 — 架构换代首发(0.9.0 → 0.9.1)

本项目首次发布 Release。v0.9.0 是从架构出发的一次性重写(不是加功能,是换骨架),0.9.1 清理换代后的残留。两者合并在一个提交里(fc9a38f)。

换代要点(0.9.0)

  • 唯一事实源:一条 append-only 事件流 .internal/events.jsonl(I1);追加后读回校验(F9)
  • 模型是折叠:架构模型落在可丢弃的 .internal/runtime/ —— 删掉它治理零损失(I3)
  • 一切都是渲染:PROJECT.md 标记区 / ARCH-MODEL.md / 地图 / 架构档指针全部由模型生成,永不手写(I2)
  • 六闸成为查询:锚点 / 范围 / 主线 / 计数 / 决策 / 完结,全部是唯一写入口 nav_commit 内的纯查询 —— 没有 begin/done 生命周期,因而不产生孤儿状态
  • 收口靠证据:判据是「scope 文件变了吗」,不是会话身份;杀掉会话,意图仍会被任意会话自动收口(A1)
  • 工具面 11 → 6nav_graph(读)· nav_commit(意图)· nav_decide(ADR)· nav_node(节点)· nav_render(投影)· nav_set(主线向量)
  • 数据面 7 → 3shared/index.js 整体替换为 core/ 十个模块
  • 一次性迁移器:旧 5 个账本折叠为事件并归档为只读快照(.internal/legacy/,不再被任何读路径读取)
  • 事故事实 F1–F9 保留为需求(见 ARCHITECTURE.md §8),架构可重画、这些事实不能改

0.9.1 清理

  • 删架构换代后的遗留导出 9 个:paths.diag / paths.legacyFile / RUNTIME_FILES.DIAG / logSize / nowStamp / parseNodeId / renderGateReport / projectMtime(+ 连带死 import statSync
  • 删死配置 leaseTtlMs(v0.8.x 租约机制的遗留;0.9.0 已改为按证据收口),两份 README 同步删除
  • 补上零覆盖的契约用例:断言 6 个工具全部注册在 ctx.effect 内(否则插件卸载会留下残留工具)
  • 文档对齐:用例数 100 → 101,并修正两份 README 里早先就已漂移的细分计数

验证

core 46/46 · architecture 22/22 · concurrency 12/12 · host 22/22   合计 101/101, fail=0

产物 dsh-external-project-nav-0.9.1.tgz 已自证:内部 version = 0.9.1,10 个关键文件与源码逐字节 SHA256 MATCH

安装

npm pack --cache .npm-cache      # 或直接用本 Release 附件
# 装进 profile(不经 npm:profile 含 link: 依赖,npm 会 EUNSUPPORTEDPROTOCOL)

装完需手动重启 dsh-web 才生效(装 ≠ 生效,两条时间线)。升级到 0.9.x 前请先读 docs/runbook-0.9.0-switch.md:迁移是一次性的,且 0.9.x 与 0.8.6 不能混用(前者不读旧账本,后者不读事件流)。