返回板块

W05 两表联动数据技术标准

V1.1.02026-09-03行政法规 · 范式
源文件:C:/Users/xub/.workbuddy/spec/3.行政法规/范式/W05_两表联动数据技术标准_V1.1.0_2026-09-03_0956.docx

前言

目次

前言

1 版本变更说明(V1.0 → V1.1)

2 方案总览(核心架构,双向版)

3 两表定义与关联字段(新增)

3.1 主表(P:文档登记表.json,汇总/状态层)

3.2 子表(C:映射台账.xlsx,明细/消费层)

3.3 关联字段映射(双向联动锚点)

4 表结构定义(沿用 V1.0,落实 C5/C1)

4.1 主表 schema V2(扩展)

4.2 子表 schema(映射台账.xlsx)

4.3 场景映射表(C4 落实:独立配置文件)

5 双向联动机制(新增核心)

5.1 联动触发方式(三种)

5.2 数据同步范围

5.3 双向一致性保障(三层校验 + 事务)

5.4 幂等与防循环

6 数据同步机制(沿用 V1.0,落实 C2 职责分层)

6.1 同步方向与策略(C2 修正:登记表永远全量重建)

7 事务性与异常回滚(新增核心)

7.1 事务模型(ACID)

7.2 异常处理

7.3 回滚机制

8 联动逻辑(沿用 V1.0,落实 C3 归档粒度)

8.1 冲突处理(优先级)

8.2 归档粒度(C3 修正)

9 运行流程与运维(沿用)

10 关键实现细节(沿用,落实 C5)

11 潜在风险点(沿用 + 新增双向联动风险)

12 可落地实施步骤(沿用 + 双向联动阶段)

13 与现有规范的关系

本标准规定利衡辨全域「文档登记表(主表)与映射台账(子表)双向联动」数据方案的技术要求,是全域主登记表 `specs/文档登记表.json`(SSOT)与子表 `映射台账.xlsx` 的实现标准。

版本:V1.1 | 编制日期:2026-09-03 | 状态:正式基准 · 全域强制

适用范围:全域文档登记表与映射台账的双向联动、事务性、异常回滚及运维实现

权威关系:本文与 `specs/范式/W3_两表联动数据方案范式.md` 内容一致、互为备份;冲突时以本发布态为准

上位规范:受 N1(命名规则)/ W1(工作流)/ W2(生命周期工具链)约束;命名、时间戳、四件套、归档严格遵循 N1 §三 与 W1 R16–R19

排版说明(2026-09-03):本版为按蓝本《WorkBuddy应用技术标准》V1.3.0 的排版对齐修订——补封面 / 静态目次 / 两类认知图 / 页脚「第X页共Y页」/ 表格规范;正文条款与内容保持不变

1 版本变更说明(V1.0 → V1.1)

项V1.0 问题V1.1 处理
C150/51 项口径矛盾统一为「当前基线 50(范式 19)→ 补 W2 后目标 51(范式 20)」,全文单一口径
C2全量重建 vs 指纹增量互斥职责分层:登记表永远全量重建,fingerprint 只控五件套重生成(见 §五.1)
C3R19 归档 vs 只保留当前版冲突五件套实体=移动归档、台账 xlsx=追加历史行(见 §七)
C5扫描路径相对/绝对混用统一「相对工作区根 F:/400.WorkBuddy_origin」为登记表 path 基准(见 §三)
**新增**无双向联动新增 §二/§四/§六 双向联动、事务性、异常回滚

2 方案总览(核心架构,双向版)

图2-1 两表联动数据治理逻辑思维简图

注:本图回答「为什么这样组织」——自顶向下的分层认知框架与层间依赖关系

┌─────────────────────────────────────────────┐ │ 主表:文档登记表.json(SSOT) │ │ 汇总字段 stats + 状态字段 status + 明细条目 │ └───────────────┬─────────────────────────────┘ │ ① 主→子(明细同步) ③ 子→主(汇总/状态刷新) ▼ ▲ ┌───────────────────────────────┐ │ 子表:映射台账.xlsx(明细消费层) │ │ 五件套引用明细 + 场景映射明细 │ └───────────────────────────────┘ │ 只读消费 ▼ 五件套(emmx / 说明.md / html / svg)

· 主表(P)= 文档登记表.json:唯一事实源,存汇总(`stats`)、状态(`status`)、明细条目。

· 子表(C)= 映射台账 xlsx:消费层明细,每条引用通过 `ref_id` 关联主表,承载五件套「引用 SOP/引用规范」与场景映射。

· 双向联动:主表增/改/删 → 子表引用明细自动同步;子表引用变动 → 主表汇总/状态字段刷新。

· 原「静态一览表.md/.docx」降级为历史快照,由登记表可读版替代。

3 两表定义与关联字段(新增)

3.1 主表(P:文档登记表.json,汇总/状态层)

字段类型说明
`id`主键全局唯一编码(B11/S01/SK08/EX01/W2…),主表唯一标识
`owner` + `version`复合业务键关联 范式 ↔ SKILL.md ↔ 专家 md
`spec_id`外键专家插件目录 ID(kebab-case)
`path`引用键相对工作区根 `F:/400.WorkBuddy_origin` 的路径(C5 统一)
`hash`指纹sha256 内容指纹
`status`状态字段`active` / `deprecated`(**子→主刷新对象**)
`updated`变更日期`YYYY-MM-DD`(最后变更,子→主刷新对象)
`stats`汇总字段各维度计数(**子→主刷新对象**)
`meta.fingerprint`全表指纹hash(全部条目 hash 拼接)

3.2 子表(C:映射台账.xlsx,明细/消费层)

字段类型说明
`ref_id`外键指向主表 `id`(**主→子同步锚点**)
`ref_type`类型引用类型:范式/SOP/skill/expert/docx
`scenario`场景所属场景(A1–F6)
`ref_version`版本投影主表 `version` 的副本(主→子同步字段)
`ref_status`状态投影主表 `status` 的副本(主→子同步字段)

3.3 关联字段映射(双向联动锚点)

主表字段子表字段基数联动方向
`id``ref_id`1:N主→子(明细增删改);子→主(stats 重算)
`owner`+`version`1:1跨维度对齐(范式↔SKILL.md↔专家md)
`spec_id`1:1专家外键一致性
`status`/`updated``ref_status`1:N主→子状态投影;子→主状态复核

4 表结构定义(沿用 V1.0,落实 C5/C1)

4.1 主表 schema V2(扩展)

{ "meta": { "schema": "REG-V2", "version": "2.0", "generated": "2026-08-26_1000", "fingerprint": "sha256:…", "scenarios": { /* 见 §三.3 */ } }, "stats": { "范式": 20, "SOP": 11, "skill_SKILLmd": 15, "expert_agentmd": 3, "正式基准_docx": 2, "合计": 51 }, "技术规范_范式": [{ "id": "W2", "name": "W2_全域文件生命周期工具链技术标准.md", "dim": "通用", "owner": "全域", "version": "1.0.0", "path": "specs/范式/W2_全域文件生命周期工具链技术标准.md", "hash": "sha256:…", "updated": "2026-08-26", "status": "active" }], "SOP": [ … ], "skill_SKILLmd": [ … ], "expert_agentmd": [ … ], "正式基准_docx": [ … ] }

C1 落实:`stats` 统一为「范式 20 / 合计 51」(含已补登的 W2);全文不再出现「50 项」与「51 项」并存。

C5 落实:`path` 统一「相对工作区根 F:/400.WorkBuddy_origin」,扫描源与写回路径归一化(见 §九.1)。

4.2 子表 schema(映射台账.xlsx)

列说明
`ref_id`外键→主表 id(唯一键 `ref_id + scenario`)
`ref_type` / `scenario` / `ref_version` / `ref_status`引用明细 + 主表投影
`reuse`跨场景复用标注(Ⓡ)

4.3 场景映射表(C4 落实:独立配置文件)

场景映射迁入独立配置 `_tools/scenarios.json`(人工维护),`refresh_register.py` 读取后写入主表 `meta.scenarios`;子表据此生成场景引用明细。

5 双向联动机制(新增核心)

图5-1 两表联动数据治理生命周期逻辑结构图

注:本图回答「每一步做什么」——各阶段触发条件、责任人、校验方式与例外回路

5.1 联动触发方式(三种)

触发主表动作子表自动同步子表动作主表自动同步
**新增(选择)**新增记录(补登 W2 / 新增 skill)① 插入引用该 id 的明细行;② stats 计数 +1新增引用行(新场景引用某 id)① stats 重算;② 被引用条目 status 复核(孤儿→候选 deprecated)
**修改**改 version/status/path/hash① 刷新对应明细行 `ref_version`/`ref_status` 投影改 `ref_id`/`ref_type`/`scenario`① stats 重算;② 新旧引用条目 status 复核
**删除**删除/废弃记录① 删除或标记失效对应明细行;② stats 计数 -1删除引用行① stats 计数 -1;② 相关汇总/状态刷新

5.2 数据同步范围

· 主→子(明细同步):主表记录的增/改/删,同步到子表所有引用该 `id` 的明细行,字段级同步 `ref_version`、`ref_status`、`path` 投影。

· 子→主(仅汇总/状态刷新):子表明细变动,仅刷新主表 `stats`(计数)与 `status`/`updated`(状态复核),不回写主表明细本体——此为防循环关键。

5.3 双向一致性保障(三层校验 + 事务)

· Schema 校验(写前):主表 JSON 结构、必填字段、id 唯一、`stats` 与数组长度一致。

· 引用完整性(消费前):子表每个 `ref_id` 必须命中主表 id;范式 `owner` 必须命中 SKILL.md/expert 的 `owner`;脱节即 `sys.exit` 阻断。

· 文件指纹校验:主表 `path` 文件存在且 `hash` 匹配;不匹配 → 自动重扫自愈,仍失败置 `status=deprecated` + 告警(按 C3 规则连续 2 次才置位)。

5.4 幂等与防循环

· 幂等:子表唯一键 `ref_id + scenario` 去重;`meta.fingerprint` 不变则跳过派生重生成;重复触发不重复写入。

· 防循环:明确「子→主只刷汇总/状态,不写明细」,切断双向写死循环;主表写与子表写同事务串行化。

6 数据同步机制(沿用 V1.0,落实 C2 职责分层)

6.1 同步方向与策略(C2 修正:登记表永远全量重建)

refresh_register.py(主表层,永远全量重建): 扫描 specs/skills/my-experts → 全量条目 → 校验(id唯一/path存在) → 全量重建主表(tmp → os.replace 原子写) ◀── 不因 fingerprint 不变而跳过 → 计算 meta.fingerprint → 与旧 fingerprint 比对: 不同 → 重写 README 可读版 + 置「子表/五件套需重生成」标记 + 触发子表同步 相同 → 仅刷新时间戳,不重写派生产物 gen_logic_map_v8.py(消费层,fingerprint 增量): 读主表 → 过滤 active → 读 fingerprint: fingerprint 不变 且 上版子表/五件套存在 → 跳过重生成(仅刷新时间戳) 否则 → 全量重生成子表 + 五件套

维度决策理由
主表刷新**全量重建**(永远)体量小、免增量状态、天然幂等
子表/五件套消费**fingerprint 增量**fingerprint 不变则跳过重生成
双向同步主→子明细、子→主汇总/状态事务内原子提交
双端同步specs/ 权威 + 3.Skill_技术规范/ 展示副本 md5 校验,不一致仅告警不自动覆盖零破坏基线

7 事务性与异常回滚(新增核心)

7.1 事务模型(ACID)

性质实现
**原子性**主表写 + 子表写在同一事务:写前双表备份 `.bak`,全部成功后提交,任一步失败整体回滚
**一致性**提交后校验 `ref_id` 全命中、`stats` 与实际计数一致,不一致触发回滚
**隔离性**日更 automation(`automation-1787712201757`)与手动触发用文件锁(`.lock`)串行化,防并发写冲突
**幂等性**唯一键去重 + fingerprint 比对,重复触发不重复写

7.2 异常处理

异常处理
引用脱节(ref_id 无主表 id)阻断 + 差异清单,不产生残缺子表
id 冲突 / schema 校验失败`sys.exit(1)` + 差异清单
文件指纹不匹配自动重扫自愈;仍失败置 deprecated + 告警(连续 2 次才置位)
双端 md5 不一致仅告警,不自动覆盖(specs/ 为权威)
主表 JSON 解析失败回退 `.bak` + 告警,不阻塞日更

7.3 回滚机制

· 写前备份:主表 `文档登记表.json.bak` + 子表 `_映射台账_<ts>.xlsx.bak`。

· 原子写:`json.dump` 到 `.tmp` → `os.replace()` 原子替换。

· 失败回滚:事务内任一步失败 → `os.replace(.bak, 正式)` 还原双表,输出回滚日志。

· 回滚后:告警 + 保留差异清单;日更下周期自愈;连续失败超阈值升级人工。

8 联动逻辑(沿用 V1.0,落实 C3 归档粒度)

8.1 冲突处理(优先级)

冲突场景处理优先级
主表 vs 文件系统不一致以文件系统为准(refresh 全量重建覆盖)文件系统 > 主表
主表 vs 子表引用脱节以主表为准,子表重生成主表 > 子表
双端副本不一致specs/ 权威,F 盘只读,md5 不符仅告警specs > F 盘副本
同一 id 多维度重复refresh 启动校验报错,阻断阻断 > 容忍

8.2 归档粒度(C3 修正)

