# Starfall Haven 0.4.0 Qualification

## Automated
- 49 JUnit tests passed with 0 failures/errors/skips.
- `lintDebug` passed.
- Signed release and release vital lint passed.
- Version-4 save round trip is byte-stable, including accepted Grok narrative.
- Frozen v1/v2/v3 save migration coverage passed.

## Proxy/security
- Live service: `starfall-chronicle.service` on loopback port 18083 behind Caddy.
- Live model: `x-ai/grok-4.6` through OpenRouter.
- Live structured response succeeded and returned only title/story/tone.
- Unknown catalog events returned HTTP 400.
- Android carries no OpenRouter authorization header or token.
- Server token is root-owned mode 0600.
- Proxy request size, event allowlist, numeric ranges, rate limit, strict JSON schema, accepted prose bounds, and upstream timeout are enforced.
- Local deterministic fallback remains playable when the proxy fails or is offline.

## Emulator
- Qualified on API 35 at 1212×540 landscape / 420 dpi.
- Signed 0.3→0.4 install-in-place succeeded and version changed to 0.4.0 without signature rejection.
- Chronicle panel fit without clipping or navigation overlap.
- A day-2 Salvage Pod incident fired automatically, appeared once in history, and changed local tension.
- A real Android→AnimeFu→OpenRouter→Grok request returned HTTP 200 and displayed `SOURCE GROK` in-app.
- Grok updated the matching history title/story without applying a second consequence.
- No fatal exception, ANR, `NetworkOnMainThreadException`, `StrictMode`, or save exception was observed.

## Known limits
- Physical Pixel 9a / Android 16 qualification is still recommended.
- The qualification colony was intentionally accelerated for event testing and later died while left at ×4; this is test-operation fallout, not a Chronicle crash.
- Grok availability depends on AnimeFu, OpenRouter, model availability, and account credit; local narrative is the supported fallback.
