Skip to content

test(cross-repo): verify topic constants match kafka_boundaries manifest [OMN-6284] - #102

Merged
jonahgabriel merged 8 commits into
mainfrom
jonahgabriel/omn-6284-feattests-implement-cross-repo-topic-constant-verification
Mar 24, 2026
Merged

jonahgabriel merged 8 commits into
mainfrom
jonahgabriel/omn-6284-feattests-implement-cross-repo-topic-constant-verification

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Mar 24, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Adds tests/integration/cross_repo/test_topic_constants_match.py — a cross-repo smoke-check harness that scans source repos for topic constant definitions and verifies they match the boundary manifest in kafka_boundaries.yaml
  • Three live test cases: producer files must contain the topic_pattern regex, consumer files must contain the topic_pattern regex, and no orphaned boundaries (both files present)
  • Includes a negative fixture (test_regex_scan_can_match_dead_code) that explicitly documents the scan's smoke-check nature — a pattern hit does not prove live wiring, only a missing hit proves drift
  • Removes 10 stale boundary entries from kafka_boundaries.yaml whose topic strings no longer exist in the referenced source files (discovered when running the new test)

Test plan

  • OMNI_HOME=/Volumes/PRO-G40/Code/omni_home uv run pytest tests/integration/cross_repo/test_topic_constants_match.py -v — all 4 tests pass
  • pre-commit run --all-files — all hooks pass
  • uv run mypy tests/integration/cross_repo/test_topic_constants_match.py --strict — no issues

Summary by CodeRabbit

  • Removals

    • Removed 10 Kafka boundary mappings for omniclaude, omniintelligence, and omnibase-infra integrations (debug triggers, routing decisions, health snapshots, etc.).
  • Tests

    • Added integration tests for Kafka schema round-trip validation and topic-constants consistency.
    • Updated test fixture behavior to skip integration tests gracefully when optional repo dependencies are absent.
  • Chores

    • Added explanatory notes in dev dependency group describing test setup/skip expectations.

…est [OMN-6284]

Adds tests/integration/cross_repo/test_topic_constants_match.py which
scans source repos for topic constant definitions and verifies they match
the boundary manifest in kafka_boundaries.yaml. Three test cases:
  - producer files must contain the topic_pattern regex
  - consumer files must contain the topic_pattern regex
  - no orphaned boundaries (both files present)
Plus a negative fixture documenting that regex hits do not prove live wiring.

Also removes 10 stale boundary entries from kafka_boundaries.yaml whose
topic strings no longer exist in the referenced source files.
…ts_match [OMN-6284]

Pre-push mypy hook caught missing type parameters on list[dict] and
unused type: ignore comments. Fixed all three signatures to use
list[dict[str, str]].
@coderabbitai

coderabbitai Bot commented Mar 24, 2026 •

Copy link
Copy Markdown

Warning

Rate limit exceeded

@jonahgabriel has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 0 minutes and 56 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b79c43f0-6624-4107-996b-8d17db458af9

📥 Commits

Reviewing files that changed from the base of the PR and between 366185d and 6f5017e.

📒 Files selected for processing (1)
  • tests/integration/cross_repo/test_kafka_schema_roundtrip.py
📝 Walkthrough

Walkthrough

Removed several Kafka boundary entries, added two new cross-repo integration test modules for Kafka schema round-trips and topic-constant consistency, and updated the omni_home fixture to skip tests when omniclaude dependencies are unavailable; pyproject.dev received explanatory comments only.

Changes

Cohort / File(s) Summary
Configuration & Manifest
pyproject.toml, src/onex_change_control/boundaries/kafka_boundaries.yaml
Added explanatory comments under dev dependencies in pyproject.toml; removed ~10 Kafka boundary entries from the YAML manifest (deleted specific topic entries and their mappings).
Test Fixtures
tests/integration/cross_repo/conftest.py
Changed omni_home fixture behavior to call pytest.skip() with a diagnostic message when OMNI_HOME is unset or the expected omniclaude directory is missing (tests now skip instead of raising).
Schema Round-Trip Testing
tests/integration/cross_repo/test_kafka_schema_roundtrip.py
New integration test module that attempts sys.path injection to import omniclaude.hooks.schemas, runs round-trip serialize/deserialize checks for a registry SCHEMA_TEST_DATA, includes import-skipping guards, sanity checks on boundary_manifest, and a coverage-gap assertion using KNOWN_COVERAGE_GAP.
Topic Consistency Testing
tests/integration/cross_repo/test_topic_constants_match.py
New integration tests that scan producer/consumer files (via boundary_manifest and omni_home) for topic-pattern regex matches, aggregate missing/mismatched findings, assert no orphaned boundaries, and include a negative test showing regex can match dead/commented code.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰 I hopped through manifests, files, and tests,

Skipped where omniclaude wasn't dressed,
Round-trips checked beneath my paws,
Topics matched by regex laws,
A joyful thump—these changes pass the zest! 🥕

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title clearly describes the main change: adding cross-repo verification tests for topic constants against the kafka_boundaries manifest.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jonahgabriel/omn-6284-feattests-implement-cross-repo-topic-constant-verification

Comment @coderabbitai help to get the list of available commands and usage tips.

…-repo fixture

The omni_home fixture raised RuntimeError when OMNI_HOME was not set and
the repo-relative derivation failed. This caused test ERRORs (exit code 1)
in CI rather than graceful SKIPs. Changed raise RuntimeError to pytest.skip()
so tests that require omni_home are skipped on GitHub Actions runners
where omni_home is not present.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
tests/integration/cross_repo/test_kafka_schema_roundtrip.py (1)

220-245: Track uncovered schema identities, not just the count.

A remove-one/add-one swap leaves missing_count unchanged and this guard passes even though the uncovered set drifted. Comparing against an explicit expected label set would make this check deterministic.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/cross_repo/test_kafka_schema_roundtrip.py` around lines 220
- 245, Replace the current numeric-only check (variables omniclaude_schemas,
missing_count, KNOWN_COVERAGE_GAP) with an explicit set comparison: compute the
set of missing schema labels (e.g., missing_schemas = {s for s in
omniclaude_schemas if s not in SCHEMA_TEST_DATA}), declare or use an expected
set constant (e.g., EXPECTED_MISSING_OMNICLAUDE_SCHEMAS) and assert equality,
and update the pytest.fail messages to include the unexpected/extra/missing
schema names when the sets differ; keep references to omniclaude_schemas,
SCHEMA_TEST_DATA and KNOWN_COVERAGE_GAP so the diff is easy to find.
tests/integration/cross_repo/conftest.py (1)

44-45: Validate OMNI_HOME overrides before treating the environment as resolved.

pytest.skip() here is a good change, but only the derived-path branch gets the repo-layout check. If OMNI_HOME points at the repo instead of the registry parent, tests/integration/cross_repo/test_topic_constants_match.py Lines 43-58 and 73-88 will emit one missing-file failure per boundary instead of a single actionable setup skip.

♻️ Suggested adjustment
     env_path = os.environ.get("OMNI_HOME")
     if env_path:
-        return Path(env_path)
+        candidate = Path(env_path)
+        if (candidate / "omniclaude").is_dir():
+            return candidate
+        pytest.skip(
+            "OMNI_HOME must point to the omni_home registry directory. "
+            f"'{candidate}' does not contain an 'omniclaude' subdirectory."
+        )

Also applies to: 59-59

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/cross_repo/conftest.py` around lines 44 - 45, When
resolving environment overrides, ensure any OMNI_HOME override is validated for
the expected repo layout before accepting it; add the same repo-layout check and
a pytest.skip(...) with a clear message to the non-derived-path branch so that
if OMNI_HOME points at the repo (or otherwise lacks the expected files) tests
are skipped instead of producing per-boundary file-missing errors; specifically
update the code that handles OMNI_HOME resolution to run the existing
repo-layout validation (the same check used in the derived-path branch) and call
pytest.skip when validation fails (also apply this same change to the other
branch referenced at the second occurrence).
tests/integration/cross_repo/test_topic_constants_match.py (1)

35-114: Centralize manifest path resolution and scan logic.

The producer, consumer, and orphan tests all rebuild the same repo paths, and the first two also duplicate the regex-scan loop. A couple of small helpers would keep future changes to file checks or pattern handling consistent.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/cross_repo/test_topic_constants_match.py` around lines 35 -
114, The three tests duplicate repo-path construction and regex scanning;
refactor by adding small helpers (e.g., a function like resolve_repo_file(entry,
role) to return the Path for producer/consumer using the entry keys, and a
check_file_contains_pattern(path, pattern, entry, role) that reads text and
performs re.search and appends formatted errors). Replace the body of
test_producer_files_contain_topic and test_consumer_files_contain_topic to call
these helpers (use role="producer" / "consumer" and
entry["producer_file"/"consumer_file"] as appropriate), and have
test_no_orphaned_boundaries use resolve_repo_file to check existence for both
sides; keep existing failure message formats and final assertions unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@tests/integration/cross_repo/test_kafka_schema_roundtrip.py`:
- Around line 124-129: Update the KNOWN_COVERAGE_GAP constant to reflect the
current manifest state: replace the value 24 with 23 so the
test_omniclaude_schemas_coverage_gap guard matches the observed missing_count
(23). Locate the KNOWN_COVERAGE_GAP symbol in the test_kafka_schema_roundtrip
module and change its numeric value accordingly.

---

Nitpick comments:
In `@tests/integration/cross_repo/conftest.py`:
- Around line 44-45: When resolving environment overrides, ensure any OMNI_HOME
override is validated for the expected repo layout before accepting it; add the
same repo-layout check and a pytest.skip(...) with a clear message to the
non-derived-path branch so that if OMNI_HOME points at the repo (or otherwise
lacks the expected files) tests are skipped instead of producing per-boundary
file-missing errors; specifically update the code that handles OMNI_HOME
resolution to run the existing repo-layout validation (the same check used in
the derived-path branch) and call pytest.skip when validation fails (also apply
this same change to the other branch referenced at the second occurrence).

In `@tests/integration/cross_repo/test_kafka_schema_roundtrip.py`:
- Around line 220-245: Replace the current numeric-only check (variables
omniclaude_schemas, missing_count, KNOWN_COVERAGE_GAP) with an explicit set
comparison: compute the set of missing schema labels (e.g., missing_schemas = {s
for s in omniclaude_schemas if s not in SCHEMA_TEST_DATA}), declare or use an
expected set constant (e.g., EXPECTED_MISSING_OMNICLAUDE_SCHEMAS) and assert
equality, and update the pytest.fail messages to include the
unexpected/extra/missing schema names when the sets differ; keep references to
omniclaude_schemas, SCHEMA_TEST_DATA and KNOWN_COVERAGE_GAP so the diff is easy
to find.

In `@tests/integration/cross_repo/test_topic_constants_match.py`:
- Around line 35-114: The three tests duplicate repo-path construction and regex
scanning; refactor by adding small helpers (e.g., a function like
resolve_repo_file(entry, role) to return the Path for producer/consumer using
the entry keys, and a check_file_contains_pattern(path, pattern, entry, role)
that reads text and performs re.search and appends formatted errors). Replace
the body of test_producer_files_contain_topic and
test_consumer_files_contain_topic to call these helpers (use role="producer" /
"consumer" and entry["producer_file"/"consumer_file"] as appropriate), and have
test_no_orphaned_boundaries use resolve_repo_file to check existence for both
sides; keep existing failure message formats and final assertions unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: daf6829e-8331-4b1f-a451-acf892d9737a

📥 Commits

Reviewing files that changed from the base of the PR and between 810c283 and 7255319.

📒 Files selected for processing (5)
  • pyproject.toml
  • src/onex_change_control/boundaries/kafka_boundaries.yaml
  • tests/integration/cross_repo/conftest.py
  • tests/integration/cross_repo/test_kafka_schema_roundtrip.py
  • tests/integration/cross_repo/test_topic_constants_match.py
💤 Files with no reviewable changes (1)
  • src/onex_change_control/boundaries/kafka_boundaries.yaml

Comment thread tests/integration/cross_repo/test_kafka_schema_roundtrip.py Outdated
@jonahgabriel
jonahgabriel enabled auto-merge March 24, 2026 19:51

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@tests/integration/cross_repo/test_kafka_schema_roundtrip.py`:
- Around line 94-130: The current coverage guard compares dict keys rather than
the manifest's event_schema labels, causing false negatives; update
SCHEMA_TEST_DATA entries (e.g., the "ModelHookPromptSubmittedPayload" and
"ModelHookToolExecutedPayload" entries) to include the manifest label(s) used in
the kafka manifest (e.g., "event_schema_label" or "manifest_labels"), then
change the coverage computation (the logic that builds missing_count around
KNOWN_COVERAGE_GAP) to collect and compare manifest labels from SCHEMA_TEST_DATA
instead of using the dictionary keys; also update the parallel check around
lines referenced (the other missing_count usage) to use those manifest label
values so the guard measures actual manifest coverage rather than Python
class-name alignment.
- Around line 54-58: The helper _add_repo_to_path currently only inserts the
repo src path when absent, so preinstalled packages can shadow the local
checkout; change _add_repo_to_path to always ensure the repo's src (computed as
omni_home / repo / "src") is at sys.path index 0 by: if src.exists() remove any
existing occurrences of str(src) from sys.path (or any matching entries) and
then insert str(src) at position 0 — update the function body for
_add_repo_to_path to perform this move-to-front logic so the local checkout wins
import resolution.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 33d15c7c-13ba-437f-8466-a2ae62bd10db

📥 Commits

Reviewing files that changed from the base of the PR and between 7255319 and 366185d.

📒 Files selected for processing (1)
  • tests/integration/cross_repo/test_kafka_schema_roundtrip.py

Comment on lines +54 to +58
def _add_repo_to_path(omni_home: Path, repo: str) -> None:
"""Add a sibling repo's src/ to sys.path for import."""
src = omni_home / repo / "src"
if src.exists() and str(src) not in sys.path:
sys.path.insert(0, str(src))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Inspect the helper and demonstrate why "insert only when absent" does not
# guarantee precedence for the OMNI_HOME checkout.
sed -n '54,58p' tests/integration/cross_repo/test_kafka_schema_roundtrip.py
python - <<'PY'
sys_path = ["/venv/site-packages", "/tmp/omni_home/omniclaude/src", "/other"]
src = "/tmp/omni_home/omniclaude/src"
if src not in sys_path:
    sys_path.insert(0, src)
print(sys_path)
PY

Repository: OmniNode-ai/onex_change_control

Length of output: 382


🏁 Script executed:

#!/bin/bash
# Verify file existence and check SPDX header
if [ -f tests/integration/cross_repo/test_kafka_schema_roundtrip.py ]; then
  echo "=== File exists ==="
  head -5 tests/integration/cross_repo/test_kafka_schema_roundtrip.py
  echo ""
  echo "=== Full lines 54-58 ==="
  sed -n '54,58p' tests/integration/cross_repo/test_kafka_schema_roundtrip.py
  echo ""
  echo "=== Usage of _add_repo_to_path (first 10 matches) ==="
  rg '_add_repo_to_path' tests/integration/cross_repo/test_kafka_schema_roundtrip.py -n -A 2 -B 1
else
  echo "File not found"
fi

Repository: OmniNode-ai/onex_change_control

Length of output: 834


🏁 Script executed:

#!/bin/bash
# Check if ruff is available and verify formatting compliance
if command -v ruff &> /dev/null; then
  echo "=== Running ruff check ==="
  ruff check tests/integration/cross_repo/test_kafka_schema_roundtrip.py --select=ALL 2>&1 | head -30
else
  echo "=== ruff not in PATH, checking for uv ==="
  which uv
fi

Repository: OmniNode-ai/onex_change_control

Length of output: 2641


🏁 Script executed:

#!/bin/bash
# Get full context around the helper function (lines 50-70)
echo "=== Helper function context (lines 50-70) ==="
sed -n '50,70p' tests/integration/cross_repo/test_kafka_schema_roundtrip.py

Repository: OmniNode-ai/onex_change_control

Length of output: 916


Guarantee the OMNI_HOME checkout wins import resolution.

The current logic only inserts the path if absent. If omniclaude, omnibase_core, or omnibase_spi is already in sys.path (from site-packages or another checkout), this becomes a no-op and importlib.import_module() can load the wrong version. Always move the path to index 0 to ensure the local checkout takes precedence.

🩹 Minimal fix
 def _add_repo_to_path(omni_home: Path, repo: str) -> None:
     """Add a sibling repo's src/ to sys.path for import."""
     src = omni_home / repo / "src"
-    if src.exists() and str(src) not in sys.path:
-        sys.path.insert(0, str(src))
+    if not src.exists():
+        return
+    src_str = str(src)
+    if src_str in sys.path:
+        sys.path.remove(src_str)
+    sys.path.insert(0, src_str)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/cross_repo/test_kafka_schema_roundtrip.py` around lines 54
- 58, The helper _add_repo_to_path currently only inserts the repo src path when
absent, so preinstalled packages can shadow the local checkout; change
_add_repo_to_path to always ensure the repo's src (computed as omni_home / repo
/ "src") is at sys.path index 0 by: if src.exists() remove any existing
occurrences of str(src) from sys.path (or any matching entries) and then insert
str(src) at position 0 — update the function body for _add_repo_to_path to
perform this move-to-front logic so the local checkout wins import resolution.

Comment on lines +94 to +130
SCHEMA_TEST_DATA: dict[str, dict] = { # type: ignore[type-arg]
"ModelHookPromptSubmittedPayload": {
"import_path": "omniclaude.hooks.schemas",
"repo": "omniclaude",
"test_data": {
"entity_id": _SESSION_ID,
"session_id": str(_SESSION_ID),
"correlation_id": _CORRELATION_ID,
"causation_id": _CAUSATION_ID,
"emitted_at": _EMITTED_AT,
"prompt_id": uuid4(),
"prompt_preview": "test prompt preview",
"prompt_length": 42,
},
},
"ModelHookToolExecutedPayload": {
"import_path": "omniclaude.hooks.schemas",
"repo": "omniclaude",
"test_data": {
"entity_id": _SESSION_ID,
"session_id": str(_SESSION_ID),
"correlation_id": _CORRELATION_ID,
"causation_id": _CAUSATION_ID,
"emitted_at": _EMITTED_AT,
"tool_execution_id": uuid4(),
"tool_name": "Read",
},
},
}

# Number of omniclaude boundary event_schema labels not yet registered in
# SCHEMA_TEST_DATA. Decrement as schemas are added. The guard fails if this
# grows (regression) or shrinks without update (coverage improved, update needed).
# NOTE: event_schema labels in kafka_boundaries.yaml are informational and may
# not match importable Python class names 1:1 — some labels are placeholders.
KNOWN_COVERAGE_GAP = (
23 # 23 unique omniclaude boundary schemas pending coverage (1 covered by OMN-6284)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Track coverage against manifest labels, not class-name keys.

This file explicitly says event_schema labels and Python class names are not 1:1, but missing_count compares them directly anyway. The KNOWN_COVERAGE_GAP comment already suggests only one of the two registry entries is counted as covered, so this guard is measuring naming alignment rather than actual coverage. Please store the manifest label(s) in each SCHEMA_TEST_DATA entry and compute coverage from those values instead of the dict keys.

Also applies to: 222-235

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/integration/cross_repo/test_kafka_schema_roundtrip.py` around lines 94
- 130, The current coverage guard compares dict keys rather than the manifest's
event_schema labels, causing false negatives; update SCHEMA_TEST_DATA entries
(e.g., the "ModelHookPromptSubmittedPayload" and "ModelHookToolExecutedPayload"
entries) to include the manifest label(s) used in the kafka manifest (e.g.,
"event_schema_label" or "manifest_labels"), then change the coverage computation
(the logic that builds missing_count around KNOWN_COVERAGE_GAP) to collect and
compare manifest labels from SCHEMA_TEST_DATA instead of using the dictionary
keys; also update the parallel check around lines referenced (the other
missing_count usage) to use those manifest label values so the guard measures
actual manifest coverage rather than Python class-name alignment.

Accept main's kafka_boundaries.yaml which includes OMN-6289 audit
removals and additions (hostile-reviewer, llm-call-completed,
routing-feedback-processed, pattern-learning topics). Resolve
KNOWN_COVERAGE_GAP to 24 matching the actual unique omniclaude
boundary event_schema count.
@jonahgabriel
jonahgabriel merged commit 3174267 into main Mar 24, 2026
18 checks passed
@jonahgabriel
jonahgabriel deleted the jonahgabriel/omn-6284-feattests-implement-cross-repo-topic-constant-verification branch March 24, 2026 23:16
jonahgabriel added a commit that referenced this pull request May 21, 2026
Extends OCC bundle to cover all 7 wave 2 release PRs. Adds 4 new
dod_evidence items:
- dod-release-oii-v0.24.0 (omniintelligence PR #657 @ 63ca7019)
- dod-release-omem-v0.16.0 (omnimemory PR #324 @ 5da2e419)
- dod-release-omninode-infra-v0.2.0 (omninode_infra PR #442 @ 25609ed0)
- dod-release-omnidash-v1.0.0 (omnidash PR #102 @ 8508bd80)

Updates self-receipt probe_command to verify all 7 release receipts
exist. Updates contract title + summary to reflect full coverage.

Evidence-Ticket: OMN-11348
jonahgabriel added a commit that referenced this pull request May 21, 2026
* chore(OMN-11348): bind 2026-05-21 wave 2 batch release evidence

Wave 2 OCC contract + receipts for the 2026-05-21 full org-wide
release pipeline. Builds on OMN-11346 (wave 1 covered omnibase_infra
v0.36.1, omnimarket v0.3.1, omniclaude v0.24.0).

Tier 1 / Tier 2 receipts bundled in this PR:
- dod-release-spi-v0.21.1 (omnibase_spi PR #211 @ e29bf28)
- dod-release-compat-v0.4.1 (omnibase_compat PR #95 @ 9554d99)
- dod-release-core-v0.42.0 (omnibase_core PR #1120 @ 1834272)
- dod-occ-pr-self (self-binding)

Tier 3 / Tier 4 dod_evidence items (oii, omem, infra, dash) will be
appended in follow-up commits as those release PRs reach observable
head SHAs, mirroring the OMN-11346 incremental pattern.

Evidence-Ticket: OMN-11348

* fix(OMN-11348): set self-binding receipt pr_number to actual OCC PR

dod-occ-pr-self had pr_number: 0 which fails ModelDodReceipt validation
(>=1). Use real OCC PR number 1250 so receipt-gate accepts the receipt.

Evidence-Ticket: OMN-11348

* fix(OMN-11348): rebind spi receipt to v0.21.0 PR #212

Team-lead switched from Option 2 (skip v0.21.0 → release v0.21.1) to
Option 1 (delete orphan v0.21.0 tag → release fresh v0.21.0).

Changes:
- Renamed receipt dir dod-release-spi-v0.21.1 → dod-release-spi-v0.21.0
- Receipt YAML rebound to PR #212 @ 11a5721 (was PR #211 @ e29bf28)
- Contract YAML evidence_item id + check_value updated
- Self-receipt probe_command updated to reference new path
- Title + summary updated

Orphan remote v0.21.0 tag was deleted via:
  git push origin :refs/tags/v0.21.0
  git tag -d v0.21.0
No GH Release existed for the orphan tag; PyPI omnibase-spi stops at
0.20.6, so no consumer was depending on it.

Old PR #211 closed; new PR #212 cuts fresh v0.21.0 from current main.

Evidence-Ticket: OMN-11348

* chore(OMN-11348): append Tier 3/4 release evidence to wave 2 bundle

Extends OCC bundle to cover all 7 wave 2 release PRs. Adds 4 new
dod_evidence items:
- dod-release-oii-v0.24.0 (omniintelligence PR #657 @ 63ca7019)
- dod-release-omem-v0.16.0 (omnimemory PR #324 @ 5da2e419)
- dod-release-omninode-infra-v0.2.0 (omninode_infra PR #442 @ 25609ed0)
- dod-release-omnidash-v1.0.0 (omnidash PR #102 @ 8508bd80)

Updates self-receipt probe_command to verify all 7 release receipts
exist. Updates contract title + summary to reflect full coverage.

Evidence-Ticket: OMN-11348
jonahgabriel added a commit that referenced this pull request May 21, 2026
…#1251)

* fix(OMN-11348): refresh SHA pins for compat/core/oii/omem release PRs

After OCC #1250 merged, the original release PR head SHAs needed
PR_EVENT_BODY refresh (empty commit push) to clear stale webhook
payload cache that caused "PR title/body does not cite an OMN ticket"
failures even though the body contained OMN-11348.

Refreshed SHAs in contract + receipts:
- compat PR #95: 9554d993 -> c8c41c8c
- core PR #1120: 1834272d -> 3159cb9d
- oii PR #657: 63ca7019 -> dffac2f3
- omem PR #324: 5da2e419 -> cbcdd75d

Tier 1 (spi #212) and Tier 4 (omninode_infra #442, omnidash #102) PRs
already merged before OCC #1250 landed; their SHAs were correct in the
merged OCC contract.

Evidence-Ticket: OMN-11348

* fix(OMN-11348): rebind self-receipt to OCC PR #1251 for SHA refresh

receipt-gate failed on PR #1251 with reason: pr_ticket_mismatch
because the merged dod-occ-pr-self receipt has pr_number: 1250 (the
original OCC PR). Since #1251 is a follow-up that updates the same
contract for the same ticket, rebind the self-receipt to #1251 so
receipt-gate finds the binding PR_NUMBER.

Evidence-Ticket: OMN-11348
jonahgabriel added a commit that referenced this pull request May 23, 2026
* evidence(OMN-6678): bind OCC receipts for May 22 merge sweep

Consolidated central OCC contracts + PR-bound DoD receipts unblocking the
verify/verify receipt-gate for 11 in-flight PRs across three repos.

omniintelligence: OMN-6678/#667, OMN-6660/#666, OMN-11621/#665,
OMN-11551/#664, OMN-11554/#663, OMN-11561/#662, OMN-11565/#661,
OMN-11568/#660.
omnibase_compat: OMN-11618/#103, OMN-11579/#102.
onex_change_control: OMN-11616/#1380.

Each ticket carries a PR-bound PASS receipt plus an OCC self-binding receipt;
contract_sha256 computed post-yamlfmt so hash binding holds in CI.

Evidence-Source: OCC#9999
Evidence-Ticket: OMN-6678
Evidence-Ticket: OMN-6660
Evidence-Ticket: OMN-11621
Evidence-Ticket: OMN-11551
Evidence-Ticket: OMN-11554
Evidence-Ticket: OMN-11561
Evidence-Ticket: OMN-11565
Evidence-Ticket: OMN-11568
Evidence-Ticket: OMN-11618
Evidence-Ticket: OMN-11579
Evidence-Ticket: OMN-11616

* evidence(OMN-6678): pin OCC self-binding receipts to PR #1384

Two-pass finalization: replace placeholder OCC PR number 9999 with the real
consolidated PR #1384 across all self-binding receipts and contract
dod_evidence entries. Removes the stale dod-occ-pr-9999 entry left in the
OMN-11621 contract and restamps every OMN-11621 receipt contract_sha256 to the
post-edit, post-yamlfmt contract hash. Compat self-binding receipts updated to
pr_number 1384.

Evidence-Source: OCC#1384
Evidence-Ticket: OMN-6678
Evidence-Ticket: OMN-6660
Evidence-Ticket: OMN-11621
Evidence-Ticket: OMN-11551
Evidence-Ticket: OMN-11554
Evidence-Ticket: OMN-11561
Evidence-Ticket: OMN-11565
Evidence-Ticket: OMN-11568
Evidence-Ticket: OMN-11618
Evidence-Ticket: OMN-11579
Evidence-Ticket: OMN-11616

* chore(OMN-6678): re-trigger CI with OCC#1384 body
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant