File size: 3,326 Bytes
65e1839
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Reality Divergence β€” v2 Roadmap

The hackathon build is intentionally lean: two explicit tabs, schema-driven
generation, validation + fallbacks, and one atmospheric image per result. This
document parks the larger **routed, schema-driven architecture** as the post-
hackathon direction. Nothing here is required for the current submission.

## Guiding idea

Move from "two fixed tabs" to a **router β†’ policy gate β†’ prompt picker β†’
structured generation β†’ validation β†’ renderer** pipeline. Routing is decided in
*code*, never by the model picking its own route.

## Where we already are (β‰ˆ55% of the target)

| Target capability | Status |
|---|---|
| Schema-driven structured generation | βœ… done (`prompts.py` + parsing in `app.py`) |
| Per-intent output schemas | βœ… done (timeline β‰ˆ reflection; world β‰ˆ alt-history/fork) |
| Validation + never-crash fallback | βœ… done (`safe_int/str/list`, curated fallbacks) |
| Timeline / branch renderer | βœ… done (HTML spine, better/worse, winners/losers) |
| Safety guardrail (personal tab) | βœ… done (risk gate + 988 notice) |
| Uncertainty framing | 🟑 in prompts + a "speculative" badge; no per-claim tagging |
| Prompt picker | 🟑 by tab, not by router (2 routes, not 9) |
| Intent router + confidence + clarification | ❌ not built |
| Tone/mode selectors, confidence indicator | ❌ not built |
| Streaming staged output | ❌ not built |
| Conversational follow-up (turn-taking) | 🟑 reflection question shown statically |

## v2 backlog (priority order)

1. **Intent router** β€” one lightweight model (or rules) call classifying input into
   a taxonomy: `personal_regret`, `alternate_history`, `event_counterfactual`,
   `global_shock`, `regional_disaster`, `civilizational_fork`, `comparison`,
   `creative_weird`, `mixed`. Returns `primary_intent`, `secondary_intents`,
   `confidence`, `needs_clarification`, `divergence_scale`, `tone`, `image_policy`.
2. **Policy gate** β€” below a confidence threshold (~0.72) ask one clarifying
   question instead of generating; decide allowed output type.
3. **Per-claim epistemic tagging** β€” tag statements `certain | speculative |
   assumption`; render badges; downgrade tone when the model is over-confident.
4. **Image policy** β€” generate images only for `creative_weird` / explicit visual
   requests, not for reflective/uncertain output. (Current build always shows one
   decorative banner β€” revisit.)
5. **Single prompt box + mode/tone selectors + confidence indicator** to replace
   the two-tab split.
6. **Streaming** the response in stages (intent β†’ structure β†’ text β†’ timeline β†’
   image) so it feels fast.
7. **Retry-once on schema-validation failure** before falling back.
8. **Strict validation** via Pydantic/JSON-schema instead of the current `safe_*`
   coercion.

## Known design tensions to decide in v2

- **Images:** v2 spec says default-off, artifact-only. Current build shows one
  text-free atmospheric banner per result (decorative, not informational).
- **Visual style:** v2 spec favors restraint ("no chaotic gradients, reflective
  instrument"). Current build uses an animated gradient hero for impact.

## Reference

Architecture spec drafted from the Build Small field guide constraints and a
prompt-routing / structured-output design pass (June 2026).