Conversation
Extend the config flag binder to accept comma-separated `flag` tag names:
the first is canonical, the rest are deprecated aliases. Each alias gets
a hidden flag and an env-var fallback that emits a one-shot deprecation
log on first use.
Controller flags rename to `--assignment-namespaces`, `--assign-path`,
and `--assign-timeout`, with the legacy `--function-*` forms registered
as aliases. Dev tooling (cmd/dev, krane goldens, template.yaml.erb)
moves to `SKIPPER_ASSIGNMENT_NAMESPACES` as the canonical env var; the
erb input also accepts `function_namespaces` during the transition.
Web UI serves `/assignments`, `/assignments/{key}`, `/sse/assignments`,
and `/sse/assignment/{key}`; the legacy `/functions/*` and
`/sse/function*` paths return 301 to their assignment counterparts.
Templates rename to `assignment.html` / `assignments.html`, Datastar
signals rename (`fnSearch` -> `assignmentSearch`, `eventFunction` ->
`eventAssignment`, etc.), and `activeNav` highlights `/assignments` for
both prefixes. The `/events` page reads `?assignment=` and falls back
to `?function=` (new wins on conflict).
Internal Go renames: controller.Config fields become
AssignmentNamespaces / AssignPath / AssignTimeout, web.tenantRow et al
gain Assignments fields, and the `functionPath` template helper becomes
`assignmentPath`.
Contributor
Author
|
This change is part of the following stack: Change managed by git-spice. |
logDeprecation concatenated subject and identifier with a space, but both callers already embedded the identifier in subject. Drop the redundant `used` parameter and use the subject text as the dedup key.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 09f2431. Configure here.
The reset delete used the bare env var name as the key, but logDeprecation stores keys with the "env " prefix, so the reset was a no-op. Use the prefixed form to match.
This was referenced May 11, 2026
This branch has not been deployed
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.

Phase 3 of the assignment-redesign plan. Stacked on #139.
Operators with shipped manifests passing
--function-*flags orSKIPPER_FUNCTION_*env vars need binaries to keep parsing those names through the deprecation window, and tenants visiting/functions/...URLs in the dashboard need to land somewhere coherent. This phase adds the canonicalassignment-named surfaces alongside the legacy ones; the cleanup followup plan removes the legacy half after a deploy plus deprecation window.CLI flags and env vars
The config binder's
flagstruct tag now accepts comma-separated names: first is canonical, rest are deprecated aliases. Aliases register as hidden flags, derive their ownSKIPPER_*env-var fallbacks, and emit a one-shot deprecation log on first use of either form.Controller fields rename to
AssignmentNamespaces,AssignPath,AssignTimeoutwith--assignment-namespaces,--assign-path,--assign-timeoutas canonical and the legacy--function-namespaces,--function-assign-path,--function-assign-timeoutas aliases.Dev tooling (
cmd/dev/up.go,cmd/dev/deploy.go,cmd/dev/kube_lint.go,internal/dev/krane/krane_test.go) and the krane goldens migrate toSKIPPER_ASSIGNMENT_NAMESPACESandassignment_namespacesas the canonical names.template.yaml.erbaccepts eitherassignment_namespacesorfunction_namespacesas input but always emitsSKIPPER_ASSIGNMENT_NAMESPACES.Web UI
/assignments,/assignments/{key},/sse/assignments, and/sse/assignment/{key}are the canonical routes; the legacy/functions/*and/sse/function*paths return 301 to their assignment counterparts (preserving query strings). Datastar'sEventSourcefollows the 30x on the initial handshake.Templates
function.htmlandfunctions.htmlrename toassignment.html/assignments.html. TheassignmentsDataGo struct's signal fields rename toAssignmentSearch/AssignmentSort/AssignmentSortDir(JSON tagsassignmentSearchetc.), the events page's signal renameseventFunctiontoeventAssignment, andtenantRow.Functions/controllerRow.Functions/routerRow.Functionsrename toAssignments. Templates surface "Assignments" instead of "Functions" in nav links, page titles, stat-card labels, and column headers.activeNavhighlights/assignmentsfor bothfunction- andassignment-prefixed page titles. The/eventspage accepts?assignment=and falls back to?function=(new wins on conflict).Tests
TestFlagAliasescases cover the canonical/alias flag form, env-var fallback for the alias, hidden flag bit, and description content.controller_test.gocase covers the--function-namespaceslegacy alias still flowing intoAssignmentNamespaces.TestLegacyRoutesRedirect(andTestSSELegacyRoutesRedirect) cover the 301 from/functions/*and/sse/functions/*.?assignment=, legacy?function=, and the new-wins-on-conflict cases.internal/cmd/testdata/help_controller.golden, all 10internal/dev/krane/testdata/*.golden.yamlfiles.Test plan
dev testpassesdev lintcleandev kube-lintclean--function-namespaces=...parses and emits a deprecation log/functionsreturns 301 to/assignments; GET/sse/functionsreturns 301 to/sse/assignments