Skip to content

feat(web): display Canary relationships with UI protection - #108

Open
primowenjoy wants to merge 1 commit into
modelsphere:release-canaryfrom
primowenjoy:feat/canary-llmservice-target-pr
Open

primowenjoy wants to merge 1 commit into
modelsphere:release-canaryfrom
primowenjoy:feat/canary-llmservice-target-pr

Conversation

@primowenjoy

@primowenjoy primowenjoy commented Oct 29, 2026 •

Copy link
Copy Markdown

What type of PR is this?

  • feature
  • bug fix
  • cleanup / refactor

What this PR does and why

Move the optional Canary frontend out of the public Console distribution while retaining generic extension hooks and service action protection. Public builds have an empty extension registry; private builds share host login, permissions, translations, theme and query state.

Display independent, referenced and owned model-service relationships from Swiss metadata, including older managedBy / assignedTo responses. Owned services are managed through their parent; unverifiable references stay locked. Verified referenced arms allow only adaptive concurrency upgrades. Production references retain model/configuration upgrades and scaling, while UI uninstall and historical rollback are blocked until released. Production upgrade plans must preserve chart, release identity and declared routing/Service binding, including changes introduced through YAML. The uninstall dialog refreshes the service relationship before submitting deletion.

Adaptive upgrades use Swiss's general reuseSource composition and reject source/chart/non-adaptive drift. Deployment Resources now exposes autoscaling with replica bounds or a fixed replica count independently of SLO, avoiding manual YAML edits when deploying fixed-replica experiment arms.

These action restrictions exist only in Console UI. No Kubernetes admission hook is added or enabled, and Swiss write APIs remain unrestricted by Canary metadata. The separate Swiss metadata fix restores valid cross-namespace arm links and adaptive actions.

Which issue(s) this PR fixes

Fixes #124

Coordinates Swiss #53, Canary plugin #8, and Operator #12.

How it was tested

  • Public Console: typecheck, 535 tests across 61 files, production and standalone Swiss builds.
  • Private Canary integration: typecheck, 656 tests across 79 files and production build.
  • Regression tests cover relationship actions, production binding changes through YAML, independent scaler/SLO configuration, adaptive-only upgrades and role-specific owner descriptions.
  • Based on the updated release-canary GPU placement implementation; GPU resource/product/capacity controls are preserved.
  • The reported relationship regression was reproduced with failing tests before the fix. No deployment changed for these validation fixes yet.

Checks

  • Web typecheck, tests, production and standalone Swiss builds
  • Behavior documented in docs/console-design.md
  • No internal hostnames, IPs, registries or credentials added
  • Go and chart files are unchanged.

Notes for reviewers

Start with service-relationship.ts, production-binding.ts, DeploySheet, UninstallDialog and DeployForm. UI policy is independent of optional Kubernetes admission. The public distribution contains no private Canary pages; the plugin supplies role-specific experiment guidance.

Release note

action required: Canary pages require a separately built optional distribution. Console protects referenced-service lifecycle actions in the UI, preserves production routing bindings during upgrades, and exposes autoscaling independently of SLO requirements. Adaptive arm upgrades require the matching Swiss reuseSource API; cross-namespace assignment metadata requires Swiss #53.

@primowenjoy primowenjoy changed the title feat(web): support LLMService Canary targets feat(canary): support LLMService targets and protect experiment arms Oct 29, 2026
@primowenjoy primowenjoy changed the title feat(canary): support LLMService targets and protect experiment arms feat(canary): compare existing LLMServices and protect assigned arms Nov 2, 2026
@primowenjoy primowenjoy changed the title feat(canary): compare existing LLMServices and protect assigned arms feat(web): compare existing Canary arms with model mappings Nov 2, 2026
@primowenjoy primowenjoy changed the title feat(web): compare existing Canary arms with model mappings refactor(web): replace bundled Canary UI with private extension builds Nov 3, 2026
@primowenjoy
primowenjoy force-pushed the feat/canary-llmservice-target-pr branch from 45d80f4 to aa07739 Compare November 3, 2026 05:41
@primowenjoy primowenjoy changed the title refactor(web): replace bundled Canary UI with private extension builds feat(web): isolate Canary UI and restrict assigned-arm upgrades Nov 4, 2026
@primowenjoy primowenjoy changed the title feat(web): isolate Canary UI and restrict assigned-arm upgrades feat(web): display Canary relationships with UI protection Nov 5, 2026
Keep the optional Canary distribution separate while protecting referenced service lifecycle actions in Console. Preserve production route bindings during upgrades and expose independent autoscaling controls.

Fixes modelsphere#124
@primowenjoy
primowenjoy force-pushed the feat/canary-llmservice-target-pr branch from 6d49b31 to 28095b7 Compare November 9, 2026 08:54
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