Multi-Channel Data Service Audit
same data service, same source record, same policy, same action authority, same audit trail
This proves that P2P web, drawers, chat, Claude Co-Work, ServiceNow, mobile, and API consume governed modular data services instead of channel-specific shortcuts. Each channel must preserve evidence packs, source lineage, action authority, audit trail, and decision replay links from the same runtime contract.
Audit Questions
- Are all channels calling the same data service contracts?
- Are they receiving the same source-bound business objects?
- Are actions going through the same policy/action runtime?
- Can we prove this with logs, traces, tests, and code inspection?
Channel-to-Service Contract Matrix
Every capability maps to one canonical backend service and one stable contract. Channels render the response; they do not compute finance truth.
| Capability | Required service | Contract | Checks | Coverage |
|---|---|---|---|---|
| My invoice queue get_my_p2p_work_queue | invoice_queue_service | p2p_progressive_queue.v1 | same count, same top cases, source-bound items, trace id | all channels |
| Invoice details open_invoice_detail | invoice_detail_service | p2p_case_summary.v1 | same supplier, same amount, same status, same source record | all channels |
| Supplier info open_invoice_detail | supplier_service | p2p_case_summary.v1 | same supplier id, same supplier status, same provenance | all channels |
| PO/GR evidence show_invoice_evidence | po_gr_match_service | p2p_case_evidence.v1 | same PO, same GR state, same source lineage | all channels |
| Missing evidence show_invoice_evidence | evidence_service | p2p_case_evidence.v1 | same evidence pack, same gaps, same lineage | all channels |
| Policy trigger show_policy_reason | policy_decision_service | p2p_case_decision.v1 | same policy result, same version, same rationale | all channels |
| Allowed actions show_allowed_actions | action_eligibility_service | p2p_case_actions.v1 | same allowed actions, same blocked actions, same authority | all channels |
| ServiceNow ticket creation create_servicenow_ticket | action_runtime | action_runtime.v1 | same action gate, same ledger requirement, no direct write | all channels |
| Audit trail show_decision_replay | audit_service | p2p_case_replay.v1 | same trace model, same event chain, same actor/channel ledger | all channels |
| Decision replay show_decision_replay | replay_service | p2p_case_replay.v1 | same replay id, same timeline stages, same write-back link | all channels |
Runtime Channel Certification
| Channel | Queue count | Source-bound | Trace | Service | Status |
|---|---|---|---|---|---|
| P2P Web Page web_portal | 55 | 8 | TRACE-CHANNEL-e5a59c7e-6e91-5653-9670-489809d98abf | PASS | |
| Chat sphere_chat | 55 | 8 | TRACE-CHANNEL-1efb82a6-1271-590a-a532-1a14e00091f8 | PASS | |
| Claude Co-Work claude_cowork | 55 | 8 | TRACE-CHANNEL-658ccad7-76b7-5554-af3c-dbbee587d85c | PASS | |
| ServiceNow servicenow | 55 | 8 | TRACE-CHANNEL-4ec66f32-03c4-519c-b566-b388c721fc48 | PASS | |
| Mobile mobile | 55 | 8 | TRACE-CHANNEL-15d1e98e-32e8-5d56-b823-72db8cd58186 | PASS | |
| API rest_api | 55 | 8 | TRACE-CHANNEL-0f79c42a-4299-53b3-91f2-06cae4e029cb | PASS |
Cross-Channel Parity Results
| Capability | Web | Chat | Claude | ServiceNow | Mobile | API | Status |
|---|---|---|---|---|---|---|---|
| Queue count invoice_queue_service | 55 | 55 | 55 | 55 | 55 | 55 | PASS |
| Top invoice/case invoice_queue_service | CASE-P2P-000001 | CASE-P2P-000001 | CASE-P2P-000001 | CASE-P2P-000001 | CASE-P2P-000001 | CASE-P2P-000001 | PASS |
| Evidence pack evidence_service | EVD-PACK-P2P-000001 | EVD-PACK-P2P-000001 | EVD-PACK-P2P-000001 | EVD-PACK-P2P-000001 | EVD-PACK-P2P-000001 | EVD-PACK-P2P-000001 | PASS |
| Policy result policy_decision_service | runtime-owned | runtime-owned | runtime-owned | runtime-owned | runtime-owned | runtime-owned | PASS |
| Release payment action_eligibility_service | blocked | blocked | blocked | blocked | blocked | blocked | PASS |
| Ticket creation action_runtime | runtime | runtime | runtime | runtime | runtime | runtime | PASS |
| Replay replay_service | available | available | available | available | available | available | PASS |
Static Boundary Scan
Certified channel boundary files are scanned for direct DB, test-double, and local business-rule patterns. Backend services are not treated as channel code.
| File | Status | Finding |
|---|---|---|
| api/enterprise_experience.py | PASS | no prohibited channel patterns |
| api/ux_channels.py | PASS | no prohibited channel patterns |
| api/governed_chat.py | PASS | no prohibited channel patterns |
| api/claude_cowork.py | PASS | no prohibited channel patterns |
| core/claude_cowork_runtime.py | PASS | no prohibited channel patterns |
| ui/enterprise_chat.py | PASS | no prohibited channel patterns |
| ui/governed_chat.py | PASS | no prohibited channel patterns |
| ui/mobile_cockpit.py | PASS | no prohibited channel patterns |
| ui/_mission_p2p_queue_runtime.py | PASS | no prohibited channel patterns |
Telemetry and Anti-Drift Contract
- trace_id
- channel
- user_id
- role
- intent
- experience_contract
- services_called
- source_systems_accessed
- source_record_ids
- policy_versions
- mock_data_used
- source_bound
- actions_available
- actions_blocked
- audit_logged
- CI prevents channel-to-database imports in certified adapters.
- CI prevents mock data from certified non-test channel routes.
- Cross-channel parity runs the same canonical intents through all channels.
- Every response carries service attestation, trace id, and contract version.
- Deployment fails on critical action-authority divergence.
| Target | Required value |
|---|---|
| channel_requests_using_approved_data_services_pct | 100 |
| direct_db_access_from_channel_layer | 0 |
| mock_stub_data_in_non_test_mode | 0 |
| source_bound_responses_pct | 100 |
| action_runtime_usage_for_write_actions_pct | 100 |
| policy_checked_controlled_actions_pct | 100 |
| cross_channel_parity_pass_rate_pct | 100 |
| responses_with_trace_id_pct | 100 |
| responses_with_contract_version_pct | 100 |
API contract: /api/iaf/experience/multi-channel-service-audit