omninode-memory 0.18.3__tar.gz → 0.18.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/required-checks.yaml +46 -1
  2. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/ban-hardcoded-runner-ip.yml +2 -1
  3. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/call-occ-autobind.yml +9 -7
  4. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/call-occ-companion-effect.yml +3 -2
  5. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/call-reject-skip.yml +1 -1
  6. omninode_memory-0.18.5/.github/workflows/call-repo-evidence-gate.yml +70 -0
  7. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/check-handshake.yml +2 -3
  8. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/ci.yml +185 -2
  9. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/contract-validation.yml +85 -20
  10. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/docs-validate.yml +1 -1
  11. omninode_memory-0.18.5/.github/workflows/hardcoded-model-config.yml +24 -0
  12. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/imperative-contract-guard.yml +3 -2
  13. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/kb-doc-gate.yml +1 -1
  14. omninode_memory-0.18.5/.github/workflows/pr-title-check.yml +62 -0
  15. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/public-repo-hygiene.yml +2 -2
  16. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/secrets-baseline-wiring.yml +1 -1
  17. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/security-scan.yml +2 -2
  18. omninode_memory-0.18.5/.onex_ratchets/canonical_file_shape_baseline.txt +75 -0
  19. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.pre-commit-config.yaml +59 -7
  20. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.pre-commit-hooks/reject-deploy-gate-skip-token.sh +18 -35
  21. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.public-repo-hygiene.yaml +1 -0
  22. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.secrets.baseline +2 -2
  23. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/CHANGELOG.md +20 -0
  24. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/CLAUDE.md +2 -2
  25. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/PKG-INFO +16 -16
  26. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/README.md +13 -13
  27. omninode_memory-0.18.5/config/hardcoded_model_config_baseline.yaml +47 -0
  28. omninode_memory-0.18.5/contracts/OMN-20032.yaml +57 -0
  29. omninode_memory-0.18.5/contracts/OMN-20074.yaml +168 -0
  30. omninode_memory-0.18.5/contracts/OMN-20936.yaml +55 -0
  31. omninode_memory-0.18.5/contracts/OMN-20940.yaml +58 -0
  32. omninode_memory-0.18.5/contracts/OMN-20943.yaml +67 -0
  33. omninode_memory-0.18.5/contracts/OMN-20997.yaml +69 -0
  34. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/deployment/database/migrations_pending/004_create_navigation_paths_collection.py +1 -1
  35. omninode_memory-0.18.5/imperative-contract-allowlist.yaml +22 -0
  36. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/pyproject.toml +4 -4
  37. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/ci/test_selection_adjacency.yaml +8 -0
  38. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validate_ci_precommit_alignment.py +20 -0
  39. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/adapters/adapter_graph_memory.py +1 -1
  40. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/events/__init__.py +3 -0
  41. omninode_memory-0.18.5/src/omnimemory/models/events/model_lifecycle_transition_failed_event.py +60 -0
  42. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_learning_retrieval_effect/contract.yaml +0 -9
  43. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_query_effect/contract.yaml +5 -31
  44. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_storage_effect/contract.yaml +3 -23
  45. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/contract.yaml +3 -12
  46. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_navigation_history_reducer/contract.yaml +1 -4
  47. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_builder_compute/contract.yaml +3 -10
  48. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_semantic_analyzer_compute/contract.yaml +3 -12
  49. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_similarity_compute/contract.yaml +3 -12
  50. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/runtime/dispatch_handlers.py +256 -13
  51. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/runtime/plugin.py +151 -5
  52. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/runtime/wiring.py +24 -29
  53. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/topics.py +6 -0
  54. omninode_memory-0.18.5/tests/ci/test_codeql_from_core_omn20074.py +78 -0
  55. omninode_memory-0.18.5/tests/ci/test_contract_validation_core_validator_omn20074.py +246 -0
  56. omninode_memory-0.18.5/tests/ci/test_deployment_config_context_omn20940.py +81 -0
  57. omninode_memory-0.18.5/tests/ci/test_imperative_contract_guard_caller_omn20943.py +194 -0
  58. omninode_memory-0.18.5/tests/ci/test_pr_title_check_omnimarket_node.py +206 -0
  59. omninode_memory-0.18.5/tests/ci/test_precommit_hooks_core_omn20074.py +100 -0
  60. omninode_memory-0.18.5/tests/ci/test_reject_skip_token_hook_omn20074.py +71 -0
  61. omninode_memory-0.18.5/tests/ci/test_repo_evidence_caller_omn20074.py +120 -0
  62. omninode_memory-0.18.5/tests/ci/test_repo_evidence_caller_verifier_floor_omn20032.py +63 -0
  63. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/test_golden_chain_qdrant_ingestion.py +10 -1
  64. omninode_memory-0.18.5/tests/scripts/test_occ_eligibility_enforcement.py +165 -0
  65. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_contract_validation.py +58 -53
  66. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_handler_routing_boot_resolvable.py +1 -1
  67. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_dispatch_handlers.py +3 -3
  68. omninode_memory-0.18.5/tests/unit/runtime/test_expire_memory_dispatch.py +374 -0
  69. omninode_memory-0.18.5/tests/unit/runtime/test_navigation_embedding_url_omn20936.py +90 -0
  70. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_plugin_integration_wiring.py +145 -0
  71. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_wiring.py +41 -1
  72. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_validate_ci_precommit_alignment.py +18 -3
  73. omninode_memory-0.18.5/tests/unit/test_workflow_sibling_pins.py +94 -0
  74. omninode_memory-0.18.5/tests/workflows/__init__.py +2 -0
  75. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/uv.lock +12 -12
  76. omninode_memory-0.18.3/.github/workflows/pr-title-check.yml +0 -34
  77. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.claude/architecture-handshake.md +0 -0
  78. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.env.example +0 -0
  79. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.flake8 +0 -0
  80. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/CODE_OF_CONDUCT.md +0 -0
  81. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/CONTRIBUTING.md +0 -0
  82. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  83. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  84. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  85. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/dependabot.yml +0 -0
  86. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/auto-merge.yml +0 -0
  87. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/auto-tag-on-merge.yml +0 -0
  88. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/build-and-push-migrate-image.yml +0 -0
  89. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/dep-provenance-gate.yml +0 -0
  90. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/main-target-guard.yml +0 -0
  91. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/omni-standards-compliance.yml +0 -0
  92. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/pin-resolvability-gate.yml +0 -0
  93. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/pre-commit.yml +0 -0
  94. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/release-dry-run.yml +0 -0
  95. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/release.yml +0 -0
  96. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/sibling-lock-refresh.yml +0 -0
  97. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/stale-todo-gate.yml +0 -0
  98. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/todo-audit-on-merge.yml +0 -0
  99. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/url-authority-gate.yml +0 -0
  100. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/validate-validator-requirements.yml +0 -0
  101. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.github/workflows/validator-runtime-profiles.yml +0 -0
  102. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.gitignore +0 -0
  103. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.kb-doc-gate.yaml +0 -0
  104. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.markdown-link-check.json +0 -0
  105. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.onex_ratchets/noncanonical_class_allowlist.yaml +0 -0
  106. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.serena/project.yml +0 -0
  107. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/.yamlfmt +0 -0
  108. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/LICENSE +0 -0
  109. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/SECURITY.md +0 -0
  110. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/architecture-handshakes/validator-requirements-baseline.yaml +0 -0
  111. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/architecture-handshakes/validator-requirements.yaml +0 -0
  112. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/contract.yaml +0 -0
  113. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/contracts/OMN-12245.yaml +0 -0
  114. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/deployment/database/migrations/001_create_subscription_tables.sql +0 -0
  115. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/deployment/database/migrations/002_create_memories_table.sql +0 -0
  116. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/deployment/database/migrations/003_create_crawl_state_table.sql +0 -0
  117. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/deployment/database/migrations/004_create_navigation_sessions_table.sql +0 -0
  118. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/deployment/database/migrations/005_backfill_null_checksums.sql +0 -0
  119. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/deployment/database/migrations_pending/004_create_navigation_sessions_table.sql +0 -0
  120. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/deployment/database/pending/003_create_crawl_state_table.sql +0 -0
  121. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/deployment/docker/Dockerfile.migrate +0 -0
  122. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docker-compose.prod.yml +0 -0
  123. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docker-compose.yml +0 -0
  124. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-icon-black.png +0 -0
  125. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-icon-full-color.svg +0 -0
  126. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-icon-white.png +0 -0
  127. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-inline-black.png +0 -0
  128. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-inline-full-color.svg +0 -0
  129. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-inline-white.png +0 -0
  130. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-stacked-black.png +0 -0
  131. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-stacked-full-color.svg +0 -0
  132. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-stacked-white.png +0 -0
  133. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-wordmark-black.svg +0 -0
  134. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-wordmark-grey.svg +0 -0
  135. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/docs/assets/brand/omninode-wordmark-white.svg +0 -0
  136. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/examples/__init__.py +0 -0
  137. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/examples/advanced_architecture_demo.py +0 -0
  138. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/pyrightconfig.json +0 -0
  139. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/__init__.py +0 -0
  140. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/check_dep_provenance.py +0 -0
  141. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/check_migration_freeze.sh +0 -0
  142. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/check_no_hardcoded_bolt.sh +0 -0
  143. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/ci/__init__.py +0 -0
  144. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/ci/collect_changed_files.py +0 -0
  145. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/ci/detect_test_paths.py +0 -0
  146. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/ci/occ_manual_replay_precheck.py +0 -0
  147. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/ci/run_runtime_profiles_validator.py +0 -0
  148. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/ci/test_selection_loader.py +0 -0
  149. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/ci/test_selection_models.py +0 -0
  150. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/ci/verify_pypi_pin_resolvability.py +0 -0
  151. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/graphify_to_memgraph.py +0 -0
  152. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/graphify_to_qdrant.py +0 -0
  153. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/__init__.py +0 -0
  154. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/check_ai_slop.py +0 -0
  155. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/check_kafka_no_hardcoded_fallback.sh +0 -0
  156. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/check_no_internal_ips.sh +0 -0
  157. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/check_precommit_additional_dependencies.sh +0 -0
  158. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/foundation_validation_common.py +0 -0
  159. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/validate_enum_casing.py +0 -0
  160. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/validate_http_imports.py +0 -0
  161. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/validate_kafka_imports.py +0 -0
  162. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/validate_model_locations.py +0 -0
  163. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/validate_naming.py +0 -0
  164. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/validate_no_backward_compatibility.py +0 -0
  165. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/validate_no_env_fallbacks.py +0 -0
  166. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/validate_pydantic_patterns.py +0 -0
  167. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/validate_secrets.py +0 -0
  168. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/validate_single_class_per_file.py +0 -0
  169. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/scripts/validation/validate_spdx_headers.py +0 -0
  170. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/__init__.py +0 -0
  171. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/_compat_imports.py +0 -0
  172. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/__init__.py +0 -0
  173. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/adapter_concurrency.py +0 -0
  174. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/adapter_correlation_context.py +0 -0
  175. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/adapter_db_url.py +0 -0
  176. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/adapter_error_sanitizer.py +0 -0
  177. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/adapter_handler_constants.py +0 -0
  178. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/adapter_health_manager.py +0 -0
  179. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/adapter_metrics_counter.py +0 -0
  180. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/adapter_observability_wrapper.py +0 -0
  181. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/adapter_pii_detector.py +0 -0
  182. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/adapter_resource_manager.py +0 -0
  183. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/adapters/adapter_retry_utils.py +0 -0
  184. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/bootstrap.py +0 -0
  185. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/__init__.py +0 -0
  186. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/crawl/__init__.py +0 -0
  187. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/crawl/enum_context_source_type.py +0 -0
  188. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/crawl/enum_crawler_type.py +0 -0
  189. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/crawl/enum_detected_doc_type.py +0 -0
  190. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_attribution_signal_type.py +0 -0
  191. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_context_item_type.py +0 -0
  192. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_data_type.py +0 -0
  193. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_entity_extraction_mode.py +0 -0
  194. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_error_code.py +0 -0
  195. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_intelligence_operation_type.py +0 -0
  196. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_lifecycle_state.py +0 -0
  197. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_memory_operation_type.py +0 -0
  198. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_memory_storage_type.py +0 -0
  199. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_memory_type.py +0 -0
  200. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_migration_status.py +0 -0
  201. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_node_type.py +0 -0
  202. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_operation_status.py +0 -0
  203. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_preferred_tone.py +0 -0
  204. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_priority_level.py +0 -0
  205. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_promotion_tier.py +0 -0
  206. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_semantic_entity_type.py +0 -0
  207. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_severity.py +0 -0
  208. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_subscription_status.py +0 -0
  209. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_technical_level.py +0 -0
  210. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/enums/enum_trust_level.py +0 -0
  211. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/errors/__init__.py +0 -0
  212. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/errors/embedding_errors.py +0 -0
  213. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/__init__.py +0 -0
  214. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/adapters/__init__.py +0 -0
  215. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/adapters/adapter_embedding_http.py +0 -0
  216. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/adapters/adapter_intent_graph.py +0 -0
  217. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/adapters/adapter_intent_graph_contract.yaml +0 -0
  218. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/adapters/adapter_rate_limiter.py +0 -0
  219. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/adapters/adapter_valkey.py +0 -0
  220. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/adapters/models/__init__.py +0 -0
  221. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/adapters/models/model_adapter_intent_graph_config.py +0 -0
  222. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/adapters/models/model_intent_domain.py +0 -0
  223. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/adapters/models/model_intent_graph_health.py +0 -0
  224. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/handler_intent.py +0 -0
  225. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/handler_subscription.py +0 -0
  226. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/handler_subscription_contract.yaml +0 -0
  227. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/models/__init__.py +0 -0
  228. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/handlers/models/model_handler_intent_config.py +0 -0
  229. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/__init__.py +0 -0
  230. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/adapters/__init__.py +0 -0
  231. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/adapters/model_connections_result.py +0 -0
  232. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/adapters/model_filesystem_adapter_config.py +0 -0
  233. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/adapters/model_graph_memory_config.py +0 -0
  234. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/adapters/model_graph_memory_health.py +0 -0
  235. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/adapters/model_memory_connection.py +0 -0
  236. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/adapters/model_related_memory.py +0 -0
  237. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/adapters/model_related_memory_result.py +0 -0
  238. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/__init__.py +0 -0
  239. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_doc_source_config.py +0 -0
  240. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_embedding_config.py +0 -0
  241. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_filesystem_config.py +0 -0
  242. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_handler_semantic_compute_config.py +0 -0
  243. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_linear_scope_mapping.py +0 -0
  244. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_memory_service_config.py +0 -0
  245. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_path_scope_mapping.py +0 -0
  246. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_postgres_config.py +0 -0
  247. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_promotion_threshold_set.py +0 -0
  248. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_qdrant_config.py +0 -0
  249. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_rate_limiter_config.py +0 -0
  250. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_scope_mapping_config.py +0 -0
  251. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/config/model_semantic_compute_policy_config.py +0 -0
  252. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/container/__init__.py +0 -0
  253. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/contracts/__init__.py +0 -0
  254. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/contracts/mixin_handler_routing.py +0 -0
  255. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/contracts/model_contract_compute_extended.py +0 -0
  256. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/contracts/model_contract_effect_extended.py +0 -0
  257. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/contracts/model_contract_orchestrator_extended.py +0 -0
  258. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/contracts/model_contract_reducer_extended.py +0 -0
  259. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/core/__init__.py +0 -0
  260. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/core/model_memory_context.py +0 -0
  261. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/core/model_memory_metadata.py +0 -0
  262. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/core/model_memory_parameters.py +0 -0
  263. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/core/model_memory_request.py +0 -0
  264. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/core/model_memory_response.py +0 -0
  265. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/core/model_operation_metadata.py +0 -0
  266. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/core/model_processing_metrics.py +0 -0
  267. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/core/model_provenance.py +0 -0
  268. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/crawl/__init__.py +0 -0
  269. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/crawl/model_crawl_tick_command.py +0 -0
  270. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/crawl/model_document_changed_event.py +0 -0
  271. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/crawl/model_document_discovered_event.py +0 -0
  272. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/crawl/model_document_indexed_event.py +0 -0
  273. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/crawl/model_document_indexed_kreuzberg_event.py +0 -0
  274. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/crawl/model_document_parse_failed_event.py +0 -0
  275. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/crawl/model_document_removed_event.py +0 -0
  276. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/crawl/types.py +0 -0
  277. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/events/model_crawl_tick_command.py +0 -0
  278. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/events/model_intent_classified_event.py +0 -0
  279. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/__init__.py +0 -0
  280. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_audit_metadata.py +0 -0
  281. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_configuration.py +0 -0
  282. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_connection_metadata.py +0 -0
  283. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_error_details.py +0 -0
  284. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_health_metadata.py +0 -0
  285. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_health_response.py +0 -0
  286. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_memory_data.py +0 -0
  287. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_metrics_response.py +0 -0
  288. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_migration_progress.py +0 -0
  289. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_notes.py +0 -0
  290. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_priority.py +0 -0
  291. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_progress_summary.py +0 -0
  292. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_semver.py +0 -0
  293. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_success_metrics.py +0 -0
  294. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_system_health.py +0 -0
  295. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_tags.py +0 -0
  296. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_trust_score.py +0 -0
  297. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_typed_collections.py +0 -0
  298. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/foundation/model_user.py +0 -0
  299. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/intelligence/__init__.py +0 -0
  300. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/intelligence/model_intelligence_analysis.py +0 -0
  301. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/intelligence/model_pattern_recognition_result.py +0 -0
  302. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/intelligence/model_semantic_analysis_result.py +0 -0
  303. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/intelligence/model_semantic_entity.py +0 -0
  304. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/intelligence/model_semantic_entity_list.py +0 -0
  305. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/memory/__init__.py +0 -0
  306. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/memory/model_memory_item.py +0 -0
  307. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/memory/model_memory_query.py +0 -0
  308. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/memory/model_memory_search_result.py +0 -0
  309. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/memory/model_memory_storage_config.py +0 -0
  310. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/memory/model_similarity_result.py +0 -0
  311. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/persona/__init__.py +0 -0
  312. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/persona/model_persona_signal.py +0 -0
  313. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/persona/model_user_persona_v1.py +0 -0
  314. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/scoring/__init__.py +0 -0
  315. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/scoring/model_context_item_stats.py +0 -0
  316. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/scoring/model_context_policy_config.py +0 -0
  317. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/scoring/model_promotion_decision.py +0 -0
  318. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/service/__init__.py +0 -0
  319. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/service/model_service_config.py +0 -0
  320. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/service/model_service_health.py +0 -0
  321. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/service/model_service_registry.py +0 -0
  322. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/subscription/__init__.py +0 -0
  323. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/subscription/constants.py +0 -0
  324. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/subscription/model_notification_event.py +0 -0
  325. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/subscription/model_notification_event_payload.py +0 -0
  326. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/subscription/model_subscription.py +0 -0
  327. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/__init__.py +0 -0
  328. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_audit.py +0 -0
  329. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_circuit_breaker_config.py +0 -0
  330. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_circuit_breaker_stats_response.py +0 -0
  331. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_concurrency.py +0 -0
  332. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_correlation_context.py +0 -0
  333. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_health_check_config.py +0 -0
  334. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_health_check_details.py +0 -0
  335. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_health_check_result.py +0 -0
  336. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_health_status.py +0 -0
  337. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_pii_detection_result.py +0 -0
  338. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_pii_detector_config.py +0 -0
  339. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_pii_match.py +0 -0
  340. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_pii_pattern_config.py +0 -0
  341. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_pii_type.py +0 -0
  342. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_resource_health_check.py +0 -0
  343. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_retry_attempt_info.py +0 -0
  344. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_retry_config.py +0 -0
  345. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_retry_statistics.py +0 -0
  346. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_structured_log_entry.py +0 -0
  347. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/models/utils/model_system_health.py +0 -0
  348. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/__init__.py +0 -0
  349. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/base.py +0 -0
  350. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_coordinator_orchestrator/__init__.py +0 -0
  351. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_coordinator_orchestrator/contract.yaml +0 -0
  352. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_coordinator_orchestrator/models/__init__.py +0 -0
  353. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_coordinator_orchestrator/models/model_request.py +0 -0
  354. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_coordinator_orchestrator/models/model_response.py +0 -0
  355. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_learning_retrieval_effect/__init__.py +0 -0
  356. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_learning_retrieval_effect/adapters/__init__.py +0 -0
  357. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_learning_retrieval_effect/handlers/__init__.py +0 -0
  358. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_learning_retrieval_effect/handlers/handler_agent_learning_retrieval.py +0 -0
  359. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_learning_retrieval_effect/models/__init__.py +0 -0
  360. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_learning_retrieval_effect/models/model_request.py +0 -0
  361. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_agent_learning_retrieval_effect/models/model_response.py +0 -0
  362. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_query_effect/__init__.py +0 -0
  363. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_query_effect/handlers/__init__.py +0 -0
  364. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_query_effect/handlers/handler_intent_query.py +0 -0
  365. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_query_effect/mappers/__init__.py +0 -0
  366. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_query_effect/mappers/util_intent_mapping.py +0 -0
  367. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_query_effect/models/__init__.py +0 -0
  368. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_query_effect/models/model_handler_intent_query_config.py +0 -0
  369. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_query_effect/registry/__init__.py +0 -0
  370. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_query_effect/registry/registry_intent_query_effect.py +0 -0
  371. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_storage_effect/__init__.py +0 -0
  372. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_storage_effect/adapters/__init__.py +0 -0
  373. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_storage_effect/adapters/adapter_intent_storage.py +0 -0
  374. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_storage_effect/models/__init__.py +0 -0
  375. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_storage_effect/models/model_intent_storage_request.py +0 -0
  376. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_intent_storage_effect/models/model_intent_storage_response.py +0 -0
  377. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_kreuzberg_parse_effect/__init__.py +0 -0
  378. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_kreuzberg_parse_effect/adapters/__init__.py +0 -0
  379. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_kreuzberg_parse_effect/adapters/adapter_kreuzberg_client.py +0 -0
  380. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_kreuzberg_parse_effect/contract.yaml +0 -0
  381. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_kreuzberg_parse_effect/handler_kreuzberg_parse.py +0 -0
  382. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_kreuzberg_parse_effect/models/__init__.py +0 -0
  383. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_kreuzberg_parse_effect/models/model_kreuzberg_parse_config.py +0 -0
  384. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_kreuzberg_parse_effect/models/model_kreuzberg_parse_result.py +0 -0
  385. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_consolidator_reducer/__init__.py +0 -0
  386. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/__init__.py +0 -0
  387. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/adapters/__init__.py +0 -0
  388. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/adapters/adapter_postgres_deactivate_memory.py +0 -0
  389. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/adapters/adapter_runtime_tick_memory.py +0 -0
  390. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/handlers/__init__.py +0 -0
  391. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/handlers/handler_memory_archive.py +0 -0
  392. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/handlers/handler_memory_expire.py +0 -0
  393. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/handlers/handler_memory_tick.py +0 -0
  394. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/models/__init__.py +0 -0
  395. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/validators/__init__.py +0 -0
  396. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_lifecycle_orchestrator/validators/validator_lifecycle_transition.py +0 -0
  397. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/__init__.py +0 -0
  398. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/adapters/__init__.py +0 -0
  399. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/adapters/adapter_embedding_client.py +0 -0
  400. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/contract.yaml +0 -0
  401. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/contract_descriptor.py +0 -0
  402. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/handlers/__init__.py +0 -0
  403. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/handlers/handler_db_mock.py +0 -0
  404. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/handlers/handler_decay.py +0 -0
  405. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/handlers/handler_fusion.py +0 -0
  406. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/handlers/handler_graph_mock.py +0 -0
  407. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/handlers/handler_memory_retrieval.py +0 -0
  408. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/handlers/handler_qdrant.py +0 -0
  409. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/handlers/handler_qdrant_mock.py +0 -0
  410. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/models/__init__.py +0 -0
  411. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/models/model_embedding_client_config.py +0 -0
  412. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/models/model_handler_db_mock_config.py +0 -0
  413. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/models/model_handler_graph_mock_config.py +0 -0
  414. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/models/model_handler_memory_retrieval_config.py +0 -0
  415. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/models/model_handler_qdrant_config.py +0 -0
  416. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/models/model_handler_qdrant_mock_config.py +0 -0
  417. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/models/model_memory_retrieval_request.py +0 -0
  418. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_retrieval_effect/models/model_memory_retrieval_response.py +0 -0
  419. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_storage_effect/__init__.py +0 -0
  420. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_storage_effect/adapters/__init__.py +0 -0
  421. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_storage_effect/adapters/adapter_filesystem.py +0 -0
  422. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_storage_effect/contract.yaml +0 -0
  423. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_storage_effect/models/__init__.py +0 -0
  424. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_storage_effect/models/model_memory_storage_request.py +0 -0
  425. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_memory_storage_effect/models/model_memory_storage_response.py +0 -0
  426. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_navigation_history_reducer/__init__.py +0 -0
  427. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_navigation_history_reducer/handlers/__init__.py +0 -0
  428. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_navigation_history_reducer/handlers/handler_navigation_history_reducer.py +0 -0
  429. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_navigation_history_reducer/models/__init__.py +0 -0
  430. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_navigation_history_reducer/models/model_navigation_history_request.py +0 -0
  431. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_navigation_history_reducer/models/model_navigation_history_response.py +0 -0
  432. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_navigation_history_reducer/models/model_navigation_session.py +0 -0
  433. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_navigation_history_reducer/node_navigation_history_reducer.py +0 -0
  434. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_builder_compute/__init__.py +0 -0
  435. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_builder_compute/handlers/__init__.py +0 -0
  436. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_builder_compute/handlers/handler_persona_classify.py +0 -0
  437. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_builder_compute/models/__init__.py +0 -0
  438. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_builder_compute/models/model_classify_request.py +0 -0
  439. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_builder_compute/models/model_classify_result.py +0 -0
  440. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_storage_effect/__init__.py +0 -0
  441. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_storage_effect/adapters/__init__.py +0 -0
  442. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_storage_effect/adapters/adapter_postgres_persona.py +0 -0
  443. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_storage_effect/contract.yaml +0 -0
  444. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_storage_effect/models/__init__.py +0 -0
  445. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_storage_effect/models/model_persona_storage_request.py +0 -0
  446. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_persona_storage_effect/models/model_persona_storage_response.py +0 -0
  447. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_semantic_analyzer_compute/__init__.py +0 -0
  448. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_semantic_analyzer_compute/handlers/__init__.py +0 -0
  449. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_semantic_analyzer_compute/handlers/handler_semantic_compute.py +0 -0
  450. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_semantic_analyzer_compute/models/__init__.py +0 -0
  451. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_semantic_analyzer_compute/models/model_semantic_analyzer_compute_request.py +0 -0
  452. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_semantic_analyzer_compute/models/model_semantic_analyzer_compute_response.py +0 -0
  453. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_semantic_analyzer_compute/node_semantic_analyzer_compute.py +0 -0
  454. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_similarity_compute/__init__.py +0 -0
  455. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_similarity_compute/handlers/__init__.py +0 -0
  456. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_similarity_compute/handlers/handler_similarity_compute.py +0 -0
  457. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_similarity_compute/models/__init__.py +0 -0
  458. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_similarity_compute/models/model_handler_similarity_compute_config.py +0 -0
  459. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_similarity_compute/models/model_similarity_compute_request.py +0 -0
  460. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_similarity_compute/models/model_similarity_compute_response.py +0 -0
  461. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/nodes/node_similarity_compute/node_similarity_compute.py +0 -0
  462. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/protocols/__init__.py +0 -0
  463. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/protocols/base_protocols.py +0 -0
  464. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/protocols/data_models.py +0 -0
  465. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/protocols/error_models.py +0 -0
  466. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/protocols/protocol_embedding.py +0 -0
  467. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/protocols/protocol_embedding_provider.py +0 -0
  468. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/protocols/protocol_handler_intent.py +0 -0
  469. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/protocols/protocol_intent_graph_adapter.py +0 -0
  470. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/protocols/protocol_secrets_provider.py +0 -0
  471. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/runtime/__init__.py +0 -0
  472. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/runtime/adapters.py +0 -0
  473. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/runtime/contract_topics.py +0 -0
  474. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/runtime/handler_lifecycle.py +0 -0
  475. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/runtime/handler_lifecycle_contract.yaml +0 -0
  476. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/runtime/introspection.py +0 -0
  477. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/runtime/message_type_registration.py +0 -0
  478. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/secrets.py +0 -0
  479. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/settings.py +0 -0
  480. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/tools/__init__.py +0 -0
  481. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/tools/contract_linter.py +0 -0
  482. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/tools/validators/__init__.py +0 -0
  483. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/src/omnimemory/tools/validators/validator_contract.py +0 -0
  484. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/__init__.py +0 -0
  485. {omninode_memory-0.18.3/tests/nodes/node_navigation_history_reducer → omninode_memory-0.18.5/tests/ci}/__init__.py +0 -0
  486. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/conftest.py +0 -0
  487. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/fixtures/omn19666/pre-commit-git-dependency.yaml +0 -0
  488. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/fixtures/omn19666/pre-commit-pypi-dependency.yaml +0 -0
  489. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/gates/__init__.py +0 -0
  490. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/gates/test_ban_hardcoded_runner_ip_scope.py +0 -0
  491. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/gates/test_consumer_group_name_authorization.py +0 -0
  492. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/handlers/__init__.py +0 -0
  493. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/handlers/adapters/__init__.py +0 -0
  494. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/handlers/adapters/test_adapter_embedding_http.py +0 -0
  495. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/handlers/adapters/test_adapter_embedding_http_integration.py +0 -0
  496. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/handlers/adapters/test_adapter_graph_memory.py +0 -0
  497. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/handlers/adapters/test_adapter_graph_memory_integration.py +0 -0
  498. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/handlers/adapters/test_adapter_intent_graph.py +0 -0
  499. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/handlers/adapters/test_adapter_rate_limiter.py +0 -0
  500. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/handlers/test_handler_intent.py +0 -0
  501. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/handlers/test_handler_semantic_compute.py +0 -0
  502. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/__init__.py +0 -0
  503. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/conftest.py +0 -0
  504. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/nodes/__init__.py +0 -0
  505. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/nodes/test_kreuzberg_parse_effect.py +0 -0
  506. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/nodes/test_memory_lifecycle_orchestrator_integration.py +0 -0
  507. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/nodes/test_navigation_history_reducer_integration.py +0 -0
  508. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/test_entry_point_discovery.py +0 -0
  509. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/test_golden_chain_memgraph_ingestion.py +0 -0
  510. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/test_handler_lifecycle_pattern.py +0 -0
  511. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/test_handler_subscription.py +0 -0
  512. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/test_node_agent_coordinator.py +0 -0
  513. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/integration/test_persona_round_trip.py +0 -0
  514. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/models/__init__.py +0 -0
  515. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/models/contracts/__init__.py +0 -0
  516. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/models/contracts/test_extended_contracts.py +0 -0
  517. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/models/events/__init__.py +0 -0
  518. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/models/events/test_model_intent_classified_event.py +0 -0
  519. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/models/test_frozen_boundary_models.py +0 -0
  520. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/__init__.py +0 -0
  521. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_intent_query_effect/__init__.py +0 -0
  522. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_intent_query_effect/conftest.py +0 -0
  523. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_intent_query_effect/test_handler_intent_query_integration.py +0 -0
  524. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_intent_storage_effect/__init__.py +0 -0
  525. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_intent_storage_effect/test_handler_intent_storage_adapter_integration.py +0 -0
  526. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_memory_retrieval_effect/__init__.py +0 -0
  527. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_memory_retrieval_effect/test_contract_descriptor.py +0 -0
  528. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_memory_retrieval_effect/test_dispatch_entrypoint_contract.py +0 -0
  529. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_memory_retrieval_effect/test_memory_retrieval_effect.py +0 -0
  530. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_memory_storage_effect/__init__.py +0 -0
  531. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_memory_storage_effect/test_memory_storage_effect.py +0 -0
  532. {omninode_memory-0.18.3/tests/scripts → omninode_memory-0.18.5/tests/nodes/node_navigation_history_reducer}/__init__.py +0 -0
  533. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_navigation_history_reducer/test_navigation_history_reducer_unit.py +0 -0
  534. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_similarity_compute/__init__.py +0 -0
  535. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/nodes/node_similarity_compute/test_similarity_compute.py +0 -0
  536. {omninode_memory-0.18.3/tests/unit/adapters → omninode_memory-0.18.5/tests/scripts}/__init__.py +0 -0
  537. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/scripts/test_check_dep_provenance.py +0 -0
  538. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/scripts/test_pin_resolvability_conflict_report.py +0 -0
  539. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/scripts/test_pin_resolvability_gate_workflow.py +0 -0
  540. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_bootstrap.py +0 -0
  541. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_concurrency.py +0 -0
  542. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_config_models.py +0 -0
  543. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_contract_version.py +0 -0
  544. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_db_url.py +0 -0
  545. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_foundation.py +0 -0
  546. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_health_manager.py +0 -0
  547. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_migration_progress.py +0 -0
  548. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_node_enforcement.py +0 -0
  549. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_node_imports.py +0 -0
  550. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_observability_manager.py +0 -0
  551. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_observability_metrics.py +0 -0
  552. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_performance.py +0 -0
  553. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_precommit_additional_dependencies_omn19666.sh +0 -0
  554. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_precommit_staged_scope_omn19612.py +0 -0
  555. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_resource_manager.py +0 -0
  556. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_secrets_provider.py +0 -0
  557. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_semantic_compute_policy_config.py +0 -0
  558. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_settings.py +0 -0
  559. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/test_validation_scripts.py +0 -0
  560. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/__init__.py +0 -0
  561. {omninode_memory-0.18.3/tests/unit/handlers → omninode_memory-0.18.5/tests/unit/adapters}/__init__.py +0 -0
  562. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/adapters/test_adapter_pii_detector.py +0 -0
  563. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/adapters/test_pii_live_call_paths.py +0 -0
  564. {omninode_memory-0.18.3/tests/unit/handlers/adapters → omninode_memory-0.18.5/tests/unit/handlers}/__init__.py +0 -0
  565. {omninode_memory-0.18.3/tests/unit/nodes → omninode_memory-0.18.5/tests/unit/handlers/adapters}/__init__.py +0 -0
  566. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/handlers/adapters/test_graph_adapter_typing.py +0 -0
  567. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/handlers/test_subscription_typing.py +0 -0
  568. {omninode_memory-0.18.3/tests/unit/runtime → omninode_memory-0.18.5/tests/unit/nodes}/__init__.py +0 -0
  569. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/fixtures/omn16765/hybrid_retrieval_corpus.json +0 -0
  570. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_activation_decay.py +0 -0
  571. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_decay_ranking.py +0 -0
  572. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_handler_agent_learning_retrieval.py +0 -0
  573. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_handler_qdrant.py +0 -0
  574. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_hybrid_retrieval_fusion.py +0 -0
  575. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_kreuzberg_parse_effect/__init__.py +0 -0
  576. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_kreuzberg_parse_effect/test_handler_kreuzberg_parse.py +0 -0
  577. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_memory_lifecycle_orchestrator/__init__.py +0 -0
  578. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_adapter_postgres_deactivate_memory.py +0 -0
  579. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_adapter_runtime_tick_memory.py +0 -0
  580. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_handler_memory_archive.py +0 -0
  581. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_handler_memory_expire.py +0 -0
  582. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_handler_memory_tick.py +0 -0
  583. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_memory_lifecycle_orchestrator/test_validator_lifecycle_transition.py +0 -0
  584. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_model_handler_qdrant_config.py +0 -0
  585. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_navigation_history_reducer_contract.py +0 -0
  586. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_node_agent_learning_retrieval_models.py +0 -0
  587. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_persona_builder.py +0 -0
  588. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/nodes/test_persona_storage_retrieval.py +0 -0
  589. {omninode_memory-0.18.3/tests/unit/scripts → omninode_memory-0.18.5/tests/unit/runtime}/__init__.py +0 -0
  590. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/conftest.py +0 -0
  591. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_adapters.py +0 -0
  592. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_contract_handler_completeness.py +0 -0
  593. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_contract_topics.py +0 -0
  594. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_introspection.py +0 -0
  595. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_memory_subscription_group_is_authorized.py +0 -0
  596. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_message_type_registration.py +0 -0
  597. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_plugin.py +0 -0
  598. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_plugin_graph_memory_wiring.py +0 -0
  599. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_plugin_memory_validate_handshake.py +0 -0
  600. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/runtime/test_standalone_handler_contracts.py +0 -0
  601. {omninode_memory-0.18.3/tests/workflows → omninode_memory-0.18.5/tests/unit/scripts}/__init__.py +0 -0
  602. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/scripts/test_check_ai_slop.py +0 -0
  603. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/scripts/test_collect_changed_files.py +0 -0
  604. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/scripts/test_occ_manual_replay_precheck.py +0 -0
  605. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_auto_tag_app_token_push_omn18662.py +0 -0
  606. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_ci_workflow_shape.py +0 -0
  607. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_contract_linter.py +0 -0
  608. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_detect_test_paths.py +0 -0
  609. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_dispatch_retrieval_config.py +0 -0
  610. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_entry_points.py +0 -0
  611. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_graphify_to_memgraph.py +0 -0
  612. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_graphify_to_qdrant.py +0 -0
  613. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_handler_subscription_notify_strict.py +0 -0
  614. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_ingestion_models.py +0 -0
  615. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_model_user_persona_v1.py +0 -0
  616. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_no_duplicate_node_uuids.py +0 -0
  617. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_occ_companion_effect_edited_trigger_omn_18334.py +0 -0
  618. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_persona_enums.py +0 -0
  619. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_scope_mapping_config.py +0 -0
  620. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_sql_placeholders.py +0 -0
  621. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/unit/test_validate_kafka_imports.py +0 -0
  622. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/workflows/test_auto_merge_ready_for_review_omn19216.py +0 -0
  623. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/tests/workflows/test_auto_merge_workflow.py +0 -0
  624. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/validate_architecture_improvements.py +0 -0
  625. {omninode_memory-0.18.3 → omninode_memory-0.18.5}/validation/runtime_profiles_allowlist.yaml +0 -0
