chore: v0.19.0 release - chat channel, docs, Docker infrastructure#69
Conversation
Version bump to 0.19.0 for the Project 4 chat channel release. Docker infrastructure: - Dockerfile: public-defaults backup for entrypoint seeding - Entrypoint: sync chat-ui SPA and base templates into phantom_public volume on every start, chown to uid 999 - .dockerignore: exclude chat-ui/node_modules, dist, .vite - docker-compose.user.yaml: add oom_score_adj, cpu_shares, pids hardening - .env.example: add OWNER_EMAIL for Slack-less web chat login Documentation: - README: chat channel features, updated test/version badges - CLAUDE.md: tech stack, project structure, build commands, architecture - channels.md: full Web Chat section - getting-started.md: OWNER_EMAIL for no-Slack setup - security.md: chat auth, VAPID, attachment security - architecture.md: chat data flow, two-transcript invariant - deploy-checklist.md: chat-ui bare metal steps - docker-deploy.md: entrypoint seeding explained - CONTRIBUTING.md: test count, chat-ui build commands - memory.md: shared memory across channels Version references updated in: package.json, server.ts, mcp/server.ts, cli/index.ts, CLAUDE.md, README.md
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8b2ff1c05c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| # Image-owned files (chat-ui SPA, base template) must refresh from the new image. | ||
| if [ -d /app/public-defaults ]; then | ||
| echo "[phantom] Syncing public assets from image..." | ||
| cp -r /app/public-defaults/chat /app/public/chat 2>/dev/null || true |
There was a problem hiding this comment.
Copy chat assets into existing directory correctly
When phantom_public already contains /app/public/chat (the normal case after first boot), cp -r /app/public-defaults/chat /app/public/chat nests files under /app/public/chat/chat instead of refreshing /app/public/chat/*. On every restart this creates deeper nesting and leaves the top-level chat bundle stale, so Docker image updates do not actually update the served /chat client. Copying contents (for example .../chat/. into .../chat/) avoids this regression.
Useful? React with 👍 / 👎.
cp -r source dest creates dest/source/ when dest already exists. On second boot, /app/public/chat/ already exists from the first seeding, so the chat SPA would nest under chat/chat/ and the served files would be stale. Same fix for _examples/.
The Dockerfile used --system (dynamic allocation) for groupadd/useradd. Currently phantom gets UID 999 because no prior system users exist on oven/bun:1-slim. But any base image update that adds a system user first would shift the UID, breaking the hardcoded chown -R 999:999 calls in the entrypoint. Pinning explicitly with --uid 999 --gid 999 makes the entrypoint chown calls stable regardless of base image changes.
The tampered-ciphertext and tampered-auth-tag tests prepended "X" to the encrypted/authTag base64 string and sliced off the first char. When the original string already started with "X" (~1.5% probability per run), the tampered result equaled the original, decryption succeeded, and the toThrow() assertion failed. Replaced with flipFirstBase64Char() that guarantees a different first character. Verified 10 consecutive passes locally. This has been blocking CI on PRs #67, #69, and #70.
Summary
Release prep for v0.19.0 - the web chat channel release.
Docker infrastructure
Documentation
All 10 doc files updated to reflect the chat channel: README, CLAUDE.md, channels, getting-started, security, architecture, deploy-checklist, docker-deploy, CONTRIBUTING, memory.
Version bump
0.18.2 -> 0.19.0 across package.json, server.ts, mcp/server.ts, cli/index.ts, CLAUDE.md, README.md.
After merge
git tag v0.19.0 && git push --tags- triggers docker-publish.ymldocker compose pull && docker compose up -dTest plan
bun test: 1,584 pass, 0 failbun run typecheckandbun run lint: clean