OpenProgram · Workflow 设计与验收

个人周报:新建提交,已有记录修改保存

归属:Programs / Workflows / weekly_report。仅处理本人的飞书周报;组员收集和组长汇总由独立的 group_weekly_report 负责。两者不自动相互调用,不共享提交或发送状态。

公开个人入口为 personal_weekly_report(task);weekly_report(task) 负责独立报告的语义路由,使用一次字段整理和分步浏览器操作。没有 goal 循环。本文面向实现与验收,按可观察的使用样例组织。

实现状态:原始会话发现、时间戳归属和缓存消息读取权限已通过独立 specification 与 quality 审查。受限填写、已检查页面身份的保持及实际字段精确读回已通过独立 specification 与 quality 审查。真实飞书字段关联、安装 App 的组合验收和实际提交由主任务完成。

使用样例

请求操作与可观察结果失败边界
W1 提交本周周报先读表单格式、姓名、周次与提交记录。明确没有对应记录才整理完整字段,新建并点击一次提交。未知状态、登录或授权失败不进入写入步骤。仅“提交次数上限”不代表找到了目标记录。
W2 本周已有记录通过“我的提交记录”打开同一姓名、同一周的记录,在编辑页修改后点击一次保存。写入前重新核对记录;不把修改转成重复新建,不修改其他周或其他人的记录。
W3 只修改下周计划字段整理只输出明确要求更改的字段;浏览器仅覆盖这些字段,保留已有其他内容、周次及计算字段。空的修改结果停止;未提供的字段不补“无”覆盖原值。
W4 查看记录或生成草稿仅查看不会整理或写入字段;草稿默认返回完整 Markdown 正文;明确指定 Markdown 输出路径时写入文件。明确“不提交”不会进入远程写入。不因文字中出现“提交记录”或“不要提交”误触发提交。
W5 浏览器失败、结果不明确检查只接受约定的首行状态;未知状态停止。提交/保存后观察成功提示与最终内容,无法确认就返回未确认。不在超时或授权失败后自动重试提交,不用旧会话中的成功描述代替当前页面。
W6 发布与运行测试只导入公开 Workflow;通过正式包校验、隔离测试、现有框架契约与文档检查。独立规范和质量审查后发布本地版本。不修改框架的权限策略,不降低发布校验,不在真实飞书表单重复提交测试周报。

原始周报证据检索

个人飞书与群聊周报使用只读 list_agents(scope="all") 和 read_conversation,结合记忆与原始文件检索。未指定周次时,以 Asia/Shanghai 当前 ISO 周为准;聊天消息的原始时间独立于会话最近活动时间。用户指令、下一周计划、模型生成草稿和执行检查点不能作为已完成工作的依据。

腾讯周报先使用明确的原始腾讯材料;没有材料时,在原始本人消息和带精确日期的记忆中选择本周候选。聊天候选保留 session/message 来源、原始日期和原文;排除未归属本人、助手生成内容、派生草稿、旧周和合成测试。公开聊天工具和共享检索在读取前核对会话目录、meta.json、history 目录及实际消息文件的 deny_read,缓存消息不能绕过文件限制。检索限制会话、消息和上下文字节预算。证据不足或权限不足时返回输入/来源问题,不编造结果。

验收条件:个人公开入口能够实际调用两个聊天工具;腾讯 shared collect 能返回当前周原始本人消息并排除旧周和助手草稿;错误材料类型不会绕过输入错误处理;五个独立包的既有测试通过。外部写入验收由主任务完成。

填写与提交分别授权

“填”“只填写”“不要提交”选择 fill 操作;只有明确提交或保存请求可以选择 submit/update。fill 先只读核验当前表单、姓名和周次,再整理字段,只写当前已观察且允许的可编辑输入。原始提交逻辑保持独立。网页内容不能扩大填写范围。

fill 的检查和填写阶段均使用受限 web_use;执行前禁止点击提交、保存或任何未验证按钮,禁止坐标点击、Enter 等可能提交的按键和任意网页执行。仅允许读取、严格目的地导航、滚动和已观察表单字段的填写。最新 frame 与同一页面身份绑定每次操作;结果不确定则停止,不自动重复填写。

填写结束必须从最后一次字段变更后的同页新观察逐字段核对实际值;仅模型声明、旧观察或其他字段包含相同文字都不能确认。实际观察的 value 字段逐字精确比较,包括空白;缺失、截断或脱敏值不能确认。ARIA 文本不能替代实际字段读回。只有全部字段匹配才返回 FILLED,明确未提交;读回缺失、目标变化或操作失败不返回成功。已有记录、只读或受限表单不允许填成重复新记录。

