You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
GET /data/kpi_entry_sheet/<华南单> → 404 RECORD_NOT_FOUND
PATCH /data/kpi_entry_line/<华南明细> → 403 PERMISSION_DENIED
「requires edit access to its master record (master 'kpi_entry_sheet' not editable by this user)」
Activity
baozhoutao commentedon Sep 6, 2026
issue-39-branch-reporter,worktree/Users/baozhoutao/GitHub/kpi-issue-39-branch-reporter,基线 main @ d1abec7。派发开发子 agent(Opus)。baozhoutao commentedon Sep 6, 2026
需求理解与验证计划(开发侧接单)
分级:纯数据脚本 + 验证,不改
src/,低风险,直接开工(与本单「方案分级」一致)。需求理解(逐条复述)
scripts/software-people.mjs里,三家分公司只有「分公司核对人员」(陈东/林南/高北,岗位kpi_branch_checker),没有挂在分公司组织下的「部门填报人员」;于是三张分公司填报单在 UI 上无人可填,只能管理员代填。本单要补三名分公司填报人员账号(岗位kpi_dept_reporter,组织归属分别为华东/华南/华北分公司),幂等,账号清单输出同步。src/services/sharing-service.ts,收件方unit_and_subordinates、accessLevel: edit),三家分公司本身就是本方案的参与主体,所以本分公司成员理应拿到本单的可编辑共享;kpi_dept_reporter_set对kpi_entry_sheet/kpi_entry_line给的是allowEdit+readScope: own,靠共享放宽。判断成立则补数据,不成立则停手写「需拍板事项」,不动权限集与共享规则。验证计划(测试口径先于实现)
OS_SEED_PROFILE=software起实例,跑node scripts/software-people.mjsallowEdit),核对任务照常可操作node scripts/software-flow.mjspnpm verifyV2~V5、V7 走真实浏览器界面截图取证,证据挂
acceptance-evidence孤儿分支issue-39/。若 V2/V3 不通过(分公司填报人员看不到或填不了)→ 按本单正文停手,把现象与成因写进「需拍板事项」,不在本单改权限集与共享规则。
baozhoutao commentedon Sep 6, 2026
测试报告 — 分公司填报人员数据范围 + Excel 导入闭环
结论
scripts/software-people.mjs幂等scripts/software-flow.mjspnpm verify测试环境
issue-39-branch-reporter@5b54b56kpi-issue-39-branch-reporterhttp://localhost:3114,OS_SEED_PROFILE=software.objectstack/issue-39.db;流程断言另起空库.objectstack/issue-39-flow.db@objectstack/*17.2.00cede6e(孤儿分支acceptance-evidence,目录issue-39/)逐条结果
V1 账号建立与幂等 — 通过
第一遍
node scripts/software-people.mjs:第二遍:8 步仍全 OK,
新增 0 条/新增 0 条,{"ok":8,"failed":0}—— 幂等成立。新增的三名账号(岗位均为「部门填报人员」
kpi_dept_reporter,组织归属为各自分公司):V2 数据范围:只见本分公司 — 通过
沈月登录后,工作台「待填报的指标」只有 4 行、全部属于「2026 年第 3 季度考核 · 华东分公司」;「填报单」区只有 1 张;「填报明细」列表页脚
4 条记录。库里同一方案共 11 张填报单、36 行明细。V3 填数、保存出分、提交 — 通过
在工作台可编辑网格里逐格双击填入实际值 →「全部保存」→ 保存即出分:
「更多操作 → 提交填报」→ 确认 → 单据由「填报中」进入「分公司核对中」。
V4 越权访问他司记录 — 通过
沈月直接访问华南分公司填报单 / 填报明细的详情 URL,两处均为「未找到记录 · 您查找的记录不存在或已被删除」。REST 同步复核:
V5 分公司核对人员不能填数 — 通过
分公司核对人员登录后,工作台网格里双击「实际值」单元格不进入编辑(无输入框、无「全部保存」按钮);REST 复核
PATCH /data/kpi_entry_line/<id>返回 403 PERMISSION_DENIED。核对任务侧照常:待核对 1 条、「更多操作」可用。V6 全流程断言 — 通过(55/55)
空库重跑
software-people.mjs+software-flow.mjs:{"passed":55,"failed":0}。原有 54 条一条未改、未放松;三张分公司填报单改由本分公司填报人员登录后填报并提交,并新增一条断言:该断言带空列表护栏:共享规则展开成逐人记录共享行是异步的,脚本先
waitUntil本单明细可见、再要求own.length > 0,不会出现「空数组每一行都填好了」这种假通过。V7 Excel 导入闭环 — 部分可用(详见下一节)
V8 门禁 — 通过
pnpm verifyexit 0:pnpm validate/tsc --noEmit/vitest 139 passed (139)/ i18n1 bundle(s) are in sync with the schema。Excel 导入闭环报告
逐步点击数
填报明细-<时间戳>.xlsx,10 列 4 行全部 4 行均有效→导入完成 · 更新 4 条补两列后闭环成立:导入后华南分公司填报单四行实际值全部回写,得分同步重算(85.80 / 92.60 / 95.00 / 95.00,指标得分合计 91.76),全库明细行数不变(36 → 36,无新建脏行)。
拦截行为表
allowCreate: true)上就有「新建 + 导入」 —— 闸门跟着allowCreate走,不跟着allowEdit走全部 4 行均有效→更新 4 条,不报错、不提示。落库后:目标值 / 权重仍是原值(只读剥离生效),但得分与计算说明是按错值算出来的、并且已落库 —— 一条自相矛盾的记录(界面上目标值 400、权重 10,而计算说明写着「目标 1、权重 1%」、得分 1.20)更新 3 条 · 已跳过 1 条,全库行数不变、无脏行writeMode "update" requires a non-empty matchFields[]问题按归属分列
平台侧(按「只上报不修复」已上报,本单不改代码)
beforeUpdate钩子看到的记录;应用的计分钩子据此算分,算出的派生字段(完成率 / 得分率 / 得分 / 计算说明)会落库,记录自相矛盾且无任何报错。最小复现是一次纯 REST PATCH,与导入无关 —— 导入向导只是同一条路径的批量入口。allowCreate上,而向导本身支持「更新已有」;于是持有allowEdit却没有allowCreate的填报人员岗位看不到「导入」,只有管理员用得上。② 「导出」只导视图可见列,不带记录 id、也不带对象的两个必填 lookup,导出的文件导入向导不收 —— 同一个工具条的两半对「一行是什么」意见不一致。「导入 N 行」文案与英文原文报错这两条小瑕疵已并入该 issue 的观察记录。应用侧(本单范围外,只记录不改)
kpi_dept_reporter_set对kpi_entry_line声明allowCreate: false—— 这是有意为之(手工新建的明细没有冻结的目标值与权重,算不出分,是注定作废的行),声明本身没问题;问题在平台把「导入」挂在了allowCreate上。平台修 Console list: the 「导入」 button is gated on allowCreate although the wizard can update, and 「导出」 emits a file the wizard refuses — the export→edit→import round trip is unreachable objectstack#16345 后应用侧零改动即可打通;若要更早打通,唯一选项是给填报人员开allowCreate来换导入入口,那会把「新建明细」这条死路重新放出来,不建议,也超出本单范围。91.75999999999999(浮点尾数),同一行「最终得分」显示91.76。汇总字段未按 2 位小数收敛;在src/内,本单禁止改动,记为遗留。遗留问题
91.75999999999999src/,建议另立工作项baozhoutao commentedon Sep 6, 2026
需求符合度清单(提 PR 前硬门禁)
逐条对照本单正文的「范围 / 不做 / 验收标准」,三态标注。
范围 1 ——
scripts/software-people.mjs补三名分公司填报人员kpi_dept_reporterjob为「华东(南 / 北)分公司填报人员」新增 0 条、{"ok":8,"failed":0}范围 2 —— 数据范围验证
4 条记录(库内同方案共 11 张单 / 36 行)GET华南单 404 RECORD_NOT_FOUND、PATCH华南明细 403 PERMISSION_DENIEDsrc/零改动(git status仅 3 个允许文件)范围 3 —— Excel 导入闭环验证
allowCreate上,而kpi_dept_reporter_set对kpi_entry_line有意声明allowCreate: false。且原样导出的文件导入向导不收(缺两个必填 lookup 列),必须手工补列。出口:平台能力受限 → objectstack-ai/objectstack#16345(本单正文明令「不改代码,只出结论」,故不在此修)全部 4 行均有效→「导入完成 · 更新 4 条」;缺行多行场景「更新 3 条 · 已跳过 1 条」,全库行数 36 → 36src/未触碰src/,本单禁改,已记为遗留)范围 4 —— README 同步
不做
src/git status仅README.md/scripts/software-flow.mjs/scripts/software-people.mjsdocs/零改动验收标准
software-people.mjs幂等software-flow.mjs仍 54/54;分公司单改由分公司填报人员填,断言不放松acceptance-evidence@0cede6e)acceptance-evidence0cede6ecbdaeae53889b1cbafa325e90f7e7b22b,23 个文件经 contents API 核对在位pnpm verify绿非 ✅ 条目汇总(共 2 条,各带出口)
allowCreate,会重新放出「新建明细」死路,不建议且超范围)software-flow.mjs55/55 而非 54/54baozhoutao commentedon Sep 6, 2026
交接验收侧
PR 已提:#41 (
issue-39-branch-reporter→main,基线d1abec7,提交5b54b56)状态切「status:PR审查中」,处理人 @baozhoutao。开发侧不自行合并。
acceptance-evidence,目录issue-39/,commit0cede6ecbdaeae53889b1cbafa325e90f7e7b22b(23 张,已经 contents API 核对在位)需拍板 1 条:
software-flow.mjs断言总数 54 → 55。原 54 条一条未改未放松、全绿;+1 是按本单要求把分公司单改由分公司填报人员填之后增补的 T11b「不是管理员代填」。要严格保持 54,删掉 T11b 即可,但会失去这条可回归证据。平台上报 2 条(只上报不修复,本 PR 无绕行):objectstack-ai/objectstack#16344(只读字段进入 beforeUpdate,派生字段落错值)、objectstack-ai/objectstack#16345(「导入」按钮挂在 allowCreate;「导出」文件不可回导)。
应用侧遗留 2 条(在
src/内,本单禁改,建议另立工作项):填报人员岗位因allowCreate: false够不到导入入口(等平台修 objectstack-ai/objectstack#16345 后零改动即通);工作台「指标得分合计」显示浮点尾数91.75999999999999,同行「最终得分」显示91.76。Merge pull request #41: branch reporter accounts in the demo dataset;…
baozhoutao commentedon Sep 6, 2026
合并记录(调度员,2026-09-06)
src/、docs/、e2e-flow.mjs零改动;CI 绿;测试报告、需求符合度清单(2 条software-flow.mjs做断言块级逐字节比对,基线 54 条在 head 中全部逐字节相同,+1 为新增 T11b「分公司单不是管理员代填」,加严方向;实跑 55/55、verify 绿;分公司填报人员只见本分公司、越权 404/403 复现。status:PM验收中,处理人不变(验收侧)。