· 五件套实体(emmx/html/svg/说明.md):旧目录按 R19 移动归档(非删除) → 「活动区只保留当前版 + 归档区保留历史版」。

· 子表台账 xlsx:单文件追加历史行(不覆盖),保留历周快照。

· 统一表述:「五件套实体按 R19 归档旧版(移动非删除、可回溯);台账 xlsx 内部追加历史行(不破坏历史)」。

9 运行流程与运维(沿用)

项配置
触发`automation-1787712201757` 日更:每日 06:30(`FREQ=DAILY;BYHOUR=6;BYMINUTE=30`,cwd=`F:\400.WorkBuddy_origin`)|原周更 `automation-1787567722214`(每周一 09:00)已退役,由日更接管主表对账
手动触发资产变更时 agent 手动执行 refresh + gen + check_deliverables(含复验)
日志`~/.workbuddy/logs/YYYY-MM-DD/register-sync.log`(主表)+ `logic-map-sync.log`(子表)+ 事务回滚日志

10 关键实现细节(沿用,落实 C5)

· 扫描源:`specs/范式/*.md|*.docx`、`specs/SOP/*.md`、`~/.workbuddy/skills/*/SKILL.md`、`plugins/marketplaces/my-experts/plugins/*/agents/*.md`;写回登记表 path 统一为「相对工作区根 F:/400.WorkBuddy_origin」(C5)。

· hash:sha256 文件指纹;`meta.fingerprint` = 全部条目 hash 拼接后再哈希。

· version 三方对齐:范式.version ↔ SKILL.md frontmatter ↔ 专家 md version,不一致告警进差异清单。

· 渲染器:README 可读版与子表由同一渲染函数从主表生成,杜绝手改漂移。

· 原子写:`json.dump` 到 `.tmp` → `os.replace()`;事务写前双表 `.bak` 备份。

11 潜在风险点(沿用 + 新增双向联动风险)

#风险影响缓解
R1主表滞后(W2 未登记)首轮基线不准阶段 0 先基线重建(补 W2)后冻结
R2双端副本漂移展示误导只读副本 + md5 告警,不自动覆盖
R3场景映射演化不同步子表漏场景scenarios 独立配置 + refresh 一并重建
R4自动化无人值守失败日更缺失幂等重跑 + 日志 + 次日自愈
R5误扫/误标 deprecated主表误判连续 2 次扫描缺失才置位
R6旧一览表与主表冲突用户困惑旧一览表加「历史快照」标注
**R7****双向写循环**死循环/重复写子→主仅刷汇总/状态、不写明细 + 文件锁串行化
**R8****事务中断(半提交)**双表不一致写前双表 .bak + 原子写 + 失败回滚
**R9****并发触发冲突**覆盖丢失`.lock` 文件锁 + 唯一键去重

12 可落地实施步骤(沿用 + 双向联动阶段)

阶段内容验收标准
**0. 基线**补登 W2;手工重建 baseline(补齐 hash/status/updated)主表 51 项与 specs 实际文件 100% 对账一致
**1. SSOT 化**新增 `refresh_register.py`(扫描+校验+原子写+渲染);schema V2双端 refresh 输出一致;id 唯一校验通过
**2. 双向联动**主表↔子表双向同步引擎(明细投影 + 汇总/状态刷新 + 事务)增/改/删三触发全链路一致;幂等无重复写
**3. 事务回滚**双表 .bak 备份 + 原子写 + 失败回滚 + 文件锁模拟半提交失败可完整回滚;并发无覆盖丢失
**4. 消费方切换**`v7 → v8`:读主表 + meta.scenarios;check_s06_sync 升级v8 空跑输出与 v7 结构一致
**5. 联动闭环**更新 automation prompt;日志落盘;旧一览表标注手动触发全链路退出码 0
**6. 验收运维**连跑 2 周期验证幂等/一致性/回滚/日志2 周期产物 hash 幂等;双端 md5 一致;0 阻断

13 与现有规范的关系

· 遵守 N1 §5.7(SOP/范式/一览表命名)、W1 §3.6 R16–R19(五件套治理)、W2(生命周期工具链 13 项)。

· 新脚本归入 `_tools/`(命名/四件套工具链),遵守 N1 §九工具链门禁。

· 双向联动事务/回滚设计对齐 W2 的 R7–R9(审批)/R10–R12(归档)工具链规格。

· 双类交付物:refresh/联动脚本属工具链(Class 工具),五件套属 R16 治理产物,不受 Class A/B 四件套约束(W1 R17 已显式豁免)。

利衡辨 · 全域资料站 | 全域七链元路由 · 一进一出
宪法 > 基本法 > 行政法规 > 地方法规 > 地方规章