@@ -14,9 +14,32 @@
14
14
  #
15
15
  # Applied via: gh api repos/OmniNode-ai/omnimemory/branches/main/protection -X PUT
16
16
  # Mode: strict (branch must be up-to-date before merging)
17
- # Total required checks: 12
17
+ # Manifest entries (including CI Summary members): 15
18
18
 
19
19
  required_checks:
20
+ - name: "pr-title / check-title"
21
+ workflow: pr-title-check.yml
22
+ job_id: pr-title
23
+ producer_kind: local
24
+ conditional: false
25
+ rationale: >-
26
+ PR title ticket-reference check: the job runs omnimarket's
27
+ node_pr_title_check_compute from a pinned omnimarket release (OMN-20997).
28
+
29
+ # OMN-18854: this is an umbrella member, not a separate protection context.
30
+ - name: "occ-preflight / eligibility"
31
+ workflow: ci.yml
32
+ job_id: occ-preflight
33
+ conditional: true
34
+ condition: "Required on pull_request and merge_group; not applicable on push or workflow_dispatch"
35
+ rationale: >-
36
+ OMN-18854. The shared eligibility validator feeds the required CI Summary
37
+ through the OCC Eligibility Admission job. On pull_request and
38
+ merge_group, only successful preflight passes admission; CI Summary
39
+ requires a successful admission verdict on every event. Failed,
40
+ cancelled, skipped and absent results block. The caller and validator
41
+ source use the same immutable omnibase_core revision.
42
+
20
43
  # -- Phase 1: Quick Validation (parallel, ~2-5 min) -------------------------
