Dev GardenGreenhouse Notes
查看 Markdown 原件 打开原型
Project Recordnotes/decision-log.md

Decision Log

2026-07-20

  • Started as a private local house jam prototype.
  • Chose static HTML, CSS, and JavaScript so it can run without a server.
  • First scope is three plants, three visitors, and three resources.
  • Soft-bodied insects are deferred to avoid making the first prototype unpleasant.
  • Plants do not die from neglect; they pause when dry.

2026-07-29

  • Added a visitor seed loop: blooming plants can attract visitors, and observing visitors can bring ordinary or rare seeds.
  • Added sparrow as the first non-insect visitor.
  • Added wildberry flower as a rare seed line introduced through visitors.
  • Deferred soil type, pH, shelves, and rotting until the basic ecology loop feels good.
  • Added finite bloom periods and a decline state, so a planted flower is not permanent.
  • Added plant-specific comfortable water ranges. Too dry or too wet slows growth and builds recoverable stress.
  • Added persistent pot nutrients and compost. Growth spends nutrients; harvest or decline returns compost.
  • Chose soft failure: a prematurely declined plant still returns one seed and compost, preventing a bad watering decision from blocking progress.
  • Replaced repeated visitor-record buttons with a short visible arrival timer and automatic resolution.
  • Added visitor cards with levels at 1, 3, and 7 visits. Higher levels improve note rewards and seed discovery.
  • Made petals the first tool currency.
  • Added a simple waterer that costs 6 petals, remains installed on one pot, and lasts for 8 actual watering triggers.
  • Replaced petals as hard currency with coins because money makes selling, saving, and tool purchases more legible.
  • Migrated existing petals to coins at a 1:6 ratio.
  • Changed the simple waterer price to 24 coins.
  • Added an explicit bloom decision: cut and sell for reliable income, or keep the bloom for visitor progress and rare-seed chances.
  • Reduced rare visitor-seed probabilities and made card-level bonuses gentler for rare drops.
  • Added a dedicated rare-seed discovery card so infrequent outcomes feel materially different from ordinary log events.
  • Replaced repeated per-pot buttons with one contextual action bar for the selected pot.
  • Added progressive disclosure: compost, visitor records, and tools appear only after the player encounters their purpose.
  • Removed the blocking sell-or-observe choice because it conflicted with future automation.
  • Bloom now creates a continuous freshness tradeoff: waiting gives visitor opportunities while sale value declines.
  • Added per-plant flower quantity. Low care stress and rich soil each add one flower at bloom.
  • Responsive behavior is acceptable for the current prototype but needs a dedicated later pass. Priorities are compact mobile pot cards, a non-obstructive contextual action bar, sensible resource wrapping, and avoiding excessive vertical scrolling as more systems unlock.
  • Added persistent flower-material inventory as an alternative to immediate bloom sales.
  • Added two permanent orders: a common-flower daily bouquet and a mint-heavy night sachet with one rare moonflower accent.
  • Kept order delivery manual and singular. The new decision happens at harvest, while repeated per-item crafting clicks remain avoided.
  • Set the first material-demand playtest criterion: after unlocking moonflower, the player should still deliberately plant mint rather than treating it as obsolete.
  • Orders now reveal in stages based on completed-order count. Locked visible orders explicitly name missing plant discoveries, visitor-card levels, and materials so unmet demand guides the next goal.
  • Added a third long-horizon order after three completions: woodland essence requires calendula, rare wildberry flowers, and a level-two sparrow card.
  • First external playtest reported excessive clicking. Early activity remains intentional, but one corrective action now resolves water to the selected plant's comfortable midpoint instead of requiring repeated clicks.
  • Aphids now expose an immediate "rinse aphids" action. Treating them removes the growth penalty and records one observation note; waiting for a ladybug remains optional rather than mandatory.
  • Added two paid flower-bed expansions: four to six positions, then six to eight. Expansion is also a stress test for whether later automation arrives soon enough.
  • Added replaceable CSS lifecycle placeholders for seed, seedling, growth, bud, bloom, and decline, plus lightweight animated visitor markers. Final plant and visitor art remains deferred for the creator's own assets.
  • First expansion now reveals a permanent central tank for 160 coins. It automates dry-pot correction across the garden and leaves harvest and production decisions manual.
  • Increased sparrow's base wildberry-seed chance from 2.5% to 4%. Failed attempts create visible wildberry clues, with a guaranteed seed on the eighth attempt.
  • Fixed unreliable action confirmation caused by the one-second render cycle replacing buttons between pointer-down and pointer-up. Rendering is now queued until the active press resolves.
  • Added pressed-state feedback, stable 44-pixel contextual actions, visible focus treatment, and immediate planting confirmation.
  • Flower yield is now represented directly on each blooming plant: one rendered flower head per harvested flower, plus a compact quantity strip with exact material count and current sale price.

2026-07-31

  • Added a soil lab after two completed orders, granting four mixing kits and two hydrangea seeds.
  • Added persistent three-state soil pH per planting position: acidic, neutral, and alkaline. It can only be changed while the position is empty and never decays with time.
  • Kept mismatch gentle: adjacent pH slows growth, while the strongest mismatch also removes one flower. It does not directly add stress or kill plants.
  • Added hydrangea as the pH demonstration plant. Acidic soil creates blue flowers, neutral soil purple flowers, and alkaline soil pink flowers.
  • Hydrangea colors are separate flower materials and discoveries. The first color order uses common mint as a base with blue hydrangea as an accent.
  • Deferred numeric pH, soil texture, drainage, salinity, and other parameters until the simple three-state model is playtested.
  • Freshness now affects stocked flower material as well as direct sale price. The three visible tiers preserve at least one usable flower while closing the strategy of waiting indefinitely and stocking at full value.
  • Strengthened the soil lab as an operation center. Each empty bed now names its own persistent profile, says that adjustment only affects that bed, and exposes an inline kit purchase or missing-coin hint when supplies run out.
  • Playtesting found that per-bed pH controls added more visual and cognitive clutter than pleasure. Removed the repeated controls from the main garden and isolated soil preparation inside the lab.
  • Replaced abstract mixing kits with two concrete shop materials: acidic substrate and garden lime. Each creates one specialist bed for three completed harvests; ordinary soil is free, and no effect decays with real time or offline progress.
  • Existing saves migrate old mixing-kit stock into both experimental material types so the prototype does not erase progress during this test.

2026-08-05

  • Clarified the core fantasy: quick, satisfying care loops are the main entertainment engine; real plant knowledge and quiet research form a supporting long loop.
  • Kept the private greenhouse as the protected heart of the game. Competitions may reframe it, while any future business system must remain reversible.
  • Selected a cultivation competition as the next vertical slice before adding more plant species.
  • Accepted a separate event pavilion, persistent event reminder, explicit stage timeline, locked submission, and category-by-category judging reveal.
  • Competition design targets two reward peaks: cultivation success followed by recognition or high-value sale.
  • Accepted bounded gambling through visible entry costs, candidate choice, researchable judge preference, and later price-setting risk. Rejected result-defining hidden randomness.
  • Event failure may cost money, consumables, and active opportunity time, but must return knowledge, compost, clues, reputation, or future advantage.
  • Limited event selling is accepted as the second event increment. Full flower-shop operation, loans, branding, employees, and bankruptcy remain separate research topics.
  • Rejected real-time event FOMO and offline interest. Event deadlines and future debt must advance through visible in-game cycles.
  • Created layered project records: vision, event specification, status backlog, learning board, concise development log, and a separate local Dev Garden dashboard.
  • Kept Markdown as the source of truth and added generated offline reading pages inside Dev Garden, avoiding a server or public documentation service.
  • Implemented the Spring Grower's Cup after one completed order with a 30-coin fee, two event pots, and four planting rounds. Planting consumes a round; real and offline time do not.
  • Selected two first prompts: at least four flowers or at least 70% freshness. Existing plant properties are sufficient for the first competition.
  • Judge preference is hinted for free and revealed for 3 observation notes. Submission shows a range before locking; final uncertainty is limited to a visible -2 to +2 impression adjustment.
  • Scoring reveals brief compliance, condition, cultivation quality, difficulty, and judge preference one at a time after one start action.
  • Bronze, silver, and gold ribbons extend future bloom windows by 10%, 18%, and 25%. Only the strongest Spring Cup ribbon applies.
  • Event closing returns one seed from each remaining candidate. An unsuccessful run still grants notes and compost, protecting unique seeds and the private greenhouse.
  • The first shared beta uses a public direct link with no player authentication. Game progress remains per-browser local storage; account-based and cross-device saves are deferred.
  • Feature feedback is collected separately from game saves. Reports may include version, viewport, and coarse progression context, but not email or full save contents.
  • Netlify static hosting and Forms are the first beta path because the prototype already runs as static HTML/CSS/JavaScript. Streamlit is rejected for this slice because a Python app runtime and sleeping container add friction without helping the game loop.
  • Rewarded Spring Cup entries require six normal greenhouse harvests between invitations. This preserves the event as an occasional peak and prevents direct reward farming.
  • Event visitors do not write notes, card levels, or rare drops into the main greenhouse. Event bee observation instead returns one additional candidate seed at closing.
  • The first beta slows the shared simulation clock to 1.35 seconds per tick. This changes overall pressure without rebiasing individual plant identities; direct interaction and judging ceremony keep their existing response speed.
  • The first production playtest URL is public and account-free, while its GitHub repository remains private. Netlify Forms is the temporary feedback backend; a custom database is deferred until feedback needs querying, status workflows, or cross-device player identity.
  • The feedback sheet discloses that Netlify records submission IP and browser identification automatically. The game itself still avoids collecting email and full save contents.
  • Keep design vocabulary such as "core loop" in development documents, but translate it into in-world actions and immediate goals in the player interface. The visible overview is now a garden schedule rather than a mechanism diagram.
  • Prioritize save confidence before the next gameplay expansion. The next maintenance slice will add visible manual-save confirmation, a roughly 15-second local autosave, background/page-hide saving, and a truthful storage-failure message; saves remain browser-local rather than cloud-synced.

2026-08-06

  • Accepted the first online feedback set as a navigation and attention problem before treating it as a request for more content.
  • Removed the player-facing garden-schedule diagram. Development loop language remains in design documents; players see current goals and actionable states.
  • On small screens, split the long page into persistent 温室, 订单, 图鉴, and 赛事 workspaces with action-count badges.
  • Keep seeds immediately above the mobile greenhouse as a compact selector. Full seed choices and equipment open as separate bottom sheets.
  • Test a two-column mobile pot overview with compact lifecycle summaries. The selected pot keeps a stronger fixed action dock above workspace navigation.
  • Surface one active order near the resource strip instead of moving the whole workshop above the greenhouse.
  • Before the first visitor record, show a static 植物图鉴 heading instead of a one-item tab control that looks broken.
  • Treat an occupied soil lab as a blocked state: explicitly require an empty bed, name the missing condition on buttons, and provide a return route to the greenhouse.
  • Treat Spring Grower's Cup as a focused workspace. While it is open, keep a persistent greenhouse return action with the number of beds needing attention.
  • F03 is clarified: repeated watering became incompatible with the tester's idle-game expectation because checking four beds required repeated scrolling and the first permanent automation appeared too late.
  • Preserve watering as a small early care loop, but grant and automatically install one trial dripper when the third bed becomes occupied. This demonstrates progressive relief before asking the player to buy more automation.
  • Show water condition and exact percentage as a compact pot-card status instead of relying on the red meter alone. Keep the accepted two-column mobile overview so at least two beds can be scanned per row.
  • Use deliberately excessive low-budget disaster-broadcast styling for severe drought, but never flash continuously. Entering severe drought gets one shake-and-stamp performance; the stable state keeps a readable warning, and watering produces one brief absurd recovery stamp.
  • Accepted seed lineages and competition merit as a late-game raising direction, gated behind a mostly automated normal greenhouse.
  • Separated progression into species mastery, lineage merit, and heritable traits. Competition experience improves knowledge and recognition; it does not directly rewrite genes.
  • Winning parents may found named descendant lines with pedigree value, bounded privileges, and selected trait potential. Different briefs and trait tradeoffs must prevent one universal best seed.
  • Adopted complexity is earned through automation as a project-level rule. A new layer appears only after the prior loop has been learned, given a batch or policy-based exit, and compressed into a useful summary.
  • Players who do not enter a deep branch should not see its dormant controls. Early manual care remains meaningful onboarding, not permanent busywork.
  • Completed the save-confidence maintenance slice without changing the stable save key. Meaningful actions save immediately, passive simulation uses a 15-second fallback, and visibilitychange, pagehide, and close events request one final local save.
  • The header always states that progress belongs to this device and distinguishes a loaded save, automatic save, manual save, and browser-storage failure. The game never implies cloud synchronization.
  • Added a compact greenhouse care summary above the beds. It reports stable occupancy or counts for harvest, water, aphids, nutrients, and declined plants without requiring the player to inspect every bed.
  • Kept the early watering model unchanged for this slice. The existing one-action watering, third-bed trial dripper, two-column mobile overview, direct water labels, and new summary now form the four-bed retest package.
  • Converted top-level reminders from passive notices into navigation. The care summary selects the highest-priority relevant bed, while the order strip clearly offers 查看缺口 or 前往交付 and opens the order workspace.
  • Added player-controlled 0.1×, , and simulation speeds as a saved preference. Pause remains a separate zero-speed state.
  • Time scaling affects both rewards and pressures: growth, water loss, nutrients, visitor timing, bloom freshness, and event cultivation all move together. Interface feedback and judging ceremony timing remain immediate and unscaled.
  • Accepted richer plant, petal, water-drop, bud-opening, and visitor animation as a future benefit of observational slow play, not a prerequisite for using the speed control now.
  • Implemented the event-limited market as exactly three buyer waves after judging. It is a bounded event settlement, not the first version of a permanent shop.
  • The submitted candidate's flower count is the only market stock. Judging score creates visible popularity; each wave offers friendly, market, and premium prices with a forecast sell-through range.
  • Buyer variation is generated once at judging and saved. Reloading cannot reroll market demand, preserving price decisions as risk rather than save-scumming.
  • Unsold event flowers do not enter permanent inventory. They return a small compost amount so failure leaves recovery value without erasing the consequence of overpricing.
  • A no-submission participation result skips the flower market. Shop operations, employees, brand positioning, loans, and breeding remain outside this experiment.
  • Named the next active track Phase C: coin reinvestment. Phase B's market remains in local playtesting rather than being treated as abandoned or fully balanced.
  • Selected event preparation as the smallest repeatable coin outlet before a permanent roadside stand. It reuses an occasional arc and does not expose shop operations during ordinary care.
  • Phase C1 offers three event-only choices: 64-coin automatic event care, a 42-coin two-dose flower-count kit, and 48-coin market publicity.
  • Buying all three is intentionally not the default profitable answer. Spending should trade cash for attention relief, award probability, or sell-through rather than act as a mandatory tax.
  • Event closing reports the net cash result, including the already-paid entry fee and preparation spending. No cost advances with offline time, and the home greenhouse remains protected.
  • Selected a flower sorting bench as Phase C2's first permanent capital project. It costs 420 coins and appears only after the permanent central tank, making it a later relief milestone rather than opening clutter.
  • The sorting bench appears in the greenhouse only when at least two plants can be harvested. It offers exact batch-sale and batch-stock totals with confirmation because either action dismisses current visitors.
  • Batch resolution preserves each plant's freshness, material identity, seeds, notes, compost, specialist-soil cycle, and Cup cooldown progress.
  • Rejected automatic harvest for this slice. The player still chooses when to stop waiting and whether the bloom becomes money or inventory; later automation requires reservation policies.
  • Playtesting rejected the flower sorting bench in its current form. At four to eight beds, a machine devoted to grouping two or three harvest commands had weak utility, an unclear fantasy, and a rigid all-sell/all-stock choice.
  • Replaced it with a 420-coin cycling soil feeder. It automatically spends one compost when an actively growing bed falls below 35% nutrients and restores 42 points; old sorting-bench purchases migrate to the replacement.
  • Kept batch harvesting as a valid future scale problem, not a current upgrade. It should return only when production volume, mixed selection, or inventory policies make the choice materially different from clicking a few beds.
  • Accepted a three-layer automation boundary for future staff: machines perform deterministic physical rules, employees execute visible cross-system policies, and the player retains rare, creative, exceptional, and high-risk decisions.
  • The first employee will be a general greenhouse assistant, not an early profession roster. Its initial policy surface is limited to harvest priority, minimum stock, protected items, and cash reserve.
  • Unpaid inventory settlement remains conditional: it requires an explicit contract and grace period, uses ordinary unprotected inventory only, and cannot take unique seeds, competition plants, or collection items.
  • Repeated tester requests for “more free watering” are treated first as an automation-path visibility problem, not immediate evidence that the permanent tank should become cheaper or free. Once tools unlock, the current equipment catalog previews all four existing capital steps with explicit prices, prerequisites, ownership, and coin shortfalls. Hidden surprises remain appropriate for seeds and visitors; relief from an already-felt workload should be visible enough to plan toward.
  • Accepted the flower-market lucky wheel as a low-frequency excitement and resource-sink loop, not as a replacement for guaranteed watering automation. It appears after every Cup market, grants one free draw, caps paid draws at two, accepts coins or one named common flower material, saves outcomes before animation, and carries an 80-draw borage guarantee across Cups. The 3.5% double-money prize applies to exactly one order payout; no reward multiplies the player's full bank.
  • Event outcomes must be staged as player-visible moments, not only correct state changes. A market wave now holds its sale report until the player advances, while a wheel draw temporarily takes visual focus and holds its prize reveal until acknowledged. These acknowledgements are justified ceremony, not ordinary-loop click tax.
  • A random reward cannot become dead inventory merely because the player completed guaranteed progression. Before the central tank, the 8% wheel slot awards a dripper; after the tank, it resolves as a 30-coin and 2-compost maintenance box. Future portable-irrigation uses may replace this conversion only when they are real, visible systems.
  • Hydrangea color is a production branch, not only a discovery checklist. Blue, purple, and pink each receive one repeatable order. Spring Cup soil controls appear contextually only for an empty pot while hydrangea is selected, reuse normal soil-product inventory, and carry the resulting color into scoring and market presentation.
  • A second mobile feedback round confirmed that the compact seed control failed to communicate choice: every phone tester asked whether mint was the only plant. The control now states the count of plantable species and uses an explicit change affordance.
  • Support both planting mental models. Global seed selection remains the efficient repeated-planting route; selecting 换一种 from an empty pot opens a picker for that bed and plants immediately after selection.
  • Keep equipment purchasing centralized, but route a selected unautomated bed directly to the equipment sheet when no dripper is owned. Owned drippers continue to expose an immediate local install action.
  • Soil profile is persistent bed state and must be visible on the bed. Use green, blue, and rose accents plus ordinary, acidic, or alkaline text labels; never rely on color alone.
  • Multiple reports still characterize the first ten minutes as active management rather than idle play. Hold timing changes until the navigation revision is retested, then measure required actions and unattended tolerance instead of treating the speed selector as proof that pacing is solved.
  • Low-frequency bed configuration belongs at the bed on mobile. The soil catalog remains one system, but appears as a targeted drawer instead of a permanent page section.
  • Order readiness must state exact material deficits rather than asking the player to subtract inventory from requirements.
  • Event attention relief may stop ordinary greenhouse simulation without stopping the event. This is a scoped player choice, separate from global pause.
  • Mobile functional homes use durable nouns and identifying marks: 种子库 for plant choice and 温室商店 for equipment and automation.
  • Pot action bars contain only actions that directly affect that pot now. General purchasing stays in 温室商店; the store may signal equipment waiting for installation or an affordable permanent upgrade, but not continuously advertise ordinary consumables.
  • A contextual action cannot live inside content that a responsive breakpoint hides. Soil remains locatable from both empty and occupied beds; occupied beds may preview and purchase, but applying a profile remains a post-harvest action.
  • Mobile selected-bed details default to action-first compact presentation. Automation explanations and full calculations remain available on demand instead of occupying up to half the viewport after every selection.
  • Speed selection changes tempo but does not reduce workload. Evaluate hurried play through required actions per minute, status-check scrolling, unattended tolerance, and the arrival time of meaningful automation. Persistent pause is immediate attention relief, not proof that pacing is solved.
  • Planting availability is derived from inventory, never solely from stale selection state. A selected species reaching zero must reveal a valid fallback without waiting for unrelated inventory changes.
  • Persistent commands and navigation destinations may share a bar, but must not share identical visual treatment. Time control is separated from workspace switching through color, divider, icon, and state copy.

2026-08-09

  • Sonnet 5 picked up the prototype after the previous Codex session ran out of budget. Working files are unchanged; this session continues the same private repository and Netlify site rather than starting a parallel branch.
  • Three independent reports (小明 twice, 丹丹 observed directly) plus corroboration from 小南 (F12) converge on the same root cause: a plant transitions from full bloom to declined with no visible warning, only a buried text-label change (花期将尽) that no player ever noticed. Treated this as the priority fix over further navigation polish.
  • Chose to fix the missing warning system first and hold bloom-duration itself unchanged this round, per the existing F12 principle of not tuning timing constants inside the same patch that changes UI/legibility. Duration is deferred to the next structured retest once the warning system's effect can be isolated.
  • Any UI surface layered on top of the base game (feedback modal, future QA tooling) must render above every in-game overlay without exception. The feedback modal was sitting below the mobile pot-detail dock and bottom workspace nav (z-index 30 vs 35/40/60), which is why 小明 had to rotate to landscape to reach the submit button. Fixed by giving the feedback modal the highest z-index in the stylesheet.
  • A selected pot must always have an explicit, discoverable way to deselect: an on-panel close control plus click-on-blank-grid-area. Relying on "select a different pot to replace the selection" is not sufficient, per 小明's bug report.
  • Water-stress alerts needed a stronger, more saturated color (--warning-red) than the existing muted --danger, and a longer alert window (dryAlertTicks raised from 1 to 3 ticks) so the crisis animation is not a single easy-to-miss blink.
  • Any full-innerHTML-replace render path that hosts a one-shot entrance animation (confetti, reveal cards, etc.) needs an explicit "already mounted, skip" guard for its entire transient lifetime, not just its first phase. The lucky-wheel reveal card had a guard for the spin phase but not the reveal-pending phase, so the background tick loop kept rebuilding it and restarting its animation every tick. Checked for this pattern's presence rather than assuming one guard covers a whole multi-phase UI sequence.
  • F12 and F18 were retested without waiting for the next human playtest round, using two different tools matched to what each question actually asks: F18 ("is X visible enough") is answerable by a direct code audit of every abnormal-state render path; F12 ("does this feel hurried") is a timing question, so it was answered by simulating a reactive player at several check-in cadences and measuring plants lost to timeout, not by re-reading the same open question. Simulation showed the F30 warning system alone did not resolve F12: a 90–180 second absence (matching what 丹丹 and 小南 described) still reliably lost plants, split between bloom-duration timeout and a previously-unnoticed second cause — thirst-stress decline during the growth phase, independent of bloom length.
  • Fixed F12 with two narrow, targeted numeric changes rather than a broad rebalance: bloom duration ×1.8 across all plants (preserves relative ordering), and severe dry/wet stress accumulation halved (a plant left completely unwatered now survives roughly twice as long before stress-decline). Growth rate, water-drain rate, and economy pacing were deliberately left untouched so the fix stays isolated to "does neglect for ~1–2 minutes destroy something," which is what was actually broken. Verified by rerunning the same simulation: timeout losses at a 90s check-in interval dropped from 8 to 0 across 15 simulated minutes; at 120s, from 14 to 3.
  • The 7–9 actions/minute workload at short check-in intervals (the "so many taps" half of F12, distinct from "neglect kills my plant") was measured but deliberately not touched this round — it's driven by tap-count per visible issue rather than timing, and fixing it would mean changing when automation unlocks rather than tuning a number. Left as an explicit next-open-item rather than folded silently into this pass.
  • F18 code audit found two real asymmetries, not just unconfirmed suspicion: severe overwatering had no equivalent to the severe-dry crisis-stamp treatment despite an equal stress penalty, and aphid infestation rendered in the same neutral chip styling as a beneficial visitor with no warning color at all. Both fixed by extending the existing severe-dry/dry-alert pattern to cover wet and pest cases symmetrically, rather than inventing a new alert mechanism.
  • Accepted the roadside-stand proposal (design/roadside-stand.md) and started building it split-and-conquer rather than as one large change, so the creator can review a working checkpoint before the next one starts. Checkpoint 1 is the vendor trigger and invitation only — no selling loop yet. This keeps each reviewable unit small, the same principle already used for the Spring Cup's own staged rollout (invitation, then briefing, then cultivation, etc., each shipped and confirmed before the next).
  • The vendor invitation pauses global simulation independently of the ordinary pause flag (state.stall.invitationPending gates the tick-loop callback directly, not just state.paused), because the creator specifically asked for this to feel like a real interruption the player must respond to, not a background toast. Declining does not permanently forfeit the opportunity — invitationPending clears but unlocked stays false, so a future qualifying score re-invites — matching the event system's existing "never a disappearing popup, never a punished decline" precedent.
  • The stall's consignment cycle uses real wall-clock time (Date.now()), not game ticks, and the entire sale outcome is rolled once at cycle start rather than at reveal time. Both choices exist to eliminate a specific failure mode already fixed elsewhere in this project: a timer the player can "lose" by being away, and a random result that could be rerolled by refreshing. The Cup market already solved both problems (buyer variation rolled once at judging, held until settlement); the stall reuses that shape instead of re-deriving it.
  • Stall pricing deliberately reuses the Cup market's existing harvest.coins / baseFlowers unit-price formula rather than introducing a second per-item pricing scheme. Two systems computing "what one stem is worth" differently would be a durable source of confusing inconsistency once a player compares them.
  • Checkpoint 2 shipped the full v1 loop (allocate, start, wait, settle) with intentionally flat 60% sell-through and no fame/season/holiday weighting, exactly as scoped in design/roadside-stand.md. That weighting is the next natural increment once the base loop is confirmed to feel worth returning to, not before.
  • The main interval loop must never gate its own render() call behind the same condition that a real-time-derived UI state (invitation reveal delay, stall cycle readiness) depends on to become visible — doing so creates a state that is logically true but never gets painted until an unrelated interaction happens to trigger a render. scheduleGameTimer now always calls render() and only gates tickGarden() (the actual simulation) behind pause/visibility. Any future real-wall-clock-gated reveal must be checked against this same pattern before shipping, not just tested by manually calling render() after manipulating state — that specifically hides this class of bug, since manual calls "cheat" past the exact question of whether nothing else would have painted the change.
  • Desktop and tablet now get the same workspace-tab navigation mobile already had (F13-F33 built and proved it there first); the entire mobile/desktop split had always been a CSS media-query scoping choice sitting on top of already-viewport-agnostic JS, not two separate systems, so extending it was safe and cheap rather than a rewrite. Deliberately kept two width-tier differences instead of forcing pixel-identical behavior everywhere: phone hides .seed-panel in the 温室 tab (relies on the compact mobile-only seed control instead) while tablet and desktop keep seed-panel beside garden, since only phone has that compact replacement; and the desktop-only 3-to-2-column .layout-grid collapse is scoped to min-width: 981px specifically so it can't fight the tablet single-column collapse that already existed below that width. Matching behavior everywhere would have been simpler to reason about but would have broken one tier to satisfy the other.
  • This desktop-nav pass was proposed as ordered before the stall's bouquet/bundling redesign, on the reasoning that adding more stall UI on top of the old ever-growing desktop scroll would only compound the exact problem being fixed. Sequencing infrastructure/legibility work ahead of the next feature addition, when both are queued, avoids building new things on a surface about to be restructured.
  • Workspace navigation must not hide the destination of an action that remains visible inside another workspace. Soil configuration is pot-local and therefore opens as a targeted overlay at every width instead of scrolling toward a desktop section that may not exist in the active workspace.
  • A real-time timer may request frequent top-level renders, but interactive subtrees must not be replaced unless their visible data changed. The roadside stall renders allocation changes immediately, active cycles at most once per displayed second, and settlement once when ready; pointer interaction also activates the shared render guard.
  • Separate experiential playtests from feature verification. Onboarding, pacing, and motivation still require a clean start; mature systems may use a query-gated local tester console with generated checkpoints and focused state controls. The console must use current production state constructors, back up the active save before mutation, and remain absent from the ordinary player interface.
  • Unlocking an optional system may interrupt with a clear invitation, but must not navigate on the player's behalf. The Spring Cup now preserves the current greenhouse context and waits for an explicit 前往查看 action; subsequent access uses the persistent event banner and workspace tab without repeating the first-time notice.
  • Reward visibility is part of the reward, not presentation polish. The greenhouse should always expose one nearby achievable goal with exact progress and named payout, while the full reward center shows parallel longer goals.
  • Fresh progression begins with mint only; calendula becomes the first earned species after three mint harvests. Existing saves are never stripped of inventory during this change.
  • Observation notes are a research-and-relief currency rather than a second name for coins. Their first fixed catalog buys seeds, compost, and temporary irrigation. Rotating stock is deferred until fixed rewards prove motivating without adding deadline pressure.
  • Rejected a parallel achievement-list presentation for core progression. Guidance is sequential and capability-led: show one current action, its exact progress, and the concrete greenhouse change it will unlock; preview only the adjacent route stages.
  • Temporary art should establish stable visual categories before final assets exist. Seed, water, equipment, structure, night ecology, resources, and completion each receive a distinct placeholder mark and color treatment that can later be replaced without redesigning interaction or layout.
  • Replaced the observation-note supply catalog with one-time research projects. Projects require related observations and grant permanent capabilities or new species, so notes now represent accumulated greenhouse knowledge rather than a second shopping currency.
  • Plant research adapts to existing progress: the woodland branch first identifies wildberry, then changes into a wildberry-harvest study that unlocks cornflower. Cornflower deliberately improves bee attraction and becomes the first bridge toward managed pollination.
  • Accepted bumblebee hives as a future ecological-workforce system for compatible crops. Hive activity may improve flower and seed yield and interact with temperature and pest treatment; honey is not a bumblebee byproduct and would require a separate honeybee branch.
  • Accepted circular water, filtration, biomass heat, mechanical handling, and specialist cultivation as greenhouse-depth layers. They should enter only when production scale, climate zones, or recurring costs make their decisions useful; see design/greenhouse-depth-roadmap.md.
  • Flower inventory and whole-plant consignment use different units and must never be presented as directly comparable counts. Orders now state ingredient amounts in stems, harvest actions distinguish whole-plant sale from cutting stems into inventory, and every order exposes its reference material value and explicit premium.
  • Raised the first daily bouquet from 30 to 40 coins. Its seven stems have an 18-coin reference value, so the visible 22-coin premium pays for delayed gratification and cross-species preparation while the observation note and first-order capability unlock remain additional rewards.
  • Reloading always returns to the greenhouse workspace. Saved event openness may preserve event progress, but it must not hide the primary garden on startup; invitations and workspace tabs remain the explicit routes into side systems.
  • Desktop pot actions belong above the pot grid and remain sticky within the greenhouse, while phone actions stay in the reachable fixed action sheet. Do not dynamically insert the action surface into the CSS grid: real saves exposed auto-placement collapse and partial pot rendering.
  • Player-facing CSS and JavaScript references carry the app version as a cache key. A local browser previously combined fresh HTML with stale layout assets, making a fixed grid appear unchanged across ordinary refreshes.
  • Important acquisition feedback must state both outcome and cause. New species, permanent capabilities, research results, and event prizes receive a prominent reveal; ordinary coins and stems keep lightweight feedback. Hidden thresholds may create surprise, but the reveal must reconstruct the condition so players do not attribute the reward to the wrong action.
  • Water cost prices greenhouse scale without undoing automation. Only the central tank accrues usage cost, the first six refills are free, settlement is automatic, and insufficient cash never stops water or adds penalties. Recirculation is a visible permanent investment with measured savings; manual watering and temporary drippers stay free.
  • Utility status must live with persistent resources rather than only inside the equipment catalog. First billing receives one dismissible notice; afterward a compact status always opens the bill. Fines, interest, and shutoff remain deferred until ordinary billing proves understandable and worthwhile on its own.
  • Paid automation is a service the player knowingly accepts, not an invisible tax. Central-tank purchase therefore includes one concise in-world service letter and an always-available pause control; pausing stops new usage without destroying the investment or forgiving an existing bill.
  • Equipment catalogs contain purchases, not ongoing administration. Water billing, service controls, usage history, and recirculation research share one dedicated utility center opened from persistent water status; desktop uses a centered panel and phones use the same content as a bottom sheet.
  • The visual language is a contemporary greenhouse work ledger, not a decorative scrapbook or generic SaaS dashboard. Operational clarity stays primary, while seed catalogs, nursery trays, service notices, research marks, and seasonal registration colors give each system a recognizable material identity that future hand-drawn assets can replace incrementally.
  • The prototype is intentionally correcting course from active greenhouse management toward nurturing idle play. Safe unattended growth, bounded acceleration from meaningful care, longer plant continuity, and a separate showcase surface are accepted as the next foundation experiment. Fast feedback remains important; frequent required input does not.
  • A paid general caretaker is accepted as a later attention-relief layer, initially hired by a visible shift and limited to safe care. It must protect rare plants and reserved inventory, and it must not be required to survive an otherwise hostile idle game.
  • Common production and special specimens will share the same quiet-growth and attentive-momentum model. Common plants may become highly automated; exceptional plants may add identity, history, lineage, and richer optional care only after the shared foundation proves satisfying.