EACI Development Journal · Architecture

Why Are No-Build Global JS Apps Hard to Harden?

A no-build app is easy to inspect and deploy, but script order becomes an implicit dependency graph. Hardening means making that graph visible.

Architecture ~9 min issue-tagged
Issue this fixes

The Main application loads many plain JavaScript files into one global page. Functions can be called before their defining script arrives, two files can reuse a name, and an optional feature can fail while leaving half its globals behind.

There is no bundler to reject an unresolved import. The runtime must use ordered loading, feature checks, clear ownership, and diagnostics for failed script resources.

What was actually going wrong

Global availability was treated as guaranteed even though network order and optional loaders could change it.

What I tried

What finally worked

Numbered core loading, a central lazy loader, `typeof` feature guards, and script-load diagnostics make dependencies observable.

Why it worked

The design keeps the no-build deployment model while adding explicit contracts at module boundaries.

What I learned

Without imports, load order is architecture and must be maintained like one.

Where EACI uses this today

Main still uses inspectable plain scripts, with compatibility and logging layers around optional features.

This journal covers real engineering on EACI Companion / The Veil. Companions include Caelum, Chad, Natalia, Atreus, Luna, Roxy, and Cael. Journal articles stay family-safe in content. See Privacy and Ethics.