Skip to content

feat(lab): CL-06 routing compatibility policy - #1394

Draft
Wibias wants to merge 25 commits into
devfrom
feat/cl-06-routing-profile-compatibility
Draft

feat(lab): CL-06 routing compatibility policy#1394
Wibias wants to merge 25 commits into
devfrom
feat/cl-06-routing-profile-compatibility

Conversation

@Wibias

@Wibias Wibias commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Add optional compatibility block to OcxRoutingProfileConfig (required suites, min status PROBED/VERIFIED, max evidence age, unknown/degraded policies) with backward-compatible revision hashing when omitted.
  • Match evidence to exact RouteSubjectV1 via shared CL-03 subject/fingerprint helpers; consume existing Lab projection through one bounded SQLite snapshot per evaluation.
  • Integrate compatibility gates/penalties into Router Intelligence after capability hard requirements; extend RouteDecisionTraceV1 with bounded suite-level compatibility detail.
  • Extend Routing Profiles management API dry-run parity, Models editor Compatibility section (catalog-backed suite picker), and focused regression tests.

Frozen compatibility schema

compatibility?: {
  requiredSuites?: { suiteId, evidenceLayer }[];
  minStatus?: "PROBED" | "VERIFIED";
  maxEvidenceAgeMs?: number;
  unknownEvidence?: "allow" | "penalize" | "exclude";
  degradedEvidence?: "allow" | "penalize" | "exclude";
}

Exact-route evidence matching

Production routing derives RouteSubjectV1 from provider identity, routed provider config, adapter/protocol/surface, DNS-free endpoint fingerprint, behavior fingerprint, provider-instance fingerprint, and OpenCodex compatibility version — reusing CL-03 buildRouteSubjectV1 / subjectIdForSubject.

Routing-path side-effect prohibition

Policy evaluation and dry-run only read existing projection verdicts. No probes, protocol conformance runs, live-route tests, upstream compatibility calls, DNS resolution, Agent Fabric work, projection rebuilds, or ledger replay.

Verdict / freshness semantics

  • Positive thresholds: PROBED, VERIFIED only (VERIFIED satisfies PROBED).
  • UNSUPPORTED excludes; DEGRADED follows degradedEvidence; UNKNOWN/CLAIMED/BLOCKED follow unknownEvidence.
  • Stale positive evidence does not satisfy tightened maxEvidenceAgeMs / catalogue freshness ceilings.

Backward compatibility

Profiles without compatibility retain pre-CL-06 validation, eligibility, scoring, routing, and revision behavior.

Validation performed

  • bun x tsc --noEmit
  • bun test tests/routing-compatibility.test.ts (27)
  • bun test tests/routing-profile*.test.ts tests/route-decision-trace.test.ts (64)
  • bun test tests/lab-read-surfaces.test.ts
  • bun test tests/routing-policy-surface-parity.test.ts
  • bun run privacy:scan
  • GUI lint, build, React Doctor

Explicit non-goals

CL-07 (Agent Fabric / task effectiveness) is not started in this PR.

Test plan

  • Cross-platform CI green
  • Legacy routing profiles without compatibility unchanged
  • Dry-run and production evaluator parity for compatibility exclusions/penalties
  • Route traces remain bounded and privacy-safe
  • CL-05 Compatibility Matrix remains read-only

Summary by CodeRabbit

  • New Features
    • Added compatibility requirements to routing profiles, including required suites, minimum status, evidence age, and handling for unknown or degraded evidence.
    • Routing now evaluates compatibility evidence, applies eligibility and scoring impacts, and records compatibility details in decision traces.
    • Added GUI controls for configuring compatibility policies and catalog availability warnings.
  • Localization
    • Added compatibility-policy labels and messages in English, German, Japanese, Korean, Russian, Turkish, and Chinese.
  • Tests
    • Added coverage for routing behavior, profile editing, management APIs, evidence handling, and trace output.

Wibias added 2 commits August 10, 2026 05:03
Extend Routing Profiles with optional Compatibility Lab evidence gates, bounded read-only verdict lookup, evaluator penalties, trace explainability, management API parity, and Models editor controls without routing-path probes.
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: bf30a903-16b0-46b7-9a77-81a86499ec61

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Routing profiles now support Compatibility Lab suite requirements. The server derives deterministic route subjects, reads bounded verdict snapshots, evaluates compatibility during routing, records bounded traces, exposes management API data, and provides localized GUI controls.

Changes

Routing compatibility

Layer / File(s) Summary
Policy contracts and route identity
src/types.ts, src/routing/profile.ts, src/routing/compatibility/*, src/lab/subject/*
Adds compatibility policy types, validation, normalization, revision hashing, endpoint fingerprints, provider behavior resolution, deterministic subjects, and compatibility-version identity.
Evidence catalog, reading, and evaluation
src/routing/compatibility/catalog.ts, src/routing/compatibility/reader.ts, src/routing/compatibility/assemble.ts, src/routing/compatibility/policy.ts
Loads catalog metadata and bounded verdict snapshots. It evaluates freshness, status, unknown evidence, degraded evidence, penalties, exclusions, and suite traces.
Routing, trace, and management integration
src/router.ts, src/routing/evaluator.ts, src/routing/trace.ts, src/server/management/routing-profile-routes.ts
Uses shared candidate evidence assembly, applies compatibility exclusions and penalties, synchronizes dry-run timestamps, and persists bounded compatibility trace data.
Profile editor, validation, and records
gui/src/routing-profile-editor-data.ts, gui/src/pages/RoutingProfiles.tsx, gui/src/i18n/*, tests/*, scripts/*, devlog/_plan/260807_compatibility_lab/*
Adds catalog-backed controls, conditional request serialization, localized labels, compatibility-version generation, and coverage for routing, serialization, management, trace, and catalog behavior.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested reviewers: ingwannu, lidge-jun

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 30.38% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely identifies the main change: adding the CL-06 routing compatibility policy.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/cl-06-routing-profile-compatibility

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the enhancement New feature or request label Aug 10, 2026
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

✅ READY

  • all PR quality gates passed.

UI screenshot waived by the gui-screenshot-waived label.

Hygiene

Deterministic PR hygiene checks passed.

@Wibias Wibias added the gui-screenshot-waived Maintainer waiver for false-positive GUI screenshot requirements label Aug 10, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 20

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@devlog/_plan/260807_compatibility_lab/001_pr_stack_status.md`:
- Line 28: Update the CL-06 entry in the PR stack status table to replace
“PENDING CI” with the verified current PR-quality-gates state “READY,”
preserving the Draft status and existing commit and PR references.

In `@gui/src/i18n/en.ts`:
- Around line 84-85: Update the routing.compatibility.loadingCatalog and
routing.compatibility.catalogUnavailable translations to use the American
spelling “catalog” instead of “catalogue,” preserving the existing messages and
punctuation.

In `@gui/src/pages/RoutingProfiles.tsx`:
- Around line 74-77: Replace the duplicate LabCatalogScenario type with an alias
to the imported CompatibilitySuiteDraft type. Update references to use that
shared type while preserving the existing suiteId and evidenceLayer behavior.
- Around line 85-99: Update uniqueCatalogSuites to validate each scenario’s
suiteId and evidenceLayer before calling catalogSuiteKey or adding it to the
result; skip malformed scenarios so sorting never invokes localeCompare on
undefined. Preserve valid scenarios and existing deduplication and ordering
behavior, allowing the page load to continue when catalogJson.scenarios contains
partial entries.

In `@src/routing/compatibility/assemble.ts`:
- Around line 47-54: The assembled verdicts in the suites mapping should not
hardcode fresh: true. Remove fresh from ObservedSuiteVerdict and omit it from
the assembler output, keeping freshness derived from asOf and the policy’s
effective max age.
- Around line 71-90: Gate the candidate subject-resolution loop around
routedProviderConfig and resolvePolicyRouteSubject on profile.compatibility,
matching the existing compatibility snapshot condition. Skip populating
subjectIds and resolvedByCandidate when the profile has no compatibility policy,
while preserving the current resolution behavior for compatible profiles.
- Around line 100-106: Update attachCompatibilityEvidence and its call site in
assemblePolicyCandidateEvidence to reuse the already resolved subject from
resolvedByCandidate instead of calling resolvePolicyRouteSubject a second time.
Pass that subject into the compatibility evidence flow, remove the redundant
resolution and subjectId mutation, and preserve the unknown-evidence fallback
when the initial subject construction fails.

In `@src/routing/compatibility/policy.ts`:
- Around line 20-37: The effective max-age lookup must be bounded and
non-repeated: in src/routing/compatibility/policy.ts:20-37, hoist or memoize
queryLabCatalog results by evidenceLayer and suiteId so effectiveMaxAgeMs does
not query the catalog for every candidate. In src/routing/profile.ts:353-411,
update routingProfileIssues to reject compatibility.requiredSuites when it
exceeds the defined maximum length, preventing unbounded evaluation cost.
- Around line 72-75: Update the requirement loop around
MAX_TRACE_COMPATIBILITY_SUITES so it evaluates every policy.requiredSuites entry
without breaking when the trace cap is reached. Preserve the cap by routing each
trace append through the existing pushTrace helper, replacing direct
outcome.suiteTraces.push calls while continuing to accumulate exclusions and
penalties for all requirements.

In `@src/routing/compatibility/subject.ts`:
- Around line 53-61: Update buildRouteSubjectV1 to create one shared
effective-route helper that applies resolveWireProtocolOverride to determine the
effective adapter. Reuse that adapter for effectiveAdapter, upstreamProtocol,
resolveProductionBehaviorValues, and providerInstanceKey so all route identity
fields remain consistent and continue using the shared routing/config layers.

In `@src/routing/compatibility/version.ts`:
- Around line 51-57: Replace the runtime-only fallback assigned to cachedVersion
with the embedded/generated compatibility version from
generated/compatibility-version.json, or invalidate the compatibility subject
when that artifact is unavailable. Ensure the fallback does not hash fixed
schema fields, an empty file list, and Bun.version or create a subject that
resolvePolicyRouteSubject can reuse.

In `@src/routing/evaluator.ts`:
- Around line 403-406: Update evaluateCompatibilityForCandidate so compatibility
always receives a score: use a satisfied score of 1 for verified evidence and
the existing penalty score for unknown, stale, or degraded evidence under
penalize mode. Define and reuse COMPATIBILITY_WEIGHT and
COMPATIBILITY_SATISFIED_SCORE alongside COMPATIBILITY_UNKNOWN_PENALTY_SCORE in
the compatibility types, and apply the weight through the same normalized
accounting as other dimensions so unused weight returns to priority.

In `@src/routing/profile.ts`:
- Line 517: Update normalizeRoutingProfile to call normalizedCompatibility(raw)
once, store its result in a local variable, and reuse that variable for both the
conditional check and compatibility property value. Preserve the current
omission of compatibility when the result is absent.

In `@src/routing/trace.ts`:
- Around line 569-599: Update normalizeRouteDecisionTrace() to propagate
compatibility truncation into the persisted truncated marker: set
truncated.compatibility when either caps.compatibility or incoming.compatibility
indicates truncation. Preserve the existing truncation handling for all other
fields.
- Line 114: Update the evaluator’s priorityWeight calculation to subtract 0.05
whenever compatibilityValue is present, before adding the existing 0.05 *
compatibilityValue score. Keep the current health, quota, and cost deductions
unchanged and ensure candidates without compatibilityValue retain their existing
weighting.

In `@src/server/management/routing-profile-routes.ts`:
- Around line 102-104: Update the dry-run handler to capture one timestamp and
pass it to both assemblePolicyCandidateEvidence and evaluatePolicyProfile, using
the evaluator’s now parameter rather than its Date.now default. Preserve the
existing candidate, exclusion, health, compatibility, and quota evaluation flow
while ensuring both calls use the same instant.

In `@tests/routing-compatibility.test.ts`:
- Around line 98-105: Update the test “exact route identity changes when adapter
changes” to keep provider ID, model ID, and endpoint identical for both resolved
routes, changing only the adapter configuration before comparing subjectId
values. Reuse the same provider/model/base URL inputs while varying the adapter
passed to routed, preserving the existing definedness and inequality assertions.
- Around line 224-236: The parity test currently invokes evaluatePolicyProfile
identically twice, so it does not exercise separate dry-run and production
boundaries. Replace the duplicate calls in the “dry-run and production evaluator
parity with same evidence” test with the management dry-run path and production
routing path, supplying fixed evidence, then assert matching selected candidate,
exclusions, score penalty, and compatibility trace; keep the regression test
near the existing routing tests.
- Around line 270-276: Update the test “compatibility profile revision changes
only when compatibility changes” to clone the existing compat profile rather
than normalize the unrelated legacy profile. Modify exactly one compatibility
field, such as minStatus, in the clone, normalize it with the compat ID, and
assert its revision differs from the unchanged compat revision while the
unchanged profile still matches the base revision.

In `@tests/routing-profile-management-editor.test.ts`:
- Around line 157-182: Strengthen the test around the existing PUT and GET
requests by adding mutation/projection counters to deps(), recording their
values after the PUT, and asserting the GET /api/lab/catalog leaves them
unchanged. Also snapshot the relevant configuration after the PUT and verify it
remains unchanged after the GET, while preserving the existing successful
response and scenarios-array assertions.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 1e3eb837-fe11-4533-8b70-9aecc0f90702

📥 Commits

Reviewing files that changed from the base of the PR and between 14c01e5 and 3dc2762.

📒 Files selected for processing (28)
  • devlog/_plan/260807_compatibility_lab/001_pr_stack_status.md
  • devlog/_plan/260807_compatibility_lab/006_cl06_routing_compatibility.md
  • gui/src/i18n/de.ts
  • gui/src/i18n/en.ts
  • gui/src/i18n/ja.ts
  • gui/src/i18n/ko.ts
  • gui/src/i18n/ru.ts
  • gui/src/i18n/tr.ts
  • gui/src/i18n/zh.ts
  • gui/src/pages/RoutingProfiles.tsx
  • gui/src/routing-profile-editor-data.ts
  • src/router.ts
  • src/routing/compatibility/assemble.ts
  • src/routing/compatibility/behavior.ts
  • src/routing/compatibility/endpoint.ts
  • src/routing/compatibility/policy.ts
  • src/routing/compatibility/reader.ts
  • src/routing/compatibility/subject.ts
  • src/routing/compatibility/types.ts
  • src/routing/compatibility/version.ts
  • src/routing/evaluator.ts
  • src/routing/profile.ts
  • src/routing/trace.ts
  • src/server/management/routing-profile-routes.ts
  • src/types.ts
  • tests/routing-compatibility.test.ts
  • tests/routing-profile-editor-data.test.ts
  • tests/routing-profile-management-editor.test.ts

Comment thread devlog/_plan/260807_compatibility_lab/001_pr_stack_status.md
Comment thread gui/src/i18n/en.ts
Comment thread gui/src/pages/RoutingProfiles.tsx Outdated
Comment thread gui/src/pages/RoutingProfiles.tsx Outdated
Comment thread src/routing/compatibility/assemble.ts Outdated
Comment thread src/server/management/routing-profile-routes.ts Outdated
Comment thread tests/routing-compatibility.test.ts Outdated
Comment thread tests/routing-compatibility.test.ts Outdated
Comment thread tests/routing-compatibility.test.ts Outdated
Comment thread tests/routing-profile-management-editor.test.ts

Wibias commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator Author

CL-06 review remediation is now on head 524c829300de38b59bb48d17a61b9264de08adfd.

I independently validated the original CodeRabbit findings against the CL-00/CL-06 contracts rather than applying them mechanically.

Fixed:

  • catalog rows are defensively validated and the duplicate GUI suite type is gone;
  • legacy profiles skip all compatibility subject/catalog/projection work;
  • each candidate subject set is resolved once and reused;
  • protocol and live-route evidence now use their distinct canonical subject kinds;
  • current suite version + suite manifest digest are required when selecting verdict evidence;
  • freshness is derived from asOf + current catalog/profile ceilings, not hardcoded;
  • catalog metadata is loaded once per layer during evidence assembly, not from the pure evaluator hot path;
  • required suites are bounded at 8 in profile validation, while the evaluator still enforces all supplied requirements defensively and caps only trace output;
  • effective wire/adapter identity is shared across route context and behavior fingerprinting;
  • route identity now includes behavior-affecting config and a salted non-credential-header digest; credential rotation remains identity-neutral;
  • compatibility-version identity is generated from exact tracked implementation bytes and fails closed when the generated authority is unavailable;
  • routing uses a non-creating installation-salt read, so compatibility consumption does not mutate Lab state;
  • compatibility penalize now lowers the candidate score instead of raising it;
  • compatibility truncation survives persisted trace normalization;
  • dry-run assembly/evaluation share one timestamp;
  • focused tests now isolate adapter identity, exact suite revision identity, compatibility revision hashing, trace-cap enforcement, no-Lab-mutation, and real management-dry-run vs production routeModel parity;
  • a dedicated read-only /api/lab/catalog boundary test asserts config/mutation hooks remain unchanged.

Two original comments are intentionally not changed:

  1. PENDING CI -> READY: READY is an acceptance/readiness state, not merely a historical gates result. The PR remains Draft and was still undergoing correctness remediation; I am not recording it as accepted/ready prematurely.
  2. English catalogue -> catalog: this is valid English and a copy-style preference only. It has no CL-06 functional/contract impact, so I am not creating a code commit solely for that spelling preference.

Scoring note: I fixed the inversion without adopting the suggested universal satisfied score of 1. The frozen CL-06 contract explicitly says there is no universal compatibility score. Satisfied/allowed evidence therefore preserves the existing score; an explicit penalize result applies a bounded deduction (COMPATIBILITY_WEIGHT with the 0.3 penalty floor).

Additional independent fixes beyond the Rabbit list: exact ProtocolSubjectV1 vs RouteSubjectV1 handling, exact suite-version/digest selection, behavior-fingerprint completeness, and the routing-time installation-salt mutation were all corrected in this pass.

Validation on this head: React Doctor is green; Cross-platform CI core gates, packaging on all three OSes, keyring jobs, storage policy, and shards 1/4 through 3/4 are green. macOS main and shard 4/4 were still running at the time of this comment; I will not call the full matrix green until the workflow itself completes successfully.

Wibias commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
gui/src/pages/RoutingProfiles.tsx (1)

868-915: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Localize the Compatibility field labels.

Lines 869, 882, and 900 render maxEvidenceAgeMs, unknownEvidence, and degradedEvidence as hardcoded user-visible text. Add locale keys and render them with t(...). Update every supported locale file with the new keys.

Proposed fix
-                  <code>maxEvidenceAgeMs</code>
+                  {t("routing.compatibility.maxEvidenceAgeMs")}
...
-                  <code>unknownEvidence</code>
+                  {t("routing.compatibility.unknownEvidence")}
...
-                  <code>degradedEvidence</code>
+                  {t("routing.compatibility.degradedEvidence")}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@gui/src/pages/RoutingProfiles.tsx` around lines 868 - 915, Localize the
user-visible labels in the compatibility fields rendered by the RoutingProfiles
component: replace the hardcoded maxEvidenceAgeMs, unknownEvidence, and
degradedEvidence text with t(...) lookups. Add matching translation keys and
values to every supported locale file, preserving the existing routing
translation namespace and label semantics.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@scripts/generate-compatibility-version.ts`:
- Around line 85-97: Add src/generated/compatibility-version.json to the package
preparation flow by invoking generateCompatibilityVersionManifest through the
package.json prepare:package script, and add the same generated path to
.gitignore. Keep the existing generator behavior and packaging configuration
unchanged.

In `@src/routing/compatibility/behavior.ts`:
- Around line 59-66: Update authTransportFor to accept the already-resolved auth
mode as an argument, and pass the mode resolved with effective.authMode,
registryEntry?.authKind, and the "key" fallback from the caller. Remove the
helper’s independent effective.authMode resolution so auth.mode and
auth.transport always use the same registry-backed value.

In `@tests/routing-compatibility.test.ts`:
- Around line 362-364: Update the VERIFIED evidence construction in the
satisfied evaluatePolicyProfile case to pass timestamp 1000 to evidence instead
of relying on its default current timestamp. Keep the evaluator’s now value and
the UNKNOWN case unchanged so the verified evidence is fresh and remains
higher-scoring than the penalized candidate.

---

Outside diff comments:
In `@gui/src/pages/RoutingProfiles.tsx`:
- Around line 868-915: Localize the user-visible labels in the compatibility
fields rendered by the RoutingProfiles component: replace the hardcoded
maxEvidenceAgeMs, unknownEvidence, and degradedEvidence text with t(...)
lookups. Add matching translation keys and values to every supported locale
file, preserving the existing routing translation namespace and label semantics.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 4800e38a-85a2-4dd9-b435-412d972b2d42

📥 Commits

Reviewing files that changed from the base of the PR and between 3dc2762 and 524c829.

📒 Files selected for processing (23)
  • gui/src/pages/RoutingProfiles.tsx
  • scripts/generate-compatibility-version.ts
  • scripts/prepare-package.ts
  • src/lab/observe/from-conformance.ts
  • src/lab/subject/installation-salt.ts
  • src/lab/subject/protocol-subject.ts
  • src/lab/subject/route-subject.ts
  • src/routing/compatibility/assemble.ts
  • src/routing/compatibility/behavior.ts
  • src/routing/compatibility/catalog.ts
  • src/routing/compatibility/endpoint.ts
  • src/routing/compatibility/policy.ts
  • src/routing/compatibility/reader.ts
  • src/routing/compatibility/subject.ts
  • src/routing/compatibility/types.ts
  • src/routing/compatibility/version.ts
  • src/routing/evaluator.ts
  • src/routing/profile.ts
  • src/routing/trace.ts
  • src/server/management/routing-profile-routes.ts
  • tests/compatibility-version.test.ts
  • tests/routing-compatibility-boundaries.test.ts
  • tests/routing-compatibility.test.ts

Comment thread scripts/generate-compatibility-version.ts
Comment thread src/routing/compatibility/behavior.ts Outdated
Comment thread tests/routing-compatibility.test.ts Outdated

Wibias commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Wibias commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Wibias commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request gui-screenshot-waived Maintainer waiver for false-positive GUI screenshot requirements

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant