Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,14 @@ jobs:
# silently. SYNC with pre-commit hook 'projection-dlq-path'.
- name: Projection-DLQ path gate
run: uv run python scripts/ci/check_projection_dlq_path.py
# OMN-16690: a db_io contract's declared table `access` must cover the
# operations its handler performs. A handler that reads for idempotency
# under `access: write` is refused fail-closed by the runtime and every
# event is quarantined while the caller still sees a 202 — invisible to
# isolation tests, which inject fakes with no access enforcement. SYNC
# with pre-commit hook 'projection-contract-access'.
- name: Projection contract-access gate
run: uv run python scripts/ci/check_projection_contract_access.py
# OMN-14285 (WI-1 / S1d): exactly one OCC companion producer. Fails if a
# second writer surface (inline receipt/contract template outside the
# occ_evidence_stamp seam, duplicate OccCompanionEmitter, or a resurrected
Expand Down
19 changes: 19 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,25 @@ repos:
pass_filenames: false
stages: [pre-commit]

# OMN-16690: a db_io contract's declared table `access` must cover the
# operations its handler actually performs. Thirteen nodes declared
# `access: write` on a table their handler queries for idempotency; the
# runtime refuses the read fail-closed and quarantines every event while
# the gateway still answers 202 — zero rows, no visible error. Isolation
# tests could not catch it (they inject fakes with no access
# enforcement), so detection has to be static. Scoped to ANY node
# contract or handler, not just node_projection_*: the two live
# instances were node_hook_event_capture and
# node_renderer_capability_projection, neither of which matches that
# prefix. SYNC with ci.yml step "Projection contract-access gate".
- id: projection-contract-access
name: Projection contract-access gate (OMN-16690)
language: system
entry: uv run python scripts/ci/check_projection_contract_access.py
files: ^(src/omnimarket/nodes/.*/(contract\.yaml|.*\.py)|scripts/ci/check_projection_contract_access\.py)$
pass_filenames: false
stages: [pre-commit]

# OMN-14768 / F-11: renaming an OPEN PR's head branch closes the PR. Scan
# the whole merge-controller tree whenever any of its files (or the gate
# itself) changes. SYNC with the ci.yml `lint` job step
Expand Down
39 changes: 30 additions & 9 deletions docs/evidence/OMN-15423-relation-inventory.json
Original file line number Diff line number Diff line change
Expand Up @@ -1389,6 +1389,7 @@
"readers": [
"node_data_flow_sweep",
"node_database_sweep",
"node_projection_routing_decision",
"node_retention_cleanup",
"node_session_orchestrator"
],
Expand Down Expand Up @@ -1861,7 +1862,8 @@
"partitioning": [],
"producer": "node_projection_capsule_store",
"readers": [
"node_capsule_effectiveness_feedback_reducer"
"node_capsule_effectiveness_feedback_reducer",
"node_projection_capsule_store"
],
"target_schema": "omninode_internal",
"writers": [
Expand Down Expand Up @@ -2079,6 +2081,7 @@
"partitioning": [],
"producer": "node_projection_delegation",
"readers": [
"node_projection_delegation",
"node_projection_delegation_inference_response"
],
"target_schema": "tenant",
Expand Down Expand Up @@ -2151,6 +2154,7 @@
"node_delegate_skill_orchestrator",
"node_projection_baselines",
"node_projection_cost_by_repo",
"node_projection_delegation",
"node_projection_delegation_inference_response",
"node_projection_live_events",
"node_projection_pattern_learning",
Expand Down Expand Up @@ -2531,7 +2535,9 @@
"owner_declaration": "node_projection_event_chain",
"partitioning": [],
"producer": "node_projection_event_chain",
"readers": [],
"readers": [
"node_projection_event_chain"
],
"target_schema": "omninode_internal",
"writers": [
"node_projection_event_chain"
Expand Down Expand Up @@ -2691,7 +2697,9 @@
"owner_declaration": "node_evidence_dashboard_reducer",
"partitioning": [],
"producer": "node_evidence_dashboard_reducer",
"readers": [],
"readers": [
"node_evidence_dashboard_reducer"
],
"target_schema": "omninode_internal",
"writers": [
"node_evidence_dashboard_reducer"
Expand Down Expand Up @@ -2913,7 +2921,9 @@
"owner_declaration": "node_hook_event_capture",
"partitioning": [],
"producer": "node_hook_event_capture",
"readers": [],
"readers": [
"node_hook_event_capture"
],
"target_schema": "public",
"writers": [
"node_hook_event_capture"
Expand Down Expand Up @@ -3282,7 +3292,9 @@
"owner_declaration": "node_llm_delegation_projection",
"partitioning": [],
"producer": "node_llm_delegation_projection",
"readers": [],
"readers": [
"node_llm_delegation_projection"
],
"target_schema": "omninode_internal",
"writers": [
"node_llm_delegation_projection"
Expand Down Expand Up @@ -3729,6 +3741,7 @@
"node_projection_delegation",
"node_projection_live_events",
"node_projection_pattern_learning",
"node_projection_registration",
"node_projection_routing_decision",
"node_projection_savings",
"node_projection_session_outcome"
Expand Down Expand Up @@ -3960,6 +3973,7 @@
"producer": "node_projection_pattern_learning",
"readers": [
"node_data_flow_sweep",
"node_projection_pattern_learning",
"node_session_orchestrator"
],
"target_schema": "tenant",
Expand Down Expand Up @@ -4288,7 +4302,9 @@
"owner_declaration": "node_renderer_capability_projection",
"partitioning": [],
"producer": "node_renderer_capability_projection",
"readers": [],
"readers": [
"node_renderer_capability_projection"
],
"target_schema": "omninode_internal",
"writers": [
"node_renderer_capability_projection"
Expand Down Expand Up @@ -4340,7 +4356,9 @@
"owner_declaration": "node_projection_sandbox_decisions",
"partitioning": [],
"producer": "node_projection_sandbox_decisions",
"readers": [],
"readers": [
"node_projection_sandbox_decisions"
],
"target_schema": "omninode_internal",
"writers": [
"node_projection_sandbox_decisions"
Expand Down Expand Up @@ -4827,7 +4845,8 @@
"readers": [
"node_build_loop_orchestrator",
"node_generation_consumer",
"node_occ_companion_compute"
"node_occ_companion_compute",
"node_projection_traces"
],
"target_schema": "omninode_internal",
"writers": [
Expand Down Expand Up @@ -4880,7 +4899,9 @@
"owner_declaration": "node_projection_voice_sessions",
"partitioning": [],
"producer": "node_projection_voice_sessions",
"readers": [],
"readers": [
"node_projection_voice_sessions"
],
"target_schema": "omninode_internal",
"writers": [
"node_projection_voice_sessions"
Expand Down
Loading
Loading