Apply post-M1 corrections to the planning package

This commit is contained in:
JesseMarkowitz
2026-09-02 06:03:10 -04:00
parent 645f07f06d
commit 1a28a9a708
8 changed files with 304 additions and 35 deletions
@@ -1,6 +1,6 @@
# ADR 004 — Local-Only Production Default
**Status:** Accepted; Phase 0B hardening requirements identified
**Status:** Accepted; Phase 0B hardening requirements identified; testing consequence strengthened after M1
## Decision
@@ -31,6 +31,27 @@ The selected AI-DnD base does **not** satisfy this requirement unchanged:
These are bounded production-hardening tasks rather than reasons to reject the fork.
## Testing Consequence
Strengthened after M1, which confirmed the failure mode this rule exists to catch.
**Offline behavior must be tested with a fresh cache/data state on a machine
with no route to the Internet.** Both inherited violations above were *first-use*
downloads: `tiktoken` caches its encoding to a temp directory, and the browser
caches Google's fonts. On any machine that had been online once, both were
invisible — the application appeared to work offline while depending on an
artifact an earlier online run had left behind. Neither was findable by static
analysis; each took an actually isolated run to surface.
Therefore an offline claim is only evidence when the test:
- runs on a network with **no route out and no external DNS**, verified before
the test rather than assumed,
- starts from a **fresh application data directory and a fresh cache**, so
nothing warmed by a previous run is available,
- exercises the **first** story turn, which is when a first-use download fires,
- observes actual network destinations rather than only the absence of an error.
## Consequences
The production application must avoid or remove:
@@ -48,4 +69,11 @@ The production application must avoid or remove:
Production packaging must contain all runtime assets required for ordinary story use after the user has installed the intended local Ollama models.
Vendored runtime artifacts should be **integrity-verifiable where practical**: a
recorded source and a digest the application checks when it loads them, rather
than an opaque blob nobody can re-derive. A substituted or truncated artifact
should then fail loudly instead of silently changing behavior — a corrupted
tokenizer table, for instance, would quietly change every token count the
context budget is computed from.
The storyteller application should bind to loopback by default. Ollama should default to same-host loopback but may be explicitly configured to an approved trusted-LAN endpoint for v1. This LAN inference path does not authorize LAN exposure of the storyteller UI/API. Arbitrary public/Internet inference endpoints remain prohibited in normal v1 configuration.