Skip to content

feat(claw): detect image-tag-only updates and make upgrade one-click#1355

Merged
St0rmz1 merged 3 commits intomainfrom
feat/claw-update-available-image-tag
Mar 23, 2026
Merged

feat(claw): detect image-tag-only updates and make upgrade one-click#1355
St0rmz1 merged 3 commits intomainfrom
feat/claw-update-available-image-tag

Conversation

@St0rmz1
Copy link
Contributor

@St0rmz1 St0rmz1 commented Mar 20, 2026

Summary

  • Show "Update available" badge when a newer image exists even without a CalVer bump (e.g. controller-only changes that produce a new img-{hash} tag)
  • The badge is now a clickable button that opens the "Redeploy or Upgrade" dialog with "Upgrade to latest" preselected
  • Version Pinning "Current Status" panel now displays current and latest image tags in a table layout
  • Version Pinning card restructured to a consistent two-column layout (pinning controls left, status right) with the pin button inline next to the version selector

Verification

  • pnpm run typecheck — passes
  • pnpm run lint — passes
  • pnpm run format:check — passes
  • Verified imageTagDiffers is gated on hasVersionInfo so the badge cannot appear during loading states
  • Verified latestImageTag is prop-drilled to VersionPinCard rather than fetched independently (avoids implicit coupling via query cache)
  • Confirmed existing CalVer-based update detection is unchanged — new logic only fires as a fallback when CalVer matches

Visual Changes

  • "Update available" badge — now clickable with hover state; tooltip shows the target image tag for image-only updates
  • Version Pinning panel — two-column layout: left column has description + version selector + pin button inline + reason field; right column has Current Status with "Following latest" pill, plus current/latest image tags in aligned table rows
  • Pin button — moved inline next to the version dropdown instead of being a standalone row
Screenshot 2026-03-20 at 4 38 46 PM Screenshot 2026-03-20 at 4 39 06 PM

Reviewer Notes

  • The cross tab upgrade trigger uses a toggle flag pattern (upgradeRequested boolean lifted to ClawDashboard, consumed
    via useEffect in InstanceControls). This is documented with an inline comment. it won't re-fire if the flag is already
    true, which is fine for a single-click flow but worth knowing
  • VersionPinCard no longer calls useKiloClawLatestVersion() directly — it receives latestImageTag as a prop from
    SettingsTab which already has the data. Both are react-query hooks that would share cache, but prop drilling keeps the component more presentational
  • The ClawDashboard.tsx diff includes a whitespace-only reformatting of the popularity message string (formatter fix, no logic change)

@kilo-code-bot
Copy link
Contributor

kilo-code-bot bot commented Mar 20, 2026

Code Review Summary

Status: 1 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0

Fix these issues in Kilo Cloud

Issue Details (click to expand)

No new issues on current gh pr diff lines.

Other Observations (not in diff)

Issues found outside the current PR diff that cannot receive inline comments:

