Codebook state model · disable, old → new

Disable: “view-only” (old) vs “off means off” (new)

Framed panels below are real pixels — the shipped design system, the actual switch, badges, sidebar and dropdown. Only the three surfaces that change are shown; the codebook-page fold, quote badges, Add/Remove and the hand-made floor are unchanged.

Artefact — what the researcher sees Commentary — how & why (never in the product)

Tags sidebar

Quotes page

before
Tags
project-ikea2 tags
Your codebook
Behaviour
What people actually do
onboarding-friction
18
repeat-visits
7
Total25
Laws of UX
Jon Yablonski
Laws of UX
Heuristics from psychology
law-of-proximity
9
aesthetic-usability
5
Total14
after
Tags
project-ikea2 tags
Your codebook
Behaviour
What people actually do
onboarding-friction
18
repeat-visits
7
Total25
Pain points
Where it hurts
checkout-confusion
8
Total8
Commentary — why this changes

Before: a disabled codebook (“Laws of UX”) stayed fully listed — its groups, tags and counts occupying the sidebar exactly like an enabled one, with no marker that it was off. Its badges were already hidden report-wide, so the sidebar and the report disagreed. That mismatch is where the “invisible success” bug lived.

After: a disabled codebook is gone from the sidebar entirely — you bring it back with the lens switch. Contrast the eye-hidden group (“Pain points”): hide collapses the card to a muted, closed-eye stub — the one-click way back — and its tags keep autocompleting. Hide leaves a stub and stays reachable; disable removes the codebook and takes it off the board.

The eye toggles are drawn here at their hover appearance so they read in a still frame; in the app they fade in when you hover a codebook or group.

Autocomplete

typing a tag on a quote

before
la
project-ikea2 tags
launch-anxiety
Laws of UX
law-of-proximity
after
la
project-ikea2 tags
launch-anxiety
Laws of UX is off — no suggestions
Commentary — why this changes

Before: tags from a disabled codebook were still offered (dimmed). Accepting one applied a badge the filter then hid — an invisible add.

After: a disabled codebook’s tags aren’t offered — you can’t add what’s off, so the invisible add can’t happen. Note this is disable only; an eye-hidden group’s tags stay suggestable and auto-unhide when picked — that tactical flow is untouched.

New sessions added while disabled

re-apply behaviour

before
Disabledoff, still linked
+20 sessionscoded silently
Re-enablealready there
after
Disabledoff, not maintained
+20 sessionsnot coded
Re-enablecatch-up on the 20
Commentary — why this changes

Before: a disabled codebook kept auto-coding new sessions (gate = linked). Re-enable was instant, but you spent the LLM on a lens you’d switched off.

After: off never spends (gate = enabled). New sessions wait; re-enable runs one catch-up over just the 20 — and since you might never re-enable, you may never pay at all. Existing results are always kept, never re-billed.

Changes as a consequence of the new spec

  1. 1
    Tags sidebar drops disabled codebooks.
    was — still listed (view-only); eye-hidden groups keep their stub.
    TagSidebar.tsx — read disabledFrameworks, filter them out
  2. 2
    Autocomplete excludes disabled-codebook tags.
    was — suggested (dimmed) → invisible-success bug; hide stays suggested + auto-unhide.
    QuoteGroup.tsx — split hide (decorate) vs disable (existing exclude prop)
  3. 3
    Re-apply gate flips to enabled; disabled stops maintaining; re-enable runs a catch-up delta.
    was — gate on linked, kept coding while off (reverses commit 601f4f94).
    autocode.py reapply_active_frameworks + on-enable trigger
  4. 4
    Disable and Hide are separate mechanisms in copy + model.
    was — conflated (“the slider is disable (Hide/fold)”).
    design-codebook-library.md note + old mockup §2 caption
  5. 5
    Bring-back promise: existing free; new sessions catch up on re-enable.
    was — “free, no re-spend”, unqualified.
    codebook page “off · kept” copy
  6. 6
    Floor named by project (“project-ikea2 tags”), no switch, no Remove.
    was — generic “User tags” in the tags sidebar.
    TagSidebar.tsx header — use the project title

No new UX element. Every change reuses an existing component — the switch, eye toggle, badge, TagInput, sidebar. This is functional rewiring, not new pixels. (The one designed-but-unbuilt piece, the blue/grey status dot in the codebook-lens sidebar, is unaffected by this comparison.)