Files
track-fund-progress-default/acceptance-reports/20260924-105401-acceptance.md
chenfuqiang f90f742c1e
All checks were successful
技能自动化发布 / release (push) Successful in 9s
fix: 对照《财务处Skill002》验收整改并升版 v1.0.2
- 状态标签: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 三处对齐)
2026-09-24 17:19:30 +08:00

16 KiB
Raw Permalink Blame History

验收报告 —— 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 tag v1.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.json label 一致(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-monthly 3 项目 + 汇总页 brief-006ab490ad2f5ddd.html。
  • A3-2 P0 PASS 缺参/非法输入稳定失败:broadcast --project-no NOPE123 → ERROR:NO_PROJECTS exit 1;add-project --start 2026/13/40 → ERROR:PROJECT_INVALID exit 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_manifest jsonschema/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-projects 3 行、stats report_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_json value 与存库枚举一致(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=...,随后 stdout ERROR: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 tag v1.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

  1. A1-1 宿主识别:宿主技能详情页能打开本技能,名称「项目经费进度播报助手」、版本 1.0.1 可见;health/version 详情区可执行。
  2. A4-2 + A4-3 任务中心(月度播报):宿主定时任务建「技能直调」→ 选「月度经费播报」→ 手动触发;期望:任务中心出现进行中条目,进度按 [i/n] 项目名:状态 逐项滚动,结束后有成功结论与批次号;故意断库/无项目时为失败态且原因可读。
  3. A6-1 任务记录可追溯:上述任务完成后,任务中心历史列表可查到该条目与终态摘要(成功/失败均有)。
  4. A9-3 多入口抽测:①对话:「查一下我的经费执行怎么样」→ 播报文本;②数据管理:项目台账 toolbar「经费进度播报」、预警规则行按钮改阈值、播报记录 toolbar「生成经费简报」;③HTML 侧栏打开 report-*.html 预览后点重建;④定时入口同 A4-2。期望:各入口结果与 CLI 一致(同一内核),无入口分叉。

P1

  1. A4-4:任务中心进行中条目的进度文案人工读一遍,确认 `[1/3] …:正常」可理解。
  2. A4-8:数据管理「预警规则」行点开编辑 form,确认参数区仅阈值字段、无重复主键映射、提交正常。
  3. A6-10:数据管理侧栏预览 HTML 简报:横向铺满、无横向滚动条;重新播报后刷新内容与页头时间。
  4. A9-5:走 release.ps1 发版(或验证 v1.0.1 已在市场):Gitea 工作流成功截图 + 技能市场对开发者可见、可安装、装后 health 通过;记录存入本目录。

复验方式:完成上述人工项后按 acceptance-reports/README.md 再生成一份新时间戳报告,勿覆盖本报告。


附:本轮整改记录(对照开发文档审核后已修复,测试守护)

  1. 「待补录」状态标签触发条件修正(C3 触发且 D 未判 → 待补录),优先级与文档 §6.2 对齐。
  2. broadcast-monthly 改为逐项目计算即 emit 增量进度(run_broadcast(on_progress=…)),任务中心可见进行中。
  3. progress_reports.project_id 播报时回填(修复 render-html 重建丢金额);新增 items_json 规则明细列(重建保留提醒章节);补 updated_at + 触发器。
  4. 旧库迁移改为重建表拷数(SQLite ALTER ADD COLUMN 不允许非常量默认值),含回归测试 test_init_db_migrates_legacy_progress_reports;真实旧库迁移实测通过(6 行历史保留)。
  5. 简报 {{TITLE}} HTML 转义;章节顺序对齐 §10 并新增独立「暂付款 / 结题提醒」章节;页脚改为文档逐字文案。
  6. 金标准补测:−10%/+20% 恰界与越界、C2 钳位、N2 反例、C3 逐字段、HTML 注入转义、三色状态灯+提醒断言、on_progress、project_id/items_json 落库、broadcast-monthly async+cron 定位表守护。
  7. 文档口径统一:ERROR:<CODE> <message>、成功字段 reports_brief、--all-status 与 skill-detail 表外挂载补记、C1 level=warn、验收 1 明确三处版本号位置(开发文档 v1.1 + REQUIREMENTS v1.1 同步)。