File Line Issue
src/lib/kiloclaw/billing-lifecycle-cron.ts 595 Sweep 5 skips rows with stale stripe_schedule_id, so intro-price subscriptions with no live Stripe schedule never get repaired.
Files Reviewed (76 files)
  • .env.test - 0 issues
  • .specs/kiloclaw-billing.md - 0 issues
  • AGENTS.md - 0 issues
  • cloud-agent-next/wrapper/src/connection.ts - 0 issues
  • cloudflare-gastown/container/src/process-manager.ts - 0 issues
  • cloudflare-gastown/src/dos/Town.do.ts - 0 issues
  • cloudflare-gastown/src/dos/town/reconciler.ts - 0 issues
  • cloudflare-gastown/src/dos/town/review-queue.ts - 0 issues
  • cloudflare-gastown/src/dos/town/scheduling.ts - 0 issues
  • cloudflare-gastown/test/integration/reconciler.test.ts - 0 issues
  • kiloclaw/controller/src/config-writer.test.ts - 0 issues
  • kiloclaw/controller/src/config-writer.ts - 0 issues
  • kiloclaw/src/config.ts - 0 issues
  • kiloclaw/src/durable-objects/kiloclaw-instance.test.ts - 0 issues
  • kiloclaw/src/durable-objects/kiloclaw-instance/fly-machines.ts - 0 issues
  • kiloclaw/src/durable-objects/kiloclaw-instance/index.ts - 0 issues
  • kiloclaw/src/durable-objects/kiloclaw-instance/log.ts - 0 issues
  • kiloclaw/src/durable-objects/kiloclaw-instance/postgres.ts - 0 issues
  • kiloclaw/src/durable-objects/kiloclaw-instance/reconcile.ts - 0 issues
  • kiloclaw/src/fly/client.ts - 0 issues
  • kiloclaw/src/index.ts - 0 issues
  • kiloclaw/src/middleware/analytics.ts - 0 issues
  • kiloclaw/src/routes/api.ts - 0 issues
  • kiloclaw/src/routes/kiloclaw.ts - 0 issues
  • kiloclaw/src/routes/platform.ts - 0 issues
  • kiloclaw/src/types.ts - 0 issues
  • kiloclaw/src/utils/analytics.ts - 0 issues
  • kiloclaw/worker-configuration.d.ts - 0 issues
  • kiloclaw/wrangler.jsonc - 0 issues
  • packages/db/src/migrations/0057_backfill_billing_misclassified.sql - 0 issues
  • packages/db/src/migrations/meta/0057_snapshot.json - 0 issues
  • packages/db/src/migrations/meta/_journal.json - 0 issues
  • packages/db/src/schema-types.ts - 0 issues
  • packages/worker-utils/src/cloud-agent-next-client.ts - 0 issues
  • plans/kiloclaw-billing-promo-codes.md - 0 issues
  • src/app/(app)/claw/components/ClawDashboard.tsx - 0 issues
  • src/app/(app)/claw/components/CreateInstanceCard.tsx - 0 issues
  • src/app/(app)/claw/components/CreditsNudge.actions.ts - 0 issues
  • src/app/(app)/claw/components/CreditsNudge.tsx - 0 issues
  • src/app/(app)/claw/components/billing/SubscriptionCard.tsx - 0 issues
  • src/app/(app)/gastown/[townId]/layout.tsx - 0 issues
  • src/app/(app)/organizations/[id]/gastown/[townId]/layout.tsx - 0 issues
  • src/app/admin/components/KiloclawInstances/KiloclawInstanceDetail.tsx - 0 issues
  • src/app/admin/components/KiloclawInstances/KiloclawInstancesPage.tsx - 0 issues
  • src/app/api/internal/code-review-status/[reviewId]/route.test.ts - 0 issues
  • src/app/api/internal/code-review-status/[reviewId]/route.ts - 0 issues
  • src/app/api/openrouter/[...path]/route.ts - 0 issues
  • src/app/payments/topup/route.ts - 0 issues
  • src/components/admin-omnibox/action-registry.ts - 0 issues
  • src/components/gastown/DrawerStack.tsx - 0 issues
  • src/components/gastown/TerminalBar.tsx - 0 issues
  • src/components/gastown/TerminalBarContext.tsx - 0 issues
  • src/components/gastown/TerminalBarPadding.tsx - 0 issues
  • src/lib/config.server.ts - 0 issues
  • src/lib/forbidden-free-models.ts - 0 issues
  • src/lib/integrations/platforms/github/adapter.ts - 0 issues
  • src/lib/integrations/platforms/gitlab/adapter.ts - 0 issues
  • src/lib/kilo-auto-model.ts - 0 issues
  • src/lib/kiloclaw/billing-lifecycle-cron.ts - 1 issue
  • src/lib/kiloclaw/stripe-handlers.ts - 0 issues
  • src/lib/kiloclaw/stripe-price-ids.server.ts - 0 issues
  • src/lib/llm-proxy-helpers.ts - 0 issues
  • src/lib/models.ts - 0 issues
  • src/lib/processUsage.messages.ts - 0 issues
  • src/lib/providers/gigapotato.ts - 0 issues
  • src/lib/providers/index.ts - 0 issues
  • src/lib/providers/model-settings.ts - 0 issues
  • src/lib/providers/openrouter/index.ts - 0 issues
  • src/lib/providers/vercel/index.ts - 0 issues
  • src/lib/rewriteModelResponse.ts - 0 issues
  • src/lib/stripe.ts - 0 issues
  • src/routers/admin-kiloclaw-instances-router.ts - 0 issues
  • src/routers/kilo-pass-router.ts - 0 issues
  • src/routers/kiloclaw-billing-router.test.ts - 0 issues
  • src/routers/kiloclaw-router.ts - 0 issues
  • src/tests/openrouter-models-sorting.approved.json - 0 issues

Reviewed by gpt-5.4-20260305 · 3,200,881 tokens

@St0rmz1 St0rmz1 linked an issue Mar 20, 2026 that may be closed by this pull request
@St0rmz1 St0rmz1 merged commit e715789 into main Mar 23, 2026
18 checks passed
@St0rmz1 St0rmz1 deleted the feat/claw-update-available-image-tag branch March 23, 2026 16:44
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.

Show "Update available" when image tag changes (not just calver)

2 participants