Skip to content

feat(achievements): five badges for recent features and a "not available here" tile (v2.39.0) - #198

Merged
krazymir merged 1 commit into
mainfrom
claude/new-functionality-badges-dc54c8
Oct 20, 2026
Merged

krazymir merged 1 commit into
mainfrom
claude/new-functionality-badges-dc54c8

Conversation

@krazymir

Copy link
Copy Markdown
Contributor

Implements SKILLY_SPEC.md §31.12 (spec reviewed and approved before the build).

What changes for users

Five new achievements (catalog 26 → 31):

Badge Earned when
🙌 Hype Squad your first hype is accepted
🔗 Word of Mouth you mint your first share link
✨ Glow Up you submit a skill / new version with an icon you chose
🤖 Robot Sidekick an AI draft comes back — propose-form draft (§43) or an improvements run (§44)
🖌️ Fresh Coat a re-clone moves one of your installs to a higher stable version

A locked badge whose feature is switched off for you (hype, AI, MCP, marketplaces, and Three Doors Down via its parts) now reads "Not available here yet — your administrator decides whether it's switched on." instead of an un-actionable how-to hint. The level total and the Hero rule are unchanged.

Robot Sidekick's copy uses the admin-set AI display name (§40.14) everywhere, including the notification.

Implementation

  • Shared: catalog entries; achievementCopy / achievementNamesAi ({name} substitution); unavailableAchievements(held, flags); submissionChoosesIcon; isForwardUpdate.
  • Web: award hooks in placeHype (transactional), the share mint (moved into lib/shareLinks.ts), createProposal() / directPublish() (icon, transactional, compared against the icon before the version syncs it), draftWithAi() and runDraft(); unavailable on the owner's GET /api/users/:id/achievements (lib/achievementFlags.ts, plus marketplaceReachable next to the directory query); the grid renders the tile and the substituted copy; award helpers substitute the display name in the achievement.earned blurb; the deferred Habits backfill reads the new sources.
  • Worker: the /info/refs stamp returns the previous last_served_semver and awards Fresh Coat (system installs and pinned installs never move).
  • Migration 0099: backfills first_hype, first_share, first_icon, first_ai_draft (no schema change); Fresh Coat has no provable history and is not seeded.
  • Spec corrections made during the build: MCP proposals carry no icon fields, so there is no MCP door for Glow Up; bundle-borne icons reach the payload as ordinary icon fields, so they are judged (and backfilled) by the same rule.

Verified locally

  • pnpm typecheck ✅ · shared unit 583/583 ✅ · web unit 242/242 ✅ · worker unit 204 pass (13 DB-gated skipped) ✅
  • Live-DB: new recentBadges.dbtest.ts 6/6 ✅; worker integration/freshCoat.test.ts 1/1 ✅; touched dbtests re-run one file at a time — achievements 9, encore 3, hype 1, aiDraft 1, qualityDraft 1, proposals 14, marketplaceDirectory 1, follows 6 — all ✅

Not verified locally

  • The Playwright e2e changes (hype.spec.ts new test: Hype Squad earned + the switched-off tile on /profile; achievements.spec.ts badge counts now read ACHIEVEMENT_TOTAL — they still said 24 from before the catalog reached 26). Type-checked only; left to CI / your environment.
  • No manual browser pass of the profile card's new tile.
  • Migration 0099 was exercised by the dbtest against the shared dev DB but is not recorded in its _schema_migrations.

🤖 Generated with Claude Code

…ble here" tile (v2.39.0)

Spec §31.12. The catalog grows from 26 to 31:
- Hype Squad (first_hype): an accepted hype, awarded in the hype transaction.
- Word of Mouth (first_share): a share-link mint (moved into lib/shareLinks.ts).
- Glow Up (first_icon): a proposal or direct publish setting an icon the user chose
  (differs from the skill's current icon; promotions excluded).
- Robot Sidekick (first_ai_draft): a usable propose-form draft (§43) or an improvements
  run with an AI-drafted file (§44); its copy uses the AI display name ({name}).
- Fresh Coat (first_update): the gateway stamp sees an install move to a higher stable
  version (worker).

Locked badges whose feature is switched off for the owner (hype, AI, MCP, marketplaces,
Three Doors Down) now show "Not available here yet" instead of the how-to hint, via a new
`unavailable` list on the owner's achievements response. Level total and Hero rule unchanged.

Migration 0099 backfills hype, share, icon and AI history (Fresh Coat is not provable) and
the deferred Habits backfill reads the new sources. Tests: shared unit, grid unit, a new
recentBadges dbtest, award assertions in the aiDraft/qualityDraft dbtests, a worker
freshCoat integration test, and e2e for the hype badge + tile; stale e2e badge counts fixed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@krazymir
krazymir merged commit 66c0509 into main Oct 20, 2026
9 checks passed
@krazymir
krazymir deleted the claude/new-functionality-badges-dc54c8 branch October 20, 2026 10:00
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.

2 participants