Islands now render their initial state as HTML on the server, like React SSR. The client hydrates with reactive behavior on boot. Root causes fixed: - is_signal/signal_value now recognize Dict-based signals (from signals.sx) in addition to native Signal values - Register "context" as a primitive so the CEK deref frame handler can read scope stacks for reactive tracking - Load adapter-html.sx into kernel for SX-level render-to-html (islands use this instead of the OCaml render module) - Component accessors (params, body, has-children?, affinity) handle Island values with ? suffix aliases - Add platform primitives: make-raw-html, raw-html-content, empty-dict?, for-each-indexed, cek-call Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
71 lines
2.5 KiB
YAML
71 lines
2.5 KiB
YAML
# Standalone dev mode for sx_docs only
|
|
# Replaces ~/sx-web production stack with bind-mounted source + auto-reload
|
|
# Accessible at sx.rose-ash.com via Caddy on externalnet
|
|
|
|
services:
|
|
sx_docs:
|
|
image: registry.rose-ash.com:5000/sx_docs:latest
|
|
environment:
|
|
SX_STANDALONE: "true"
|
|
SECRET_KEY: "${SECRET_KEY:-sx-dev-secret}"
|
|
REDIS_URL: redis://redis:6379/0
|
|
WORKERS: "1"
|
|
ENVIRONMENT: development
|
|
RELOAD: "true"
|
|
SX_USE_REF: "1"
|
|
SX_USE_OCAML: "1"
|
|
SX_OCAML_BIN: "/app/bin/sx_server"
|
|
SX_BOUNDARY_STRICT: "1"
|
|
SX_DEV: "1"
|
|
OCAMLRUNPARAM: "b"
|
|
ports:
|
|
- "8013:8000"
|
|
volumes:
|
|
- /root/rose-ash/_config/dev-sh-config.yaml:/app/config/app-config.yaml:ro
|
|
- ./shared:/app/shared
|
|
- ./sx/app.py:/app/app.py
|
|
- ./sx/sxc:/app/sxc
|
|
- ./sx/bp:/app/bp
|
|
- ./sx/services:/app/services
|
|
- ./sx/content:/app/content
|
|
- ./sx/sx:/app/sx
|
|
- ./sx/path_setup.py:/app/path_setup.py
|
|
- ./sx/entrypoint.sh:/usr/local/bin/entrypoint.sh
|
|
# Spec + web SX files (loaded by OCaml kernel for aser, parser, render)
|
|
- ./spec:/app/spec:ro
|
|
- ./web:/app/web:ro
|
|
# OCaml SX kernel binary (built with: cd hosts/ocaml && eval $(opam env) && dune build)
|
|
- ./hosts/ocaml/_build/default/bin/sx_server.exe:/app/bin/sx_server:ro
|
|
- ./sx/__init__.py:/app/__init__.py:ro
|
|
# sibling models for cross-domain SQLAlchemy imports
|
|
- ./blog/__init__.py:/app/blog/__init__.py:ro
|
|
- ./blog/models:/app/blog/models:ro
|
|
- ./market/__init__.py:/app/market/__init__.py:ro
|
|
- ./market/models:/app/market/models:ro
|
|
- ./cart/__init__.py:/app/cart/__init__.py:ro
|
|
- ./cart/models:/app/cart/models:ro
|
|
- ./events/__init__.py:/app/events/__init__.py:ro
|
|
- ./events/models:/app/events/models:ro
|
|
- ./federation/__init__.py:/app/federation/__init__.py:ro
|
|
- ./federation/models:/app/federation/models:ro
|
|
- ./account/__init__.py:/app/account/__init__.py:ro
|
|
- ./account/models:/app/account/models:ro
|
|
- ./relations/__init__.py:/app/relations/__init__.py:ro
|
|
- ./relations/models:/app/relations/models:ro
|
|
- ./likes/__init__.py:/app/likes/__init__.py:ro
|
|
- ./likes/models:/app/likes/models:ro
|
|
- ./orders/__init__.py:/app/orders/__init__.py:ro
|
|
- ./orders/models:/app/orders/models:ro
|
|
networks:
|
|
- externalnet
|
|
- default
|
|
restart: unless-stopped
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
restart: unless-stopped
|
|
|
|
networks:
|
|
externalnet:
|
|
external: true
|