21
44
 
22
45
  - name: "Migration Freeze Check"
@@ -88,6 +111,28 @@ required_checks:
88
111
  tests/unit/test_validate_ci_precommit_alignment.py fails if the pair
89
112
  drifts apart.
90
113
 
114
+ - name: "Shape-Gate Independence (OMN-20298)"
115
+ workflow: ci.yml
116
+ job_id: shape-gate-independence
117
+ conditional: false
118
+ rationale: >-
119
+ OMN-20298. Refuses any shape-gate detector job that depends on the
120
+ change-control preflight. Unconditional (no needs, no if); gates merges
121
+ through the required CI Summary context, which needs: this job and
122
+ accepts only a success result.
123
+
124
+ - name: "Canonical File Shape (OMN-20304)"
125
+ workflow: ci.yml
126
+ job_id: canonical-file-shape
127
+ conditional: false
128
+ rationale: >-
129
+ OMN-20304. Refuses a new code file outside the canonical locations, new
130
+ imperative SKILL.md lines and any new baseline, allowlist or suppression
131
+ entry, against the shrink-only
132
+ .onex_ratchets/canonical_file_shape_baseline.txt. Gates merges through
133
+ the required CI Summary context, which needs: this job and accepts only a
134
+ success result.
135
+
91
136
  # -- Phase 2: Full Test Suite ------------------------------------------------
