Commit Graph

14 Commits

Author SHA1 Message Date
ThearchyHelios df6c3ce10d 定时页照实显示非工作流目标;评测停止时几臂一起收尾;工作流题的测试
为什么:这一波后端开始接受评测题集、数据源维护这两种定时目标(总方案 X4),定时页要能把它们照实列出来、点进去
不报错;界面上不能有点了没用的入口。

- 定时页列表:非工作流目标写种类(评测题集 / 数据源维护)和目标名,不标运行类别,「编辑」写成「查看」
- 详情:非工作流目标的设置只读地列出名称、目标、频率、时区、补发宽限,不出工作流那张表单(选工作流、输入模板、
  Webhook 对它们不适用);页头的启用、立即运行、删除和触发历史照常
- 立即运行发起的是一次评测时说「已发起一次评测」(以前会落到「未能发起运行」);触发历史写评测的编号
- types.ts:Schedule 加 target_kind / target_id / target_label / target_name / target_exists,触发记录加 eval_run_id;
  文案进 SCHEDULE_TEXT
- check-schedules 加一段「目标不是工作流的定时任务」
- runner:还没准备好就被停下、出错时,按 pair_id 找全几臂一起收尾
- 测试:工作流题按钉住版本跑探索运行(不发正式运行、不建图);钉住基线的接口
- 后端几句给人看的话按文案规范改(不用「跑」「钉」)
2026-10-16 17:04:05 +08:00
ThearchyHelios 2fb16c2719 设置页加「通用」标签放对外访问地址;环境变量指定时显示「由环境变量指定」不可改,定时任务里的入口跟着认
服务端已经只认一个对外访问地址(core/public_url.py),界面上这一项以前只在定时任务的 Webhook 一节里改得到,叫「服务
访问地址」,和设置接口、通知里的「对外访问地址」两种说法;环境变量设了时那里照样能改,改了也不生效。

- 新增「设置 → 通用」(pages/settings/GeneralTab.tsx):写明它管哪几件事(通知和 Webhook 的链接、单点登录的回调、来源
  核对);管理员能改,保存前先重读 notify 一组、只换这一项,末尾的 / 去掉,带 ? 或 # 的当场标错;改了没保存离开先问;
  环境变量指定了的只显示它、写明「由环境变量 AGENTLAB_PUBLIC_URL 指定」,不给输入框;搭建者只看。使用者看不到这一页
- 定时任务 Webhook 一节的快捷入口改叫「对外访问地址」,按 GET /api/settings 的 public_url 一组认:环境变量指定的只显示、
  不给修改按钮,设置里存着的旧值不再冒充生效的那个;地址校验和「通用」同一个(lib/publicUrl.ts)
- 文案进 lib/terms.ts(GENERAL_SETTING_TEXT,SCHEDULE_TEXT 的 linkBase 一组改说法)

检查:check-manage 加「设置 · 通用:对外访问地址」一节(标签、说明、校验、离开先问、只写 notify 一组、环境变量只读、
搭建者只读);check-schedules 加「对外访问地址由环境变量指定」一节。check-manage、check-schedules 在隔离的一套后端 +
vite 上全部通过,tsc、check-copy 通过。
2026-10-16 10:31:26 +08:00
ThearchyHelios 941723b17c 端到端验收修复与指标出具:
- 身份与工具:登录页建第一个管理员(认人接口的 401 说明能不能建);搭建者有只读的人和组名录,选人给候选并核对名字;授权三行带标题;端点请求头名校验(空名、非法名存不进、发不出时说清原因);写入能力在工具页试运行一律演练、不发送,HTTP 状态照实说成败;写记忆不算只读、查询能力只能选同一端点上的只读能力;审批与遮罩的说法和实际规则一致;开登录时不要署名、导入和发布记登录的人;使用者不显示推演等只给搭建者的操作,403 按是否开登录说话;登录页只认一次人
- 流程与实例:图里用到的岗位(派给谁、超时升级给谁、发送确认派给谁)全部派生、没绑人的发布时报错;写外部系统的参数按能力声明的类型收拢后再算哈希和发送,收不成就不发;发起人的实例页只看这一步的状态,处理人才给待办卡;会签进度带登录核实和时间,升级后照实写规则;实例状态写流程的结论(已退回、未确认、等待核实写入结果),核实生效后不再挂失败原因;流程应用首页不派生最近封存运行的结果块,看板没数据时是安静的空态;样例⑩的金额带类型和下限、待办标题带金额,表单上下限前后端一起生效
- 看板与证据:定时任务模板加 ISO 周、上一 ISO 周、本月、上月;出处链穿过原样解析查询结果的整形节点,追不到原始数据的照实说停在哪里,样例⑨改用 cell();应用首页和版本历史都能做成应用;指标块单位不重复;版本列表带退役说明;定时任务页头跟着刷新;删视图要确认、新视图能起名;编辑器属性用中文名、术语带解释
- 指标出具(用户 2026-10-15 拍板):契约只写「指标来自」、上游没有报告撰写节点、成果里没有模型写的话时按指标出具——必需指标齐、指标输入追到原始数据、成果字段里的数回指得上才完整出具;受管级要求每个指标静态地追到原始数据(governed.metric_untraced);出具横幅和应用印章写明按指标
- 受管工作流降为已发布只给管理员(Q8 顺延,服务端同样拦);工作流接口带当前发布版的级别,画布上改过之后也认得出受管工作流
2026-10-15 07:15:37 +08:00
ThearchyHelios df6b0dd3ae M4:触发历史的翻页游标写成 Z 结尾,照原样拼进查询串也能翻页
next_before 原来是「2026-10-06T14:37:03.376320+00:00」,照接口说明「原样传回」拼进地址时「+」被查询串解成空格,
回 422「翻页位置需要是接口返回的 next_before」。界面用 URLSearchParams 编码不受影响,照说明写脚本、做集成的会撞上。
现在游标是 UTC 的 Z 结尾、精确到微秒(和运行列表的游标一个写法,放进地址不用编码);解析时 Z、+00:00、被解成空格
的「 00:00」(老的游标照原样拼进地址时就是这样)都认,不是时间的照旧回 422。check-schedules 的假接口照服务端用记录
时间作游标,另加一节:老服务端给 +00:00 的游标时,页面编码成 %2B 传回、第二页接得上、不重复。
2026-10-07 00:02:15 +08:00
ThearchyHelios 53bb356fae 复核第 1 轮:对比入口预先问默认基准带 5 秒超时、问到没有默认基准时写「选择基准对比…」直接去对比页手动选、切回页面时再问一次;工件页签的悬停照实写,320px 时校验值和大小不再拆开
- 对比入口(pages/runs/compare/entry.tsx):预先问 compare/base 卡着不回时 5 秒后按没问到算,叫法退回「与上一次对比」、可点,不再一直停在不可点的「正在查找」;问到没有默认基准(多为工作流的第一次运行)时写「选择基准对比…」,点了直接去只带本次的对比页手动选(对比页自己再找一次),不再写「与上一次对比」、点了再问一遍弹提示;切去别的标签页再切回来时再问一次,问的期间保留原来的叫法、可点,问到不一样才换,问不到不改;更正预先问那段注释的前提(compare/base 不回 409、422,不先问是因为这些入口本来不给点)
- 运行详情「工件」页签头的悬停写上证据快照、核查记录和每个节点的产出三组(RUN_ARTIFACTS_TEXT.tabTitle,RunDetailView 只换这一处);证据快照的悬停不再说「结论里的数字从这里来」,点明含核查、质询时执行的查询;核查记录的悬停用行上的种类名,指明其间执行的查询见「证据快照」;两句都在 45 字内
- 工件行的校验值和大小包在一起排、一起折行,这一栏窄于 22rem 时收起校验值:320px 下大小不再单独折到种类下面,每行仍是两行
- 对比页没带运行时的说明缩成 32 字,不逐个列菜单项的叫法
- 检查:check-compare 补预先问超时、没有默认基准、切回页面再问、点了才发现没有基准后叫法跟着改、工件页签悬停几节;check-verify 改两组悬停的断言、补 320px;check-schedules 的假 compare/base 补上 previous: false(和服务端一致),断言运行详情菜单项与触发历史链接的叫法一字不差
2026-10-06 18:25:35 +08:00
ThearchyHelios 1bee9b5100 触发历史不再给基准已过时的自动对比;对比页找不到默认基准时标题不再和「可在上方选择」打架,换基准的下拉和基准卡写明失败、取消的运行
- 中间失败的那次事后被接着运行成功之后,第 3 周存着的那份对比(比的是第 1 周,previous 为假)和运行详情「与上一次
  对比」的默认基准(现在是第 2 周)又对不上,两处却都写「上一次成功的运行」。auto_compare.outdated 对基准当时就不是
  紧挨着的上一次的那几份按 pick_base 现挑一遍,基准变了的算过时;api/schedules._fire_outs 对过时的给 null(不给链接、
  不给旧计数),两个同名入口比的始终是同一对运行。基准没变的照旧给:中间那次还没结束、后来失败、被删掉都一样。紧挨着
  的上一次不会过时(两次之间插不进新的运行),不核
- test_base_follows_launch_order_not_finish_time 补上:接着运行完之后第 3 周的触发记录不再带对比、任务列表的 last_fire
  同样不带、运行详情的默认基准是第 2 周;另加一条基准仍是挑出来的那一次时照旧给出
- 对比页找不到默认基准:标题由「未找到可作为基准的运行」改为「没有默认基准」——失败、取消但封存了的运行不当默认基准,
  却照样能在上方手动选;服务端的原因改成「没有找到上一次成功的运行:需要同一工作流、同一运行类别里比这次先发起、成功
  结束并已封存的运行」,运行详情弹出的提示单独读也说得清
- 换基准的下拉给失败、已取消的运行写上状态,基准卡也标出来;下拉说明补一句默认基准只取成功结束的运行
- 运行详情「更多」的菜单项点之前不知道基准是哪一次,基准不是紧挨着的上一次时仍叫「与上一次对比」,和触发历史的叫法
  不同:注释照实写明,留作后续
2026-10-06 13:33:40 +08:00
ThearchyHelios a18b24ab6f 对比页与触发历史照实说「上一次成功的运行」:两个同名入口打开同一对运行、写同一句来历
服务端的默认基准和自动对比已经共用一个挑法(只挑比本次先发起、成功结束并封存的运行),界面上的说法跟着改:

- 对比页的「默认基准:…」改成「同一定时任务上一次成功的运行」「同一工作流、同一运行类别上一次成功的运行」;运行详情
  查找基准时的提示、没带本次时的说明同样改成「上一次成功的运行」
- 触发历史的「与上一次对比」:基准不是紧挨着的上一次(previous 为 false)时,链接上看得见的字写「与上一次成功的运行
  对比」,触屏、键盘聚焦都看得到,悬停照旧写是哪一次。两种都带上「同一定时任务」的来历:新的说法对这两种都成立,
  对比页和从运行详情进去时一字不差
- check-compare:两种来历的说法;运行详情「更多」和触发历史两个入口打开同一对运行、写同一句来历、摘要一致
- check-schedules:previous 为 false 时看得见的字(含键盘聚焦、390px 窄屏);两个入口拿同一个基准
2026-10-06 12:05:40 +08:00
ThearchyHelios 5e8d2c9c36 定时任务自动对比复核整改(前端):页头的定时任务链接在窄窗口里不再被挤没、带日历图标、任务删了写纯文本;触发历史的对比入口改叫「与上一次对比」并写出有几个指标有变化
- 运行详情页头:元信息这一行改成可换行,定时任务链接至少留 7 个字宽。以前这一行不换行、只有链接能缩,820 宽的探索
  运行只剩「由…」,768 宽为 0,Tab 停在看不见的链接上,「2 条事件」被压成竖排。链接前加和「定时」标记一样的日历
  图标,平时看得出能点。取回的定时任务列表里没有这个任务(已删除)时写成纯文本「由定时任务「X」发起(已删除)」,
  不再链到「不存在」页;列表取不到时不算删除
- 触发历史:「对比上一次」改成和运行详情「更多」菜单同一个叫法「与上一次对比」(复用 RUN_COMPARE_TEXT.menu),旁边
  写「N 个指标有变化」,触屏和键盘也看得到变化的规模,悬停照旧写各类个数。基准不是紧挨着的上一次(服务端给
  previous: false)时悬停写明是哪一次,也不再带「默认基准:同一定时任务的上一次运行」的来历
- 「通知中的运行链接」改成「通知中的链接」,说明里写清对比页链接也靠这个地址
- check-schedules:对比入口的叫法、计数、previous 为 false 时的悬停和来历;页头链接在 768、820 宽(含「提取为草稿」
  的探索运行、署名的立即运行)写得下「由定时任务」且「条事件」不竖排、Tab 到时看得见;图标;定时任务删除后的纯文本
  和列表取不到时照旧是链接;390 宽深浅色下计数在屏幕里、对比度够
2026-10-06 08:49:10 +08:00
ThearchyHelios f8ac8dc1d6 定时任务自动对比收尾:基准那一次不在终态或被删时不给对比、对比工件读不出来时触发历史照常打开;检查脚本按实际底色量对比度
- 触发历史的 compare:以前只看这一次的运行在不在终态。基准那一次被强制删除、失败后被继续执行时,对比页比不了,
  「对比上一次」链过去只会报错——基准一侧同样要在终态,否则给 null
- 对比工件读不出来(权限、磁盘出错)时记一条警告、给 null:以前 OSError 直接抛出,整页触发历史回 500。被改过
  (内容与哈希不符)的以前就给 null,这次补上用例
- check-schedules:页头的定时任务链接、触发历史的「对比上一次」改成量 WCAG 对比度(≥ 4.5),底色顺着祖先叠到
  不透明为止。以前比的是「字色不等于页头的底色」,页头本身透明,那样比永远成立;深色也补上同样的检查。另加一项
  署名的立即运行配长名字:署名照写、链接截断、页头不横向溢出
2026-10-06 07:43:01 +08:00
ThearchyHelios 863b0b2894 定时任务前端:触发历史加「对比上一次」,运行详情页头的「由定时任务「X」发起」改成键盘可达的链接
- 触发历史:服务端给了 compare 的那次触发,在运行链接前加「对比上一次」,链到对比页(本次是这次触发的运行、
  基准是服务端自动对比时取的同一任务上一次),带上来历让对比页写「默认基准:同一定时任务的上一次运行」。悬停写
  各类指标的个数,和 Webhook 通知那一行同一个写法(三类总写、其余有才写、两边都没有指标时不写一串 0 个),读屏
  当说明念;只有个数。compare 为 null、老服务端不给时不显示
- 运行详情页头:定时任务发起的运行,「谁发起的」那一段换成到 /schedules/:id 的真链接(Tab 到得了、回车能开,
  有焦点环)。到点发起的(署名是「定时任务:X」)整句换成「由定时任务「X」发起」,不再写两遍;有人署名点了
  立即运行的,署名照写、后面接「来自定时任务「X」」。名字取定时任务现在的名字,取不到用署名里记的;长名字截断,
  全名在悬停里。记录页「定时」标记的说明同步改成指向这里
- types.ts 定时任务那一段加 ScheduleFireCompare 和 ScheduleFire.compare;文案进 SCHEDULE_TEXT
- check-schedules:触发历史的对比链接(地址、悬停的计数、只在有 compare 的行出现、Tab 到得了、回车打开对比页)、
  运行详情页头的链接(现在的名字、真链接、不重复署名、Tab 到得了且有焦点环、回车去定时任务、署名的立即运行、
  手动运行没有、长名字截断不撑宽、浅色可读),390px 深浅色下对比链接在屏幕里、看得清
2026-10-05 18:58:25 +08:00
ThearchyHelios 4b972b4f43 定时任务前端复核修正(第 2 轮):错过已跳过的悬停不再替服务端认定是超出补发宽限,没有记原因时不指向不存在的原因
服务端把两种没有补发的触发都记成 kind=misfire、status=skipped_misfire:一是超出补发宽限,二是在宽限内恢复时
积压的那几次(只发起最近一次,更早的不补)。触发类型「定时」的悬停却一律写「错过后已超出补发宽限」,积压那条的
原因写的是「积压的触发不补,只发起最近一次」,同一行给出两个互相矛盾的原因,而这条明明是在宽限以内被跳过的。

- 触发类型的悬停改成不点明原因:「按计划应在此时触发,错过后没有补发,原因见本条记录」;本条没有记原因时去掉
  「原因见本条记录」。
- 结局悬停的兜底说明(本条没有记原因时用)一起改:错过已跳过不再写「超出补发宽限」,两种原因都适用;发起失败
  不再写「到点」(手动立即运行也会发起失败),也不再写「原因见本条记录」(用到兜底时本条恰好没有原因)。
- check-schedules 的触发历史夹具按服务端的原话各放一条积压不补、超出宽限的跳过,外加错过已跳过、发起失败各一条
  没有记原因的;断言整行连同各处悬停只说本条记的原因,不说另一种,不指向不存在的原因。修复前这几项红 5 项。
2026-10-05 11:05:42 +08:00
ThearchyHelios defd118ea6 定时任务前端复核修正(第 1 轮):时区检查改成真能拦住,服务端会拒的组合当场拦下,修几处时序问题
- check-schedules:浏览器本机时区改成 America/Los_Angeles,和夹具里的 Asia/Shanghai、America/New_York 都不同。列表的下次运行和上次触发、触发历史 20 行、预览 5 个时刻,都改为比对按定时任务时区写出的原文;假预览照真服务端那样按所选时区排时刻。把页面改成按本机时区显示的变异会让 6 项变红。原先恒为真的「只读」断言改为真正检查写请求。
- 测试消息的结果:服务端的 message 只是补充说明时接在结局后面,已经是整句时不再套一层,状态码只写一次(webhookTestText)。
- 正式运行 + 工作流没发布、必填输入没填、填了已发布版本里没有的字段:照服务端保存时的核对规则当场拦下(新建总查;修改只在改了工作流、运行类别或输入时查),说明写在对应那一项下面。保存被拒、服务端指明 run_class 或 misfire_grace_s 时,说明也写在那一项下面。
- 保存被 422 拒绝后,改了被指出的那一项,字段下的说明和底部的「保存失败」就收起;名称框的 aria-invalid 和 aria-describedby 也把服务端的说明算进去。
- 时序:列表和详情页在写操作成功时作废还在路上的读,晚到的刷新不再把开关盖回旧值。详情页先开触发历史再切到设置时,版本对齐到表单所基于的那一份。保存途中又改了别的字段时,只保留途中改的那几项,替换过的 Webhook 地址不再以明文留在输入框里。
- 其他:预览时间改用 parseServerTime 解析;换工作流时,自动填的名称跟着换;开关遇到 409 用前端自己的说明,服务端原话放进详情;错过且超出宽限、没有补发的触发,类型写「定时」而不是「补发」;记录页的「定时」标记让读屏念出是哪个定时任务发起的。
- 未达标:记录页的「定时」标记在整行的按钮里面,键盘到不了。键盘能到的入口要加在运行详情的页头,或者把整行改成「打开运行」按钮和链接并排的结构,这两处都不在本包的文件范围内,留给集成时处理。
2026-10-05 10:26:22 +08:00
ThearchyHelios c77a7f38d5 check-schedules 换成真检查
真页面走真的应用外壳,接口全部在浏览器层答掉:定时任务、触发历史、预览、变量、工作流列表是虚构的门店周报、库存日报,写请求照接口约定改这里的假状态(PATCH 核对版本、Webhook 地址省略即不改、空串即删除);设置读真的、只换 notify 一组和主题,别的写请求一律拦成 503,不碰真实写接口。

查的是:
- 纯函数(借 vite 转译 model.ts):预设生成的 cron、cron 落回预设、按时区写时间和偏移(含夏令时)、距下次运行的取整、修改时只交改了的字段、Webhook 地址和密钥的省略与空串
- 列表:名字、工作流、频率说法、下次运行(相对加按时区的绝对时间、悬停看时区)、上次触发链到运行、暂停和跳过照实写;空态、老服务端
- 启用开关发 PATCH 且带版本、再点带新版本、409 说原话并重新载入、键盘空格切换
- 立即运行发 POST 并说结果(发起、跳过、被拒)、「查看运行」直达;删除先站内确认
- 新建「每周一 09:00」:工作流可搜索、默认勾周一、正式运行字段取已发布版本、点变量插入、预览 5 次触发和渲染结果、预览防抖,POST 的 cron、时区、输入模板、Webhook 逐项核对;创建后地址只显示 url_hint、页面和输入框里都没有完整地址
- 非法 cron、不认识的时区和变量:说明写在出错那一项下、标 aria-invalid、清掉旧的预览、不能保存;离开前确认
- 详情:只改事件时不带地址、替换地址、删除 Webhook、发送测试消息、运行链接地址写 notify 组;页头开关之后表单用新版本、别处改过时 409 给重新载入
- 触发历史分页(before 游标、去重、已全部加载)、各种类型和结局、原因和通知结果;直接打开触发历史不先请求表单的预览
- 记录页的定时标记:只标定时发起的、悬停写定时任务名、点了去定时任务不打开运行
- 390px 深浅色:列表、新建表单、触发历史都不横向溢出,按钮在屏幕里,窄屏预览排在频率下面

check-all 里 check-schedules 的耗时按实测改成 40 秒。
2026-10-05 09:02:02 +08:00
ThearchyHelios 6041073ef2 检查脚本骨架:check-all 另起的后端带 AGENTLAB_SCHEDULER=0,拷来的数据目录不会替原库到点发起运行、发出 webhook。新加 check-schedules、compare、verify、inquiry、bundle、whatif 六个占位检查(只打一行通过,输出格式和别的检查一样),登记进 ORDER 和 ESTIMATE,各工作包换成真检查 2026-10-04 23:40:20 +08:00