接续 88dd570,保存 W20–W24 已实现的共享接口、业务入口、迁移、工作台、测试与文档。 W20/W22/W23 保持 in_progress,W21/W24 保持 verified;此提交不宣称方法或规则正式启用、多轮返修、真实角色评测完成。 W25 新增实验、标定、逐调用交付与角色执行及其迁移/测试/索引留在实施工作树,原有私人和旧实现保留项不纳入。 验证:离线 571、前端 33 通过;PG 469 项通过、2 项浏览器未启用,2 项误带入的 W25 用例已移出本提交;最终任务与交付边界 37 项通过。make 检查、最终类型、84 项资源及 diff 检查通过。未重跑浏览器或 Pi 宿主,不以合成调用认证外部模型效果。 独立整体审查四维通过;证据保存在 R2-20260909/提交W20-W24。
35 lines
1.7 KiB
PL/PgSQL
35 lines
1.7 KiB
PL/PgSQL
-- B05分支只保存起点;正文内容仍归既有document/version表。
|
||
CREATE TABLE public.muse_document_branch (
|
||
document_id uuid PRIMARY KEY REFERENCES public.muse_document(document_id),
|
||
source_document_id uuid NOT NULL,
|
||
source_revision bigint NOT NULL,
|
||
source_hash text NOT NULL,
|
||
author_id text NOT NULL,
|
||
created_at timestamptz NOT NULL DEFAULT clock_timestamp(),
|
||
CHECK(document_id <> source_document_id),
|
||
FOREIGN KEY(source_document_id,source_revision)
|
||
REFERENCES public.muse_document_version(document_id,revision)
|
||
);
|
||
CREATE TABLE public.muse_branch_merge_source (
|
||
candidate_id uuid NOT NULL,
|
||
candidate_revision bigint NOT NULL,
|
||
source_document_id uuid NOT NULL REFERENCES public.muse_document_branch(document_id),
|
||
source_revision bigint NOT NULL,
|
||
source_hash text NOT NULL,
|
||
merge_basis jsonb NOT NULL,
|
||
PRIMARY KEY(candidate_id,candidate_revision),
|
||
FOREIGN KEY(candidate_id,candidate_revision)
|
||
REFERENCES public.muse_writing_candidate_version(candidate_id,revision),
|
||
FOREIGN KEY(source_document_id,source_revision)
|
||
REFERENCES public.muse_document_version(document_id,revision)
|
||
);
|
||
CREATE FUNCTION public.muse_branch_source_immutable() RETURNS trigger LANGUAGE plpgsql AS $$
|
||
BEGIN
|
||
RAISE EXCEPTION 'branch and merge origins are immutable';
|
||
END;
|
||
$$;
|
||
CREATE TRIGGER document_branch_immutable BEFORE UPDATE OR DELETE ON public.muse_document_branch
|
||
FOR EACH ROW EXECUTE FUNCTION public.muse_branch_source_immutable();
|
||
CREATE TRIGGER branch_merge_source_immutable BEFORE UPDATE OR DELETE ON public.muse_branch_merge_source
|
||
FOR EACH ROW EXECUTE FUNCTION public.muse_branch_source_immutable();
|