docs(adr): the proposal is the product; OrangeCat and Solon are add-ons - #799
Open
catomean wants to merge 3 commits into
Open
docs(adr): the proposal is the product; OrangeCat and Solon are add-ons#799catomean wants to merge 3 commits into
catomean wants to merge 3 commits into
Conversation
Amends ADR-0003 (#787) before anything is built against it. The original made the OrangeCat claim the spine of the pitch, which puts a Bitcoin wallet in the critical path of selling a bakery a website. Most prospects have never heard of any of it. Inverted: the proposal is the primary artifact, the website is the product, and OrangeCat (economy) and Solon (governance) are opt-in add-ons offered only after a yes. The proposal is FleetCrown's object and is deliberately not behind OrangeCat auth - requiring an account to read an offer is the leak this closes. Also corrects a factual error: the claim flow described as future work already ships (compare-and-swap redemption, username collision fallback, rollback, revoke, 180-day expiry). Only the ingest door is missing, which moves it off the critical path. Adds field-level provenance so 'fabricate no facts' becomes a check rather than a rule someone remembers - a closed schema invites completion, so unknown must be distinct from empty. --no-verify: docs-only, and the pre-commit hook needs node_modules this worktree does not have. CI is the gate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AZCNYHwjEeqxNpYCUk6Yna
Solon is the governance pillar and is at an early stage - not ready to be sold to a stranger. It gets no place in the pipeline at all for now: not a layer, not an add-on, not a sentence in a proposal. Build toward it, offer nothing. Selling an unready governance layer to a Verein that trusted us over a website would cost more than it earns. Adds 'What the pitch must not imply'. If a prospect suspects the website is bait for a crypto onboarding they stop evaluating it on its merits, and the site is the only thing here with self-evident value - the suspicion costs the sale, not just the upsell. Made structural rather than promised: the website must be deliverable in full with zero OrangeCat dependency, so 'this is not a funnel' is demonstrable. No Bitcoin vocabulary in first contact; the proposal is never an account signup. Also states the website as the magic moment, which orders the artifact: the site comes first, above the fold, before any account of who we are. --no-verify: docs-only, pre-commit needs node_modules this worktree lacks. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AZCNYHwjEeqxNpYCUk6Yna
Adds the self-serve door: paste your own URL, watch it build. Different consent posture from outbound - the subject initiated it, so there is no unsolicited artifact, no takedown negotiation and no claim row. Strictly safer, better business, and the way to exercise the generator at volume. Its mirror-image risk is that anyone can paste anyone's URL, so self-serve output is ephemeral and unpublished by default; publishing needs the same yes as outbound. Rate limited with limitkit, which fleetcrown already runs. The build is the show: stream the scrape and assembly rather than hiding it behind a spinner. Watching your own shop become a good website is the wow moment; a reveal after thirty silent seconds is a worse version of it. Makes 'best practices and perfect design' checkable instead of promised. The generated repo ships the golden CI from templates/ci and a real verify, so it passes verify-floor-audit.sh like any repo we own. It inherits the SHAPE of @fleet/design-tokens - knobs block, primitive/semantic tiers, Tailwind referencing vars - but never its VALUES, because those make things look like OrangeCat and a bakery has to look like itself. Before/after becomes two ui-defect-audit.mjs runs rather than two adjectives. That is what makes volume safe: the hundredth site is the first one nobody looked at unless the same gates hold it. --no-verify: docs-only, pre-commit needs node_modules this worktree lacks. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AZCNYHwjEeqxNpYCUk6Yna
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Amends ADR-0003, merged yesterday in #787, before anything is built against it.
The correction
The original made the OrangeCat claim the spine of the pitch: a prospect
received a profile and claimed it. That puts a Bitcoin wallet in the critical
path of selling a bakery a website — and requires a stranger to understand the
hardest concept in the stack before they can accept the easiest one.
Inverted here:
proposal is FleetCrown's object, carries its own token, and is deliberately
not behind OrangeCat auth — requiring an account to read an offer is the
leak this closes.
already said yes to a site.
for a bakery, and never in a first contact.
Onboarding people onto OrangeCat stays the upside; it stops being the entry fee.
An accepted site is a warm relationship with a real business, which is a far
better position to introduce it from than a cold link.
Also corrected: a factual error
The original described the claim flow as future work. It ships today —
/claim/[id]undernoindex,claimProfileClaimdoing a compare-and-swap onstatus = 'pending'so two tabs can't both win,findAvailableUsernameforcollisions, rollback to
pendingif applying the draft fails, plus revoke andthe 180-day expiry. What is missing is only the door in front of it, which moves
this off the critical path entirely.
New sections
The proposal — what a stranger actually opens: the live site at a real URL,
before/after side by side, defects measured rather than asserted (this is
dotfiles/scripts/ci/ui-defect-audit.mjspointed outward), the empty fieldsshown as empty, price, and two buttons. "Not interested" is one click, takes the
site down, no counter-offer — that is what makes sending something unsolicited
defensible.
Provenance instead of a remembered rule. "Fabricate no facts" was a sentence
someone had to remember. A closed schema actively invites completion — a model
handed a
statssection wants numbers in it. Sositekitseparates unknownfrom empty and every generated field carries its source URL or
inferred; nofield ships as
inferredin a real pitch. It also makes the empty-fieldsparagraph honest, which is the strongest part of the pitch.
Invariant
Unchanged and strengthened. Most prospects now never get a claim row at all, so
"money is never routable to an entity that has not accepted it" holds vacuously
for the majority rather than resting on pipeline discipline.
Implementation order
Now: sitekit → proposal page → sell one website by hand with no OrangeCat
offer at all → only then offer the profile to someone who already said yes →
only then build the pipeline.
Docs only. Committed with
--no-verify: the pre-commit hook runs lint +typecheck + unit tests and this worktree has no
node_modules; CI is the gate.🤖 Generated with Claude Code
https://claude.ai/code/session_01AZCNYHwjEeqxNpYCUk6Yna