285 行
9.2 KiB
JSON
285 行
9.2 KiB
JSON
{
|
|
"issueId": "OAOPS1",
|
|
"mode": "oa-real-use-daily",
|
|
"status": "PASS_WITH_FINDINGS",
|
|
"conclusion": "PASS_WITH_FINDINGS",
|
|
"baseURL": "https://oa.hyinda.com",
|
|
"commit": "267240b",
|
|
"checkedAt": "2026-05-26T05:51:27.948Z",
|
|
"reportRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final",
|
|
"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-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/live-smoke-readiness/summary.json",
|
|
"findingCount": 0,
|
|
"openCount": 0
|
|
},
|
|
"oaOnlySmokeReadiness": {
|
|
"status": "PASS_WITH_FINDINGS",
|
|
"reportRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/oa-only-smoke-readiness/summary.json",
|
|
"findingCount": 7,
|
|
"openCount": 0
|
|
}
|
|
},
|
|
"steps": {
|
|
"public-ready": {
|
|
"name": "public-ready",
|
|
"status": "PASS",
|
|
"kind": "required",
|
|
"code": 0,
|
|
"detail": "ok",
|
|
"logRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/public-ready.log",
|
|
"checkedAt": "2026-05-26T05:48:56.169Z"
|
|
},
|
|
"live-smoke-env": {
|
|
"name": "live-smoke-env",
|
|
"status": "PASS",
|
|
"kind": "finding_allowed",
|
|
"code": 0,
|
|
"detail": "ok",
|
|
"logRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/live-smoke-env.log",
|
|
"checkedAt": "2026-05-26T05:48:56.740Z"
|
|
},
|
|
"live-readiness": {
|
|
"name": "live-readiness",
|
|
"status": "PASS",
|
|
"kind": "finding_allowed",
|
|
"code": 0,
|
|
"detail": "ok",
|
|
"logRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/live-readiness.log",
|
|
"checkedAt": "2026-05-26T05:49:02.213Z"
|
|
},
|
|
"oa-only-smoke-readiness": {
|
|
"name": "oa-only-smoke-readiness",
|
|
"status": "PASS",
|
|
"kind": "finding_allowed",
|
|
"code": 0,
|
|
"detail": "ok",
|
|
"logRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/oa-only-smoke-readiness.log",
|
|
"checkedAt": "2026-05-26T05:49:02.359Z"
|
|
},
|
|
"live-feature-flags": {
|
|
"name": "live-feature-flags",
|
|
"status": "FINDING",
|
|
"kind": "finding_allowed",
|
|
"code": 1,
|
|
"detail": "finding or missing runtime credential",
|
|
"logRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/live-feature-flags.log",
|
|
"checkedAt": "2026-05-26T05:49:02.508Z"
|
|
},
|
|
"authenticated-readonly-probe": {
|
|
"name": "authenticated-readonly-probe",
|
|
"status": "PASS",
|
|
"kind": "finding_allowed",
|
|
"code": 0,
|
|
"detail": "ok",
|
|
"logRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/authenticated-readonly-probe.log",
|
|
"checkedAt": "2026-05-26T05:49:02.665Z"
|
|
},
|
|
"mobile-entry-matrix": {
|
|
"name": "mobile-entry-matrix",
|
|
"status": "PASS",
|
|
"kind": "finding_allowed",
|
|
"code": 0,
|
|
"detail": "ok",
|
|
"logRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/mobile-entry-matrix.log",
|
|
"checkedAt": "2026-05-26T05:49:24.679Z"
|
|
},
|
|
"wecom-rendering-matrix": {
|
|
"name": "wecom-rendering-matrix",
|
|
"status": "PASS",
|
|
"kind": "finding_allowed",
|
|
"code": 0,
|
|
"detail": "ok",
|
|
"logRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/wecom-rendering-matrix.log",
|
|
"checkedAt": "2026-05-26T05:50:33.573Z"
|
|
},
|
|
"wecom-entry": {
|
|
"name": "wecom-entry",
|
|
"status": "FINDING",
|
|
"kind": "finding_allowed",
|
|
"code": 1,
|
|
"detail": "finding or missing runtime credential",
|
|
"logRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/wecom-entry.log",
|
|
"checkedAt": "2026-05-26T05:51:27.593Z"
|
|
},
|
|
"report-privacy-smoke": {
|
|
"name": "report-privacy-smoke",
|
|
"status": "PASS",
|
|
"kind": "required",
|
|
"code": 0,
|
|
"detail": "ok",
|
|
"logRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/report-privacy-smoke.log",
|
|
"checkedAt": "2026-05-26T05:51:27.805Z"
|
|
}
|
|
},
|
|
"readonlyProbe": {
|
|
"mode": "oaops1-authenticated-readonly-probe",
|
|
"status": "PASS_WITH_FINDINGS",
|
|
"baseUrl": "https://oa.hyinda.com",
|
|
"checkedAt": "2026-05-26T05:49:02.580Z",
|
|
"readOnly": true,
|
|
"duplicateRoleChecks": "employee/finance/payment/AP are covered by oa-only-smoke-readiness to avoid repeated login throttling",
|
|
"roles": {
|
|
"admin": {
|
|
"status": "SKIP",
|
|
"reason": "missing_admin_credentials",
|
|
"maskedIdentifier": null
|
|
}
|
|
},
|
|
"checks": [
|
|
{
|
|
"id": "portal",
|
|
"role": "admin",
|
|
"path": "/api/portal/home",
|
|
"domain": "portal",
|
|
"status": "SKIP",
|
|
"reason": "missing_admin_credentials"
|
|
},
|
|
{
|
|
"id": "workflow-tasks",
|
|
"role": "admin",
|
|
"path": "/api/workflow/tasks?page=1&pageSize=5",
|
|
"domain": "approval",
|
|
"status": "SKIP",
|
|
"reason": "missing_admin_credentials"
|
|
},
|
|
{
|
|
"id": "reimbursements",
|
|
"role": "admin",
|
|
"path": "/api/reimbursements?page=1&pageSize=5",
|
|
"domain": "reimbursement",
|
|
"status": "SKIP",
|
|
"reason": "missing_admin_credentials"
|
|
},
|
|
{
|
|
"id": "reimbursement-summary",
|
|
"role": "admin",
|
|
"path": "/api/reimbursements/stats/summary",
|
|
"domain": "reimbursement",
|
|
"status": "SKIP",
|
|
"reason": "missing_admin_credentials"
|
|
},
|
|
{
|
|
"id": "invoice-pool",
|
|
"role": "admin",
|
|
"path": "/api/invoice-pool?page=1&pageSize=5",
|
|
"domain": "invoice_ocr",
|
|
"status": "SKIP",
|
|
"reason": "missing_admin_credentials"
|
|
},
|
|
{
|
|
"id": "purchase-requests",
|
|
"role": "admin",
|
|
"path": "/api/purchase-requests?page=1&pageSize=5",
|
|
"domain": "procurement",
|
|
"status": "SKIP",
|
|
"reason": "missing_admin_credentials"
|
|
},
|
|
{
|
|
"id": "contracts-registry",
|
|
"role": "admin",
|
|
"path": "/api/contracts-registry",
|
|
"domain": "contracts",
|
|
"status": "SKIP",
|
|
"reason": "missing_admin_credentials"
|
|
},
|
|
{
|
|
"id": "projects",
|
|
"role": "admin",
|
|
"path": "/api/projects?page=1&pageSize=5",
|
|
"domain": "projects",
|
|
"status": "SKIP",
|
|
"reason": "missing_admin_credentials"
|
|
},
|
|
{
|
|
"id": "audit-logs",
|
|
"role": "admin",
|
|
"path": "/api/audit-logs?page=1&pageSize=5",
|
|
"domain": "audit",
|
|
"status": "SKIP",
|
|
"reason": "missing_admin_credentials"
|
|
}
|
|
],
|
|
"boundaries": {
|
|
"noBusinessWrites": true,
|
|
"noExportsByDefault": true,
|
|
"noFileUploads": true,
|
|
"noWeComWrites": true,
|
|
"noRealPaymentExecution": true
|
|
}
|
|
},
|
|
"findingCount": 4,
|
|
"findings": [
|
|
{
|
|
"source": "live-feature-flags",
|
|
"status": "FINDING",
|
|
"severity": "finding"
|
|
},
|
|
{
|
|
"source": "wecom-entry",
|
|
"status": "FINDING",
|
|
"severity": "finding"
|
|
},
|
|
{
|
|
"source": "authenticated-readonly-probe",
|
|
"status": "PASS_WITH_FINDINGS",
|
|
"severity": "manual_or_config"
|
|
},
|
|
{
|
|
"source": "child:oaOnlySmokeReadiness",
|
|
"status": "PASS_WITH_FINDINGS",
|
|
"severity": "finding",
|
|
"findingCount": 7,
|
|
"reportRef": ".trellis/tasks/05-26-oaops1-patrol-feature-review/research/oaops1-after-patrol-fix-final/oa-only-smoke-readiness/summary.json"
|
|
}
|
|
],
|
|
"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"
|
|
}
|