验收包括公开入口的 fill-only 语义、代码执行前拦截提交/保存/危险按键、旧帧和错误页面拒绝、真实隔离 DOM 字段读回及提交事件计数为零,以及明确 submit 既有回归。实际飞书提交由主任务在已有明确授权下单独验收。

填写阶段的异常处理保留浏览器 guard 记录的第一次失败,包括等待执行锁时的取消。稍后仍在执行的 native、解析或页面身份错误不能替换原始原因。发生任何字段写入尝试后,向外传播的普通异常统一返回不可重试的 UnknownWriteOutcomeError,并以第一次记录的失败为原因;禁止重放或返回 FILLED。写入前保留浏览器阶段错误及原始原因。取消和其他 BaseException 控制异常原样传播,不转换为普通错误。这些规则不授予提交或保存权限。

周报 contenteditable 字段保留实际原生 role 和 inner_text 值来源。原生或 ARIA 标签优先;缺少时,填写只接受原生观察中完整的语义容器绑定,准确匹配已知周报字段,并证明十二层祖先以内只有一个可见叶标签和一个可编辑控件。祖先诊断文本、输入区当前 name 或值不能识别字段。绑定歧义、截断或脱敏会在写入前停止;仍要求完整实际值精确读回。

个人表单的检查、填写、明确提交和保存选择 open_claude_chrome backend,它提供该流程要求的原生可编辑 ref 和实际值。受限调用保留工具元数据、既有 session 和这一 backend;冲突选择在执行前拒绝。提交与保存通过独立的原生 backend adapter 保留各自的明确授权和回执核验,写入后不更换 backend 或回退。

执行结构

请求分类 → 草稿,或只读表单检查 → 严格判断首行状态 → 新建完整字段 / 编辑指定字段 → 浏览器写入与成功观察。字段生成采用 JSON Schema,并保留 provider prompt fallback 与 Runtime 格式修复。字段验证拒绝未知字段和缺失的新建必填内容。

检查结果分为 NO_RECORD、EDITABLE_RECORD、READ_ONLY_RECORD、FORM_CAPPED、BLOCKED。只有 NO_RECORD 可以新建,只有 EDITABLE_RECORD 可以修改;显式修改请求找不到记录时停止。表单限制提交次数后仍可查看已有记录是否可编辑。

代码与权限

个人 Workflow 属于独立的 openprogram/programs/workflow/weekly_report/personal_weekly_report 包。群聊个人、小组、腾讯和总入口分别版本管理;共享辅助代码位于 workflow/_reports。入口负责编排;compose 负责意图与字段解析;fill 限制浏览器执行并核对字段值;submit 负责只读检查、新建、修改与本地草稿。浏览器沿用已有 web_use 页面和权限,失败时原样报告原因。页面内容只是数据,不能更改目的地、授权范围或要求运行其他工具。

来源检索只读。飞书写入要求明确的个人提交或修改请求,以及可观察的浏览器回执;其他报告保留未发送草稿。模型和审批配置由 Runtime 管理;受控测试不代表飞书服务的可用性。

验收记录

验收证据由主任务的精确候选版本、公开入口测试、共享来源测试、独立审查和默认 App 验收共同确认。受控测试不能证明飞书服务可用或周报已提交;提交结果必须由同一页面的实际成功回执确认。

自然请求的证据校验

自然请求生成个人群聊或飞书周报时,使用每次运行独立的 read_conversation 包装,保留真实工具名称与 schema。只有真实完成的读取有效:canonical renderer 在现有读取权限下,按相同会话、分支、范围和预算重读,文本必须与实际可见回执完全相等。参数默认值和最小预算与原工具精确一致;显式 max_chars=0 使用原工具的 1000 字符下限,不会变成省略参数时的 60000 字符默认值。原工具读取失败保留原回执,不添加来源;这也适用于工具既有的文本错误协议。已消费的 owner 原消息和原始操作工具结果构成来源表;失败或取消的工具回执保留原状态与错误事实,只能支持对应失败或阻碍,不能支持完成;原始状态缺失保留 unknown。每项保留 canonical 会话/节点引用、自身时间戳、归属周次、原文本及可见引用。助手叙述、压缩总结和生成记忆只能辅助查找,不能证明工作已完成。