92
137
 
93
138
  - name: "Tests"
@@ -31,6 +31,7 @@ jobs:
31
31
  # OMN-17993: pinned to an exact SHA, not @main. omniclaude main lags dev by
32
32
  # design (release-synced), so @main still resolves to the pre-widening scanner
33
33
  # body that scans workflow files only and exits 0 on a tests-only diff.
34
- uses: OmniNode-ai/omniclaude/.github/workflows/ban-hardcoded-runner-ip.yml@7fa1298149c7cd32bf76c4dee0290030110667d2
34
+ uses: OmniNode-ai/omniclaude/.github/workflows/ban-hardcoded-runner-ip.yml@3ea5bfc90dec0efd386214247b38c8c2cc46508d
35
35
  permissions:
36
36
  contents: read
37
+ pull-requests: read
@@ -100,15 +100,17 @@ jobs:
100
100
  github.actor != 'renovate[bot]' &&
101
101
  (contains(github.event.pull_request.title, 'OMN-') ||
102
102
  contains(github.event.pull_request.head.ref, 'OMN-'))
103
- # OMN-14941 (F1 repin): pinned `@dev` until the reusable promotes to
104
- # omniclaude main (call-occ-autobind-reusable.yml exists only on
105
- # omniclaude dev today); then re-pin to `@main` or a main SHA (OMN-14812).
106
- # tests/ci/test_workflow_uses_refs_resolve.py fails closed on any
107
- # cross-repo `uses:` pin that does not resolve live.
108
- uses: OmniNode-ai/omniclaude/.github/workflows/call-occ-autobind-reusable.yml@dev
103
+ # OMN-20001: the reusable and the omnimarket publisher it sources are both
104
+ # pinned to immutable revs (omniclaude 2a4123cf, omnimarket v0.4.276), never
105
+ # a sibling's live branch, so a merge there cannot turn this repo red.
106
+ # Bump both together in a consumer PR after an integration test of the new
107
+ # revs; tests/unit/test_workflow_sibling_pins.py fails closed on any
108
+ # sibling `uses:` / checkout without a 40-hex rev.
109
+ uses: OmniNode-ai/omniclaude/.github/workflows/call-occ-autobind-reusable.yml@3ea5bfc90dec0efd386214247b38c8c2cc46508d
109
110
  secrets: inherit
