The cache-header fix left /assets_px and /assets_masks with no explicit
policy, so webviews refetched 100+ sprite layers per open after cache
flushes. Art is frozen; a week of explicit caching makes gardens load
instantly after first visit.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Chat v2: player DMs and agent voice in the Smoke Room
Yufok1+1: Claude Fable 5
c1f0c16
DMs: private threads between growers with conversation list, tap-a-name
to DM from the room, same guards as world chat (no links/handles, rate
limit, 280 chars); ghost names 404, the broker declines small talk.
Agent tools smoke_read/smoke_say under a new 'social' scope let an
authorized agent speak as its player - sharing the player's rate
bucket. Private channels deferred until the guild system.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Cache-bust app entry: version-stamped open URLs
Yufok1+1: Claude Fable 5
55fdd27
Bot open buttons carry a per-boot version param and the splash enters
game.html with a fresh stamp, so stale webview caches can never serve
an old build again.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Telegram webviews cache aggressively and were showing stale builds
after deploys; HTML now always revalidates while hashed bundles cache
forever.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The Smoke Room: world chat tab
Yufok1+1: Claude Fable 5
947cd1b
Public in-game chat open to free players. Text only, 280-char cap,
5-second per-user rate limit, and a hard filter on links/handles so
the room can never become a storefront. Last 200 messages kept in
world state; client polls every 2.5s in a new Smoke Room tab.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Real-time growth: growTime days become wall-clock seconds
Yufok1+1: Claude Fable 5
6212a21
Growing a seed starts a seedling timer (growTime trait, 1 day = 1s,
clamped 10-300s); seedlings mature automatically when it elapses, even
while the player is away. Breeding and cloning now require MATURE
plants, making growth a real time sink and growTime a strategy stat.
Client shows live countdowns on seedlings and auto-refreshes on
maturation; agent tools report grow status and wait times.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Free-to-play model: 25 lifetime free crosses, pass gates features not entry
Yufok1+1: Claude Fable 5
bd2a0cb
Entry is now free. Free players get FREE_BREED_LIMIT lifetime breeds
(default 25), unlimited cross prediction, full leaderboards, and
read-only market access. The Breeder's Pass gates cloning, market
writes, Agent Control sessions, and breeding past the limit. Splash,
bot copy, and README updated; gardens are never deleted.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Remove temporary admin-grant test route
Yufok1+1: Claude Fable 5
30179e3
Live payment-path finalization complete: grant verified on production
storage ({"granted":true,"verifiedOnDisk":true}).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
TEMP: admin-grant route for live payment-path finalization test
Yufok1+1: Claude Fable 5
24a0508
Guarded by ADMIN_TEST_KEY secret; exercises grantPass/hasPass (the exact
functions the payment webhook calls) on production storage. Removed
after the test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add /help bot command reply
Yufok1+1: Claude Fable 5
a9043a4
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Filter broker rows from leaderboard reads to purge legacy entries
Yufok1+1: Claude Fable 5
fa9566a
The write-skip guard alone left pre-guard broker rows in stored data;
filtering on load hides them immediately and the next save sweeps them.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Broker reverse transactions: listings, resale of amassed stock, deal judgment
Yufok1+1: Claude Fable 5
407b140
New broker_make_listing tool lets the broker sell: it prefers relisting
rare genetics amassed from player trades (real secondhand market) and
falls back to catalog clones, always with buyout terms. Offers on broker
listings resolve automatically - accepted at >=75% of listing valuation
with full asset transfer, countered with explicit terms below it.
fill_listing handles broker-resolved offers; broker holdings are
excluded from the leaderboard.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add egress probe route and env-configurable Telegram API base
Yufok1+1: Claude Fable 5
f83d6a5
/telegram/probe reports from inside the container whether example.com,
api.telegram.org, and deno.com are reachable, to scope HF's egress
blocking. TELEGRAM_API_BASE/TELEGRAM_RELAY_KEY env vars let Bot API
calls route through an external relay once one exists.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Retry Telegram webhook registration until it succeeds
Yufok1+1: Claude Fable 5
7bcd006
One-shot setup at boot died on a transient connect timeout to
api.telegram.org, leaving the bot deaf. Retry with backoff and log
attempts so persistent failure is visible as an egress problem.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add PASS_FREE_USER_IDS owner bypass for the Breeder's Pass gate
Yufok1+1: Claude Fable 5
6e4f01b
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Port WEED-SIM from Reddit/Devvit to Telegram Mini App on HF Space
Yufok1+1: Claude Fable 5
3f61b9c
Replace Devvit runtime with platform adapter: file-backed KV under a
Storage Bucket mount, Telegram initData HMAC identity with stable
persisted usernames, Breeder's Pass entitlements via Telegram Stars
(invoice + self-configuring payment webhook). Client runs as a Telegram
WebApp; splash gates entry; agent handoff and agent_bootstrap now point
external agents at /external/mcp with the session-token header. Reddit
plumbing (menu, triggers, post, devvit.json) removed. Node 22 Dockerfile
replaces the Python/FastAPI app; README regains HF Space frontmatter.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Checkpoint Devvit v0.0.26
Yufok1+1: Claude Opus 4.8
616ae7b
Rarity schema + granulated rarity depictions, and a new-plant NEW badge
so freshly bred seeds are not lost in the alphabetized seed list.
- Add src/shared/valuation.ts: 9-tier rarity schema (common -> primordial)
with bounded rarityIndex (0-100 collectibility, generation saturates so
top tiers stay scarce) and unbounded rarityScore (market valuation);
exported via shared/index.ts
- Depict tiers per seed card: rarity-* left-border colors + primordial
glow and matching rarity-chip text colors (index.css, game.tsx:1900)
- NEW badge for freshly bred seeds: newSeedIds diffed against
knownSeedIdsRef, keyed by seed id so it survives sorting, cleared by
acknowledgeNew; is-new pulse + new-badge (game.tsx, index.css)
- breeder: de-dupe offspring strain name against existing seeds
- lab/predictCross: summary_only + downsample to shrink payload
- color: add vibrance() helper; api: summary_only request field;
agentLink route adjustments
Co-Authored-By: Claude Opus 4.8 <noreply@anthr…