Skip to content

v2.0.0

Choose a tag to compare

@drscrewdriver drscrewdriver released this 22 Oct 12:27
· 130 commits to main since this release

v2.0.0

Fixed

  • The gate stood down on every call under DSH 0.1.2, so the Approvals page stayed empty. The
    session's permission-preset fold read the log as exec.agent.session.events. DSH 0.1.1 exposed
    that array; 0.1.2 made the log private behind Session.snapshotEvents() / ownEvents() and kept
    no events member, so the read returned undefined, presetOf answered undefined, and
    presetInScope(undefined, ['permissive']) made gateActive false for every call: no rule,
    grant, deny-keyword, classifier, or P0 hard-deny decision, and no audit event — including in
    sessions that had selected the gate's own tier, which is why the tab showed "本会话暂无审批记录"
    rather than a failure. The fold now reads the log through every known accessor shape
    (events array, snapshotEvents(), ownEvents()) and degrades to "no events" only when the host
    exposes none; the fold cache keys on the log's length plus its last event's identity, since a
    0.1.2 snapshot is a fresh array over the same frozen events on every read. test/preset-scope.spec.ts
    pins both shapes: a 0.1.2-shaped session must yield a decision (and a recorded event), and a
    grown log must re-fold so a preset switch takes effect on the next call.

Changed

  • The main line's version series is now 2.x, tracking the DSH line it serves. 1.x
    is the DSH <= 0.1.1 line and 2.x is the DSH 0.1.2+ line, so a plugin version says
    which DSH it was built for; 2.0.0 is the first release of the new series and the
    0.2.x releases (0.2.0, 0.2.1-beta.2…beta.5) are superseded by it. The majors
    fence each other — ^1.0.0 does not resolve 2.0.0 and ^2.0.0 does not resolve
    1.0.0 — so an existing ^0.2.1-beta.4 install (which also does not resolve 2.0.0)
    must be bumped deliberately. engines.dsh states the same split
    (>=0.1.2-alpha.1 <0.2.0-0 here, >=0.1.0-rc.7 <0.1.2-alpha.1 on legacy), but DSH
    never reads it: the version ranges and dist-tags are what keep an old DSH on 1.x.
  • The permission tier is labelled 自动审查 on every surface, with no icon. The preset's
    name: in cordis.patch.yml is now the Chinese product string, and the General-settings default
    row, the composer picker, and the plugin's settings tab all show it. DSH 0.1.2 renders a
    plugin-contributed tier's name: verbatim and localizes only the three built-in values
    (仅可查看 / 工作区内修改 / 完全权限), so the one host-supplied string is what a zh session sees;
    the tier's machine value stays permissive, which is what gatePresets matches. The
    permission-picker icon decoration is removed (src/client/permission-icon.ts deleted): it existed
    to match the retired auto tier's shield glyph, it applied to the settings row through the
    0.1.2 aria-haspopup="menu" selector, and a plugin tier draws no glyph because the composer's
    glyphs are keyed to the built-in values only.

Release backfilled on 2026-10-22 from git tag + CHANGELOG history.