chore: HexoKit app identity (plan row R0, deferred to Phase 3) — hexokit command name, Electron/bundle/asset names, config.yaml - #950
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved desktop migration/install issues and related branding and logging gaps block approval.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Rebrands run-kit’s product-facing surfaces to HexoKit while preserving existing substrate names and compatibility aliases.
Changes:
- Updates README, documentation, specifications, memory, and project metadata.
- Renames desktop product/artifact surfaces and adds legacy migration support.
- Updates Cobra naming, shell completions, and desktop release handling.
File summaries
| File | Summary | Findings |
|---|---|---|
README.md |
Updated branding and install messaging. | — |
fab/project/config.yaml |
Renamed project metadata. | — |
fab/plans/sahil/26-09-10-hexokit-rebrand.md |
Updated rebrand plan status. | — |
fab/changes/260911-mvuv-hexokit-brand-surfaces/plan.md |
Defined implementation plan. | — |
fab/changes/260911-mvuv-hexokit-brand-surfaces/intake.md |
Defined change scope and requirements. | — |
fab/changes/260911-mvuv-hexokit-brand-surfaces/.status.yaml |
Recorded change status. | — |
fab/changes/260911-mvuv-hexokit-brand-surfaces/.history.jsonl |
Recorded pipeline history. | — |
docs/specs/window-views.md |
Updated specification branding. | — |
docs/specs/ui-state.md |
Updated specification branding. | — |
docs/specs/themes.md |
Updated specification branding. | — |
docs/specs/status-pyramid.md |
Updated specification branding. | — |
docs/specs/short-term-goal.md |
Updated specification branding. | — |
docs/specs/right-panel.md |
Updated specification branding. | Nit (1): Remaining run-kit-managed prose must be updated. |
docs/specs/project-plan.md |
Updated specification branding. | — |
docs/specs/mcp.md |
Updated specification branding. | — |
docs/specs/index.md |
Updated specification branding. | — |
docs/specs/design.md |
Updated specification branding. | — |
docs/specs/code-bridge.md |
Updated specification branding. | — |
docs/specs/cli-layering.md |
Updated specification branding. | — |
docs/specs/architecture.md |
Updated specification branding. | — |
docs/specs/api.md |
Updated API specification branding. | Nit (1): Remaining identity prose must be updated while retaining literal protocol names. |
docs/specs/agent-state.md |
Updated specification branding. | — |
docs/specs/agent-messaging.md |
Updated specification branding. | — |
docs/site/workflows.md |
Updated site branding. | — |
docs/site/skill/tutorial.md |
Updated skill documentation. | — |
docs/site/skill/mux.md |
Updated skill documentation. | — |
docs/site/skill/messaging.md |
Updated skill documentation. | — |
docs/site/skill/gui.md |
Updated skill documentation. | — |
docs/site/skill/display.md |
Updated skill documentation. | Nit (1): Remaining run-kit identity prose must be changed and the embedded copy synchronized. |
docs/site/skill/cron.md |
Updated skill documentation. | — |
docs/site/skill/code.md |
Updated skill documentation. | — |
docs/site/skill.md |
Renamed the skill bundle. | — |
docs/site/install.md |
Updated installation branding and bundle naming. | — |
docs/site/customizing-tmux.md |
Updated identity prose. | — |
docs/site/cron-schedule-kinds.md |
Updated page branding. | — |
docs/site/agent-hooks.md |
Updated product references. | — |
docs/memory/run-kit/toolkit-standards.md |
Updated branding and standards memory. | — |
docs/memory/run-kit/desktop-shell.md |
Updated desktop behavior memory. | — |
docs/memory/run-kit/build-and-release.md |
Updated build and release memory. | — |
docs/memory/run-kit/architecture/overview.md |
Updated architecture memory. | — |
app/desktop/src/window-registry.test.ts |
Updated product-name fixtures. | — |
app/desktop/src/welcome/welcome.ts |
Updated desktop error branding. | — |
app/desktop/src/user-data-migration.ts |
Added legacy user-data carry-forward. | Moderate (2): Migration failures are silently suppressed instead of logged. |
app/desktop/src/user-data-migration.test.ts |
Tested user-data migration. | — |
app/desktop/src/main.ts |
Set product name and migration startup. | Nit (2): Welcome and interstitial page titles still say Run Kit. |
app/desktop/package.json |
Updated package description. | — |
app/desktop/electron-builder.yml |
Updated product and artifact names. | — |
app/backend/internal/desktop/restart.go |
Updated current/legacy app restart handling. | — |
app/backend/internal/desktop/release.go |
Added current and legacy asset resolution. | Moderate (2): Legacy-prefix fallback can resolve assets that installation rejects. |
app/backend/internal/desktop/release_test.go |
Tested asset resolution. | — |
app/backend/internal/desktop/installed.go |
Detects current and legacy installations. | Moderate (1): Same-version legacy-only installs can bypass migration. Critical (2): Running legacy bundles may not be detected before removal. |
app/backend/internal/desktop/installed_test.go |
Tested legacy detection. | — |
app/backend/internal/desktop/install.go |
Installs and removes desktop bundles. | — |
app/backend/internal/desktop/install_test.go |
Tested bundle installation and migration. | — |
app/backend/internal/desktop/desktop.go |
Defines current and legacy bundle names. | — |
app/backend/cmd/rk/upgrade.go |
Updated desktop upgrade integration. | — |
app/backend/cmd/rk/upgrade_test.go |
Tested desktop upgrade integration. | — |
app/backend/cmd/rk/skill/tutorial.md |
Synchronized embedded skill documentation. | — |
app/backend/cmd/rk/skill/skill.md |
Synchronized embedded skill documentation. | — |
app/backend/cmd/rk/skill/mux.md |
Synchronized embedded skill documentation. | — |
app/backend/cmd/rk/skill/messaging.md |
Synchronized embedded skill documentation. | — |
app/backend/cmd/rk/skill/gui.md |
Synchronized embedded skill documentation. | — |
app/backend/cmd/rk/skill/display.md |
Synchronized embedded skill documentation. | — |
app/backend/cmd/rk/skill/cron.md |
Synchronized embedded skill documentation. | — |
app/backend/cmd/rk/skill/code.md |
Synchronized embedded skill documentation. | — |
app/backend/cmd/rk/shell_init.go |
Registered completion aliases. | — |
app/backend/cmd/rk/shell_init_test.go |
Tested completion output. | — |
app/backend/cmd/rk/root.go |
Renamed the Cobra root command. | — |
app/backend/cmd/rk/root_test.go |
Updated root command tests. | — |
app/backend/cmd/rk/mcp_test.go |
Updated help-dump path expectations. | — |
app/backend/cmd/rk/help_dump.go |
Derived tool name from the Cobra root. | — |
app/backend/cmd/rk/help_dump_test.go |
Updated help-dump tests. | — |
app/backend/cmd/rk/desktop.go |
Updated desktop CLI branding. | Moderate (1): Same-version legacy installs can report success without migration. Moderate (1): Update flow has the same legacy-only short-circuit. |
app/backend/cmd/rk/desktop_test.go |
Updated desktop CLI tests. | — |
Review details
Suppressed comments (6)
app/backend/cmd/rk/desktop.go:201
- Because
InstalledVersionnow recognizes a legacy-onlyRun Kit.app, this equality short-circuit can report “already installed” while noHexoKit.appexists. That leaves the old bundle in place and even prints the nonexistent current path; a same-version legacy install must still run the rename/migration, or the no-op condition must require the current bundle.
sink.Dataf("HexoKit v%s is already installed (%s). Use --force to reinstall.\n", installed, ins.AppPath())
app/backend/cmd/rk/desktop.go:259
- The update flow has the same legacy-only edge case: when
InstalledVersionreports aRun Kit.appat the latest version, the earlier equality check returnsAlready up to datebeforeInstallcan createHexoKit.appand remove the legacy bundle. The no-op path must distinguish a legacy-only install.
sink.Dataf("Updated HexoKit v%s -> v%s (%s)\n", installed, res.Version, res.Path)
app/backend/internal/desktop/installed.go:29
- Because
InstalledVersionreports the legacyRun Kit.appversion, the version-only short-circuit inrunDesktopInstalltreats a same-version legacy install as already complete and never installsHexoKit.app;desktopUpdateToLatesthas the same behavior forrk desktop updateand the umbrella update. A user on the latest legacy version therefore remains unmigrated unless they know to pass--force, contrary to the one-release migration in R8. Make the no-op conditional on the current bundle being present (or expose whether the detected bundle is legacy) so equal-version legacy installs still migrate.
func (ins *Installer) installedBundlePath() string {
newPath := ins.AppPath()
if _, err := os.Stat(filepath.Join(newPath, "Contents", "Info.plist")); err == nil {
return newPath
}
legacyPath := filepath.Join(ins.InstallDir, legacyAppBundleName)
if _, err := os.Stat(filepath.Join(legacyPath, "Contents", "Info.plist")); err == nil {
return legacyPath
}
return newPath
docs/site/skill/display.md:1
- The page still contains
# same run-kit originon line 20. That is prose describing the product server, not a command, path, roster, or payload token, so the R4 prose-only check still reports an old product name; change it toHexoKitand sync the embedded skill copy.
docs/specs/api.md:1 - The spec still contains identity prose at lines 419 (
run-kit's own row) and 523 (reaches run-kit over stdio). These are not payload, path, wire, or repo-column tokens, so the R13 remaining-hit acceptance fails and the rebranded spec contradicts itself; update those sentences while retaining the literal JSON/tool names.
docs/specs/right-panel.md:163 - The topology paragraph still calls the instance
run-kit-managedon line 152. This is present-tense explanatory prose rather than a path or wire token, so it leaves an old product hit in the rebranded spec and violates R13's classification; use the intended HexoKit orrkwording consistently.
- Files reviewed: 75/75 changed files
- Comments generated: 4
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| defer cancel() | ||
| _, err := ins.Run(probeCtx, "pgrep", "-f", filepath.Join(ins.AppPath(), "Contents", "MacOS")) | ||
| _, err := ins.Run(probeCtx, "pgrep", "-f", filepath.Join(ins.installedBundlePath(), "Contents", "MacOS")) | ||
| return err == nil |
There was a problem hiding this comment.
Fixed — the swap-boundary probe now covers both bundle names: installedBundlePaths lists every installed bundle, runningBundlePath finds the one with a live process, and Install quits that bundle by its own name (a live legacy "Run Kit" install is quit and removed gracefully instead of being deleted mid-run). (26d9bc6)
| // Prefer the current prefix; fall back to the pre-rename prefix so a | ||
| // release carrying either artifact naming resolves (the rename ships one | ||
| // release ahead of any consumer that still publishes the old name). | ||
| for _, prefix := range []string{assetPrefix, legacyAssetPrefix} { |
There was a problem hiding this comment.
Fixed — Install now accepts a mounted Run Kit.app bundle from a legacy-prefix DMG: the staged ditto copy lands it under HexoKit.app, so the rename happens as part of the install. Added TestInstallLegacyBundleRenamed covering the end-to-end mount → rename → install flow. (26d9bc6)
| } catch { | ||
| // Fresh-install degradation — never block startup on the carry-forward. | ||
| } |
There was a problem hiding this comment.
Fixed — the catch now logs the error (including how many files were copied before the failure) via console.warn while keeping the non-blocking fresh-install degradation, per the logged-and-ignored requirement. (26d9bc6)
| const DEV_HOST_ID = "__dev__"; | ||
|
|
||
| const PRODUCT_NAME = "Run Kit"; | ||
| const PRODUCT_NAME = "HexoKit"; |
There was a problem hiding this comment.
Fixed — the bundled shell pages now carry the new name: welcome.html is "HexoKit — Connect" and interstitial.html is "HexoKit — Host unavailable". (26d9bc6)
… + released v0.1.31, C7 done in six repos, C3 draft #950 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
292f148 to
4e716d2
Compare
849886a to
4fbd7c9
Compare
…ons, Electron productName/artifactName + userData carry-forward, rk desktop bundle/asset prefix, config.yaml project name The app-identity half of the former #950 scope, rebased onto current main on top of the C3a prose branch (#952). Deferred to Phase 3 per fab/plans/sahil/26-09-10-hexokit-rebrand.md row R0.
4e716d2 to
256c97d
Compare
…kill H1s, specs identity lines (#952) * docs: flip run-kit's brand prose to HexoKit (C3a) — README head per the revised standards, docs/site + skill H1s, specs identity lines Prose-only split of #950: no command, app, bundle, asset, or path name changes (those stay on #950 as Phase 3 row R0). Records #952 (C3a) and #950 (R0) in the rebrand plan rows. * Update review-pr status --------- Co-authored-by: Sahil Ahuja <sahilahuja@gmail.com>
…ons, Electron productName/artifactName + userData carry-forward, rk desktop bundle/asset prefix, config.yaml project name The app-identity half of the former #950 scope, rebased onto current main on top of the C3a prose branch (#952). Deferred to Phase 3 per fab/plans/sahil/26-09-10-hexokit-rebrand.md row R0.
256c97d to
6193071
Compare
…arked on #950); Phase 2 unblocked Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
DO NOT MERGE UNTIL PHASE 3 |
Meta
mvuvexcludes
fab/,docs/· generated by fab-kit v2.25.1Pipeline: intake ✓ → apply ✓ → review ✓ → hydrate ✓ → ship → review-pr
Summary
Flips run-kit's own brand surfaces to HexoKit (rebrand plan row C3, Phase 1) — README/docs/specs identity prose, the desktop app's productName/artifactName, and the cobra root command name — while keeping the substrate (
rkbinary,RK_*env vars,@rk_*tmux options, on-disk paths, repo and formula names) untouched. Includes the two small migrations the flips cause: the Electron userData carry-forward ofhosts.json/windows.json(D9), and shell-completion registration under all three invocation names. Doing C3 now unblocks Phase 2 (the hexokit.com site cutover prep depends on it).Changes
rk desktop(Go) — bundle name and release-asset prefix follow D8hexokitbecomes the command name;run-kitkeeps working