Repository navigation
Never invent proof about the user's business, with a user-triggered demo mode - #205
Conversation
…emo mode critical-rules gets a Never invent proof section. Copy that claims something about the user's real business (ratings, testimonials, staff, "since" years, awards, services, its own prices or hours) needs a source the user supplied; records the app stores (menu items, screenings, demo patients) are invented freely, prices included. A missing claim is omitted, given an established role, or at most two marked slots per page. Demo mode, only on the user's word, invents proof tagged "Sample", with guardrails against anything that could belong to someone real. The real-details question gets a concept-or-pitch option that turns demo mode on, and the playbook's sample-content line and the glossary point to the rule. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Staging Workspace Sync SuccessfulSuccessfully synced changes to staging workspace Sync Details |
lucaslyl
left a comment
There was a problem hiding this comment.
[Claude Code 🤖] Lens: whether the new rule agrees with the rest of the skill tree and with itself (the copy/record boundary, the slot cap, the scope of demo mode). I did not re-run the before/after prompts; the table in the description is the only behavioral evidence.
No blocking issues with the rule's direction; one should-fix before merge (1) and three places where the rule resolves differently depending on who reads it (2–4).
- Reconcile the sample-data lines in
design-playbook.mdanddomain-interview/SKILL.mdwith the rule, and givedomain-interviewa demo-mode route or state its absence (thread on the Never invent proof heading). - Give prices one discriminator and place a stored services list (thread on the copy bullet).
- Settle the two-slot cap against personal-site slots (thread on the personal-site sentence).
- Scope the "never invent" sentence in
index.mdfor the new concept-or-pitch option (thread there).
| - **Gradient Overuse** — Not every element needs a gradient. Gradients are the 2024 over-used signature; flat color with intentional contrast often wins. | ||
| - **Average Quality Trap** — Aim for top 1% execution, not median competence. The design-playbook's "internal taste-maker" framing exists to push past the default. | ||
|
|
||
| ### Never invent proof |
There was a problem hiding this comment.
[Claude Code 🤖] The rule claims to hold for every build, but three untouched instructions still say the opposite, and only one playbook line was reconciled:
design-playbook.md: the Stage 0d row ("real-feeling content") and the sample-data bullet under the fitted-format guidance ("real names, real prices, real photographs").domain-interview/SKILL.md: the guard "It never invents the user's facts. A business name, a price, a licence number…" flatly forbids what this rule allows for records (prices included), while its sample-data bullet ("real names, real numbers, real dates") demands the opposite of the guard.
domain-interview also has no route to demo mode: nothing in it mentions a concept or pitch, and it never links here. A user on the Plan-first path who says "it's a pitch" gets a brief that placeholders their facts.
Fix: add the copy-or-record clause and a link to this section to those lines, and either give domain-interview the same user-word trigger or state that demo mode does not apply on that path. Regression (the new rule makes them contradict); belongs in this PR given the "every build" scope.
There was a problem hiding this comment.
[Claude Code 🤖] Fixed in a02fbd2. The Stage 0d row and the sample-records bullet in design-playbook.md, and the never-invents guard and the sample-data bullet in domain-interview/SKILL.md, now scope "real content" to records the app stores and link to this section. The guard names sample records and demo mode as its exceptions. domain-interview has no concept-or-pitch question of its own; demo mode there turns on the user's own word, per the link. Resolves this thread.
|
|
||
| - **Copy that claims something about the user's real business**: a hero line, an About section, a | ||
| rating badge, a testimonial, "Trusted by 2,000 families", "Since 1998", an award, a named member | ||
| of staff, the business's own prices or opening hours stated as fact, a service or policy it |
There was a problem hiding this comment.
[Claude Code 🤖] Prices sit on both sides of the copy/record line. This bullet makes "the business's own prices … stated as fact" copy, and "a service … it offers" is copy too, while the record bullet makes a menu item's price free to invent. A restaurant menu (the tested case) and a dental "Services & fees" list stored as item cards have the same shape and land on opposite sides, so two builders will classify them differently.
The rule needs a discriminator that doesn't depend on topic, and a stated side for a stored services list. For example: a price is a record when it is a field on an item card the user adds, edits or removes; it is copy when it appears in prose or a headline ("from $89", "lunch $12"). The glossary entry repeats "its own prices or hours" and should follow whatever wording lands. Introduced here; non-blocking, but it is the case the rule most needs to resolve.
There was a problem hiding this comment.
[Claude Code 🤖] Fixed in a02fbd2. Records are interchangeable entries the user edits and the page only lists (a dish, a drink, a product, a screening). Fees for a service the business performs are copy even when stored as cards, and so is a price written in prose or a headline. Running the skill text over the same prompts: a restaurant run with details skipped still gets a priced menu (18-22 priced lines across 3 runs), and a dental "Services & fees" run gets no invented fees (0 across 3 runs, against 13-16 before the change). Resolves this thread.
| Even in demo mode, invent nothing that could belong to someone real: no quote attributed to a real | ||
| publication, no rating from a real platform, no award from a real body, no credential (medical, | ||
| legal, financial), an obviously fictional street, a 555-01xx phone number and an `example.com` | ||
| address. A personal site (a portfolio, a CV) never gets an invented identity: its owner's facts are |
There was a problem hiding this comment.
[Claude Code 🤖] This contradicts the cap at the marked-slot step. "Its owner's facts are always slots" on a portfolio or CV means name, headline, bio, employer and contact, well past "at most two per page; reaching for a third means omitting instead". A personal site can't omit its owner's name, so the two rules can't both hold.
Say which wins: either the cap is lifted for personal sites (and the slots still use the one visibly-unfinished style), or the owner's facts are limited to a named short list. Introduced here; non-blocking.
There was a problem hiding this comment.
[Claude Code 🤖] Resolved in wording, not yet in behavior. a02fbd2 lifts the two-slot cap for a personal site's owner facts and moves the exception into its own bolded paragraph. In test runs a portfolio with the concept answer still got an invented owner in 3 of 3 runs, because the model follows the user's literal answer over that paragraph. Adding "(not the owner of a personal site)" to the option label in index.md made it slots-only in 3 of 3, but the pages carried 22-26 placeholders. Whether a pitch for a personal site should get a Sample owner instead is still an open decision, so this thread stays open.
| - **Real details** — "Anything true about this place a competitor couldn't say? Type two or three (a name, a street, a price, the building, an odd policy)." Its options are *No details — leave marked slots for them*, *No details — leave those sections out*, *It's a concept or pitch — make up realistic details, marked as samples* and, as the call's last question, *Skip the rest — you decide and build*; the choice UI's free-text answer carries the details. | ||
|
|
||
| Plain words, labels the user would say themselves. Every skip is an option in the choice UI, never a line asking the user to type "skip". Skip any question the prompt already answers: for the feel, named colours, a mood word, a brand, a logo or a reference site; for the details, facts already in the prompt. Use supplied details verbatim, and never invent facts about the user's own place or business: no made-up business name, address, staff names, rating, reviews, founding year, awards or prices of theirs; a missing one gets a marked slot or its section is left out, as the user picked. Sample records (the contacts in a CRM, the dishes on a recipe card) still look real, as the design-playbook asks. That is the whole interview for this path: one call, then build. Anything more is `domain-interview`'s job. | ||
| Plain words, labels the user would say themselves. Every skip is an option in the choice UI, never a line asking the user to type "skip". Skip any question the prompt already answers: for the feel, named colours, a mood word, a brand, a logo or a reference site; for the details, facts already in the prompt. Use supplied details verbatim, and never invent facts about the user's own place or business: no made-up business name, address, staff names, rating, reviews, founding year, awards or prices of theirs; a missing one gets a marked slot or its section is left out, as the user picked. Sample records (the contacts in a CRM, the dishes on a recipe card) still look real, as the design-playbook asks. The full rule, and the demo mode the concept-or-pitch answer turns on, are in [`critical-rules.md`](skills/boxel-design/references/critical-rules.md) → *Never invent proof*. That is the whole interview for this path: one call, then build. Anything more is `domain-interview`'s job. |
There was a problem hiding this comment.
[Claude Code 🤖] This sentence is still absolute ("never invent facts… no made-up business name, address… a missing one gets a marked slot or its section is left out, as the user picked"), and the new option makes it false for a user who picked the concept answer: demo mode invents a fictional street, and the tested concept run produced a business name and a chef.
Scope the sentence ("unless the user picked the concept or pitch answer") ahead of the new link sentence, and have critical-rules.md say whether demo mode may invent the business name, since it only speaks of "proof" and the name isn't proof. Introduced here; non-blocking.
There was a problem hiding this comment.
[Claude Code 🤖] Partly resolved in a02fbd2. The sentence now begins "unless the user picked the concept-or-pitch answer", and demo mode may use an obviously fictional business name and street. Still open: in a concept run the model chose a plausible name that could belong to a real business, so "obviously fictional" does not hold as written and needs a stricter rule or an accepted tradeoff.
- design-playbook and domain-interview sample-data lines now scope "real content" to records and point at the rule; domain-interview's never-invent guard names the sample-record exception and demo mode. - critical-rules: records are interchangeable entries the user edits (dishes, products, screenings); fees for a service the business performs are copy. Personal sites are an explicit exception to demo mode and the two-slot cap does not apply to their owner slots. Demo mode may use an obviously fictional business name. - index.md: the never-invent sentence is scoped to builds where the user did not pick the concept-or-pitch answer. - glossary entry follows the records wording. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Drop motion-authoring, motion-baseline and the scroll reveal-and-scrub pattern: card-motion (glimmer-motion and Choreo) is now the one way to animate a card, and a build animates only when the user or the design asks for it. Review no longer marks down a still page. Never invent proof gains demo mode's guardrails and the two contradiction fixes from #205; the app rules gain the free catalog-button row, the viewCard guard and the hand-off note. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Linear: ECO-600
Why
With no real details, first builds invent claims about the user's business: named dentists, ratings, testimonials, "since" years, a made-up team and policies. A blunt "never invent" goes the other way and turns sample records into empty boxes (every menu price a "PRICE" box). #196 added one scoped sentence to the Just build it path; this adds the full rule, for every build.
What changes
critical-rules.md→ Never invent proof:index.md: the real-details question gets It's a concept or pitch — make up realistic details, marked as samples, and Ask one call of questions before a "Just build it" build #196's sentence links to the rule.Tested
Claude in the terminal, Just build it, the user skipping the details, one run each:
Not covered
🤖 Generated with Claude Code