Skip to content

chore: v0.19.0 release - chat channel, docs, Docker infrastructure#69

Merged
mcheemaa merged 3 commits into
mainfrom
release/v0.19.0
Apr 16, 2026
Merged

chore: v0.19.0 release - chat channel, docs, Docker infrastructure#69
mcheemaa merged 3 commits into
mainfrom
release/v0.19.0

Conversation

@mcheemaa
Copy link
Copy Markdown
Member

Summary

Release prep for v0.19.0 - the web chat channel release.

Docker infrastructure

  • Entrypoint seeding: chat-ui SPA and base templates sync from image into phantom_public volume on every container start. Eliminates the manual overlay + chown pattern for Docker Hub deploys.
  • .dockerignore updated for chat-ui build artifacts
  • docker-compose.user.yaml: production hardening (oom_score_adj, cpu_shares, pids)
  • .env.example: OWNER_EMAIL for Slack-less web chat login

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

  1. git tag v0.19.0 && git push --tags - triggers docker-publish.yml
  2. GitHub Actions builds and pushes ghostwright/phantom:0.19.0 + :latest to Docker Hub
  3. Deploy to cheeks: docker compose pull && docker compose up -d
  4. Verify end-to-end

Test plan

  • bun test: 1,584 pass, 0 fail
  • bun run typecheck and bun run lint: clean
  • Reviewed for leaked secrets (deploy-new-phantom.md moved to local/)
  • No em dashes in new content

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
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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.
@mcheemaa mcheemaa merged commit 00302cb into main Apr 16, 2026
1 of 2 checks passed
mcheemaa added a commit that referenced this pull request Apr 16, 2026
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant