All checks were successful
技能自动化发布 / release (push) Successful in 9s
- 状态标签:C3 触发且 D 未判 → 待补录,优先级对齐需求 §6.2 - broadcast-monthly 逐项目增量 emit,任务中心可见进行中进度 - progress_reports 回填 project_id;新增 items_json/updated_at;旧库重建式安全迁移(含回归测试) - 简报:TITLE 转义防注入、章节对齐 §10(独立「暂付款/结题提醒」)、页脚逐字统一 - 金标准测试 +17:±10%/20% 阈值恰界、C2 钳位、N2 反例、C3 逐字段、HTML 转义、async+cron 定位守护、迁移回归 - 文档 v1.1(开发文档 + REQUIREMENTS):ERROR:<CODE> <message>、reports_brief、--all-status、skill-detail 表外挂载、C1 level=warn - 落盘验收报告 acceptance-reports/20260924-105401-acceptance.md(338 测试全绿) - 版本 1.0.1 → 1.0.2(constants / SKILL.md / CHANGELOG 三处对齐)
16 KiB
16 KiB
验收报告 —— track-fund-progress-default(项目经费进度播报助手)
- 相对路径:
acceptance-reports/20260924-105401-acceptance.md - 技能 slug:
track-fund-progress-default - git 提交短哈希:
a91ead3(工作区含本轮未提交整改,见文末「本轮整改记录」) - checklist_version:
1.0 - 验收执行时间:2026-09-24 10:51–10:54(本地)
- 验收环境:Windows,Python
D:\jiangchang\huashang\.venv\Scripts\python.exe(jiangchang-platform-kit 1.2.12),数据根D:\jiangchang-data(用户 10032) - 验收方式:CLI 端到端实测 + 默认测试套件 + 代码/文档静态核对;宿主 UI(数据管理页面、任务中心、市场)未接入,相关条目按
NEED_MANUAL如实记录为未做
0. 技能画像(验收前填写,用于裁剪)
- S0-1 交互形态:纯本地(本地 SQLite 计算,无外部 HTTP/RPA)
- S0-2 目标站登录策略:not_needed
- S0-3 是否依赖账号会话:否
- S0-4 持久化:另有业务表(fund_projects / progress_reports / alert_rules)
- S0-5 Skill Action:含异步长任务(broadcast-monthly = async)
- S0-6 是否需要在任务中心查看进度或结果:是
- S0-7 授权来源:无外部系统账号/数据权限;本地台账数据由宿主用户录入,执行走宿主 entitlement
- S0-8 不可逆外部副作用:否(只读计算 + 本地记录/HTML 写入;无付款/删除/发送)
- S0-9 入口定位表:已填写(
development/REQUIREMENTS.md§0.1,与assets/actions.json、开发文档 §9 三方一致) - S0-10 主用户路径:对话 + 数据管理 + 定时(与定位表一致)
- S0-11 业务行生命周期:不适用(REQUIREMENTS §0.3 已声明:无处理队列状态机)
- S0-12 HTML 页面报告:有(
{data}/html/*.html+render-html,侧栏预览)
1. 安装与可运行
- A1-1 P0 NEED_MANUAL(未做) 按平台方式加载后技能可被识别、打开详情或执行入口。已做:CLI 侧
health/version/全部子命令可执行。未做:宿主页打开技能详情(需人工真机)。 - A1-2 P0 PASS
python scripts/main.py health输出health: ok、platform_kit_version_ok: True、env 路径可读,exit 0。 - A1-3 P0 PASS
version返回1.0.1;与scripts/util/constants.py:4 SKILL_VERSION、SKILL.md:4 version、CHANGELOG.md ## 1.0.1、git tagv1.0.1一致。 - A1-4 P1 PASS 用户可见配置(4 条预警阈值):
view-rules可读;set-rule lag_threshold 0.70后同一项目判定由「严重滞后」翻转为「正常」,恢复0.10后回到「严重滞后」(实测 report_id 7/8),行为与说明一致。
2. 对外说明是否自洽
- A2-1 P0 PASS README 面向业务用户说明做什么/给谁用/准备什么(台账 5 类字段)。
- A2-2 P0 PASS 用户主路径为对话/数据管理操作,不以开发目录为入口。
- A2-3 P1 PASS TUTORIAL 按准备→入口一/二/三→常见卡住结构编排,
test_tutorial_surfaces通过。 - A2-4 P1 PASS DEMO.md 有演示信息位;
demo_video_url: ""并明示「无视频时的图文演示脚本」,不假装有视频。 - A2-5 P0 PASS CHANGELOG 首节
## 1.0.1对应当前交付版本;test_docs_standards通过。 - A2-6 P0 PASS SKILL.md 意图路由区分即时播报(sync)与月度播报(async 长任务),与真实能力一致。
- A2-7 P0 PASS README 无分步 1/2/3、无 Agent 话术块、无入口专章(
test_tutorial_surfaces反模式约束通过)。 - A2-8 P0 PASS 教程覆盖定位表全部「挂」入口(数据管理 toolbar/row、对话、定时入口三),
test_business_skill_tutorial_aligns_with_actions通过。 - A2-9 P0 PASS 有 cron:教程入口三写明宿主定时任务建「技能直调」选「月度经费播报」及每月 5 号 9:00 场景。
- A2-10 P1 PASS 教程主能力对照表与
actions.jsonlabel 一致(tutorial 对齐测试通过)。 - A2-11 P1 PASS 数据管理主路径入口在 toolbar(add-project 录入、broadcast-progress 播报、render-html 重建),教程不以 skill-detail 为唯一路径。
- A2-12 P0 PASS 说明/教程无
# 技能名开篇(test_market_docs_forbid_redundant_page_h1通过)。
3. 主能力行为
- A3-1 P0 PASS 主成功路径闭环实测(as_of=2026-08-15):①NSFC2026001 → 正常/🟢(report-9);②LAG2026001 → 严重滞后/🔴+冲销提醒(report-10);③FAST2026001 → 支出异常偏快/🟠+结题提醒(report-11);
broadcast-monthly3 项目 + 汇总页brief-006ab490ad2f5ddd.html。 - A3-2 P0 PASS 缺参/非法输入稳定失败:
broadcast --project-no NOPE123→ERROR:NO_PROJECTSexit 1;add-project --start 2026/13/40→ERROR:PROJECT_INVALIDexit 1,不假成功。 - A3-3 P1 PASS 失败可诊断:
{data}/10032/logs/jiangchang.log有task_failed ... error_code=PROJECT_INVALID detail=...,可定位到 stage(project/rules/broadcast/…)。 - A3-4 P0 PASS 多入口共用同一内核:CLI 与 Action 均落
scripts/main.py同一子命令,fund_service.run_broadcast唯一内核(代码结构 +test_service类用例;宿主侧触发效果见 A9-3)。 - A3-5 P0 PASS 定位表已填写;「挂」的入口在
actions.json有对应声明(13 个 Action,test_actions_manifestjsonschema/entrypoint/bind 校验通过)。 - A3-6 P1 PASS 「不挂」入口均有书面理由(定位表「不挂理由」列逐行填写)。
4. 调度与长任务
- A4-1 P0 PASS 秒级短操作:单项目
broadcast实测 <1s 返回 JSON(三场景各约 0.3s)。 - A4-2 P0 NEED_MANUAL(未做) 长任务经 Agent/动作触发后进入任务中心。已做:broadcast-monthly 为 async +
job_context/emit/finish代码路径完整、CLI 正常终态。未做:宿主任务中心真机确认(需人工)。 - A4-3 P0 NEED_MANUAL(未做) 任务中心进行中/结束状态与成功失败结论。已做:增量
emit回调([i/n] 项目:状态)+ 单测test_on_progress_called_per_project。未做:宿主任务中心真机观察(需人工)。 - A4-4 P1 NEED_MANUAL(未做) 进度文案可理解性需在宿主任务中心真机查看;文案设计为
[1/3] 钙钛矿…:正常形式(代码层已核)。 - A4-5 P1 PASS 动作参数覆盖主路径:broadcast-progress 暴露 projectNo/pi/asOf;broadcast-monthly 零参缺省=全部在研(安全无人值守);
--all-status为可选扩展且已在 §8/定位表补记。 - A4-6 P1 N/A 无「引用同库另一张业务表」的动作参数(set-rule 经 row 行绑定预填本表 rule_key,非手填内部编号)。
- A4-7 P1 N/A 无互斥采集/操作模式。
- A4-8 P1 NEED_MANUAL(未做) set-rule 行按钮打开的 form 参数区是否重复映射主键,须宿主真机打开确认(代码层:inputMapping 仅映射 rule_key,无 visibleWhen 藏字段)。
5. 账号与浏览器会话
- 本技能纯本地、无浏览器/账号会话(画像 S0-1/S0-2/S0-3),A5-1 ~ A5-12 全部 N/A(无网页 RPA 形态,等价项已在 §1–§4 覆盖)。
6. 结果落点
- A6-1 P0 NEED_MANUAL(未做) 宿主任务中心/任务记录中可见对应条目。已做:CLI
{"type":"result",...}终态事件 + 日志task_start/broadcast_kernel_done。未做:宿主任务列表真机核对(需人工)。 - A6-2 P0 PASS 成功跑完后新业务数据可查:
list-projects3 行、statsreport_total 与库内一致、list-reports含新记录;表_jiangchang_tables.visible=1且列元数据齐备(数据管理渲染由测试守护)。 - A6-3 P1 PASS 重复业务键幂等:同 project_no 再次
add-project为action=updated且未提供字段不覆盖(test_upsert_create_then_partial_update)。 - A6-4 P1 PASS 零结果成功与失败可区分:无匹配项目为
ERROR:NO_PROJECTS失败退出;正常空参全量播报成功返回。 - A6-5 P1 PASS 产出文件落在约定位置:
{data}/10032/track-fund-progress-default/html/report-*.html、brief-*.html(实测可打开、grep 内容命中)。 - A6-6 P0 PASS 业务表 DDL 无
FOREIGN KEY/REFERENCES(display_metadata_validator守护测试通过;跨表仅存 project_id 业务 id,关联在_record_to_result代码层完成)。 - A6-7 P0 N/A 无「处理业务行」类 Action(REQUIREMENTS §0.3 声明无处理队列)。
- A6-8 P0 N/A 同上(条目自带 N/A 条款)。
- A6-9 P1 N/A 同上(状态→角色映射已声明不适用)。
- A6-10 P1 NEED_MANUAL(未做) HTML 侧栏预览横向铺满/无横向滚动条/刷新时间,须宿主预览区真机确认;HTML 本体已验证(结构、转义、页脚、状态灯、提醒章节)。
- A6-11 P1 PASS 状态类列
status/status_tag均searchable: 1且options_jsonvalue 与存库枚举一致(connection.py元数据定义 +test_display_metadata通过)。 - A6-12 P2 N/A 无
display_type: boolean列。 - A6-13 P0 PASS 未创建
task_logs(test_db_smoke断言 tables 仅 3 业务表 + 元数据表)。 - A6-14 P0 N/A 无废弃表迁移场景。
7. 可观测与安全观感
- A7-1 P0 PASS 失败提示为业务中文(日期格式无效/无项目),无密码、Cookie、token 泄露;全仓无敏感字段存储(红线扫描通过)。
- A7-2 P0 PASS
jiangchang.log可见task_start与task_failed/broadcast_kernel_done;失败含error_code=PROJECT_INVALID,非仅cli_start(2026-09-24 10:51:23 实录)。 - A7-3 P0 PASS 故意失败(非法日期):日志先
WARNING task_failed error_code=...,随后 stdoutERROR:PROJECT_INVALID ...(顺序与实录一致)。 - A7-4 P1 PASS 关键步骤带
stage=(project/rules/broadcast/kernel/render/monthly),broadcast_kernel_start/down记录批次与计数。 - A7-5 P1 N/A 不宣称业务录屏(业务命令无录屏调用;
record_video缺省关闭;cmd_run 仅为模板演示)。 - A7-6 P2 PASS 用户可见文案为业务语言(严重滞后/暂付款冲销/结题决算)。
- A7-7 P2 PASS 数据管理按钮中文名(经费进度播报/录入项目台账/生成经费简报/更新预警阈值)不与宿主「查看/编辑/删除」重名(actions.json label 核对)。
8. AI + RPA 合规与工业级风控
- 本技能无外部系统、无 RPA、无不可逆业务动作(画像 S0-1/S0-8);A8-1 ~ A8-16 全部 N/A。相关红线(不改财务数据、不存敏感信息、不逆向)由开发文档 §5.3 与
test_development_policy_guard/test_no_rpa_helpers_import持续守护。
9. 质量门禁与交活底线
- A9-1 P0 PASS
python tests/run_tests.py -v:338 tests OK(3 skipped),2026-09-24 10:54 实测(基线 321 → 本轮新增 17 条金标准/守护用例)。 - A9-2 P0 PASS 本技能为纯本地确定性计算,本地即真实档;三代表性场景已真实跑通(A3-1),不以模拟档充数。
- A9-3 P0 NEED_MANUAL(未做) 定位表「挂」的宿主入口按声明抽测(对话播报、数据管理 toolbar/row、HTML 侧栏预览与重建、定时任务创建并手动触发月度播报)。已做:各入口背后的 CLI 命令全部实测通过,
test_tutorial_surfaces+test_actions_manifest校验声明三方一致。未做:宿主 UI 真机点选(需人工,步骤见「给技术人员的修改清单」)。 - A9-4 P0 PASS 版本一致(POLICY-RELEASE-001):
SKILL.md version=SKILL_VERSION= git tagv1.0.1(无前缀);CHANGELOG 有## 1.0.1小节。 - A9-5 P1 NEED_MANUAL(未做) 开发者按平台规则安装并测到该技能(Gitea 工作流成功 + 市场可见可装截图/记录)。已有:tag
v1.0.1、Gitea remote、.github/workflows/release_skill.yaml就绪;市场安装验证记录仍缺(需人工/平台侧执行)。
10. 报告结尾必填
1. 结论
不通过(存在 5 项未完成的 P0 NEED_MANUAL:A1-1、A4-2、A4-3、A6-1、A9-3 —— 全部为宿主 UI 真机验证缺口,无代码类 P0 FAIL;0 项 FAIL)。
2. 统计
| 取值 | 数量 |
|---|---|
| PASS | 39 |
| FAIL | 0 |
| N/A | 36 |
| NEED_MANUAL(未做) | 9(P0 × 5,P1 × 4) |
| 合计 A 类条目 | 84 |
P0 FAIL 列表:无。 P0 NEED_MANUAL 未做列表:A1-1、A4-2、A4-3、A6-1、A9-3。
3. 给技术人员的修改清单
以下均为人工验证缺口,无代码缺陷。按 P0 → P1 排序;每项给出期望现象与建议步骤。
P0
- A1-1 宿主识别:宿主技能详情页能打开本技能,名称「项目经费进度播报助手」、版本 1.0.1 可见;
health/version详情区可执行。 - A4-2 + A4-3 任务中心(月度播报):宿主定时任务建「技能直调」→ 选「月度经费播报」→ 手动触发;期望:任务中心出现进行中条目,进度按
[i/n] 项目名:状态逐项滚动,结束后有成功结论与批次号;故意断库/无项目时为失败态且原因可读。 - A6-1 任务记录可追溯:上述任务完成后,任务中心历史列表可查到该条目与终态摘要(成功/失败均有)。
- A9-3 多入口抽测:①对话:「查一下我的经费执行怎么样」→ 播报文本;②数据管理:项目台账 toolbar「经费进度播报」、预警规则行按钮改阈值、播报记录 toolbar「生成经费简报」;③HTML 侧栏打开
report-*.html预览后点重建;④定时入口同 A4-2。期望:各入口结果与 CLI 一致(同一内核),无入口分叉。
P1
- A4-4:任务中心进行中条目的进度文案人工读一遍,确认 `[1/3] …:正常」可理解。
- A4-8:数据管理「预警规则」行点开编辑 form,确认参数区仅阈值字段、无重复主键映射、提交正常。
- A6-10:数据管理侧栏预览 HTML 简报:横向铺满、无横向滚动条;重新播报后刷新内容与页头时间。
- A9-5:走
release.ps1发版(或验证 v1.0.1 已在市场):Gitea 工作流成功截图 + 技能市场对开发者可见、可安装、装后health通过;记录存入本目录。
复验方式:完成上述人工项后按 acceptance-reports/README.md 再生成一份新时间戳报告,勿覆盖本报告。
附:本轮整改记录(对照开发文档审核后已修复,测试守护)
- 「待补录」状态标签触发条件修正(C3 触发且 D 未判 → 待补录),优先级与文档 §6.2 对齐。
broadcast-monthly改为逐项目计算即emit增量进度(run_broadcast(on_progress=…)),任务中心可见进行中。progress_reports.project_id播报时回填(修复 render-html 重建丢金额);新增items_json规则明细列(重建保留提醒章节);补updated_at+ 触发器。- 旧库迁移改为重建表拷数(SQLite
ALTER ADD COLUMN不允许非常量默认值),含回归测试test_init_db_migrates_legacy_progress_reports;真实旧库迁移实测通过(6 行历史保留)。 - 简报
{{TITLE}}HTML 转义;章节顺序对齐 §10 并新增独立「暂付款 / 结题提醒」章节;页脚改为文档逐字文案。 - 金标准补测:−10%/+20% 恰界与越界、C2 钳位、N2 反例、C3 逐字段、HTML 注入转义、三色状态灯+提醒断言、
on_progress、project_id/items_json 落库、broadcast-monthlyasync+cron 定位表守护。 - 文档口径统一:
ERROR:<CODE> <message>、成功字段reports_brief、--all-status与 skill-detail 表外挂载补记、C1 level=warn、验收 1 明确三处版本号位置(开发文档 v1.1 + REQUIREMENTS v1.1 同步)。