Skip to content

feat(b7-9-janus-ai): J.8.c — Janus LLM-provider refusal rules for ai-native-rag (B.7.9)#27

Merged
Bogala merged 7 commits into
mainfrom
b7-9-janus-ai
Jun 22, 2026
Merged

feat(b7-9-janus-ai): J.8.c — Janus LLM-provider refusal rules for ai-native-rag (B.7.9)#27
Bogala merged 7 commits into
mainfrom
b7-9-janus-ai

Conversation

@Bogala

@Bogala Bogala commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

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 T3 forces Mistral-EU (Mistral on Scaleway) / self-hosted vLLM by refusing US-managed inference. Lands J8-RULE-004/005/006 (J.8.c, deferred from T5 / §0.0 J.8).

What's in it

  • Janus rules J8-RULE-004/005/006 in cross-layer-orchestrator.md — new H3 inside the existing "Forbidden archetypes & combinations" H2 (disjoint from b7-pythia's Dispatch Table region; clean 3-way merge).
  • Registry forbidden_combinations: (3 seed entries, 7-key shape) in dispatch-table.yml.
  • Helper additive _refuse_if_forbidden_combination (existing _refuse_if_forbidden untouched) + wrapper invocation; [REFUSAL: …@<tier>: <rule_id>: …], exit 3; tier from $FORGE_EU_TIER.forge/.forge-tier → empty (no guessed default).
  • Review-time coupling (I.3) shipped in-brick: compliance-tiers.md::forbidden: += vertex-ai/bedrock, constitution-linter.sh REMEDIATION, interim-gap note.
  • Standards: janus-orchestration-rules.md (+3 rows); compliance-tiers.md + forbidden-components-rules.md SemVer-bumped 1.0.0 → 1.1.0 (the over-strict exact-version pins in the archived i2/i3 harnesses relaxed in lock-step — maintainer "Option B").
  • Harness b7-9.test.sh (13 L1 + 2 L2), registered in CI. Docs (ARCHETYPES.md) + CHANGELOG.md.

Verification (all GREEN)

b7-9.test.sh 15/15 · verify.sh PASS · constitution-linter PASS · validate-standards-yaml PASS · regression j7 21/0 · j8 20/0 · i2 14/0 · i3 18/0 · b7-1 19/0 · b7-2a 4/0 · b7-2 7/0. Candidate forge init --archetype ai-native-rag still exits 3. TDD RED→GREEN per the change's tasks.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 against compliance-tiers.md §10.2 (no fabricated provider specifics).

🤖 Generated with Claude Code

https://claude.ai/code/session_01PPnqp5voa9PfC5JJ6HCKQz

Bogala and others added 7 commits June 22, 2026 13:49
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
@Bogala Bogala merged commit c168c9f into main Jun 22, 2026
6 checks passed
@Bogala Bogala deleted the b7-9-janus-ai branch June 23, 2026 06:04
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