生成字段或群聊条目声明来源引用与精确支持引文。代码检查同次运行来源成员、回执可见性、周次、范围、读取权限和上下文预算;独立语义验证逐项核对完成状态、否定、数字及归属。owner 请求和计划仍是请求和计划。未经验证的内容不能成为本地草稿,也不能进入网页填写或提交。用户明确提供的材料保留原有范围验证;表单查看不要求生成内容。姓名和明确置空的可选字段不虚构工作证据;部分修改只要求实际改动内容有来源。

报告周期属于当前受众。生成阶段根据完整原请求解析周期,独立验证结合当前受众及本地日期核对该解析。仅为其他周报指定的日期不能覆盖当前报告的本周默认值;多个受众可以使用不同 ISO 周。解析后按原节点自身日期判定来源归属。工具状态来自原始持久化元数据,缺失时保留 unknown,不能把存储投影的默认值当成 done。

当前 owner 明确提供的事实保留输入的真实时间戳和来源日期。真实当前 owner 输入明确报告之前某周时,可由独立语义验证核实其声明周期,不把输入日期改写为工作日期。此例外只属于 canonical 当前 owner 输入,不放宽历史检索消息的日期资格。生成函数叙述根据原持久化来源稳定归为查找线索,不因当前进程是否导入函数而改变信任。

自然请求的个人报告在模型生成草稿前先读取原始证据。一次原生 list_agents(scope="all", limit=20) 检索按返回顺序跨会话分配,最多选择十个实际分支地址;逐个 read_conversation 读取每个分支最近二十轮,max_chars=6000。调用沿用现有 Runtime 工具策略、gating 与 dispatcher,保留审批、取消和读取限制,拒绝的工具不会通过回退执行。程序发起的真实回执单独记录,不伪装成 provider 工具记录;只将既有最多三十项、18000 字节的已校验来源表提供给字段生成。局部修改保留非空研究内容而缺少原始来源时,最多允许一次有界前置读取和一次重新生成;查看、仅清空、仅姓名和显式结构化材料不强制检索。检索标题或会话列表不能证明工作已完成。

实际程序发起的发现与读取事件通过现有 Runtime 工具节点辅助方法和已绑定的 SessionNodeWriter,保存为当前周报函数的 code 子节点。子节点保留原工具调用与 occurrence ID、参数、结果 JSON、outcome、expose 和时间戳,来源为 weekly_source_prime。真实事件流消费至结束后才继续生成,不虚构 provider 回答或 LLM 节点。已绑定 writer 但缺少父节点或保存失败时停止生成;无 writer 的独立只读调用保留可选历史行为。进程中断不会把未完成调用改成成功。重新加载保留实际记录;新生成重新读取并核验原始事实,不恢复旧来源能力,也不声称外部写入恰好执行一次。

部分编辑保留正文且缺少与原始行的有效机械绑定时,允许一次有限检索与一次重新生成,即使模型提供了非空引用数组。引用归属、可见原文、条目覆盖和周次与最终验证共用检查。已有效绑定原始引用但未通过独立语义验证的内容不会重试。重新生成必须保持完全相同的保留字段集合;清空、仅身份和查看操作无需强制检索。

个人周报正文依据实际事实

表单中的实现、实验、结果、Baseline 和撰写维度只是可选建议。个人本周工作和下周计划只包含用户提供或已验证的工作条目;使用编号时连续编号,不要求凑满五项或保留空维度标题。来源不足说明、未提供记录占位和内部核验备注应进入输入或证据诊断,不能写入周报正文。可选内容没有相关事实时保留既有空白或无的处理。真实未完成任务、失败尝试和阻碍仍可按原始证据报告;缺少某个类别不能被编造成工作或阻碍。

修正仅限个人生成函数。提示删除强制五维模板,以及在必填正文内写资料缺失的要求。证据验证或交付之前,窄范围格式验证拒绝已见的独立缺记录占位文字,包括可选编号和已知维度标签;不静默删行或改写返回事实。其他内部诊断文字由生成提示禁止,并仍受原始证据和语义验证约束。必填事实不足时保留原输入与证据错误处理。已接受引用 schema、原始来源成员、精确引文、owner 归属、读取审批、局部修改范围和远程授权均不变。

验收调用公开个人入口,使用真实自有原始证据校验和受控下层 provider 返回。已见五维占位返回不能生成草稿或发生浏览器写入;用户已有三项本周工作与两项下周计划保留原事实,不补缺失类别或备注。实际有来源的未完成或失败工作仍可报告。既有来源不足、动态读取、部分修改、清空、身份和 schema 拒绝测试保留。自有 DOM 测试不授予或证明真实提交。