110
111
  with:
111
112
  lane: dev
113
+ omnimarket-ref: e11987165b960cb86cdeab7d0ad3fe1884bb2572 # omnimarket v0.4.276
112
114
 
113
115
  occ-autobind-manual-replay:
114
116
  # OMN-14993: manual re-publish entrypoint, gated to the workflow_dispatch
@@ -160,7 +162,7 @@ jobs:
160
162
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
161
163
  with:
162
164
  repository: OmniNode-ai/omnimarket
163
- ref: dev
165
+ ref: e11987165b960cb86cdeab7d0ad3fe1884bb2572 # omnimarket v0.4.276
164
166
  path: .occ-autobind-src
165
167
  persist-credentials: false
166
168
  sparse-checkout: |
@@ -157,7 +157,7 @@ jobs:
157
157
  github.actor != 'renovate[bot]' &&
158
158
  (contains(github.event.pull_request.title, 'OMN-') ||
159
159
  contains(github.event.pull_request.head.ref, 'OMN-'))
160
- uses: OmniNode-ai/omniclaude/.github/workflows/call-occ-companion-effect-reusable.yml@dev
160
+ uses: OmniNode-ai/omniclaude/.github/workflows/call-occ-companion-effect-reusable.yml@3ea5bfc90dec0efd386214247b38c8c2cc46508d
161
161
  # OMN-18012: the dev lane declares SASL_PLAINTEXT/SCRAM-SHA-256, so the
162
162
  # publisher needs the KAFKA_SASL_* credentials. The broker is still
163
163
  # resolved from omnimarket's committed overlay, never from a secret.
@@ -167,6 +167,7 @@ jobs:
167
167
  secrets: inherit # pragma: allowlist secret
168
168
  with:
169
169
  lane: dev
170
+ omnimarket-ref: e11987165b960cb86cdeab7d0ad3fe1884bb2572 # omnimarket v0.4.276
170
171
 
171
172
  occ-companion-effect-manual-replay:
172
173
  # OMN-14993: manual re-publish entrypoint, gated to the workflow_dispatch
@@ -226,7 +227,7 @@ jobs:
226
227
  uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
227
228
  with:
228
229
  repository: OmniNode-ai/omnimarket
229
- ref: dev
230
+ ref: e11987165b960cb86cdeab7d0ad3fe1884bb2572 # omnimarket v0.4.276
230
231
  path: .occ-companion-effect-src
231
232
  persist-credentials: false
232
233
  sparse-checkout: |
@@ -28,5 +28,5 @@ permissions:
28
28
 
29
29
  jobs:
30
30
  call-reject-skip-token:
31
- uses: OmniNode-ai/omniclaude/.github/workflows/reject-deploy-gate-skip.yml@main
31
+ uses: OmniNode-ai/omniclaude/.github/workflows/reject-deploy-gate-skip.yml@3ea5bfc90dec0efd386214247b38c8c2cc46508d
32
32
  secrets: inherit
@@ -0,0 +1,70 @@
1
+ # SPDX-FileCopyrightText: 2025 OmniNode.ai Inc.
2
+ # SPDX-License-Identifier: MIT
3
+ #
4
+ # Repo Evidence Gate caller (OMN-20074, OCC retirement OR.6) verifies
5
+ # omnimemory's own contracts/<OMN-N>.yaml at the PR head through
6
+ # omnibase_core's receipt-gate reusable with evidence-source: caller.
7
+ # This is the path omnimarket proved as the canary (OMN-20070, OMN-20072).
8
+ #
9
+ # Why pull_request_target: GitHub reads the workflow definition from the BASE
10
+ # branch, so a pull request that edits this file or the reusable's pin does not
11
+ # change which definition runs on it. The pull request's own code is only ever
12
+ # checked out as data by the reusable, which refuses fork heads.
13
+ #
14
+ # dev and main are the integration branches. The activity types cover new heads,
15
+ # reopened and ready PRs, and edits to the ticket citation or base branch.
16
+ # Per-PR concurrency cancels superseded runs so the latest event gets a verdict.
17
+ # Read-only contents and pull-requests permissions are all this caller needs;
18
+ # checkout and verification belong to the reusable, with no caller secrets.
19
+ # The full-SHA pin makes the reusable immutable; verifier-version pins the
20
+ # released verifier used to read the caller's contracts.
21
+ #
22
+ # The job id is the context prefix: repo-evidence / dod-verify carries the
23
+ # verdict, so do not add a job name. The reusable also reports a
24
+ # repo-evidence / verify job in this mode as a success no-op (the OCC path,
25
+ # switched off by the input); only repo-evidence / dod-verify carries a verdict.
26
+ #
27
+ # S5 shadow count (OMN-20074): shadow and compare-with-occ are both "true", so
28
+ # every run records this head's new-path verdict beside OCC's occ-preflight /
29
+ # eligibility verdict on the same head, and no repo-evidence job concludes
30
+ # anything but success. The verdict is one `Shadow verdict:` line in the job
31
+ # summary and in a notice annotation, the data the S5 count reads.
32
+ # repo-evidence / dod-verify is NOT a required context here yet. Every OCC
33
+ # context stays required and no OCC caller is removed. Making it required, and
34
+ # then removing the OCC contexts (S6), are separate rulings that wait for this
35
+ # repository's own S5 bar. The S6 change sets shadow and compare-with-occ back
36
+ # to "false".
37
+ #
38
+ # The reusable is pinned by full SHA to the squash commit of omnibase_core#1932
39
+ # on dev, a descendant of #1914; it carries the `shadow` input. omnimemory does
40
+ # not host receipt-gate.yml.
41
+ #
42
+ # The pinned reusable refuses a verifier-version below 0.4.303 before installing
43
+ # it (VERIFIER_FLOOR, omnibase_core#1932; OMN-20032), the first release that
44
+ # refuses a contract leaving a criterion unbound. While shadow is "true" that
45
+ # install step is continue-on-error, so a refusal is recorded and blocks nothing;
46
+ # the S6 change that sets shadow to "false" makes it block.
47
+
48
+ name: Repo Evidence Gate
49
+
50
+ on:
51
+ pull_request_target:
52
+ types: [opened, synchronize, reopened, edited, ready_for_review]
53
+ branches: [dev, main]
54
+
55
+ concurrency:
56
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
57
+ cancel-in-progress: true
58
+
59
+ permissions:
60
+ contents: read
61
+ pull-requests: read
62
+
63
+ jobs:
64
+ repo-evidence:
65
+ uses: OmniNode-ai/omnibase_core/.github/workflows/receipt-gate.yml@4e4f5e0404d364e296c5d37db6aa3ab9e07f8ffa # OMN-20032: immutable full-SHA pin, the squash commit of omnibase_core#1932 on that repo's dev branch; descends from #1914 (carries the shadow input) and adds the VERIFIER_FLOOR 0.4.303 refusal to the verifier install step
66
+ with:
67
+ evidence-source: caller
68
+ verifier-version: 0.4.305
69
+ compare-with-occ: "true"
70
+ shadow: "true"
@@ -28,9 +28,8 @@ jobs:
28
28
  uses: actions/checkout@v7
29
29
  with:
30
30
  repository: OmniNode-ai/omnibase_core
31
- # Pinned to omnibase_core main as of 2026-03-22.
32
- # Update by running: gh api repos/OmniNode-ai/omnibase_core/commits/main --jq '.sha'
33
- ref: 330a344cdb9c5dedd04a46dfbb0b63dae0baccfb
31
+ # Auto-bumped by omnibase_core publish-downstream-pin-bump.yml to bac865f4f32a.
32
+ ref: bac865f4f32a3f8ca80cabcfac06c8400d8c80d7
34
33
  path: omnibase_core
35
34
 
36
35
  - name: Verify omnibase_core checkout
@@ -8,6 +8,8 @@ on:
8
8
  branches: [main, 'hotfix/**']
9
9
  pull_request:
10
10
  branches: [main, dev]
11
+ # OMN-18854: marking a draft ready must re-evaluate evidence admission.
12
+ types: [opened, synchronize, reopened, ready_for_review]
11
13
  merge_group:
12
14
  workflow_dispatch:
13
15
 
@@ -21,6 +23,37 @@ env:
21
23
  CACHE_VERSION: "0.1.0"
22
24
 
23
25
  jobs:
26
+ # OMN-18854: the existing eligibility validator must feed the required
27
+ # CI Summary. Other validations remain independent of this evidence gate.
28
+ occ-preflight:
29
+ if: github.event_name == 'pull_request' || github.event_name == 'merge_group'
30
+ permissions:
31
+ contents: read
32
+ pull-requests: read
33
+ uses: OmniNode-ai/omnibase_core/.github/workflows/occ-preflight.yml@13ceae69c246a33c9fc8fc4b33f83fb66b89edc6
34
+ with:
35
+ core-ref: 13ceae69c246a33c9fc8fc4b33f83fb66b89edc6
36
+ contracts-dir: contracts
37
+ receipts-dir: drift/dod_receipts
38
+
39
+ # OMN-18854: evidence admission has its own verdict; shape detectors and
40
+ # their result aggregation do not branch directly on the evidence preflight.
41
+ occ-eligibility:
42
+ name: OCC Eligibility Admission
43
+ runs-on: ubuntu-latest
44
+ needs: occ-preflight
45
+ if: always()
46
+ steps:
47
+ - name: Require eligible evidence on admission events
48
+ run: |
49
+ event="${{ github.event_name }}"
50
+ if [[ "$event" == "pull_request" || "$event" == "merge_group" ]]; then
51
+ if [[ "${{ needs.occ-preflight.result }}" != "success" ]]; then
52
+ echo "::error::occ-preflight did not pass (result: ${{ needs.occ-preflight.result }})"
53
+ exit 1
54
+ fi
55
+ fi
56
+
24
57
  # =============================================================================
25
58
  # JOB ORDERING RATIONALE (Fail-Fast Optimization)
26
59
  # =============================================================================
@@ -225,6 +258,10 @@ jobs:
225
258
  - name: Pre-commit dependencies come from package indexes (OMN-19666)
226
259
  run: bash tests/test_precommit_additional_dependencies_omn19666.sh
227
260
 
261
+ # OMN-18854: the same focused regression runs before commit and in CI.
262
+ - name: Verify OCC eligibility enforcement (OMN-18854)
263
+ run: uv run pytest tests/scripts/test_occ_eligibility_enforcement.py -q
264
+
228
265
  # SYNC: Pre-commit hook 'validate-gitignore-baseline' at pre-commit stage (OMN-18033)
229
266
  # This step and the hook both pin released omnibase-core==0.47.23,
230
267
  # matching uv.lock and carrying the packaged baseline spec; move them together.
@@ -342,10 +379,21 @@ jobs:
342
379
  # Uses default GITHUB_TOKEN which has read access to public repos in the org.
343
380
  # Same pattern as omniclaude ci-cd.yml. If omnibase_core becomes private,
344
381
  # add: token: ${{ secrets.OMNIBASE_CORE_ACCESS_TOKEN }}
382
+ # OMN-20001: read the omnibase_core rev this repo has PINNED (the one the
383
+ # omnibase_core downstream pin-bump bot maintains in check-handshake.yml),
384
+ # never core's live default branch.
385
+ - name: Resolve pinned omnibase_core rev
386
+ id: core-pin
387
+ run: |
388
+ rev="$(grep -E '^[[:space:]]+ref: [0-9a-f]{40}$' .github/workflows/check-handshake.yml | awk '{print $2}')"
389
+ [[ "$rev" =~ ^[0-9a-f]{40}$ ]] || { echo "::error::no single pinned omnibase_core rev in check-handshake.yml"; exit 1; }
390
+ echo "rev=$rev" >> "$GITHUB_OUTPUT"
391
+
345
392
  - name: Checkout omnibase_core
346
393
  uses: actions/checkout@v7
347
394
  with:
348
395
  repository: OmniNode-ai/omnibase_core
396
+ ref: ${{ steps.core-pin.outputs.rev }}
349
397
  path: omnibase_core
350
398
 
351
399
  - name: Verify handshake is current
@@ -604,10 +652,20 @@ jobs:
604
652
  if: github.event_name == 'pull_request' || github.event_name == 'merge_group' || github.event_name == 'push'
605
653
  steps:
606
654
  - uses: actions/checkout@v7
655
+ # OMN-20001: read the onex_change_control rev pinned in pyproject.toml,
656
+ # never OCC's live default branch.
657
+ - name: Resolve pinned onex_change_control rev
658
+ id: occ-pin
659
+ run: |
660
+ rev="$(grep -oE 'onex_change_control\.git@[0-9a-f]{40}' pyproject.toml | head -1 | cut -d@ -f2)"
661
+ [[ "$rev" =~ ^[0-9a-f]{40}$ ]] || { echo "::error::no pinned onex_change_control rev in pyproject.toml"; exit 1; }
662
+ echo "rev=$rev" >> "$GITHUB_OUTPUT"
663
+
607
664
  - name: Checkout onex_change_control
608
665
  uses: actions/checkout@v7
609
666
  with:
610
667
  repository: OmniNode-ai/onex_change_control
668
+ ref: ${{ steps.occ-pin.outputs.rev }}
611
669
  path: onex_change_control
612
670
 
613
671
  - uses: astral-sh/setup-uv@v7
@@ -651,12 +709,36 @@ jobs:
651
709
  - name: Ratchet non-canonical lifecycle-word classes against frozen allowlist (OMN-14350)
652
710
  run: |
653
711
  uv run --no-project \
654
- --with 'omnibase-core @ git+https://github.com/OmniNode-ai/omnibase_core@63635097705d832e0ee9c4811093efb31349105c' \
712
+ --with 'omnibase-core @ git+https://github.com/OmniNode-ai/omnibase_core@f50d00fc7918d0b12ccd0d3497160325e32e7ac5' \
655
713
  python -m omnibase_core.validators.no_noncanonical_lifecycle_classes \
656
714
  --check-stale \
657
715
  --allowlist .onex_ratchets/noncanonical_class_allowlist.yaml \
658
716
  src/omnimemory
659
717
 
718
+ shape-gate-independence:
719
+ name: Shape-Gate Independence (OMN-20298)
720
+ # OMN-20298: no shape-gate detector may depend on the change-control preflight.
721
+ # Unconditional (no needs, no if); wired into required CI Summary via needs: +
722
+ # strict success-only verdict check.
723
+ runs-on: ubuntu-latest
724
+ timeout-minutes: 10
725
+ steps:
726
+ - name: Checkout code
727
+ uses: actions/checkout@v7
728
+ - name: Set up Python
729
+ uses: actions/setup-python@v7
730
+ with:
731
+ python-version: "3.12"
732
+ - name: Install uv
733
+ uses: astral-sh/setup-uv@v7
734
+ with:
735
+ version: "0.8.3"
736
+ - name: Refuse shape-gate detectors that depend on the preflight (OMN-20298)
737
+ run: |
738
+ uv run --no-project \
739
+ --with 'omnibase-core @ git+https://github.com/OmniNode-ai/omnibase_core@7f20b97895f01996c5858dde385ba8991c06e708' \
740
+ python -m omnibase_core.handlers.handler_shape_gate_independence
741
+
660
742
  # ============================================================================
661
743
  # Detect Secrets - the CI half of the .secrets.baseline gate (OMN-18669)
662
744
  # ============================================================================
@@ -707,6 +789,7 @@ jobs:
707
789
  --no-verify \
708
790
  --baseline .secrets.baseline \
709
791
  --exclude-files 'uv\.lock' \
792
+ --exclude-files 'hardcoded_model_config_baseline\.yaml' \
710
793
  --exclude-files '\.venv/' \
711
794
  --exclude-files 'tests/fixtures/' \
712
795
  --exclude-files '\.git/' \
@@ -734,15 +817,103 @@ jobs:
734
817
  exit $HOOK_EXIT
735
818
  fi
736
819
 
820
+ # Canonical-file-shape ratchet (OMN-20304). Operator ruling 2026-10-01: no
821
+ # new scripts, plugins or exceptions in any repository. Refuses a new code
822
+ # file outside src/<pkg>/{nodes,handlers,models,protocols,contracts,enums}/,
823
+ # tests/ and docs/, new imperative lines in a SKILL.md, and any new baseline,
824
+ # allowlist, waiver or suppression entry. Existing files sit in the
825
+ # shrink-only .onex_ratchets/canonical_file_shape_baseline.txt. Same module
826
+ # and same omnibase_core commit as the canonical-file-shape pre-commit hook.
827
+ # Unconditional: no `if:`, no `needs:`. The positive-control step plants a
828
+ # bad sample on every run and fails unless the ratchet refuses it.
829
+ canonical-file-shape:
830
+ name: Canonical File Shape (OMN-20304)
831
+ runs-on: ubuntu-latest
832
+ timeout-minutes: 15
833
+ env:
834
+ CANONICAL_FILE_SHAPE_CORE: "omnibase-core @ git+https://github.com/OmniNode-ai/omnibase_core@031148215620031436cba30619bbae67c0bb38ad"
835
+ steps:
836
+ - name: Checkout code
837
+ uses: actions/checkout@v7
838
+ with:
839
+ fetch-depth: 0
840
+ - name: Set up Python
841
+ uses: actions/setup-python@v7
842
+ with:
843
+ python-version: "3.12"
844
+ - name: Install uv
845
+ uses: astral-sh/setup-uv@v7
846
+ with:
847
+ version: "0.8.3"
848
+ - name: Positive control (planted bad sample refused, clean sample accepted)
849
+ run: |
850
+ set -u
851
+ ratchet() {
852
+ uv run --no-project --with "$CANONICAL_FILE_SHAPE_CORE" \
853
+ python -m omnibase_core.validators.canonical_file_shape "$@"
854
+ }
855
+ mkdir -p bin tests
856
+ printf '#!/bin/sh\necho planted\n' > bin/zz_canary_planted
857
+ git add bin/zz_canary_planted
858
+ if ratchet; then
859
+ echo "POSITIVE CONTROL FAILED: planted bin/zz_canary_planted was accepted"
860
+ exit 1
861
+ fi
862
+ echo "positive control: planted bad sample refused"
863
+ git rm -q --cached bin/zz_canary_planted
864
+ rm bin/zz_canary_planted
865
+ printf 'def test_canary() -> None:\n assert True\n' > tests/zz_canary_clean.py
866
+ git add tests/zz_canary_clean.py
867
+ ratchet
868
+ echo "positive control: clean sample accepted"
869
+ git rm -q --cached tests/zz_canary_clean.py
870
+ rm tests/zz_canary_clean.py
871
+ - name: Refuse new non-canonical files and new exceptions
872
+ env:
873
+ PR_BASE: ${{ github.event.pull_request.base.sha }}
874
+ MQ_BASE: ${{ github.event.merge_group.base_sha }}
875
+ PUSH_BEFORE: ${{ github.event.before }}
876
+ run: |
877
+ set -u
878
+ base="${PR_BASE:-${MQ_BASE:-}}"
879
+ # OMN-20868: release.yml fast-forwards main to a dev sha, so a push's
880
+ # `before` is the previous release and the range spans every dev PR
881
+ # since then, each already checked here against dev, including
882
+ # commits that predate this ratchet. A push whose HEAD is on dev is
883
+ # checked against the baseline; any other push diffs its own range.
884
+ if [ -z "$base" ] && [ -n "${PUSH_BEFORE:-}" ]; then
885
+ git fetch -q --no-tags origin +refs/heads/dev:refs/remotes/origin/dev
886
+ if git merge-base --is-ancestor HEAD refs/remotes/origin/dev; then
887
+ echo "push of a commit already on dev (fast-forward of ${PUSH_BEFORE}..HEAD); each commit was checked on its dev PR"
888
+ else
889
+ base="$PUSH_BEFORE"
890
+ fi
891
+ fi
892
+ if [ -n "$base" ] && git cat-file -e "${base}^{commit}" 2>/dev/null; then
893
+ base="$(git merge-base "$base" HEAD)"
894
+ uv run --no-project --with "$CANONICAL_FILE_SHAPE_CORE" \
895
+ python -m omnibase_core.validators.canonical_file_shape --base "$base" --head HEAD
896
+ else
897
+ echo "no diff base for this event; checking the tree against the baseline only"
898
+ uv run --no-project --with "$CANONICAL_FILE_SHAPE_CORE" \
899
+ python -m omnibase_core.validators.canonical_file_shape --head HEAD
900
+ fi
901
+
737
902
  ci-summary:
738
903
  name: CI Summary
739
904
  runs-on: ubuntu-latest
740
- needs: [migration-freeze, lint, pyright, onex-validation, transport-import-guard, contract-validation, io-audit, check-handshake, test-select, tests-gate, compliance, contract-compliance, no-noncanonical-lifecycle-classes, detect-secrets]
905
+ needs: [migration-freeze, lint, pyright, onex-validation, transport-import-guard, contract-validation, io-audit, check-handshake, test-select, tests-gate, compliance, contract-compliance, no-noncanonical-lifecycle-classes, detect-secrets, shape-gate-independence, canonical-file-shape, occ-eligibility]
741
906
  if: always()
742
907
 
743
908
  steps:
744
909
  - name: Check test results
745
910
  run: |
911
+ # OMN-18854: require the admission verdict on every event. That job
912
+ # judges eligibility on PR/queue events and passes non-admission events.
913
+ if [[ "${{ needs.occ-eligibility.result }}" != "success" ]]; then
914
+ echo "::error::occ-eligibility did not pass (result: ${{ needs.occ-eligibility.result }})"
915
+ exit 1
916
+ fi
746
917
  # OMN-14350: strict fail-closed gate on the non-canonical lifecycle-class
747
918
  # ratchet - only 'success' passes; skipped/cancelled/failure ALL block. It is
748
919
  # in needs: so this job WAITS for it (no race).
