# Step Away Techbox QA v3.0

## App shell

Checked in this bundle:

- manifest.webmanifest is valid JSON
- service-worker.js and sw.js are present
- index.html and index.php both use the app powered v3.0 home copy
- settings include app, rules, case pack and variable version numbers
- data/variables.json exists for tuning structure
- pinned feedback panel exists in the active play screen
- session restore toast copy exists: Session restored. Your case was saved.
- hidden tuning route exists at tuning.php

## Function call and load order risk

The v3.0 patch keeps the core app script loaded after the DOM and avoids calling app functions before the static shell is present.

Specific runtime issue fixed:

- Joker resolution no longer refers to an undefined band object.
- Joker plays now create their own story emoji, impact, range tag and state copy before calling render and flash functions.
- Intervention story now returns emoji and impact values for the existing flashImpact call.

## API endpoint check

The following API content endpoints were checked locally through PHP built in server and returned JSON:

- settings
- cases
- cards
- campaigns
- wrinkles
- variables

## Data validation

The case and card data were parsed as JSON. Case IDs were unique, card IDs were unique, campaigns resolved, and every case beat had numeric suit targets for D, H, C and S.

## Browser test note

A full Chromium browser run could not be completed inside this sandbox because the installed Chromium has a managed policy blocking all URLs. Static syntax, PHP syntax, JSON parsing and local API endpoint checks were completed instead.

## Before public deployment

Change the shared admin/tuning password before public hosting.

Check on a real phone after upload:

1. Home screen loads.
2. Continue Case does not crash with no saved case.
3. New Case opens setup.
4. Case starts.
5. Single card submit works.
6. Weave submit works.
7. Joker buttons work.
8. Refresh restores the active run.
9. Pinned feedback remains visible after a play.
10. Install prompt/help works on Android Chrome.
