Skip to content

Mount: add dsh-skin sub-protocol (DSH UI 皮肤加载公约 v1) - #17

Merged
T-Auto merged 2 commits into
T-Auto:mainfrom
Ebony-Vinyl:mount-dsh-skin
Oct 1, 2026
Merged

T-Auto merged 2 commits into
T-Auto:mainfrom
Ebony-Vinyl:mount-dsh-skin

Conversation

@Ebony-Vinyl

Copy link
Copy Markdown
Collaborator

分区声明(一次 PR 只做一类事)

本 PR 只做生态收录(新增一个子协议)。挂载(gitlink + .gitmodules)、registry/ 条目、以及 docs/directory-guide.md §4 对新增子协议要求的文档同步,是同一次收录的三个互依部分(CI 对前两者做双向一致性校验);每项依赖在下文逐条列出。未改动任何校验规则、治理规则与既有条目。


Status: Experimental(照录上游)。公约仓 convention.md 头表自称 Experimental,维护者 DSH-EAC;本索引 statusSource: "upstream",只登记、不授予、不晋级。

Scope: 收录子协议 dsh-skin(DSH UI 皮肤加载公约,协议 id dsh.ecosystem.ui-skin-loader/v1):挂载 vendor/sub-protocols/dsh-skin(directory-guide.md §7 预留落位),buildsOn: ["dsh-std"],specEntry: convention.md,维护者 DSH-EAC。

Normative change: 无。公约正文按 commit 846834963a8ff66f7a949560d3566b8a35e37cf1 原样挂载,本仓库不复制、不改写;本 PR 只做挂载、索引与说明。

Compatibility impact: 纯新增。一个新挂载、一条新索引、若干文档同步;不改动任何既有条目、挂载、规则或链接语义。vendor/ 只新增挂载点 gitlink,“无游离文件”规则仍然成立。

收录理由 / 类别判定 / 状态出处

  • 收录理由:兑现 directory-guide.md §7 为“皮肤 / UI 插件协议(基于 dsh-std)”预留的落位 vendor/sub-protocols/dsh-skin,生态自此有第一个子协议收录。
  • 类别判定:sub-protocol——它建立在元协议 dsh-std 之上,定义“皮肤插件与加载器如何协作”这一具体领域行为;不是“关于协议的协议”(非元协议),也不是某个产品的实现(非范例)。
  • 状态出处:公约仓 convention.md 头表自称 Experimental、维护者 DSH-EAC,索引照录。

分工声明(本公约与相邻体系互不重叠、不竞争):

  • 本公约:跨宿主、实现无关的加载启停弱约束——皮肤不占用什么、何时被启用、收到什么、何时必须彻底关闭(公约 §3–§5);
  • DSH-EAC/dsh-ui-skin-manager:强契约的包格式、事务与故障隔离体系(ADR 0001–0003),公约刻意不碰(公约 §7);
  • DSH-EAC/DSH-Desktop-EAC-UI-Skin-Authoring-Convention:EAC 桌面宿主的槽位拓扑与能力边界,是本公约之下的一种宿主实现约定。

三者互不重叠、不竞争;本 PR 兑现 directory-guide.md §7 预留落位。

需要同步修改的索引与文档(均包含在本 PR 内,单 commit):

文件 改动
.gitmodules + vendor/sub-protocols/dsh-skin 新挂载(gitlink mode 160000,钉在 8468349)
registry/protocols.json 新增 dsh-skin 条目(updated → 2026-09-25)
docs/overview.md 收录表行;新增 §3.1 摘要节(是什么 / 三节强制内容速览 / 可选槽位 / 分工);角色边界表行;§7 状态句同步
vendor/README.md 目录树与挂载表
vendor/sub-protocols/README.md “当前为空”更新为第一个落地子协议(该文件自己要求把第一个子协议入口补进 ../README.md 挂载表)
docs/directory-guide.md §7 皮肤 / UI 插件协议预留行随本次收录兑现,移出“尚未落地”清单
README.md 首页目录树与挂载表镜像同步
.github/workflows/ci.yml(依赖性改动,按 CONTRIBUTING §4 声明) mounts job 显式列出挂载,新增本挂载的浅初始化与 convention.md 存在性校验,使深校验覆盖新 pin;校验规则本身零改动

Evidence: node scripts/verify-structure.mjs 本地通过(4 个挂载全部 --init 之后):

1. 顶层目录白名单
  ok    16 个顶层跟踪条目全部在白名单内

2. .gitmodules 解析
  ok    解析出 4 个挂载

3. registry 索引文档
  ok    protocols.json:3 条,字段与类别前缀合法
  ok    implementations.json:1 条,字段与类别前缀合法
  ok    profiles.json:0 条,字段与类别前缀合法

4. 索引与挂载双向一致
  ok    4 条索引与 4 个现行挂载双向匹配
  ok    vendor/ 下 7 个跟踪条目均为挂载点或说明文件

5. Markdown 相对链接
  ok    17 个文档中的 100 个相对链接全部可解析

6. 挂载内规范入口
  ok    已检查可用的 specEntry

————————————————————————————————————————

✓ 结构校验通过:目录、索引、挂载与文档链接一致

Fixtures: 无——本仓库不持有 conformance suite。

Conformance impact: 无。公约未定义 conformance suite;收录只是索引登记,不构成认证。

Migration: 无。跟踪本仓库的消费者重新 git submodule update --init 即可取到新挂载。

