Plan only — not implemented, not a showcase, and no acceptance gate has run. This is one strategic proposal in Phase 3, not a claim that the source demonstrations implement it. Source recommendations and the new product/architecture decisions are separated below. Publication of this plan does not authorize implementation or deployment.
Source reading routes: scope-1-play-now, platform > Independent app responsibilities, platform > Choose one specialist, experience-and-acceptance, workflow, state-and-trust, source-coverage > September 10 starter source coverage, and artifact-atlas > September 10 local demonstration inventory. Original-file locators below are provenance, not claimed public download URLs.
approach_a:
status:
artifact: "One proposed implementation checklist; every task below is unchecked."
evidence_today: "Dated source guidance plus this design; no new app, runtime, screenshot, release, or passed test."
phase_boundary: "Foundation and its corrections are inputs; implementation/showcase require a later owner-controlled phase."
notation: "[ ] means planned; source_basis means attributed research; design_choice means new proposal."
strategy:
name: "Local loop: compute immediately, keep nothing by default."
scope: "S1, independent browser app; not a hosted Websim integration or app-generating builder."
optimization: "Fastest safe useful first result, fewest failure boundaries, portable inspectable source."
architectural_difference: "One browser owns temporary input and deterministic output; no remote record authority or shared simulation exists."
product_design_choice: "Timebox splitter: divide available minutes into a chosen number of work blocks."
why_useful: "A visitor gets an immediately usable allocation without registration, setup, or a network round trip after load."
gives_up:
- "Cross-device records, durable personal history, accounts, synchronization, and backup promises."
- "Real multiplayer, authoritative scores, collaborative editing, and social publication."
- "Runtime AI, generated executable previews, provider keys, and model billing."
- "Timers, notifications, calendar integration, analytics, and an installable/offline-first PWA."
stop_condition: "One visitor obtains a correct allocation, edits and repeats, resets and leaves safely; do not turn S1 into an unfinished larger scope."
scope_exit: "If the actual need becomes saved work, permissions, or simultaneous shared outcomes, reopen strategy selection rather than bolt them onto this plan."
fused_source_grounding:
sep06:
- source: "PRD.md sections 1, 3, 4, 5, 6, 8; especially lines 50-128 and 138-145."
source_basis: "Specify a visitor and input/action/result/repeat loop; admit only necessary capabilities; apply A1-A4 and A12 without inventing services."
design_use: "Choose a bounded deterministic tool, retain session-only state, and specify observable success before implementation."
- source: "PLAN.md lines 59-92, 104-120, 124-141."
source_basis: "Build the smallest complete loop; separate state lifetimes, render untrusted text safely, repair narrowly, and publish a tested revision."
design_use: "Native input/action/result/reset plus explicit errors; no storage, accounts, or expensive rendering loop."
- source: "scoped-posters.json S1 record and scope-1-play-now.png, explained by content/scope-1-play-now.md."
source_basis: "INPUT -> ACTION -> RESULT, with a try-again return to INPUT, wholly inside one visitor browser; repeat/reset/keyboard/touch ship checks."
design_use: "Keep calculation and repetition local; the poster is a scope recommendation, not evidence of runtime correctness."
sep10:
provenance: "Starter Stax source inventory in STARTER_CORPUS_MAP.yaml; date-qualified coverage in content/source-coverage.md."
-_basis: "The following entries are source-based via the fused foundation/map, not fresh upstream or package verification."
entries:
- source: "September 10 CHEATSHEET.md lines 34-91, 93-154; content/platform.md lines 86-122."
source_basis: "Lean base, plain HTML for a disposable experiment or Svelte + Vite for a browser-only screen; native controls first and specialist dependencies only when earned."
design_use: "Select plain HTML/CSS/JavaScript for this screen; Stax App is the conceptual fit, not an installed package."
- source: "September 10 CHEATSHEET.md lines 156-168, 170-207, 239-277; STARTER_CORPUS_MAP.yaml newer_source_coverage."
source_basis: "OMP is development-only; runtime AI is separate; setup/deployment recipes and ship checks were recommendations, not an executed starter collection."
design_use: "No visitor model calls; static artifact deployment only after a future evidence gate."
- source: "Websim-Stax.html ws-playground/ws-hood; STARTER_CORPUS_MAP.yaml darkroom, lines 358-375."
source_basis: "The Darkroom is an existing plain HTML/CSS/JS recorded-replay educational artifact; its local saves and same-page relay are not durable shared infrastructure."
design_use: "Retain the distinction between teaching and real behavior; do not reuse recordings as proof, add a fake AI stream, or call a local relay multiplayer."
new_not_source_facts:
- "The timebox product, numeric bounds, allocation rule, no-storage choice, and release packaging below are new decisions."
- "Neither corpus specifies this calculator or proves its behavior, portability, accessibility, or performance."
- "The six conceptual Starter Stax categories and three historical replay examples are not this project's three strategic approaches."
human_steering_and_automation:
visitor_steers:
- "Choose available whole minutes and number of blocks; explicitly submit, edit, repeat, or reset."
- "Decide whether the allocation is useful; the app does not decide priorities, start work, or publish anything."
browser_automates:
- "Validate bounds, divide minutes, assign the remainder deterministically, and render a labeled ordered list."
- "Show a short result summary and accessible feedback; never change inputs to hide an invalid request."
creator_steers:
- "Approve the outcome and scope, review implementation changes and evidence, choose the revision, and authorize publication."
- "Own any later scope/dependency change; visitor input cannot authorize development actions or deployment."
development_automation:
- "OMP may implement and exercise targeted changes in a later phase; it is not shipped in the visitor loop."
- "A generated patch, successful build, attractive screenshot, or existing source receipt alone cannot authorize a claim of working behavior."
explicit_loop:
visitor: "One person planning a short work session on a phone or desktop; no identity needed."
input:
minutes: "Required integer from 1 through 480."
blocks: "Required integer from 1 through 12, never more than minutes."
initial_example: "45 minutes and 3 blocks, visibly editable; no precomputed result presented as the visitor's action."
action: "Native form submit: Split my time. No recalculation on each keystroke."
computation: "q = floor(minutes / blocks), r = minutes % blocks; first r blocks get q+1 minutes, remaining blocks get q."
result: "Ordered block durations plus total minutes and block count; every duration positive, sum exactly equals input, largest/smallest differ by at most one."
repeat: "Edit either input and submit again; replace the result, never append phantom history."
stale_result: "On editing after success, label the prior result as belonging to the previous inputs until resubmission; never imply it describes the new values."
reset: "Reset returns to the labeled 45/3 example, clears result and errors, and focuses the first input; it is not data recovery or a save operation."
leave_refresh: "Visible session-only notice; fresh load/refresh returns to the example with no result. Back leaves normally; same-document bfcache restoration may retain the transient screen and is not persistence."
three_observable_success_cases:
- "Fresh visitor submits 45 and 3 -> three 15-minute blocks, total 45."
- "Change to 50 and 3 -> 17, 17, 16, total 50; repeated submit yields the same allocation without duplicate rows."
- "Submit 2 and 3 -> actionable field error, values retained; correct to 2 and 2 -> 1, 1; reset returns to the declared initial screen."
implementation_checklist:
scope_and_structure:
- "[ ] Record this visitor/outcome/allowed-operation contract alongside the eventual implementation; reject unrelated features."
- "[ ] Inspect the future target first. For a new standalone artifact choose one index.html with semantic HTML, small CSS, and vanilla JavaScript; no framework install or remote dependencies."
- "[ ] If the approved target already uses Svelte, preserve that stack and implement one Svelte screen with native controls; use Svelte + Vite for a justified component-based target, not three parallel templates."
- "[ ] Do not add SvelteKit routes, SSR endpoints, a router, state library, Tailwind, daisyUI, or Bits UI merely to match a stack inventory."
optional_specialist_admission:
- "[ ] Baseline admits zero specialists: numbers and an ordered list need neither Canvas nor a game engine."
- "[ ] For a later explicitly changed interaction, prove native HTML/SVG/Canvas insufficient before admitting one owner: Pixi for rendering, Phaser for game systems, Three/Threlte for 3D, or Svelte Flow for node editing."
- "[ ] Record capability removed/added, dependency cost, interaction owner and lifecycle evidence; no speculative specialist installation in this plan."
- "[ ] If a specialist is admitted later, retain DOM controls and prove initialize/reset/unmount/return cleanup; that approval does not silently admit backend services."
behavior_and_state:
- "[ ] Use a native labeled form, two integer inputs, one primary submit control, quiet reset, and a semantic result list."
- "[ ] Keep only current input, current result and validation state in memory; compute at most 12 rows once per submit."
- "[ ] Validate empty, non-finite, fractional, out-of-range and blocks-greater-than-minutes values without coercing them into successful output."
- "[ ] Treat repeat/double activation as replacing the same deterministic result; no duplicate accumulating rows or asynchronous races."
- "[ ] Expose errors next to the relevant input, associate them programmatically, and focus the first invalid input on failed submit."
- "[ ] Announce a concise result summary through a polite status region without repeatedly reading the entire list or stealing focus on success."
- "[ ] Implement reset and the documented stale-result behavior; retain entered values on errors."
trust_and_capabilities:
- "[ ] No cookies, localStorage, IndexedDB, service worker, account, API, database, websocket, provider SDK, or runtime AI."
- "[ ] No input in URLs, analytics, logging endpoints or browser storage; render messages/results with text nodes, never input-derived executable HTML."
- "[ ] Do not describe the client as a trusted authority: changing local JavaScript changes only the visitor's disposable result."
- "[ ] Use original text/CSS and system fonts; do not copy research artwork, narration or vendor assets without a separately established need and rights."
- "[ ] Optional non-sensitive preferences require a later demonstrated need, storage-denial handling and clearing semantics; they never become cross-device saves."
- "[ ] Runtime AI is not essential to arithmetic and is excluded. If a changed outcome truly requires it, stop and re-plan its trusted provider boundary, payer/limits and A10 failures; never embed keys."
reachable_state_checklist:
- "[ ] First-run: show example inputs, one clear action, expected allocation and session-only lifetime in plain language."
- "[ ] Empty: cleared fields retain an actionable prompt; submit explains missing values rather than displaying NaN or a fabricated allocation."
- "[ ] Loading: no artificial calculator spinner; initial document/script loading is real. Enable calculation only when its handler is ready and provide readable no-JavaScript guidance."
- "[ ] Partial: no partial calculation result because the tiny operation is synchronous; an incomplete document/network transfer must not masquerade as ready. Verify initial-load failure separately."
- "[ ] Error: invalid values preserve input and produce a specific correction; script/load failure has a truthful reload/enable-JavaScript path where document content is available."
- "[ ] Offline: an already loaded screen continues locally; an uncached hosted first visit may fail. Do not claim an offline-install guarantee."
- "[ ] No-permission: N/A inside the app because no protected operations exist; hosting access behavior still needs fresh-session verification."
- "[ ] Disabled/unavailable: explain initial script unavailability; avoid unexplained disabled validation controls."
- "[ ] Success: show the actual allocation and quiet edit/reset routes, not a Saved toast or invented progress history."
interaction_and_quality_checklist:
- "[ ] Keyboard: Tab order matches the document, Enter submits, focus stays visible, reset focuses input, and no keyboard trap exists."
- "[ ] Touch: numeric entry, submit, correction and reset work without hover or precision gestures; primary/touch targets at least 44px, other targets at least 24px."
- "[ ] Layout: exercise 320px width and 400% zoom, long errors and maximum 12-row output without lost controls or horizontal text clipping."
- "[ ] Accessibility: explicit labels, field-error relationships, non-color status, text contrast at least 4.5:1 and control/focus cues 3:1."
- "[ ] Reduced motion: complete operation with no animation dependency; omit sound and animation rather than add settings to disable them."
- "[ ] Reset/repeat/refresh/Back: inspect actual state and focus after each transition, including leaving and returning through browser history."
- "[ ] Responsiveness: aim for feedback below 100ms and source INP target <=200ms p75; report measured method/device and do not claim field p75 from a few lab clicks."
- "[ ] Initial loading/error: exercise slow/interrupted delivery and JavaScript disabled; distinguish a reachable fallback from a network failure before any page arrives."
deployment_choice:
selected: "A self-contained static HTML artifact on an owner-approved HTTPS static host; no app server, database, container or persistent process."
portable_delivery: "The same self-contained file is the proposed downloadable local copy; no import/CDN/fetch dependency. Verify file opening separately before advertising it."
checklist:
- "[ ] Freeze source revision and artifact digest; retain a known-good previous artifact and a rights/dependency inventory."
- "[ ] Check the proposed file contains no runtime network dependency, secret or environment-specific origin; ordinary hosting access logs are distinct from app input collection."
- "[ ] Owner selects host/path, intended public visibility and cache policy; this plan supplies no live URL or permission to alter existing hosting."
- "[ ] In a later release phase, publish only the accepted artifact, open its final URL in a fresh visitor session and establish the revision actually served."
- "[ ] Reopen a copied local artifact with networking disabled and exercise the same loop; that evidence, not static packaging alone, earns portability language."
- "[ ] Restore the known-good artifact and replay the loop; code rollback is not restoration of user records, which this scope intentionally lacks."
not_chosen: "Hosted Websim import/export and arbitrary SvelteKit compatibility are unverified; Vite dev server is not a production hosting plan."
acceptance_gates:
rule: "All applicable gates must be evidenced on the eventual artifact; unrun is not pass, and N/A requires a reason."
A1: "Correct final revision and intended anonymous access; a fresh visitor completes the 45/3 case without architecture instructions."
A2: "All three named success cases plus repeat, reset, double activation, keyboard, touch and Back retain truthful state and focus."
A3: "Narrow width, zoom, contrast and reduced-motion scenarios retain readable and operable controls/results."
A4: "Refresh resets as documented; disabled browser storage cannot break the loop even though this implementation requests none."
A12: "A distinct known-good code artifact is restored and exercised; no confusion with session data or developer-agent context."
numerical_boundaries: "Exercise 1/1, 480/12, uneven division, missing/fractional/non-finite/out-of-range inputs and blocks > minutes; compare visible values against independently calculated expectations."
load_and_portability: "Loaded offline, uncached hosted failure, disabled JavaScript, local-file opening, and a second approved static location are separate scenarios with separate results."
A5_A6_A7: "N/A: no durable records, identity, protected operations, or save transport."
A8_A9: "N/A: no simultaneous clients or authoritative shared state."
A10: "N/A: no runtime AI or costly provider request."
A11: "Publishing/moderation branch N/A: no participant content sharing, URLs, deletion or bans. Malformed local input and safe text rendering remain applicable safety checks."
evidence_before_claiming_real:
- "[ ] Retain the exact source/artifact revision, checksum, date, location, browser versions, viewport and device/input method for each run."
- "[ ] Capture the actual interaction sequence with inputs, visible outputs and focus transitions; inspect the rendered surface, not just a static image or source code."
- "[ ] Independently check allocation invariants and explicit expected values; use a narrow regression only if it defends a plausible arithmetic/state bug."
- "[ ] Record actual keyboard and touch exercise, zoom/reduced-motion/contrast observations, startup failures and session lifetime; a desktop screenshot is not touch proof."
- "[ ] Inspect runtime requests and storage access through the exercised paths to substantiate local-only/no-provider claims; inspect the artifact for unexercised external dependencies too."
- "[ ] Capture fresh-session final-URL evidence, local-copy/offline evidence and rollback evidence separately; state failures and not-run cases without borrowing source-demo receipts."
- "[ ] Have the owner review applicable gates before changing status to implemented or showing a working showcase; label remaining limits beside any future demonstration."
risks_and_unresolved_facts:
- risk: "The new timebox outcome is a bounded design choice, not demonstrated demand."
action: "A future fresh visitor must explain the result and complete the loop; revise the outcome if it has no useful value, not by adding services."
- risk: "Transient work can be mistaken for saved work, especially after browser history restoration."
action: "Disclose session-only lifetime, exercise refresh/back/cache restoration, and never label results saved."
- risk: "Framework convenience or an attractive engine can overwhelm the smallest useful loop."
action: "Keep native HTML as the chosen baseline and require a concrete unmet interaction before any dependency admission."
- risk: "Static packaging is mistaken for proven offline portability, accessibility or privacy."
action: "Require artifact-specific runtime evidence; loaded-offline use does not prove uncached offline startup, and the host still sees requests."
- unknown: "No implementation target, final hostname/path, approved device/browser support matrix or measured performance exists for this proposal."
disposition: "Resolve before the dependent implementation/release claims; not a reason to add backend infrastructure now."
- unknown: "No current package compatibility, Websim entitlement/runtime pricing, hosted import/export or asset-rights refresh was performed here."
disposition: "Those uncertainties do not block the selected dependency-free, AI-free, original-content local calculation; reassess only if the scope changes."
- unknown: "No plan gate has been executed, and no runtime evidence for this new product is supplied by either corpus."
disposition: "Remain plan-only until later implementation and independent visitor evidence exist."