{"record":{"id":"e0a2a2d5da00cb58","repo":"derailed/k9s","slug":"unable-to-parse-version-in-q","errorCode":null,"errorMessage":"unable to parse version in %q","messagePattern":"unable to parse version in %q","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/view/helm_history.go","lineNumber":72,"sourceCode":"}\n\nfunc (h *History) bindKeys(aa *ui.KeyActions) {\n\tif !h.App().Config.IsReadOnly() {\n\t\th.bindDangerousKeys(aa)\n\t}\n\n\taa.Delete(ui.KeyShiftA, ui.KeyShiftN, tcell.KeyCtrlS, tcell.KeyCtrlSpace, ui.KeySpace, tcell.KeyCtrlD)\n\taa.Bulk(ui.KeyMap{\n\t\tui.KeyShiftN: ui.NewKeyAction(\"Sort Revision\", h.GetTable().SortColCmd(\"REVISION\", true), false),\n\t\tui.KeyShiftA: ui.NewKeyAction(\"Sort Age\", h.GetTable().SortColCmd(\"AGE\", true), false),\n\t})\n}\n\nfunc (h *History) getValsCmd(app *App, _ ui.Tabular, _ *client.GVR, path string) {\n\tns, n := client.Namespaced(path)\n\ttt := strings.Split(n, \":\")\n\tif len(tt) < 2 {\n\t\tapp.Flash().Err(fmt.Errorf(\"unable to parse version in %q\", path))\n\t\treturn\n\t}\n\tname, rev := tt[0], tt[1]\n\th.Values = model.NewRevValues(h.GVR(), client.FQN(ns, name), rev)\n\tv := NewLiveView(h.App(), \"Values\", h.Values)\n\tif err := v.app.inject(v, false); err != nil {\n\t\tv.app.Flash().Err(err)\n\t}\n}\n\nfunc (h *History) bindDangerousKeys(aa *ui.KeyActions) {\n\taa.Add(ui.KeyR, ui.NewKeyActionWithOpts(\"RollBackTo...\", h.rollbackCmd,\n\t\tui.ActionOpts{\n\t\t\tVisible:   true,\n\t\t\tDangerous: true,\n\t\t},\n\t))\n}","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/derailed/k9s/blob/2d3ccc6ba2ce98c3781bfc441bb3e884f072774f/internal/view/helm_history.go#L54-L90","documentation":"Helm history rows encode the resource path as ns/name:revision; getValsCmd() splits the name on ':' and requires at least two parts to extract (name, revision) for fetching revision values. If the selected row's name has no ':revision' suffix, the split yields 1 part and this error flashes before anything loads.","triggerScenarios":"Invoking the values action on a helm history row whose NAME column contains a plain release name without ':<rev>' — corrupted/stale table data, a custom column set that overwrote NAME, or a helm model that failed to append the revision suffix.","commonSituations":"Custom skins/views altering the NAME column format for helm history; pending-install releases where the revision is not yet assigned; version mismatches between k9s view and model code after partial upgrades.","solutions":["Refresh the helm history view (:helm <release>) and retry on a freshly listed row","Check you are on the stock helm history view — the row must look like 'myrelease:3'","Verify the release with helm history <release> -n <ns>; if revisions exist but the row lacks them, upgrade k9s"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// guard the split before acting on the selection\nif !strings.Contains(n, \":\") {\n    app.Flash().Errf(\"row %q lacks the name:revision format — refresh the view\", path)\n    return\n}\nname, rev, _ := strings.Cut(n, \":\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always act on freshly refreshed helm history rows — stale rows lose the :revision suffix","Do not customize the NAME column for the helm history view","Validate name:revision shape before splitting when extending helm views"],"tags":["kubernetes","k9s","helm","parsing","table-data"],"backgroundTag":null,"analyzedSha":"2d3ccc6ba2ce98c3781bfc441bb3e884f072774f","analyzedAt":"2026-08-15T16:09:14.432Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}