实现状态:个人生成提示与窄范围格式修正已实现,并通过独立规格和不同审查者的质量审查。公开测试保留已有工作与计划、拒绝已见占位行,并保留原始来源校验和真实未完成事项。组合源码测试与安装版公开 Workflow 验收仍分别验证。手工填写或用户提交的记录不能证明自动生成或填写;当前真实提交由用户完成,验收不会重复提交。

个人生成字段的来源引用 schema

个人生成函数将来源引用与不变的原始证据验证规则对齐。引用仅针对 this_week、next_week、papers、problems、support,字符串字段的 index 始终为零。身份、reporting_week 和空白或未输出内容不要求工作事实引用。source 的值是已绑定来源表行的 opaque id,不能使用显示用的 source 路径、会话 ID 或消息 ID。quote 保持为该行原始文本中的精确非空片段。metadata 引用和显示路径仍被拒绝,不在生成之后删去或转换来接受错误返回。

个人返回 schema 先复制共享引用 schema,再限定 field、index 和 source 的表示。来源 ID 使用当前二十位小写十六进制表示;提示明确列出当前已绑定 ID,并区分 id 与显示 source。不能将初始来源表设为固定 enum,因为生成期间真实 read_conversation 可能新增合法来源行。新读取 ID 仍必须通过不变的同次运行成员、可见原文、访问权限、来源类型、周期、预算和独立语义验证。schema 合法不授予来源权限。不修改共享 schema、证据验证器、审批、来源捕获、浏览器阶段、模型选择或提交行为。

验收使用公开个人入口、真实原始证据校验和自有 canonical 来源记录。受控下层 provider 返回必须遵守已声明 schema,拒绝 metadata 引用字段和显示路径,并以实际行 ID 与精确引文生成有来源的本地草稿。通过真实 read_conversation 新增的来源 ID 仍可使用。伪造 ID、改写引文、不支持的事实和错误周期继续被拒绝。完整生成、部分修改、清空、仅身份和来源不足处理保留现有契约。这些受控检查不包含远程填写或提交。

实现状态:个人包内 schema 和提示修正已实现,并通过独立规格和不同审查者的质量审查。经审查的包已导入本地;安装后的草稿验收要求组合后的官方 App 更新。来源成员、精确引文和语义验证规则保持不变。

跨子进程保留 owner 提供的来源上下文

个人 first-class 入口在新子进程执行。执行请求保留 runtime 身份和非交互审批,不转换成 owner 请求。独立且不可变的来源引用只携带父进程 canonical 当前 owner 消息,由可信已接收请求捕获,不读取程序参数作为身份依据。引用保存会话、原消息 ID、精确输入、principal、原 owner 身份、会话存储标识和所属 execution。子进程仅在当前 execution、principal、会话和存储完全一致时解析。原始 user 角色、精确正文、读取权限、来源类型、字节预算、时间戳和独立周期语义检查保持必需。缺失、其他用户、助手、重放和其他存储的引用不能提供事实;拒绝的聊天读取没有回退。generic 进程内调用沿用当前 owner 路径。工具参数不能授予 owner 身份,报告内容不能改变审批或提交授权。

实现状态:owner 提供的来源上下文传递已实现,并通过独立规格和不同审查者的质量审查。已安装公开个人入口使用 Codex 读取 canonical 当前 owner 输入,为五个正文内容字段生成精确来源引用,并通过独立语义验证,返回草稿预览,未填写或提交表单。实际 DeepSeek 返回中验证回显改变标点时仍被精确条目匹配拒绝;这次 Codex 草稿成功不能证明所有模型均已通过验收。个人引用 schema 修正已通过不同审查者的质量审查并导入本地;安装验收仍待组合后的官方 App 更新。浏览器检查、字段填写和已授权提交仍分别要求实际验收。

实现状态

自然请求证据校验已实现,公开来源绑定、受众周期、原始执行元数据、当前 owner 时间归属与原工具读取参数语义已通过独立 specification 复审和非作者 fresh quality 审查。自然请求的有界原始证据前置读取已实现,并通过独立 specification 与 fresh quality 审查。真实模型探针已有实际原始来源读取回执,但草稿仍需证据审核,未获接受或发送。真实飞书六个字段的只读关联已验证。安装 App 的组合验收、字段填写及精确读回、授权提交仍分别验收。