Skip to main content

Native EAS demo build log

Tier: Public
Status: G1 core closed 2026-06-03 — EAS preview APK + device §5.1 (rows 1–5) PASS on demo; optional row 6 (native PDF) FAIL — tracked below
Started: 2026-05-27
Last updated: 2026-06-03 (device smoke + native PDF gap)
Scope: July 2026 native EAS demo closure — preview APK → https://demo.umbraculum.dev

[!NOTE] This log tracks the demo-only EAS loop. It does not start cloud.umbraculum.dev.


Where we are (resume here for G1)

TrackStateWhat happens next
Repo / docs (this commit)Doneeas.json → demo URL; runbooks; surface doc §5.2; EAS-DEMO-SETUP.md
Pre-build gates (local)Done (2026-05-27)Re-run before EAS if packages/** or apps/native/** changed
Phase 0 — demo.umbraculum.dev liveDoneDemo web + API in use for smoke (2026-06-03)
Phase 1b/c — EAS project + EXPO_TOKENDone@umbraculum/umbraculum-brewery; app.config.js bakes demo URL into expo.extra
Phase 3–4 — APK + device smokeCore doneLocal eas build --profile preview; §5.1 rows 1–5 PASS; row 6 native PDF FAIL
Gate G1 (surface doc §8)Core closedOptional native PDF deferred — Known gaps

When you return: work top-to-bottom in Maintainer closure (required for G1), then check §5.1 boxes in canonical-native-platform-surface.md and update this log.


Source documents


Phase table

PhaseStatusDeliverableVerification
0 — Demo hostDone (2026-06-03)demo.umbraculum.dev livecurl https://demo.umbraculum.dev/api/health{"ok":true}
1 — EAS repo wiringShippedeas.json preview.env, runbook, cloud stubSee commit on master
1b — EAS project IDDone (2026-06-03)eas init + projectId in app.json / app.config.js@umbraculum/umbraculum-brewery
1c — GitHub secretDone (2026-06-03)EXPO_TOKEN on repoLocal eas build used; GHA optional when public
2 — Pre-build gatesShipped (2026-05-27)dist check, native-deps, vitestSee Pre-build gates
3 — Android preview buildDone (2026-06-03)Expo internal APKLocal eas build --profile preview (APK installed on device)
4 — Device smokeCore done (2026-06-03)§5.1 rows 1–5 on physical AndroidRow 6 native PDF FAIL — see Known gaps
5 — Docs sign-offShipped (repo)Surface doc §5.2 URL, this log, runbook, cloud stubG1 core closed 2026-06-03

Repo changes (shipped)

ArtifactChange
apps/native/eas.jsonpreview.env: EXPO_PUBLIC_API_BASE_URL / MEDIAhttps://demo.umbraculum.dev
demo-host-runbook.mdDemo policy, accounts, infra checklist
cloud-hosted-product-track.mdFuture cloud track stub
canonical-native-platform-surface.md §5Demo naming + distribution URL
NATIVE-STRATEGY-AND-CI.md §5Demo host + EAS
scripts/demo-host-verify.shExit 0 = demo API ready
scripts/demo-native-api-smoke.shAPI paths (login, recipes, webview-exchange)
infra/nginx/demo.confserver_name demo.umbraculum.dev for VPS

G1 resume attempt (2026-05-27)

StepResult
./scripts/demo-host-verify.shFAIL — HTTPS timeout; HTTP returns registrar parking HTML
./scripts/demo-native-api-smoke.sh (local)PASSBASE_URL=http://localhost:18080 (API parity only; not G1)
SSH 216.40.34.41:22Timeout — cannot deploy from agent environment
eas whoamiNot logged in — run eas login locally, then eas init per EAS-DEMO-SETUP.md
Device §5.1Not run — requires EAS APK + physical Android

Your next commands (in order):

# 1) After VPS + TLS + compose deploy:
./scripts/demo-host-verify.sh

# 2) Expo + EAS (on your machine):
cd apps/native && npx eas-cli login && npx eas-cli init
# commit projectId; add EXPO_TOKEN to GitHub; run native-eas-build workflow

# 3) On device: install APK; complete §5.1 table below

Pre-build gates (maintainer / CI)

cd $REPO_ROOT
./scripts/check-packages-dist-up-to-date.sh
# native-deps parity (container — matches .github/workflows/native-deps.yml):
docker run --rm -v "$PWD:/repo" -w /repo node:20-slim \
bash -lc "npm ci --no-audit --no-fund && ./scripts/check-native-expo-doctor.sh && npm run typecheck -w @umbraculum/native-brewery"
npm run test -w @umbraculum/native

Record last green run date here when executed: 2026-05-27 (agent): check-packages-dist OK; expo install --check + apps/native typecheck OK; npm run test -w @umbraculum/native OK. curl https://demo.umbraculum.dev/api/healthunreachable (DNS/host not live yet).


EAS build (fill when run)

FieldValue
Profilepreview
Platformandroid
Expo build IDpending
APK URLpending
EXPO_PUBLIC_API_BASE_URL bakedhttps://demo.umbraculum.dev

Trigger: GitHub Actions → native-eas-buildplatform=android, profile=preview (requires EXPO_TOKEN) — GHA is appropriate now that the repo is public; during long Expo free-tier queues, local eas build may still be faster (see EAS-DEMO-SETUP.md § “Expo free tier”).

Expo Doctor

DateScoreDoc
2026-06-0718/18 (post-remediation)expo-doctor-monorepo-assessment.md; CI: check-native-expo-doctor.sh

Reproduce: root npm cicd apps/native/brewery && npx expo-doctor@latest. CI: native-deps.yml.


Queue + quota note (2026-06-03): Expo Free plan — monthly build allowance (dashboard: 15 Android + 15 iOS of 30 total; 1 concurrency; EAS Update 1,000 MAUs + 100 GiB / month). Not unlimited; occasional demo builds are within policy. First preview Android build sat in Free Tier Queue (~1h+ waiting for available worker) while a private-repo GHA job polled Waiting for build to complete — expected. GHA workflow canceled; Expo build allowed to finish independently. See EAS-DEMO-SETUP.md § “Expo free tier”.


Device smoke (§5.1) — fill on device

#CheckPass?Notes
1Cold startYesEAS preview APK, 2026-06-03
2Login (demo admin)Yese2e-admin@brewery.local / demo password
3Dashboard / healthYesAPI health {ok:true} on demo
4Recipes → recipe → water hubYesVia Mashing and sparging recipe
5Inventory → Open on webYesOpens demo.umbraculum.dev/en/inventory
6Brew session PDF (optional)No (native)PASS demo web (e2e session); FAIL native Export work order (PDF) — see Known gaps
7Yeast mediaNot run

Known gaps (address later)

Native brew session PDF export (2026-06-03)

SurfaceResult
Demo webPASS — e.g. brewery-brew-session-e2e00000-…000bbe
Local web (localhost:18080)PASS (same flow on dev stack)
EAS preview APK → https://demo.umbraculum.devFAIL — generic “export failed” alert

Implication: Demo rendering / Gotenberg / MRP work-order templates are OK. The gap is native-only: async render job + artifact URL for platform: "native" + Linking.openURL (Bearer client), not demo VPS.

Code path: apps/native/brewery/src/modules/brewery/screens/BrewSessionDetailScreen.tsxrunAsyncRenderJobExportpackages/platform/api-client/src/platform/rendering.ts.

Scope: Optional §5.1 row 6 — does not reopen G1 core closure. Fix deferred.


Maintainer closure (required for G1)

Repo wiring for this plan is shipped. Gate G1 in canonical-native-platform-surface.md §8 core closed 2026-06-03 after:

  1. Demo host live — done.
  2. eas init + projectId + app.config.js extra for demo API URL — done.
  3. EXPO_TOKEN on GitHub — done; preview APK built locally (GHA optional when repo public).
  4. Device smoke — §5.1 rows 1–5 PASS on physical Android (table above).

Open follow-up: Native brew session PDF on device (optional row 6).


Explicitly not claimed

  • cloud.umbraculum.dev or production hosted SaaS
  • iOS EAS build (follow-up)
  • Play Store release
  • Native MRP/CRP UI