B.6.10 — Janus event-broker refusal (no Kafka SaaS US) for event-driven-eu#43
Merged
Conversation
Proposal/specs/design/tasks/open-questions + archived .forge.yaml for the B.6.10 standard interdiction (docs/new-archetypes-plan.md §6.1): refuse a US-managed Kafka SaaS (Confluent Cloud) as the event-driven-eu event broker, NATS JetStream / Redpanda are the sanctioned EU-deployable brokers. Namespace FR-B6-JR-*; direct sibling of b7-9-janus-ai (J.8.c). All three open questions resolved (rule-ID allocation, tier-scoping, I.3 coupling). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… L2) Mirrors b7-9.test.sh. L1 greps the new J8-RULE-007/008 anchors + H3 sub-section, the two forbidden_combinations entries, the wrapper call site, the janus-orchestration-rules rows, and the confluent-cloud linter token. L2 reuses the _mk_combo_fixture/_run_combo_helper pattern to exercise the reused _refuse_if_forbidden_combination helper against the live registry: confluent-cloud (any tier) => exit 3 + J8-RULE-007; T3 + us-managed-kafka => exit 3 + J8-RULE-008; T3 + nats-jetstream => exit 0 (sovereign default). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…t-driven-eu Enforces the schema flag event_specifics.eu_sovereignty.no_kafka_saas_us: - J8-RULE-007: Confluent Cloud (US-managed Kafka SaaS) refused as the event broker regardless of tier (tier: any, never a valid default). - J8-RULE-008: at --eu-tier T3 any US-managed Kafka SaaS refused (tier: T3). Two entries appended to the EXISTING dispatch-table.yml::forbidden_combinations list; a new "Event-broker rules" H3 in cross-layer-orchestrator.md; the event-driven-eu wrapper invokes the REUSED _refuse_if_forbidden_combination helper (from b7-9-janus-ai) after the scaffoldability gate. No new registry or helper. Sanctioned brokers: self-hosted NATS JetStream / Redpanda. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…nt-cloud) - janus-orchestration-rules.md: +2 catalogue rows (J8-RULE-007/008), refusal semantics + full-rule-body prose updated (md-pattern, no semver frontmatter). - compliance-tiers.md: forbidden: += confluent-cloud so the generic I.3 T3-RULE-005 review-time linter catches it; SemVer 1.1.0 -> 1.2.0. - constitution-linter.sh: REMEDIATION += confluent-cloud (NATS/Redpanda EU). - forbidden-components-rules.md: event-broker coupling subsection; NO new T3-RULE-NNN (reserved T3-RULE-008 Persistence slot untouched); 1.1.0->1.2.0. - REVIEW.md: KEEP-WITH-CHANGES entry for the two standard bumps. Both sibling pins (i2/_test_i2_005, i3/_test_i3_008) already accept any valid semver (relaxed by b7-9), so the bumps need no further harness change. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ster CI b7-9.test.sh::_test_b7_9_005 hard-pinned J8-RULE-006 as the last rule (its upper-bound regex fired on any 007+). Allocating J8-RULE-007/008 legitimately invalidates that bound, so it is relaxed to catch 009+ only (sibling-harness coupling, the same discipline b7-9 applied to i2/i3). Without this, main CI would go red on merge. Registers "b6-10.test.sh --level 1,2" in forge-ci.yml. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
ARCHETYPES.md forbidden-combinations table += J8-RULE-007/008 rows, a new "Event-broker refusals (event-driven-eu, B.6.10)" note, and the --eu-tier T3 row. CHANGELOG [Unreleased] Added entry for the B.6.10 sub-module. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…rules spec APPENDS the B.6.10 ADDED-requirements block (FR-B6-JR-* / NFR-B6-JR-* / ADR-B6-JR-*) to .forge/specs/janus-rules.md; the J.8.a/b/c/d blocks are preserved unchanged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… trim CI line budget Final B.6 fan-out brick. Five sibling bricks merged first (#39, #42, #40, #41, #44) and touched the same shared files. Conflicts in: - .forge/standards/REVIEW.md (ledger entries at the same insertion point) — kept all three, reordered by actual landing order (b6-3, b6-9, then b6-10 last). - .github/workflows/forge-ci.yml (harness registration insertion point) — merged into one consolidated b6-1..b6-10 block. - CHANGELOG.md ([Unreleased] entries) — kept all five bullets in module order (B.6.4, B.6.5, B.6.6, B.6.9, B.6.10). The merged forge-ci.yml landed at 382 lines (2 over the 380 budget, t5-1.test.sh caught it) — condensed two harness-registration comment blocks to free 4 lines, landing at 378/380. Re-ran b6-10 (12/12), b7-9 (15/15), i3 (18/18), i2 (14/14), t5-1.test.sh CI line-budget (17/17, 378/380 lines), verify.sh (551/0), constitution-linter.sh (PASS 81/0) — all green post-merge. This is the last of the 6 step-2 B.6 fan-out bricks (B.6.3/4/5/6/9/10). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Implements B.6.10 (
docs/new-archetypes-plan.md§6.1) — the standardinterdiction "pas de Kafka SaaS US (Confluent Cloud), Redpanda acceptable
(EU deployable)" — as scaffold-time Janus refusal rules for the
event-driven-euarchetype. The direct sibling ofb7-9-janus-ai(J.8.c), reusing that brick's machinery verbatim.
Two new rules in the
J8-RULE-NNNcatalogue (next free block after 006):J8-RULE-007— Confluent Cloud (US-managed Kafka SaaS) refused asthe event broker regardless of tier (
tier: any, never a valid default;mirrors
J8-RULE-004/005).J8-RULE-008— at--eu-tier T3, any US-managed Kafka SaaS(Confluent Cloud / AWS MSK / Azure Event Hubs) refused (
tier: T3; mirrorsJ8-RULE-006), forcing self-hosted NATS JetStream / Redpanda on EU infra.Grounded in the archetype schema flag
event_specifics.eu_sovereignty.no_kafka_saas_us: true(whose comment namesB.6.10 as its enforcement) +
acceptable: [nats-jetstream, redpanda]. Therule is a forward-looking guard: NATS JetStream is the sovereign default
(never refused); Redpanda is the sanctioned Kafka-API-compatible alternative;
Confluent Cloud is forbidden.
What changed
dispatch-table.yml::forbidden_combinations:list and adds a call site tobin/forge-init-event-driven-eu.shfor the EXISTING_refuse_if_forbidden_combinationhelper (both shipped byb7-9-janus-ai).No new registry, no new/duplicated helper.
### Event-broker rules (event-driven-eu)H3 incross-layer-orchestrator.md(inside the existing "Forbidden archetypes &combinations" H2).
janus-orchestration-rules.md+2 catalogue rows;compliance-tiers.md::forbidden:+=confluent-cloud(1.1.0→1.2.0) so thegeneric I.3
T3-RULE-005review-time linter catches it, with a matchingconstitution-linter.shREMEDIATIONhint;forbidden-components-rules.mdevent-broker coupling note (1.1.0→1.2.0). No new
T3-RULE-NNN— thereserved
T3-RULE-008Persistence slot is untouched.b7-9.test.sh::_test_b7_9_005numbering guard (it hard-pinned 006 as the last rule) to permit the
newly-allocated 007/008 while still catching a 009+ collision — the same
discipline b7-9 applied to
i2/i3. Prevents main CI going red on merge.docs/ARCHETYPES.mdrows + note;CHANGELOG.md[Unreleased] entry..forge/changes/b6-10-janus-rule/(archived); B.6.10block appended to
.forge/specs/janus-rules.md.Constitution: no amendment (ENFORCES existing EU-sovereign posture); additive
per "Extending the catalogue";
J8-RULE-007/008never-reused (ADR-J8-004).Test plan
New harness
.forge/scripts/tests/b6-10.test.sh(12 tests: 9 L1 + 3 L2),registered in
forge-ci.yml. TDD RED→GREEN witnessed (11 fail → 12 pass).b6-10.test.sh --level 1,2— 12/12 (L1 anchors/registry/wrapper/std/tokenexit 3 + J8-RULE-007, T3+us-managed-kafka ⇒ exit 3 + J8-RULE-008,
T3+nats-jetstream ⇒ exit 0 no refusal).
FORGE_EDE_FORCE_SCAFFOLD=1): confluent-cloud andT3+us-managed-kafka both emit the structured
[REFUSAL: …]and exit 3;fresh init still refuses as candidate ("not-yet-scaffoldable", not a
J8-RULE); NATS default at T3 fires 0 refusals.
b7-915/15,j820/20,i214,i318,j721,k422,b6-119,b6-210,b7-pythia19,foundations22 (+ t4/i5/i6/k3/k5/b7-1/b7-2a).verify.shPASS (b6-10 change validates against schema, no open questions);constitution-linter.shPASS 76/0;validate-standards-yaml.shall STD-PASS.Parallel-lane note
Shared files (
CHANGELOG.md,forge-ci.yml,dispatch-table.yml,cross-layer-orchestrator.md) are co-edited additively/disjointly with thefive sibling B.6 lanes — merge conflicts are expected and handled centrally.
🤖 Generated with Claude Code