Commit Graph

16 Commits

Author SHA1 Message Date
Will Anderson 7e36983dd2 enforce source branch in CI: stage←dev, main←stage 2026-05-04 19:34:37 -05:00
Will Anderson 5fcb895dda Add release workflow with GCP prod publishing and ui-updated dispatch
Triggers on push to main and repository_dispatch el-sdk-updated.
Installs El SDK from foundation-prod Artifact Registry (Gitea fallback),
builds el-platform vessel, publishes to Gitea latest release and
foundation-prod Artifact Registry, then dispatches ui-updated to el-ide.
2026-05-04 19:32:14 -05:00
Will Anderson 0fddb7b5be update spec: mark ServerBackend SSR implemented, document hydration
Bumps spec version to 1.2.0.

Documents:
- SSR engine in runtime/src/ssr.js (Node.js, fully implemented)
- Hydration markers (data-el-component, data-el-id, data-el-state)
- hydrate() vs mount() and when to use each
- Full SSR + hydration lifecycle with code examples
- elc-ui CLI --target=server and --target=web flags
- Section 11: complete SSR + hydration walkthrough
- Section 12: versioning roadmap updated to reflect v0.1 actual state
- Section 9: clarifies that SSR is JS-implemented, Rust PlatformBackend is planned
2026-05-04 12:50:55 -05:00
Will Anderson 143137e2b4 add ssr-counter example demonstrating SSR + hydration end-to-end
Counter.el defines Counter, CounterPair, and App components with {#if}
conditionals, event handlers, and child component composition.

render.js (generated by elc-ui --target=server) is the Node.js render
script the server calls. app.js (generated by elc-ui --target=web) is the
compiled browser module. hydrate.js attaches the runtime to the
server-rendered DOM without replacing it.

index.html shows the integration point with instructions for injecting
server output and the two CLI commands needed to regenerate both targets.
2026-05-04 12:49:19 -05:00
Will Anderson f8e32e7719 add elc-ui CLI with --target=web and --target=server
elc-ui is a Node.js compiler CLI that reads .el component files and emits
either a browser ES2022 module (web target) or a Node.js CJS render script
(server target).

The server target embeds the component source at compile time and exports
renderToString(componentName, props) -> HTML string, which any El web server
can require() and call. CLI mode (node render.js ComponentName propsJson)
lets the web server invoke it via exec() as a subprocess.

The web target emits class-per-component JS matching the hand-compiled
format, so compiler output and hand-written components are interchangeable.
2026-05-04 12:47:34 -05:00
Will Anderson d24bb29817 implement el-ui SSR engine with renderToString and hydration markers
Adds runtime/src/ssr.js: a Node.js SSR engine that parses .el component
source and renders to HTML strings without a DOM. Covers the full template
AST -- elements, text, interpolations, {#if}, {#each}, {#activate}, and
child component recursion.

Every component root element receives hydration markers:
  data-el-component, data-el-id, data-el-state

Event bindings (on:click etc.) are preserved as data-el-* attributes so
the client hydration pass can bind them without re-rendering.

Updates Component base class with:
  - initialState constructor param for SSR state recovery
  - _hydrate(root): binds events on existing DOM, no re-render
  - onHydrate() lifecycle hook

Updates dist/el-ui.js bundle to match.
2026-05-04 12:45:27 -05:00
Will Anderson a9adea3b96 add gitflow CI for dev/stage/prod environments 2026-05-04 08:55:32 -05:00
Will Anderson 9f0da76ca2 remove rust scaffolding — el is the implementation 2026-05-03 04:05:04 -05:00
Will Anderson c5e34ed09b snapshot before rust archive archive/rust-scaffold 2026-05-03 04:04:43 -05:00
Will Anderson f4abfe6fdc feat: rename crates/ → vessels/ + add El ports per sub-vessel
Belated rename commit for foundation/el-ui — was missed in the
workspace-wide crates→vessels pass earlier today. Same structural
intent as the rename in the other repos: 'crates' is the Rust word,
'vessel' is El's, and the directory rename is the marker that this
slot holds an El buildable unit even if its current contents are
still Rust pending port.

Plus the El ports themselves — manifest.el + src/main.el per sub-
vessel (el-aop, el-auth, el-config, el-i18n, el-identity, el-layout,
el-platform, el-publish, el-secrets, el-services, el-style, el-ui-
compiler). The ui-compiler is a stub: elc only emits C right now;
generating browser-target JS/Wasm is the biggest open language gap
and gets its own project. Until then, el-ui-compiler emits a JS
module that throws elc.backend_missing so callers fail loudly.
Cross-repo path dependencies in Cargo.toml updated to vessels/.
2026-04-30 18:18:39 -05:00
Will Anderson f09803c317 Replace el.toml with manifest.el throughout — El manifests are El, not TOML 2026-04-29 22:48:36 -05:00
Will Anderson 2b2ca8a59e Update framework spec; add counter and todo examples 2026-04-29 08:50:26 -05:00
Will Anderson ef841d8a01 add el-style, el-layout, el-i18n, el-config, el-secrets: responsive by default, theme-driven, zero breakpoints 2026-04-27 20:18:47 -05:00
Will Anderson 76f419ad7a add el-identity: Engram-native identity, OAuth, @authenticate by default 2026-04-27 20:04:52 -05:00
Will Anderson c01d817141 el-ui v2: universal platform, service bindings, AOP, auth, publish pipeline 2026-04-27 19:52:29 -05:00
Will Anderson ea56ad6e09 feat: el-ui — activation-based frontend framework, spreading activation reactivity, graph state 2026-04-27 19:15:53 -05:00