Fago 文档 Fago 文档
首页
快速开始
后端手册
前端手册
规划备查
文档维护
首页
快速开始
后端手册
前端手册
规划备查
文档维护
  • 快速开始

    • 简介
    • 功能列表
    • 快速启动(后端)
    • 快速启动(前端)
    • 技术选型
    • 项目结构
    • 接口与错误码
  • 后端手册

    • 配置与环境
    • 登录与会话
    • 功能权限与菜单
    • 数据权限
    • 用户、部门、岗位与角色
    • 租户与安全策略
    • 异常处理与错误码
    • 参数、分页与响应
    • 数据库迁移
    • 日志、脱敏与请求加密
    • 平台租户与套餐
    • fago-cli 常用命令
    • 发布验证与恢复演练
    • 字典与参数配置
    • 文件与对象存储
    • 站内通知与执行恢复
    • 定时任务与运行恢复
    • 可靠消息后端与积压观测
    • 身份客户端与设备会话
    • 会员认证与账号管理
    • 服务账号与 scope
    • OIDC 提供方与外部绑定
    • 原生 SSO 验收客户端
    • 账号认证模式
    • 工作流 API 与运行目录
  • 前端手册

    • 本地启动
    • 菜单与路由
    • 请求合同
    • 页面与按钮权限
    • 浏览器单点登录
    • 审批中心与表单发起
    • 工作流定义与运行管理
  • 规划备查

    • Fago:架构与实施方案
    • 总体架构
    • 身份、权限与租户设计
    • Vben 5 前端与 API 合同
    • 数据库与消息后端适配
    • 纯 Go 通用工作流:文件、文档与业务流程
    • 核心数据模型
    • 分期、工作包与验收
    • 架构决策与风险
    • 参考来源与基线
    • 网络安全等级保护二级合规要求
    • M0 实施与验收
    • M1 身份与导航实施及验收
    • 项目配置、API 内容加密与敏感数据脱敏
    • M2 系统管理实施记录
    • M3 平台与 SaaS 实施记录
    • fago-cli 功能规划
    • 生产传输层 WARN 变更范围(2026-10-23)
    • M4 发布实施与验收
    • M4 加固检查归档(本地工程环境)
    • M5 通用平台与身份实施
    • M6 R3.1 正式工作流核心与基础审批
目录

M6 R3.1 正式工作流核心与基础审批

# M6 R3.1 正式工作流核心与基础审批

2026-10-29 开始实施。依据 工作流设计 与 路线图 R3.1,本目标保持完整范围;以下分批交付不缩小最终验收条件。M0 Engine/Instance/Command 继续作为历史 PoC,不能因编译器或目录单项通过就宣布正式引擎完成。

# 完整交付与证据清单

工作包 必须实现与验证的结果 当前状态
W01 集成环境 构建标签/数据库/Redis预检,各方言独立资源,失败与取消清理,无凭据输出 双库隔离、取消/清理专项已通过
W02 规范定义 严格JSON、不可变规范产物、受控条件DSL、类型变量、合法循环、嵌套结构化fork/join、未知构件拒绝 单元race/vet通过;精确JSON键及原始UTF-8边界已补齐
W03 运行时目录 版本/语义指纹不可变、当前平台授权、关闭新准入、兼容清单、原子审计 schema v31目录基础双库通过;完整排空/退役仍归W10
W04 定义发布 不可变定义版本与独立可变准入;固定compiler/form/engine版本,停用只阻止新发起 schema v32发布基础保留,compiler v3已冻结资源合同/表单版本绑定,并接入发布/重新启用事务门禁;内置标量表单的真实版本数据已接入绑定校验,其他资源仍待接入,表单/定义发布HTTP已交付
W05 持久执行 实例、token、scope/activation、join、变量、状态与追加事件;串行/AND/OR及循环重入不串组 schema v33规范化内核及真实审批已接入;内置表单同库适配器已接入,正式worker已接入,四队列同实例组合专项已补齐,完整组合/滚动与容量验收仍待完成
W06 审批模块 指定用户/角色/部门/岗位/部门负责人/主管/本人/发起自选/资源策略,当前资格复核、领取、single/all/any/serial、同意/拒绝、基本转办/委派归还、自审批/空候选规则 schema v36新增不可变发起自选快照与第八类候选;七类既有候选/四模式/组织维护API保留,本增量双库专项通过;compiler v5已接入真实资源提交人/表单用户字段策略,当前共十类候选;compiler v4/v5接入当前任务读取资格复核;十类来源/四模式及真实并行循环组合已通过双库专项,任务管理分页已补齐;完整产品入口与容量分别继续W11/W12
W07 同库资源 显式资源类型白名单、固定版本、活动占位、事务内授权/状态转换/结果回写,资源失败整体回滚 schema v37内置标量表单/草稿/不可变提交/用途占位/结果回写已接入;compiler v4补齐当前任务正文ACL与字段投影,文件/单据及其他资源仍待完成,未结项
W08 命令与可靠动作 主体绑定commandId、相同载荷重投返回原结果、冲突拒绝、事件/outbox、已受理命令恢复 已实现受理/后台恢复及原outbox提示的可信消费、inbox去重和提交后唤醒;旧无job档案不补造执行权。schema v43已接入外部动作持久job/独立收据、事务外派发、有限重试/手动补偿及终态/退役保护,要求v6和真实端口;正式外部动作配置/第四类进程循环与真实子进程恢复已接入;正式v3审批受理/自动后继恢复Go端口、HTTP/收据与页面已交付,新审批真实API/worker子进程及在线Resume/Cancel竞争专项已通过;四队列同实例组合专项已补齐;其他命令及更广泛组合/滚动与容量验收仍待完成,未结项
W09 定时器与worker 持久due/lease/fence/version、支持版本过滤、审批与超时竞争、迟到worker拒绝、循环取消/join schema v39命令恢复、v40激活级定时器及v41实例ready自动续跑已实现;正式worker已显式装配并通过真实子进程崩溃/停机恢复专项;持续池基础及四队列同实例组合已有专项,完整滚动/恢复矩阵与容量仍归W10/W12,未将单项专项当作整体验收
W10 准入与部署 enabled→draining→retired、旧定义/活动引用/命令/job/timer/池租约共同保护、注册/发起/退役并发、回滚兼容 schema v42已实现持续api/worker池合同、心跳/固定操作截止、三队列池来源fencing、受控最后池保护、核心六类引用与原子Retire/Reopen;v43再增加独立外部动作引用。正式API池已在W11接入;固定历史v2→当前双版构建的五状态真实滚动、回滚拒绝和退役/Reopen已有双库专项,更广泛矩阵/容量归W12,未结项
W11 API与界面 统一认证/Origin/权限/三种内容协议;定义发布、发起、本人待办/已办/发起、详情/历史/审批界面与菜单 实际API池、独立目录管理和首批表单/定义/发起/当前任务/正文审批/外部管理HTTP已实现;五类目录/本人列表、参与人详情/时间线/私有条目及固定原提交已接入;个人操作记录及HTTP、真实Vben本人审批/历史、表单草稿/发起、定义发布/准入、平台目录及实例/任务/外部管理页面和菜单已接入;正式OpenAPI扩至46操作/63schema,审批受理、查询与继续页面已接入;浏览器及完整组合验收仍继续
W12 验收与交付 真实双库迁移/升级、跨进程重启/旧新语义共存、事务/并发/故障、HTTP合同、真实页面、容量/恢复基线、workspace/独立模块与文档 四队列积压/实际指标口与长历史20轮采样已有双库证据;完整端到端负载、锁等待/恢复基线、全量审计和浏览器继续

R3.2 的可视化表单/流程设计器、文件与单据适配,以及 R3.3/R3.4 的高级构件按原路线图继续;本页不能作为其完成证据。R3.1 仍须完成基本转办/委派、服务动作与运行时升级保护,不能将其遗漏到高级阶段。

# 四队列积压观测与历史访问路径(schema保持v48)

2026-11-03继续W12。核对容量基线前发现原API积压采样只有消息/infra队列,未包含正式工作流四类持久工作。新增核心受信只读快照窄口,与原消息/基础设施样本在同一只读一致事务及三秒总截止内采集;固定13条查询和固定标签,不按实例/任务逐条读取,不向租户HTTP开放全库选择器,不返回正文、租户、engineVersion或执行身份。

命令、timer、ready及外部动作都报告pending/leased/dead,ready额外报告blocked。timer按ready_at与lease_until的较大值判断可领取;命令受理年龄保留首次created_at。blocked归accepted命令独占,只报告总量,不能和command相加当成两份可调度工作;dead须可见但不自动领取。done/idle/cancelled/compensated历史不算积压,retry_waiting表示已尝试的pending,包括当前已经到期的重试。

状态专项先通过真实表单/发布/发起创建带真实外键的job,再仅在专用库注入统计边界;注入不作为真实恢复或自然timer证据。分别验证有效/过期租约、调度/受理年龄、timer退避、blocked及完成历史排除。后段外部队列SQL失败时,整次采样不发布部分结果,仍保留上次完整快照并标记失败;指标抓取不执行SQL。另用真实race版cmd/api的独立回环指标端口核对新样本,实际进程正常回收;父fixture只准备待办,不派发worker业务。

合成两万条同版本done命令/job并保留真实外键,用实际生产采样SQL验证访问路径。PostgreSQL使用原ix_wfcjob_due,实际5次shared buffer访问。MySQL最初全表扫描;单独约束关联顺序仍无效,因此绑定已有领取索引并由目录驱动。相同数据的EXPLAIN ANALYZE从实际读取20,001行job变为1行。普通EXPLAIN仍可能估算19,723行,最终不拿这个估算宣称实际扫描量。MySQL只有固定受信标识符进入hint,缺索引时失败并保留旧快照;未新增迁移或改动旧清单。语法与实际计数口径另参照MySQL关联说明 (opens new window)、ANALYZE说明 (opens new window)。

两个方言在workspace/独立检查结束后串行测量,每库预热后20轮完整13查询快照。Go1.27.3、Darwin/arm64、主机10逻辑CPU、race启用及本机Docker;测试进程GOMAXPROCS未单独采集。MySQL p50/p95为7.526/8.236ms,PostgreSQL为5.284/6.863ms。两库计划成本单位不同,不作跨库成本比较;这些是共享本机只读采样结果,不是HTTP/worker吞吐、最大容量、生产p95或统计显著的耗时提升。

最终每库7个应用父专项(四个新专项与三个原指标回归)和18项迁移race通过,清理均true。26模块workspace race/vet、改动core/server模块的全新缓存/副本GOWORK=off完整race、依赖边界及版式通过,默认链接与校验和保留。初次后段失败注入检查SQL过早,后改为固定join元数据;MySQL计划定位与估算/实际行区分的失败/诊断均保留,不计入最终通过。范围与摘要见本批证据。golangci-lint未安装;前端、三协议合同和DM本批未重跑。

长历史计划只实测命令队列,其余三队列已有真实状态及指标装配验证,未由本轮获得同规模历史成本证明。端到端并发负载、积压排空、锁等待/恢复容量、完整W01–W12审计与真实浏览器继续,R3.1未结项。运维口径与失败处理见积压手册。

# 历史二进制滚动与退役(schema保持v48)

2026-11-03继续W10/W12。新增 TestIntegrationWorkflowRollingProcess,从固定历史提交 ed1e088fddb9813a2136c3f14a92bbb7666d7e7d 只读归档完整Go workspace,单独构建真实旧API/worker;该构建只有v1/v2,尚无v3审批受理路由。显式隔离绝对GOWORK、校验提交及归档路径,不checkout/reset工作区,不用当前binary裁剪配置冒充历史构建。旧/新入口均启用race,真实网络执行认证、Origin、业务DTO和公开状态/业务码验证。

旧版本状态 升级后保留与实际验证
人工等待 原任务/激活/CAS不变;历史新路由404001,当前API对旧任务的新受理端点409003,原同步审批仍成功
并行join 旧进程先完成一侧后升级,剩余侧保持原任务;升级后完整join;旧定义再次发起仍创建两侧
循环重入 旧进程先投票进入新激活,升级保留该等待;旧定义新实例仍按原循环规则结束
timer租约 原timer自然到期并实际领取后强杀旧worker,新进程以更高fence接管,按原v2超时拒绝
受理命令租约 旧Start已受理并领取后强杀,新worker以更高fence恢复140步链及原人工等待

每个场景先保留旧池并部署新的v2/v3 API/worker;新worker必须是启动后新增的实际worker角色及精确成员,不能用旧presence冒充。旧only-v2池仍存活时,启用v3定义必须409003;旧进程停止、父准备池受控Close且失联presence真实到期后,同一命令才成功。旧定义新发起保持v2,只有新定义获得v3受理能力并由后台完成真实审批收据。父进程不运行后台业务、不删除pool行、不改队列时钟。

人工场景还执行真实历史API/worker回滚,保持其支持的v2配置,要求退出码1及工作流启动失败阶段;不是通过填写未知v3配置制造提前失败。历史日志将具名业务码遮盖为***,故不声称从旧日志读取了具体数值码。随后验证draining关闭有效新发起、活动实例阻止Retire、零实例但旧定义仍可发起也阻止Retire;停用全部旧定义入口后才retired。仅v3池可读取旧安全元数据;控制面即使知道两版清单,也要等所有存活池恢复v2覆盖才能Reopen,且不自动重新启用旧定义。

专项暴露并修复了安全日志的可观测性缺陷:fagocontracts.Code 作为具名整数被slog默认按Any交给脱敏器,错误码丢失。新增显式LogValuer,只允许成功码和公开目录码输出整数,未知码收敛500001;通过真实JSON/RedactingHandler测试,秘密键和未知对象仍遮盖。没有放开任意具名类型,没有修改错误码、HTTP JSON、Oops错误链或模块依赖。

首轮依次修正历史构建的macOS临时路径映射、测试准入列投影及旧日志遮盖断言。timer场景还暴露OS进程退出与数据库端锁回收的竞态:被强杀连接可能仍等待父资源锁并阻塞新API预检,诊断的新日志确认503001。现在旧进程Wait后释放并重新取得该资源锁,让数据库结束旧事务;此间没有存活worker或父业务派发,新锁在新进程启动前重新持有,继续观察更高fence。没有放宽生产或测试启动超时。历史v1→v2旧专项也改为只选择原两版,防止后来v3意外进入未登记夹具。

最终双库各2个应用父专项(五个滚动子场景与原运行池升级)及18项迁移race通过,清理均true。26模块workspace race/vet、三个改动模块(contracts/security/server)的全新缓存/副本GOWORK=off完整race、模块边界及Go版式通过;默认链接配置和依赖校验保留。具体失败、诊断、过滤器和摘要见本批证据。本批未重跑前端/三协议合同/DM,golangci-lint未安装;真实浏览器仍被Work设置禁用。

这是v2→v3的一条真实历史构建路径和五个指定窗口,不穷举全部清单/外部模板或提交时序。积压/锁等待/恢复/容量基线、完整W01–W12审计和真实浏览器继续,R3.1保持进行中。

# 四队列同实例组合恢复(schema保持v48)

2026-11-03继续W08/W09/W12。新增 TestIntegrationWorkflowCombinedQueueProcess,沿用既有compiler-v6外部动作模板,在同一真实标量表单实例串接accepted发起命令、ready自动续跑、外部HTTP动作及持久timer。没有改变旧模板、清单或生产代码;该外部模板仍使用同步Signal,不能将本专项表述为它已获得正式v3的AcceptedSignals能力。

规范图复用一条140节点自动链:受理发起后由command独占推进,进入人工审批/外部动作的fork,join之后回到该链,人工amount=10/20控制两轮循环;远端只写note,不能覆盖循环条件。离开循环后进入一秒期限的审批节点,自然超时走40节点尾链至approved,不产生第三张人工投票。初始accepted期间ready保持blocked,后续真实Signal的预算剩余工作才交给ready。图总节点低于256,没有通过注册测试动作、改时钟或手动RunOnce替代实际调度。

同一实例依次经历四个强杀窗口,七个正式race版cmd/worker进程按顺序接管:

窗口 故障定位与恢复 持久断言
command已领取 真实资源行锁阻止业务提交,确认lease后SIGKILL并Wait,释放锁再启新进程 原command attempt过期,140步链跨检查点恢复;进入人工等待后发起收据冻结
远端效果已提交、响应未知 接收器先提交SQL效果后阻塞响应,强杀worker;原URL重建HTTP server,再启worker 从SQL重放原效果,不依赖幂等内存;两轮不同executionKey各一个效果,含首次重放共3次调用;不声称远端OS进程重启或厂商认证
ready已领取 第一轮真实审批后有自动剩余工作;资源锁定位ready lease,强杀并新进程接管 旧ready attempt过期;join后重入创建新审批激活与新远端动作,旧任务正文拒绝读取
最终timer已领取 两轮人工节点的60秒timer已分别撤销;最终一秒期限真实到达后,资源锁定位timer lease,强杀再恢复 旧timer attempt过期;自然超时完成40步尾链,最终资源approved,无伪造人工投票

父进程使用持续实际API运行面,每次在线读取/投票重新登录并Bind当前scope,避免长场景复用已到期授权;实际后台工作全部由子进程完成。结束时核对四类attempt各有一个expired、两轮join scope、两张真实投票、两个已撤销审批timer与最终done timer;command/ready job终结、活动占位/grant释放。通过当前Alice身份调用真实表单Submission,原始amount仍10、唯一approved Review的amount为20;最初done/running发起收据的版本和状态保持冻结。

最终双库分别执行 ^TestIntegrationWorkflow(CombinedQueueProcess|ExternalProcess|AcceptedSignalProcess)$:每库3个应用父专项(本组合、原外部进程3场景、原审批受理进程3场景)与18项迁移race通过,容器清理均true。26个workspace模块race/vet、server模块全新缓存/副本的 GOWORK=off 完整race、依赖边界及Go版式检查通过,默认链接和依赖校验保留。只读复核无必须修复项;golangci-lint未安装,前端/合同/DM本批未改动或重跑。

首轮因新测试投影误从任务表取mode而失败,修正为真实审批组关联后才完成定向及最终双库回归;失败保留且清理true,不计入通过。实际范围与日志摘要见本批证据。该专项证明这一完整图和四个故障窗口,不穷举全部组合;完整多版本滚动/回滚、积压/锁等待/容量基线及真实浏览器继续,R3.1未结项。

# 在线恢复与存活worker竞争(schema保持v48)

2026-11-03继续W08/W09。新增 TestIntegrationWorkflowApprovalProcessRace,真实API与存活worker使用正式v3、真实投票及140个自动后继。父测试只锁资源,不修改job、lease或fence;先确认worker已领取并等待该资源,再确认在线请求被worker的运行版本锁阻塞,之后分别在原租约到期前/后释放资源,约束两种提交顺序。

PostgreSQL沿父锁backend的 pg_blocking_pids 检查阻塞链;MySQL按 performance_schema.data_locks/data_lock_waits/threads 的实际锁对象和阻塞连接检查,不依赖SQL文本是否可见。元数据只返回计数,不向测试输出传递SQL正文、连接身份或租约。异步HTTP由主测试限时、取消并join,不在请求goroutine内调用t.Fatal。测试API可配置10秒操作期限,原默认仍1秒,worker原3秒固定租约保持;这不是生产配置或期限放宽。

在线动作 worker先提交 在线先结算
Resume原审批命令 worker先提交128步检查点,原审批人接手续完并返回200/done;必须有该主体的command.done事件,不能以已结束后的done快返冒充竞争 旧租约到期后在线推进,返回202/accepted;旧attempt expired且无work_fence=1提交审计,仍存活的worker以新fence完成剩余节点
Cancel实例 worker已推进版本,使用原实例CAS的取消返回409001;失败取消不覆盖最终approved收据 旧租约到期后取消成功,原审批收据冻结done/cancelled;旧attempt expired,worker不能复活实例

四个场景均检查唯一人工投票、原command actor、旧attempt与实际自动审计的提交顺序、job终结和资源占位/grant释放。收据完成后不立即停止旧worker,而是再观察该实际池至少一次续租,重新核对冻结版本,最后才正常回收worker/API。没有在正式入口添加测试后门,也没有修改生产代码、迁移、依赖或前端合同。

最终MySQL/PostgreSQL各3个应用父专项通过:新增四个竞争场景、上一批三个真实崩溃/停机恢复场景及原API生命周期;每库18项迁移race通过,容器清理均true。26个workspace模块race/vet、改动server模块的全新缓存/副本 GOWORK=off 完整race、模块边界及Go版式检查通过,均用默认链接配置且保留依赖校验。只读复核无必须修复项,golangci-lint未安装;前端/合同/DM本批未改动或重跑。

首轮有新增测试的未用import/Envelope.Code类型编译错误,修正后才执行实际场景。随后扩展双库回归中,MySQL未识别按SQL文本匹配的等待链,原轮不计双库通过;改为实际锁对象/连接阻塞链后先定向定位,再完整重跑双库通过。失败时t.Context取消可能使database/sql先自动回滚,清理显式容忍ErrTxDone而不忽略其他错误。失败/定向记录及最终过滤器见本批证据,不将单场景通过冒充完整矩阵。

本矩阵约束上述四种受控顺序,不代表所有时序或故障组合已穷举;命令/timer/ready/external组合恢复、完整多版本滚动、积压/锁等待/容量基线与真实浏览器仍继续,R3.1未结项。

# 审批受理真实进程恢复(schema保持v48)

2026-11-03继续W08/W09/W12。新增 TestIntegrationWorkflowAcceptedSignalProcess,使用正式v3清单、真实表单/组织/投票、race版 cmd/api 和 cmd/worker。父fixture只准备任务和准入presence,不执行后台RunOnce;实际HTTP受理后才启动独立worker,不能把同进程重建内核当成跨进程恢复。生产代码、迁移、HTTP合同和前端均未修改。

每库分别执行三个场景,均包含唯一人工投票、140个自动后继以及至少一个continued和最终done检查点:

场景 故障与当前授权 实际证明
crash-revoked-session 真实API受理后撤销原在线会话,HTTP读取/继续拒绝;运行版本改为draining;资源行锁阻止worker业务提交,领取持久lease后SIGKILL并Wait 新OS进程在旧lease过期后恢复;原attempt为expired,后续fence>1;实例未部分推进,后台Work不恢复旧Actor或会话
graceful-revoked-permission 移除原审批权限但保留发起权限,新会话HTTP查询/继续均403001;相同资源锁窗口发送SIGTERM并Wait 正常停止取消SQL等待并join;新worker仍完成此前提交的自动后继,恢复当前审批资格后新会话可读冻结结果
lost-response-api-crash 客户端终端适配器丢弃真实API的202响应,使调用方无法确认;随后强杀原API并启动新API 新API按原commandId读取accepted,不推进执行;再经过worker强杀/重启恢复,原载荷重投返回同一done,不产生第二次投票

响应丢失场景明确模拟“事务已提交、客户端未获得成功收据”,不声称在数据库提交前杀进程,也未在正式入口添加测试后门。每库实际启动4个API与6个worker子进程;测试拥有的进程、连接、锁和数据按逆序回收,不操作开发服务。最终还校验原命令actor保持真实审批人、后台事件actor=0且work_fence>1、job为done以及表单活动占位/临时grant释放。

MySQL/PostgreSQL各1个应用父专项(上述3个子场景)与18项迁移race通过,runner清理均true。26个workspace模块race/vet与模块依赖/DAG/internal检查通过;改动的server模块另使用全新缓存、副本及 GOWORK=off 完整race测试,默认链接配置、原校验和验证保留。只读复核无必须修复项;golangci-lint未安装。前端和合同沿用上一批已验证版本,本批没有改动或重复运行其检查。

首轮专项因新增断言误用不存在的attempt状态completed而失败;实际合同是continued/done,修正测试后重跑双库通过。原失败记录保留、清理true,不计入通过。实际命令、范围及日志摘要见本批证据。该批三个故障窗口当时未覆盖在线Resume/Cancel与存活worker竞争,现已由后续四种受控顺序补充;命令/timer/ready/external组合恢复、完整多版本滚动、积压/锁等待/容量基线与真实浏览器验收仍继续,R3.1保持进行中。

# 审批受理HTTP、合同与页面(schema保持v48)

2026-11-03继续W08/W11。正式v3在原Go端口之上追加三个真实HTTP入口:精确任务路径的 POST /decision-commands、原主体的 GET /approval-commands/:commandId 和 POST /approval-commands/:commandId/resume。所有入口要求当前审批权限;POST沿用admin来源/Origin及严格DTO,resume仅接受空对象,不能替换投票或后台租约。accepted POST返回202,done返回200,读取始终200。统一Reply保留JSON/RSA-AES/SM2-SM4,不新增迁移、权限码或菜单。

已授权当前任务正文从精确匹配profile投影 acceptedSignals,false省略;不增加SQL,不向历史原提交加能力字段。精确decision-commands路径获得原512KiB传输额度,resume仍16KiB;领域单text最多4096 UTF-8字节等规则不放宽。旧同步decision和v1/v2保持原合同,不支持新能力明确409003。OpenAPI唯一模块源扩至46个操作/63个schema、20个请求示例,聚合合同与真实前端生成类型同步。

Vben页面只在当前能力严格为true时选择受理入口。原命令号、载荷和入口在发送前冻结;响应未知时可原样重投或查询,不重做投票、不自动切协议。accepted确认后清除旧正文/意见/请求,提供“查询审批进度”和显式“继续处理”;done即刷新列表,不能将部分会签的done/running误报为全流程批准。关闭、换对象、切换身份/授权或卸载会清理组件内存并忽略旧响应;命令号不写URL或持久存储,关闭不撤销已提交后台工作。

MySQL/PostgreSQL分别运行完整 ^TestIntegrationWorkflowOpenAPI$:每库1个应用父专项(三协议下含受理、部分会签及原管理/外部/用户操作组)和18项迁移race通过,容器清理均true。每库实际校验414条响应、105个成功请求、46个操作;包含原主体/租户隔离、当前审批权撤销与重授、相同重投/异载荷冲突、查询不执行、严格空DTO、当前worker租约失效、自动后继完成、部分会签冻结原结果和旧同步回归。此处API与worker使用同进程真实内核/服务/池,不是新审批种类的实际子进程强杀证明。

最终默认链接验证:26个workspace模块race/vet、26个 GOWORK=off 全新独立缓存模块测试、模块显式依赖/DAG/internal检查及DM API/worker编译通过。独立模块测试不带race,race来自workspace;未关闭校验和或省略DWARF。前端29文件317项测试、类型检查、生产构建、合同及生成漂移检查通过;Node生成器9项测试通过。组件使用真实Vue/Router/Ant、业务IO替换,API/JWE边界另有真实客户端封装测试,均不冒充真实浏览器。只读复核未发现必须修复项;golangci-lint未安装,未声称通过。

初次受理fixture超过既有4096字节text限制、随后误期望未知query返回400001,两次失败保留;分别改为多个合法字段及准确400002断言后,才完成最终全协议双库验证,没有放宽领域校验。一次单plain专项只作排错,不冒充全协议。实际范围与日志摘要见本批无敏感信息证据。

本批当时真实浏览器仍由Work设置禁用,文档只记录同步/链接/构建与静态片段检查。后续新审批的三个真实进程故障窗口已由本页进程专项补充;完整组合恢复、其他受理命令、W07其他资源以及完整W10/W12滚动、积压、锁等待、恢复和容量基线继续实施,R3.1目标未结项。

文档已同步63页并通过链接/构建/构建后检查;本批五个静态页面、131个本地片段、四分册及两篇手册七节结构核对通过,证据源/公开副本/构建产物逐字节一致。后端手册提供受理/查询/继续请求、202收据与400错误示例,前端手册提供真实页面对应请求与收据;功能列表、路线图和本页为索引/验收记录,不承担独立操作教程。静态站构建不表示公网已发布。

# 审批命令受理与自动后继恢复(schema保持v48)

2026-11-03继续W08。新增显式 AcceptedSignals 不可变能力与正式 fago-form-approval-v3,沿用compiler v5和真实标量表单/审批端口,强制持续API/worker池。旧v1/v2及既有外部模板不获得新能力;已发布清单中的省略字段仍保持原字节。表结构继续使用既有命令/job/attempt/ready模型,没有新增迁移。

ExecutionKernel.AcceptSignal 与同步 Signal 共用当前身份、任务CAS、候选资格和模式投票规则。在同一运行时→租户/身份→资源→实例事务中完成真实投票、变量汇合、激活结束、授权/期限回收和后继token移动。新入口不在请求中执行自动后继;如果只剩自动ready,则同时写入规范检查点、持久job、事件和outbox,返回 accepted。任何一个持久化步骤失败,人工投票和检查点整体回滚,原任务版本仍可重试。

部分会签或并行中仍有人工等待时,受理入口保存 done 收据,后续自动工作交给原实例ready调度,避免accepted隔离挡住另一位审批人。收据完成只表示本次人工命令已结算,不保证整个实例终结;结果仍可能是 running、有 waiting 或 needsRun。

新入口的所有收据(包括立即done)使用独立持久种类 signal.accepted;同步入口仍使用历史 signal,原载荷摘要不变,同一主体/同一载荷重投返回原检查点或冻结结果,异载荷冲突。专用种类防止剩余 workflow:instance:start 权限借历史 Command 泛读新审批收据。SignalCommand 与 ResumeSignalCommand 要求原主体当前 workflow:task:decide,不要求审批者等于发起者;权限/会话撤销后不能在线读取或恢复。后台只从已提交token继续自动执行,以私有Work及租约/fence审计,不重做投票、不构造原操作者Actor,也不保存原SessionID。

当前命令worker、原outbox/inbox提示校验、accepted优先于ready及管理取消已接入新种类。在线恢复或管理取消会撤销旧job租约;管理取消保留已提交的投票历史,将原accepted冻结为done/cancelled,不能让迟到worker复活。draining仍允许此前已受理命令恢复,排空引用沿用按state统计的既有规则。

最终验证使用默认链接配置:MySQL/PostgreSQL各8组应用专项(14个叶子场景)与18项迁移race检查通过,专用测试容器均已清理。26个workspace模块的race/vet、core与server两模块的GOWORK=off独立race、模块边界及DM API/worker编译通过;独立验证重建本地私有模块,复用锁定的外部依赖,临时关闭Go模块文件列表索引优化,不关闭校验和。OpenAPI同步检查仍为43个操作/62个schema,未改HTTP/前端合同。

低磁盘期间发生过链接失败与Docker只读故障,失败记录保留,不计入通过。仅回收可明确归属本项目的可重建编译对象;原服务按既有授权恢复,原始数据备份保留,恢复私有材料不进入文档站。恢复空间后已按默认链接重跑最终双库和模块验证。真实浏览器当前仍由Work设置禁用;文档以同步/链接/构建和静态片段核对验收,不宣称浏览器已通过。

此批当时交付的是正式Go端口、构建模板和持久恢复基础;当时43个HTTP操作与Vben页面仍使用原同步审批入口。后续HTTP/查询/OpenAPI/页面已由本页新批次补齐,真实进程组合验收继续,不能把库级检查当作完整产品支持。Go端口批的实际结果见当时证据。完整W08、W10/W12与浏览器门槛保持待办,R3.1未结项。

# 规范模型与编译规则

规范模型采用 fago-workflow-v1;默认编译规则固定为 fago-compiler-v1,受信运行时档案可显式选择 fago-compiler-v2,不能因进程升级自动替换旧规则。输入上限256 KiB、256节点、64个有类型变量,拒绝未知字段、重复JSON键、尾随报文和超深嵌套。支持开始/审批/排他条件/成对fork-join/注册动作/显式结果终点;未知策略或动作在编译时拒绝,不静默忽略。

条件只比较声明的 text/integer/boolean 值,整数直接比较避免相减溢出;缺值不会因 ne 意外命中,exists 明确表达存在性。审批可声明允许修改的变量白名单;候选策略在节点激活时由当前租户授权端口解析,编译通过不代表已经获得身份或资源权限。

规范摘要绑定编译器版本、语义指纹和规范字节。产物字段私有,输入/输出深复制;节点和变量集合排序不改变摘要,条件路由和串行候选顺序保持原意。成功分支不能在join前提前结束;显式拒绝终点要求运行面同事务取消整个实例及兄弟任务,后续验收必须证明这一点。

# 运行时目录基础

v31新增控制行、不可变运行时清单和追加审计,不自动登记处理器,不开通租户套餐,不新增在线流程菜单。v31基础批当时仅允许登记当前构建声明的清单、关闭新准入为draining和检查构建兼容快照;当时没有重新开放或退役命令。后续v42已追加引用排空、持续池与原子退役/重开合同,实际范围见本页末节;仍无删除历史清单接口。

目录操作通过现有身份服务在同库RC事务锁定并复核平台账号/会话/权限,再锁全局控制行。指纹或能力清单不同不能覆盖相同版本;重复登记不恢复draining,也不重复写审计。目录/审计任一失败都回滚。平台目录权限不产生租户流程访问权。

已识别的锁序接入约束:当前 WithinTenantWrite 在业务回调前锁租户/账号/会话,而工作流发起要求先锁运行时版本及定义准入。W04/W05必须增加同一事务内的受控预锁编排口,统一版本准入→定义准入→租户/身份/资源/实例顺序,禁止通过两个事务拼接,也禁止全局目录持版本锁后反向进入租户管理事务。已通过受控 WithinTenantWritePlan 实现同库RC预锁:预锁前无锁复核当前身份,取锁后仍执行原管理写锁定身份复核。定义启停先锁运行时与准入再锁租户;新版本发布不取既有准入锁,只在租户锁内分配最新序号,因此不会在租户锁后反向等待已被启停锁住的旧准入。真实审批/资源与worker接入仍待W06/W07/W09验证。

# 本地验证入口

专项脚本仅接受 mysql/postgres 选择,使用本机已存在的锁定Docker镜像,自建随机专用数据库和每方言独立Redis;连接凭据仅进入内存与子进程环境,私有日志留在忽略目录。不要将业务库连接传给此入口。

# 外层仓库根目录;入口会source scripts/go-env.sh,再为两个方言分别创建和清理资源。
bash scripts/test-workflow.sh
# 单方言排错仍使用脚本自建资源。
bash scripts/test-workflow.sh --driver postgres
# 只筛选应用中的受理专项;迁移仍全部执行,报告保留过滤器,不当作全量应用通过。
bash scripts/test-workflow.sh --application-run '^TestIntegrationWorkflowAccepted'

脚本要求每个模块至少有一个实际通过的工作流顶层测试,不能因全部跳过而返回成功。失败报告只给状态和私有日志路径;取消时终止本次Go进程组,再清理本次拥有的容器/匿名卷。实际结果与后续里程碑证据将持续追加;当前M6/R3.1未完成。

# 定义发布与准入基础(schema v32)

已新增 wf_definitions、wf_definition_versions、wf_definition_admissions 和 wf_definition_events。版本正文、摘要、compiler/schema/engine版本和语义指纹整体冻结;发布新版保留旧版,停用只推进独立准入的version/epoch,不改写历史图。新发布默认不开放准入,调用者须明确Enable;本批尚无在线HTTP/CLI发布入口。

所有版本/准入/事件关系带tenant_id复合外键。最新序号在当前租户写锁内分配;不存在行不依赖MySQL间隙锁。不同运行时的两个租户管理员竞争相同ExpectedVersion时,只能有一方提交。版本列表采用主键游标倒序、每页最多50条,不读取模型正文或逐版本查询关联。

命令事件唯一绑定tenant/actor/requestId,载荷摘要包含命令类型、规范模型摘要或定义版本与预期准入版本。相同载荷返回原结果,即使准入后续已变化;不同载荷返回409001,不覆盖历史。事件与发布/准入同事务,事件插入失败使全部回滚。draining拒绝新发布/启用,但允许旧命令重投和关闭定义准入。存储正文摘要不匹配、命令结果为合法但缺字段的空JSON时,返回内部固定错误,不返回成功零值或泄露正文。

编译器额外拒绝大小写别名JSON键,避免encoding/json忽略大小写造成覆盖;直接Go调用也在序列化前拒绝非法UTF-8条件文本。受控预锁前后的身份检查保留client/来源/OIDC/session守卫,真实版本锁屏障已证明等待期间撤销会话后发布被拒绝。

v32基础批当时尚未实现实例发起/审批、资源回写、表单绑定、定时器/worker、执行池租约和原子退役;后续内核进展见本页v33增量,仍不将服务构造、元数据迁移或模型编译当作完整工作流支持。W04与W07还须在真实适配器接入后冻结资源/表单版本,不能接受客户端任意宣称已认证的绑定。

# 本批验证与下一交付

本节保留v32基础批的交接记录,最新状态以本页v33增量和完整工作包清单为准。

2026-10-29 MySQL/PostgreSQL分别9项应用工作流专项、2项真实迁移专项通过,所有专用数据库/Redis容器与匿名卷已清理。测试入口取消时也已实际证明终止Go进程组并清理资源。24个workspace成员race/vet、24个GOWORK=off独立模块通过;应用/核心/系统改动模块nilness扫描通过。达梦迁移仅构建通过,不计为实库认证。

并发发布首轮被新建账号必须改密保护提前拒绝,修正专用测试夹具后进入真实不同运行时/不同账号竞争并通过。版本锁屏障测试还补齐失败/超时路径的取消、释放和goroutine join,避免排错时挂到全局测试超时。

结构化结果与日志摘要见本批证据。本增量未重跑完整历史业务实库回归;完整R3.1验收继续要求W12所列跨进程重启、新旧语义共存、容量/恢复和真实页面。下一交付进入W05持久执行,连同W06/W07接口完成实际发起与同库事务,不将当前目录/定义服务当作目标完成。

# 持久执行内核增量(schema v33)

本批新增 wf_instances、wf_scopes、wf_tokens、wf_node_activations、wf_join_states、wf_instance_variables、wf_commands 和 wf_events。核心不再使用M0的单状态JSON;每次fork分配独立scope/activation与预期分支槽,join只汇合同一次scope的精确分支。内层join续行时恢复父scope及原父分支身份,循环再次进入同一fork不会复用旧槽或旧任务激活。

自动推进每事务最多128步,剩余ready token留在数据库;没有人工等待的合法自动循环也会返回NeedsRun,不在请求里无界运行。当前Advance仍是受控在线管理编排端口,后台Work身份、租约/fencing与自动续跑须在W09实现后才能装配正式worker;不把手动重新调用当作自动恢复完成。显式取消以实例版本校验,原子取消全部token/等待、回收资源占位并保留历史。

