Skip to content

feat: authorized event subscriptions and deterministic task coordination - #243

Merged
LIghtJUNction merged 5 commits into
mainfrom
feat/authorized-event-task-coordination
Oct 13, 2026
Merged

LIghtJUNction merged 5 commits into
mainfrom
feat/authorized-event-task-coordination

Conversation

@LIghtJUNction

@LIghtJUNction LIghtJUNction commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

实现

  • communication.events@2 与 msg listen --subscribe [--resource ID]:复用已提交事件日志和受保护游标。PostgreSQL 通知只负责唤醒,不携带正文或身份;等待期间不持有事务,醒来重新执行原有认证和当前权限检查。
  • 同一 actor、账号、资源范围可继续旧 events-v1 位置;权限变化保留序号并返回 authority_changed。日志清理仍返回 resync_required。不自动重置位置,也不切换到公开、本地或其他账号的通道。
  • 修复监听器重启后直接输出缓存 pending:远程订阅、账号事件与私有邮箱均重新读取并检查权限。
  • 私有任务计划:任务 ID、固定版本结果、完成统计、依赖检查与解除、失败传播、并发上限、独立认领编号、执行期限及续期。沿用 Resource/Revision、事务、generation 和回执,不增加任务数据库。
  • 工作者必须在明确的 workers 名单中,并拥有当前读取权限。分享读取不等于授予调度权。每个结果单独检查权限;已有不可见结果的引用可以保留,但不会因此变为可读。
  • 空闲认领返回 task_not_ready,不追加任务版本或事件,避免订阅器被自己的空操作反复唤醒。
  • 文档:docs/EVENT_COORDINATION.md,并从 docs/SUBAGENTS.md 引用。

合并与验证(2026-10-13)

  • 冲突整合:bad0da80284bbab1659d6e8a5e2ef9233513de38,保留 main 已有的本地原生事件、远程自适应轮询、无正文的远程检查点和恢复测试。
  • Ruff 精确格式修正:2bd54ab3143e0fe30b5a45a09f3475a0464ad536。此前 Python quality 运行 38326566850 的静态检查无问题;仅这两处格式不符,已按其自动生成的修复补丁提交。
  • 新增与主分支监听器测试联合运行 38326566598:111 passed、0 failed、0 skipped,环境 Python 3.15 + PostgreSQL 16。该次 CI 唯一失败步骤为格式检查,格式问题随后已修正。后续最新提交与合并后的 CI 需分别查看各自的运行结果。
  • 已通过 PR feat: authorized event subscriptions and deterministic task coordination #243 合并到 main,合并提交 82a62f5120440b33e721008dff414e59c19d1dbf。未声称生产部署。

边界

  • 新增的是确定性调度接口,不启动模型、工具或远程进程;执行仍由工作进程负责。
  • 执行期限在读取或状态转换时检查,未新增自动计时服务。过期任务失败,不擅自重新执行外部副作用。
  • 读取不是 ACK;输出与保存游标之间仍可能重复投递,按事件 ID 去重。
  • communication.changes、邮箱游标与 events 游标不是同一种,不能互换。权限扩大后,客户端资源缓存仍需按当前权限刷新。
  • 不自动扩大旧凭证权限。不宣称生产部署或跨 Harness 的性能排名。

Copy link
Copy Markdown
Contributor Author

任务创建失败有一个可复现的类型边界问题(head a5472ba):task_graph.create 第 14 行 只接受 list,但 OperationRequest 的 record 校验 会调用 freeze_json,把 arguments 内的数组变为 tuple。task_plan_create 第 80 行 原样传入 args['tasks'],因此合法的两任务请求也会触发 invalid_task_graph。

我用此提交的 freeze_json 和 create 函数做了隔离复现:直接传两任务 list 成功;同一输入先 freeze_json 后,tasks 类型为 tuple,create 抛出 invalid_task_graph。没有重跑完整 Python 3.15/PostgreSQL 集成;已有 CI 的 3 个失败都停在 tests/test_task_plans.py:16 的创建断言(77 passed),日志/JUnit 没有完整展开 error.code。

建议让 create 接受受支持的 list/tuple 序列,或在 handler 明确转换容器,同时保留任务数量、元素及依赖校验;增加一条经过真实 OperationRequest 冻结边界的回归用例,避免纯 list 单元测试遗漏。该 run 另有两项 Ruff:src/msg/core/task_graph.py:54 改用 dict.fromkeys,tests/test_task_graph.py:28 改用字典字面量;format.diff 也非空,修复后仍需完整格式检查。

@LIghtJUNction
LIghtJUNction marked this pull request as ready for review October 13, 2026 00:22
Copilot AI balanced review requested due to automatic review settings October 13, 2026 00:22
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for security reviews. Please try again later.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@LIghtJUNction
LIghtJUNction merged commit 82a62f5 into main Oct 13, 2026
12 checks passed
@LIghtJUNction

Copy link
Copy Markdown
Contributor Author

本机已完成代码核对与验收:新接口及客户端第一组 67 passed;SIGINT 用例因后台 shell 继承 SIG_IGN 导致测试进程忽略信号,改为隔离会话启动后,该用例与既有协作、事件、listener 交叉回归共 55 passed。共 122 个不同用例通过。Ruff 全量 lint/format 通过。已吸收远程同一格式修复,保留专项验证为 workflow_dispatch,避免日常自动 CI。未修改签名、CA 或 credential ceiling;准备合并并部署此精确内容。MSG 当前无法发现任务讨论父引用(credential_ceiling),此处仅记录脱敏代码证据。

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants