Skip to content

[P3] approvals: OOO auto-skip + self-service delegation (community core) #1322

Description

@xuyushun441-sys

来源:docs/PLATFORM_GAPS_FROM_TEMPLATES.md 第 20 条(与 #5 强关联)。

范围调整(2026-07): 原 issue 混装了 delegation / OOO / proxy。经代码盘点(见下),委派的权威原语已在开源核心(ADR-0091 职务代理 + ApprovalService.reassign),而治理 / 合规 / 代办访问(act-as)属企业版,已拆分至 objectstack-ai/cloud#855。本 issue 收敛为社区版必备的“审批不冻结”连续性底线。

现象

审批人是具体的人,休假 / 出差 / 离岗会让流程冻结、客户 SLA 跳水。

平台现状(已在 OSS 核心)

  • 审批人解析中枢 ApprovalService.expandApprovers()(plugin-approvals/src/approval-service.ts:300)
  • 任务级转交 reassign()(plugin-approvals/src/approval-service.ts:1036),已带审计 + 通知
  • 职位限时委派(ADR-0091 职务代理):delegatable 职位 + sys_user_position.{delegated_from, valid_from, valid_until, reason},isGrantActive() 解析时过滤;explain-engine 已能显示 “via delegation from A until Y”
  • 审计(sys_approval_action)+ 通知(service-messaging)基础设施

建议范围(社区版)

M1 · OOO 自动跳过 + 候补

  • 新增自助 OOO / 委派状态对象(仿 sys_user_position,独立对象,valid_from / valid_until + delegate_to + reason + trackHistory),不挂在锁定的 sys_user 标量上
  • expandApprovers 解析出具体 user 后,命中生效中 OOO → 替换 / 追加候补人;覆盖 type: user / manager / field(职位路径 ADR-0091 已覆盖)
  • 复用 core/src/security/grant-validity.ts 的 isGrantActive() 做时间窗判定

M2 · 临时委派(单任务)

  • 引擎能力已在(reassign);补“委派人自助声明”语义 + 前端按钮(objectui)

M4 · 审计 + 通知(布线)

  • 替换 / 委派发生时写 sys_approval_action(如 action=ooo_substitute,记 A → B + reason),保证社区版“谁替了谁、为什么”可追溯;通知双方

语义注记:expandApprovers 在请求开启时快照具体 user id,故“请求开启后才生效的 OOO”不追溯(职位 / tier 路径实时重算)——需显式决定。

不在本 issue 范围(→ 企业版 objectstack-ai/cloud#855)

代办访问 / act-as 收件箱 · 委派治理 / SoD · 组织级 OOO/代理管理控制台(代管他人) · 委派合规报表 / 导出 / 认证复核

验收

  • OOO 自动跳过对 type: user / manager / field 生效,窗口外恢复
  • 自助临时委派单任务可用,保留审计
  • procurement / compliance 审批流:审批人休假不再冻结
  • 替换 / 委派事件入审计 + 通知双方
  • 缺陷库 gap chore(ci)(deps): bump actions/configure-pages from 4 to 5 #20 标记为已解决(社区版部分)

Activity

  1. self-assigned this
    on Jul 18, 2026
  2. changed the title [-][P3] enterprise: no delegation / OOO / proxy in approvals[/-] [+][P3] approvals: OOO auto-skip + self-service delegation (community core)[/+] on Jul 18, 2026
  3. os-zhuang commented on Jul 25, 2026

    @os-zhuang
    Contributor

    社区版核心范围已交付并合并进 main,现关闭本 issue。

    交付 PR

    验收对照

    • ✅ OOO 自动跳过对 type: user / manager / field 生效,窗口外恢复 — 新对象 sys_approval_delegation;ApprovalService.expandApprovers 在解析时按链路改派(复用 isGrantActive 半开时间窗 [valid_from, valid_until),带环/自引用保护,OOO_MAX_CHAIN 有界)。职位路径休假仍由 ADR-0091 职务代理覆盖。
    • ✅ 自助临时委派单任务可用 + 保留审计 — reassign() + POST /approvals/requests/:id/reassign,客户端 approvals.reassign;objectui 审批收件箱已有 Reassign 按钮(ApprovalsInboxPage / approvalsApi.ts,全语种 i18n)。
    • ✅ procurement / compliance 审批人休假不再冻结 — 由上述改派机制覆盖。
    • ✅ 替换/委派事件入审计 + 通知双方 — 新增 ooo_substitute 审计动作(记 A → B — reason),同时通知候补人与被跳过人;已登记进 spec contract、对象 enum 与四语翻译。
    • ✅ 缺陷库 gap chore(ci)(deps): bump actions/configure-pages from 4 to 5 #20 标记为已解决(社区版部分) — docs/PLATFORM_GAPS_FROM_TEMPLATES.md 已标注 "Partially fixed(社区版部分,[P3] approvals: OOO auto-skip + self-service delegation (community core) #1322)"。

    语义注记

    expandApprovers 在请求开启时快照具体 user id,故"请求开启后才生效的 OOO"对个人路由不追溯(职位 / tier 路径实时重算)——此为设计取舍,已在代码与文档中说明。

    范围边界

    企业版治理(代办访问 / act-as 收件箱、委派治理 + SoD、组织级代管他人控制台、合规报表 / 认证复核)不在本 issue,继续在 objectstack-ai/cloud#855 跟踪。多步 / 并行审批为 #5(P1),独立推进。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions