Repository navigation
feat(OMN-2084): Add CI handshake enforcement workflow #293
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
jonahgabriel
merged 3 commits into
main
from
jonah/omn-2084-omnibase_infra-add-ci-handshake-enforcement
Feb 10, 2026
Merged
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| name: Check Architecture Handshake | ||
|
|
||
| on: | ||
| push: | ||
| branches: [main, develop] | ||
| paths: | ||
| - '.claude/architecture-handshake.md' | ||
| - '.github/workflows/check-handshake.yml' | ||
| pull_request: | ||
| branches: [main, develop] | ||
| paths: | ||
| - '.claude/architecture-handshake.md' | ||
| - '.github/workflows/check-handshake.yml' | ||
| workflow_dispatch: | ||
|
|
||
| jobs: | ||
| check-handshake: | ||
| name: Check architecture handshake | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 5 | ||
|
|
||
| steps: | ||
| - name: Checkout repo | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: Checkout omnibase_core | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| repository: OmniNode-ai/omnibase_core | ||
| # Pinned to omnibase_core main as of 2026-02-10. | ||
| # Update by running: gh api repos/OmniNode-ai/omnibase_core/commits/main --jq '.sha' | ||
| ref: 4dc7a0adf299e47eef57ab9950b0f0a587638a3e | ||
| path: omnibase_core | ||
| # OMNIBASE_CORE_TOKEN is required when omnibase_core is private. | ||
| # GITHUB_TOKEN only has read access to the current repo by default. | ||
| token: ${{ secrets.OMNIBASE_CORE_TOKEN || secrets.GITHUB_TOKEN }} | ||
|
|
||
| - name: Verify omnibase_core checkout | ||
| run: | | ||
| if [ ! -f omnibase_core/architecture-handshakes/check-handshake.sh ]; then | ||
| echo "::error::Failed to checkout omnibase_core or check-handshake.sh not found." | ||
| echo "" | ||
| echo "Diagnostic information:" | ||
| echo " omnibase_core directory exists: $([ -d omnibase_core ] && echo 'yes' || echo 'no')" | ||
| echo " omnibase_core is empty: $([ -z "$(ls -A omnibase_core 2>/dev/null)" ] && echo 'yes' || echo 'no')" | ||
| echo "" | ||
| echo "If omnibase_core is private, GITHUB_TOKEN does not have cross-repo access." | ||
| echo "Set the OMNIBASE_CORE_TOKEN repository secret with a PAT that has repo scope." | ||
| exit 1 | ||
| fi | ||
|
|
||
| - name: Check architecture handshake | ||
| run: bash omnibase_core/architecture-handshakes/check-handshake.sh |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| # ADR: Kafka is Required Infrastructure (Rule #8) | ||
|
|
||
| **Status**: Accepted | ||
| **Date**: 2026-02-10 | ||
| **Ticket**: OMN-2084 | ||
|
|
||
| ## Context | ||
|
|
||
| The platform originally operated under the rule "Never block on Kafka — Kafka is optional; | ||
| operations must succeed without it." This was encoded in the architecture handshake as a | ||
| constraint that all repos observed. | ||
|
|
||
| As the platform matured, Kafka became the sole event transport for inter-node communication, | ||
| projection publishing, DLQ routing, and wiring health monitoring. The "optional Kafka" | ||
| invariant was no longer accurate — every production deployment requires a running Kafka | ||
| cluster, and "graceful degradation" without Kafka meant silently dropping events. | ||
|
|
||
| ## Decision | ||
|
|
||
| **Kafka is required infrastructure** (platform-wide rule #8). Specifically: | ||
|
|
||
| - Connection failures during `start()` raise and must be treated as fatal by callers. | ||
| - There is no "degraded mode" — if Kafka is unreachable, the node cannot operate. | ||
| - Async/non-blocking patterns are still required to avoid blocking the calling thread | ||
| while waiting for Kafka acks. | ||
| - Resilience patterns (circuit breaker, retry with backoff) protect against *transient* | ||
| broker failures, not permanent unavailability. | ||
|
|
||
| This replaces the previous rule "Never block on Kafka." | ||
|
|
||
| ## Consequences | ||
|
|
||
| - Callers of `EventBusKafka.start()` and `ProviderKafkaProducer.create()` must not | ||
| swallow connection errors. | ||
| - Integration tests that previously mocked Kafka away need explicit opt-in for | ||
| Kafka-less testing via markers (`@pytest.mark.no_kafka`). | ||
| - The `localhost:9092` defaults in config models remain as development conveniences but | ||
| must be overridden in deployed environments (per rule #7: no hardcoded configuration). | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reconcile localhost-default guidance with rule
#7.This says localhost defaults remain for development, but the architecture-handshake rule
#7now states “No localhost defaults.” Please align the ADR (and any dependent docs) with the intended rule to avoid conflicting guidance.🤖 Prompt for AI Agents