Commit Graph

11 Commits

Author SHA1 Message Date
davidtio
6692d5a053 refactor: migrate from Java HttpServer to Thorium framework
Replace com.sun.net.httpserver routing with Thorium's Server/Action/annotation
pattern. TaskController now owns @Get/@Post routes, form binding via data-mapping,
and the renderPage()/esc() helpers moved from Main. Main reduced to a 9-line
Thorium server entry point.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 23:31:18 +08:00
davidtio
9f0ecf67da fix: revert uid=1000 pin — compose sets user: "0" instead
In rootless Docker, uid=0 in-container = cldrzd on host (not privileged).
Pinning to uid=1000 in-container mapped to host uid=100999 (phantom UID),
which cannot write to the cldrzd-owned data directory.

The Dockerfile USER directive is overridden by compose user: "0" anyway,
so revert to a standard non-root app user without explicit uid/gid.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 19:05:19 +08:00
davidtio
776a6e8973 Pin app user to uid/gid=1000 for Clouderized bind mount compatibility
Clouderized platform convention: all containers run as uid=1000/gid=1000
so data directories (owned by host cldrzd user) are writable without
insecure world-write permissions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 18:47:21 +08:00
davidtio
4760fd22c0 Bump to v2.0.0: blue theme upgrade demo
Changes version to 2.0.0 and header color from teal (#0F766E) to blue (#1D4ED8).
Used to demonstrate a zero-data-loss upgrade on Clouderized.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v2.0.0
2026-02-28 17:59:31 +08:00
davidtio
371f2c949d Add SQLite persistence via Docker named volume
Tasks are now stored in SQLite (DB_PATH env var, defaults to ./tasks.db).
Pre-seeding runs only when the table is empty, so upgrades preserve data.
This is the v1.0.0 baseline for the persistence demo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v1.0.0
2026-02-28 17:59:26 +08:00
davidtio
78a5f98f11 Fix /data permissions: create directory owned by app user
Docker mounts named volumes as root by default. Without pre-creating /data
in the image with correct ownership, the app user cannot write tasks.db,
causing a 502 on any route that touches TaskStore.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:59:20 +08:00
davidtio
252ed3b4ec Add Dockerfile back to customer repo
Dockerfile is customer-owned. docker-compose.yml and clouderized.yaml
are operator-generated and live outside the customer repo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 13:59:20 +08:00
davidtio
fcec28bdf9 Remove Dockerfile and clouderized.yaml from customer repo
These are operator-managed files generated by the Clouderized platform.
Customer repos contain source code only.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 13:50:22 +08:00
davidtio
68ce73bb55 Switch to Greenfossil Thorium 0.10.10 on Scala 3.7.1
- Update group ID from io.github.nicoburniske to com.greenfossil
- Downgrade thoriumVersion to 0.10.10
- Expand assemblyMergeStrategy for Armeria/Netty service files and module-info.class
- Fix Dockerfile COPY path to scala-3.7.1

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 13:42:01 +08:00
davidtio
2a7c3151eb Upgrade Dockerfile to JDK 25 and Scala 3.8.2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 13:35:31 +08:00
davidtio
93e8401ed3 Initial commit: Scala/Thorium task manager demo app 2026-02-28 13:09:48 +08:00