同库端口锁序为运行时/新发起定义准入→当前租户/身份→资源→实例。资源Before先锁固定版本并校验,实例创建后由Bind在原资源锁内建立占位,便于占位外键关联已创建实例。Finish按固定版本CAS回写;任何端口或事件失败都回滚命令收据、变量、激活、token、join和资源。不存在默认空实现,缺真实资源/审批/动作端口时拒绝构造内核;目录宣称的每个版本都必须装配真实端口集合。

命令号在租户内唯一并绑定原操作者,规范摘要覆盖全部决策/资源/变量输入;已提交命令返回原结果,载荷或主体不同拒绝。值在摘要前做类型/UTF-8校验,节点只允许更新Outputs白名单;适配器收到独立节点与变量副本。存储变量缺失类型、错误类型、重复/别名键或未知字段时拒绝,不能用零值继续审批。原结果中的非法状态/等待元数据也拒绝。

MySQL首轮并发专项暴露预读旧实例版本用于CAS的错误:等待运行时/资源/实例锁后,另一合法分支可能已提交。已改用锁定后的当前版本;真实版本锁屏障强制两条决策都先读取旧版本,再串行取得锁,作为两库共同回归边界,而不依赖碰巧调度顺序。

本批资源与单人审批端口仅为专用测试库的事务证明夹具,不作为产品业务适配器。新旧版本证明端口故意返回不同结果,用于验证精确版本分派与draining后旧实例可继续;这不替代真实候选、会签/或签/串行、基本转办/委派、资源发布绑定或跨进程/滚动部署验收。真实候选模块W06、资源合同W07、accepted命令/outbox W08、timer/worker W09、执行池/原子退役W10、API/页面W11及完整W12继续保留,R3.1未完成。

本批另补齐接口typed-nil构造拒绝、空闲Advance不写版本、模式端口汇合有效节点字段后再由内核校验,避免默认为最后投票者输入。当前变量表保存最新状态,跨节点同字段按实例锁内成功提交顺序写入;真实原始决策输入及节点数据快照必须由W06/W07追加留存,不能把当前变量表当作完整历史。

独立模块复验曾在官方工具链下载时遇到TLS超时。现脚本复用go-env已选定/校验的Go1.27.3二进制,只调整当前shell PATH;GOTOOLCHAIN和sumdb策略不变,仍用全新模块缓存与源码副本检查,不以旧模块缓存掩盖依赖缺失。重跑结果与双库/静态检查最终证据见执行内核证据。本批不覆盖完整历史业务实库回归、真实审批/资源端口、跨进程停止恢复、生产部署或达梦实库。

2026-10-29最终专项:MySQL/PostgreSQL各14项应用工作流测试、3项真实升级迁移测试通过;24个workspace成员race/vet、24个GOWORK=off独立模块、改动模块nilness及typed-nil构造单元race/vet通过。所有专用数据库/Redis容器和匿名卷已清理;达梦仅构建检查通过。下一交付为W06真实审批模块,W07–W12范围不变。

# 真实审批首批(schema v34)

新增独立 fago-workflow-approval 模块,当前实现指定用户、角色、部门、岗位和发起人五类策略。候选在激活时保存真实用户及来源ID;同一人多来源去重后占一席,资格复核只接受原来源中仍有效的一项,新加入成员不会获得旧任务。直接用户保留模型顺序,组织策略按用户ID稳定排序。单激活最多100名候选、10000条来源,超限整体拒绝,不能截断改变会签分母。

single先领取再决策;all任一拒绝即拒绝、全体同意才通过;any任一同意即通过、全体拒绝才拒绝;serial只开放当前席位,同意后按原顺序激活下一人,拒绝终止。默认排除发起人,自审批须在不可变节点显式允许。空候选保留assignment_error任务并等待有权限的管理员明确补分配,不能自动通过。

任务领取、转办、委派、归还、管理补分配通过内核同一事务完成,锁序仍为运行时→租户/身份→资源→实例→审批组/任务。当前权限、任务版本、当前来源及目标同租户有效用户同时校验;代理只能提交私有意见归还,原处理人保留终审席位,不能再接受同组另一任务而破坏一人一票。返回原命令收据不会再次推进版本;意见及原始节点字段只写私有审批历史,不进入通用事件或日志。

会签对同意字段求一致并集,同名不同值回滚最后一票,保留此前已提交的真实投票。字段仍须符合固定定义的Outputs白名单与类型;损坏的组头、任务收据和历史字段不以零值继续执行。旧v33空意见命令的规范字节保持不变;普通旧收据不要求新增task字段。

临时读授权以当前有效用户和原来源批量收缩。非终态投票不再给停用或来源撤销的兄弟候选重新授权,因此合法投票可继续提交;失效席位保留给管理补分配。来源按种类/每200条原始人和来源配对分块查询,待办元数据使用单SQL关联模式与有界游标,不逐任务展开来源。正式资源的读取消费者仍须在W07逐次复核当前资格,不能把持久授权行视为永久许可。

本批修复了跨模块错误转换边界:工作流预锁/业务回调在退出本域前将不可见资源映射为404001、唯一冲突映射为409002,避免系统事务层先把裸ORM错误包装成503001;当前身份401和权限403保持原码。跨租户任务变更、决策、续跑、取消和定义准入均须拒绝,不泄露其他租户存在性。

v34增加审批组、任务席位、候选来源、不可变决策与私有任务事件;租户/实例/激活复合外键、每席一票/每人一票和任务状态约束由数据库与当前事务共同保证。仅登记操作权限,不自动开放套餐/菜单、不创建审批示例或资源授权。

# 首批验证与剩余范围

验证使用脚本自建MySQL/PostgreSQL与独立Redis专用资源。覆盖四模式、领取竞争、角色撤销/后来加入、多个原来源、空候选补分配、自审批拒绝、转办/委派归还与授权失败整体回滚、委派人席位、字段冲突、跨租户拒绝以及失效兄弟的终态/非终态处理;追加100人/10000条原来源的显式委派边界。v30/v31/v32/v33非空升级与重复迁移检查历史定义、准入、执行行和旧收据保留,不为旧实例补造审批任务。实际命令与最终结果见审批首批证据。

W06仍未全部完成:部门负责人、发起人主管需要明确组织关系与受控维护入口,不能猜测管理员或首个部门成员;发起自选和资源策略需要受信资源合同及版本化编译规则。当前五类策略清单只声明已实现能力。W07正式资源/表单发布绑定、临时文件授权与业务回写、W08可靠受理命令、W09worker/timer、W10执行池/原子退役、W11真实HTTP/页面及W12完整恢复/容量验收全部保留。当前资源/ACL仍使用专用事务证明夹具,不代表已交付文件或业务资源适配器。

2026-10-29本批最终结果:MySQL/PostgreSQL各26项应用工作流专项、4项v30–v33真实升级迁移通过;25个workspace成员race/vet、25个全新缓存独立模块和改动模块nilness通过,达梦迁移构建通过。100人/10000来源只是候选与授权边界回归,不替代W12的并发吞吐/p95容量基准。文档同步/60页检查/构建及两个v34章节锚点、四分册浏览器检查通过。磁盘空间不足曾中断补验,清理可重建Go编译缓存后已重跑;测试专用容器/匿名卷由脚本确认清理。下一交付继续W06剩余策略与版本化编译支持,W07–W12完整范围不变。

# 编译规则的版本档案

CompileOptions.CompilerVersion由受信组合根指定,空值严格保持v1。编译产物携带实际版本,摘要前缀、不可变运行时清单和定义发布记录都绑定该值;恢复按精确engineVersion档案编译并核对原版本/摘要,不使用当前全局默认规则。同一engineVersion即使指纹不变也不能更换compilerVersion。未知编译器在构造/编译阶段拒绝,不回退最新版。

v2为后续主管、自选与注册资源策略明确不接受候选IDs的规则;这些身份必须来自真实组织关系、已冻结发起选择或受信资源计算。策略仍必须出现在该运行时能力清单,users等指定ID策略继续要求规范正数ID。当前真实审批端口只声明原五类策略,本增量不把“模型可编译”当作主管/自选/资源策略已经运行。

运行时目录、定义服务和执行内核统一在构造阶段拒绝typed-nil依赖,避免部署成功后才在发布或恢复时空指针异常。本批不新增数据库结构,不修改v1规范字节或已发布SQL迁移;固定旧前缀的摘要、默认/显式v1清单一致、同engine换compiler拒绝和旧v1/新v2运行并存分别由单元及真实双库用例验证。实际检查见编译档案证据。

编译档案本批实测:双库各26项工作流应用及4项升级迁移通过,25个workspace race/vet、25个全新缓存独立模块与改动模块nilness通过。v1旧实例与v2新实例使用不同证明处理器,分别保持批准/拒绝结果;这证明版本分派与恢复,仍不代表后续候选策略已实现。下一步继续显式组织关系、发起选择快照与资源策略适配。

# 显式组织关系与两类候选(schema v35)

新增独立负责人/主管关系表,主体与目标都有同租户复合外键、反向索引和独立版本。清空保留版本行,version=0只匹配从未维护的关系,不因删除重建产生ABA。维护接口不覆盖用户或部门自身版本,不从管理员/首成员猜测候选。读写复用当前身份、按权限的数据范围和租户→升序账号→会话锁;关系与authz_version及脱敏审计同事务,审计失败全部回滚。

主管变更在租户锁内一次批量读取最多10000条非空边,迭代验证整图与64条链边边界;不按每层单独查询。两个不同真实写入者竞争互不重叠的账号锁,预置B→C、D→A后竞争A→B/C→D,只能一方提交,另一方因结构冲突拒绝。主管结构使用409003“当前状态不允许此操作”,不复用部门专用409004提示。用户/部门软删除前必须显式解除相关活动关系,清空版本行保留且不阻止软删除。

新增四个租户维护端点与独立权限:用户直属主管GET/PUT、部门负责人GET/PUT。HTTP参数区分漏传与null,关系版本0合法;未知字段/错误JSON类型走通用400001,语义无效字段400002。实际请求经过当前认证、Origin和统一明文/RSA-AES/SM2-SM4出口;维护API已可用,组织页面入口尚未接入。操作与完整请求/响应示例见组织手册。

新组织候选端口显式声明department-leaders和initiator-manager,要求新engineVersion/指纹及compiler v2;旧端口仍仅支持原五类。部门负责人保留原部门ID来源,主管保留原发起人ID来源。关系改派立即使旧配对失效,新负责人/主管不能接管旧快照;管理员仍可明确补分配。多个原来源取当前有效并集,缺失关系进入分配异常而非自动通过。审批操作与临时授权批量复核都使用原配对,不能从后来新增关系展开新人。

实际验证与日志摘要见组织关系证据。本增量不把维护API当作完整工作流API/界面;自选快照、注册资源策略和W07–W12继续保留。达梦只做源码/构建检查,不宣称v35实库认证。

本批最终双库各33项应用工作流专项、5项v30–v34非空升级迁移race通过;25个workspace race/vet、25个最新源码全新缓存独立模块、改动系统/应用race/vet/nilness及达梦构建通过。186条实际响应(124加密/62明文)与1913条静态OpenAPI样例通过合同校验,生成前端类型及typecheck通过。专用数据库/Redis容器与匿名卷已由脚本清理。下一步继续发起自选快照、注册资源候选策略与W07–W12,不把七类候选或维护API当作R3.1完成。

# 发起自选快照(schema v36)

本批把自选名单作为实例不可变输入,独立存入wf_start_selections;不与可修改变量或执行状态混用,不在普通元数据/事件/日志输出名单。每实例最多256个选择节点、每节点100人、总计10000项、正文256KiB。节点键必须指向固定规范中声明self-selected的审批节点,用户ID必须是规范正数字符串;重复、越界、未知节点整体拒绝,不排序、不去重、不截断,以保持串行处理顺序。空名单或未提供名单进入分配异常,不默认发起人、管理员或自动通过。

ExecutionStart.Selections在空映射时从命令摘要完全省略,保留v33原有字段顺序和Values空值语义;非空名单及其顺序绑定原命令号,同号换人/调序冲突。首次人员有效性校验在原收据重投之后,按同租户、enabled、未删除批量检查全部节点选择,任一无效整体拒绝;后续停用人员不妨碍成功命令重投返回原结果。名单本身不授予角色、操作权限或资源正文读取权。

首次发起在当前身份/权限和原资源锁内检查名单,再同事务创建实例、快照、任务、授权及收据;任一失败全部回滚。快照JSON和摘要只写一次,后续Signal/任务命令不接收替换名单。恢复验证摘要、规范JSON、节点及上限,给各次回调深拷贝map及切片;不因历史人员停用而禁止取消。升级前没有快照记录的旧实例按空快照恢复;自选定义缺失记录必须拒绝,迁移不猜测旧人员。

新端口NewSelectionApprovalPort只供新的engineVersion/指纹与compiler v2装配,显式声明八类实际候选。原v1五类、v2组织七类端口保持原语义。候选解析按内核可信NodeID读取该节点的原名单;节点激活、循环重入都重新检查当前用户有效性,并为每次activation建立独立候选快照。原来源资格及临时授权复核不能把另一个节点选择的人扩展到本节点。当前仍未开放完整工作流HTTP/界面,自选只是正式内核/审批组合根的已实现增量,注册资源策略与W07–W12继续保留。

最终MySQL/PostgreSQL各38项工作流应用、6项v30–v35非空升级迁移race通过;25个workspace race/vet、25个全新缓存独立模块和改动核心/审批/应用nilness通过。达梦迁移构建通过。新增实际用例覆盖顺序/节点隔离/换序冲突、无效未来节点选择、停用后原收据重投与取消、事务故障回滚、空/损坏/缺失快照、循环重入和旧实例兼容。双库专用数据库/Redis及匿名卷已清理。首轮JSON键校验缺陷及最终证据见自选快照证据。注册资源候选策略与W07–W12继续实施。

# 资源合同与正式发布门禁(compiler v3,schema仍为v36)

本批先补齐正式资源接入必须遵守的版本和事务门禁,不把事务证明夹具当作真实文件、表单或业务单据适配器。CompilerVersionV3要求规范声明1–16种资源绑定,当前运行时以ResourceContracts明确登记资源类型/合同版本;定义中的类型不能重复,合同必须在登记清单内。form-instance还须固定合法formKey与正数formVersion,其他类型不接受表单字段。资源绑定整体进入规范摘要,表单版本变化必须发布新定义;绑定集合规范排序,输入或回调修改副本不能改变原产物。

v1/v2规范与运行时清单省略新字段,继续拒绝即使为空的resources输入;其旧摘要/严格JSON规则保持。v3清单包含资源合同集合,即使引擎号与指纹相同也不能把合同v1热替换为v2。构造v3定义服务必须显式提供DefinitionBindingPort并覆盖档案中的合同;构造执行内核也必须有对应的ResourceContractProvider,不能仅凭客户端的ContractVersion或空默认端口开放能力。

发布在已有运行时→当前租户身份事务中调用真实绑定校验器,然后写版本、准入和审计。重新启用先锁运行时/定义准入、重验身份,再从原规范恢复绑定并重新校验;资源合同失效时不能重新开放定义。关闭不依赖资源可用性,已提交发布/启停命令重投也优先返回原收据,不因后来的资源停用失败。Start在固定规范白名单内匹配精确类型/合同后才进入资源端口;领域自身的归属、ACL、固定内容版本和活动占位仍由真实适配器复核。

fago-workflow-resource.Registry取代把旧PoC接口当作正式入口的做法:受信组合根按类型/合同注册TransactionalAdapter,无默认适配器或最新版本回退;拒绝空清单、重复/非法标识和typed-nil。注册表实现绑定校验及内核Before/Bind/Finish,保持调用方同一个tx,检查事务连接、当前租户和完整Actor,终态只接受approved/rejected/cancelled。各资源校验回调收到独立变量/策略切片;Before锁资源,Bind在创建实例后建立占位,Finish按原版本回写与释放占位,任何错误使外层命令整体回滚。注册表没有实现资源正文读取、文件临时授权或具体业务状态,不自动产生菜单、套餐或运行时登记。

本轮真实双库用合成的wf_binding_test_contracts及原资源证明表验证注册分派/事务边界,明确不是实际表单模型:合同停用阻止发布与重新启用;重复发布不再次校验;未知合同发起拒绝;回写故障撤销最后投票;发布审计失败连同端口数据库写入整体回滚。首轮复核发现重新启用校验块位置错误,已移到正确路径并由这些断言复验。另以单元测试固定v1/v2兼容、v3摘要/表单版本/严格字段、构造缺依赖及清单合同替换拒绝。

最终MySQL/PostgreSQL各40项工作流应用及6项非空升级迁移race通过,25个workspace race/vet、25个全新缓存独立模块与改动核心/资源/应用nilness通过;达梦迁移构建通过,专用数据库/Redis及匿名卷已清理。资源绑定证据记录具体范围及首轮修复。W06注册资源候选策略、W07真实表单/文件/单据与逐次ACL/临时grant、W08–W12继续保留;下一批应实现实际资源数据模型和消费者,不重复建设本批注册/绑定结构,也不能用上述专用测试表替代业务资源。

# 内置表单真实持久化与同库资源(schema v37)

2026-10-30新增fago-bpm模块,接入既有Gin/GORM多模块结构及显式系统授权桥接。首版合同为fago-scalar-form-v1/scalar-form-v1,支持1–64个text/integer/boolean字段,与正式内核变量共用类型/必填规则;字段顺序保留,不把复杂控件、附件或JSON对象伪装成标量支持。可视化表单/流程设计器及更丰富控件继续归R3.2,当前未增加HTTP/页面入口。

v37新增真实领域表:表单及不可变发布版、本人草稿、不可变提交、独立用途审批结果/活动占位、激活级临时授权、私有命令收据及元数据事件。全部引用带租户复合外键。发布最多1000版/表单,租户最多1000个表单,本人最多1000份草稿;私有正文上限256KiB。表单发布版没有覆盖/删除入口,草稿固定formKey/formVersion;换表单版本须新建草稿。schema/草稿操作使用当前权限与租户写锁,CAS、主体绑定命令及事件共同提交或回滚。

草稿内容修订与提交版本/审批状态分开:保存草稿递增内容version,曾提交的修订只INSERT一次,不因后续编辑覆盖。可继续编辑新草稿修订,旧实例仍读取原提交;同一资源版本/用途只允许一个活动实例,不同显式用途各自保留结果与占位。每个提交最多100条用途审批历史,超限整体拒绝而非截断。原提交字段与审批结果字段分表保留,合法节点Outputs修改只进入结果/原审批历史,不改写最初提交正文。

真实Adapter接入正式Registry的类型/合同分派。发布绑定检查当前表单读取权限、精确发布版及变量来源:所有流程变量都须来自该表单且类型一致,必填变量不能绑定到可缺失字段。Start复核当前submit权限/本人归属;客户端Values必须等于固定资源字段的受控投影,不能伪造金额或部门。Before锁草稿根行,Bind在同事务创建实例后冻结提交、用途结果/占位与事件;Finish对原用途结果CAS并释放精确占位。任何资源事件失败使实例/最后投票/占位/授权一并回滚,原草稿或新修订保持自身版本。

当前Draft和Submission读取严格限定本人,表单读取权限或流程管理权限不产生他人正文访问权;错误不返回部分私有字段。审批端口用真实Adapter同步激活/用户临时授权记录,终态/转办/取消按原范围撤销,记录最长24小时。该记录尚无正文读取放行消费者:后续仍须接入当前任务/原候选来源与资源ACL双重复核、失效与续期语义,不能把记录存在视为已完成授权读取。字段值只存受控业务/私有收据表,元数据事件只记录主体、标识、版本、动作、状态,不含schema正文、字段值或其摘要。

本批实库用真实表单服务发布/填报和正式适配器,无合成资源表替代。覆盖固定版本、多用途重复保护、修改草稿不改旧提交、原字段/结果分离、客户端金额伪造拒绝、提交/终态事件故障回滚、授权回收、本人/跨租户拒绝、草稿CAS竞争与当前会话撤销。最终MySQL/PostgreSQL各43项工作流应用、7项v30–v36非空升级迁移race通过;26个workspace race/vet、26个全新缓存独立模块与改动BPM/应用nilness通过,达梦迁移构建通过。专用数据库/Redis及匿名卷已清理,详见表单资源证据。W06资源候选策略、W07任务正文ACL消费者及其他资源、W08–W12继续保留,R3.1未完成。

# 任务正文授权与字段投影(compiler v4,schema仍为v37)

2026-10-30补齐真实标量表单的当前任务读取消费者。新fago-compiler-v4档案冻结审批节点的readFields,只允许已声明变量、无重复且最多64项;Outputs必须是可读字段子集。空可读集合返回空字段集合,不回退全部字段。旧v1/v2/v3继续拒绝新增JSON键,即使显式空数组也拒绝;旧产物字节、指纹及恢复语义保留。新档案必须同时装配真实审批读取端口及覆盖所有注册资源合同的具体消费者,不能用注册表有方法或默认通过端口冒充支持。

ReadTaskResource从当前租户的精确instance/activation/task/taskVersion恢复不可变节点、资源及表单版本。先无锁定位自己的活动任务,再按既有运行时→租户/账号/会话→资源→实例→审批组/任务锁序复核当前资格。未领取single只允许原候选且原来源仍有效;已指派只允许当前持有人,委派代理按明确指派复核,原委派人恢复原DelegationOrigin再检查资格。排队、已办、分配异常、转办后的原人、无关主体及跨租户均拒绝;流程管理权限不替代正文资格。当前只实现活动任务正文,已办/历史详情的独立读取范围仍归W11,不把元数据列表当正文授权。

授权通过才在同一事务批量收缩/续期本激活的临时grant,并签发只存在于本次资源回调的私有凭证。凭证绑定精确tx及完整主体/任务/节点/字段/原资源调用,不能通过公开结构或JSON构造,换事务、改范围或回调结束均失效。grant行本身不授予正文访问。资源Before已持原资源锁验证原提交、独立用途review及活动slot,BPM消费者不在任务锁后反向申请资源锁,也不重复执行已由内核持锁完成的整套RBAC查询。

BPM只在模块内投影允许字段,返回固定表单引用、允许字段声明、可写子集、原提交值及当前流程值;不返回隐藏字段、完整schema或其他用途审批结果。修改草稿、循环重新激活或本节点合法修改值,都不覆盖原提交。任何资格/资源/编码/审计/提交错误均返回零正文,资源与内核两处读取审计及grant续期一起回滚;事件仅含元数据。读取不写正文收据、不推进实例/任务版本,同一requestId再读也必须重新授权及审计。内核限制返回JSON最多1MiB,以容纳两份有界字段投影;无正文缓存。

新增真实双库专项覆盖字段隐藏/固定旧提交、到期续期、会话撤销、审计双故障回滚、任务版本、转办/委派/归还、原角色来源撤销、single候选/serial排队/已办/分配异常、跨租户、循环activation隔离、原值/当前值分离、v3拒绝读取及适配器公开字段不能伪造授权。1人与20人真实会签的完整读取均为43次查询,各表查询分布一致,没有逐任务N+1;这只是查询增长回归,不代表p95/吞吐容量认证。完整工作流及迁移的最终结果、模块检查与环境限制见正文读取证据。

本增量保持schema v37,没有开放HTTP/页面,也没有为审批人补全局bpm:form:read权限。W06注册资源候选策略、W07文件/单据及其他资源、W08可靠命令/outbox、W09定时器/worker、W10执行池/退役与回滚保护、W11完整API/页面/历史读取和W12跨进程恢复/容量验收继续实施;R3.1未完成,R3.2设计器与复杂控件/附件仍按原路线图推进。

本批最终MySQL/PostgreSQL各51项工作流应用及7项非空升级迁移race通过;26个workspace race/vet、26个全新缓存独立模块与改动核心/审批/资源/BPM/应用nilness通过,达梦迁移构建通过。专用数据库/Redis容器均已清理。文档同步、60页检查、构建及正文新章节锚点/路线图范围/四分册浏览器检查通过;不替代完整历史业务、真实对象存储、跨进程/滚动部署或p95容量验收。下一步继续W06实际资源候选策略和W07其他资源,W08–W12全部保留。

# 资源候选策略与固定字段(compiler v5,schema仍为v37)

2026-10-30补齐W06资源候选首批。新fago-compiler-v5允许资源选择器的field参数,引用已声明变量并随规范摘要冻结;旧v1–v4仍拒绝该JSON键,即使空字符串也拒绝。v5保留v4的节点读取白名单、资源/表单版本绑定与旧版恢复规则,不改写已发布实例。运行时清单继续绑定候选种类与资源合同;新发布/执行构造要求每种资源均提供声明的具体策略,审批端口也须显式装配注册表,缺实现/错合同不能用默认候选兜底。

真实内置表单现实现resource.form-user与resource.submitter:前者按发布时固定的整数用户ID字段读取不可变Submission,后者读取原提交人。发布/重新启用的同事务校验核对真实formVersion与字段类型,不能只看去重策略名。策略不读取最新草稿或当前流程变量,不把客户端IDs当计算结果;缺少可选字段、其他租户或停用用户形成空候选并保留assignment_error,首次发起还按全图固定资源声明检查所有将使用的字段值,明确非法非正ID使发起事务整体回滚;不能等后续节点才报错而回滚前一票。此预检只验证值形状,不提前分配未来候选,用户当前有效性仍在实际节点激活/处理时复核。自审批仍默认排除,只有不可变节点显式允许才能使用原提交人。

例如新档案可声明如下选择器;完整定义仍须注册实际合同、固定表单版本并声明reviewer整数变量。当前尚无在线工作流HTTP入口,本例说明规范模型,不能当作已开放接口教程:

{"kind":"resource.form-user","ids":[],"field":"reviewer"}

资源来源保存UserID + Kind + SourceID,其中SourceID为当前节点完整候选数组的1-based位置,联合固定定义/实例/activation定位原策略及字段。前置组织候选被自审批规则排除后仍保留原序号,不能按过滤后的资源子数组重新编号。newExecutionWait给Node和Call分别复制字段/IDs/顺序;Current和CurrentAccess重新解析固定提交,只保留原人/原种类/原位置配对,再批量复核同租户当前有效用户。后来草稿改人或节点Outputs修改同名当前变量,都不能换掉旧实例的资源审批人。明确转办/管理补分配继续使用manual来源并留历史,不冒充原资源来源。

所有解析复用原tx和Before已取得的资源锁,不在组/任务锁之后反向申请资源锁。一个节点全部资源来源只解析一次,再按原配对收缩;用户查询按200个ID分块,保持上限与租户条件,不逐任务/逐来源查库。正文/候选字段原值不进入普通事件、日志或候选端口返回值,资源端口只返回用户和来源定位。

双库新增专项已覆盖固定提交/原序号/循环、伪造客户端字段拒绝、停用后另一人合法部分投票、授权收缩、显式管理补分配、跨租户/缺字段/非法ID、默认自审批及明确允许、真实schema发布拒绝、候选写入故障全事务回滚。1个和16个资源来源的完整正文读取均47次查询,各表分布一致;普通候选仍保持前批43次。资源来源的两处当前资格核验增加固定的提交/schema读取,不宣称总体查询数降低,也不替代p95/吞吐或执行计划认证。最终完整专项和模块检查见资源候选证据。

本批不增迁移,schema保持v37;这十类候选及真实标量表单适配不是任意脚本、外部业务API或所有资源的认证。W06最终组合验收、W07文件/单据等其他资源、W08可靠命令/outbox、W09worker/timer、W10执行池/退役与回滚、W11完整HTTP/页面/历史范围和W12跨进程/容量验收继续实施。R3.1未完成,R3.2设计器/丰富控件/附件不由本批替代。

本批最终MySQL/PostgreSQL各58项工作流应用及7项非空升级迁移race通过;26个workspace race/vet、26个全新缓存独立模块与改动核心/审批/资源/BPM/应用nilness通过,达梦迁移构建通过。专用数据库/Redis及匿名卷由脚本确认清理。文档同步/60页检查/构建与新策略章节锚点、路线图范围及四分册浏览器核对见本批证据;不将本增量表述为R3.1完整验收或上线。

# 审批组合与实例任务分页(schema仍为v37)

2026-10-30补齐W06真实组合验证。一个固定表单节点同时使用十类候选,十一条来源边去重后为三人,分别运行single/all/any/serial;直接用户、资源和发起自选来源并存,撤销角色来源仍保留其他有效原来源。single只生成一个候选池,all按人数而非来源数计票,any先拒后同意可通过并取消余席,serial按首次出现顺序开放席位。明确允许自审批的节点才包含发起人/资源提交人;旧专项的默认排除规则保留。

真实表单进入两分支fork/join,经过委派、归还、转办后,只改变对应激活的任务和grant;同人仍可合法读取另一分支。单分支完成不提前通过join,其授权独立回收。join后循环重新建立激活、候选与任务,上一轮转办不改变原提交或新一轮名单;旧任务/旧activation的新命令和正文读取均被拒绝,第二轮完整裁决后清理全部资源占位与授权。此验证使用真实审批及BPM适配器,不再以执行证明端口代替人工任务组合。

组合检查发现并修复了管理列表的静默截断:旧Instance/InstanceTasks固定只取前100条,合法并行组或循环历史可能遮住后面的当前任务。新增InstancePage/InstanceTasksPage,保留固定租户/实例和当前workflow:task:manage守卫;旧签名仍返回不超过100条的完整集合,超过100条返回409003并且不给部分列表。新入口目前为受信Go组合服务,HTTP/页面继续归W11,管理元数据也不授予任务操作或资源正文权限。

分页请求示意如下;每次先经系统只读事务守卫,游标必须原样取自同租户、同实例的上一页。Limit=0默认50,范围1–100;Next空表示当前快照无下一页。无关实例返回空[],错范围/非法游标或非法页大小返回400002,不回退第一页。

page, err := tasks.InstancePage(ctx, fagoapproval.InstanceTaskQuery{
    InstanceID: instanceID,
    After:      previousPage.Next,
    Limit:      50,
})
// err非nil时丢弃所有返回字段;成功后使用page.Items,并把page.Next用于下一次请求。

游标绑定tenantId/instanceId以及不可变activationId/slot,严格检查规范JSON、Base64和正整数位置。查询沿已有uq_wftask_slot(tenant_id,instance_id,activation_id,slot)定位,只多取一条判断下一页,不执行全量count、不逐任务查来源或正文,不新增迁移。各页各自重新验证当前身份并读取独立事务快照;不承诺跨页同一快照,翻页期间任务状态/持有人可能合法变化。游标仅用于定位,没有签名,也不能代替权限;改游标仍受同一SQL范围和当前权限约束。

双库新增120张真实任务(两个60席分支)的验证:37条一页完整遍历四页,无重复/遗漏;第120张任务可明确管理补分配并读取正文/拒绝,拒绝同事务终止实例并取消其余119张任务,全部grant和活动slot回收。跨实例/租户游标及无管理权限读取拒绝,空列表保留[]。完整守卫加元数据读取在每页1条和100条时均11次Query/Row,各表分布相同;不把查询增长回归当作执行计划或p95/吞吐认证。

本增量保持既有运行时/编译语义和schema v37。当前端口的10000上限约束原始解析项,重复选择器解析出的重复项也计入,并非所有重复来源组合都可装满10000条持久边;保留原fail-closed行为,不因小集合组合通过扩大容量承诺。W12仍须完成容量、跨进程/滚动部署与恢复验收。W07其他资源、W08 accepted命令/outbox、W09 worker/timer、W10执行池/退役与回滚保护及W11完整HTTP/页面/历史读取范围全部保留。最终检查结果见审批组合证据。

本批完整MySQL/PostgreSQL各61项工作流应用及7项非空升级迁移race通过;26个workspace race/vet、26个全新缓存独立模块、最终审批模块race/vet与改动审批/应用nilness通过。宿主未安装golangci-lint,未宣称该工具通过;gofmt与现有静态检查已执行。专用数据库/Redis及匿名卷已由脚本确认清理。文档同步/60页检查/构建及新章节锚点、路线图范围、四分册浏览器核对通过。schema保持v37,无生产部署或工作流HTTP/页面开放,R3.1继续进行。

# 原子受理发起与命令检查点(schema v38)

2026-11-02进入W08首批。新运行时档案须显式声明AcceptedStarts,仅compiler v5允许,并把acceptedStarts:true写入不可变运行时清单;旧清单省略该键,旧五/七/八/十类运行时不会因升级自动开放受理语义。执行构造同时要求真实非空CommandOutbox,包括typed-nil拒绝。同步Start保留原合同,显式AcceptStart才使用两阶段路径;当前仍为受信Go组合服务,没有新增工作流HTTP/页面。

首次受理复用原运行时→定义准入→当前租户/身份→资源→实例锁序,同事务验证当前start权限、精确定义/资源/表单版本、受控变量及全部发起自选,保存不可变Submission、资源用途占位、实例/根scope/ready token、变量/选择快照与accepted命令,再追加元数据事件和真实infra_outbox。spawn后的NextID也须持久化;不在受理事务执行节点或创建半套审批席位。任一资源、命令、事件或outbox失败整体回滚,不能先在事务外检查准入再无条件入队。

受理命令已具有合法实例外键、固定engineVersion和最初runtime/definition admission epoch,因此关闭新准入后仍保留明确的排空引用。只保存摘要的旧done收据继续保留原字节;恢复需要的私有输入已经成为规范化检查点、变量和不可变选择/资源快照,不从最新草稿、外部消息或客户端重新拼载荷。相同主体/命令/规范载荷重投返回该命令已提交检查点;换载荷或换主体冲突,不重复创建实例或outbox。同步Start遇到尚在accepted的同号命令仍返回409003,调用者须显式恢复。

以下是受信Go调用示意,不是已开放HTTP教程。State表示命令状态,Result.State表示实例状态,两者分别解释:Start命令到达稳定人工等待时可以done,但实例仍running。

command, err := kernel.AcceptStart(ctx, input)
// err非nil时丢弃全部返回值;成功后保存command.CommandID,不用当前草稿替换原输入。
command, err = kernel.ResumeCommand(ctx, fagoworkflow.ExecutionCommandRef{
    CommandID: command.CommandID,
})
// accepted:尚无人工等待且仍有ready工作;done:命令结果已冻结,实例仍可能running/NeedsRun。

ResumeCommand当前只允许原主体携带当前有效在线身份及start权限;不保存、复制或伪造旧SessionID。恢复先锁精确运行时,再重验当前身份,复用资源→实例锁,从固定图/原私有检查点推进。每事务最多128个自动节点;尚无人工等待且仍有ready工作时保存新的accepted检查点及下一条outbox唤醒,否则冻结done原结果。并行支路已出现人工任务时,发起命令先完成以开放该任务;另一自动支路仍可能令Result.NeedsRun为true,实例后续调度继续归W09或当前受控Advance。不能让自动循环把可操作人工任务永久挡在受理隔离后。资源/审批/检查点/审计/outbox失败只回滚本批推进,保留上一个可恢复检查点。Command读取/恢复错误均返回零元数据;其他主体/租户不可读取,过期或撤销会话不能恢复。损坏/非规范accepted结果不以零值继续。

尚未完成的accepted发起隔离其他变更:Advance、任务操作等不能越过它抢跑。管理员可在当前管理权限、资源ACL和实例版本下明确取消;同事务取消token/任务、释放资源占位/grant,并将原accepted命令冻结为取消结果,保留原主体、摘要和准入epoch。取消与恢复真正竞争:恢复先提交则旧版本取消冲突,取消先提交则迟到恢复只返回已冻结取消结果,不复活实例。done读取及Resume重投在恢复处理器/资源前返回原收据,即使原处理器不在当前构建也不改用新语义。

outbox使用既有fago-messaging.Append,只放commandId/instanceId/engineVersion/instanceVersion。消息aggregate采用内核派生实例ID,避免合法带点命令号被较窄的消息标识合同拒绝;命令号仍留在受限元数据载荷和追踪字段。回调不做网络发送;投递sent不等于命令done。通用消息消费者先持租户锁,不能直接调用需要先取runtime锁的内核写入口,否则会反向锁或等待自身事务;后续消费者只能投递恢复唤醒,再由工作流独立预锁/后台身份/租约执行路径处理。未装配消费者的事件保留pending,本批不宣称自动worker已运行。

v38仅追加ix_wfc_instance_state(tenant_id,instance_id,state,command_id),使新档案的accepted检查点隔离按租户/实例/状态定位,不扫描全部历史收据。旧档案不执行额外accepted查询,既有正文/元数据固定查询回归保留。迁移不改旧脚本、正文、收据或运行时清单,不为历史命令补造受理/唤醒。MySQL/达梦DDL失败仍须检查真实索引及dirty后人工恢复,不能把脚本存在当作实库认证。

本批保留的范围必须继续实现:其他命令种类的可靠受理协议、外部动作job/固定输入/业务幂等/有限重试与人工补偿,W09后台Work身份、持久timer/lease/fence与真正自动恢复,W10池租约/排空/退役/回滚,W11完整HTTP/页面/本人历史范围以及W12跨进程/滚动部署/容量。现有Start/AcceptStart重投仍在预锁中先恢复定义,移除旧handler后的这两个入口尚须W10解耦;不能以新增Command/Resume的done读取替代该剩余要求。W07其他资源亦未结项。最终验证范围见受理发起证据。

本批真实双库完整基线各64项工作流应用及8项非空升级迁移race通过;最终源码另补各5项受理专项及8项迁移,覆盖点号命令、原主体/当前会话、缺handler的done/accepted分流、损坏检查点、取消竞争及并行人工等待。该5项为单独补验,不宣称执行过最终66项全量应用。旧档案普通正文1/20人仍43次、资源正文1/16来源仍47次、任务元数据1/100条仍11次Query/Row。26个workspace race/vet、26个全新缓存独立模块、最终核心race/vet、改动核心/应用nilness及达梦迁移构建结果见本批证据;达梦未执行实库。专用数据库/Redis及匿名卷由脚本确认清理,文档同步/检查/构建与浏览器核对不等同生产部署。W08后续与R3.1整体继续进行。

# 历史发起命令与处理器解耦(schema仍为v38)

2026-11-02修复W10升级前置边界。前批Command/ResumeCommand能在处理器缺失时返回done结果,但Start/AcceptStart仍在原收据核验前恢复旧定义;移除旧处理器后,合法重投可能被拒绝。本批把输入形状规范化与原收据核验放在实际执行恢复之前,不把重投当作一次新发起。

进入事务前仅验证并深复制有界标量和选择输入,以同一规范规则计算原载荷摘要。空Values仍规范化为{};顶层空选择仍省略,节点空名单为[],有序用户ID不排序、不去重、不截断。非法UTF-8、错误类型、多类型、非规范ID、重复用户或超限在摘要前拒绝,避免JSON自动替换造成与合法载荷相同的摘要。此处只是形状校验,不声明变量/选择节点已获准。

