Question nav: a followup is offered only once it is earned

The 0.3.34 rule listed every followup "further down" from the current
page, so the front door offered the thank-you pages before anything
was submitted, and a followup one typed in offered the ones beyond
it. The chain half was weaker than it looked too: it matched the
question the chain answered, which is a front door anyway.

Now a followup is offered only when the visitor has earned it: their
verified chain answered the alternative that leads there (the chain
index records the alternative from here on; older nodes fall back to
every recording alternative of the answered question, and nothing
beyond it), or it hangs off an earned page by a link that records
nothing. A page behind an answer they have not given is never offered.
The walk ends at any front door, so "back to the start" never fans out.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L4jrCgLiKKHAEFuZUJjckH
This commit is contained in:
Bendik Aagaard Lynghaug
2026-09-22 16:58:40 +02:00
co-authored by Claude Fable 5.1
parent 366ff51a0a
commit e67e841f8c
5 changed files with 123 additions and 68 deletions
+4 -3
View File
@@ -71,9 +71,10 @@ stream.
parent(s), so a visitor's path through the questions is a verifiable
lineage; `?chain=` links carry it, and self-service transitions
(unsubscribe) authorize by holding one. The question nav reads it
too: a `followup` page is offered only when it is on that path (the
page the chain verifiably answered) or further down from the current
page over `action` edges - one followup path never unlocks another.
too: a `followup` page is offered only once the visitor has earned
it - the chain verifiably answered the alternative that leads there,
or it hangs off an earned page by a link that records nothing. A
page behind an answer they have not given is never offered.
- **Business needs as a checkable spec** (`src/needs.rs`,
`question_lint`): a content repo may ship a `needs.yaml` saying who
wants what, which bucket the answer must land in, and which group