Rollback: 删除 gitlink、.gitmodules 条目、索引条目与文档同步即可,无数据或格式迁移。

Scope: one category of change - ecosystem admission of a new sub-protocol
(docs/directory-guide.md §4). The mount (gitlink + .gitmodules), the registry
entry, and the doc syncs that admission requires are interdependent and each
listed below. No verifier rule, no governance rule, and no existing entry is
touched.

Status: Experimental upstream. The convention repository's own header table
(convention.md) declares status Experimental and maintainer DSH-EAC; the index
copies that declaration (statusSource: upstream) and invents none.

Normative change: none authored here. The mounted covenant text (protocol id
dsh.ecosystem.ui-skin-loader/v1) is pinned unmodified; this repository only
mounts, indexes and describes it.

Pinned revision:
  dsh-skin (new)   846834963a8ff66f7a949560d3566b8a35e37cf1   DSH-EAC/dsh-ui-skin-loader-convention

What the entry says:
- id dsh-skin (the path directory-guide.md §7 reserved for this sub-protocol),
  category sub-protocol, buildsOn dsh-std, mount vendor/sub-protocols/dsh-skin,
  specEntry convention.md, status Experimental (upstream-declared). It is a
  weak-constraint covenant: the minimal seam between skin plugins and a loader
  - what a skin must not occupy, when it is enabled, what it receives, when it
  must shut down completely.

Doc syncs required by docs/directory-guide.md §4 for a new sub-protocol:
- docs/overview.md: admission table row, a new §3.1 digest section (what it
  is, the three mandatory sections §3-§5, the optional add-only slot
  mechanism, the division of labor vs. the strong-contract manager and the
  host authoring convention), and the role-boundary table row;
- vendor/README.md: directory tree and mount table;
- vendor/sub-protocols/README.md: "currently empty" wording updated to the
  first landed mount, per that file's own instruction to link the first
  sub-protocol into ../README.md's mount table;
- docs/directory-guide.md §7: the reserved row for the skin / UI plugin
  sub-protocol is fulfilled by this admission and removed from the
  not-yet-landed list;
- README.md: homepage directory tree and mount table mirrored.

Dependent CI change (declared per CONTRIBUTING.md §4): the mounts job lists
mounts explicitly; vendor/sub-protocols/dsh-skin is added to its shallow-init
step and its specEntry (convention.md) to the existence check, so deep
verification covers the new pin. No check rule itself changed.

Division of labor: this covenant is a cross-host, implementation-agnostic,
weak load/start-stop seam. Strong-contract package format, transactions and
fault isolation (ADR 0001-0003) stay with DSH-EAC/dsh-ui-skin-manager; EAC
desktop host slot topology and capability boundaries stay with
DSH-EAC/DSH-Desktop-EAC-UI-Skin-Authoring-Convention, a host implementation
convention under this covenant. The three do not overlap and do not compete;
this mount fulfils the slot reserved in directory-guide.md §7.

Compatibility impact: additive. One new mount, one new index entry, doc
syncs only; no existing entry, mount, rule or link changes meaning.
vendor/ gains only the mount point (gitlink), so the no-stray-files rule
still holds.

Evidence: node scripts/verify-structure.mjs passes locally with all four
mounts initialized: 16 top-level tracked entries whitelisted, 4 mounts
parsed from .gitmodules, 3+1+0 index entries valid, 4 index entries matched
bidirectionally to 4 live gitlinks (dsh-skin at mode 160000, gitlink
846834963a8ff66f7a949560d3566b8a35e37cf1, fetchable from the .gitmodules
URL), 100/100 relative links resolved across 17 documents, and all
specEntries present including vendor/sub-protocols/dsh-skin/convention.md.

Fixtures: none - this repository holds no conformance suite.
Conformance impact: none. The covenant defines no conformance suite;
admission is indexing only, not certification.
Migration: none. Consumers tracking this repository should re-init
submodules to pick up the new mount.
Rollback: drop the gitlink, the .gitmodules entry, the registry entry and
the doc syncs; no data or format migration involved.
…→ c7fa652)

公约 §9 示例伪码与 minimal-skin 骨架经实机核对修正为真实 client API 形态
(顶层 exports.inject 服务注入 + exports.apply(ctx) 内经加载器服务对象
registerSkin + ctx.effect 反登记);§9 伪码性质与自检表不动,§4.2 机制自由
表述不受影响。.gitmodules 不变,仅 gitlink 前进。
@Ebony-Vinyl

Copy link
Copy Markdown
Collaborator Author

公约 §9 示例伪码经实机核对修正(covenant 仓 8468349 → c7fa652):原伪码教的 ctx.inject(["uiSkinLoader"]) 在 client 运行时不存在(对 @deepseek-ai/dsh@0.1.7-rc.2 实测定案,api-notes §4 R10)——真实形态为 client bundle 顶层 exports.inject = ["uiSkinLoader"] 声明 cordis 服务注入 + exports.apply(ctx) 内经加载器服务对象 ctx.uiSkinLoader.registerSkin(...) 登记、反登记包进 ctx.effect。§9 保持伪码性质、自检表与 §4.2「机制自由」表述不动;examples/minimal-skin 骨架同步对齐。本 PR 的 submodule gitlink 已 bump 至 c7fa652(.gitmodules 不变)。

@T-Auto
T-Auto merged commit c29dfa2 into T-Auto:main Oct 1, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants