feat(overlay): 覆盖网络线 序㊾ —— 探针观测面改「两台中继并集」(附 序㊽ 源码/文档补提交)
序㊾(本棒):
- scripts/overlay-probe.cjs:OBS-01 / OBS-08 / OBS-09 的数据源由「只读 47 中继」
改为「按两台中继取并集」,消除 worker 归属漂移时的假红 / 假 SKIP
· endpoints 以 network:hostId:port 为键合并,online 取「或」、localPort 取在线那一侧
· used 按 network/hostId 去重计数(不求和,避免凭空放大在册数)
· localPort 属中继机回环落点 ⇒ 按归属分机探活(106 侧落点由 106 机上探)
· derived(OBS-11)保持 47 视角;阈值与判据一律未放宽
· OBS-16 计数约束:对 47 /status 的读取仍为三次、Δ 只取 47 的 counters;
对端 106 的采样为独立一次,落在第三次采样之后,不进 (status2, status3] 门窗口
· 新增 --peer-status-fixture(并集的对端那一半)与「并集不可取证」强制留痕
- 交接单《覆盖网络-序45-低熵块治理-测熵与实现》§16 全节(§8 前前缀逐字未变)
- 参数表 §11.16 补记(§10 现算指纹未变,值格未动)
附(前几棒已完成并已部署、但尚未入仓的源码 / 文档):
- src/net/relay/content/*.ts、src/net/relay/index.ts、main.ts:块级寻址 C 域分离
- src/supervisor/orchestrator.ts、src/worker/agent.ts:日志采集与巡检(方案 C)
- test/overlay-content.test.mjs:随附用例(npm test = 200 pass / 0 fail / 1 skipped,Node 22)
- scripts/dshlog.mjs(跨机日志取证)、scripts/overlay-entropy.cjs(熵探针)
- dsh-server-docs/04-调整方案/129、133;INDEX.md / docs-manifest.json / 交接单 README 登记
This commit is contained in:
1 parent
45b4999d24
commit
d2ef362a98
20 files changed
+2998
-183
No files matched your search
@@ -1,9 +1,9 @@
|
||||
---
|
||||
name: dsh-opensource-release
|
||||
description: DSH 多租户托管平台的「开源导出与版本迭代」技能 —— 把私有代码仓导出成可公开的开源副本(脱敏 / 去插件 / 分层授权 / 重写说明文档),并在后续版本里安全地重跑导出、登记版本。当用户说「开源一份」「导出到 GitHub」「发新版本」「改一下开源那份的脱敏/授权/说明」「开源那份同步一下」时触发。核心:**源仓库只读** + **阻断性探针 0 命中**才准放行 + **OVERLAY 手工撰写层**不得被重建抹掉。
|
||||
version: 1.6.0
|
||||
updated_at: 2026-09-15
|
||||
last_change: 1.6.0(2026-09-15):用户立 **K8s 长期策略** —— 「后续获取开发项目代码时**跳过** K8s 相关部分,**就用当前清除/修改后的版本**」⇒ 新增 **R-O14**(源仓那侧视为**废弃分支**;判定标准 = 构建 `blocking hits: 0`),并**修掉会误导未来会话的过期事实**:① §2「保留」列表原写 `deploy/`(11) 与 `poc/`(16) **要保留** —— 与 K8s 政策**直接冲突**(会让未来会话把它们加回来)⇒ 改为「K8s 相关一律不带」+ 指向 `_K8s排除台账.md` / `_k8s_scan.py`;② §0 的 `dsh-web-platform` → **`dsh-users-platform`**、中文母本 → **英文为主(`*.zh-CN.md`)**、首发行 → **v1.1.0 / 153 文件 / 历史已重置为单条提交 `a327649`**、补计数现状(OVERLAY 26 · REQUIRED 54 · INCLUDE_DIRS 6 · EXCLUDE_FILES 9 · DROP_SCRIPTS 8);③ 标注 `K8S_SEMANTIC_RULES`(清「不含 `k8s` 字样但语义已不成立」的描述)与 `_apply_k8s_semantics.py`(本机 `--force` 被安全删除层拦下时的**热应用**替代路径)。1.5.2(2026-09-13):`assets/` 漏收录 + 空括号残渣两处真问题。
|
||||
version: 1.7.8
|
||||
updated_at: 2026-09-18
|
||||
last_change: 1.7.8(2026-09-18):**双轨的轨 2 从「README 一段散文」升格为独立文件**(用户选「B 模式」后的正向落地,提交 `25f930f`)—— 新增 `_overlay/COMMERCIAL-LICENSE.md` + `.zh-CN.md`,`OVERLAY` **28 → 30**、`REQUIRED_EXPORT` **58 → 60**,四份 README 授权节尾各 +1 句链接;并立 **§5 三条措辞铁律**(⚠️ 写成「平行的许可选择」⛔ 绝不写成"对 AGPL 的限制" · **文件名刻意不以 `LICENSE` 开头** · **正文不含项目名** ⇒ 改名窗口期两版通用);同时记 🔴 **归档里那份自拟「个人免费/商用须书面授权」`LICENSE` 不得放回**(§三 放 AGPL 项目里 = §10 追加限制 = 罗盒案否定)。新增 **坑 20 —— 新增中英文件对必须同步登记 `_check_parity.mjs` 的 `PAIRS`,否则这对中英**静默跳过**对等检查**。1.7.7(2026-09-18):**新增 §6b「多远端推送」**(GitHub 主仓 `origin` + CNB 镜像 `cnb`)—— 含远端表、`git remote add` 一次性配置、**只推 main(备份分支含改名泄漏期旧内容,绝不外推)**、⚠️ **CNB 推送必须后台跑**(实测前台 180s 被 SIGTERM 杀掉,仓库仅 1.67 MB、207 objects ⇒ 与体积无关;后台 20s 完成),以及**「三方同 hash」验收判据**;并记录「README clone 地址保持指向主仓、如需改指镜像须先问用户」。1.7.6(2026-09-18):**新增坑 19 —— `cp _overlay/<f> <仓>/` 会把「下一版内容」整份带进当前版**(改名窗口期血证,已误发上公网)—— 真实危害是**功能性缺陷**(README 让用户 clone 一个当时**空**的新仓 ⇒ 照做的人克隆到空仓库、部署直接断);最阴的一点是这类误覆盖会让「导出仓 vs `_overlay` 的 diff **变空**」,而**空 diff 本身就是覆盖证据**、不是"一致"的好消息;并加**推前两条必做复核**(新名 grep 须为空 + 部署命令自洽)。1.7.5(2026-09-17):**新增「发布合规审查」为验证第 ⑦ 件套**(用户要求:查**侵权 / 负面影响 / 涉政治**)—— 附「合规审查三关」表与判据(⚠️ **负面词命中不必然要改**,判据是「这句对外有正面价值,还是只在自曝」;自曝已发生事故的一律改为只讲**设计动因**);同时把 `core.autocrlf=true` 的陷阱写进第 ② 项(比对 overlay ↔ 仓库**必须用 git blob**)。1.7.4(2026-09-17):**「AI 生成」口径改为「人负责规划与关键判断,AI 负责实施」**(用户同日 11:44 曾要求全删、**11:48 改为本条 ⇒ 以本条为唯一现行口径**)—— 落点:README Hero 徽章 `code & docs-human-planned, AI-implemented`(徽章 **5** 个)+ 一行声明 · `manual/project.{md,zh-CN.md}` **新增 `## How this project is built` / `## 项目如何建成`**(一行声明 + 2 行「环节 → 由谁负责」表)· 两份 README 文档地图 · `_upload_audit.mjs` 提交文案。**这是法律加固**:中国版权保护中心 2026 新规判据 = **人类独创性智力投入**,旧口径「全部由 AI 生成」= 自认纯 AI ⇒ 商业授权缺标的物;新口径**恰恰确立人类投入**。⛔ 不要写回「全部由 AI 生成」,⛔ 也不要照 09-13 删掉「人的角色」。1.7.3(2026-09-17):**按用户指令删除全部「AI 生成」表述** —— 范围:README Hero 的 `AI-generated` 徽章与一行声明 · `manual/project.{md,zh-CN.md}` 的 `## AI generation` 整节 + 4 行来源表 + H1 字样 · README 文档地图字样 · `_upload_audit.mjs` 提交文案(顺带修掉同行过时的「模式 B(Kubernetes)实验性」)。**起因** = 中国版权保护中心 **2026 新规「纯 AI 生成的软件不予登记」**⇒ 自认纯 AI 会让商业授权**缺标的物**。⚠️ **推翻 2026-09-13 的旧口径**(当时要求「AI 生成」是第 1 个正文章节、「三处一个都不能少」)—— 以 09-17 为准。✅ 保留 `DeepSeek V4 / V4.1 flash` 模型标注徽章(徽章 5 → **4** 个)。1.7.2(2026-09-17):**授权定案「双轨」并落地** —— 用户两轮追问 Commons Clause 后选定:**轨 1 = AGPL-3.0 原样(不加任何限制)**、**轨 2 = 商业授权**(`[email protected]`)。重写 **§5** 整章,含两条铁律(① **绝不在 AGPL 上加限制**,含「只禁售源项目」这种窄限制 —— 依据 §10/§7 + OSD 第 6 条,判据是「有没有限制」不是「限制多窄」;② **也不需要加** —— AGPL 的 copyleft 本身就实现防白嫖转售)与两条配套事实(**CC 只能替换不能叠加** · **已发布版本收不回**);README 中英末节改写为双轨表述。1.7.1(2026-09-17):**更名 `dsh_ai1net`(中文「能力网络」)进入执行** —— 用户选定**方案 A**(env 前缀与数据根一并改)⇒ ① `_build_export.py` **46 行规则**改完(12 处目标值 + 34Line truncated
|
||||
agent_created: true
|
||||
---
|
||||
|
||||
@@ -32,7 +32,7 @@ agent_created: true
|
||||
| 6 | **废弃的中间候选名静默残留** —— 探针只探最老的名字,`_overlay` 里的中间名(`dsh-hosting`)漏了 72 处 | **所有曾用名**都进 `LEAK_PROBES` | §8 坑 14 |
|
||||
| 7 | **说明文档文案连改 7 轮**(替别人宣传 / 开头讲基线 / 议论式表述 / 授权在最前 / 把未验证的当可用 / 致谢太长) | 严格照 **R-O9–R-O12** 写;**写完自审一遍**再交付 | R-O9–R-O12 |
|
||||
| 8 | **脚本里用键名当标题**(`marks[k][0]` 拿到的是键 `"A"` 不是标题)⇒ 结构改写打歪,误删 `PoC` 的一个字母 | 结构改写用**完整标题字符串**做锚点;改完**读回原文复核**关键块 | 本表 #7 的同一节 |
|
||||
| 9 | **改工作根时漏改脚本常量 ⇒ 旧目录被"重建复活"**(2026-09-13 迁移到 `dsh-laijing-github` 时:先搬目录、后改 `OUT`,中间跑了一次重建 ⇒ 旧位置被重新建出 135 个文件,且**因旧位置没有 `_overlay` 而缺了 6 个手工层文件**;`_overlay` 本身侥幸没被洗掉) | **顺序必须是:① 改脚本常量(`OUT`+`EX`)→ ② 再搬/删目录 → ③ 重建验证**。迁完**必查旧目录没有复活**(`ls`),并核对 `find <repo> -type f \| wc -l` 与手工层 6 个文件是否都在 | §8 坑 17 |
|
||||
| 9 | **改工作根时漏改脚本常量 ⇒ 旧目录被"重建复活"**(2026-09-13 迁移到 `dsh-laijing-github` 时:先搬目录、后改 `OUT`,中间跑了一次重建 ⇒ 旧位置被重新建出 135 个文件,且**因旧位置没有 `_overlay` 而缺了 6 个手工层文件**;`_overlay` 本身侥幸没被洗掉) | **顺序必须是:① 改脚本常量 → ② 再搬/删目录 → ③ 重建验证**。迁完**必查旧目录没有复活**(`ls`),并核对 `find <repo> -type f \| wc -l` 与手工层文件是否都在。<br>🔴 **改名前先 `grep -rn "<旧路径>" --include="*.py" --include="*.mjs" --include="*.sh"` 把全部引用点扫出来** —— 2026-09-16 由 `dsh-laijing-github` 改名时实测:要同步的**不是 2 处而是 5 处**(`OUT` · `EX` · `_sop_check.mjs` / `_upload_audit.mjs` / `_verify_all.mjs` 各自的 `W`) | §8 坑 17 |
|
||||
| 10 | **白名单收录静默漏项:`assets/` 没进 `INCLUDE_DIRS`**(2026-09-13 用户问"确认都同步了吗"时查出)—— 导出的仓库缺 `assets/inject/{recovery,assist}.js`:`proxy.ts` 的 `loadInject` 会 **fail-fast 抛错**(平台起不来)、仓库自带 `scripts/verify-inject.cjs` 也会**判失败**;`package.json` 的 `files` 同样缺 `assets`(npm/git 安装也会缺) | 已补 `INCLUDE_DIRS`、`package.json` files 规则,并**新增 `REQUIRED_EXPORT` 清单(**23 项**)**:缺任何一项 ⇒ **构建判失败**(`return 1`)。以后新增"运行时要读的文件"必须同步加进该清单 | §3 · §8 坑 18 |
|
||||
| **10** | 🔴 **"顺手清理"的正则把 ASCII 标点也吃进去 ⇒ 直接改坏源码**(2026-09-13 去「档案 NN」时:清理规则写成 `[((]\s*[))]` / `[;;,,]\s*[))]`,**字符类里混了 ASCII `(` `)` `,` `;`** ⇒ 源码里所有 `foo()` 被删成 `foo`,`whitelist.ts` / `security-scan.ts` 当场语法错(tsc 报 *Invalid character* / *Unterminated string literal*)。**而当时 leak 探针全过**) | ⛔ **清理类正则只准碰全角标点(()·、,:;),绝不可把 ASCII 语法符号写进字符类**;<br>✅ **改完必跑 `_verify_tsc.mjs`,`exit 0 + no diagnostics` 是"没改坏代码"的唯一证据** —— **探针全过 ≠ 代码还活着**,两者查的是完全不同的东西;<br>另:`(\s*/\s*` 这类"吃掉前导斜杠"的规则会毁掉 `(/api/x)` 路径,一律不要写 | 本表新条目 · 台账 §八 D |
|
||||
| **11** | 🔴 **同一个名字既当"脱敏目标"又当"公开值" ⇒ 自相矛盾**(2026-09-13 填 `PUBLISH_*` 时:`maogeigei` 同时在 `GLOBAL`(替换为占位符)与 `LEAK_PROBES`(判泄露)里 ⇒ ① 刚填好的公开值被规则**改回占位符**,② 探针报 `blocking hits: 4`。**"占位符残留 0"是假象**) | ⛔ **任何进入 `PUBLISH_*` 的值,先 `grep -n "<该值>" _build_export.py` 确认它不在 `GLOBAL`/`LEAK_PROBES`/`INFO_PROBES` 里**;升格为公开身份后要**同时**从 GLOBAL **与** 探针移除(只删一处 = 另一种错);<br>公开联系方式的兜底应靠**更具体的探针**(如私有仓库域名 `work.alotbuy`),不要靠账号名 | 台账 §八 D2 |
|
||||
@@ -50,26 +50,28 @@ agent_created: true
|
||||
|---|---|
|
||||
| **中文名 / English name** | **DSH 用户平台** / **DSH Users Platform**(2026-09-14 由 `dsh-web-platform` 定稿改名) |
|
||||
| **文档语言(2026-09-14 定稿,覆盖 R-O13)** | **英文为主**:主文档 `*.md` 为英文 + 顶部中文入口;中文全文在 **`*.zh-CN.md`**;**`manual/` 8 篇 ×2 语言**;架构图也分语言(`diagrams/architecture{,.zh-CN}.svg`) |
|
||||
| **内容来源(用户 2026-09-13 定的重点卖点)** | **全部代码与文档由 AI 生成** —— 模型 **DeepSeek V4 / V4.1 flash**(**不写工具名**)。README 里有专节 `## AI 生成`(**位于「目录」之后、「亮点」之前**),Hero 区还有**一行声明 + 2 个徽章**(`code & docs-AI-generated`、`DeepSeek V4 / V4.1 flash`)—— **这三处一个都不能少** |
|
||||
| **内容来源(🔴 2026-09-17 定稿口径)** | **「人负责规划与关键判断,AI 负责实施」**(英文 `Human planning and key judgment; implementation by AI`)—— 模型 `DeepSeek V4 / V4.1 flash`(**不写工具名**)。⛔ 不要写成「全部由 AI 生成」(法律风险:中国版权保护中心 2026 新规「纯 AI 生成的软件不予登记」⇒ 商业授权缺标的物);⛔ 也不要照 2026-09-13 删掉「人的角色」。落点见下方「本项目定稿顺序」 |
|
||||
| ~~**文档语言**~~ | ⛔ **本行已作废** —— 2026-09-14 起改为**英文为主**,见上表「文档语言(2026-09-14 定稿)」行;<br>**R-O13 的「中文母本 + `*.en.md`」口径同时作废**,现状是 `*.zh-CN.md` 副本 |
|
||||
| **技术标识(仓库·包·服务·env 前缀)** | **`dsh-users-platform`** | `DSH_USERS_PLATFORM_*` | `/var/lib/dsh-users-platform`(中文名「DSH 用户平台」/ English「DSH Users Platform」) |
|
||||
| **曾用名(全部必须在 `LEAK_PROBES` 里)** | `dshs` · `dsh-multitenant` · `dsh-hosting` · **`dsh-web-platform`** · `DSH_WEB_PLATFORM_*` · `/var/lib/dsh-web-platform`;`taimiao` 未落地也一并加入 |
|
||||
| 🔴 **新名称(2026-09-17 用户定,🟡 执行中)** | **`dsh_ai1net`** —— 中文名 **「能力网络」** | 英文名 **`DSH AI1NET`** | 技术标识 `dsh_ai1net` / `DSH_AI1NET_*`。用户原话:「是 `E:\ProgramData\AI技能\aliyun-dsh-server` 对应**开源项目的新名称**」。**旧仓 `maogeigei/dsh-users-platform` 保留不动**(用户 09-16「之前的不动」),新仓 `maogeigei/dsh_ai1net` 已建(空仓),密钥 `id_ed25519_ai1net` 已绑。<br>**口径 = 方案 A(用户 09-17 08:18 选定)**:env 前缀 → `DSH_AI1NET_*` · 数据根 → `/var/lib/dsh-ai1net` · 库文件 → `dsh_ai1net.db`(与源仓在此项上**永久分叉**,映射规则在导出层)。<br>✅ **已完成(09-17 08:3x)**:`_build_export.py` **46 行规则** + 3 条旧名探针 · 6 个工具脚本 · `_overlay/` **13 文件 139 处** —— 均静态验证通过。<br>⏳ **待做**:源仓提交出冻结基线 → 重建 → `.git` 迁移 → 全量验证 → 推送新仓。<br>📄 作业书:`_改名执行清单_dsh_ai1net_20260917.md`(§零 进度 / §三 规则清单 / §四 步骤) |
|
||||
| **曾用名(全部必须在 `LEAK_PROBES` 里)** | `dshs` · `dsh-multitenant` · `dsh-hosting` · **`dsh-web-platform`** · `DSH_WEB_PLATFORM_*` · `/var/lib/dsh-web-platform`;`taimiao` 未落地也一并加入。**⚠️ 改名 `dsh_ai1net` 执行后,须把 `dsh-users-platform` / `DSH_USERS_PLATFORM_*` / `/var/lib/dsh-users-platform` 补进 `LEAK_PROBES`** |
|
||||
| **前名(已废弃,现为阻断探针项)** | `dsh-multitenant` / `DSH_MULTITENANT_*` / `/var/lib/dsh-multitenant` —— 2026-09-13 20:2x 由用户定名 `dsh-web-platform` 取代;`LEAK_PROBES` 已收录,**出现即判泄露** |
|
||||
| **源仓库(只读!)** | `D:\github\dsh_shenxian` |
|
||||
| **工作根(GitHub 开源专用文件夹)** | `E:\ProgramData\AI技能\dsh-laijing-github\`(2026-09-13 由 `aliyun-dsh-server\_开源导出_20260913\` 整体迁入;**本项目的独立开源工作区**,不再是 `aliyun-dsh-server` 的子目录) |
|
||||
| **仓库根(可直接 git init)** | `<导出根>\dsh-web-platform\` |
|
||||
| **工作根(GitHub 开源专用文件夹)** | `E:\ProgramData\AI技能\dsh-ai1net-github\`(2026-09-13 由 `aliyun-dsh-server\_开源导出_20260913\` 整体迁入;**2026-09-16 由 `dsh-laijing-github` 改名**;**本项目的独立开源工作区**,不再是 `aliyun-dsh-server` 的子目录) |
|
||||
| **仓库根(可直接 git init)** | `<导出根>\dsh-users-platform\`(**172 tracked 文件**) |
|
||||
| 构建脚本 | `<导出根>\_build_export.py`(**默认拒跑**,须 `--force`) |
|
||||
| 手工撰写层快照 | `<导出根>\_overlay\`(脚本自动维护) |
|
||||
| 类型检查 | `<导出根>\_verify_tsc.mjs`(建 junction → tsc → `rmdirSync` 拆) |
|
||||
| 文档校验 | `<导出根>\_check_links.mjs <repoDir>`(链接/锚点/配图)· `<导出根>\_check_parity.mjs <repoDir>`(中英对等 + 列出英文里的汉字;**英文文档汉字数应恒为 4**) |
|
||||
| 给人看的台账 | `<导出根>\_导出说明与脱敏台账.md`(**不随仓库上传**;§七 = 改名记录) |
|
||||
| 手工撰写层(`OVERLAY`:重建时自动快照→恢复,**不得被抹掉**) | **现为 3 份**:`README.md` · **`PLUGIN-PORTING.md`** · `install.sh`(原另有 `LICENSE` / `LICENSE-UPSTREAM-MIT.txt` / `THIRD-PARTY-NOTICES.md`,**2026-09-13 已按用户要求移除** —— 见 §5) |
|
||||
| 当前版本 | **v1.1.0 / 2026-09-14**,**153 文件**;历史已按用户要求**重置为单条提交**(`a327649`,强推覆盖)| 首发 v1.0.0 / 2026-09-13 |
|
||||
| 计数现状(2026-09-15) | `OVERLAY` **26** | `REQUIRED_EXPORT` **54** | `INCLUDE_DIRS` **6** | `EXCLUDE_FILES` **9** | `DROP_SCRIPTS` **8** |
|
||||
| 手工撰写层(`OVERLAY`:重建时自动快照→恢复,**不得被抹掉**) | **现为 30 份**:`README.md` · `LICENSE`(**AGPL-3.0,2026-09-14 按用户选定 B 方案加回**)· **`COMMERCIAL-LICENSE.md` + `.zh-CN.md`(2026-09-18 新增 · 双轨的轨 2)** · `PLUGIN-PORTING.md` · `install.sh` · `install.md` · `AGENTS.md` + 5 个 `*.zh-CN.md` + `manual/` **9 对 18 份**(2026-09-17 新增 `decisions.{md,zh-CN.md}`) |
|
||||
| 当前版本 | **v1.2.0 / 2026-09-15**,已发布至远端 `main` = **`25f930f`**(普通推送累计;`332afff` 后追加商业轨文件)| 首发 v1.0.0 / 2026-09-13 | v1.1.0 / 2026-09-14 |
|
||||
| 计数现状(2026-09-18 AST 实读) | `OVERLAY` **30** | `REQUIRED_EXPORT` **60** | `INCLUDE_DIRS` **6** | `INCLUDE_FILES` **8** | `EXCLUDE_FILES` **9** | `DROP_SCRIPTS` **28** | `LEAK_PROBES` **75** | `INFO_PROBES` **2** | `REGEX_RULES` **73** | `GLOBAL` **71** | `K8S_SEMANTIC_RULES` **14** | `TEXT_EXT` **16** | `EXTRA_TREES` **3** |
|
||||
| 上游基线(三方) | `上游骨架仓库(已按要求不再具名)` → **MIT**(GitHub 仓库 + DSH 插件目录已收录) |
|
||||
| 运行期上游 | `@deepseek-ai/dsh`(DeepSeek Harness)→ **MIT** |
|
||||
| 本机 Python | `/e/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe` |
|
||||
|
||||
> ⚠️ **工作根 = `E:\ProgramData\AI技能\dsh-laijing-github\`**(独立 GitHub 开源文件夹)。**不要再改名或迁移** —— 这个名字被 `_build_export.py` 的 `OUT`、`_verify_tsc.mjs` 的 `EX`、本技能、项目 MEMORY 同时引用。真要迁:先改这几处,再**复跑重建 + tsc**,并检查旧目录**没有被重建脚本重新建出来**(迁完曾因漏改 `OUT` 而复活一次)。
|
||||
> ⚠️ **工作根 = `E:\ProgramData\AI技能\dsh-ai1net-github\`**(独立 GitHub 开源文件夹)。**不要再改名或迁移** —— 这个名字被 **5 个工具脚本** + 本技能 + 项目 MEMORY 同时引用。真要迁:① 先改**全部 5 处脚本常量**(`_build_export.py:13` `OUT` · `_verify_tsc.mjs:5` `EX` · `_sop_check.mjs:5` / `_upload_audit.mjs:5` / `_verify_all.mjs:5` `W`)→ ② 再搬/删目录 → ③ 复跑重建 + tsc,并检查旧目录**没有被重建脚本重新建出来**(2026-09-13 曾因漏改 `OUT` 而复活一次;**2026-09-16 由 `dsh-laijing-github` 改成现名时,已于 09-17 按此顺序把 5 处全部同步完**)。
|
||||
|
||||
---
|
||||
|
||||
@@ -103,9 +105,9 @@ agent_created: true
|
||||
|
||||
| # | 动作 | 判据 |
|
||||
|---|---|---|
|
||||
| 1 | **起自己的名**,并**实测未被占用**(npm `registry.npmjs.org/<name>` + 插件目录 `dshbase.com/plugins/<name>`,两处都 404 才可用) | 本项目命名口径(用户 2026-09-13 定):中文 **DSH Web 平台** | English **DSH Web Platform** | 技术标识 **`dsh-web-platform`**(短横连写用于仓库/包/服务/env 前缀)。<br>⚠️ **已排除的两个候选**:**`dsh-hive`**(第三方插件 `llluchy/dsh-hive` 已占用);**`dsh-hosting`**(本会话中间候选,已被用户口径取代 ⇒ **仓库里不得残留**,已列入阻断性探针) |
|
||||
| 1 | **起自己的名**,并**实测未被占用**(npm `registry.npmjs.org/<name>` + 插件目录 `dshbase.com/plugins/<name>`,两处都 404 才可用) | 🔴 **现行命名(用户 2026-09-17 定,🟡 执行中)**:中文 **「能力网络」** | English **`DSH AI1NET`** | 技术标识 **`dsh_ai1net`**(详见 §0 表「新名称」行)。<br>**同口径历史**:中文 **DSH 用户平台** | English **DSH Users Platform** | 技术标识 **`dsh-users-platform`**(2026-09-14 定,线上旧仓仍用此名,**冻结不动**)。<br>⚠️ **已排除的候选**:**`dsh-hive`**(第三方插件 `llluchy/dsh-hive` 已占用);**`dsh-hosting`**(中间候选,已被取代 ⇒ **仓库里不得残留**,已列入阻断性探针);**`taimiao`**(仅候选,未落地)。 |
|
||||
| 2 | **改完全部自指标识**:包名 / bin / cordis plugin id / env 前缀(36 种)/ 数据根 / systemd 单元 / nginx conf / 库文件名 / 镜像与 k8s / 导出目录名 | 全仓 `grep` 旧名,**只剩出处引用**才算干净 |
|
||||
| 3 | **保留出处并正式致敬 —— 但只放在文末**(用户 2026-09-13 明确:"在最后提一下引用了谁就行,不要上来就重点讲用了谁") | ① `LICENSE-UPSTREAM-MIT.txt` **逐字节不动**(MIT 强制);② README **不得在开头单独设「名称与渊源 / 基于 XX」章节** —— 出处只出现在**文末**的「第三方组件与致谢」里,**一句话带过**;③ 法律归属由 `LICENSE` 第一层说明 + `THIRD-PARTY-NOTICES.md` §4 承载(这两处必须完整,不受"轻描淡写"影响) |
|
||||
| 3 | **保留出处并正式致敬 —— 但只放在文末**(用户 2026-09-13 明确:"在最后提一下引用了谁就行,不要上来就重点讲用了谁") | ① 上游 = **DeepSeek Harness(MIT)**,**本项目不包含、不分发其代码** ⇒ 无需单独 MIT 声明文件,README 文末保留**一行道义致敬**(`dshs`,MIT,⛔ 不许删);② README **不得在开头单独设「名称与渊源 / 基于 XX」章节** —— 出处只出现在**文末**的「第三方组件与致谢」里,**一句话带过**;③ 本项目的法律归属由 **`LICENSE`(AGPL-3.0 官方全文)** + README 末节「授权与商业使用」承载 |
|
||||
|
||||
⚠️ **改名时最容易误伤的两处**:① 把「致敬上游」的引用一起改掉(= 抹掉出处,法律与道义双重问题);② 把脚本里作**源模式**的旧名改掉(见 §8 坑 9)。
|
||||
|
||||
@@ -121,7 +123,7 @@ agent_created: true
|
||||
| **配置表 / 脚本文案同步标注** | 未验证路径的 env 变量统一加「(模式 X · 未验证)」前缀;`install.sh` 的报错/提示文案要与 README 口径一致 |
|
||||
| **FAQ 给一句直答** | 加一条「X 现在能用吗?」→ 直接回答「**还不能**」,并说清**缺哪一步**(如「从未做过端到端部署验收」) |
|
||||
| **归属措辞也要改** | 出处/致谢里描述对方贡献时,把「双部署**形态**」降级为「双部署**框架**」,避免暗示未验证的路径是可选项 |
|
||||
| **落点清单(照抄)** | README:部署形态表 + 快速开始 + 配置表 + 功能详解 + 安全模型 + 亮点 + 目录结构 + FAQ;`install.sh` 文案;`LICENSE` 与 `THIRD-PARTY-NOTICES.md` 的归属措辞 |
|
||||
| **落点清单(照抄)** | README:部署形态表 + 快速开始 + 配置表 + 功能详解 + 安全模型 + 亮点 + 目录结构 + FAQ;`install.sh` 文案;README **末节「授权与商业使用」**与**文末致敬行**的措辞 |
|
||||
|
||||
---
|
||||
---
|
||||
@@ -132,12 +134,12 @@ agent_created: true
|
||||
|
||||
| 规则 | 说明 |
|
||||
|---|---|
|
||||
| **位置** | 只在**文末**(README 的「第三方组件与致谢」+ `LICENSE` 第一层 + `THIRD-PARTY-NOTICES.md` §4)。**不得**在开头/前部单设「名称与渊源」「基于 XX」章节 |
|
||||
| **位置** | 只在**文末**(README 的「第三方组件与致谢」+ 末节「授权与商业使用」)。**不得**在开头/前部单设「名称与渊源」「基于 XX」章节 |
|
||||
| **主语** | 正文一律**以本项目为主语**。写「本项目做了…」,**不要**写成「上游提供了骨架,我们在此基础上…」这种自我降格的框架 |
|
||||
| **措辞** | 用「**起步时参考了** X(作者,许可证)—— **感谢作者开源**」;**不要**用「仅仅接着往前走了一步」「离开它就没有这个项目」这类过度抬举,**也不要**补「我们做了大量深度改造」这类**自我表扬**(见下表「致谢只写一行」) |
|
||||
| **边界** | 「轻描淡写」**只作用于 README 正文**;MIT 要求的版权与许可声明(`LICENSE-UPSTREAM-MIT.txt`)与授权分层说明**一处都不能省** |
|
||||
| **边界** | 「轻描淡写」**只作用于 README 正文**;**`LICENSE`(AGPL-3.0 官方全文,逐字节)与 README 末节的授权说明一处都不能省** |
|
||||
| **JS/注释里的名字** | 代码注释里也**不主动**出现上游名(它们已经被 R-O8 第 2 步改成新名;只剩出处语境才允许) |
|
||||
| **致谢只写一行**(2026-09-13 第七次纠正) | 出处行 = **「起步时参考了 X(作者,许可证)—— 感谢作者开源」**,一行结束。**不要**写:① 骨架范围的枚举(那是 `LICENSE` 第一层与 `THIRD-PARTY-NOTICES.md` §4 的职责,**重复即冗余**);② 「此后我们做了大量深度改造」(**自我表扬**,致谢不是讲功绩的地方);③ 「项目名从它的 X 换成我们的 Y(避免指代混淆…)」(**内部事务**,读者不关心,改名说明留在 NOTICE 的「更名说明」行即可)。用户原话:「**有必要讲这么多吗,好好想想**」 |
|
||||
| **致谢只写一行**(2026-09-13 第七次纠正) | 出处行 = **「起步时参考了 X(作者,许可证)—— 感谢作者开源」**,一行结束。**不要**写:① 骨架范围的枚举(那是 `LICENSE` 与 README 末节授权说明的职责,**重复即冗余**);② 「此后我们做了大量深度改造」(**自我表扬**,致谢不是讲功绩的地方);③ 「项目名从它的 X 换成我们的 Y(避免指代混淆…)」(**内部事务**,读者不关心 ⇒ 不进公开文档)。用户原话:「**有必要讲这么多吗,好好想想**」 |
|
||||
| **别解释我们为什么这么写** | 「—— 这是 MIT 的硬性要求,必须保留」「因此 README 与 install.sh 一律以模式 A 为准」这类**关于文档自身**的话术删掉;正文只陈述事实与规则本体 |
|
||||
| **指针行不重复** | 「机制见亮点」这类导航指针**全文留 1–2 处**(Hero + 功能详解)即可,Content 各节末尾各来一句 = 冗余 |
|
||||
---
|
||||
@@ -172,14 +174,18 @@ agent_created: true
|
||||
**本项目定稿顺序(Hero + 16 节)**
|
||||
|
||||
```
|
||||
标题 → 一行描述 → 徽章(**5 个**:Node · Version · built on DSH · AI-generated · DeepSeek V4/V4.1 flash;License 徽章已随授权类内容一同移除)
|
||||
→ Hero(三条主线 + **一行「全部代码与文档由 AI 生成」** + 拓扑图)→ 快速开始片段
|
||||
目录 → **AI 生成** → 亮点 → 快速开始 → 功能详解 → 架构 → 安全模型 → 部署形态 → 配置
|
||||
标题 → 一行描述 → 徽章(**5 个**:Node · Version · built on DSH · **code & docs-human-planned, AI-implemented** · DeepSeek V4/V4.1 flash;**无 License 徽章**)
|
||||
→ Hero(三条主线 + **一行「人负责规划与关键判断,AI 负责实施」** + 拓扑图)→ 快速开始片段
|
||||
目录 → 亮点 → 快速开始 → 功能详解 → 架构 → 安全模型 → 部署形态 → 配置
|
||||
→ 控制面 API → 插件移植指南 → 开发 → 常见问题 → 目录结构 → 版本与迭代 → 贡献
|
||||
→ 第三方组件与致谢 → 授权与商业使用(必须最后)→ 授权摘要收尾(全文唯一一处摘要)
|
||||
```
|
||||
|
||||
> ⚠️ `## AI 生成` 是**第 1 个正文章节**(用户 2026-09-13 明确「还有个重点要加载前面」)—— 它是这个项目的**核心差异化**:整站代码与文档由 AI 写成。**别把它挪到后面,也别只留徽章不留正文**。
|
||||
> 🔴 **「本项目由谁建成」= 现行唯一口径(2026-09-17 11:48 用户定):「人负责规划与关键判断,AI 负责实施」**(英文 `Human planning and key judgment; implementation by AI`)。
|
||||
> · **落点**:README Hero 的 `code & docs-human-planned, AI-implemented` 徽章 + 一行声明 · `manual/project.{md,zh-CN.md}` 的 **`## How this project is built` / `## 项目如何建成`**(一行声明 + 2 行「环节 → 由谁负责」表:人 = 方向/范围/架构决策/评审验收;AI = 代码/测试/文档/插件改造示例)。
|
||||
> · **为什么必须这样写**:中国版权保护中心 **2026 新规「纯 AI 生成的软件不予登记」**,判据 = **人类独创性智力投入**。旧口径「全部代码与文档由 AI 生成」= **自认纯 AI** ⇒ 商业授权**缺标的物**;新口径**恰恰确立人类投入** ⇒ 是**法律加固**,⚠️ 不要简化回「AI 生成」(详见 §5 与 `<工作根>\_授权决策与法律依据_20260917.md`)。
|
||||
> ⛔ **不要再写回「全部由 AI 生成」**(用户 09-17 **11:44 曾短暂要求全部删除,11:48 改为本条**);⛔ **也不要照 2026-09-13 的「删掉人的角色」** —— 两者均已被推翻。
|
||||
> ✅ 一并保留:`DeepSeek V4 / V4.1 flash` 模型标注徽章 · README 的 `**能力网络** · **DSH AI1NET**` 行。
|
||||
|
||||
| # | 硬规则 | 理由 |
|
||||
|---|---|---|
|
||||
@@ -210,7 +216,7 @@ agent_created: true
|
||||
| **生成时机** | **发布 / 推送 GitHub 之前那一步**(SOP 的 5.5)—— 也就是 §7 验证之后、§6 交付之前 |
|
||||
| **语言切换行** | 两份文件**顶部都要有**:中文版写 `[中文](README.md) · [English](README.en.md)`;英文版写 `[English](README.en.md) · [中文](README.md)`。⚠️ **英文文件存在之前不要加**(否则是死链,扣 P1) |
|
||||
| **翻译时严格保持** | 代码块、命令、路径、env 名、包名、URL、图(ASCII/Mermaid)、表格结构与「版本与迭代」表内容 —— **逐字保留**;占位符(`<YOUR_GITHUB_ACCOUNT>` 等)**同步替换** |
|
||||
| **不翻译(保持原文)** | `LICENSE-UPSTREAM-MIT.txt`(MIT 英文原文,**逐字节**);`LICENSE` 保持**中文正文 + 英文摘要**(现状即如此);`THIRD-PARTY-NOTICES.md` 中文即可(包名与许可标识本就是英文) |
|
||||
| **不翻译(保持原文)** | `LICENSE` —— **AGPL-3.0 官方英文全文,逐字节不许翻译或改写** |
|
||||
| **校验** | 英文版同样要跑 **TOC 锚点校验**(按英文标题算锚点)与**相对链接存在性**;两版的「版本与迭代」表**行数与版本号必须一致** |
|
||||
| **别忘** | 这是**发布前唯一会因为"没做"而显得半成品**的项 —— 写进 SOP 与 §10 待办,接手先看 |
|
||||
|
||||
@@ -340,7 +346,7 @@ mksess.cjs ensure-role-profile-patch.cjs(临时会话 / profile 补丁)
|
||||
| 插件具体名 | `anysearch` / `@anysearch/anysearch-dsh` / `@liustack/modlens` / `mcn-workstation` | 「该插件」/「某第三方插件」→ 再**整行重写**成中性描述 | 6 |
|
||||
| ↳ **例外(保留原名)** | **`dsh-univer-office`** 与其实例侧适配(`DSH_INSTANCE_UNIVER_SOCKET` / `UNIVER_DSH_GATEWAY_SOCKET`) | **不脱敏、不删代码**(用户 2026-09-13 明确「可以保留这个插件」);它同时是 `PLUGIN-PORTING.md` 的实证样本 ⇒ 其 env 名、注释、`DELETE_LINES` 条目**都不得再动** | 3 |
|
||||
| **项目改名** | `dshs` 全部自指标识 | `dsh-web-platform`(规则顺序:`dshs.db` → `dshs.db` → `/var/lib/dshs` → `DSHS_` → `dshs`) | 149 |
|
||||
| ↳ **必须保留** | `上游骨架仓库(已按要求不再具名)`、`上游 \`dshs\`` | **原样不动**(出处/致谢);`LICENSE-UPSTREAM-MIT.txt` 逐字节不动 | — |
|
||||
| ↳ **必须保留** | `上游骨架仓库(已按要求不再具名)`、`上游 \`dshs\`` | **原样不动**(出处/致谢);`LICENSE`(**AGPL-3.0 官方全文**)逐字节不动 | — |
|
||||
|
||||
**发布前必须替换的占位符**(写在台账里):
|
||||
|
||||
@@ -363,26 +369,38 @@ mksess.cjs ensure-role-profile-patch.cjs(临时会话 / profile 补丁)
|
||||
|
||||
---
|
||||
|
||||
## 5. 授权结构(**2026-09-13 15:1x 已变更:授权类文件全部移除**)
|
||||
## 5. 授权结构(**现状:2026-09-17 定案「双轨」—— AGPL-3.0 原样 + 商业授权**)
|
||||
|
||||
> 🔴 **现状(以本条为准,覆盖下文所有旧描述)**:用户 2026-09-13 明确 —— **「你的任务是改造和优化,这些内容全部删除」** ⇒ 导出仓里的
|
||||
> **`LICENSE` / `LICENSE-UPSTREAM-MIT.txt` / `THIRD-PARTY-NOTICES.md` 三份已全部移除**(同时从 `OVERLAY` 与 `REQUIRED_EXPORT` 摘除、`_overlay/` 快照同步删除、README 的 License 徽章 / 目录项 / 「授权与商业使用」整节删掉、`package.json` 的 `license` 回到上游原值 `MIT`)。
|
||||
> **原文备份在 `../_授权归档_发布时再放回/`**,恢复步骤见 `_导出说明与脱敏台账.md` §F。
|
||||
> ⛔ **不要再把授权/许可当议题去问用户**(不属本技能范围,不列为待办、不上抛)。
|
||||
> ⛔ **不要再把授权/许可当议题去问用户**(不属本技能范围,不列为待办、不上抛)。**下文凡提到这三份文件的段落一律以此条为准**(保留原文只为记录历史,不是要求)。
|
||||
> ⚠️ **但下面这条「MIT 硬约束」是客观事实,任何会话都不许删**(删了会误导后人写出违规声明)。
|
||||
> 🔴 **现状(以本条为准,覆盖本章所有历史描述)** —— **双轨授权**:
|
||||
> - **轨 1 · 开源轨 = AGPL-3.0 原样(默认)**:`LICENSE` = AGPL-3.0 官方全文(**34,523 B,逐字节未改**);`package.json` 保持 `"license": "AGPL-3.0-only"`;已在 `OVERLAY` 与 `REQUIRED_EXPORT`(**60 项**)内。
|
||||
> - **轨 2 · 商业轨**:给「**不愿承担 AGPL 开源义务**」(闭源托管 / 嵌入专有产品)的人 ⇒ 联系 `maogeigei@gmail.com` 谈条款与报价。**商业授权是「另开一条平行许可路径」,不是「对 AGPL 加限制」** —— 这是它不违反 OSD 的关键。**自 2026-09-18 起轨 2 有独立文件**:`COMMERCIAL-LICENSE.md` + `.zh-CN.md`(提交 `25f930f`)。
|
||||
> - 🔴 **三条措辞铁律(2026-09-18 立,⛔ 违反即等于把项目踢出开源)**:① 全文写成「**平行的许可选择**」(parallel choice),⛔ **绝不**写成"对 AGPL 附加的限制";② **文件名刻意不以 `LICENSE` 开头** —— 免被 licensee 误判为主许可;③ **正文不含项目名**(含新名 / 旧名)⇒ **改名窗口期两版通用**,零泄漏面。
|
||||
> - 🔴 **归档里的自拟 `LICENSE` 不得放回**:`_授权归档_发布时再放回\LICENSE`(5,931 B,自拟「个人免费/商用须书面授权」)的 §三「商业使用必须事先取得书面授权」**放在已发布 AGPL 项目里 = §10 追加限制** ⇒ 正是罗盒案否定、09-17 定案要避开的那一步。**归档 ≠ 照原样拷回**(逐项判定 → `_导出说明与脱敏台账.md` §F)。
|
||||
> - **README 末节** = `## License` / 中文 `## 授权`,承载双轨表述(各 4 段),**授权压轴**符合 R-O12;⚠️ 改后须复核 **英文文档汉字数 = 4**。
|
||||
> - ⛔ **仍有意不带回**:`LICENSE-UPSTREAM-MIT.txt` · `THIRD-PARTY-NOTICES.md`。上游口径:**DeepSeek Harness(MIT,不包含、不分发其代码)**;README 文末保留一行对 `dshs`(MIT)的道义致敬(⛔ 不许删)。
|
||||
> - ✅ **发版前必查**:`LICENSE` 被 OVERLAY 正确恢复 · `package.json` license 由规则生成 · `required present: 60/60` · **README 双轨表述中英同构** · **轨 2 文件存在且中英对等(`_check_parity.mjs` 的 `PAIRS` 已登记)**。
|
||||
|
||||
> ⚠️ **硬法律前提(事实,必须记住)**:**上游 `dshs`(上游作者(已按要求不再具名))是 MIT。MIT 不允许对上游代码附加限制** ⇒ 若日后要恢复「个人免费 / 商用收费」,**只能分层**:上游留 MIT,只对**本项目新增部分**收费;把整个仓库标成「商用需授权」= **违反 MIT**。
|
||||
> 🔴🔴 **两条铁律(2026-09-17 用户连问两轮后确立,不许放宽)**:
|
||||
> 1. **绝不在 AGPL 上加任何限制** —— 包括「只禁止销售源项目」这种看起来很窄的限制。依据:AGPL **§10** 禁追加 further restriction、**§7** 把非许可性附加条款定义为 "further restriction";且 **OSD 第 6 条「不得歧视任何领域」** ⇒ **判据是「有没有附加限制」,不是「限制多窄」**(Commons Clause 官方对 "Is this Open Source?" 的回答就是 **No.**)。
|
||||
> 2. **也不需要加** —— AGPL 的 copyleft **本身就实现了**「防白嫖转售」:想**闭源**改造后销售/托管的人,**§13** 要求其向使用者提供全部修改源码 ⇒ 不愿开源就只能来买商业授权。**这就是双轨的全部机制。**
|
||||
> ⚠️ **两条配套事实**:Commons Clause 原文 "The combined text **replaces** the existing license"(**只能替换、不能叠加**);官方 FAQ "Licenses applied to previous versions are **not revoked**"(**已发布版本收不回** ⇒ 本项目 v1.0.0–v1.2.0 永远是 AGPL)。
|
||||
|
||||
**若日后要对外发布**(当前仓库里**没有**任何授权文件),必须先放回那三份并恢复 `OVERLAY` / `REQUIRED_EXPORT`。理由:
|
||||
1. 无 `LICENSE` ⇒ 默认「保留所有权利」⇒ **任何人都不能合法使用**;
|
||||
2. 缺上游 MIT 声明 ⇒ **侵犯 上游作者(已按要求不再具名) 的著作权**(MIT 明文要求保留版权与许可声明);
|
||||
3. 缺第三方 NOTICES ⇒ 多款依赖(MIT/Apache-2.0 等)同样要求保留声明。
|
||||
> 📜 **历史(2026-09-13 15:1x – 09-17 的中间状态,仅作留痕,⛔ 不是要求)**:一度把三份授权文件**全部移除**(`LICENSE` / `LICENSE-UPSTREAM-MIT.txt` / `THIRD-PARTY-NOTICES.md`),`package.json` 的 license 回到上游原值 `MIT`;09-14 一度**记录**为「AGPL + 商业授权」,但**当时 README 实际只有 AGPL 单轨**(09-17 核实并改正后真正落地双轨)。原文备份在 **`E:\ProgramData\_已移出项目_授权归档\_授权归档_发布时再放回\`**(⚠️ 09-13 曾误记为"该目录已不存在",**2026-09-18 实测仍在**;恢复步骤见 `_导出说明与脱敏台账.md` §F)。
|
||||
> ⛔ **不要再照那段历史去移除 `LICENSE`** —— 那会让公开仓库退回「保留所有权利」状态。
|
||||
|
||||
⚠️ **不要再把「授权结构」当议题去问用户**(2026-09-13 用户明确:*"你的任务是改造和优化,这些内容全部删除"*)—— **不属本项目范围,不列为待办、不上抛**。保持**现状分层**即可(保守合规:上游永远 MIT、只对本项目新增部分声明)。
|
||||
> 即便日后发现 `上游作者(已按要求不再具名)` 就是用户本人(可整体简化为单一授权),也**不是本技能要推进的事** —— 只在用户**主动**提出时按本表处理。**但上一条「MIT 不允许对上游代码附加限制」是客观事实,任何会话都不许删掉它**(删了就会误导后人写出违规声明)。
|
||||
> ⚠️ **硬法律前提(客观事实,任何会话都不许删)**:**上游 DeepSeek Harness 是 MIT,且本项目不包含、不分发其代码** ⇒ 对本项目自有部分采用 AGPL-3.0 **不构成**对上游 MIT 的附加限制。若日后要恢复「个人免费 / 商用收费」的旧思路,仍须**分层**,不得把整个仓库标成「商用需授权」。
|
||||
|
||||
每次发版要动的地方:`README.md` 授权章节(若条款变)、`LICENSE`(版本/日期)、`THIRD-PARTY-NOTICES.md`(依赖版本与分布)。
|
||||
> ⚖️ **中国司法立场(2026-09-17 查证,判例充分 —— 用户问「中国法律是否支持」时直接引这些)**:
|
||||
> · **【支持】协议有效** = 「**附解除条件的著作权许可合同**」(**罗盒案** (2019)粤73知民初207号,**最高法 2021 年十大知产案件**;另有数字天堂案 · 风灵案)。
|
||||
> · **【支持】不开源 = 侵权** ⇒ 授权自动终止 ⇒ 构成侵权:罗盒 **50 万** · 亿邦 (2021)最高法知民终51号 **50 万** · 南京 2022 年案 **300 万**。
|
||||
> · **【支持】收费本身合法** —— 罗盒案明认「收取会员费仅用于运营维护和技术支持,**不违反 GPL v3**」;**违法的是不提供源码** ⇒ AGPL 防的是「不开源」,**不是**「收钱」。
|
||||
> · **【支持】项目管理人可单独起诉**(最高法知产法庭 2024 年两案)⇒ 维权无需集齐贡献者。
|
||||
> · 🔴 **【不支持】在开源项目里加商业使用限制条款** —— 罗盒案判决评析原文:「开源软件权利人**不能**在开源项目中添加商业使用限制保留条款来限制用户使用源代码的目的和用户范围,因上述限制保留条款与 GPL V3 协议保证用户自由使用的特性矛盾」。
|
||||
> · ⚠️ **中国暂无 AGPL 直接判例**(判例均为 GPL);实务界将 AGPL 与 GPL 并列为 Copyleft 强传染许可,明确「**AGPL v3 将 SaaS 视为分发**,对云与 SaaS 商业模式构成高风险」⇒ 效力被认可。
|
||||
> · 📌 中国实务界建议:开源作者应选 **OSI 认证许可**,**别用自定义/非 OSI 许可 —— 法律认可度低,难以保障作者知识产权**(反向印证「别用 Commons Clause」)。
|
||||
> ⚠️🔴 **另有一个**不在协议、而在版权基础**的风险(本项目特有)**:中国版权保护中心 **2026 新规「纯 AI 生成的软件不予登记」**,判据 = **人类独创性智力投入**(「春风送来了温柔」案 ✅/「蝴蝶座椅」案 ❌),最高法 2026-09-07 法发〔2026〕10号 已将 AI 生成物权属列重点。✅ **已于 2026-09-17 把口径改为「人负责规划与关键判断,AI 负责实施」** —— 该口径**恰好确立人类独创性智力投入**,正面对冲这条新规(旧口径「全部代码与文档由 AI 生成」= **自认纯 AI** ⇒ 商业授权缺标的物)。仍有待办:留存人类投入证据 · 考虑软著登记 · 报价前请律师。全部细节 → `<工作根>\_授权决策与法律依据_20260917.md`。
|
||||
|
||||
每次发版要动的地方:`README.md` / `README.zh-CN.md` 的授权节(若条款变)· `LICENSE`(**须保持官方全文逐字节**)· `package.json` 的 `license` 字段。
|
||||
|
||||
---
|
||||
|
||||
@@ -401,7 +419,7 @@ git -C "D:/github/dsh_shenxian" log --oneline -10
|
||||
# 2) 若本次要改脱敏/保留口径 → 先改 _build_export.py 的 GLOBAL / INCLUDE_* / DROP_SCRIPTS / OVERLAY
|
||||
|
||||
# 3) 重建(手工撰写层会自动快照→恢复)
|
||||
cd "/e/ProgramData/AI技能/dsh-laijing-github"
|
||||
cd "/e/ProgramData/AI技能/dsh-ai1net-github"
|
||||
"/e/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe" _build_export.py --force
|
||||
|
||||
# 4) 改版本(三个地方一起改,否则不一致)
|
||||
@@ -415,6 +433,35 @@ cd "/e/ProgramData/AI技能/dsh-laijing-github"
|
||||
# 6) 交付/推送(**R-O6:未经明确要求不做**)
|
||||
```
|
||||
|
||||
### 6b. 多远端推送(2026-09-18 定型:GitHub 主仓 + CNB 镜像)
|
||||
|
||||
| 远端 | 地址 | 备注 |
|
||||
|---|---|---|
|
||||
| `origin` | `[email protected]:maogeigei/dsh-users-platform.git` | **主仓**(SSH,密钥顺序见 §8 坑) |
|
||||
| `cnb` | `https://cnb.cool/maogeigei/dsh-users-platform.git` | **镜像**(HTTPS + 凭据管理器,已存好凭据 ⇒ 无需配 SSH) |
|
||||
|
||||
```sh
|
||||
cd "/e/ProgramData/AI技能/dsh-ai1net-github/dsh-users-platform"
|
||||
# 加镜像远端(一次即可)
|
||||
git remote add cnb https://cnb.cool/maogeigei/dsh-users-platform.git
|
||||
|
||||
# ⛔ 只推 main —— 本地备份分支(backup-before-orphan-*)含改名泄漏期旧内容,绝不外推
|
||||
GIT_TERMINAL_PROMPT=0 git push origin main # 主仓
|
||||
|
||||
# ⚠️ CNB 首次/大推送**必须后台跑**:实测前台 180s 被 SIGTERM 杀掉
|
||||
# (仓库仅 1.67 MB、207 objects ⇒ 与体积无关,是连接/服务端处理慢),
|
||||
# 后台运行 20s 完成。⇒ 用 run_in_background,别用前台短超时。
|
||||
GIT_TERMINAL_PROMPT=0 git push cnb main # 镜像
|
||||
|
||||
# 核对「三方同 hash」——这是多远端同步的唯一验收判据
|
||||
git ls-remote origin refs/heads/main | cut -c1-12
|
||||
git ls-remote cnb refs/heads/main | cut -c1-12
|
||||
git rev-parse --short=12 HEAD
|
||||
```
|
||||
|
||||
⚠️ **README 里的 clone 地址保持指向主仓(GitHub)**,不改指镜像 —— 这是「多远端同步」的正常形态,CNB 页面自带自己的克隆按钮。若要改指 CNB,属改变对外口径,先问用户。
|
||||
|
||||
|
||||
**版本号约定**:遵循语义化版本。写 README 版本表时**同时写「类型」列**(首个公开发布 / 特性 / 修复 / 内部迭代)。
|
||||
|
||||
**登记格式**(README「版本与迭代」表):
|
||||
@@ -425,7 +472,7 @@ cd "/e/ProgramData/AI技能/dsh-laijing-github"
|
||||
|
||||
---
|
||||
|
||||
## 7. 验证六件套(缺一不可)
|
||||
## 7. 验证七件套(缺一不可)
|
||||
|
||||
| # | 验证 | 命令 / 判据 |
|
||||
|---|---|---|
|
||||
@@ -435,6 +482,17 @@ cd "/e/ProgramData/AI技能/dsh-laijing-github"
|
||||
| ④ | **能编译** | 见下「tsc 验证法」→ `tsc -p tsconfig.json --noEmit` 退出码 **0** |
|
||||
| ⑤ | `install.sh` 语法 | `bash -n install.sh` + `bash install.sh --help` |
|
||||
| ⑥ | **已移除项核对** | 逐一 `[ -e ]` 确认 `docs` / 两个插件目录 / `STANDARD.md` / `lib` / `node_modules` / `.workbuddy` 均不存在 |
|
||||
| ⑦ | 🔴 **发布合规审查**(2026-09-17 补,用户要求) | 对**将要公开的文字**逐字过三关,见下方「合规审查三关」 |
|
||||
|
||||
### 合规审查三关(每次发布前必过)
|
||||
|
||||
| 关 | 扫什么 | 判据 |
|
||||
|---|---|---|
|
||||
| **侵权** | 第三方项目名 / 作者名 / 商标 / 上游仓库的原创文字 | 出现即须处理(按致敬口径写,或删) |
|
||||
| **负面影响** | 事故类词:**事故 · 丢失 · 失败 · 失效 · 忘记 · 混乱 · 崩溃 · 覆盖 · 难以维护**;以及一切**自曝严重问题**的叙述 | ⚠️ **命中不必然要改** —— 判据是「**这句对外有正面价值吗,还是只在自曝**」。例:「报错而不是静默覆盖」= **设计原则**(fail loud)⇒ 保留;「已两次造成内容丢失」= 自曝事故、且易被误读成**产品可靠性问题** ⇒ 改为只讲**设计动因**,不提已发生的事故 |
|
||||
| **涉政治** | 政治 / 民族 / 宗教 / 地域 / 政府 / 国际关系表述;**国家及地区指称** | 一律避免;涉中国主权与领土的表述必须与中国官方立场一致(港澳台一律写「中国香港 / 中国澳门 / 中国台湾」) |
|
||||
|
||||
**副作用提醒**:收紧措辞后要**同步中英两版**(结构对等、英文汉字数 = 4 的判据不因改词而放宽),并确认 `_overlay` ↔ 仓库**逐字节一致**。
|
||||
|
||||
**tsc 验证法**(导出物没有 `node_modules`,靠**临时联接**;用脚本而不是手敲,**并且绝不能用 recursive 删除**):
|
||||
|
||||
@@ -478,6 +536,14 @@ cd "/e/ProgramData/AI技能/dsh-laijing-github"
|
||||
- **`REQUIRED_EXPORT` 清单**(脚本内,26 项):构建时逐个 `os.path.exists`,**缺一即 `return 1`**;新增"运行时要读的文件"必须加进去。
|
||||
- **用被导出仓库自带的校验脚本验收** —— `node scripts/verify-inject.cjs`(读 `assets/inject/*.js` + 检查 `proxy.ts` 走 `loadInject`)。这比"我看了一眼目录"可靠得多。
|
||||
⚠️ 同类风险点:`package.json` 的 `files`(npm/git 安装按它过滤,与 `INCLUDE_*` 是**两套名单**,都要补)。
|
||||
19. 🔴🔴 **`cp _overlay/<f> <仓>/` 会把「下一版内容」整份带进当前版**(2026-09-18 血证,已误发上公网)—— `_overlay/` 在**改名窗口期**是「未来版」,导出仓是「当前版」;为修一处残留引用而 `cp _overlay/README.md` 覆盖旧仓 ⇒ 把 **新名 + 新中文名 + `git clone …/<新仓>.git` + `cd <新仓>` + `systemctl is-active <新仓>`** 一并推了上去。
|
||||
⛔ **真实危害不是"名字不对"而是功能性缺陷**:README 让用户 clone 的那个仓库当时**是空的**(只有建仓提交)⇒ **照 README 做的人克隆到空仓库,部署直接断**。
|
||||
✅ **规矩**:`_overlay` 处于下一版状态时**绝不整文件 `cp` 到导出仓**,只准**逐处精确 `Edit`**,只落本次要发的那几段。
|
||||
⚠️ **最阴的一点**:这种误覆盖会让「导出仓 vs `_overlay` 的 diff **变空**」—— **diff 为空本身就是"新版被覆盖进去"的证据**,不是"一致"的好消息。**看到意外的一致要停下来查原因。**
|
||||
✅ **推前必做两条复核**:① `grep -rn "<新名>\\|<新中文名>" .` ⇒ **须为空**;② **部署命令自洽** —— `git clone` 指向的仓库**真有内容**、`cd` 的目录名、`systemctl` 的服务名三者一致。
|
||||
20. 🔴 **新增「中英文件对」时必须同步登记 `_check_parity.mjs` 的 `PAIRS`**(2026-09-18 实证)—— `PAIRS` 是**白名单**:没登记的文件对**不会报错,而是静默跳过对等检查**(标题数 / 表格行数 / 图数 / 英文汉字数全部不检)。⇒ 新增 `X.md` + `X.zh-CN.md` 时,**三处一起改**:`OVERLAY` · `REQUIRED_EXPORT` · **`PAIRS`**。
|
||||
⚠️ **同类静默跳过已出现三次**(坑 18 `INCLUDE_*` / `REQUIRED_EXPORT`、本节 `PAIRS`)⇒ 判据统一为:**凡"清单式"机制,新增对象后必须回读清单计数是否 +N**(AST 实读,别数文件)。
|
||||
21. **`COMMERCIAL-LICENSE.*` 的落位规矩(2026-09-18 立)**:① 只在**四份 README**(仓 + `_overlay/` 各中英)授权节尾加**一句**链接,⛔ 不在正文铺开;② ⛔ **不得**把「商用须授权」的句子写进 `LICENSE` 或 README 的 AGPL 段落(那才是 §10 追加限制);③ 英文版**汉字数仍须恒为 4**(只在顶部入口行出现「中文文档」)。
|
||||
|
||||
---
|
||||
|
||||
@@ -485,7 +551,7 @@ cd "/e/ProgramData/AI技能/dsh-laijing-github"
|
||||
|
||||
```sh
|
||||
# 重建
|
||||
cd "/e/ProgramData/AI技能/dsh-laijing-github"
|
||||
cd "/e/ProgramData/AI技能/dsh-ai1net-github"
|
||||
"/e/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe" _build_export.py --force
|
||||
|
||||
# 只跑探针/看结构(不重建)
|
||||
|
||||
Reference in new issue
Block a user