关闭中断的七天试运行任务(07-16-legacy-task-runbook-closeout)
这个提交包含在:
@@ -0,0 +1,3 @@
|
||||
{"file": ".trellis/spec/hyb-oa/project-governance.md", "reason": "Validate Trellis task and approval boundaries"}
|
||||
{"file": ".trellis/spec/hyb-oa/docs-and-evidence.md", "reason": "Validate daily evidence report handling"}
|
||||
{"file": ".trellis/spec/hyb-oa/security-privacy.md", "reason": "Validate no sensitive content is persisted"}
|
||||
@@ -0,0 +1,4 @@
|
||||
{"file": ".trellis/spec/hyb-oa/project-governance.md", "reason": "Trellis task governance, approval and commit boundaries"}
|
||||
{"file": ".trellis/spec/hyb-oa/deployment-trialrun.md", "reason": "Public OA quasi-production and live-operation boundaries"}
|
||||
{"file": ".trellis/spec/hyb-oa/docs-and-evidence.md", "reason": "Evidence summaries, reportRef, finding and privacy contracts"}
|
||||
{"file": ".trellis/spec/hyb-oa/security-privacy.md", "reason": "Sensitive data exclusions for task evidence"}
|
||||
@@ -0,0 +1,122 @@
|
||||
# 实施记录
|
||||
|
||||
## 执行策略
|
||||
|
||||
本任务是运行启动与证据任务,不改业务代码、不改远端配置、不执行真实业务自动写入。实施方式为:
|
||||
|
||||
1. 固定启动日期和 Day 7 收口日期。
|
||||
2. 用 `scripts/qa/run-oa-real-use-daily.sh` 执行 Day 1 只读巡检。
|
||||
3. 将报告保存在当前 Trellis task 的 `research/day1-oa-real-use-daily/`。
|
||||
4. 将自动化结论写入 `research/day1-start-summary.md`。
|
||||
5. 后续 Day 2-Day 7 继续每日运行同一只读巡检,并由现场按 `manual-gates.md` 完成人工业务动作和问题收口。
|
||||
|
||||
## 风险控制
|
||||
|
||||
- 自动化只读:不创建、提交、审批、付款或导出真实业务数据。
|
||||
- 真实业务写入仅由现场人员在公网 OA 内人工完成。
|
||||
- 发现 blocker 时暂停对应流程,并另建最小修复任务。
|
||||
- 报告中只保留状态、计数和相对证据路径,不保留敏感原文。
|
||||
- Day 1 启动不等于 Day 7 Go/No-Go,不提前宣布最终正式启用完成。
|
||||
|
||||
## Day 1 结果
|
||||
|
||||
- 运行命令:`OAOPS1_REPORT_DIR=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-oa-real-use-daily.sh`
|
||||
- 结论:`PASS_OA_REAL_USE_DAILY_READY`
|
||||
- findingCount:0
|
||||
- 主报告:`research/day1-oa-real-use-daily/summary.json`
|
||||
- 启动摘要:`research/day1-start-summary.md`
|
||||
|
||||
## Day 2 结果
|
||||
|
||||
- 运行命令:`OAOPS1_REPORT_DIR=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-oa-real-use-daily.sh`
|
||||
- 结论:`PASS_OA_REAL_USE_DAILY_READY`
|
||||
- findingCount:0
|
||||
- 主报告:`research/day2-oa-real-use-daily/summary.json`
|
||||
- 备注:首次运行时企业微信渲染矩阵因测试 mock 未覆盖 `/api/auth/capabilities` 报错;已补 mock 并复跑完整 Day 2 巡检通过。
|
||||
|
||||
## Day 3 结果
|
||||
|
||||
- 运行命令:`OAOPS1_REPORT_DIR=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-oa-real-use-daily.sh`
|
||||
- 结论:`PASS_OA_REAL_USE_DAILY_READY`
|
||||
- findingCount:0
|
||||
- 主报告:`research/day3-oa-real-use-daily/summary.json`
|
||||
- 通过检查:`public-ready`、`live-smoke-env`、`live-readiness`、`oa-only-smoke-readiness`、`live-feature-flags`、`authenticated-readonly-probe`、`mobile-entry-matrix`、`wecom-rendering-matrix`、`wecom-entry`、`report-privacy-smoke`。
|
||||
- 功能开关符合试运行边界:`payment_batch_v1=force_on`、`erp_sync=force_off`,`attendance_v1` 仍由 env hard-off 关闭,`attendance_unified_v1` 开启。
|
||||
- 备注:readiness 内 pending OCR 本地扫描因未注入本地数据库连接记录为 `SKIP`;真实 OCR 样本辅助复核进入可解释终态,不影响本次 Day 3 巡检结论。
|
||||
|
||||
## Day 4 结果
|
||||
|
||||
- 运行命令:`OAOPS1_REPORT_DIR=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day4-oa-real-use-daily LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-oa-real-use-daily.sh`
|
||||
- 结论:`PASS_OA_REAL_USE_DAILY_READY`
|
||||
- findingCount:0
|
||||
- 主报告:`research/day4-oa-real-use-daily/summary.json`
|
||||
- 文本摘要:`research/day4-oa-real-use-daily/summary.txt`
|
||||
- 人工摘要:`research/day4-start-summary.md`
|
||||
- 通过检查:`public-ready`、`live-smoke-env`、`live-readiness`、`oa-only-smoke-readiness`、`live-feature-flags`、`authenticated-readonly-probe`、`mobile-entry-matrix`、`wecom-rendering-matrix`、`wecom-entry`、`report-privacy-smoke`。
|
||||
- 功能开关符合试运行边界:`payment_batch_v1=force_on`、`erp_sync=force_off`,`attendance_v1` 仍由 env hard-off 关闭,`attendance_unified_v1` 开启。
|
||||
- 备注:readiness 内 pending OCR 本地扫描因未注入本地数据库连接记录为 `SKIP`;真实 OCR 样本辅助复核进入重复/相同发票的可解释终态,不影响本次 Day 4 巡检结论。
|
||||
|
||||
## 设计规则治理
|
||||
|
||||
- 用户确认项目旧有前端设计规则重复且噪音过大后,已将 `docs/产品设计规则.md` 从“设计规则基线”瘦身为“产品体验事实源”。
|
||||
- 前端视觉、布局审美、组件观感、字体、颜色、动效、间距和交互细节统一以 `frontend-design` skill 为裁决来源。
|
||||
- `docs/产品设计规则.md` 仅保留 hyb-oa 特有的目标用户、PC/移动/企业微信职责、页面分层、信息语义、OA/企微主办边界和验收边界。
|
||||
- 已同步 AGENTS、Trellis frontend spec、文档索引、事实源矩阵、Agent 交付实践、试运行手册、测试规约和相关业务规约,避免后续 agent 继续引用旧的竞品/品牌/样板设计规则。
|
||||
|
||||
## Wave2 公网部署与发布后验证
|
||||
|
||||
- 用户已批准将 PC 核心工作流 Wave2 前端改动部署到公网 OA,并要求部署和公网测试通过后再收尾。
|
||||
- 部署命令:`SYNC_ENV=0 LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash deploy/trialrun/deploy.sh`
|
||||
- 部署边界:未同步本地 `.env`,未改远端配置,未执行真实业务写入、真实付款、ERP 写入或企业微信写入。
|
||||
- 部署脚本结果:环境契约校验通过,远端构建通过,Prisma migration status 通过,runtime smoke / external deps smoke / live smoke 通过,公网前端资源文案扫描 findings=0。
|
||||
- 独立公网复核:
|
||||
- `/ready`:`data.ok=true`
|
||||
- `node scripts/qa/check-public-bundle-copy.mjs https://oa.hyinda.com`:findings=0
|
||||
- `LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh`:`PASS`
|
||||
- `E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/pc-core-workflow-visual-wave2.spec.ts --workers=1 --reporter=list`:1 passed
|
||||
- 试运行只读巡检:
|
||||
- 命令:`OAOPS1_REPORT_DIR=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/postdeploy-20260527-wave2-public LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-oa-real-use-daily.sh`
|
||||
- 结论:`PASS_OA_REAL_USE_DAILY_READY`
|
||||
- findingCount:0
|
||||
- 主报告:`research/postdeploy-20260527-wave2-public/summary.json`
|
||||
- 文本摘要:`research/postdeploy-20260527-wave2-public/summary.txt`
|
||||
- 证据脱敏修正:`scripts/qa/write-qa-summary.mjs` 已改为写入仓库相对 `reportDir/reportRef`,避免 live-readiness summary 记录完整本地路径。
|
||||
- 视觉证据:`output/playwright/pc-core-workflow-visual-wave2/01-login.png`、`02-portal.png`、`03-reimbursements.png`、`04-workflow-tasks.png`
|
||||
- 非阻断提示:部署同步时远端历史 `artifacts/qa-flow/wecom-controlled-trial-evidence-20260520-205320` 目录无法自动删除;不影响本次部署、构建或公网检查,后续可单独做远端 artifacts 清理。
|
||||
|
||||
## Wave3 公网部署与发布后验证
|
||||
|
||||
- 用户已批准将 PC 详情与移动关键页 Wave3 前端改动部署到公网 OA,并要求部署和公网测试通过后再收口。
|
||||
- 部署 HEAD:`f944d9c`;Wave3 实现提交:`6e1e00f`。
|
||||
- 部署命令:`SYNC_ENV=0 LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash deploy/trialrun/deploy.sh`
|
||||
- 部署边界:未同步本地 `.env`,未改远端配置,未执行真实业务写入、真实付款、ERP 写入或企业微信写入。
|
||||
- 部署脚本结果:部署环境契约校验通过,远端前端/服务构建通过,Prisma migration status 显示无待执行 migration,部署脚本内置公网 live smoke 3 passed,公网前端资源文案扫描 findings=0。
|
||||
- 独立公网复核:
|
||||
- `/ready`:`data.ok=true`
|
||||
- `node scripts/qa/check-public-bundle-copy.mjs https://oa.hyinda.com`:findings=0
|
||||
- `LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-live-smoke-readiness.sh`:`PASS`
|
||||
- `E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/pc-detail-mobile-visual-wave3.spec.ts --workers=1 --reporter=list`:2 passed
|
||||
- 试运行只读巡检:
|
||||
- 命令:`OAOPS1_REPORT_DIR=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/postdeploy-20260527-wave3-public LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-oa-real-use-daily.sh`
|
||||
- 结论:`PASS_OA_REAL_USE_DAILY_READY`
|
||||
- findingCount:0
|
||||
- 主报告:`research/postdeploy-20260527-wave3-public/summary.json`
|
||||
- 文本摘要:`research/postdeploy-20260527-wave3-public/summary.txt`
|
||||
- 视觉证据:`output/playwright/pc-detail-mobile-visual-wave3/01-pc-reimbursement-detail.png`、`02-pc-workflow-detail.png`、`03-pc-notifications.png`、`04-mobile-home.png`、`05-mobile-reimbursements.png`、`06-mobile-approvals.png`、`07-mobile-approval-detail.png`、`08-mobile-notifications.png`、`09-mobile-me.png`
|
||||
- 非阻断提示:
|
||||
- 部署同步时远端历史 `artifacts/qa-flow/wecom-controlled-trial-evidence-20260520-205320` 目录仍无法自动删除;不影响本次部署、构建或公网检查。
|
||||
- readiness 内 pending OCR 本地扫描因未注入数据库连接记录为 `SKIP`;同一 readiness 的真实 OCR 样本辅助复核已通过并归类为可解释终态。
|
||||
|
||||
## Wave4 公网部署后试运行只读巡检
|
||||
|
||||
- 用户已批准 Wave4 财务与管理页视觉重塑部署;Wave4 任务已完成部署验证并归档。
|
||||
- 本轮按 OAOPS1 主线补齐 Wave4 后公网只读巡检证据,不改远端配置,不执行真实业务写入、真实付款、ERP 写入、企业微信写入或数据库重置。
|
||||
- 巡检命令:`OAOPS1_REPORT_DIR=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/postdeploy-20260527-wave4-public LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-oa-real-use-daily.sh`
|
||||
- 结论:`PASS_OA_REAL_USE_DAILY_READY`
|
||||
- findingCount:0
|
||||
- 主报告:`research/postdeploy-20260527-wave4-public/summary.json`
|
||||
- 文本摘要:`research/postdeploy-20260527-wave4-public/summary.txt`
|
||||
- 人工摘要:`research/postdeploy-20260527-wave4-public/summary.md`
|
||||
- 通过检查:`public-ready`、`live-smoke-env`、`live-readiness`、`oa-only-smoke-readiness`、`live-feature-flags`、`authenticated-readonly-probe`、`mobile-entry-matrix`、`wecom-rendering-matrix`、`wecom-entry`、`report-privacy-smoke`。
|
||||
- 功能开关符合试运行边界:`payment_batch_v1=force_on`、`erp_sync=force_off`,冻结项未被误开启。
|
||||
- 非阻断提示:readiness 内 pending OCR 本地扫描因未注入本地数据库连接记录为 `SKIP`;同一 readiness 的真实 OCR 样本辅助复核已进入可解释终态,不影响本次 Wave4 后巡检结论。
|
||||
@@ -0,0 +1,125 @@
|
||||
# OA 7天真实试运行启动与每日运营
|
||||
|
||||
## Goal
|
||||
|
||||
在 2026-05-26 启动 OA 小团队 7 天真实使用稳定化,进入“真实业务人工使用 + 每日只读自动巡检 + 当天问题分级收口”的运行节奏。目标不是宣布最终正式启用完成,而是用连续 7 天证据证明公网 OA 能稳定承载报销/PDF OCR、审批、采购/费用、合同台账、项目、付款批次、AP 交接、移动/企业微信入口和审计留痕。
|
||||
|
||||
## Start Confirmation
|
||||
|
||||
- 用户已在 2026-05-26 明确确认“现在就可以开始”。
|
||||
- 启动日期:`2026-05-26`。
|
||||
- 预计 Day 7 收口日期:`2026-06-01`。
|
||||
- 自动化边界:每日巡检只读;真实业务写入只由人工在公网 OA 内完成。
|
||||
- 暂停/继续决策:发现阻断时先记录证据和影响,由用户/管理层决定继续、暂停或拆修复任务。
|
||||
|
||||
## Scope
|
||||
|
||||
- 启动 OAOPS1 7 天真实使用稳定化的 Day 1 记录。
|
||||
- 执行并留存 Day 1 公网只读自动巡检证据。
|
||||
- 生成现场人工每日收口清单,指导员工、审批人、财务/出纳和管理员按角色完成真实业务动作。
|
||||
- 只记录脱敏摘要、状态、计数和相对证据路径。
|
||||
- 后续 Day 2-Day 7 继续按同一节奏运行每日只读巡检和人工问题收口。
|
||||
|
||||
## What I Already Know
|
||||
|
||||
- 公网环境已在前序任务部署并验证,结论为 `READY_FOR_TRIAL_START_CONFIRMATION`。
|
||||
- 最新部署后验证任务已归档:`.trellis/tasks/archive/2026-05/05-26-oa-frontend-postdeploy-public-verification/`。
|
||||
- 部署后已通过 `/ready`、live smoke / OCR readiness、权限矩阵、PC 只读视觉矩阵、移动入口矩阵和企业微信渲染矩阵。
|
||||
- `docs/管理员手册.md` 已定义 OAOPS1 七天真实使用稳定化:每日运行 `bash scripts/qa/run-oa-real-use-daily.sh`,真实业务写入由人工完成。
|
||||
- `docs/试运行与自动化验证手册.md` 要求首周每日检查公网健康、PC 登录、移动/企业微信入口、报销/PDF OCR、审批、请假、采购、通知、付款批次、AP 和审计日志。
|
||||
- OALAUNCH1 最终启用仍需 Day 7 Go/No-Go,不得把 Day 1 启动误写成最终正式启用完成。
|
||||
|
||||
## Assumptions
|
||||
|
||||
- 本任务默认采用中国时区日期口径记录试运行日历:Day 1 为 2026-05-26。
|
||||
- 自动化巡检负责人为本 Codex/Trellis 会话执行者;业务样本负责人按角色在现场分配,不在本任务中编造个人姓名。
|
||||
- 今日先完成 Day 1 启动记录和只读巡检;真实业务动作由现场按管理员手册人工执行。
|
||||
- 如果现场后续补充具体负责人姓名,只更新本任务证据或后续 Day N 记录,不倒改启动事实。
|
||||
|
||||
## Requirements
|
||||
|
||||
- 创建 Trellis 任务记录真实试运行启动,不依赖聊天作为唯一证据。
|
||||
- 启动当天必须运行一次只读自动巡检:
|
||||
- `OAOPS1_REPORT_DIR=<task-research-dir>/day1-oa-real-use-daily LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-oa-real-use-daily.sh`
|
||||
- 巡检报告必须保存脱敏摘要引用,不保存密码、token、Secret、完整账号、完整本地路径、原始票据、合同正文、银行资料或 raw payload。
|
||||
- 每日人工业务动作按角色完成:
|
||||
- 员工:真实报销/PDF 发票、采购/费用、必要项目或合同关联。
|
||||
- 审批人:从 OA 待办进入详情审批或退回。
|
||||
- 财务/出纳:付款批次、线下付款、回单附件、已付款标记、AP/报销/票据抽查。
|
||||
- 管理员:权限、审计、合同台账、项目关联和每日巡检报告收口。
|
||||
- 冻结项继续冻结:图片 OCR、复杂 BPM、预算硬控、ERP 写入、银行流水导入、真实支付接口、企业微信 HR 深镜像、应急接管、恢复回写和 RuleOps。
|
||||
- 出现以下情况时当天暂停对应流程并拆最小修复任务:
|
||||
- 无法登录、无法提交或审批核心单据。
|
||||
- 报销/PDF OCR、查重、付款批次、AP、审计日志出现不可解释阻断。
|
||||
- 权限越权、敏感资料泄露或冻结项被误开启。
|
||||
- `/ready` 异常、live readiness 阻断或两个以上高优先级问题无法解释。
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [x] Day 1 启动日期和边界已记录。
|
||||
- [x] Day 1 只读自动巡检已运行并保存摘要。
|
||||
- [x] 巡检结论为 `PASS_OA_REAL_USE_DAILY_READY` 或 `PASS_WITH_FINDINGS` 且 finding 可解释;若阻断则不继续扩大真实使用。
|
||||
- [x] `payment_batch_v1=force_on`,`erp_sync=force_off`,冻结项未被误开启。
|
||||
- [x] 人工业务动作清单已交给现场按角色执行。
|
||||
- [x] Day 7 Go/No-Go 仍保持待执行,不提前宣称最终启用完成。
|
||||
|
||||
## Definition of Done
|
||||
|
||||
- Day 1 启动证据齐全,报告可追溯。
|
||||
- 没有把只读自动化结果误写成真实业务闭环完成。
|
||||
- 没有执行真实付款、ERP 写入、企业微信写入、数据库重置/恢复或自动创建真实业务数据。
|
||||
- 后续 Day 2-Day 7 有明确执行节奏:每日巡检、人工问题登记、阻断即修、非阻断进入反馈池。
|
||||
|
||||
## Out of Scope
|
||||
|
||||
- 不宣布最终正式启用完成。
|
||||
- 不执行真实支付接口、不导入银行流水、不写 ERP。
|
||||
- 不自动创建、提交、审批或付款真实业务单据。
|
||||
- 不上传或保存涉密合同正文、敏感报价、完整银行流水、真实密码、token、Secret、完整账号、完整本地路径或 raw payload。
|
||||
- 不扩大前端改版、审批设计器、预算硬控、图片 OCR、复杂 BPM 或企业微信深镜像范围。
|
||||
|
||||
## Test Plan
|
||||
|
||||
Day 1 启动巡检:
|
||||
|
||||
```bash
|
||||
mkdir -p .trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily
|
||||
OAOPS1_REPORT_DIR=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily \
|
||||
LIVE_SMOKE_BASE_URL=https://oa.hyinda.com \
|
||||
bash scripts/qa/run-oa-real-use-daily.sh
|
||||
```
|
||||
|
||||
收口检查:
|
||||
|
||||
```bash
|
||||
python3 ./.trellis/scripts/task.py validate 05-26-oa-seven-day-trial-live-ops
|
||||
node scripts/qa/check-trellis-governance.mjs
|
||||
git diff --check
|
||||
```
|
||||
|
||||
Day 2-Day 7:
|
||||
|
||||
```bash
|
||||
OAOPS1_REPORT_DIR=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/dayN-oa-real-use-daily \
|
||||
LIVE_SMOKE_BASE_URL=https://oa.hyinda.com \
|
||||
bash scripts/qa/run-oa-real-use-daily.sh
|
||||
```
|
||||
|
||||
## Technical Notes
|
||||
|
||||
- Workflow: `.trellis/workflow.md`
|
||||
- Project specs: `.trellis/spec/hyb-oa/`
|
||||
- Admin runbook: `docs/管理员手册.md`
|
||||
- Trial runbook: `docs/试运行与自动化验证手册.md`
|
||||
- Launch checklist: `docs/trialrun/发布试运行准备清单.md`
|
||||
- Daily readonly runner: `scripts/qa/run-oa-real-use-daily.sh`
|
||||
- Final launch readiness runner: `scripts/qa/run-oa-final-launch-readiness.sh`
|
||||
- Prior public verification: `.trellis/tasks/archive/2026-05/05-26-oa-frontend-postdeploy-public-verification/research/postdeploy-summary.md`
|
||||
|
||||
## Lifecycle Closeout (2026-07-16)
|
||||
|
||||
- 本任务原计划 2026-05-26 至 2026-06-01 连续运行 7 天,实际只保留 Day 1–Day 4 自动巡检记录;Day 3 没有独立 research 摘要文件,结论仅记录在 `implement.md`。
|
||||
- 缺 Day 5–Day 7、现场人工真实业务闭环和 Day 7 `GO / CONDITIONAL_GO / NO_GO` 决策,原 7 天稳定化目标没有完成。
|
||||
- 7 月生产可信度审计已确认旧 readiness 会把部分 `SKIP` 汇总成 clean `PASS`;历史 `findingCount=0` 只能证明当时运行过检查,不能证明最终启用就绪。
|
||||
- 用户明确选择关闭此历史任务:归档只表示任务生命周期关闭,不代表原目标达成,也不得补造缺失日期或人工证据。
|
||||
- 后续若重新做正式启用试运行,必须先部署并复核当前可信基线,再新建 Trellis task,从新的 Day 1 连续运行。
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"mode": "oaops1-authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-26T10:14:44.953Z",
|
||||
"readOnly": true,
|
||||
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
||||
"roles": {
|
||||
"admin": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"maskedIdentifier": "sm***om"
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"id": "portal",
|
||||
"role": "admin",
|
||||
"path": "/api/portal/home",
|
||||
"domain": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"role": "admin",
|
||||
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
||||
"domain": "approval",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements?page=1&pageSize=5",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 33
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursement-summary",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements/stats/summary",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"avgProcessingDays": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"role": "admin",
|
||||
"path": "/api/invoice-pool?page=1&pageSize=5",
|
||||
"domain": "invoice_ocr",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "purchase-requests",
|
||||
"role": "admin",
|
||||
"path": "/api/purchase-requests?page=1&pageSize=5",
|
||||
"domain": "procurement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contracts-registry",
|
||||
"role": "admin",
|
||||
"path": "/api/contracts-registry",
|
||||
"domain": "contracts",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 6,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"role": "admin",
|
||||
"path": "/api/projects?page=1&pageSize=5",
|
||||
"domain": "projects",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 4,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "audit-logs",
|
||||
"role": "admin",
|
||||
"path": "/api/audit-logs?page=1&pageSize=5",
|
||||
"domain": "audit",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 1957
|
||||
}
|
||||
}
|
||||
],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noExportsByDefault": true,
|
||||
"noFileUploads": true,
|
||||
"noWeComWrites": true,
|
||||
"noRealPaymentExecution": true
|
||||
}
|
||||
}
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"mode": "oaops1-authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-26T10:14:44.953Z",
|
||||
"readOnly": true,
|
||||
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
||||
"roles": {
|
||||
"admin": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"maskedIdentifier": "sm***om"
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"id": "portal",
|
||||
"role": "admin",
|
||||
"path": "/api/portal/home",
|
||||
"domain": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"role": "admin",
|
||||
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
||||
"domain": "approval",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements?page=1&pageSize=5",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 33
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursement-summary",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements/stats/summary",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"avgProcessingDays": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"role": "admin",
|
||||
"path": "/api/invoice-pool?page=1&pageSize=5",
|
||||
"domain": "invoice_ocr",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "purchase-requests",
|
||||
"role": "admin",
|
||||
"path": "/api/purchase-requests?page=1&pageSize=5",
|
||||
"domain": "procurement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contracts-registry",
|
||||
"role": "admin",
|
||||
"path": "/api/contracts-registry",
|
||||
"domain": "contracts",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 6,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"role": "admin",
|
||||
"path": "/api/projects?page=1&pageSize=5",
|
||||
"domain": "projects",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 4,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "audit-logs",
|
||||
"role": "admin",
|
||||
"path": "/api/audit-logs?page=1&pageSize=5",
|
||||
"domain": "audit",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 1957
|
||||
}
|
||||
}
|
||||
],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noExportsByDefault": true,
|
||||
"noFileUploads": true,
|
||||
"noWeComWrites": true,
|
||||
"noRealPaymentExecution": true
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/authenticated-readonly-probe.log",
|
||||
"checkedAt": "2026-05-26T10:14:45.047Z"
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"checkedAt": "2026-05-26T10:13:38.373Z",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"status": "PASS",
|
||||
"readOnly": true,
|
||||
"results": [
|
||||
{
|
||||
"flagKey": "payment_batch_v1",
|
||||
"expectedState": "force_on",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "payment_batch_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 17,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": true,
|
||||
"effectiveReason": "flag_force_on_global"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "erp_sync",
|
||||
"expectedState": "force_off",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "erp_sync",
|
||||
"overrideMode": "force_off",
|
||||
"rolloutType": "global",
|
||||
"version": 2,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": false,
|
||||
"effectiveReason": "flag_force_off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "attendance_v1",
|
||||
"expectedState": "disabled",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "attendance_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 71,
|
||||
"envEnabled": false,
|
||||
"effectiveEnabled": false,
|
||||
"effectiveReason": "env_hard_off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "attendance_unified_v1",
|
||||
"expectedState": "enabled",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "attendance_unified_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 69,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": true,
|
||||
"effectiveReason": "flag_force_on_global"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "live-feature-flags",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/live-feature-flags.log",
|
||||
"checkedAt": "2026-05-26T10:13:38.450Z"
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
>>> [live-readiness] 环境与公网入口检查
|
||||
[live-smoke-env] base=https://oa.hyinda.com
|
||||
[live-smoke-env] publicReady=true status=200
|
||||
[live-smoke-env] wecom=ready entry=true oauth=true
|
||||
[live-smoke-env] liveSmokeReady=true
|
||||
[live-smoke-env] liveOcrReady=true
|
||||
>>> [live-readiness] /ready: https://oa.hyinda.com
|
||||
>>> [live-readiness] 公网资源文案扫描
|
||||
[public-bundle-copy] base=https://oa.hyinda.com scanned=92 focused=2 findings=0
|
||||
>>> [live-readiness] pending OCR 扫描
|
||||
[pending-ocr][SKIP] missing DATABASE_URL
|
||||
>>> [live-readiness] 执行公网 live smoke
|
||||
>>> 探活 live /ready: https://oa.hyinda.com/ready
|
||||
>>> 执行 live smoke Playwright
|
||||
|
||||
> [email protected] test:e2e:live
|
||||
> playwright test tests/e2e/live-smoke.spec.ts
|
||||
|
||||
|
||||
Running 3 tests using 1 worker
|
||||
|
||||
(node:1705555) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:1705555) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/live-smoke.spec.ts:43:3 › live smoke › 公网基础探活与企微配置状态 (2.3s)
|
||||
✓ 2 tests/e2e/live-smoke.spec.ts:64:3 › live smoke › 管理员只读网页 smoke (11.3s)
|
||||
✓ 3 tests/e2e/live-smoke.spec.ts:106:3 › live smoke › 员工只读网页 smoke (9.7s)
|
||||
|
||||
3 passed (27.1s)
|
||||
>>> [live-readiness] 执行真实 OCR 样本复核
|
||||
|
||||
Running 1 test using 1 worker
|
||||
|
||||
(node:1706642) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:1706642) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
[live-ocr] {"alias":"SAMPLE-PDF-001","status":"ocr_failed","durationMs":977,"transport":"ui","timings":{"uploadMs":977,"terminalWaitMs":0},"reasonCategory":"duplicate_or_same_invoice","fieldHits":{"invoiceId":false,"invoiceCodeOrNumber":false,"sellerName":false,"totalAmount":false,"invoiceDate":false}}
|
||||
✓ 1 tests/e2e/manual/live-invoice-ocr.spec.ts:8:1 › 手工 live 腾讯 OCR 辅助复核:真实 VAT 发票上传后进入可处理状态 (6.1s)
|
||||
|
||||
1 passed (10.0s)
|
||||
[live-readiness][PASS] readiness 检查完成
|
||||
[live-readiness] report=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/live-smoke-readiness
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "live-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/live-readiness.log",
|
||||
"checkedAt": "2026-05-26T10:12:27.422Z"
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"checkedAt": "2026-05-26T10:11:37.357Z",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"liveSmokeReady": true,
|
||||
"liveSmoke": {
|
||||
"LIVE_SMOKE_ADMIN_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_ADMIN_PASSWORD": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_PASSWORD": true
|
||||
},
|
||||
"liveSmokeOptional": {
|
||||
"LIVE_EXPECT_WECOM_STATUS": true,
|
||||
"LIVE_SMOKE_MANAGER_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_MANAGER_PASSWORD": true,
|
||||
"LIVE_SMOKE_FINANCE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_FINANCE_PASSWORD": true
|
||||
},
|
||||
"liveOcrReady": true,
|
||||
"liveOcr": {
|
||||
"userReady": true,
|
||||
"invoiceSampleReady": true,
|
||||
"invoiceFileProvided": true,
|
||||
"invoiceFileReady": true,
|
||||
"invoiceBatchDirProvided": false,
|
||||
"invoiceBatchDirReady": false,
|
||||
"allowDuplicate": true
|
||||
},
|
||||
"missing": [],
|
||||
"publicReady": {
|
||||
"ok": true,
|
||||
"status": 200
|
||||
},
|
||||
"wecomConfig": {
|
||||
"ok": true,
|
||||
"status": 200,
|
||||
"statusText": "ready",
|
||||
"entryEnabled": true,
|
||||
"oauthEnabled": true,
|
||||
"defaultReturnTo": "/mobile",
|
||||
"loginUrl": "/api/auth/wecom/login?returnTo=%2Fmobile"
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "live-smoke-env",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/live-smoke-env.log",
|
||||
"checkedAt": "2026-05-26T10:11:37.604Z"
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"checkedAt": "2026-05-26T10:11:38.197Z",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"liveSmokeReady": true,
|
||||
"liveSmoke": {
|
||||
"LIVE_SMOKE_ADMIN_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_ADMIN_PASSWORD": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_PASSWORD": true
|
||||
},
|
||||
"liveSmokeOptional": {
|
||||
"LIVE_EXPECT_WECOM_STATUS": true,
|
||||
"LIVE_SMOKE_MANAGER_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_MANAGER_PASSWORD": true,
|
||||
"LIVE_SMOKE_FINANCE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_FINANCE_PASSWORD": true
|
||||
},
|
||||
"liveOcrReady": true,
|
||||
"liveOcr": {
|
||||
"userReady": true,
|
||||
"invoiceSampleReady": true,
|
||||
"invoiceFileProvided": true,
|
||||
"invoiceFileReady": true,
|
||||
"invoiceBatchDirProvided": false,
|
||||
"invoiceBatchDirReady": false,
|
||||
"allowDuplicate": true
|
||||
},
|
||||
"missing": [],
|
||||
"publicReady": {
|
||||
"ok": true,
|
||||
"status": 200
|
||||
},
|
||||
"wecomConfig": {
|
||||
"ok": true,
|
||||
"status": 200,
|
||||
"statusText": "ready",
|
||||
"entryEnabled": true,
|
||||
"oauthEnabled": true,
|
||||
"defaultReturnTo": "/mobile",
|
||||
"loginUrl": "/api/auth/wecom/login?returnTo=%2Fmobile"
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
|
||||
Running 1 test using 1 worker
|
||||
|
||||
[live-ocr] {"alias":"SAMPLE-PDF-001","status":"ocr_failed","durationMs":977,"transport":"ui","timings":{"uploadMs":977,"terminalWaitMs":0},"reasonCategory":"duplicate_or_same_invoice","fieldHits":{"invoiceId":false,"invoiceCodeOrNumber":false,"sellerName":false,"totalAmount":false,"invoiceDate":false}}
|
||||
✓ 1 tests/e2e/manual/live-invoice-ocr.spec.ts:8:1 › 手工 live 腾讯 OCR 辅助复核:真实 VAT 发票上传后进入可处理状态 (6.1s)
|
||||
|
||||
1 passed (10.0s)
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
>>> 探活 live /ready: https://oa.hyinda.com/ready
|
||||
>>> 执行 live smoke Playwright
|
||||
|
||||
> [email protected] test:e2e:live
|
||||
> playwright test tests/e2e/live-smoke.spec.ts
|
||||
|
||||
|
||||
Running 3 tests using 1 worker
|
||||
|
||||
✓ 1 tests/e2e/live-smoke.spec.ts:43:3 › live smoke › 公网基础探活与企微配置状态 (2.3s)
|
||||
✓ 2 tests/e2e/live-smoke.spec.ts:64:3 › live smoke › 管理员只读网页 smoke (11.3s)
|
||||
✓ 3 tests/e2e/live-smoke.spec.ts:106:3 › live smoke › 员工只读网页 smoke (9.7s)
|
||||
|
||||
3 passed (27.1s)
|
||||
+1
@@ -0,0 +1 @@
|
||||
[pending-ocr][SKIP] missing DATABASE_URL
|
||||
+1
@@ -0,0 +1 @@
|
||||
[public-bundle-copy] base=https://oa.hyinda.com scanned=92 focused=2 findings=0
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"issueId": "OAOPS1",
|
||||
"baseURL": "https://oa.hyinda.com",
|
||||
"commit": "74f8410",
|
||||
"checkedAt": "2026-05-26T10:12:27.348Z",
|
||||
"status": "PASS",
|
||||
"mode": "live-smoke-readiness",
|
||||
"reportRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/live-smoke-readiness",
|
||||
"groups": null,
|
||||
"notes": "公网 /ready、public bundle、pending OCR、live smoke 和真实 OCR 可用性检查;缺少凭据或样票时按脚本规则记录 SKIP。"
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
# OAOPS1 每日人工收口清单
|
||||
|
||||
## 员工
|
||||
- 真实报销:上传 PDF 发票,补充必要附件,提交 OA 审批。
|
||||
- 采购/费用:在 OA 创建申请,关联项目;如涉及合同,关联或补录合同台账。
|
||||
- 合同:只录入合同摘要、编号、负责人、项目、金额、线下归档位置;涉密合同正文、敏感报价和成本细节不上传公网 OA。
|
||||
|
||||
## 审批人
|
||||
- 从 OA 待办进入详情,确认报销、采购、合同或项目上下文后再审批。
|
||||
- 退回时写清需要补充的材料,避免线下口头说明替代系统记录。
|
||||
|
||||
## 出纳/财务
|
||||
- 审批通过后创建付款批次,线下银行渠道付款。
|
||||
- 上传银行回单附件后再在 OA 标记已付款。
|
||||
- 每日抽查 AP 台账、报销导出、票据状态和付款批次状态。
|
||||
|
||||
## 管理员
|
||||
- 查看本报告 summary.json 和人工问题登记。
|
||||
- 阻断项当天建修复 Issue CSV 或暂停对应流程;非阻断体验问题进入反馈池。
|
||||
- 确认 payment_batch_v1=force_on,erp_sync=force_off;图片 OCR、预算、ERP、银行流水导入、真实支付直连继续冻结。
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
|
||||
Running 1 test using 1 worker
|
||||
|
||||
(node:1713822) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:1713822) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/r124-mobile-entry-matrix.spec.ts:486:3 › R124 企业微信移动入口矩阵 › 底部入口、我的二级入口、PDF 上传和草稿删除不回退到 PC 体验 (13.9s)
|
||||
|
||||
1 passed (17.5s)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "mobile-entry-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/mobile-entry-matrix.log",
|
||||
"checkedAt": "2026-05-26T10:15:08.808Z"
|
||||
}
|
||||
+392
@@ -0,0 +1,392 @@
|
||||
{
|
||||
"issueId": "OSMOKE1",
|
||||
"mode": "oa-only-smoke-readiness",
|
||||
"status": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"conclusion": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-26T10:12:32.163Z",
|
||||
"businessReadOnly": true,
|
||||
"readOnlyNote": "performs login/readiness probes only; no business data writes and no WeCom writes",
|
||||
"privacy": "role/masked identifier/status/counts only; no password/token/secret/full email/full phone",
|
||||
"targets": [
|
||||
{
|
||||
"key": "admin",
|
||||
"expectedRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"admin",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 7,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "users",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 13
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "employee",
|
||||
"expectedRoles": [
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "my-assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "manager",
|
||||
"expectedRoles": [
|
||||
"manager",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"manager"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"manager"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "ceo",
|
||||
"expectedRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"ceo",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "dashboard",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"paidCount": 8,
|
||||
"reviewingCount": 3
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance_mgr",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"finance_mgr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "hr",
|
||||
"expectedRoles": [
|
||||
"hr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"hr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "wecom-archive",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 9
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"hr"
|
||||
],
|
||||
"missingRoles": []
|
||||
}
|
||||
],
|
||||
"findings": [],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noWeComWrites": true,
|
||||
"noPasswordOutput": true,
|
||||
"noRealEmployeeIdentifiers": true
|
||||
}
|
||||
}
|
||||
[oa-only-smoke-readiness] report=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/oa-only-smoke-readiness/summary.json
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "oa-only-smoke-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/oa-only-smoke-readiness.log",
|
||||
"checkedAt": "2026-05-26T10:12:32.263Z"
|
||||
}
|
||||
+391
@@ -0,0 +1,391 @@
|
||||
{
|
||||
"issueId": "OSMOKE1",
|
||||
"mode": "oa-only-smoke-readiness",
|
||||
"status": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"conclusion": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-26T10:12:32.163Z",
|
||||
"businessReadOnly": true,
|
||||
"readOnlyNote": "performs login/readiness probes only; no business data writes and no WeCom writes",
|
||||
"privacy": "role/masked identifier/status/counts only; no password/token/secret/full email/full phone",
|
||||
"targets": [
|
||||
{
|
||||
"key": "admin",
|
||||
"expectedRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"admin",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 7,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "users",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 13
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "employee",
|
||||
"expectedRoles": [
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "my-assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "manager",
|
||||
"expectedRoles": [
|
||||
"manager",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"manager"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"manager"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "ceo",
|
||||
"expectedRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"ceo",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "dashboard",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"paidCount": 8,
|
||||
"reviewingCount": 3
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance_mgr",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"finance_mgr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "hr",
|
||||
"expectedRoles": [
|
||||
"hr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"hr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "wecom-archive",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 9
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"hr"
|
||||
],
|
||||
"missingRoles": []
|
||||
}
|
||||
],
|
||||
"findings": [],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noWeComWrites": true,
|
||||
"noPasswordOutput": true,
|
||||
"noRealEmployeeIdentifiers": true
|
||||
}
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"requestId":"4cbe3fe5-d139-4f74-89f1-8680e05fe46b","data":{"ok":true}}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "public-ready",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/public-ready.log",
|
||||
"checkedAt": "2026-05-26T10:11:36.837Z"
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "report-privacy-smoke",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/report-privacy-smoke.log",
|
||||
"checkedAt": "2026-05-26T10:16:33.921Z"
|
||||
}
|
||||
+294
@@ -0,0 +1,294 @@
|
||||
{
|
||||
"issueId": "OAOPS1",
|
||||
"mode": "oa-real-use-daily",
|
||||
"status": "PASS_OA_REAL_USE_DAILY_READY",
|
||||
"conclusion": "PASS_OA_REAL_USE_DAILY_READY",
|
||||
"baseURL": "https://oa.hyinda.com",
|
||||
"commit": "74f8410",
|
||||
"checkedAt": "2026-05-26T10:16:33.831Z",
|
||||
"reportRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily",
|
||||
"window": {
|
||||
"durationDays": 7,
|
||||
"scope": "small-team-all-employees",
|
||||
"realBusinessDataAllowed": true,
|
||||
"fixPolicy": "blocking_same_day_issue_contract_nonblocking_feedback_pool"
|
||||
},
|
||||
"oaPrimaryDomains": [
|
||||
"reimbursement_pdf_ocr",
|
||||
"approval_tasks",
|
||||
"procurement_expense",
|
||||
"contracts_registry",
|
||||
"projects",
|
||||
"payment_batches",
|
||||
"bank_receipt_attachments",
|
||||
"ap_accounting_handoff",
|
||||
"mobile_wecom_entry",
|
||||
"audit"
|
||||
],
|
||||
"frozenItems": [
|
||||
"image_ocr",
|
||||
"complex_bpm",
|
||||
"budget_control",
|
||||
"erp_write",
|
||||
"bank_statement_import",
|
||||
"real_payment_provider",
|
||||
"wecom_hr_deep_mirror",
|
||||
"emergency_takeover",
|
||||
"recovery_writeback",
|
||||
"ruleops"
|
||||
],
|
||||
"boundaries": {
|
||||
"defaultReadOnlyAutomation": true,
|
||||
"manualRealBusinessWritesOnly": true,
|
||||
"paymentBatchExpected": "force_on",
|
||||
"erpExpected": "force_off",
|
||||
"actualPaymentChannel": "offline_bank_channel",
|
||||
"contractSensitiveFiles": "do_not_upload_confidential_body_sensitive_quote_cost_detail_to_public_oa"
|
||||
},
|
||||
"childReports": {
|
||||
"liveReadiness": {
|
||||
"status": "PASS",
|
||||
"reportRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/live-smoke-readiness/summary.json",
|
||||
"findingCount": 0,
|
||||
"openCount": 0
|
||||
},
|
||||
"oaOnlySmokeReadiness": {
|
||||
"status": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"reportRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/oa-only-smoke-readiness/summary.json",
|
||||
"findingCount": 0,
|
||||
"openCount": 0
|
||||
}
|
||||
},
|
||||
"steps": {
|
||||
"public-ready": {
|
||||
"name": "public-ready",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/public-ready.log",
|
||||
"checkedAt": "2026-05-26T10:11:36.837Z"
|
||||
},
|
||||
"live-smoke-env": {
|
||||
"name": "live-smoke-env",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/live-smoke-env.log",
|
||||
"checkedAt": "2026-05-26T10:11:37.604Z"
|
||||
},
|
||||
"live-readiness": {
|
||||
"name": "live-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/live-readiness.log",
|
||||
"checkedAt": "2026-05-26T10:12:27.422Z"
|
||||
},
|
||||
"oa-only-smoke-readiness": {
|
||||
"name": "oa-only-smoke-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/oa-only-smoke-readiness.log",
|
||||
"checkedAt": "2026-05-26T10:12:32.263Z"
|
||||
},
|
||||
"live-feature-flags": {
|
||||
"name": "live-feature-flags",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/live-feature-flags.log",
|
||||
"checkedAt": "2026-05-26T10:13:38.450Z"
|
||||
},
|
||||
"authenticated-readonly-probe": {
|
||||
"name": "authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/authenticated-readonly-probe.log",
|
||||
"checkedAt": "2026-05-26T10:14:45.047Z"
|
||||
},
|
||||
"mobile-entry-matrix": {
|
||||
"name": "mobile-entry-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/mobile-entry-matrix.log",
|
||||
"checkedAt": "2026-05-26T10:15:08.808Z"
|
||||
},
|
||||
"wecom-rendering-matrix": {
|
||||
"name": "wecom-rendering-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/wecom-rendering-matrix.log",
|
||||
"checkedAt": "2026-05-26T10:16:15.645Z"
|
||||
},
|
||||
"wecom-entry": {
|
||||
"name": "wecom-entry",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/wecom-entry.log",
|
||||
"checkedAt": "2026-05-26T10:16:33.575Z"
|
||||
},
|
||||
"report-privacy-smoke": {
|
||||
"name": "report-privacy-smoke",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/report-privacy-smoke.log",
|
||||
"checkedAt": "2026-05-26T10:16:33.748Z"
|
||||
}
|
||||
},
|
||||
"readonlyProbe": {
|
||||
"mode": "oaops1-authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-26T10:14:44.953Z",
|
||||
"readOnly": true,
|
||||
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
||||
"roles": {
|
||||
"admin": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"maskedIdentifier": "sm***om"
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"id": "portal",
|
||||
"role": "admin",
|
||||
"path": "/api/portal/home",
|
||||
"domain": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"role": "admin",
|
||||
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
||||
"domain": "approval",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements?page=1&pageSize=5",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 33
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursement-summary",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements/stats/summary",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"avgProcessingDays": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"role": "admin",
|
||||
"path": "/api/invoice-pool?page=1&pageSize=5",
|
||||
"domain": "invoice_ocr",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "purchase-requests",
|
||||
"role": "admin",
|
||||
"path": "/api/purchase-requests?page=1&pageSize=5",
|
||||
"domain": "procurement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contracts-registry",
|
||||
"role": "admin",
|
||||
"path": "/api/contracts-registry",
|
||||
"domain": "contracts",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 6,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"role": "admin",
|
||||
"path": "/api/projects?page=1&pageSize=5",
|
||||
"domain": "projects",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 4,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "audit-logs",
|
||||
"role": "admin",
|
||||
"path": "/api/audit-logs?page=1&pageSize=5",
|
||||
"domain": "audit",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 1957
|
||||
}
|
||||
}
|
||||
],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noExportsByDefault": true,
|
||||
"noFileUploads": true,
|
||||
"noWeComWrites": true,
|
||||
"noRealPaymentExecution": true
|
||||
}
|
||||
},
|
||||
"findingCount": 0,
|
||||
"findings": [],
|
||||
"manualGates": {
|
||||
"dailyCloseout": "管理员每日查看 summary.json 和 manual-gates.md,阻断即修,非阻断入反馈池。",
|
||||
"day7Closeout": [
|
||||
"A:接受 PASS_OA_REAL_USE_READY,进入下一轮体验/效率优化。",
|
||||
"B:接受 PASS_WITH_FINDINGS,但先处理指定 finding。",
|
||||
"C:暂停真实使用扩展,先做整改。"
|
||||
]
|
||||
},
|
||||
"privacy": "status/count/report-path summaries only; no phone/email/token/Secret/EncodingAESKey/full external ids/full invoice image/full bank receipt/full contract body/raw payload"
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
[oaops1] loaded masked live smoke env file
|
||||
>>> [oaops1] public-ready
|
||||
[oaops1][PASS] public-ready
|
||||
>>> [oaops1] live-smoke-env
|
||||
[oaops1][PASS] live-smoke-env
|
||||
>>> [oaops1] live-readiness
|
||||
[oaops1][PASS] live-readiness
|
||||
>>> [oaops1] oa-only-smoke-readiness
|
||||
[oaops1][PASS] oa-only-smoke-readiness
|
||||
[oaops1] login cooldown 65s before live-feature-flags
|
||||
>>> [oaops1] live-feature-flags
|
||||
[oaops1][PASS] live-feature-flags
|
||||
[oaops1] login cooldown 65s before authenticated-readonly-probe
|
||||
>>> [oaops1] authenticated-readonly-probe
|
||||
[oaops1][PASS] authenticated-readonly-probe
|
||||
>>> [oaops1] mobile-entry-matrix
|
||||
[oaops1][PASS] mobile-entry-matrix
|
||||
>>> [oaops1] wecom-rendering-matrix
|
||||
[oaops1][PASS] wecom-rendering-matrix
|
||||
>>> [oaops1] wecom-entry
|
||||
[oaops1][PASS] wecom-entry
|
||||
[oaops1][PASS] report-privacy-smoke
|
||||
[oaops1][PASS] report-privacy-smoke
|
||||
[oaops1] report=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
|
||||
Running 2 tests using 1 worker
|
||||
|
||||
(node:1717026) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:1717026) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/wecom-entry.spec.ts:30:1 › E2E 企微入口:普通浏览器下企微按钮为次级入口 (6.5s)
|
||||
✓ 2 tests/e2e/wecom-entry.spec.ts:63:1 › E2E 企微入口:企业微信场景优先显示企微 CTA,并展示未绑定提示 (1.9s)
|
||||
|
||||
2 passed (12.0s)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "wecom-entry",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/wecom-entry.log",
|
||||
"checkedAt": "2026-05-26T10:16:33.575Z"
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
|
||||
Running 8 tests using 1 worker
|
||||
|
||||
(node:1714831) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:1714831) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:572:7 › WCM6 企业微信多手机移动渲染稳定化 › 320 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.1s)
|
||||
✓ 2 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:572:7 › WCM6 企业微信多手机移动渲染稳定化 › 360 Android 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.1s)
|
||||
✓ 3 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:572:7 › WCM6 企业微信多手机移动渲染稳定化 › 375 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.4s)
|
||||
✓ 4 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:572:7 › WCM6 企业微信多手机移动渲染稳定化 › 390 iPhone12 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.3s)
|
||||
✓ 5 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:572:7 › WCM6 企业微信多手机移动渲染稳定化 › 393 Android 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.1s)
|
||||
✓ 6 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:572:7 › WCM6 企业微信多手机移动渲染稳定化 › 414 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.2s)
|
||||
✓ 7 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:572:7 › WCM6 企业微信多手机移动渲染稳定化 › 430 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.0s)
|
||||
✓ 8 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:5 › WCM6 企业微信多手机移动渲染稳定化 › 390 iPhone12 企业微信 字体失败 › Material Symbols 字体失败时核心移动入口仍稳定 (7.1s)
|
||||
|
||||
8 passed (1.0m)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "wecom-rendering-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day1-oa-real-use-daily/wecom-rendering-matrix.log",
|
||||
"checkedAt": "2026-05-26T10:16:15.645Z"
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
# Day 1 启动摘要
|
||||
|
||||
## 结论
|
||||
|
||||
`PASS_OA_REAL_USE_DAILY_READY`
|
||||
|
||||
OA 7 天真实使用稳定化已按 2026-05-26 启动。Day 1 只读自动巡检通过,未发现 blocker 或 finding。真实业务写入仍仅由现场人工在公网 OA 内完成;本次自动化没有创建、提交、审批、付款或导出真实业务数据。
|
||||
|
||||
## 时间窗口
|
||||
|
||||
- Day 1:2026-05-26
|
||||
- Day 7 计划收口:2026-06-01
|
||||
- 公网地址:`https://oa.hyinda.com`
|
||||
- 巡检 commit:`74f8410`
|
||||
|
||||
## 自动巡检结果
|
||||
|
||||
| 项目 | 结论 |
|
||||
| --- | --- |
|
||||
| `/ready` | PASS |
|
||||
| live smoke 环境 | PASS |
|
||||
| live readiness | PASS |
|
||||
| OA-only 角色只读 smoke | PASS |
|
||||
| 功能开关 | PASS |
|
||||
| 认证只读探针 | PASS |
|
||||
| 移动入口矩阵 | PASS |
|
||||
| 企业微信多视口渲染矩阵 | PASS |
|
||||
| 企业微信入口 | PASS |
|
||||
| 报告隐私扫描 | PASS |
|
||||
|
||||
## 关键边界
|
||||
|
||||
- `payment_batch_v1=force_on`。
|
||||
- `erp_sync=force_off`。
|
||||
- 图片 OCR、复杂 BPM、预算硬控、ERP 写入、银行流水导入、真实支付接口、企业微信 HR 深镜像、应急接管、恢复回写和 RuleOps 继续冻结。
|
||||
- OCR live 样票进入重复/相同发票的可解释终态,不作为阻断。
|
||||
- 本轮报告只保留状态、计数和相对证据路径,不保留密码、token、Secret、完整账号、票据原件、合同正文、银行资料或 raw payload。
|
||||
|
||||
## 证据
|
||||
|
||||
- 主报告:`research/day1-oa-real-use-daily/summary.json`
|
||||
- 人工每日收口清单:`research/day1-oa-real-use-daily/manual-gates.md`
|
||||
- live readiness 子报告:`research/day1-oa-real-use-daily/live-smoke-readiness/summary.json`
|
||||
- OA-only smoke 子报告:`research/day1-oa-real-use-daily/oa-only-smoke-readiness/summary.json`
|
||||
|
||||
## 现场人工动作
|
||||
|
||||
Day 1 后现场按角色执行真实业务动作:
|
||||
|
||||
- 员工:真实报销/PDF 发票、采购/费用申请,必要时关联项目或合同。
|
||||
- 审批人:从 OA 待办进入详情审批或退回。
|
||||
- 财务/出纳:付款批次、线下银行付款、回单附件、已付款标记、AP/报销/票据抽查。
|
||||
- 管理员:查看 `summary.json` 和 `manual-gates.md`,阻断当天建修复任务,非阻断进入反馈池。
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"mode": "oaops1-authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-27T07:54:31.804Z",
|
||||
"readOnly": true,
|
||||
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
||||
"roles": {
|
||||
"admin": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"maskedIdentifier": "sm***om"
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"id": "portal",
|
||||
"role": "admin",
|
||||
"path": "/api/portal/home",
|
||||
"domain": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"role": "admin",
|
||||
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
||||
"domain": "approval",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements?page=1&pageSize=5",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 33
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursement-summary",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements/stats/summary",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"avgProcessingDays": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"role": "admin",
|
||||
"path": "/api/invoice-pool?page=1&pageSize=5",
|
||||
"domain": "invoice_ocr",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "purchase-requests",
|
||||
"role": "admin",
|
||||
"path": "/api/purchase-requests?page=1&pageSize=5",
|
||||
"domain": "procurement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contracts-registry",
|
||||
"role": "admin",
|
||||
"path": "/api/contracts-registry",
|
||||
"domain": "contracts",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 6,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"role": "admin",
|
||||
"path": "/api/projects?page=1&pageSize=5",
|
||||
"domain": "projects",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 4,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "audit-logs",
|
||||
"role": "admin",
|
||||
"path": "/api/audit-logs?page=1&pageSize=5",
|
||||
"domain": "audit",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 2023
|
||||
}
|
||||
}
|
||||
],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noExportsByDefault": true,
|
||||
"noFileUploads": true,
|
||||
"noWeComWrites": true,
|
||||
"noRealPaymentExecution": true
|
||||
}
|
||||
}
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"mode": "oaops1-authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-27T07:54:31.804Z",
|
||||
"readOnly": true,
|
||||
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
||||
"roles": {
|
||||
"admin": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"maskedIdentifier": "sm***om"
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"id": "portal",
|
||||
"role": "admin",
|
||||
"path": "/api/portal/home",
|
||||
"domain": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"role": "admin",
|
||||
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
||||
"domain": "approval",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements?page=1&pageSize=5",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 33
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursement-summary",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements/stats/summary",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"avgProcessingDays": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"role": "admin",
|
||||
"path": "/api/invoice-pool?page=1&pageSize=5",
|
||||
"domain": "invoice_ocr",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "purchase-requests",
|
||||
"role": "admin",
|
||||
"path": "/api/purchase-requests?page=1&pageSize=5",
|
||||
"domain": "procurement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contracts-registry",
|
||||
"role": "admin",
|
||||
"path": "/api/contracts-registry",
|
||||
"domain": "contracts",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 6,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"role": "admin",
|
||||
"path": "/api/projects?page=1&pageSize=5",
|
||||
"domain": "projects",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 4,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "audit-logs",
|
||||
"role": "admin",
|
||||
"path": "/api/audit-logs?page=1&pageSize=5",
|
||||
"domain": "audit",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 2023
|
||||
}
|
||||
}
|
||||
],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noExportsByDefault": true,
|
||||
"noFileUploads": true,
|
||||
"noWeComWrites": true,
|
||||
"noRealPaymentExecution": true
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/authenticated-readonly-probe.log",
|
||||
"checkedAt": "2026-05-27T07:54:31.990Z"
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"checkedAt": "2026-05-27T07:53:25.260Z",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"status": "PASS",
|
||||
"readOnly": true,
|
||||
"results": [
|
||||
{
|
||||
"flagKey": "payment_batch_v1",
|
||||
"expectedState": "force_on",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "payment_batch_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 17,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": true,
|
||||
"effectiveReason": "flag_force_on_global"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "erp_sync",
|
||||
"expectedState": "force_off",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "erp_sync",
|
||||
"overrideMode": "force_off",
|
||||
"rolloutType": "global",
|
||||
"version": 2,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": false,
|
||||
"effectiveReason": "flag_force_off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "attendance_v1",
|
||||
"expectedState": "disabled",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "attendance_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 76,
|
||||
"envEnabled": false,
|
||||
"effectiveEnabled": false,
|
||||
"effectiveReason": "env_hard_off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "attendance_unified_v1",
|
||||
"expectedState": "enabled",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "attendance_unified_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 74,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": true,
|
||||
"effectiveReason": "flag_force_on_global"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "live-feature-flags",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/live-feature-flags.log",
|
||||
"checkedAt": "2026-05-27T07:53:25.334Z"
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
>>> [live-readiness] 环境与公网入口检查
|
||||
[live-smoke-env] base=https://oa.hyinda.com
|
||||
[live-smoke-env] publicReady=true status=200
|
||||
[live-smoke-env] wecom=ready entry=true oauth=true
|
||||
[live-smoke-env] authCapabilities=true emailDelivery=true
|
||||
[live-smoke-env] liveSmokeReady=true
|
||||
[live-smoke-env] liveOcrReady=true
|
||||
>>> [live-readiness] /ready: https://oa.hyinda.com
|
||||
>>> [live-readiness] 公网资源文案扫描
|
||||
[public-bundle-copy] base=https://oa.hyinda.com scanned=92 focused=2 findings=0
|
||||
>>> [live-readiness] pending OCR 扫描
|
||||
[pending-ocr][SKIP] missing DATABASE_URL
|
||||
>>> [live-readiness] 执行公网 live smoke
|
||||
>>> 探活 live /ready: https://oa.hyinda.com/ready
|
||||
>>> 执行 live smoke Playwright
|
||||
|
||||
> [email protected] test:e2e:live
|
||||
> playwright test tests/e2e/live-smoke.spec.ts
|
||||
|
||||
|
||||
Running 3 tests using 1 worker
|
||||
|
||||
(node:276425) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:276425) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/live-smoke.spec.ts:43:3 › live smoke › 公网基础探活与企微配置状态 (3.0s)
|
||||
✓ 2 tests/e2e/live-smoke.spec.ts:64:3 › live smoke › 管理员只读网页 smoke (9.8s)
|
||||
✓ 3 tests/e2e/live-smoke.spec.ts:106:3 › live smoke › 员工只读网页 smoke (10.0s)
|
||||
|
||||
3 passed (26.5s)
|
||||
>>> [live-readiness] 执行真实 OCR 样本复核
|
||||
|
||||
Running 1 test using 1 worker
|
||||
|
||||
(node:277212) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:277212) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
[live-ocr] {"alias":"SAMPLE-PDF-001","status":"ocr_failed","durationMs":718,"transport":"ui","timings":{"uploadMs":718,"terminalWaitMs":0},"reasonCategory":"duplicate_or_same_invoice","fieldHits":{"invoiceId":false,"invoiceCodeOrNumber":false,"sellerName":false,"totalAmount":false,"invoiceDate":false}}
|
||||
✓ 1 tests/e2e/manual/live-invoice-ocr.spec.ts:8:1 › 手工 live 腾讯 OCR 辅助复核:真实 VAT 发票上传后进入可处理状态 (6.2s)
|
||||
|
||||
1 passed (10.0s)
|
||||
[live-readiness][PASS] readiness 检查完成
|
||||
[live-readiness] report=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/live-smoke-readiness
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "live-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/live-readiness.log",
|
||||
"checkedAt": "2026-05-27T07:52:14.477Z"
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"checkedAt": "2026-05-27T07:51:23.771Z",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"liveSmokeReady": true,
|
||||
"liveSmoke": {
|
||||
"LIVE_SMOKE_ADMIN_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_ADMIN_PASSWORD": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_PASSWORD": true
|
||||
},
|
||||
"liveSmokeOptional": {
|
||||
"LIVE_EXPECT_WECOM_STATUS": true,
|
||||
"LIVE_SMOKE_MANAGER_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_MANAGER_PASSWORD": true,
|
||||
"LIVE_SMOKE_FINANCE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_FINANCE_PASSWORD": true
|
||||
},
|
||||
"liveOcrReady": true,
|
||||
"liveOcr": {
|
||||
"userReady": true,
|
||||
"invoiceSampleReady": true,
|
||||
"invoiceFileProvided": true,
|
||||
"invoiceFileReady": true,
|
||||
"invoiceBatchDirProvided": false,
|
||||
"invoiceBatchDirReady": false,
|
||||
"allowDuplicate": true
|
||||
},
|
||||
"missing": [],
|
||||
"publicReady": {
|
||||
"ok": true,
|
||||
"status": 200
|
||||
},
|
||||
"wecomConfig": {
|
||||
"ok": true,
|
||||
"status": 200,
|
||||
"statusText": "ready",
|
||||
"entryEnabled": true,
|
||||
"oauthEnabled": true,
|
||||
"defaultReturnTo": "/mobile",
|
||||
"loginUrl": "/api/auth/wecom/login?returnTo=%2Fmobile"
|
||||
},
|
||||
"authCapabilities": {
|
||||
"ok": true,
|
||||
"status": 200,
|
||||
"emailDeliveryReady": true,
|
||||
"emailDeliveryReasons": [],
|
||||
"emailLoginCodeEnabled": true,
|
||||
"passwordResetEnabled": true
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "live-smoke-env",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/live-smoke-env.log",
|
||||
"checkedAt": "2026-05-27T07:51:23.843Z"
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"checkedAt": "2026-05-27T07:51:24.334Z",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"liveSmokeReady": true,
|
||||
"liveSmoke": {
|
||||
"LIVE_SMOKE_ADMIN_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_ADMIN_PASSWORD": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_PASSWORD": true
|
||||
},
|
||||
"liveSmokeOptional": {
|
||||
"LIVE_EXPECT_WECOM_STATUS": true,
|
||||
"LIVE_SMOKE_MANAGER_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_MANAGER_PASSWORD": true,
|
||||
"LIVE_SMOKE_FINANCE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_FINANCE_PASSWORD": true
|
||||
},
|
||||
"liveOcrReady": true,
|
||||
"liveOcr": {
|
||||
"userReady": true,
|
||||
"invoiceSampleReady": true,
|
||||
"invoiceFileProvided": true,
|
||||
"invoiceFileReady": true,
|
||||
"invoiceBatchDirProvided": false,
|
||||
"invoiceBatchDirReady": false,
|
||||
"allowDuplicate": true
|
||||
},
|
||||
"missing": [],
|
||||
"publicReady": {
|
||||
"ok": true,
|
||||
"status": 200
|
||||
},
|
||||
"wecomConfig": {
|
||||
"ok": true,
|
||||
"status": 200,
|
||||
"statusText": "ready",
|
||||
"entryEnabled": true,
|
||||
"oauthEnabled": true,
|
||||
"defaultReturnTo": "/mobile",
|
||||
"loginUrl": "/api/auth/wecom/login?returnTo=%2Fmobile"
|
||||
},
|
||||
"authCapabilities": {
|
||||
"ok": true,
|
||||
"status": 200,
|
||||
"emailDeliveryReady": true,
|
||||
"emailDeliveryReasons": [],
|
||||
"emailLoginCodeEnabled": true,
|
||||
"passwordResetEnabled": true
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
|
||||
Running 1 test using 1 worker
|
||||
|
||||
[live-ocr] {"alias":"SAMPLE-PDF-001","status":"ocr_failed","durationMs":718,"transport":"ui","timings":{"uploadMs":718,"terminalWaitMs":0},"reasonCategory":"duplicate_or_same_invoice","fieldHits":{"invoiceId":false,"invoiceCodeOrNumber":false,"sellerName":false,"totalAmount":false,"invoiceDate":false}}
|
||||
✓ 1 tests/e2e/manual/live-invoice-ocr.spec.ts:8:1 › 手工 live 腾讯 OCR 辅助复核:真实 VAT 发票上传后进入可处理状态 (6.2s)
|
||||
|
||||
1 passed (10.0s)
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
>>> 探活 live /ready: https://oa.hyinda.com/ready
|
||||
>>> 执行 live smoke Playwright
|
||||
|
||||
> [email protected] test:e2e:live
|
||||
> playwright test tests/e2e/live-smoke.spec.ts
|
||||
|
||||
|
||||
Running 3 tests using 1 worker
|
||||
|
||||
✓ 1 tests/e2e/live-smoke.spec.ts:43:3 › live smoke › 公网基础探活与企微配置状态 (3.0s)
|
||||
✓ 2 tests/e2e/live-smoke.spec.ts:64:3 › live smoke › 管理员只读网页 smoke (9.8s)
|
||||
✓ 3 tests/e2e/live-smoke.spec.ts:106:3 › live smoke › 员工只读网页 smoke (10.0s)
|
||||
|
||||
3 passed (26.5s)
|
||||
+1
@@ -0,0 +1 @@
|
||||
[pending-ocr][SKIP] missing DATABASE_URL
|
||||
+1
@@ -0,0 +1 @@
|
||||
[public-bundle-copy] base=https://oa.hyinda.com scanned=92 focused=2 findings=0
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"issueId": "OAOPS1",
|
||||
"baseURL": "https://oa.hyinda.com",
|
||||
"commit": "9d75f1c",
|
||||
"checkedAt": "2026-05-27T07:52:14.413Z",
|
||||
"status": "PASS",
|
||||
"mode": "live-smoke-readiness",
|
||||
"reportDir": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/live-smoke-readiness",
|
||||
"groups": null,
|
||||
"notes": "公网 /ready、public bundle、pending OCR、live smoke 和真实 OCR 可用性检查;缺少凭据或样票时按脚本规则记录 SKIP。"
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
# OAOPS1 每日人工收口清单
|
||||
|
||||
## 员工
|
||||
- 真实报销:上传 PDF 发票,补充必要附件,提交 OA 审批。
|
||||
- 采购/费用:在 OA 创建申请,关联项目;如涉及合同,关联或补录合同台账。
|
||||
- 合同:只录入合同摘要、编号、负责人、项目、金额、线下归档位置;涉密合同正文、敏感报价和成本细节不上传公网 OA。
|
||||
|
||||
## 审批人
|
||||
- 从 OA 待办进入详情,确认报销、采购、合同或项目上下文后再审批。
|
||||
- 退回时写清需要补充的材料,避免线下口头说明替代系统记录。
|
||||
|
||||
## 出纳/财务
|
||||
- 审批通过后创建付款批次,线下银行渠道付款。
|
||||
- 上传银行回单附件后再在 OA 标记已付款。
|
||||
- 每日抽查 AP 台账、报销导出、票据状态和付款批次状态。
|
||||
|
||||
## 管理员
|
||||
- 查看本报告 summary.json 和人工问题登记。
|
||||
- 阻断项当天建修复 Issue CSV 或暂停对应流程;非阻断体验问题进入反馈池。
|
||||
- 确认 payment_batch_v1=force_on,erp_sync=force_off;图片 OCR、预算、ERP、银行流水导入、真实支付直连继续冻结。
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
|
||||
Running 1 test using 1 worker
|
||||
|
||||
(node:281919) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:281919) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/r124-mobile-entry-matrix.spec.ts:486:3 › R124 企业微信移动入口矩阵 › 底部入口、我的二级入口、PDF 上传和草稿删除不回退到 PC 体验 (13.1s)
|
||||
|
||||
1 passed (16.8s)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "mobile-entry-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/mobile-entry-matrix.log",
|
||||
"checkedAt": "2026-05-27T07:54:54.815Z"
|
||||
}
|
||||
+392
@@ -0,0 +1,392 @@
|
||||
{
|
||||
"issueId": "OSMOKE1",
|
||||
"mode": "oa-only-smoke-readiness",
|
||||
"status": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"conclusion": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-27T07:52:19.310Z",
|
||||
"businessReadOnly": true,
|
||||
"readOnlyNote": "performs login/readiness probes only; no business data writes and no WeCom writes",
|
||||
"privacy": "role/masked identifier/status/counts only; no password/token/secret/full email/full phone",
|
||||
"targets": [
|
||||
{
|
||||
"key": "admin",
|
||||
"expectedRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"admin",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 7,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "users",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 13
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "employee",
|
||||
"expectedRoles": [
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "my-assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "manager",
|
||||
"expectedRoles": [
|
||||
"manager",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"manager"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"manager"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "ceo",
|
||||
"expectedRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"ceo",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "dashboard",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"paidCount": 8,
|
||||
"reviewingCount": 3
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance_mgr",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"finance_mgr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "hr",
|
||||
"expectedRoles": [
|
||||
"hr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"hr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "wecom-archive",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 9
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"hr"
|
||||
],
|
||||
"missingRoles": []
|
||||
}
|
||||
],
|
||||
"findings": [],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noWeComWrites": true,
|
||||
"noPasswordOutput": true,
|
||||
"noRealEmployeeIdentifiers": true
|
||||
}
|
||||
}
|
||||
[oa-only-smoke-readiness] report=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/oa-only-smoke-readiness/summary.json
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "oa-only-smoke-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/oa-only-smoke-readiness.log",
|
||||
"checkedAt": "2026-05-27T07:52:19.407Z"
|
||||
}
|
||||
+391
@@ -0,0 +1,391 @@
|
||||
{
|
||||
"issueId": "OSMOKE1",
|
||||
"mode": "oa-only-smoke-readiness",
|
||||
"status": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"conclusion": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-27T07:52:19.310Z",
|
||||
"businessReadOnly": true,
|
||||
"readOnlyNote": "performs login/readiness probes only; no business data writes and no WeCom writes",
|
||||
"privacy": "role/masked identifier/status/counts only; no password/token/secret/full email/full phone",
|
||||
"targets": [
|
||||
{
|
||||
"key": "admin",
|
||||
"expectedRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"admin",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 7,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "users",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 13
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "employee",
|
||||
"expectedRoles": [
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "my-assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "manager",
|
||||
"expectedRoles": [
|
||||
"manager",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"manager"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"manager"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "ceo",
|
||||
"expectedRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"ceo",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "dashboard",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"paidCount": 8,
|
||||
"reviewingCount": 3
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance_mgr",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"finance_mgr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "hr",
|
||||
"expectedRoles": [
|
||||
"hr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"hr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "wecom-archive",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 9
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"hr"
|
||||
],
|
||||
"missingRoles": []
|
||||
}
|
||||
],
|
||||
"findings": [],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noWeComWrites": true,
|
||||
"noPasswordOutput": true,
|
||||
"noRealEmployeeIdentifiers": true
|
||||
}
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"requestId":"6ac664dc-9aa3-4232-9965-e2999b725cde","data":{"ok":true}}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "public-ready",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/public-ready.log",
|
||||
"checkedAt": "2026-05-27T07:51:23.282Z"
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "report-privacy-smoke",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/report-privacy-smoke.log",
|
||||
"checkedAt": "2026-05-27T07:56:17.383Z"
|
||||
}
|
||||
+294
@@ -0,0 +1,294 @@
|
||||
{
|
||||
"issueId": "OAOPS1",
|
||||
"mode": "oa-real-use-daily",
|
||||
"status": "PASS_OA_REAL_USE_DAILY_READY",
|
||||
"conclusion": "PASS_OA_REAL_USE_DAILY_READY",
|
||||
"baseURL": "https://oa.hyinda.com",
|
||||
"commit": "9d75f1c",
|
||||
"checkedAt": "2026-05-27T07:56:17.292Z",
|
||||
"reportRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily",
|
||||
"window": {
|
||||
"durationDays": 7,
|
||||
"scope": "small-team-all-employees",
|
||||
"realBusinessDataAllowed": true,
|
||||
"fixPolicy": "blocking_same_day_issue_contract_nonblocking_feedback_pool"
|
||||
},
|
||||
"oaPrimaryDomains": [
|
||||
"reimbursement_pdf_ocr",
|
||||
"approval_tasks",
|
||||
"procurement_expense",
|
||||
"contracts_registry",
|
||||
"projects",
|
||||
"payment_batches",
|
||||
"bank_receipt_attachments",
|
||||
"ap_accounting_handoff",
|
||||
"mobile_wecom_entry",
|
||||
"audit"
|
||||
],
|
||||
"frozenItems": [
|
||||
"image_ocr",
|
||||
"complex_bpm",
|
||||
"budget_control",
|
||||
"erp_write",
|
||||
"bank_statement_import",
|
||||
"real_payment_provider",
|
||||
"wecom_hr_deep_mirror",
|
||||
"emergency_takeover",
|
||||
"recovery_writeback",
|
||||
"ruleops"
|
||||
],
|
||||
"boundaries": {
|
||||
"defaultReadOnlyAutomation": true,
|
||||
"manualRealBusinessWritesOnly": true,
|
||||
"paymentBatchExpected": "force_on",
|
||||
"erpExpected": "force_off",
|
||||
"actualPaymentChannel": "offline_bank_channel",
|
||||
"contractSensitiveFiles": "do_not_upload_confidential_body_sensitive_quote_cost_detail_to_public_oa"
|
||||
},
|
||||
"childReports": {
|
||||
"liveReadiness": {
|
||||
"status": "PASS",
|
||||
"reportRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/live-smoke-readiness/summary.json",
|
||||
"findingCount": 0,
|
||||
"openCount": 0
|
||||
},
|
||||
"oaOnlySmokeReadiness": {
|
||||
"status": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"reportRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/oa-only-smoke-readiness/summary.json",
|
||||
"findingCount": 0,
|
||||
"openCount": 0
|
||||
}
|
||||
},
|
||||
"steps": {
|
||||
"public-ready": {
|
||||
"name": "public-ready",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/public-ready.log",
|
||||
"checkedAt": "2026-05-27T07:51:23.282Z"
|
||||
},
|
||||
"live-smoke-env": {
|
||||
"name": "live-smoke-env",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/live-smoke-env.log",
|
||||
"checkedAt": "2026-05-27T07:51:23.843Z"
|
||||
},
|
||||
"live-readiness": {
|
||||
"name": "live-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/live-readiness.log",
|
||||
"checkedAt": "2026-05-27T07:52:14.477Z"
|
||||
},
|
||||
"oa-only-smoke-readiness": {
|
||||
"name": "oa-only-smoke-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/oa-only-smoke-readiness.log",
|
||||
"checkedAt": "2026-05-27T07:52:19.407Z"
|
||||
},
|
||||
"live-feature-flags": {
|
||||
"name": "live-feature-flags",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/live-feature-flags.log",
|
||||
"checkedAt": "2026-05-27T07:53:25.334Z"
|
||||
},
|
||||
"authenticated-readonly-probe": {
|
||||
"name": "authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/authenticated-readonly-probe.log",
|
||||
"checkedAt": "2026-05-27T07:54:31.990Z"
|
||||
},
|
||||
"mobile-entry-matrix": {
|
||||
"name": "mobile-entry-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/mobile-entry-matrix.log",
|
||||
"checkedAt": "2026-05-27T07:54:54.815Z"
|
||||
},
|
||||
"wecom-rendering-matrix": {
|
||||
"name": "wecom-rendering-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/wecom-rendering-matrix.log",
|
||||
"checkedAt": "2026-05-27T07:56:03.383Z"
|
||||
},
|
||||
"wecom-entry": {
|
||||
"name": "wecom-entry",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/wecom-entry.log",
|
||||
"checkedAt": "2026-05-27T07:56:17.051Z"
|
||||
},
|
||||
"report-privacy-smoke": {
|
||||
"name": "report-privacy-smoke",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/report-privacy-smoke.log",
|
||||
"checkedAt": "2026-05-27T07:56:17.215Z"
|
||||
}
|
||||
},
|
||||
"readonlyProbe": {
|
||||
"mode": "oaops1-authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-27T07:54:31.804Z",
|
||||
"readOnly": true,
|
||||
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
||||
"roles": {
|
||||
"admin": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"maskedIdentifier": "sm***om"
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"id": "portal",
|
||||
"role": "admin",
|
||||
"path": "/api/portal/home",
|
||||
"domain": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"role": "admin",
|
||||
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
||||
"domain": "approval",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements?page=1&pageSize=5",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 33
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursement-summary",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements/stats/summary",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"avgProcessingDays": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"role": "admin",
|
||||
"path": "/api/invoice-pool?page=1&pageSize=5",
|
||||
"domain": "invoice_ocr",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "purchase-requests",
|
||||
"role": "admin",
|
||||
"path": "/api/purchase-requests?page=1&pageSize=5",
|
||||
"domain": "procurement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contracts-registry",
|
||||
"role": "admin",
|
||||
"path": "/api/contracts-registry",
|
||||
"domain": "contracts",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 6,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"role": "admin",
|
||||
"path": "/api/projects?page=1&pageSize=5",
|
||||
"domain": "projects",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 4,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "audit-logs",
|
||||
"role": "admin",
|
||||
"path": "/api/audit-logs?page=1&pageSize=5",
|
||||
"domain": "audit",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 2023
|
||||
}
|
||||
}
|
||||
],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noExportsByDefault": true,
|
||||
"noFileUploads": true,
|
||||
"noWeComWrites": true,
|
||||
"noRealPaymentExecution": true
|
||||
}
|
||||
},
|
||||
"findingCount": 0,
|
||||
"findings": [],
|
||||
"manualGates": {
|
||||
"dailyCloseout": "管理员每日查看 summary.json 和 manual-gates.md,阻断即修,非阻断入反馈池。",
|
||||
"day7Closeout": [
|
||||
"A:接受 PASS_OA_REAL_USE_READY,进入下一轮体验/效率优化。",
|
||||
"B:接受 PASS_WITH_FINDINGS,但先处理指定 finding。",
|
||||
"C:暂停真实使用扩展,先做整改。"
|
||||
]
|
||||
},
|
||||
"privacy": "status/count/report-path summaries only; no phone/email/token/Secret/EncodingAESKey/full external ids/full invoice image/full bank receipt/full contract body/raw payload"
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
[oaops1] loaded masked live smoke env file
|
||||
>>> [oaops1] public-ready
|
||||
[oaops1][PASS] public-ready
|
||||
>>> [oaops1] live-smoke-env
|
||||
[oaops1][PASS] live-smoke-env
|
||||
>>> [oaops1] live-readiness
|
||||
[oaops1][PASS] live-readiness
|
||||
>>> [oaops1] oa-only-smoke-readiness
|
||||
[oaops1][PASS] oa-only-smoke-readiness
|
||||
[oaops1] login cooldown 65s before live-feature-flags
|
||||
>>> [oaops1] live-feature-flags
|
||||
[oaops1][PASS] live-feature-flags
|
||||
[oaops1] login cooldown 65s before authenticated-readonly-probe
|
||||
>>> [oaops1] authenticated-readonly-probe
|
||||
[oaops1][PASS] authenticated-readonly-probe
|
||||
>>> [oaops1] mobile-entry-matrix
|
||||
[oaops1][PASS] mobile-entry-matrix
|
||||
>>> [oaops1] wecom-rendering-matrix
|
||||
[oaops1][PASS] wecom-rendering-matrix
|
||||
>>> [oaops1] wecom-entry
|
||||
[oaops1][PASS] wecom-entry
|
||||
[oaops1][PASS] report-privacy-smoke
|
||||
[oaops1][PASS] report-privacy-smoke
|
||||
[oaops1] report=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
|
||||
Running 2 tests using 1 worker
|
||||
|
||||
(node:284358) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:284358) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/wecom-entry.spec.ts:56:1 › E2E 企微入口:普通浏览器下只提示企业微信工作台打开 (2.0s)
|
||||
✓ 2 tests/e2e/wecom-entry.spec.ts:66:1 › E2E 企微入口:企业微信场景优先显示企微 CTA,并展示未绑定提示 (1.9s)
|
||||
|
||||
2 passed (7.5s)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "wecom-entry",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/wecom-entry.log",
|
||||
"checkedAt": "2026-05-27T07:56:17.051Z"
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
|
||||
Running 8 tests using 1 worker
|
||||
|
||||
(node:282622) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:282622) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 320 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.0s)
|
||||
✓ 2 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 360 Android 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.8s)
|
||||
✓ 3 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 375 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.0s)
|
||||
✓ 4 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 390 iPhone12 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.7s)
|
||||
✓ 5 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 393 Android 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.4s)
|
||||
✓ 6 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 414 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (6.6s)
|
||||
✓ 7 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 430 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.4s)
|
||||
✓ 8 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:604:5 › WCM6 企业微信多手机移动渲染稳定化 › 390 iPhone12 企业微信 字体失败 › Material Symbols 字体失败时核心移动入口仍稳定 (7.8s)
|
||||
|
||||
8 passed (1.0m)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "wecom-rendering-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day2-oa-real-use-daily/wecom-rendering-matrix.log",
|
||||
"checkedAt": "2026-05-27T07:56:03.383Z"
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
# Day 2 巡检摘要
|
||||
|
||||
## 结论
|
||||
|
||||
`PASS_OA_REAL_USE_DAILY_READY`
|
||||
|
||||
2026-05-27 Day 2 只读自动巡检通过,findingCount 为 0。自动化仍保持只读边界,没有创建、提交、审批、付款、导出或写入企业微信数据。
|
||||
|
||||
## 自动巡检结果
|
||||
|
||||
| 项目 | 结论 |
|
||||
| --- | --- |
|
||||
| `/ready` | PASS |
|
||||
| live smoke 环境 | PASS |
|
||||
| live readiness | PASS |
|
||||
| OA-only 角色只读 smoke | PASS |
|
||||
| 功能开关 | PASS |
|
||||
| 认证只读探针 | PASS |
|
||||
| 移动入口矩阵 | PASS |
|
||||
| 企业微信多视口渲染矩阵 | PASS |
|
||||
| 企业微信入口 | PASS |
|
||||
| 报告隐私扫描 | PASS |
|
||||
|
||||
## 关键边界
|
||||
|
||||
- `payment_batch_v1=force_on`。
|
||||
- `erp_sync=force_off`。
|
||||
- 冻结项未被误开启。
|
||||
- OCR live 样票进入重复/相同发票的可解释终态,不作为阻断。
|
||||
|
||||
## 备注
|
||||
|
||||
首次运行时企业微信渲染矩阵因测试 mock 缺少 `/api/auth/capabilities` 报错。已补充测试 mock,并将该契约沉淀到前端 spec;复跑完整 Day 2 巡检后通过。
|
||||
|
||||
## 证据
|
||||
|
||||
- 主报告:`research/day2-oa-real-use-daily/summary.json`
|
||||
- 人工每日收口清单:`research/day2-oa-real-use-daily/manual-gates.md`
|
||||
- live readiness 子报告:`research/day2-oa-real-use-daily/live-smoke-readiness/summary.json`
|
||||
- OA-only smoke 子报告:`research/day2-oa-real-use-daily/oa-only-smoke-readiness/summary.json`
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"mode": "oaops1-authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-28T13:20:53.527Z",
|
||||
"readOnly": true,
|
||||
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
||||
"roles": {
|
||||
"admin": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"maskedIdentifier": "sm***om"
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"id": "portal",
|
||||
"role": "admin",
|
||||
"path": "/api/portal/home",
|
||||
"domain": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"role": "admin",
|
||||
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
||||
"domain": "approval",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements?page=1&pageSize=5",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 33
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursement-summary",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements/stats/summary",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"avgProcessingDays": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"role": "admin",
|
||||
"path": "/api/invoice-pool?page=1&pageSize=5",
|
||||
"domain": "invoice_ocr",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "purchase-requests",
|
||||
"role": "admin",
|
||||
"path": "/api/purchase-requests?page=1&pageSize=5",
|
||||
"domain": "procurement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contracts-registry",
|
||||
"role": "admin",
|
||||
"path": "/api/contracts-registry",
|
||||
"domain": "contracts",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 6,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"role": "admin",
|
||||
"path": "/api/projects?page=1&pageSize=5",
|
||||
"domain": "projects",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 4,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "audit-logs",
|
||||
"role": "admin",
|
||||
"path": "/api/audit-logs?page=1&pageSize=5",
|
||||
"domain": "audit",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 2150
|
||||
}
|
||||
}
|
||||
],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noExportsByDefault": true,
|
||||
"noFileUploads": true,
|
||||
"noWeComWrites": true,
|
||||
"noRealPaymentExecution": true
|
||||
}
|
||||
}
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"mode": "oaops1-authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-28T13:20:53.527Z",
|
||||
"readOnly": true,
|
||||
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
||||
"roles": {
|
||||
"admin": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"maskedIdentifier": "sm***om"
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"id": "portal",
|
||||
"role": "admin",
|
||||
"path": "/api/portal/home",
|
||||
"domain": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"role": "admin",
|
||||
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
||||
"domain": "approval",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements?page=1&pageSize=5",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 33
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursement-summary",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements/stats/summary",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"avgProcessingDays": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"role": "admin",
|
||||
"path": "/api/invoice-pool?page=1&pageSize=5",
|
||||
"domain": "invoice_ocr",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "purchase-requests",
|
||||
"role": "admin",
|
||||
"path": "/api/purchase-requests?page=1&pageSize=5",
|
||||
"domain": "procurement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contracts-registry",
|
||||
"role": "admin",
|
||||
"path": "/api/contracts-registry",
|
||||
"domain": "contracts",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 6,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"role": "admin",
|
||||
"path": "/api/projects?page=1&pageSize=5",
|
||||
"domain": "projects",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 4,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "audit-logs",
|
||||
"role": "admin",
|
||||
"path": "/api/audit-logs?page=1&pageSize=5",
|
||||
"domain": "audit",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 2150
|
||||
}
|
||||
}
|
||||
],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noExportsByDefault": true,
|
||||
"noFileUploads": true,
|
||||
"noWeComWrites": true,
|
||||
"noRealPaymentExecution": true
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/authenticated-readonly-probe.log",
|
||||
"checkedAt": "2026-05-28T13:20:53.611Z"
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"checkedAt": "2026-05-28T13:19:47.028Z",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"status": "PASS",
|
||||
"readOnly": true,
|
||||
"results": [
|
||||
{
|
||||
"flagKey": "payment_batch_v1",
|
||||
"expectedState": "force_on",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "payment_batch_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 17,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": true,
|
||||
"effectiveReason": "flag_force_on_global"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "erp_sync",
|
||||
"expectedState": "force_off",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "erp_sync",
|
||||
"overrideMode": "force_off",
|
||||
"rolloutType": "global",
|
||||
"version": 2,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": false,
|
||||
"effectiveReason": "flag_force_off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "attendance_v1",
|
||||
"expectedState": "disabled",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "attendance_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 82,
|
||||
"envEnabled": false,
|
||||
"effectiveEnabled": false,
|
||||
"effectiveReason": "env_hard_off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "attendance_unified_v1",
|
||||
"expectedState": "enabled",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "attendance_unified_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 80,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": true,
|
||||
"effectiveReason": "flag_force_on_global"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "live-feature-flags",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/live-feature-flags.log",
|
||||
"checkedAt": "2026-05-28T13:19:47.103Z"
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
>>> [live-readiness] 环境与公网入口检查
|
||||
[live-smoke-env] base=https://oa.hyinda.com
|
||||
[live-smoke-env] publicReady=true status=200
|
||||
[live-smoke-env] wecom=ready entry=true oauth=true
|
||||
[live-smoke-env] authCapabilities=true emailDelivery=true
|
||||
[live-smoke-env] liveSmokeReady=true
|
||||
[live-smoke-env] liveOcrReady=true
|
||||
>>> [live-readiness] /ready: https://oa.hyinda.com
|
||||
>>> [live-readiness] 公网资源文案扫描
|
||||
[public-bundle-copy] base=https://oa.hyinda.com scanned=91 focused=2 findings=0
|
||||
>>> [live-readiness] pending OCR 扫描
|
||||
[pending-ocr][SKIP] missing DATABASE_URL
|
||||
>>> [live-readiness] 执行公网 live smoke
|
||||
>>> 探活 live /ready: https://oa.hyinda.com/ready
|
||||
>>> 执行 live smoke Playwright
|
||||
|
||||
> [email protected] test:e2e:live
|
||||
> playwright test tests/e2e/live-smoke.spec.ts
|
||||
|
||||
|
||||
Running 3 tests using 1 worker
|
||||
|
||||
(node:3117591) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:3117591) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/live-smoke.spec.ts:43:3 › live smoke › 公网基础探活与企微配置状态 (2.7s)
|
||||
✓ 2 tests/e2e/live-smoke.spec.ts:64:3 › live smoke › 管理员只读网页 smoke (10.7s)
|
||||
✓ 3 tests/e2e/live-smoke.spec.ts:106:3 › live smoke › 员工只读网页 smoke (10.1s)
|
||||
|
||||
3 passed (27.2s)
|
||||
>>> [live-readiness] 执行真实 OCR 样本复核
|
||||
|
||||
Running 1 test using 1 worker
|
||||
|
||||
(node:3118407) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:3118407) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
[live-ocr] {"alias":"SAMPLE-PDF-001","status":"ocr_failed","durationMs":437,"transport":"ui","timings":{"uploadMs":437,"terminalWaitMs":0},"reasonCategory":"duplicate_or_same_invoice","fieldHits":{"invoiceId":false,"invoiceCodeOrNumber":false,"sellerName":false,"totalAmount":false,"invoiceDate":false}}
|
||||
✓ 1 tests/e2e/manual/live-invoice-ocr.spec.ts:8:1 › 手工 live 腾讯 OCR 辅助复核:真实 VAT 发票上传后进入可处理状态 (5.6s)
|
||||
|
||||
1 passed (9.5s)
|
||||
[live-readiness][PASS] readiness 检查完成
|
||||
[live-readiness] report=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/live-smoke-readiness
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "live-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/live-readiness.log",
|
||||
"checkedAt": "2026-05-28T13:18:36.269Z"
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"checkedAt": "2026-05-28T13:17:44.665Z",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"liveSmokeReady": true,
|
||||
"liveSmoke": {
|
||||
"LIVE_SMOKE_ADMIN_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_ADMIN_PASSWORD": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_PASSWORD": true
|
||||
},
|
||||
"liveSmokeOptional": {
|
||||
"LIVE_EXPECT_WECOM_STATUS": true,
|
||||
"LIVE_SMOKE_MANAGER_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_MANAGER_PASSWORD": true,
|
||||
"LIVE_SMOKE_FINANCE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_FINANCE_PASSWORD": true
|
||||
},
|
||||
"liveOcrReady": true,
|
||||
"liveOcr": {
|
||||
"userReady": true,
|
||||
"invoiceSampleReady": true,
|
||||
"invoiceFileProvided": true,
|
||||
"invoiceFileReady": true,
|
||||
"invoiceBatchDirProvided": false,
|
||||
"invoiceBatchDirReady": false,
|
||||
"allowDuplicate": true
|
||||
},
|
||||
"missing": [],
|
||||
"publicReady": {
|
||||
"ok": true,
|
||||
"status": 200
|
||||
},
|
||||
"wecomConfig": {
|
||||
"ok": true,
|
||||
"status": 200,
|
||||
"statusText": "ready",
|
||||
"entryEnabled": true,
|
||||
"oauthEnabled": true,
|
||||
"defaultReturnTo": "/mobile",
|
||||
"loginUrl": "/api/auth/wecom/login?returnTo=%2Fmobile"
|
||||
},
|
||||
"authCapabilities": {
|
||||
"ok": true,
|
||||
"status": 200,
|
||||
"emailDeliveryReady": true,
|
||||
"emailDeliveryReasons": [],
|
||||
"emailLoginCodeEnabled": true,
|
||||
"passwordResetEnabled": true
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "live-smoke-env",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/live-smoke-env.log",
|
||||
"checkedAt": "2026-05-28T13:17:44.746Z"
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"checkedAt": "2026-05-28T13:17:45.277Z",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"liveSmokeReady": true,
|
||||
"liveSmoke": {
|
||||
"LIVE_SMOKE_ADMIN_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_ADMIN_PASSWORD": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_EMPLOYEE_PASSWORD": true
|
||||
},
|
||||
"liveSmokeOptional": {
|
||||
"LIVE_EXPECT_WECOM_STATUS": true,
|
||||
"LIVE_SMOKE_MANAGER_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_MANAGER_PASSWORD": true,
|
||||
"LIVE_SMOKE_FINANCE_IDENTIFIER": true,
|
||||
"LIVE_SMOKE_FINANCE_PASSWORD": true
|
||||
},
|
||||
"liveOcrReady": true,
|
||||
"liveOcr": {
|
||||
"userReady": true,
|
||||
"invoiceSampleReady": true,
|
||||
"invoiceFileProvided": true,
|
||||
"invoiceFileReady": true,
|
||||
"invoiceBatchDirProvided": false,
|
||||
"invoiceBatchDirReady": false,
|
||||
"allowDuplicate": true
|
||||
},
|
||||
"missing": [],
|
||||
"publicReady": {
|
||||
"ok": true,
|
||||
"status": 200
|
||||
},
|
||||
"wecomConfig": {
|
||||
"ok": true,
|
||||
"status": 200,
|
||||
"statusText": "ready",
|
||||
"entryEnabled": true,
|
||||
"oauthEnabled": true,
|
||||
"defaultReturnTo": "/mobile",
|
||||
"loginUrl": "/api/auth/wecom/login?returnTo=%2Fmobile"
|
||||
},
|
||||
"authCapabilities": {
|
||||
"ok": true,
|
||||
"status": 200,
|
||||
"emailDeliveryReady": true,
|
||||
"emailDeliveryReasons": [],
|
||||
"emailLoginCodeEnabled": true,
|
||||
"passwordResetEnabled": true
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
|
||||
Running 1 test using 1 worker
|
||||
|
||||
[live-ocr] {"alias":"SAMPLE-PDF-001","status":"ocr_failed","durationMs":437,"transport":"ui","timings":{"uploadMs":437,"terminalWaitMs":0},"reasonCategory":"duplicate_or_same_invoice","fieldHits":{"invoiceId":false,"invoiceCodeOrNumber":false,"sellerName":false,"totalAmount":false,"invoiceDate":false}}
|
||||
✓ 1 tests/e2e/manual/live-invoice-ocr.spec.ts:8:1 › 手工 live 腾讯 OCR 辅助复核:真实 VAT 发票上传后进入可处理状态 (5.6s)
|
||||
|
||||
1 passed (9.5s)
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
>>> 探活 live /ready: https://oa.hyinda.com/ready
|
||||
>>> 执行 live smoke Playwright
|
||||
|
||||
> [email protected] test:e2e:live
|
||||
> playwright test tests/e2e/live-smoke.spec.ts
|
||||
|
||||
|
||||
Running 3 tests using 1 worker
|
||||
|
||||
✓ 1 tests/e2e/live-smoke.spec.ts:43:3 › live smoke › 公网基础探活与企微配置状态 (2.7s)
|
||||
✓ 2 tests/e2e/live-smoke.spec.ts:64:3 › live smoke › 管理员只读网页 smoke (10.7s)
|
||||
✓ 3 tests/e2e/live-smoke.spec.ts:106:3 › live smoke › 员工只读网页 smoke (10.1s)
|
||||
|
||||
3 passed (27.2s)
|
||||
+1
@@ -0,0 +1 @@
|
||||
[pending-ocr][SKIP] missing DATABASE_URL
|
||||
+1
@@ -0,0 +1 @@
|
||||
[public-bundle-copy] base=https://oa.hyinda.com scanned=91 focused=2 findings=0
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"issueId": "OAOPS1",
|
||||
"baseURL": "https://oa.hyinda.com",
|
||||
"commit": "c99f6ca",
|
||||
"checkedAt": "2026-05-28T13:18:36.191Z",
|
||||
"status": "PASS",
|
||||
"mode": "live-smoke-readiness",
|
||||
"reportDir": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/live-smoke-readiness",
|
||||
"reportRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/live-smoke-readiness",
|
||||
"groups": null,
|
||||
"notes": "公网 /ready、public bundle、pending OCR、live smoke 和真实 OCR 可用性检查;缺少凭据或样票时按脚本规则记录 SKIP。"
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
# OAOPS1 每日人工收口清单
|
||||
|
||||
## 员工
|
||||
- 真实报销:上传 PDF 发票,补充必要附件,提交 OA 审批。
|
||||
- 采购/费用:在 OA 创建申请,关联项目;如涉及合同,关联或补录合同台账。
|
||||
- 合同:只录入合同摘要、编号、负责人、项目、金额、线下归档位置;涉密合同正文、敏感报价和成本细节不上传公网 OA。
|
||||
|
||||
## 审批人
|
||||
- 从 OA 待办进入详情,确认报销、采购、合同或项目上下文后再审批。
|
||||
- 退回时写清需要补充的材料,避免线下口头说明替代系统记录。
|
||||
|
||||
## 出纳/财务
|
||||
- 审批通过后创建付款批次,线下银行渠道付款。
|
||||
- 上传银行回单附件后再在 OA 标记已付款。
|
||||
- 每日抽查 AP 台账、报销导出、票据状态和付款批次状态。
|
||||
|
||||
## 管理员
|
||||
- 查看本报告 summary.json 和人工问题登记。
|
||||
- 阻断项当天建修复 Issue CSV 或暂停对应流程;非阻断体验问题进入反馈池。
|
||||
- 确认 payment_batch_v1=force_on,erp_sync=force_off;图片 OCR、预算、ERP、银行流水导入、真实支付直连继续冻结。
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
|
||||
Running 1 test using 1 worker
|
||||
|
||||
(node:3122705) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:3122705) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/r124-mobile-entry-matrix.spec.ts:486:3 › R124 企业微信移动入口矩阵 › 底部入口、我的二级入口、PDF 上传和草稿删除不回退到 PC 体验 (14.1s)
|
||||
|
||||
1 passed (17.4s)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "mobile-entry-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/mobile-entry-matrix.log",
|
||||
"checkedAt": "2026-05-28T13:21:17.239Z"
|
||||
}
|
||||
+392
@@ -0,0 +1,392 @@
|
||||
{
|
||||
"issueId": "OSMOKE1",
|
||||
"mode": "oa-only-smoke-readiness",
|
||||
"status": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"conclusion": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-28T13:18:41.012Z",
|
||||
"businessReadOnly": true,
|
||||
"readOnlyNote": "performs login/readiness probes only; no business data writes and no WeCom writes",
|
||||
"privacy": "role/masked identifier/status/counts only; no password/token/secret/full email/full phone",
|
||||
"targets": [
|
||||
{
|
||||
"key": "admin",
|
||||
"expectedRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"admin",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 7,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "users",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 13
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "employee",
|
||||
"expectedRoles": [
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "my-assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "manager",
|
||||
"expectedRoles": [
|
||||
"manager",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"manager"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"manager"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "ceo",
|
||||
"expectedRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"ceo",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "dashboard",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"paidCount": 8,
|
||||
"reviewingCount": 3
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance_mgr",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"finance_mgr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "hr",
|
||||
"expectedRoles": [
|
||||
"hr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"hr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "wecom-archive",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 9
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"hr"
|
||||
],
|
||||
"missingRoles": []
|
||||
}
|
||||
],
|
||||
"findings": [],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noWeComWrites": true,
|
||||
"noPasswordOutput": true,
|
||||
"noRealEmployeeIdentifiers": true
|
||||
}
|
||||
}
|
||||
[oa-only-smoke-readiness] report=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/oa-only-smoke-readiness/summary.json
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "oa-only-smoke-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/oa-only-smoke-readiness.log",
|
||||
"checkedAt": "2026-05-28T13:18:41.089Z"
|
||||
}
|
||||
+391
@@ -0,0 +1,391 @@
|
||||
{
|
||||
"issueId": "OSMOKE1",
|
||||
"mode": "oa-only-smoke-readiness",
|
||||
"status": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"conclusion": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-28T13:18:41.012Z",
|
||||
"businessReadOnly": true,
|
||||
"readOnlyNote": "performs login/readiness probes only; no business data writes and no WeCom writes",
|
||||
"privacy": "role/masked identifier/status/counts only; no password/token/secret/full email/full phone",
|
||||
"targets": [
|
||||
{
|
||||
"key": "admin",
|
||||
"expectedRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"admin",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 7,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "users",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 13
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"admin",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "employee",
|
||||
"expectedRoles": [
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "my-assets",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "manager",
|
||||
"expectedRoles": [
|
||||
"manager",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"manager"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"manager"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "ceo",
|
||||
"expectedRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"ceo",
|
||||
"employee"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "dashboard",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"paidCount": 8,
|
||||
"reviewingCount": 3
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"ceo",
|
||||
"employee"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "finance_mgr",
|
||||
"expectedRoles": [
|
||||
"finance",
|
||||
"finance_mgr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "payment-batches",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 9,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ap-ledger",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 33
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"finance",
|
||||
"finance_mgr"
|
||||
],
|
||||
"missingRoles": []
|
||||
},
|
||||
{
|
||||
"key": "hr",
|
||||
"expectedRoles": [
|
||||
"hr",
|
||||
"employee"
|
||||
],
|
||||
"maskedIdentifier": "sm***@***.com",
|
||||
"login": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"code": null
|
||||
},
|
||||
"roleMatch": "PASS",
|
||||
"probes": [
|
||||
{
|
||||
"id": "me",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"status": "active",
|
||||
"notificationPushEnabled": true,
|
||||
"roleCodes": [
|
||||
"employee",
|
||||
"hr"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "wecom-archive",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 1,
|
||||
"total": 9
|
||||
}
|
||||
}
|
||||
],
|
||||
"actualRoles": [
|
||||
"employee",
|
||||
"hr"
|
||||
],
|
||||
"missingRoles": []
|
||||
}
|
||||
],
|
||||
"findings": [],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noWeComWrites": true,
|
||||
"noPasswordOutput": true,
|
||||
"noRealEmployeeIdentifiers": true
|
||||
}
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"requestId":"be583dab-f59a-4f8a-b16a-043ffc07a8fd","data":{"ok":true}}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "public-ready",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/public-ready.log",
|
||||
"checkedAt": "2026-05-28T13:17:44.172Z"
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "report-privacy-smoke",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/report-privacy-smoke.log",
|
||||
"checkedAt": "2026-05-28T13:22:43.464Z"
|
||||
}
|
||||
+294
@@ -0,0 +1,294 @@
|
||||
{
|
||||
"issueId": "OAOPS1",
|
||||
"mode": "oa-real-use-daily",
|
||||
"status": "PASS_OA_REAL_USE_DAILY_READY",
|
||||
"conclusion": "PASS_OA_REAL_USE_DAILY_READY",
|
||||
"baseURL": "https://oa.hyinda.com",
|
||||
"commit": "c99f6ca",
|
||||
"checkedAt": "2026-05-28T13:22:43.387Z",
|
||||
"reportRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily",
|
||||
"window": {
|
||||
"durationDays": 7,
|
||||
"scope": "small-team-all-employees",
|
||||
"realBusinessDataAllowed": true,
|
||||
"fixPolicy": "blocking_same_day_issue_contract_nonblocking_feedback_pool"
|
||||
},
|
||||
"oaPrimaryDomains": [
|
||||
"reimbursement_pdf_ocr",
|
||||
"approval_tasks",
|
||||
"procurement_expense",
|
||||
"contracts_registry",
|
||||
"projects",
|
||||
"payment_batches",
|
||||
"bank_receipt_attachments",
|
||||
"ap_accounting_handoff",
|
||||
"mobile_wecom_entry",
|
||||
"audit"
|
||||
],
|
||||
"frozenItems": [
|
||||
"image_ocr",
|
||||
"complex_bpm",
|
||||
"budget_control",
|
||||
"erp_write",
|
||||
"bank_statement_import",
|
||||
"real_payment_provider",
|
||||
"wecom_hr_deep_mirror",
|
||||
"emergency_takeover",
|
||||
"recovery_writeback",
|
||||
"ruleops"
|
||||
],
|
||||
"boundaries": {
|
||||
"defaultReadOnlyAutomation": true,
|
||||
"manualRealBusinessWritesOnly": true,
|
||||
"paymentBatchExpected": "force_on",
|
||||
"erpExpected": "force_off",
|
||||
"actualPaymentChannel": "offline_bank_channel",
|
||||
"contractSensitiveFiles": "do_not_upload_confidential_body_sensitive_quote_cost_detail_to_public_oa"
|
||||
},
|
||||
"childReports": {
|
||||
"liveReadiness": {
|
||||
"status": "PASS",
|
||||
"reportRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/live-smoke-readiness/summary.json",
|
||||
"findingCount": 0,
|
||||
"openCount": 0
|
||||
},
|
||||
"oaOnlySmokeReadiness": {
|
||||
"status": "PASS_OA_ONLY_SMOKE_READY",
|
||||
"reportRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/oa-only-smoke-readiness/summary.json",
|
||||
"findingCount": 0,
|
||||
"openCount": 0
|
||||
}
|
||||
},
|
||||
"steps": {
|
||||
"public-ready": {
|
||||
"name": "public-ready",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/public-ready.log",
|
||||
"checkedAt": "2026-05-28T13:17:44.172Z"
|
||||
},
|
||||
"live-smoke-env": {
|
||||
"name": "live-smoke-env",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/live-smoke-env.log",
|
||||
"checkedAt": "2026-05-28T13:17:44.746Z"
|
||||
},
|
||||
"live-readiness": {
|
||||
"name": "live-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/live-readiness.log",
|
||||
"checkedAt": "2026-05-28T13:18:36.269Z"
|
||||
},
|
||||
"oa-only-smoke-readiness": {
|
||||
"name": "oa-only-smoke-readiness",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/oa-only-smoke-readiness.log",
|
||||
"checkedAt": "2026-05-28T13:18:41.089Z"
|
||||
},
|
||||
"live-feature-flags": {
|
||||
"name": "live-feature-flags",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/live-feature-flags.log",
|
||||
"checkedAt": "2026-05-28T13:19:47.103Z"
|
||||
},
|
||||
"authenticated-readonly-probe": {
|
||||
"name": "authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/authenticated-readonly-probe.log",
|
||||
"checkedAt": "2026-05-28T13:20:53.611Z"
|
||||
},
|
||||
"mobile-entry-matrix": {
|
||||
"name": "mobile-entry-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/mobile-entry-matrix.log",
|
||||
"checkedAt": "2026-05-28T13:21:17.239Z"
|
||||
},
|
||||
"wecom-rendering-matrix": {
|
||||
"name": "wecom-rendering-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/wecom-rendering-matrix.log",
|
||||
"checkedAt": "2026-05-28T13:22:28.628Z"
|
||||
},
|
||||
"wecom-entry": {
|
||||
"name": "wecom-entry",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/wecom-entry.log",
|
||||
"checkedAt": "2026-05-28T13:22:43.135Z"
|
||||
},
|
||||
"report-privacy-smoke": {
|
||||
"name": "report-privacy-smoke",
|
||||
"status": "PASS",
|
||||
"kind": "required",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/report-privacy-smoke.log",
|
||||
"checkedAt": "2026-05-28T13:22:43.308Z"
|
||||
}
|
||||
},
|
||||
"readonlyProbe": {
|
||||
"mode": "oaops1-authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-28T13:20:53.527Z",
|
||||
"readOnly": true,
|
||||
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
||||
"roles": {
|
||||
"admin": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"maskedIdentifier": "sm***om"
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"id": "portal",
|
||||
"role": "admin",
|
||||
"path": "/api/portal/home",
|
||||
"domain": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"role": "admin",
|
||||
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
||||
"domain": "approval",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements?page=1&pageSize=5",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 33
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursement-summary",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements/stats/summary",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"avgProcessingDays": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"role": "admin",
|
||||
"path": "/api/invoice-pool?page=1&pageSize=5",
|
||||
"domain": "invoice_ocr",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "purchase-requests",
|
||||
"role": "admin",
|
||||
"path": "/api/purchase-requests?page=1&pageSize=5",
|
||||
"domain": "procurement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contracts-registry",
|
||||
"role": "admin",
|
||||
"path": "/api/contracts-registry",
|
||||
"domain": "contracts",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 6,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"role": "admin",
|
||||
"path": "/api/projects?page=1&pageSize=5",
|
||||
"domain": "projects",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 4,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "audit-logs",
|
||||
"role": "admin",
|
||||
"path": "/api/audit-logs?page=1&pageSize=5",
|
||||
"domain": "audit",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 2150
|
||||
}
|
||||
}
|
||||
],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noExportsByDefault": true,
|
||||
"noFileUploads": true,
|
||||
"noWeComWrites": true,
|
||||
"noRealPaymentExecution": true
|
||||
}
|
||||
},
|
||||
"findingCount": 0,
|
||||
"findings": [],
|
||||
"manualGates": {
|
||||
"dailyCloseout": "管理员每日查看 summary.json 和 manual-gates.md,阻断即修,非阻断入反馈池。",
|
||||
"day7Closeout": [
|
||||
"A:接受 PASS_OA_REAL_USE_READY,进入下一轮体验/效率优化。",
|
||||
"B:接受 PASS_WITH_FINDINGS,但先处理指定 finding。",
|
||||
"C:暂停真实使用扩展,先做整改。"
|
||||
]
|
||||
},
|
||||
"privacy": "status/count/report-path summaries only; no phone/email/token/Secret/EncodingAESKey/full external ids/full invoice image/full bank receipt/full contract body/raw payload"
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
[oaops1] loaded masked live smoke env file
|
||||
>>> [oaops1] public-ready
|
||||
[oaops1][PASS] public-ready
|
||||
>>> [oaops1] live-smoke-env
|
||||
[oaops1][PASS] live-smoke-env
|
||||
>>> [oaops1] live-readiness
|
||||
[oaops1][PASS] live-readiness
|
||||
>>> [oaops1] oa-only-smoke-readiness
|
||||
[oaops1][PASS] oa-only-smoke-readiness
|
||||
[oaops1] login cooldown 65s before live-feature-flags
|
||||
>>> [oaops1] live-feature-flags
|
||||
[oaops1][PASS] live-feature-flags
|
||||
[oaops1] login cooldown 65s before authenticated-readonly-probe
|
||||
>>> [oaops1] authenticated-readonly-probe
|
||||
[oaops1][PASS] authenticated-readonly-probe
|
||||
>>> [oaops1] mobile-entry-matrix
|
||||
[oaops1][PASS] mobile-entry-matrix
|
||||
>>> [oaops1] wecom-rendering-matrix
|
||||
[oaops1][PASS] wecom-rendering-matrix
|
||||
>>> [oaops1] wecom-entry
|
||||
[oaops1][PASS] wecom-entry
|
||||
[oaops1][PASS] report-privacy-smoke
|
||||
[oaops1][PASS] report-privacy-smoke
|
||||
[oaops1] report=.trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
|
||||
Running 2 tests using 1 worker
|
||||
|
||||
(node:3125104) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:3125104) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/wecom-entry.spec.ts:56:1 › E2E 企微入口:普通浏览器下只提示企业微信工作台打开 (2.3s)
|
||||
✓ 2 tests/e2e/wecom-entry.spec.ts:66:1 › E2E 企微入口:企业微信场景优先显示企微 CTA,并展示未绑定提示 (2.5s)
|
||||
|
||||
2 passed (8.5s)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "wecom-entry",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/wecom-entry.log",
|
||||
"checkedAt": "2026-05-28T13:22:43.135Z"
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
|
||||
Running 8 tests using 1 worker
|
||||
|
||||
(node:3123417) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
(node:3123417) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
✓ 1 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 320 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.3s)
|
||||
✓ 2 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 360 Android 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.9s)
|
||||
✓ 3 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 375 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.6s)
|
||||
✓ 4 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 390 iPhone12 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.5s)
|
||||
✓ 5 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 393 Android 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.8s)
|
||||
✓ 6 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 414 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.6s)
|
||||
✓ 7 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:588:7 › WCM6 企业微信多手机移动渲染稳定化 › 430 iPhone 企业微信 › 核心移动入口使用 SVG 图标且跨视口不挤压 (7.8s)
|
||||
✓ 8 tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts:604:5 › WCM6 企业微信多手机移动渲染稳定化 › 390 iPhone12 企业微信 字体失败 › Material Symbols 字体失败时核心移动入口仍稳定 (7.4s)
|
||||
|
||||
8 passed (1.1m)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "wecom-rendering-matrix",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day3-oa-real-use-daily/wecom-rendering-matrix.log",
|
||||
"checkedAt": "2026-05-28T13:22:28.628Z"
|
||||
}
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"mode": "oaops1-authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-29T08:50:59.434Z",
|
||||
"readOnly": true,
|
||||
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
||||
"roles": {
|
||||
"admin": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"maskedIdentifier": "sm***om"
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"id": "portal",
|
||||
"role": "admin",
|
||||
"path": "/api/portal/home",
|
||||
"domain": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"role": "admin",
|
||||
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
||||
"domain": "approval",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements?page=1&pageSize=5",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 33
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursement-summary",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements/stats/summary",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"avgProcessingDays": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"role": "admin",
|
||||
"path": "/api/invoice-pool?page=1&pageSize=5",
|
||||
"domain": "invoice_ocr",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "purchase-requests",
|
||||
"role": "admin",
|
||||
"path": "/api/purchase-requests?page=1&pageSize=5",
|
||||
"domain": "procurement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contracts-registry",
|
||||
"role": "admin",
|
||||
"path": "/api/contracts-registry",
|
||||
"domain": "contracts",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 6,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"role": "admin",
|
||||
"path": "/api/projects?page=1&pageSize=5",
|
||||
"domain": "projects",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 4,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "audit-logs",
|
||||
"role": "admin",
|
||||
"path": "/api/audit-logs?page=1&pageSize=5",
|
||||
"domain": "audit",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 2280
|
||||
}
|
||||
}
|
||||
],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noExportsByDefault": true,
|
||||
"noFileUploads": true,
|
||||
"noWeComWrites": true,
|
||||
"noRealPaymentExecution": true
|
||||
}
|
||||
}
|
||||
+129
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"mode": "oaops1-authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"checkedAt": "2026-05-29T08:50:59.434Z",
|
||||
"readOnly": true,
|
||||
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
||||
"roles": {
|
||||
"admin": {
|
||||
"status": "PASS",
|
||||
"reason": null,
|
||||
"maskedIdentifier": "sm***om"
|
||||
}
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"id": "portal",
|
||||
"role": "admin",
|
||||
"path": "/api/portal/home",
|
||||
"domain": "portal",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {}
|
||||
},
|
||||
{
|
||||
"id": "workflow-tasks",
|
||||
"role": "admin",
|
||||
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
||||
"domain": "approval",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursements",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements?page=1&pageSize=5",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 33
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "reimbursement-summary",
|
||||
"role": "admin",
|
||||
"path": "/api/reimbursements/stats/summary",
|
||||
"domain": "reimbursement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"totalCount": 33,
|
||||
"avgProcessingDays": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "invoice-pool",
|
||||
"role": "admin",
|
||||
"path": "/api/invoice-pool?page=1&pageSize=5",
|
||||
"domain": "invoice_ocr",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "purchase-requests",
|
||||
"role": "admin",
|
||||
"path": "/api/purchase-requests?page=1&pageSize=5",
|
||||
"domain": "procurement",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 0,
|
||||
"total": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "contracts-registry",
|
||||
"role": "admin",
|
||||
"path": "/api/contracts-registry",
|
||||
"domain": "contracts",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 6,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"role": "admin",
|
||||
"path": "/api/projects?page=1&pageSize=5",
|
||||
"domain": "projects",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 4,
|
||||
"total": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "audit-logs",
|
||||
"role": "admin",
|
||||
"path": "/api/audit-logs?page=1&pageSize=5",
|
||||
"domain": "audit",
|
||||
"status": "PASS",
|
||||
"httpStatus": 200,
|
||||
"summary": {
|
||||
"itemCount": 5,
|
||||
"total": 2280
|
||||
}
|
||||
}
|
||||
],
|
||||
"boundaries": {
|
||||
"noBusinessWrites": true,
|
||||
"noExportsByDefault": true,
|
||||
"noFileUploads": true,
|
||||
"noWeComWrites": true,
|
||||
"noRealPaymentExecution": true
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"name": "authenticated-readonly-probe",
|
||||
"status": "PASS",
|
||||
"kind": "finding_allowed",
|
||||
"code": 0,
|
||||
"detail": "ok",
|
||||
"logRef": ".trellis/tasks/05-26-oa-seven-day-trial-live-ops/research/day4-oa-real-use-daily/authenticated-readonly-probe.log",
|
||||
"checkedAt": "2026-05-29T08:50:59.516Z"
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"checkedAt": "2026-05-29T08:49:52.625Z",
|
||||
"baseUrl": "https://oa.hyinda.com",
|
||||
"status": "PASS",
|
||||
"readOnly": true,
|
||||
"results": [
|
||||
{
|
||||
"flagKey": "payment_batch_v1",
|
||||
"expectedState": "force_on",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "payment_batch_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 17,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": true,
|
||||
"effectiveReason": "flag_force_on_global"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "erp_sync",
|
||||
"expectedState": "force_off",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "erp_sync",
|
||||
"overrideMode": "force_off",
|
||||
"rolloutType": "global",
|
||||
"version": 2,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": false,
|
||||
"effectiveReason": "flag_force_off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "attendance_v1",
|
||||
"expectedState": "disabled",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "attendance_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 88,
|
||||
"envEnabled": false,
|
||||
"effectiveEnabled": false,
|
||||
"effectiveReason": "env_hard_off"
|
||||
}
|
||||
},
|
||||
{
|
||||
"flagKey": "attendance_unified_v1",
|
||||
"expectedState": "enabled",
|
||||
"status": "PASS",
|
||||
"item": {
|
||||
"flagKey": "attendance_unified_v1",
|
||||
"overrideMode": "force_on",
|
||||
"rolloutType": "global",
|
||||
"version": 86,
|
||||
"envEnabled": true,
|
||||
"effectiveEnabled": true,
|
||||
"effectiveReason": "flag_force_on_global"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
某些文件未显示,因为此 diff 中更改的文件太多 显示更多
在新工单中引用
屏蔽一个用户