@@ -750,6 +921,12 @@ jobs:
750
921
  echo "::error::no-noncanonical-lifecycle-classes ratchet did not pass (result: ${{ needs.no-noncanonical-lifecycle-classes.result }}) - fail-closed (OMN-14350)"
751
922
  exit 1
752
923
  fi
924
+ # OMN-20298: strict fail-closed gate on shape-gate independence - only
925
+ # 'success' passes; skipped/cancelled/failure ALL block.
926
+ if [[ "${{ needs.shape-gate-independence.result }}" != "success" ]]; then
927
+ echo "::error::shape-gate-independence did not pass (result: ${{ needs.shape-gate-independence.result }}) - fail-closed (OMN-20298)"
928
+ exit 1
929
+ fi
753
930
  # OMN-18669: strict fail-closed gate on the secrets scan - only 'success'
754
931
  # passes; skipped/cancelled/failure ALL block. A secrets gate that a
755
932
  # skipped job can satisfy is the state this ticket exists to remove.
@@ -757,6 +934,12 @@ jobs:
757
934
  echo "::error::detect-secrets did not pass (result: ${{ needs.detect-secrets.result }}) - fail-closed (OMN-18669)"
758
935
  exit 1
759
936
  fi
937
+ # OMN-20304: strict fail-closed gate on the canonical-file-shape ratchet -
938
+ # only 'success' passes; skipped/cancelled/failure ALL block.
939
+ if [[ "${{ needs.canonical-file-shape.result }}" != "success" ]]; then
940
+ echo "::error::canonical-file-shape ratchet did not pass (result: ${{ needs.canonical-file-shape.result }}) - fail-closed (OMN-20304)"
941
+ exit 1
942
+ fi
760
943
  migration_freeze="${{ needs.migration-freeze.result }}"
761
944
  lint="${{ needs.lint.result }}"
762
945
  pyright="${{ needs.pyright.result }}"
@@ -3,8 +3,10 @@
3
3
 
4
4
  # Contract Validation Gate
5
5
  #
6
- # Validates ONEX ticket contracts for PRs in omnimemory using the
7
- # reusable composite action from onex_change_control.
6
+ # Validates the ONEX ticket contract of a PR's branch ticket with the installed
7
+ # omnibase_core ModelTicketContract, at omnimemory's locked core version
8
+ # (OMN-20074). Core refuses a binds_ac entry that is not a criterion label and a
9
+ # binds_ac item with check_type command_exit_0 (omnibase_core#1935).
8
10
  #
9
11
  # Required status check: "contract-validation"
10
12
  # Must pass (or skip) before merging to main.
@@ -49,19 +51,6 @@ jobs:
49
51
  timeout-minutes: 10
50
52
 
51
53
  steps:
52
- - name: Auth preflight — confirm onex_change_control action is accessible
53
- id: auth-preflight
54
- env:
55
- GH_TOKEN: ${{ github.token }}
56
- run: |
57
- echo "Checking visibility of OmniNode-ai/onex_change_control..."
58
- if gh api repos/OmniNode-ai/onex_change_control --silent; then
59
- echo "::notice::onex_change_control repo is accessible."
60
- else
61
- echo "::error::Cannot reach OmniNode-ai/onex_change_control. Composite action will not resolve."
62
- exit 1
63
- fi
64
-
65
54
  - name: Resolve branch name
66
55
  id: resolve-branch
67
56
  env:
@@ -92,13 +81,88 @@ jobs:
92
81
  echo "resolved_branch=$BRANCH" >> "$GITHUB_OUTPUT"
93
82
  echo "::notice::Resolved branch name: $BRANCH"
94
83
 
84
+ - name: Check out calling repository
85
+ if: steps.resolve-branch.outputs.skip_validation != 'true'
86
+ uses: actions/checkout@v4
87
+ with:
88
+ ref: ${{ github.sha }}
89
+ persist-credentials: false
90
+
91
+ - name: Set up uv
92
+ if: steps.resolve-branch.outputs.skip_validation != 'true'
93
+ uses: astral-sh/setup-uv@v7
94
+ with:
95
+ enable-cache: true
96
+ cache-dependency-glob: uv.lock
97
+
95
98
  - name: Run contract validation
96
99
  id: validate-contract
97
100
  if: steps.resolve-branch.outputs.skip_validation != 'true'
98
- uses: OmniNode-ai/onex_change_control/.github/actions/validate-contract@main
99
- with:
100
- branch-name: ${{ steps.resolve-branch.outputs.resolved_branch }}
101
- contracts-path: contracts
101
+ env:
102
+ BRANCH: ${{ steps.resolve-branch.outputs.resolved_branch }}
103
+ UV_HTTP_TIMEOUT: "600"
104
+ run: |
105
+ set -euo pipefail
106
+
107
+ TICKET_ID=$(printf '%s\n' "$BRANCH" | grep -ioE 'OMN-[0-9]+' | head -n 1 | tr '[:lower:]' '[:upper:]' || true)
108
+ echo "ticket-id=$TICKET_ID" >> "$GITHUB_OUTPUT"
109
+
110
+ if [[ -z "$TICKET_ID" ]]; then
111
+ echo "validation-status=skipped" >> "$GITHUB_OUTPUT"
112
+ echo "::notice::No OMN-XXXX ticket ID found in branch name; contract validation skipped."
113
+ exit 0
114
+ fi
115
+
116
+ CONTRACT_PATH="contracts/$TICKET_ID.yaml"
117
+ if [[ ! -f "$CONTRACT_PATH" ]]; then
118
+ CONTRACT_PATH="contracts/${TICKET_ID,,}.yaml"
119
+ fi
120
+ if [[ ! -f "$CONTRACT_PATH" ]]; then
121
+ echo "validation-status=skipped" >> "$GITHUB_OUTPUT"
122
+ echo "::notice::No contract file found for $TICKET_ID in contracts/; contract validation skipped."
123
+ exit 0
124
+ fi
125
+
126
+ for attempt in 1 2 3; do
127
+ if uv sync --locked --no-dev; then
128
+ break
129
+ fi
130
+ if [[ "$attempt" -eq 3 ]]; then
131
+ echo "validation-status=failed" >> "$GITHUB_OUTPUT"
132
+ echo "::error::Failed to sync omnimemory dependencies after 3 attempts."
133
+ exit 1
134
+ fi
135
+ sleep "$((10 * attempt))"
136
+ done
137
+
138
+ if uv run --no-sync python3 - "$CONTRACT_PATH" <<'PY'
139
+ import sys
140
+ from pathlib import Path
141
+
142
+ from omnibase_core.models.errors.model_onex_error import ModelOnexError
143
+ from omnibase_core.models.ticket.model_ticket_contract import ModelTicketContract
144
+
145
+ paths = [Path(arg) for arg in sys.argv[1:]]
146
+ broken = []
147
+ for path in paths:
148
+ try:
149
+ ModelTicketContract.from_yaml(path.read_text(encoding="utf-8"))
150
+ except (OSError, ModelOnexError) as exc:
151
+ broken.append((path, " ".join(str(exc).split())))
152
+
153
+ for path, reason in broken:
154
+ print(f"::error file={path.as_posix()}::{path.as_posix()}: {reason}")
155
+ if broken:
156
+ print(f"ERROR: {len(broken)} of {len(paths)} ticket contract(s) fail omnibase_core's ModelTicketContract.")
157
+ sys.exit(1)
158
+ print(f"OK: {len(paths)} ticket contract(s) pass omnibase_core's ModelTicketContract.")
159
+ PY
160
+ then
161
+ echo "validation-status=passed" >> "$GITHUB_OUTPUT"
162
+ else
163
+ echo "validation-status=failed" >> "$GITHUB_OUTPUT"
164
+ exit 1
165
+ fi
102
166
 
103
167
  - name: Report validation result
104
168
  if: always()
@@ -127,6 +191,7 @@ jobs:
127
191
  exit 1
128
192
  ;;
129
193
  *)
130
- echo "::warning::Unexpected validation status: '$VALIDATION_STATUS'. Treating as skipped."
194
+ echo "::error::Contract validation did not finish: '$VALIDATION_STATUS'."
195
+ exit 1
131
196
  ;;
132
197
  esac
@@ -15,4 +15,4 @@ concurrency:
15
15
 
16
16
  jobs:
17
17
  call:
18
- uses: OmniNode-ai/omnibase_core/.github/workflows/validate-docs.yml@main
18
+ uses: OmniNode-ai/omnibase_core/.github/workflows/validate-docs.yml@95d9e3e01f8ed82c0b618a8e7d3315e96e560e52
@@ -0,0 +1,24 @@
1
+ # SPDX-FileCopyrightText: 2025 OmniNode.ai Inc.
2
+ # SPDX-License-Identifier: MIT
3
+ #
4
+ # OMN-19183, plan beta/plans/2026-09-23-remove-hardcoded-model-config.md task A3.
5
+ # Guard is blocking; baseline may only shrink.
6
+
7
+ name: Hardcoded Model Config
8
+
9
+ on:
10
+ pull_request:
11
+ branches: [dev]
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ concurrency:
17
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
18
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
19
+
20
+ jobs:
21
+ hardcoded-model-config:
22
+ uses: OmniNode-ai/omniclaude/.github/workflows/hardcoded-model-config-reusable.yml@3ea5bfc90dec0efd386214247b38c8c2cc46508d
23
+ with:
24
+ core_ref: f873d2c30201c05d4be020fa0b281b5edbfb8307