Files
AgentLab/scripts/copy-allow.json
T
ThearchyHelios a9d7cba884 定时任务复核修正(第 1 轮):重启挂起的运行不再让任务静默停摆,格式选错、地址发不出去时照实报,整份回写不再丢掉到点的触发
- 挂起:上一次运行在服务重启时被挂起(interrupted、没有待审批)不会自己接着执行,之后每次触发都按重叠跳过,原因写
  「还没有结束」,一条通知也不推,任务就此静默停摆。interrupted 照规格仍算没结束,但跳过原因按挡路的运行分三种写
  (仍在进行中、正在等待审批、已挂起并请在「记录」中继续运行或放弃),运行编号写成界面上的 #前 6 位,去掉「按设置」;
  挂起的那次按 failed 事件推一次,写明原因和处理办法,不是每次触发都推。停在审批时每停一个审批点推一次(已处理状态
  带上第几段执行,以前第二个审批点不再推);审批刚批完、还没接着执行(answered)不当挂起
- 没有结束时间的失败运行(服务重启时还在排队、被改成 failed)永远不会封存:等封存改按最后更新时间算,以前按「现在」
  等,每一拍都等、永远不推
- 平台错误码按地址的主机认,不看所选格式:格式和地址对不上时,测试显示「已送达」、正式推送记成功,群里却收不到;
  现在记失败并带上平台的错误码。群机器人的地址(飞书、企业微信、钉钉)保存时要配它平台的格式,否则 422;格式省略时
  按地址认。只在地址或格式真改了时查,库里已有的旧设置不挡停用、改名
- 地址校验:端口不是 1 到 65535 的数字、夹着空格或不可见字符(零宽空格、控制字符)、httpx 建不了请求的(主机名不合
  IDNA 规则)保存时就回 422 和中文说明;推送时另兜住 InvalidURL 和其他异常,测试接口不再回 500 或英文报错;端口写错
  的地址也照样取出主机名
- PATCH 看值变没变,不看键在不在:整份表单回写不再重新校验没改的工作流(工作流删了也能停用),cron、时区、启用状态
  真改了才重算下一次触发。启用着改 cron、时区时,从原来那个到点的时刻接着算,新表达式也覆盖那一刻就还发起这一次。
  补两人同时保存的测试,证明条件 UPDATE 守住了乐观锁
- 发起中的占位:接口读到正在发起的触发按「已发起」给(run_id 为空),不再闪一次「未能发起:服务在发起运行前停止」;
  库里仍先写占位,进程被强杀时照实说没有发起
- stop:先置停止标志再取任务,这一拍收尾不再新起通知扫描(以前会落下一个不在等待名单里的通知任务);循环和通知两件
  事并行等,宽限缩到 3 秒和 1.5 秒,给关停时的 run_manager.shutdown 留出 docker stop 的大半时间
- 通知正文:立即运行写「手动触发」,补发标明「错过后补发」;失败不再写「原因:运行失败,详情请查看运行记录」,改写
  失败节点的名字和处理办法;状态叫法和界面一致(等待审批,已挂起,可继续运行);「封存哈希」改叫「清单哈希」,运行
  编号写 #前 6 位;测试消息只说收到它证明得了的事(企业微信、没配密钥时不提签名)。测试接口的 message 改成 ok、
  http_status 之外的补充说明(送达时提醒去接收端确认,失败时是原因),前端接在「测试消息已送达(HTTP 200)」后面不再重复
- 422 文案:不回显 Python 的值(None 写「未填写」,列表不原样回显、点出不认识的那一项),格式、事件写中文名;
  copy-allow.json 为平台名「钉钉」加一条(和前端包为 terms.ts 加的那条并存,试合并不冲突)
- test_loop_ticks_until_stopped:下一次放在整分上、只认发起的那一条,去掉约 1/60 的偶发失败
- 逐个做过变异,改回后对应测试都变红:挂起不推、跳过原因退回旧写法、没结束时间按现在等、错误码只看格式、去掉版本
  条件、到点保留和值比较一起去掉、不屏蔽发起中的触发、stop 既不查停止标志也不兜底、answered 当挂起、审批状态不带段号、
  不建请求校验地址、保存时不查格式
2026-10-05 10:00:25 +08:00

66 lines
3.1 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"说明": "scripts/check-copy.mjs 的白名单。每条:file 文件(相对仓库根)、text 命中的那段字符串里的一个片段(按包含匹配,不按行号,免得挪行就失效)、rule 规则 id(见 check-copy.mjs 的 RULES)、reason 为什么保留。对不上任何命中的条目会报失效,要删掉。",
"entries": [
{
"file": "frontend/src/canvas/nodeDefs.ts",
"text": "metrics_from(口径卡节点 ID)",
"rule": "键名",
"reason": "出具契约是 JSON 配置框,用户要照着键名手写 JSON;帮助文字在字段旁边列出可写的键,每个键后面都附了中文说明(配置界面允许附键名)"
},
{
"file": "frontend/src/canvas/nodeDefs.ts",
"text": "allow_numbers(允许无出处的数字)",
"rule": "键名",
"reason": "同上:出具契约 JSON 可写的键,附中文说明"
},
{
"file": "frontend/src/pages/ToolsPage.tsx",
"text": "mcp:服务名/工具名",
"rule": "半角标点",
"reason": "MCP 工具的引用写法(mcp:<服务名>/<工具名>),冒号是语法的一部分,用户要照原样写进节点"
},
{
"file": "frontend/src/pages/ToolsPage.tsx",
"text": "mcp:名称/工具名",
"rule": "半角标点",
"reason": "同上:MCP 工具的引用写法"
},
{
"file": "frontend/src/canvas/InspectorSheet.tsx",
"text": "aria-label^=\"移除\"",
"rule": "半角标点",
"reason": "CSS 选择器(querySelector 用),不是界面文案;引号是选择器语法,「移除」「删除」是按读屏名排除按钮"
},
{
"file": "frontend/src/canvas/LineageLayer.tsx",
"text": "content: \"引用\"",
"rule": "半角标点",
"reason": "注入的 CSS 规则,::after 的 content 必须用 CSS 引号;界面上显示的只是「引用」两个字"
},
{
"file": "frontend/src/pages/ChatPage.tsx",
"text": "5 家供应商",
"rule": "供应商",
"reason": "按用户数据源描述里的业务词(采购、供应商)造的示例问法,这里的「供应商」是采购供应商,不是模型接入"
},
{
"file": "backend/app/scheduler/webhook.py",
"text": "钉钉",
"rule": "钉",
"reason": "「钉钉」是 Webhook 通知的平台名(定时任务的消息格式:通用 / 飞书 / 企业微信 / 钉钉),用在格式不可选、格式和群机器人地址对不上的报错里,不是「钉住」的意思"
},
{
"file": "backend/app/seed.py",
"text": "print(json.dumps(...))",
"rule": "半角标点",
"reason": "模板里「写代码」节点的系统提示(写给模型),print(json.dumps(...)) 是代码示例,半角括号和省略号是 Python 语法"
},
{
"file": "backend/app/api/copilot.py",
"text": "报告按 [[i:字段名]]",
"rule": "半角标点",
"reason": "[[i:字段名]] 是报告里引用运行输入的标记写法,冒号是语法的一部分,提示用户照原样写"
}
]
}