同一写事务仍按确切定义定位→运行时/定义准入锁→当前租户/账号/会话复核进入原主体与载荷摘要匹配。命中done后返回原完整安全投影,不恢复模型/handler、不读取资源、不执行动作或写新的事件/outbox;即使当前构建只携带另一个compiler v1运行时,也不回退执行旧实例。命中accepted时,显式AcceptStart只返回原已提交检查点;同步Start保持409003待完成语义,缺失精确handler的Resume仍拒绝执行。

未命中收据的新命令仍检查当前runtime/definition准入及精确清单,恢复并验证不可变图,按固定定义校验全部变量/必填/类型、自选节点和资源绑定,随后进入原资源ACL/版本/占位同库事务。不能把输入形状合法、已有同名实例、旧资源快照或另一个运行时的端口当作新准入。原主体或载荷不同仍409001并返回零结果;撤销会话仍拒绝重投,旧收据不成为永久凭证。

例如,当前构建已移除旧handler时,同主体且载荷一致的Start重投仍得到首次命令完成时的结果;即使实例后来已通过,原结果里的running/等待/版本也不能被当前状态替换。显式受理发起的使用方式不变:

command, err := kernel.AcceptStart(ctx, originalInput)
// done:返回原冻结结果;accepted:返回上次已提交检查点,均不隐式恢复执行。
// 缺原handler时ResumeCommand仍拒绝;只能由保留精确处理器的执行池继续推进原实例。

新增真实双库场景覆盖compiler v1旧空变量摘要、v5同步发起和v5显式受理发起:实例先完成并释放资源,专用fixture将保留的目录行模拟retired、定义准入关闭,再构建仅携带另一v1运行时的内核,Start与AcceptStart仍返回完全一致的原结果字节,改载荷冲突、新命令拒绝且不创建第二实例。另验证缺handler的accepted只可读取而不能推进、精确handler恢复后可继续,以及新命令未知变量/节点/类型/缺必填和当前会话撤销的拒绝。

fixture直接修改retired仅用于隔离“历史收据读取不依赖当前处理器”这一边界,不是正式退役操作;没有解除活动实例/定义/accepted/job/timer/池租约保护,更不代表可以安全卸载仍有引用的处理器。W09后台身份/租约/fencing、W08可靠动作、W10全引用排空/原子退役/回滚与W11/W12继续实施;schema保持v38,不新增迁移、HTTP或页面。前批记载的Start/AcceptStart先restore限制在本批解除,历史证据文件保持原样,最终结果见发起重投证据。

本批最终MySQL/PostgreSQL各69项工作流应用及8项非空升级迁移race通过;26个workspace race/vet、26个全新缓存独立模块、最终核心race/vet及改动核心/应用nilness通过。旧正文1/20人保持43次、资源来源1/16保持47次、任务元数据1/100条保持11次Query/Row。未修改迁移,也未重新执行达梦实库或完整历史业务;专用数据库/Redis及匿名卷已由脚本确认清理。文档同步/60页检查/构建与生成HTML的章节锚点、路线图范围及四分册导航核对通过;本会话本地浏览器设置禁用,未进行可视浏览器验收。代码和证据不代表完整W10退役、自动worker或R3.1整体已完成。

# 后台命令恢复与持久租约(schema v39)

本增量进入W09的命令worker部分。新运行时必须同时显式登记AcceptedStarts和BackgroundCommands,后者进入不可变manifest;旧档案省略该键,历史accepted命令不补造job。具体资源、审批候选/授权和同库动作端口必须逐一声明fago-command-worker-v1,注册表的方法存在本身不代表适配器支持。内置表单通过NewWorkerAdapter显式装配;默认NewAdapter保留在线合同。

v39增加wf_command_jobs和wf_command_attempts,复合外键固定租户、命令、实例和engineVersion。首次受理在原事务中同时保存资源提交/占位、实例检查点、accepted、job和真实outbox;job写入失败全部回滚。SQL队列是权威,消息只作唤醒提示,不能用通用消息消费者已持有的租户锁反向调用runtime预锁的执行内核。

Claim只查询当前构建显式支持的版本,每次最多从SQL读取100条候选、领取1–100条。逐条短事务按runtime→当前租户→job CAS领取,不占资源锁。过期lease可重领,每次推进fence/version,owner为进程内随机值,不进入日志、公开状态或消息;CommandLease没有可从HTTP/JSON构造的公开字段。不可用runtime或租户停用/到期/撤能力只延后队列due/version,不创建Work权限、不消耗attempt;已领取部分不会因后续行错误而被抛弃。这里的100是SQL返回上限,不是扫描行数或执行计划保证。

Execute另开READ COMMITTED业务事务,仍按runtime→租户→资源→实例→job顺序执行。实际租户能力守卫检查workflow.execution,内置表单另检查workflow.forms。原在线会话撤销后可继续受理命令,但后台Actor.UserID/SessionID为0,发起人和原命令主体保持原用户。内核在核验持久lease后签发私有凭证,绑定当前事务、Work身份、完整ExecutionCall摘要、实例/engine/命令、到期时间和fence;下一回调、回调返回、事务退出均撤销旧凭证。裸WorkIdentity、篡改、跨事务或JSON重建不授权;人工投票、任务变更、首次提交和正文读取继续走各自独立门禁。

每次恢复最多128个自动节点。没有人工等待且仍有ready时,命令保持accepted,job回到pending,并同事务追加真实AppendWork提示;出现人工等待或终态则命令done,保留冻结结果。后续人工可读取、审批并终结真实表单实例。最终job CAS和attempt更新后都复核真实时钟;任何回调或SQL等待越过lease,都回滚全部本次业务。在线原主体恢复或管理取消同事务推进fence、清lease,并把未结束attempt记为expired,迟到worker不能复活命令、任务或资源占位。

失败最多自动尝试5次,失败历史只保存稳定业务码及开始/结束元数据,不保存输入、lease token或内部错误链。耗尽后job为dead,原accepted及资源占位仍保留;原主体以当前在线权限明确ResumeCommand或管理取消,不能自动跳过失败节点。成功续跑/人工恢复可重置当前预算,但不删除旧尝试记录。取消上下文不会换成Background偷偷续跑,未写回的lease由持久到期恢复。

显式装配的调用方式如下;kernel必须由同一数据库和精确后台运行时清单构造,调用方负责Run生命周期和退出错误。当前正式worker二进制尚未增加工作流清单配置,不把此示例表述为部署后默认自动启动。

worker, err := fagoworkflowapp.NewCommandWorker(
    db,
    kernel,
    fagoworkflow.CommandWorkerOptions{}, // lease默认30秒、重试默认1秒;两者范围100ms–60s。
)
if err != nil {
    return err
}
return worker.Run(ctx, 100*time.Millisecond) // 当前goroutine运行;取消ctx即退出,调用方等待返回。

真实双库专项覆盖撤会话后的Run→真实待办/正文/投票、竞争领取/重建worker/过期重领、旧fence拒绝、预算续跑与AppendWork、租户停用/恢复及跨租户队首隔离、不支持版本过滤、任务/job/attempt故障回滚、job或最后历史SQL等待过期、自动拒绝终态的兄弟任务/授权回收、五次失败后原主体恢复,以及在线恢复后的旧attempt失效。核心单元另覆盖typed-nil、零值内核、后台清单与全部端口合同、私有凭证篡改/序列化/失效。

W09未完成:持久timer、审批与超时竞争、正式进程工作流配置/运行时池及跨进程恢复验收仍待实现。W08可靠外部动作/人工补偿、W07其他资源、W10全引用排空/原子退役/回滚、W11 API与真实页面、W12恢复/容量仍保留。当前索引尚无大积压多版本领取的EXPLAIN/p95证据,特别是全局due排序与多engine/state过滤的扫描/排序成本须实测,不能把LIMIT或旧N+1回归当作容量认证。当前业务事务沿用runtime排他锁保护,存在同engine跨租户串行与锁等待成本;W10执行池/退役协议和W12容量需一并验证,不能仅增加worker数量宣称扩容。达梦v39仅构建,未执行实库认证;未部署生产。

本批完整工作流基线MySQL/PostgreSQL各78项应用及9项非空升级迁移race通过,最终worker各9项另验通过;最后取消凭证/attempt行数防护由最终专项覆盖,不把此前编译的基线当作同一时点源代码。26个workspace race/vet、26个全新缓存独立模块、最终核心race/vet及五个改动模块nilness通过,达梦仅迁移构建。旧普通正文1/20人均43次、资源来源1/16均47次、管理任务分页1/100条均11次Query/Row。初次失败、夹具修复、验证范围及未认证边界见后台命令恢复证据。专用数据库/Redis及匿名卷已清理;文档只进行同步/60页检查/构建与生成HTML核对,本会话本地浏览器设置禁用,未进行可视浏览器验收。

# 激活级持久定时器与超时续跑(schema v40)

本增量继续W09,在新的精确engineVersion档案声明PersistentTimers,要求已有BackgroundCommands/AcceptedStarts并冻结清单。资源、审批候选/授权及同库动作还须逐一声明独立的fago-timer-worker-v1,不能把命令恢复合同直接当作定时器认证。内置标量表单显式使用NewTimerAdapter;旧NewAdapter/NewWorkerAdapter不自动获得新合同。旧清单/定义字节保持,迁移不为历史等待猜测或补造期限。

v40新增wf_timers/wf_timer_attempts,同租户复合外键绑定实例/engine、节点激活和token,唯一约束保证一个activation最多一个timer。审批Open成功后同事务保存期限和元数据事件,失败使真实任务、提交、授权和发起收据一起回滚。原始DueAt=activation.CreatedAt+TimeoutSeconds只在创建时确定,领取/退避/恢复只改ReadyAt;部分投票、领取、转办或委派不撤销、不重置截止。循环重入相同NodeID会新建activation和timer,旧任务/期限不能作用于新一轮。

TimerWorker从SQL按当前构建的定时器版本过滤,领取沿用runtime→tenant→timer短事务CAS;当前租户/能力不可用只推迟ReadyAt,不改变DueAt、不烧恢复预算,也不阻断其他租户。执行另按runtime→tenant→resource→instance→timer恢复,绑定独立Work身份/私有短时凭证,后台Actor为0。原在线会话撤销不阻止合法恢复;人工入口仍检查当前权限。审批与超时由同一实例锁和当前激活状态裁决,先提交者获胜,不回溯推翻已经提交的合法决定。人工失败可能先由已关闭资源返回既有409003,失效timer租约返回409001;均不提交第二份结果。

只有waiting阶段可触发原超时边:核验固定定义、原节点/激活/token及原始DueAt,完成该激活,精确Close该激活任务/授权,再把原token移向OnTimeout。不会调用Decide、写人工票或伪造用户命令。并行兄弟可以已推进实例版本,所以不把创建时版本作为永久CAS;本事务锁定后的当前版本才是持久化基准。只在整个实例终态时撤销全部其他timer及未结束attempt,当前合法触发者保留给最后一次fenced CAS结算。

超时后的自动执行仍有128步预算。若还有ready,timer转为phase=continuing/state=pending并保留FiredAt,下批只推进剩余工作,不再次触发原超时边,也不改写已冻结的原发起收据。续跑引用独立于在线accepted命令,不阻止并行人工操作。没有ready后才完成timer;每次最终timer与attempt写入后都复查真实lease截止,任何资源/任务/最后SQL失败或过期都回滚本次业务。回调返回即撤销私有凭证,后续SQL仍在事务内也不能复用旧回调权限。

自动失败最多5次,耗尽保留dead及原等待;不删除历史或跳过失败节点。RetryTimer是当前管理身份/资源ACL下的显式命令,ExpectedVersion是timer版本;只把原dead引用重新排队,原DueAt、节点、激活和失败历史保持,旧fence永远失效。同命令重投返回原冻结结果,改载荷拒绝。它不延长期限,也不在管理请求里偷偷执行超时。

worker, err := fagoworkflowapp.NewTimerWorker(
    db,
    kernel, // 精确PersistentTimers档案与全部真实定时器端口。
    fagoworkflow.CommandWorkerOptions{}, // 共用lease默认30秒、退避默认1秒;范围100ms–60s。
)
if err != nil {
    return err
}
return worker.Run(ctx, 100*time.Millisecond) // 当前goroutine轮询,装配者取消并等待退出。

明确恢复失败引用使用下面的内核合同;ctx必须是当前在线管理身份,不能传Work身份或自己构造Actor。调用方从受控管理元数据获取原timer版本,不能用实例创建时的版本代替。

view, err := kernel.RetryTimer(ctx, fagoworkflow.ExecutionTimerRetry{
    InstanceID: instanceID,
    ActivationID: activationID,
    ExpectedVersion: timerVersion,
    CommandID: commandID,
})
// 成功仅表示原引用重新排队;实际触发仍由TimerWorker检查原期限、当前能力、状态和租约。

真实场景覆盖固定一秒截止、人工先/超时先及并发、部分会签票保留、兄弟正文授权与join、旧租约重领/重复触发、140个自动节点跨批恢复且原收据不变、循环新期限与取消、五次故障与当前管理恢复、资源/最后timer/attempt SQL失败或过期回滚、job/attempt创建故障、撤会话后的真实Run取消join、回调返回即失效、支持版本过滤及停用租户队首隔离。终态还覆盖两个兄弟timer都已认领时撤销另一租约和历史。旧档案不增加timer SQL,原正文/任务列表的查询次数回归继续保留。

W09仍未结项:非timer入口产生ready的完整自动调度、正式worker进程工作流清单配置、跨进程重启/滚动恢复与容量仍待继续,不把显式Run库等同于部署后默认运行。W08可靠外部动作与其他命令、W07其他资源、W10执行池/全引用排空/原子退役/回滚、W11真实API/页面、W12完整语义组合及恢复/容量保留。大积压队列执行计划、同engine排他锁竞争、真实DM v40及生产部署均未认证。

本批最终MySQL/PostgreSQL各92项工作流应用及10项非空升级迁移race通过,完整套件含14项timer场景;此前13项定时器专项/10项迁移另验通过。26个workspace race/vet、26个全新缓存独立模块、最终核心race/vet与五个改动模块nilness、达梦迁移构建及最终应用编译/vet通过。最后只调整测试断言命名/换行,不改业务行为;旧正文/来源/分页仍保持43/47/11次查询。失败修复、实际命令与未认证边界见定时器验收证据。专用数据库/Redis及匿名卷已清理,未部署生产或完成R3.1整体验收。

# 实例级自动续跑与租约截止(schema v41)

新的精确运行时档案可声明AutomaticDispatch,前提是已有PersistentTimers/BackgroundCommands/AcceptedStarts。 该标志冻结进manifest,全部真实资源、审批候选/授权和动作端口须声明独立fago-ready-worker-v1合同。 内置标量表单使用显式NewDispatchAdapter;旧构造器与旧清单不自动获得新能力,迁移不回填历史实例。

v41新增wf_ready_jobs/wf_ready_attempts。引用按租户/实例唯一,重复进入自动节点复用同一行并单调推进fence; 只保存实例检查点和安全调度元数据,不复制会话、正文、变量或原命令主体。在线发起、人工决策、管理推进及命令结算, 均在原事务中确定命令状态后结算ready归属:accepted优先保持blocked,存在ready时pending,等待人工时idle,终态done。 普通业务写入不能复活耗尽五次失败预算的dead;只有当前管理权限与资源ACL下的RetryReady能以队列版本明确恢复。 原命令收据保持冻结,不被后台推进覆盖。

ReadyWorker只领取本构建支持的精确版本,以独立Work身份执行,不冒用原在线Actor、不调用人工投票。 每次最多128步,未完成继续pending;人工等待只表示本轮调度已完成,Completed不表示审批通过。 在线推进或取消同事务关闭旧attempt并撤销lease,迟到worker不能重建任务、授权或资源占位。 新档案中的timer只处理其原激活超时,剩余ready交给实例队列;旧timer档案保留continuing行为。

三类worker的SQL及真实端口context均受持久lease的绝对截止约束,并保留父级取消;事务不能把租约延长。 到期整体回滚且不另开业务失败回写,历史由下一次持久重领记为expired。 资源层可能先把取消包装为503,Oops取最深业务码;租约边界据此重新分类为409001并保留标准DeadlineExceeded语义, 不把过期执行权当作资源故障消耗失败预算。三类RunOnce均改为即时Claim(1)→执行,慢回调不会耗尽尚未开始的后项租约。 公开批量Claim仍供显式并发装配者使用,调用方负责在租约期限内执行。

库级装配示例要求kernel已绑定实际ready合同及同一真实数据库;构造不启动goroutine,调用方负责取消并等待退出:

worker, err := fagoworkflowapp.NewReadyWorker(db, kernel, fagoworkflow.CommandWorkerOptions{})
if err != nil {
    return err
}
return worker.Run(ctx, 100*time.Millisecond)

v41还为三类attempt表追加tenant_id + job_id/timer_id + state + fence索引,精确fence操作仍可使用主键。 专用双库用两万条合成终态历史与一个真实leased记录验证ready路径:MySQL估算扫描行数9996→1, PostgreSQL实际buffer访问364→4,均采用ix_wfrattempt_active。基线只在专用库临时移除索引,失败也恢复后清理。 这不是两万次实际节点执行、全部历史更新性能或生产p95证明;多版本队列全局due排序与同engine排他锁仍须W12实测。

双库ready专项已覆盖真实Run、人工后的自动续跑、accepted屏障、timer交接、循环复用、在线推进撤销、过期重领、 慢回调批次、SQL截止、五次失败/明确重试、事务故障及租户/版本隔离;另补两个worker竞争领取后取消与长历史执行计划。 实际命令、失败修复、最终检查与环境边界见自动续跑验收证据。

最终MySQL/PostgreSQL各105项完整工作流应用与11项非空升级迁移race通过;完整运行含13项ready。 最后新增的竞争领取后取消用例由另一次2应用/11迁移专项覆盖(另一个用例是长历史索引),两库合计各106个不同应用场景, 不表述为106项整套重跑。26个workspace race/vet、26个全新缓存独立模块、五个改动模块nilness、 最终核心race/vet与最新应用编译/vet、达梦脚本构建及60页文档同步/检查/构建均通过。 正文/来源/分页旧查询数43/47/11保持;专用库/Redis及匿名卷清理,未做生产部署或真实DM v41认证。

以下保留v41当批的下一功能安排,当前进度以本页后续v42增量为准。先正式worker进程的工作流清单/生命周期及跨进程恢复,再完成W10池租约、全引用排空、 原子退役与回滚保护,随后接入W11定义发布、发起、本人待办/已办/发起、详情/历史和审批页面。 W08可靠外部动作/其他命令、W07其他资源与W12完整恢复/容量仍保留;R3.1和M6没有结项。

下一批 验收目标 需先守住的约束
正式worker装配 配置启用、精确清单核验、统一取消/join,进程停止后由新进程恢复命令/timer/ready 不隐式迁移/登记版本,不伪造在线会话,旧处理器须保留
部署与版本保护 执行池租约、全引用排空、原子退役、旧新构建共存及不兼容回滚拒绝 不能只看活动实例数;可发起旧定义、accepted、job、timer与池引用都纳入
审批产品入口 定义发布、流程发起、本人待办/已办/发起、正文、审批及历史 统一认证/Origin/权限与三种内容协议;每次读取复核当前资格和资源ACL

当前开发前置是收敛已确认的正确性失败、租约边界与针对性查询计划;大积压多版本扫描、锁等待和固定环境p95属于后续容量门槛。 基础N+1修复与nilness通过记录可复用为回归基线,不能据此保证未来所有新增路径没有空值或性能问题。

# 正式worker装配与真实进程恢复(schema保持v41)

新增代码固定的fago-form-approval-v1档案,绑定compiler-v5、scalar-form-v1、十类真实候选及三类后台合同,不声明服务动作。 BuiltinServices在同库显式构造表单、资源注册表、正文ACL/候选/授权、基础审批、定义、内核、任务和命令outbox; API/worker可复用同一工厂,不接收配置中的指纹、任意资源端口或URL。 工作流YAML和环境覆盖统一经framework/config加载,默认关闭,启用须显式选版本,范围/重复/零值/未知版本均拒绝。 操作和全部参数见配置与环境。

受信ProcessVerifier绑定实际内核,在独立最多3秒的RC事务先锁目录control,再按版本顺序读取最多33条enabled/draining。 超过构建上限32条拒绝;逐条核对实际bundle及完整manifest/摘要/指纹/compiler/schema,且所选版本须已经登记。 结果失败不返回部分清单。检查不进入tenant/resource锁,不执行在线目录gate,不写目录或审计,不伪造平台Actor。 真实worker在任何业务循环启动前先检查,Run独立调用时再核验;后台catalog的在线Register/Drain等方法统一403且不执行回调。 这个受信元数据检查不构成平台用户获得跨租户业务读取权限。

三个循环归WorkerProcess.Run所有,首个退出结果先送入有界通道再取消兄弟,全部join后返回; 父级取消保留标准错误身份,父ctx仍有效时的内部SQL截止属于故障,不能仅凭errors.Is(DeadlineExceeded)吞掉。 外层正式进程统一取消通知/任务/清理等循环,并在全部退出后释放共享依赖。 关闭配置不构造工作流、不核验随机工作流目录,也不领取现存引用,原有worker功能保持。

双库专项使用go build -race生成实际cmd/worker,连接runner专用库/Redis,私有配置/日志仅在临时目录。 父测试锁住真实表单草稿行,等待子进程持久claim已提交后再SIGKILL,确认原业务版本未推进; 启动不同OS进程,验证原fence的attempt记expired,并建立可读/可审批的真实任务或完成原timer拒绝结果。 三个入口分别覆盖accepted、timer、ready;另用阻塞中的SIGTERM确认真实SQL取消/正常退出及随后重领。 原租户与平台会话在启动前均撤销,新进程仍恢复,人工后续由有效候选操作。 清理先回收子进程,再释放资源锁并删除fixture,不把模拟goroutine重建当作进程恢复。

启动拒绝专项还覆盖清单篡改后的正式进程非零退出且job未领取、额外启用版本不能被配置忽略、draining仍可恢复, 空目录不自动登记,以及默认关闭时原有循环正常启停、ready仍未领取。 首批2项应用/11项迁移在两库通过,补齐上述场景后4项应用/11项迁移专项也在两库通过;完整回归和最终检查见正式worker证据。

最终MySQL/PostgreSQL各110项完整工作流应用与11项升级迁移race通过,含全部4项正式进程专项及14项ready。 26个workspace race/vet、26个全新缓存独立模块、最终核心/配置/生命周期race/vet、三个改动模块nilness、 达梦正式worker构建及60页文档同步/检查/构建通过。最后仅调整启动日志文字;完整套件中的子进程构建及最终静态检查覆盖最新入口。 正文/来源/分页查询数43/47/11保持,专用库/Redis/匿名卷及自建子进程确认清理。

本节记录schema v41时的边界:当时W10持续池与原子退役尚未实现,启动快照不能替代。后续schema v42增量见下节,完整滚动/容量仍待W12。 W08可靠外部动作/其他命令与唤醒引用消费者、W07其他资源、W11管理/审批API与页面、W12完整滚动/容量仍保留。 当前没有新增迁移、自动注册、套餐授权、HTTP入口或生产部署,不将该增量表述为R3.1/M6完成。

# 持续执行池与原子退役增量(schema v42)

本批增加持续池协议,保持旧内置fago-form-approval-v1的清单字节和无池库调用合同, 新fago-form-approval-v2固定新指纹及PoolProtected,要求实际内核、角色和精确清单共同授权。 旧档案可由统一配置pool_enabled显式加入持续协议准备滚动;v2无论该开关为何值都不能绕过。 后台正式进程拥有登记、心跳和三类业务循环,任一故障取消兄弟并全部join。 当前正式API进程尚未装配该池,只有真实服务/适配器上的api角色合同及实库证明,不能当作在线审批产品已交付。

Acquire/Close按control→排序runtime→pool锁定,成员和注册/关闭审计同事务。 池ID/owner使用随机一次性标识,成员清单不可热换;普通version只供心跳CAS,fence供业务授权。 心跳只锁pool行,不反向申请control/runtime,以免长业务阻塞续期;失败或提交结果不明立即丢弃本地执行权。 登记检查所有enabled/draining版本,配置不能选择性忽略仍在使用的旧版本,存活池限制128个,构建成员限制32个。 覆盖查询按版本/角色分组,不逐租户/实例查询;原引用快照只执行固定六项存在性查询,不扫描历史计数。

每次操作Bind捕获当时绝对截止和私有池快照,后续心跳只供下一次操作使用。 正式受保护入口检查真实内核/角色/清单及持久owner/fence,最后一条业务/审计SQL之后才短暂锁pool并再次检查真实时钟。 长回调期间心跳可继续;即使移除context取消也不能让旧操作延寿。超时整笔回滚,不另开事务补写成功或业务重试。 command/timer/ready的队列和attempt保存原池ID/fence,opaque领取结果不能跨池转交;必须过期后以更高业务fence重领。 所有离开leased的路径清空当前池来源,历史attempt保留原来源,不记录owner、正文或内部错误链。

发布/启用、新Start/AcceptStart及Reopen要求当前api与worker覆盖,且全部存活工作流池支持目标精确清单。 初次实现只在发布时查覆盖,复核发现worker后来失联仍可制造accepted积压,已补首次发起检查及最终覆盖期限复核。 已提交收据在新准入检查前按原主体/原载荷读取,不因worker失联重新执行业务。 有新池不等于滚动完成:旧池仍不支持新清单时拒绝开放,新双版本池接管后才能受控关闭旧池并重试。

References只返回启用定义、running实例、accepted命令、command-job、timer和ready-job六项布尔值,不返回租户或业务标识。 Retire在自己的runtime锁内重新读取全部权威引用,要求draining、ExpectedVersion相符且引用为空, 再将状态/epoch/version与追加审计一起提交,任何故障整体回滚。dead与过期leased仍是未完成业务,不能被忽略; attempt历史不是执行权威,不因旧标签阻塞已结算实例。未来可靠外部动作队列接入时必须扩展此协议,不能省略其引用。 Reopen须当前构建精确匹配及兼容api/worker覆盖;允许先部署绑定retired版本的兼容池准备恢复,不自动打开旧定义。

idle池presence不是Retire业务阻塞项,避免退役与最后池关闭互相等待;在途事务由同一runtime锁和最终fencing保护。 受控Close拒绝最后一个非retired同角色池,并发Close由control串行,不能双方都把对方当作接管者。 直接OS信号/崩溃无法被库API阻止:Run取消全部工作并撤销本地权力,Close未成功时保留presence至原截止, 不把物理进程停止表述为受控卸载成功。配置/退出规则及迁移恢复见配置手册 与v42迁移。

首轮池生命周期与并发Close通过;退役夹具漏停基础v1定义,被真实门禁正确拒绝,修正为关闭全部已发布版本后重跑通过。 之后双库专项验证三类跨池重领/历史来源、固定旧期限、业务末次SQL过期回滚、心跳不受runtime锁阻塞、 真实v1→双版本池兼容覆盖、worker失联拒绝新受理及登记/退役审计故障回滚。 正式cmd/worker实际race子进程新增v2的accepted/timer/ready SIGKILL重启恢复,保留原v1及阻塞SIGTERM测试。 完整回归及模块/静态/文档结果持续记录在执行池证据,不能以专项代替容量或生产认证。

下一功能优先形成W11审批中心:定义/表单发布、本人发起/待办/已办、正文审批与历史;开发前继续补W08可靠外部动作和唤醒消费者, 并把实际API池接入统一身份、Origin、权限及三内容协议。设计器按R3.2推进。 W07其他资源、W08完整可靠动作、W11全部产品入口与W12完整滚动/积压/锁等待/恢复容量仍保留;M6/R3.1保持进行中。

最终MySQL/PostgreSQL各121项完整工作流应用与12项非空升级迁移race通过,全部专用数据库/Redis及匿名卷已清理。 最后增强末次成功SQL命中断言后,另跑3项竞争/期限边界应用与12项迁移,两库均通过;不将专项计入121项之外的不同业务场景。 26个workspace race/vet、26个全新缓存独立模块、核心/应用/配置模块nilness与最终核心race/vet通过;达梦仅正式worker构建通过。 文档最终60页同步/检查/构建及四页静态HTML/锚点/四分册通过,证据同步一致;浏览器因Work设置禁用未运行。 本增量不代表完整滚动、容量、达梦v42实库或生产认证,W10相关后续边界与W08/W11/W12继续保留。

# 工作流消息提示与正式唤醒闭环(schema仍为v42)

本批接入既有workflow.command.ready,稳定消费者/订阅组名为workflow.command.wakeup, 当前workflow.execution能力由真实租户守卫逐次核验。运行面不从wire恢复Actor,也不把消息中的tenant字段当身份。 正式cmd/worker仅在实际开启工作流时注册此消费者,未开启时仍只派发通知类型,工作流提示保留pending。 旧运行时清单、CommandNotice JSON和数据库版本保持不变,不借消息补造历史后台job。

原消息循环只注册/订阅通知,本批扩展为最多16个固定消费者。登记验证通过且全部订阅成功后才启动派发, 任一订阅失败/返回空值先关闭已成功的订阅,不向无人消费的主题发送;订阅组使用固定consumer名,不能拼接pool/启动ID。 每订阅一个消费循环,另有派发与可选维护,最多18个goroutine,均由RunMessages取消/join。 通知原组保持,传输owner仍由适配器生成,Event与Redis原有确认/PEL规则继续适用。

消费者核对当前Work与本库Event的租户/事件/type/consumer、原schema、聚合instance/version及trace command, 对原生产者的规范JSON做字节复核,拒绝未知/重复/大小写别名键和可替换字段。 核心VerifyCommandNotice在传入tenant→inbox事务中只做一次普通关联查询,核对同租户command/instance/runtime/job的不可变关系与原清单摘要。 不取runtime锁、不读正文、不执行Kernel、不新开事务、不重建job,因此持runtime行锁时仍可完成消费,不会反向等待工作流。 历史notice版本只要求不超前,允许实例已推进、命令done/cancelled和运行时已retired;无需重新装配旧handler。 旧AcceptedStarts且不支持BackgroundCommands的档案允许无job,新后台档案缺job则503且不自动修复。

消息Worker确认inbox事务提交后,组合根才调用不带参数的非阻塞Committed提示;dead/rejected的Ack不算成功,不触发提示。 重复done可再次唤醒,单槽通道合并突发,不传递事件/主体/租户或可复用权限。 CommandWorker收到提示仍从SQL重新Claim,经过原runtime→tenant/资源/实例及业务lease/pool/fence门禁, 无提示仍按100–60000ms配置间隔轮询,不把间隔当作整体排队时延;进程取消不留下游离循环,意外关闭提示通道仅禁用提示、不热循环。 提交成功后提示或transport Ack丢失,都由原inbox去重与SQL轮询恢复,不声称消息和流程业务端到端exactly-once。

首轮拒绝专项发现新增Oops包装传nil会返回nil,误将非法提示认作成功;已按项目规范先生成非空业务错误, 并以无SQL单元边界及实库unknown/duplicate/case/aggregate/trace拒绝场景复验。 首轮磁盘不足导致链接失败和专用Docker存储异常,失败结果未计入通过;环境恢复后在全新专用资源重跑。 当前消息回归两库各32项应用/12项迁移race已通过,覆盖原通知/可靠消息及新增提示契约。 新增实际Event与AOF/noeviction Redis Streams用例在inbox最后SQL注入故障,确认不提前唤醒; 恢复提交后,一分钟轮询尚未到期即完成真实后台命令。旧无job、迟到取消/退役、跨租户、租户停用、job丢失与runtime锁序均有实库验证。 正式子进程另用首批10个job耗尽固定批预算,再受理第11个,并验证原会话撤销后,正式main的消费者确实唤醒实际worker并建立可完成的真实审批。

完整回归及最终模块/静态/文档结果见消息提示证据。 运维配置与状态解释见工作流配置和可靠消息。 本批没有新增外部HTTP动作、动作job/固定输入/远端业务幂等与补偿、其他种类命令受理、HTTP/审批页面,W08仍未结项。 后续实际动作队列须进入运行时排空/退役引用,API池装配和产品入口继续W11,完整滚动/积压/锁等待与恢复容量继续W12;M6/R3.1保持进行中。

最终MySQL/PostgreSQL各128项完整工作流应用与12项非空升级迁移race通过,包含全部7项新增提示专项,正式子进程第11个job在一分钟轮询到期前由提示唤醒。 另一次消息/通知回归两库各32项应用与12项迁移通过;两次验证各自使用全新专用数据库/Redis,资源均已清理,不把重复专项加到128项总数。 26个workspace race/vet、环境恢复后26个全新缓存独立模块、核心/应用nilness、最终应用race/vet与达梦正式worker构建通过; golangci-lint未安装,未声称执行该工具。最终60页文档同步/检查/构建及四页静态HTML/锚点/四分册通过,证据同步一致。 浏览器仍因Work设置禁用未运行;达梦实库、生产部署、可靠外部动作和完整R3.1退出条件均未由本增量替代。

# 外部动作协议基础(schema仍为v42)

以下保留协议首批交付时的关闭门禁记录。v43持久执行与实际端口门禁增量见本页后续章节,不将两批证据混用。

2026-11-02先交付可独立验证的编译和网络协议边界,不开放可靠服务任务。 fago-compiler-v6纯编译支持独立external-action节点,显式声明Inputs/Outputs和Next; 字段必须已声明且不能重复。旧v1–v5连空inputs键也拒绝,既有同库action继续原事务语义。 运行时清单新增省略空值的ExternalActions,冻结动作名、合同版本和固定目标摘要;排序与深复制保证注册顺序及外部切片修改不改变原清单。 非空清单要求v6和完整accepted/background/timer/ready/pool保护前置,动作名不能与同库动作冲突。 当前NewDefinitions与NewExecutionKernel明确拒绝全部v6档案,防止只完成编译就发布无法恢复的实例;正式内置运行时及旧清单保持不变。

冻结函数只提取节点声明的输入,optional缺值保持缺失,不向远端发送全表单、资源正文、Actor、会话或凭据。 逻辑ExecutionKey绑定租户、实例、激活与固定动作合同;循环新激活产生新键,重试不把attempt/fence/池代次纳入键。 execute与compensate分别具有稳定操作幂等键,请求摘要覆盖全部公开字段。 同激活修改输入只改变摘要而不改变业务键,未来持久恢复必须拒绝同键不同载荷,不能把它当作新尝试。 输出基线只冻结声明输出的值及存在性;本地合并拒绝这些字段的并发变更,但保留其他人工分支的无关变量更新。 这些快照函数目前未写数据库,不能据此声称崩溃恢复已实现。

远端合同固定为fago-external-action-v1:execute确认applied并按原键/摘要重放结果; compensate确认compensated且必须原子写入阻止迟到execute的墓碑,不能只返回“未找到”。 补偿响应不允许修改流程变量。HTTP报错、超时、断连、响应非法都属于未知结果,不证明没有远端副作用。 响应限512 KiB,严格拒绝未知/重复/大小写别名键、错类型、null、错误原键/摘要或尾随第二份报文。 当前回环echo用例仅验证真实wire交换,不是远端持久幂等、查询或补偿墓碑的认证服务。

HTTPExternalAction只向受信组合根固定的目标POST:正式要求HTTPS与外部受限普通凭据文件; 显式开发/测试开关只允许数值回环IP的HTTP,不允许localhost或其他DNS名称充当例外。 不读取环境代理、不跟随重定向,限制连接、头部、正文和超时;凭据与URL不进入模型、请求正文或错误链,轮换凭据不改变目标摘要。 持久重试未来由job预算控制,调用器不自行循环重试。调用器Close释放空闲连接,活动请求仍由拥有它的执行器取消/join。 本批未新增YAML配置、正式worker装配或在线入口,不提供不可执行的配置教程。

独立网络dispatch凭证不含SQL事务,不接受公开WorkIdentity单独授权;载荷变动、跨context、JSON重建、过期、池失权或回调结束均拒绝。 签发函数为包内私有,正式生产路径尚无调用者;后续必须在持久dispatch意图事务成功后才签发。 单测合成私有池快照用于验证隔离和截止,不能替代持久SQL lease/fence/当前资源守卫测试。 现有同库ExecutionCall凭证不授予网络权限,调用器不接收tx,防止把HTTP放入现有长业务事务。

本批新增10项顶层协议测试,包含真实回环HTTP、输入深复制/类型、业务键、输出冲突、严格响应、凭证撤销、取消与错误脱敏。 最终检查及安全摘要见外部协议证据。数据库没有迁移或新增可执行路径,schema仍v42;本批没有重新运行双库集成测试,前批128项应用/12项迁移证据仍仅归消息提示批。

下一增量必须完成持久job/attempt、事务外派发及独立响应收据、本地受控结算、有限重试/dead和当前管理身份的手动补偿, 同时扩展所有终态路径的未知效果保护、运行时退役引用和真实端口合同,再完成双库故障/重启/并发测试后解除v6门禁。 W08其他受理命令、W07其他资源、W11实际API池/审批产品与W10/W12完整滚动/容量继续保留;M6/R3.1仍进行中。

# v43 外部动作持久执行与补偿

本批将协议基础接入真实内核,追加wf_external_jobs、wf_external_attempts和wf_external_receipts, 并扩展节点kind约束。每个job唯一绑定tenant/instance/activation,另以engine复合外键固定运行时; 快照、激活等待和token等待同事务建立,失败不留下半个动作。旧模型/清单不变,不回填历史远端效果。 v6构造改为检查实际资源/审批/同库动作的独立ExternalWorkerContract及精确远端调用器清单; 旧timer/ready工厂不会自动支持新consumer,真实BPM/Registry/候选/正文规则显式列举v6。 该核心批次保留正式内置v1/v2档案及默认worker配置原合同;后续正式外部进程接入见本页末节。

Claim只扫描最多100条小元数据,不读snapshot正文,按runtime→tenant→job短事务CAS。 accepted仍优先;租户停用/撤能力只延后due,不烧预算或生成Work权限。 准备阶段再走runtime→tenant→resource→instance→job,核验原模型/合同/类型及独立等待激活,提交发送意图后释放所有SQL锁。 网络阶段才签发独立私有dispatch凭证,不携带tx、Actor或原会话;固定业务键不因attempt/fence/池代次变化。 HTTP在途期间,其他人工作业、当前授权查询与租约心跳可继续;真实接收器取得原runtime锁,直接证明没有跨网络持有业务事务。

原响应先在独立runtime/tenant/lease/pool事务保存,再重新取得当前资源/实例锁尝试本地结算。 原execute和compensate响应各自不可覆盖,记录请求/响应摘要;本地端口、变量、节点、任务或审计失败不会丢掉远端收据。 已有收据的恢复跳过网络,只重试本地应用。输出字段的值及存在性与派发基线冲突时进入dead,不能覆盖并行人工输入; 只变更无关字段则保留新值,不用整个实例版本制造虚假的冲突。 每段尾部检查业务lease和当前池,业务截止也纳入最后pool SQL之后的真实时钟检查,后续心跳不延长原操作窗口。

每次实际认领消耗一份最多五次的预算,过期attempt保留为expired;未知HTTP错误继续使用原键,耗尽转dead,不自动复活。 当前管理服务提供GetExternalAction、RetryExternal与CompensateExternal,要求当前在线管理权限、当前资源ACL、job版本CAS和命令幂等。 重试保留输入和原响应,补偿失败仍重试原compensate操作;不能重置为execute或替换数据。 补偿由worker在事务外请求,远端必须原子保存阻止迟到execute的墓碑。确认后job变compensated且清除未确认效果, 原激活仍等待管理取消,不隐式跳过业务步骤,也不提供已完成服务动作的通用BPMN撤销。

所有取消、人工拒绝、timer及自动end共用finish保护:未发送动作可fence取消;可能已发送但未结算的效果阻止整笔终态事务。 领取尚未提交发送意图不算远端效果,可安全取消;迟到lease先在普通主键检查被拒绝,不用已关闭资源占位掩盖原fence冲突。 未发送集合的attempt/job/元数据事件批量结算,不逐动作产生SQL往返;1/16个真实已领取动作均固定5条相关SQL,保护查询不读私有快照。 运行时引用增加ExternalJobs,pending/leased/dead均独立阻止Retire,不以instance标签或原期限已过判断排空; 确认补偿并显式取消后才能排空。原响应与attempt历史保留,不把删除历史当作退役手段。

专用SQL持久接收器与真实HTTP覆盖断连后已提交效果、相同业务键重放、接收器和worker重建、独立收据回滚保护、 并行输出冲突/无关字段保留、当前权限补偿、迟到execute墓碑、未发送取消、在途拒绝/取消/timer、跨池重领、租户停用及最后SQL截止。 原发起会话撤销后仍由真实Work恢复,后续真实审批继续使用独立当前审批人的会话。 接收器只用于专用库验收,不是生产远端供应商的持久幂等认证;该核心批次的正式进程后续接入见本页末节,完整容量仍需继续。

首轮实库发现迁移执行列表漏登记,已补齐v43及列表/Version长度检查;列表成功返回不再掩盖未执行新DDL。 另修复了回滚错误返回非零管理结果,以及终态保护读取大量快照的问题。 定时器夹具最初把退避时刻设到原due之前,被CHECK正确拒绝;已改为真实到期后的原due,不放宽生产约束。 失败运行保留原状态,不计入通过。最终检查、命名场景和安全日志摘要见持久动作证据。 迁移/恢复规则见v43迁移。

该核心批次当时尚未完成正式外部动作YAML/进程配置和main循环装配(后续结果见本页末节)、其他accepted命令、W11实际API池/审批中心HTTP与界面, W07其他资源以及W10/W12完整滚动、积压、锁等待和恢复容量也继续保留。达梦仅构建验证,不声称v43实库或生产远端已认证;M6/R3.1保持进行中。

最终完整工作流回归在MySQL/PostgreSQL各139项应用和13项非空升级迁移race通过,包含本批11项外部动作场景,全部专用资源清理成功。 随后新增的末次pool SQL后动作截止场景另跑双库各1项应用/13项迁移并通过;原发起会话撤销后的增强恢复另有各1项应用/13项迁移,属于已有恢复场景,不重复加到139项总数。 当前12项外部动作顶层测试均有实际双库通过证据,批量取消1/16项均固定5条相关SQL且不读取快照正文。 26个workspace race/vet、26个全新缓存独立模块、核心/BPM/应用nilness和核心52项顶层race/vet通过;达梦只验证正式worker入口构建,未作v43实库认证。 文档和最终应用检查结果见本批证据;浏览器仍因Work设置禁用,不以静态构建代替实际审批页面或完整R3.1验收。

# 正式外部动作配置与worker进程(schema保持v43)

本增量延续W08,未增加迁移。framework/config的严格YAML/环境覆盖增加external_runtimes; APP_WORKFLOW_EXTERNAL_RUNTIMES整体替换数组,环境身份只由Load从APP_ENV选定,生产不可通过YAML降级为开发HTTP。 每个外部运行版本必须列入显式版本名单,固定使用代码内v6标量表单模板及持续池,不接受配置指纹、脚本或能力声明。 旧fago-form-approval-v1/v2清单保持原值。

NewBuiltinBuild由实际HTTP调用器生成并冻结每个版本的动作/目标合同,公开Profiles返回独立快照, NewServices绑定真实表单、当前ACL、候选及审批端口。支持保留旧新版本的独立目标,不用全局动作名覆盖旧目标。 更换同版本目标会在正式启动清单检查中拒绝;凭据文件轮换排除在目标摘要之外,仍在每次进程构造时受限读取。 构造失败释放已创建调用器,不联网、不写库、不自动登记运行时。

NewWorkerProcess对外部模板装配第四类实际worker,和命令/timer/ready共同运行在worker角色持续池中。 首错取消兄弟,父取消中止SQL/HTTP并等待全部join;只有这些循环与心跳退出后才关闭HTTP空闲连接。 Run只允许一次,Close支持未启动、预检失败、并发停机及重复调用;main的非零退出路径也显式释放调用器。 本地Close不代表远端效果撤销或目录已退役,最后池卸载保护与原SQL lease/fence权威不变。

真实cmd/worker race子进程专项使用专用数据库中的持久HTTP接收器:

  • 远端实际提交后阻塞响应,SIGKILL并回收旧进程、重启接收器和worker,原业务键重放只产生一次远端效果。
  • 锁住真实表单资源阻止本地完成,独立原响应收据提交后SIGKILL;解锁并重启,凭原收据完成而不再次发HTTP。
  • HTTP尚阻塞时SIGTERM,进程取消并join后正常退出,不将未执行请求算作远端成功。
  • 活动定义/job仍在时,更换同版本目标或移除旧处理器必须启动失败,不向新目标发送请求。
  • 恢复后仍建立真实人工待办,当前独立审批人批准后同库表单/流程正常完成。

接收器通过网络期间独立取得真实运行时行锁证明HTTP不持SQL事务;测试端持久幂等不等同于生产供应商已认证。 本增量的双目标独立绑定有工厂单测,完整旧新版本滚动/容量组合仍待W12;其他accepted命令、W07其他资源、 W11实际API池及审批HTTP/页面仍须继续,M6 R3.1保持进行中。配置形状与限制见配置手册。

本批结构化结果见外部正式进程证据。

最终完整工作流回归在MySQL/PostgreSQL各141项应用、13项非空升级迁移race通过,全部专用资源清理成功。 包括新增正式子进程专项及全部12项既有外部动作场景;不是把首轮专项与完整回归重复相加。 26个workspace模块race/vet、26个全新缓存GOWORK=off独立模块、配置/实际worker装配nilness与应用最终race/vet通过。 达梦仅实际worker构建通过,未执行实库认证;golangci-lint未安装,浏览器因Work设置禁用未运行。

# 实际API池与工作流HTTP首批(schema保持v43)

本轮推进W11,schema仍为v43,没有新增迁移或替换旧v1/v2清单。 catalog_enabled和api_enabled独立且默认关闭,严格统一配置与环境覆盖;目录管理使用当前真实平台身份事务, 在空目录可读取代码支持的安全合同并显式Register。业务API则在监听前完成真实kernel/catalog的api角色预检/Acquire, 不自动登记、不使用worker角色代替api,也不让全局池中间件挡住登录或首次目录登记。

APIRuntime逐请求保留当前身份并Bind固定池截止,目录请求只绑定生命周期/超时而不要求池;两类请求均受显式操作时限约束,requests.Add与关闭门闩同锁,释放幂等。 心跳失权先取消全部绑定请求,再通知正式main停止HTTP/指标监听;取消顺序不依赖当前池Close的提前返回分支;停机先统一取消、join请求/心跳/采样器/listener,再释放调用器和共享数据库。 HTTP就绪同时检查自身工作流池;工作流关闭时保持原API行为,catalog-only不挂载租户业务路由。 进程本地失权统一503并保留标准取消类型,不让Oops内层409001把进程可用性误报为业务CAS冲突。

首批正式路由沿用metadata、主库authenticate/policy、当前领域二次复核、Origin/X-App-Request和统一Reply/ReplyError:

  • 平台构建安全合同、含retired目录的有界列表、七类References与Register/Drain/Retire/Reopen;请求不接受指纹/能力或任意处理器。
  • 标量表单发布/精确版本读取、本人草稿CAS和本人原提交;全局表单权限不授予他人草稿正文。
  • 不可变定义发布、精确版本/版本列表、独立准入CAS;model继续由严格编译器解释。
  • 受理发起202和原主体命令读取、受权实例安全元数据/取消,不从HTTP接受后台凭证或直接推进token。
  • 本人当前任务、实例管理任务分页、当前资格与节点字段白名单的正文读取、决定及领取/转办/委派/归还/补分配。
  • 当前管理者的外部动作安全状态、retry/compensate排队;HTTP不发远端请求、不替换输入/目标或原业务键。

通用16KiB正文不足以覆盖核心256KiB模型/表单值,故只为精确工作流POST及合法任务decision/return登记512KiB传输额度, 领域仍独立限制256KiB;其他业务/认证端点不扩大,编码别名、错误方法、额外后缀也不能扩容。 沿用原大正文并发槽与三种内容协议边界,不绕过加密或Origin。

实库专项以正式明文/RSA-AES/SM2-SM4中间件完成真实表单/定义/草稿/受理命令及审批,覆盖跨租户、非本人、字段隐私和业务重投。 动作HTTP专项用实际五次丢失响应形成dead,再通过HTTP恢复/补偿,真实worker继续同一业务键,一次远端效果不重复,管理HTTP本身不联网。 正式race版cmd/api验证空目录业务启动拒绝、目录bootstrap、实际api presence与owner撤销后非零退出并停止监听。 API生命周期专项证明关闭取消在途请求、拒绝新Bind且等待原请求释放;另验证真实owner撤销时请求收到context.Canceled而非操作超时,并以不调用finish的确定性单测检查子context先取消请求根;52条真实退役目录历史可完整翻页,1/50条均一条目录元数据SQL且不读manifest,读取错误不返回部分页。

操作与具体接口见工作流API手册。本增量不是W11或R3.1结项: 全定义/表单key列表、本人已办/发起分页、参与人历史/正文读取、实际Vben审批中心/菜单仍须继续; 其他accepted命令、W07其他资源、W10/W12完整滚动/积压/锁等待/容量范围保持,达梦仅构建,生产和远端厂商仍未认证。

完整基线回归在MySQL/PostgreSQL各146项应用、13项迁移通过。该基线编译早于最终传输额度/取消顺序修订, 不包含后来追加的失权取消顶层用例;最终代码再跑6项工作流/API及1项原文件HTTP回归,每库7项应用、13项迁移通过,全部专用资源清理成功,不将重叠用例相加。 三协议观察到定义17599、发起20906、投票20719字节,均实际超过原16KiB并成功走业务,不只靠额度函数断言。 26个workspace成员race/vet、26个全新缓存独立模块、改动模块nilness及DM实际API/worker构建通过;DM仍未实库认证。

只读复核纠正了取消测试的一项证据表述:owner撤销会使Renew先清空本地grant,Close无需取control锁; 旧即时Done检查依赖调度窗口,已移除,不再宣称控制锁阻塞。最终集成验证真实失权取消,纯生命周期单测不调用finish,独立证明子context取消先传播到请求根。 结构化最终范围、摘要和失败记录见API首批证据。

# 产品元数据列表与已办索引 schema v44

2026-11-03继续W11,新增五类真实元数据查询及HTTP:定义全key最新发布/当前准入、表单全key最新版本、本人当前草稿、本人发起、本人真实投票已办。 每页最多50条,额外取1条判断nextCursor,无全量count、offset、逐行Detail/Inspect或正文恢复。 定义/表单目录按根主键关联同租户唯一的最新版本;草稿沿ix_bpmfd_owner按ID倒序;本人发起沿ix_wfi_initiator按创建时间和ID倒序。 同毫秒创建的实例用复合游标保持顺序;修改草稿不会因updatedAt排序移动既有行。

已办只依据wf_decisions.actor_id,approve/reject各次投票独立留存;候选快照、当前assignee、管理员权限或泛化task_event actor都不是实际处理凭据。 领取、转办、委派和代理归还尚未计入个人操作历史,不把它们伪装成已完成投票。 schema v44仅追加ix_wfd_actor(tenant_id,actor_id,id),旧实例历史索引继续保留;不改变旧清单、模型、投票或资源grant。 PostgreSQL事务DDL失败回滚,MySQL/达梦部分DDL失败仍保留dirty并人工核对,不自动忽略已有索引。

五类查询与当前会话/账号/能力/权限处于同一RR只读快照,失败均清空部分页;HTTP沿用实际API池、主库身份、严格查询参数和统一JSON/JWE响应。 本人发起使用原start权限,不要求全租户实例管理权;本人草稿/发起不能指定其他所有者。管理员不继承他人的已办。 列表只返回定位/状态/时间等元数据,不读取model_json、schema_json、values_json、opinion_text、reason_text;表单名称位于schema,故目录只给key/version而不为名称读取大正文。 历史记录可见不授予旧任务资源正文,活动grant结束/撤销后仍按原规则拒绝。

实库以真实发布、填报、发起和投票生成52条资料:五种列表1/50条时各1次相关元数据SQL,50+2完整翻页;关联最新版本/独立disabled准入也得到验证。 专门把fixture创建时间设为同一毫秒只用于复合游标边界,不代表业务允许改创建时间。 另验证候选人/管理员已办为空、同租户其他所有者看不到草稿/发起、旧会话撤销与读取失败都无部分返回。 正式明文/RSA-AES/SM2-SM4 HTTP均实际读取五类列表,检查私有字段不出现、第二真实租户空页及未知ownerId参数拒绝。

已办访问路径专项先产生1条真实投票,再添加一万条满足外键的其他处理人合成历史,比较同数据去掉/恢复索引后的ID定位查询。 MySQL估算扫描行102→1,PostgreSQL实际shared hit/read blocks214→3,均选择ix_wfd_actor;只比较同方言前后成本,不混用单位。 合成历史不是一万次实际执行,测量仅覆盖按actor定位ID,不替代完整关联/HTTP延迟、建索引锁窗口、生产p95或容量认证。 索引临时移除/恢复仅在runner拥有的专用数据库,业务库/原Docker服务没有改动。

最终专项MySQL与PostgreSQL分别3项应用、14项非空升级迁移race通过,专用数据库/Redis均清理成功。 26个workspace成员race/vet、26个全新缓存独立模块、四个改动模块nilness、实际达梦API/worker构建与迁移构建/单元检查通过;golangci-lint未安装,达梦未执行实库。 先前失败分别是查询计数漏识别裸别名、GORM忽略未导出嵌入投影、HTTP错误码断言和测试替换角色后权限缺失,均修正后重验,不将失败当作通过。 安全结构化证据及扫描成本见产品列表证据,操作与游标规则见工作流API手册。

本增量未完成W11或R3.1:参与人详情/历史、明确的历史资源字段合同、真实Vben审批中心/菜单继续; W08其他accepted命令、W07其他资源、完整W10/W12滚动/积压/锁等待/恢复/容量范围保持。 浏览器仍因Work设置禁用,静态文档构建不能替代真实页面验收;未部署生产或认证外部厂商。

本批文档61页同步/检查/构建/再检查通过;六个生成HTML的新章节与关联锚点、四分册和证据源/公开副本/产物字节一致,浏览器未运行。

# 参与人历史与原提交 schema v45

2026-11-03继续W11,增加独立HistoryReader、真实审批证据/时间线端口、标量原提交端口及正式HTTP装配。 新增workflow:history:read和bpm:form:history-read;schema v45仅增加两权限/保留角色映射与五索引,不改旧模型/清单/审批历史,不回填grant或节点输入快照。 历史服务构造不接收旧kernel/catalog/bundle,原目录/定义摘要与已实现纯编译器只用于解释原规范,不能据此执行或重新准入。 未知解释版本或旧v3缺ReadFields时明确拒绝处理人原提交,不猜最新版或默认开放全字段。

参与人详情区分发起人、真正投票或claim/transfer/delegate/return的过去actor,以及带精确活动任务的当前候选/持有人。 原候选、收到指派、管理reassign、ready/cancelled的actor均不能直接成为过去参与凭据。 当前候选在同一RR快照复核history/task权限、当前任务版本和原来源,不重新Resolve扩大旧任务;新加入成员不继承原任务。 元数据管理者仍可用原Inspect,但不能借管理权限读取任意参与历史/正文。

时间线每来源最多51条:生命周期、实际投票、任务事件各一次固定投影,再有界合并取50条。 游标绑定租户/实例/occurredAt/source/原ID,三表的裸自增ID不会相互串页,同毫秒也保持全序;每页重验当前主体,不保证跨请求固定数据库快照。 元数据不读意见、原因、输出、workID或fence,不逐条取用户/模式。 私有条目在SQL投影前限定发起人或条目actor,再按原节点Outputs和类型校验输出;损坏不输出部分意见/字段。

独立workflow-original-resource-v1/scalar-form-original-v1只返回原提交与原schema,绝不是节点当时完整输入。 发起人还须匹配原资源owner;实际处理人只认精确decision/代理return版本,按原节点ReadFields投影。 领取/转办/委派、被分配、旧候选或管理员都不因此获得永久正文。当前bpm历史权限还在同事务中复核,保留旧context也不能绕过权限撤销。 每次正文读取使用同事务/完整调用摘要的短时凭证,成功、错误和panic展开都关闭;不读当前变量/草稿/终态汇总,不复活slot/grant或推进任务/实例。 两领域仅追加无正文读取审计,失败整体回滚且结果清空;相同requestId不形成可重放私有正文收据。

正式HTTP沿用实际API生命周期、主库认证/来源、严格参数和统一JSON/JWE出口:参与人详情、时间线、decision/task私有条目、本人原提交与精确处理版本原提交。 三种内容协议真实验证从当前候选到过去actor,原提交amount=10不被最终输出20覆盖,隐藏note不向处理人返回,发起人仍可看自己的完整原提交;第二真实租户统一404。 未知owner、空/部分/重复任务范围均400002,旧元数据权限不自动变成历史正文权限。

最终MySQL/PostgreSQL分别8项应用、15项非空升级迁移race通过,全部runner专用容器清理成功。 实际场景覆盖当前角色来源撤销、后来成员拒绝、转办/委派/代理归还版本、旧v3白名单缺失、真实完成和grant回收、真实drain/停用/retire后重新构造无旧bundle读取、会话/资源权限撤销、两层审计回滚、调用篡改/凭证失效及损坏私有输出零返回。 55次真实转办生成长历史,完整跨页无重复/遗漏;小页与50条满页均3条相关历史SQL,后来源查询失败也不返回部分页。

索引专项只在runner专用库临时移除/恢复ix_wfe_timeline,以一万条合成生命周期记录比较ID/时间定位路径: MySQL EXPLAIN ANALYZE实际叶扫描10003→51行,PostgreSQL实际shared hit/read blocks268→6,均选中时间线索引。 MySQL普通EXPLAIN的rows不反映LIMIT提前停止,先前用估算量断言十倍改善的测试已纠正;估算4791/4984不是实际扫描证据。 合成记录不代表一万次执行;测量不是完整元数据取回、合并HTTP延迟、建索引窗口或生产p95/容量认证。

历史首版26个workspace成员race/vet及26个完整全新缓存独立模块通过;补充当前分支后再验26个workspace及26个GOWORK=off模块,本地fago开发模块缓存重建,外部已锁定依赖复用。五个改动模块nilness和实际DM API/worker及迁移构建/单元另验,最终范围以结构化证据为准。 golangci-lint未安装,DM未执行实库。只读复核未发现剩余确定越权/事务/分页缺陷,源审查不替代实库验证。 磁盘清理只回收已停止的M4/M5可重建测试二进制及包含本会话临时验证路径的Go构建对象,不做全局cache/Docker prune;原Redis数据备份继续保留,原服务状态未被本增量重启改变。 详细合同与实际命名验证见历史读取证据,请求/响应和失败步骤见工作流API。

本增量不代表W11或R3.1完成:实际Vben审批中心/菜单、个人领取/转办/委派/归还操作收件箱、W08其他accepted命令、W07其他资源及W10/W12完整滚动/积压/锁等待/恢复/容量范围继续。 当前无节点当时完整输入快照,不用原提交/最终Outcome冒充;无生产部署或外部厂商认证。浏览器仍因Work设置禁用,不以静态文档产物代替真实页面验收。

补充当前分支的存在性与诊断边界:先限制当前持有人/委派原人/原single候选,再恢复模型,完整资格通过后才检查任务版本。 无关人错版本或损坏定义都统一404;原来源撤销者即使仍保留粗候选记录,模型/清单损坏也仍403,不暴露500/409003恢复差异。 依赖不可用/取消仍沿503,实际过去actor和发起人的独立历史读取保留其存储诊断。all与未领取single均新增真实否定回归。

重建本地开发模块缓存还暴露了workspace从临时v0.1.0旧go.mod元数据取图的校验冲突,先前完整新缓存独立验证未依赖这些旧资料。 已为go.work中26个已声明开发模块增加精确v0.1.0目录替换,使workspace元数据也取当前源码;scripts/check-modules.py拒绝use/替换映射漂移。 未改第三方版本/校验和、未关闭验证,GOWORK=off仍按文件代理独立解析真实require,不受workspace替换影响。 失败的缓存重建轮次已清理专用容器,未计通过;后续最终检查/补验范围和日志摘要记录在本批证据。

恢复错误还先经工作流持久化归一化,再仅保留最终503;裸ORM未找到不会先误当503放行、再转404泄漏缺记录。 单元和真实Query回调均补此分支;完整当前资格前的存储/解释诊断统一403,真正依赖不可用仍可重试。 最终8项基线之后另补2项HTTP/当前资格专项,每库仍执行15项迁移;二者重叠不相加,也不宣称旧8项单轮包含最后诊断映射修订。 最终26个workspace race/vet和26个GOWORK=off独立模块均通过;后者重建本地fago模块缓存、复用外部已锁定依赖,早期完整全新缓存26项保留为历史基线。 所有go.sum保持原样,workspace只新增精确本地开发版本目录映射,不以关闭第三方校验或恢复旧缓存替代修复。

本批61页文档同步/检查/构建/再检查通过,8个生成HTML的新章节、关联锚点、四分册与证据源/公开副本/产物字节一致;浏览器未运行。

# 个人操作记录 schema v46

2026-11-03继续W11,增加GET /api/admin/v1/workflow/task-activities,让真实操作者在任务离开当前待办后仍能重新定位流程。 只认本人实际claim/transfer/delegate/return追加事件,候选、收到指派、管理reassign、系统事件及成功命令重投不新增参与记录。 原completed-tasks继续只列真实投票,不把代理归还当作终审。接口、完整请求/成功与失败示例见工作流API。

列表在同库RR只读事务复核当前会话、账号、套餐能力与workflow:history:read;不要求当前任务读取权,也不恢复旧执行处理器、候选来源或grant。 SQL显式限制tenant/actor/action,以同租户复合主键关联实例。仅投影事件ID、原任务/激活/完成版本、动作/时间及定义定位和当前实例状态, 不读取原因、字段值、他人身份、命令号或后台fence。事件完成版本可定位自己的私有条目;列表本身不升级原提交正文资格。

schema v46只追加ix_wfte_actor_action(tenant_id,actor_id,action,id),不改旧迁移、权限、清单或历史正文。 四种动作各按等值范围和ID游标最多取51行,在内存合并后最多返回50行;相关业务SQL固定四次,不随条目数增长, 避免四动作IN后全量排序及扫描大量非参与事件。任一来源或事务失败清空整页;非法/重复查询字段和非规范正整数游标拒绝,不回退第一页。

真实single领取/转办/委派/归还/投票专项验证操作者身份、收到指派者/候选/管理员空页、重投去重、精确历史版本、私有条目与原提交边界。 108次真实委派/归还/往返转办产生双方各54条混合操作,验证同毫秒50+4完整分页、1/50条均四条相关SQL、第四来源故障零部分结果、当前会话和权限撤销。 实际HTTP包含往返转办与本人记录,沿用明文/RSA-AES/SM2-SM4统一认证/来源/响应出口,检查跨租户空页和未知/重复游标拒绝。

一万条同actor的合成管理事件只测跨实例ID访问路径,不代表一万次真实业务或完整关联/HTTP容量。 初版完整关联对照在单实例夹具已能利用旧实例索引,PG访问块5→6,未证明改善;收窄ID访问后为11→3,旧索引压缩使收益低于预设十倍。 两次失败报告均保留,未计通过;最终测试检查实际成本下降及索引命中,不预设收益倍数。 最终MySQL/PostgreSQL各4项应用顶层专项及16项非空升级迁移race通过,包含三种HTTP协议;两次前述失败不计通过。 26模块workspace race/vet、三个改动模块GOWORK=off测试、审批及应用workflow/auth/root的nilness、实际API/worker达梦构建与迁移DM构建/单元通过。 宿主未安装golangci-lint;达梦没有本增量实库认证。测试专用数据库/Redis均由脚本确认清理,原服务和受保护恢复备份保留。

低磁盘条件下独立专项复用外部锁定依赖、重建本地fago缓存,不表述为26模块全部全新外部缓存。 两次独立失败源于Go模块索引按固定缓存路径复用旧私有v0.1.0文件清单,新增类型未进入GoFiles;从固定工具链源码核对后, 仅本次私有验证设置goindex=0逐文件读取,不关闭校验和、不修改全局配置或应用行为。直接在原模块GOWORK=off的排错亦被旧开发校验和拒绝, 正式独立验证只在副本重算本地私有sum,原go.sum和第三方校验保持不变。失败日志均保留,未计通过。 安全结构化结果及日志摘要见操作记录证据。

本增量不代表W11/R3.1完成:真实Vben审批中心/菜单、W08其他accepted命令、W07其他资源及W10/W12完整滚动/积压/锁等待/恢复/容量仍继续。 浏览器仍因Work设置禁用,达梦仅构建,无本增量实库或生产认证。

本批文档sync/check/build/check通过61页,生成HTML八页的新章节、页内关联和四分册导航及两份证据三处字节一致已静态核对;未运行浏览器或真实审批页面验收。

# 首批Vben审批与发起页面 schema v47

2026-11-03继续W11,真实web-antd接入审批中心(待办/投票已办/本人发起/非投票操作)、当前节点正文与字段编辑、 领取/同意拒绝/转办/委派归还、参与人详情/追加历史/私有条目与固定原提交。 另接入标量表单目录、本人草稿CAS编辑/保存、标量合同发布、精确匹配定义/表单版本发起、明确自选名单与本人命令进度。 全部复用原租户客户端的当前认证、Origin、JWE、版本变化及受控401刷新;没有mock、裸fetch或浏览器自行推进token。 用户操作、权限、接口和错误示例见审批中心手册。

读取按面板代次、当前身份及授权版本发布,换对象/关闭/退出/跨realm/权限变化清私有内容,晚到响应不能重开旧窗。 正常access刷新保留编辑。写请求首次点击冻结完整载荷/版本和随机commandId,双击不再发请求,失败只允许原载荷重投; 关闭不撤销已发送事务,也不把未知结果当作未执行。业务内容仅留页面内存,意见/字段按纯文本展示,不解释HTML。 原提交/当前值/允许输出分别保留,历史用来源+ID作行键,当前任务版本不能覆盖历史完成版本。

浏览器对标量只处理安全整数范围,非法格式与不精确值明确拒绝,不把后端int64变成近似浮点数。 激活/任务/CAS/草稿资源修订同样发网前检查,避免向上舍入恰好命中后来相邻版本;相关SDK与页面回归已补齐。 账号/事件ID保持字符串,账号上界用规范十进制长度/字典序比较,兼容既有编译目标;初版BigInt字面量触发目标容忍告警,最终已移除且无此告警。 自选与转办目标当前使用账号ID输入,没有名称搜索器;原任务资格和账号存在/租户/状态仍由服务端复核。

schema v47只新增四个admin菜单,与本地组件/路径/realm白名单成对固定;不新增权限/套餐/普通角色菜单,不修改旧SQL、定义或清单。 菜单仍取当前角色菜单、权限和能力交集。v46非空升级连续Run两次验证只增四目录、租户/admin版本各一次、platform不变及授权表计数不变。 实际三协议菜单专项验证保留角色、普通角色不自动获菜单、真实角色服务只授单项、原token在租户上限/套餐收窄后菜单即时消失;平台无租户入口。

最终前端25文件240测试、类型检查和生产构建通过;其中8个页面专项挂载真实Vue/Router/Ant,仅业务I/O替换, 其余覆盖固定命令重投、身份/授权/代次失效、标量精度、真实Axios请求合同及动态导航白名单。 当前Work设置仍明确禁用本地浏览器,本批没有真实浏览器布局或完整端到端证明,组件与后端HTTP不能合并冒称为浏览器验收。 最终MySQL/PostgreSQL各2项应用顶层专项(Navigation与APIHTTP各含三协议)、17项非空升级迁移race通过且cleanup=true。 26模块workspace race/vet、两个改动Go模块GOWORK=off(本地fago缓存重建/外部锁定依赖复用、私有验证goindex=0)、应用nilness、 实际API/worker DM构建与迁移DM构建/单元通过;末尾仅中文注释与等价Go零值声明整理,迁移race/vet另验通过。 宿主未安装golangci-lint;达梦无本增量实库认证。源码go.mod/go.sum与前端锁未改变。 具体范围与安全摘要见首批页面证据,不把独立的组件测试和后端HTTP组合声称浏览器端到端通过。

首次PostgreSQL复验在应用链接阶段因磁盘不足失败,0项测试且cleanup=true,不计通过。 仅回收可归属的旧工作流测试缓存及已不在权威清单内的std/cmd旧代理产物,执行前核对无打开文件;没有清空共享缓存、删除镜像或触碰原服务/Redis备份。

本增量未完成W11/R3.1:定义发布/准入页面、平台运行目录/任务管理/外部动作管理页面、完整正式OpenAPI合同与浏览器验收仍继续; W08其他accepted命令、W07其他资源与W10/W12完整滚动/积压/锁等待/恢复/容量范围保持。R3.2设计器/丰富表单和其他资源也不由本增量替代。

最后补齐“仅有委派权”的默认动作选择,默认值只能来自当前可用动作,不能保留未授权transfer;对应真实组件回归通过,前端最终240项及类型检查/构建再次通过。

本批文档sync/check/build/check通过62页;新前端手册的七类必备说明、八页生成HTML的新章节/159个关联锚点和四分册导航已静态核对,未运行真实浏览器。

# 工作流管理页面(schema v48)

2026-11-03继续W11。Vben已接入定义发布/版本历史/独立准入,平台当前构建与运行目录、显式七类引用和Register/Drain/Retire/Reopen, 以及按明确实例的安全详情/取消、任务管理分页/补分配和外部动作状态/重试/补偿。页面继续使用真实统一客户端、当前身份/Origin/权限与生产JWE; 平台目录不读取租户业务,管理任务不读取正文,列表不逐行查询模型或引用。操作方法见管理手册。

v48只新增四admin菜单和一个platform菜单,全部租户authz_version及admin/platform策略版本各增加一次; 不新增权限、套餐能力或普通角色菜单,不重写历史迁移字节。v47四菜单增量先在其原单步验证,再升级v48; v48验证旧目录完整字段、授权/套餐全行快照不变以及重跑幂等,不能将后续合法增量误判成旧脚本重复执行。

浏览器发布JSON先按原文本拒绝重复键、非法Unicode、尾随报文、非规范/不精确整数与容量/深度越界, 再交后台验证未知字段、节点语义、资源绑定、当前资格和兼容池。复制旧定义使用最新发布CAS;准入、实例、任务与job各用自己的版本。 服务端模型美化后超限时可保留等价紧凑JSON,但实际合同仍256KiB。超出安全整数范围的数值不能编辑后重发,后台int64合同保持。 任务补分配账号保持规范int64字符串,不能通过任务管理附带业务变量。

同时修复前后端传输额度不一致:后端已支持精确工作流POST512KiB,前端JWE仍按16KiB拒绝。 客户端现按与Go一致的方法/路径/实例/激活/任务白名单选额度,普通接口16KiB、文件上传8MiB及领域256KiB保持; 相似路径、编码别名、跨realm、其它方法和管理动作不能继承额度。实际RSA-AES和SM2-SM4密封/解密覆盖六类大正文、精确上限、超限及普通管理拒绝。

验证记录见结构化证据。前端全量304项通过(29文件),包含17项真实Vue/Router/Ant本人及管理组件测试, 另有真实Axios请求合同、严格JSON和方法/路径额度矩阵;类型检查与生产构建通过。组件仅替换业务I/O,与真实HTTP及浏览器证据分开。 当前Work设置仍明确禁用浏览器,真实布局、用户操作和文档浏览器验收未运行;静态构建不替代这项。

本批继续保持R3.1完整目标。正式工作流OpenAPI、真实浏览器验收、W08其他accepted命令、W07其他资源, 以及完整W10/W12滚动、积压、锁等待、恢复、容量与组合验收仍待完成,不以本批管理页面或专项替代总体结项。

本批实库结果:MySQL本轮4项应用(APIHTTP、APIExternal、APIManagement、Navigation)及18项迁移race通过; PostgreSQL最终管理专项1项及18项迁移race通过,另一次记录中的原HTTP/外部/导航三项通过、整轮因当时新夹具拒绝而失败,未冒充整轮通过。 管理专项在两库均走真实三协议,验证补分配/原命令重投、普通审批人无管理权、实例取消、精确版本/准入和目录四命令。 最终workspace26模块race/vet、两改动模块GOWORK=off、app nilness、实际达梦API/worker构建及迁移单测/构建通过;达梦实库未运行。 初期夹具缺必填值、缺池上下文/内核对象不匹配、前端测试/类型及磁盘空间失败全部保留在私有日志和结构化范围记录中。 专用容器已清理;未扩大到七库、生产或完整R3.1认证。

# 正式工作流OpenAPI合同(schema保持v48)

2026-11-03继续W11。现有OpenAPI 3.0.3/Redocly/openapi-typescript链路补入已实现的43个操作及62个schema, 覆盖平台目录、定义版本/独立准入、表单/草稿/提交、受理发起/原命令、本人列表、管理任务、正文审批/五类任务动作、参与历史/原提交及外部恢复。 模块编辑源和可独立验证的完整片段均在fago应用仓库;外层根聚合只替换工作流所有的路径/Wf schema,其他合同保持。 操作、生成与失败处理见API总览及工作流API。

新增源/片段/根合同漂移检查;真实Gin注册、注册源码权限交集/query/根DTO字段及51个真实Go公开投影的嵌入、类型、omitempty、指针null、字符串ID均独立检查。 不新增Swagger运行时、业务路由、权限、迁移或生产数据;schema仍48。管理客户端六类类型现直接取OpenAPI生成类型,避免手工响应字段漂移。 CLI修复web.sh进入fago/fago-vben5后旧一层合同路径;隔离runner路径用例和实际CLI lint已验证。

本批合同不缩小int64:JSON整数保持数字并说明浏览器精度界限,账号/事件ID及路径正版本使用规范文本。 十进制上界正则由字符串生成,不在JS中舍入int64最大值。任务所有者字段允许null;历史非执行条目instanceVersion可为0,不与实例CAS混用。 后一个边界由真实响应校验发现并修正,不改历史事件去迎合错误的正版本假设。

双库均通过新的TestIntegrationWorkflowOpenAPI:每库297条真实HTTP响应及84个成功业务请求、43个操作,覆盖明文/RSA-AES/SM2-SM4,且各18项迁移race通过并清理专用资源。 专项复用原业务/管理/外部HTTP,并追加真实单模式领取/委派/归还和表单/原提交读取,未以错误响应冒充这些新增成功用例。 私有正文只存testing临时0600文件,校验进程另设20秒寿命,日志仅输出操作名/状态/固定schema位置;不发布原始样例。 结构化证据及确切范围见OpenAPI证据。

Redocly及2257个公开响应样例校验、18个请求样例、8项离线合同正反例、前端304项/类型/生产包均通过。 六条既有OIDC回调2XX警告保留真实302/303合同。既有174路径/170 schemas及584个生成类型成员的语义比对未变;大类型diff来自新增操作/类型的自动生成。 初轮空required数组、Cleanup前context取消、历史instanceVersion边界、请求样例计数和诊断输出缓冲不足均有失败记录,未计通过。

正式HTTP合同已补齐,W11浏览器验收仍待环境开放。W08其他accepted命令、W07其他资源及完整W10/W12滚动/积压/锁等待/恢复/容量与组合验收继续,R3.1未结项。

最终补验包括PostgreSQL三协议的页面空targetUserId(24条响应/12个成功请求,8个相关操作;与完整专项重叠,不相加为操作覆盖)。 静态操作约束区分register版本0/其它目录正版本、任务动作的目标/原因/空变量规则;领取/归还同时允许省略或空字符串目标,以匹配实际页面和后端。 共享样例构造器只在显式专项保留成功工作流请求,新增8个隐私出口子用例,普通登录/用户管理或拒绝样例不附私有请求。 workspace26模块默认race/vet、app/CLI nilness、实际达梦API/worker构建均通过。两改动模块GOWORK=off全包测试通过; 独立链接因空间不足使用-ldflags=-w仅省略DWARF调试段,默认独立链接的失败记录仍保留,不将其表述为默认参数已通过。 生成类型保留上游头并自动写明来源/命令,可确定性重生成;实际CLI lint及gen types、锁定web.sh contract链路均已验证。 原有SQL迁移字节与Go/前端依赖锁保持,新增精确LF属性仅固定OpenAPI片段及根聚合的跨平台检出。

最后更新: 2026/11/3 11:46:10
M5 通用平台与身份实施

← M5 通用平台与身份实施

Theme by Vdoing | Copyright © 2026-2026 Fago 项目文档
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式