feat(b7-9-janus-ai): J.8.c — Janus LLM-provider refusal rules for ai-native-rag (B.7.9)#27
Merged
Conversation
Planning artifacts only (Proposal → Specs → Design → Tasks); no production code, no test bodies, no PR. J.8.c (deferred from T5 / §0.0 J.8) lands the ai-native-rag LLM-provider refusal rules: refuse Vertex AI / AWS Bedrock as default providers (CLOUD Act); at --eu-tier T3 force Mistral-EU (Mistral on Scaleway) / self-hosted vLLM by refusing US-managed inference. - 27 FR / 6 NFR / 6 ADR (FR-B7-9-* namespace) - New rule IDs J8-RULE-004/005/006 in the existing J.8 namespace (ADR-J8-004 — next free block, never reused) - New forbidden_combinations: sibling registry in dispatch-table.yml (the case janus-orchestration-rules.md "Extending the catalogue" pre-foresaw); additive _refuse_if_forbidden_combination helper - Grep-based harness b7-9.test.sh (L1 13 / L2 2), forge-ci.yml-registered - Mistral-EU / vLLM verified verbatim against compliance-tiers.md §10.2 - Collision flagged with b7-pythia on cross-layer-orchestrator.md (distinct H2 sections; ADR-B7-9-004) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPnqp5voa9PfC5JJ6HCKQz
change.schema.json sets additionalProperties:false; collision_notes is not an allowed top-level field, so validate-change-yaml.sh (the F.2 verify.sh gate) rejected it. Move the b7-pythia co-edit collision contract into a YAML comment pointing at where it is formally captured (design.md ADR-B7-9-004 + open-questions.md Q-004). No information lost. validate-change-yaml.sh now exits 0 on this change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPnqp5voa9PfC5JJ6HCKQz
…c / B.7.9) Extend the J.8 refusal catalogue with three new rules for the `ai-native-rag` LLM gateway (next free block after J8-RULE-003, never reused — ADR-J8-004 / ADR-B7-9-001): - J8-RULE-004 — Vertex AI refused as default LLM provider (any tier). - J8-RULE-005 — AWS Bedrock refused as default LLM provider (any tier). - J8-RULE-006 — `--eu-tier T3` ⇒ US-managed inference refused (forces Mistral-EU / self-hosted vLLM). Provider × tier *combination* refusals (the archetype stays permitted): - NEW `dispatch-table.yml::forbidden_combinations:` sibling list (7-key entries) — ADR-B7-9-002. - NEW additive `_refuse_if_forbidden_combination` helper in `bin/_forge-init-helpers.sh` (existing `_refuse_if_forbidden` byte-unchanged — ADR-B7-9-003); tier resolved $FORGE_EU_TIER → .forge/.forge-tier → empty (empty ⇒ only `tier: any` matches, no guessed default — Article III.4); exit 3 + structured `[REFUSAL: <archetype>/<provider>@<tier>: <rule_id>: …]`; fail-open on unreachable table. - Wrapper sources + invokes the helper post-promotion (candidate exit-3 gate untouched — ADR-B7-2-001). - NEW H3 "LLM-provider rules (ai-native-rag)" in the Janus agent, inside the existing "Forbidden archetypes & combinations" H2 (never the Dispatch Table H2 — collision discipline with b7-pythia, ADR-B7-9-004). I.3 review-time coupling (Q-003 — shipped in-brick, ADR-B7-9-005): - `compliance-tiers.md::forbidden:` += vertex-ai, bedrock so the generic T3-RULE-005 linter catches them (tier-scaled WARN/FAIL); matching REMEDIATION hints in constitution-linter.sh; interim-gap note in forbidden-components-rules.md. Both surfaces quote the same §10.2 gradient (NFR-B7-9-005). The compliance-tiers.md SemVer / lifecycle dates are HELD at v1.0.0 / 2026-05 because i2.test.sh::_test_i2_005 hard-pins them — the token edit is recorded in REVIEW.md as the audit trail (NFR-B7-9-002 no-regression). See the REVIEW.md entry for the rationale. TDD: b7-9.test.sh (13 L1 + 2 L2) written RED first, then flipped GREEN cluster-by-cluster; registered in forge-ci.yml after b7-2. Regression gate GREEN: verify.sh (448/0), constitution-linter.sh (PASS), validate-standards-yaml.sh (PASS), j7/j8/i3/b7-1/b7-2a/b7-2/b7-3 (all 0 failures), i2/i6 unbroken. Fresh `ai-native-rag` init still refuses exit 3 (candidate gate intact). T-SPEC append deferred to archive. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPnqp5voa9PfC5JJ6HCKQz
…ts to 1.1.0, relax i2/i3 pins (Option B) Maintainer-ratified resolution of Deviation #9: honor standards-lifecycle by bumping the two edited standards 1.0.0 -> 1.1.0 (dates 2026-06-22/2027-06-22) and relax the over-strict exact-version/date pins in the archived i2/i3 harnesses to frontmatter-validity checks. Gates re-verified GREEN. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPnqp5voa9PfC5JJ6HCKQz
…us-rules.md (B.7.9) Appends the J.8.c ADDED requirements (FR-B7-9-* / NFR-B7-9-* / ADR-B7-9-*) to the consolidated janus-rules spec (J.8.a/b/d preserved); flips .forge.yaml status: implemented -> archived (timeline.archived 2026-06-22). All archive gates GREEN. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPnqp5voa9PfC5JJ6HCKQz
# Conflicts: # .forge/standards/REVIEW.md # CHANGELOG.md
# Conflicts: # .github/workflows/forge-ci.yml # CHANGELOG.md
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.
J.8.c — Janus LLM-provider refusal rules for
ai-native-rag(B.7.9)Refuses Vertex AI / AWS Bedrock as default LLM providers (CLOUD Act); at
--eu-tier T3forces Mistral-EU (Mistral on Scaleway) / self-hosted vLLM by refusing US-managed inference. LandsJ8-RULE-004/005/006(J.8.c, deferred from T5 / §0.0 J.8).What's in it
J8-RULE-004/005/006incross-layer-orchestrator.md— new H3 inside the existing "Forbidden archetypes & combinations" H2 (disjoint fromb7-pythia's Dispatch Table region; clean 3-way merge).forbidden_combinations:(3 seed entries, 7-key shape) indispatch-table.yml._refuse_if_forbidden_combination(existing_refuse_if_forbiddenuntouched) + wrapper invocation;[REFUSAL: …@<tier>: <rule_id>: …], exit 3; tier from$FORGE_EU_TIER→.forge/.forge-tier→ empty (no guessed default).compliance-tiers.md::forbidden:+=vertex-ai/bedrock,constitution-linter.shREMEDIATION, interim-gap note.janus-orchestration-rules.md(+3 rows);compliance-tiers.md+forbidden-components-rules.mdSemVer-bumped 1.0.0 → 1.1.0 (the over-strict exact-version pins in the archivedi2/i3harnesses relaxed in lock-step — maintainer "Option B").b7-9.test.sh(13 L1 + 2 L2), registered in CI. Docs (ARCHETYPES.md) +CHANGELOG.md.Verification (all GREEN)
b7-9.test.sh15/15 ·verify.shPASS ·constitution-linterPASS ·validate-standards-yamlPASS · regressionj7 21/0 · j8 20/0 · i2 14/0 · i3 18/0 · b7-1 19/0 · b7-2a 4/0 · b7-2 7/0. Candidateforge init --archetype ai-native-ragstill exits 3. TDD RED→GREEN per the change'stasks.md.Spec consolidated into
.forge/specs/janus-rules.md(appended J.8.c block; J.8.a/b/d preserved); change archived (status: archived, 2026-06-22). EU alternatives verified verbatim againstcompliance-tiers.md§10.2 (no fabricated provider specifics).🤖 Generated with Claude Code
https://claude.ai/code/session_01PPnqp5voa9PfC5JJ6HCKQz