文案与盖章小批:审核记录状态中文、归档提示、看板人员姓名、归档拒绝节点名、必填叠字、禁止手工新建填报单、得分合计两位小数(#38) - #43
Conversation
代码评审报告(os-project-dev-review)档位:全量档(依据:9 条小改合批但触及审核状态机唯一真值 结论:可合并 通用质量(/code-review 高档)4 项发现,全部低严重度,均落在 ⚪ 记录级(逐条见下方发现清单)。明确排查无问题的高风险面: 专属核查(四条逐条)1 改动面越界:✅ 无越界(两处报备核实属实,无第三处) 12 个文件逐个对照允许面: 2 降级对账:✅ 清单与代码 / 实测相符,未发现静默降级 在
脚本与门禁(本评审实例复跑,非采信自述): 3 三禁痕迹:✅ 无 4 硬拍板落地:✅
调用面抽查(被改共享函数 / 字段的下游)
发现清单
🔴 阻塞:无 🟡 应修:无 评审实例:临时 clone + 独立端口 3116 + 独立库, |
留痕的唯一写入口 writeReview() 按 lib/workflow.ts 的 STATUS_LABEL 把内部值转成 中文;转换放在写入侧,列表、表单、导出、归档快照 payload 四个读取面一次覆盖。 未知取值原样返回,不吞值。历史记录不迁移、不回填(试运行前无正式数据,开发库 每轮空库重建),已在工作项上记录。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
已归档的单再改明细,原提示写「填报单已提交……请发起数据调整申请」——而归档后 数据调整同样被拒,等于把人支去一条走不通的路。按填报单状态分岔出两条三段式提示, 修改与删除两处共用。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
归档不落在任何流程节点上(requiredPositionFor 对它固定要 kpi_hr_reviewer),原文案 取 transition 给的 atStepDef —— 那是流程的最后一个节点,通常是「领导审批」,跟这次 拒绝无关。只改文案取值:archive 时取 hr_review 节点的名称,方案没配则回落到「人力 审核」;岗位规则一行未动。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
新建保护取消 kpi_admin 例外:填报单的唯一来源是方案发布,手工建出来的单没有方案、 没有主体、没有明细,页头一渲染就崩(平台 objectstack-ai/objectstack#14888),没有 任何合法用途。权限集里管理员与人力审核的 kpi_entry_sheet 关掉 allowCreate,列表与 相关页签的「新建」随之消失(声明与执行一致,口径同 kpi_entry_line)。发布路径是 hook 内的系统上下文写入,不过权限集,不受影响。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
指标得分合计 / 加减分合计 / 权重合计是平台 summary 字段(对明细求和),浮点相加出来 就是 91.75999999999999,而同一行声明了 scale: 2 的「最终得分」显示 91.76 —— 两个数 并排,用户看到的是「系统算错了」。取整拦在写入闸上,列表、表单、导出、快照读到的是 同一个值;舍入规则复用 lib/scoring.ts 的 round2,不另立口径,计分逻辑一行未动。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
看板「人员得分」与「到人得分」报表的人员轴出的是原始用户 id:抓包核实,同一次数据集
查询里 unit(Field.lookup)返回名称、person(Field.user)返回 id —— 维度解析只认
lookup 字段。平台侧能力缺口按纪律只上报、不绕行;应用侧换用结果记录的名称列
(汇总时已写成「方案名 · 姓名」)作展示维度,残留偏差是带方案名前缀,已在符合度清单
按有偏差记录。
「各组织单元平均得分」加固定过滤 dimension ∈ {部门, 分公司}:到人 / 分管领导的结果行
没有组织单元,原来被兜成一根「(未指定)」柱;范围写进标题。
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
原注释写「部门填报人员在『待人力审核』里本来就一行都读不到」,与实测相反:本部门单 进入人力审核中时该区块对填报人员显示 1 行,动作被 hook 的岗位闸以 422 拒绝。改成事实 表述——区块按数据范围显示、不按岗位显隐,读得到不等于动得了;入口噪音的根治依赖平台 能力 objectstack-ai/objectstack#15135。只动注释。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
对话框里原来是「争议内容(必填) *」——「(必填)」与平台自己的必填标记叠字,校验没 说错但读起来像口吃。5 处必填参数(驳回原因 / 争议内容 / 否决原因 / 处理结论 ×2)统一 只留名词,required: true 不动,校验与报错文案一字未改。 注:落点在 src/actions/index.ts,该文件在本次派发单里被列为禁触碰,而工作项正文把本条 列入必做范围;按同因同域单独成一个只含这 5 个字符串的 commit,便于评审侧整段取舍, 已在工作项上留痕报备。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
pnpm i18n:extract 产物,未手改词条:动作参数的必填后缀(第 6 条)与看板标题的范围 说明(第 4 条)。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
关联工作项 #38(文案与盖章小批,P3)。逐条独立提交,9 条一并交付。
改了什么
lib/workflow.ts(新增statusLabel())、hooks/util.tshooks/entry-line.hook.tsdimension ∈ {部门, 分公司}固定过滤,消除「(未指定)」柱datasets/、dashboards/、reports/hooks/sheet.hook.tsactions/index.tsallowCreate,列表「新建」收掉hooks/sheet.hook.ts、security/index.tslib/scoring.ts的round2,不另立口径)hooks/sheet.hook.tspages/index.ts翻译包由
pnpm i18n:extract重新生成,未手改词条。验证
scripts/software-flow.mjs55 PASS / 0 FAIL(software 档案空库);scripts/e2e-flow.mjs74 PASS / 0 FAIL(默认档案独立空库);两个脚本都不依赖手工新建填报单。pnpm verify全绿:validate / typecheck / 139 单测 / i18n 新鲜度。单测有一行断言随第 1 条改为中文(归档留痕to_status === '已归档')。f5cbbe8fd216296e78c70eb6c25021a98554c5ae(孤儿分支acceptance-evidence,目录issue-38/)。评审要看的三处
Field.user维度返回原始用户 id(抓包证据在平台单里),已按纪律只上报不修复:analytics: 数据集维度只解析 lookup 字段,user 字段维度返回原始用户 id —— 以人为轴的图表/报表标签是一串 id objectstack#16390;平台补上后把维度换回person,回退路径写在代码注释里。hooks/util.ts(第 1 条留痕的唯一写入口,改别处会碰禁触碰文件)与actions/index.ts(第 6 条 5 个 label,该文件被派发单列为禁触碰而正文把本条列为必做)。第 6 条单独成一个只含 5 个字符串的 commit790af52,可整段取舍。禁触碰清单(
lib/scoring.ts、adjustment.hook.ts、bonus.hook.ts、views/index.ts的三段、services/、apps/、src/data/、scripts/、docs/)零改动。🤖 Generated with Claude Code