UC-6 — Explain a scenario that does not clear
Route: pastes a segmently.ai/unit-economics link; "why doesn't it clear", "we lose money — where is the gap?" (SKILL.md § Router) · Eval: P6 · MCP: uc-6
Turns
- None required: the pasted link (or the project) is the base. An input the reader states is filled in before the runs; nothing else is asked before the answer.
Calls
npx -y @segmently/cli ue parse "<link>"→npx -y @segmently/cli ue evaluate "<link>" --explain— the link itself while the reader states no change, so itswalk.linesname "your link". No project: the variants go under.ue/<slug>/(a slug naming the reader's link), each a copy ofue parse'sscenariowith ONE change.npx -y @segmently/cli ue evaluate <variant>.json --explain— each located cause (each product alone on the paywall; with and without each mechanic) and each bracket point, its own run (rule 9).- The bracket per swept product knob (SKILL.md § The bracket):
paymentsCounted(0.01) andcompletionRate(half a point) — always, even with one product, nothing deducted and no mechanic; a value worked out by hand is only where it starts, never a cell. npx -y @segmently/cli ue link <file> --label '<name>'— the reader's link re-minted fromue parse'sscenariowith itslabeland ameasuredOnset: the source the reader named; none named: "reader-stated, source not given" — also when every value on the link equals the book's ("benchmark book, nothing measured", SKILL.md § Files, is for a scenario the skill built, never for a link the reader pasted) — and both bracket points of every sweep.
Answer skeleton
- The gap: the two CLI values side by side (
requiredValuePerTap,valuePerTap) and their absolute difference. - Where it sits: by product (each alone on the paywall), by deduction (the
waterfallrows), by mechanic (with and without) — each from its own run. When all three come back empty (one product, nothing deducted, no mechanic), say only that; never conclude the gap is in the chain alone — the product's own knobs move value per tap too, and the sweeps are their runs. - The link's
words.breakEvens, printed whole — the chain rows'todayandbreak-evencells are its values. A rate listed inbreakEvens.unreachableis not ranked at all — its line states it in words. - Rank fixes by distance to break-even, a table with exactly these columns:
lever | today | break-even | distance | measurable / belief.todayandbreak-evenare the two CLI values, side by side, in their own units; a swept knob's row names both bracket points, itsbreak-evencell the first clearing point at its landed value.distanceis the ABSOLUTE difference in the lever's own unit — the difference of the two values exactly as printed in thetodayandbreak-evencells: "cps $1.50 → ≤ $0.90, $0.60 lower"; "p3 35.0 % → ≥ 58.3 %, 23.3 points higher". A "% relative", "Δ %" or "×" column is a ratio you computed: never print one, and never rank by one.- Group the rows by unit — $ (cps) first, then points (p1, p2, p3 together), then each swept knob in
its own unit (charges, then completion points) — and inside each group order by absolute
distance, smallest first, whatever order
breakEvens.chainprints them in; never call one lever "closest" or "the easiest" across units — each distance stands in its own unit. measurable / beliefis a required column, one word per row — a lever the reader can instrument and measure today (cps,paymentsCounted,completionRate, the chain rates their analytics already counts) vs one that is a belief until tested (a take, a chain step they do not instrument). A row with no verdict in that column is an unfinished table.
- The links:
privacy.sentencefirst whenprivacy.due; the reader's link re-minted and both bracket points of every sweep, each under theue linkcall that minted it. The evaluate's ownmeasured_missing, cured by that re-mint, is reported once: "measured_missingon the evaluate's link → re-minted with measured=<note>". - The verdict, then the boundary:
walk.opener, the link's ownwalk.lines, then § Boundary's lines.
Boundary
Assembled (SKILL.md § The boundary) from the rendered walk: walk.opener, the link's own walk.lines
(ue evaluate "<link>" --explain; a pasted link carries no source note unless measured= is on it),
then:
- each sweep a rank row names, a line of its own at the landed values of both bracket runs: "the <knob> sweep points <last miss> and <first clearing> — assumed: a labelled sweep";
- not testable soon: each
beliefrow of the rank table, until the reader instruments it.
Stops
- A rate in
breakEvens.unreachableis not ranked; its break-even above 100 % is never a target. - A swept endpoint that comes back
clampedis reported typed → landed on its row (rule 9).