assessment-model/.devcontainer/devcontainer.json
Jun-te Kim b69ef47f22 feat(impeccable): vendor the skill and wire up live mode
Live mode (impeccable.style/live-mode) never worked here because the skill was
never actually installed: postCreate ran `skills add pbakaus/impeccable
--global`, which silently no-ops — it's absent from ~/.claude/skills. Vendor it
into .claude/skills/impeccable instead, so live mode's scripts/ sit on a stable
path and everyone gets the same version (`npx impeccable update` to refresh).
Drop the dead postCreate step.

Live-mode wiring:

- .impeccable/live/config.json for Next.js App Router (src/app/layout.tsx,
  </body>, jsx). detect-csp.mjs reports no CSP in this project, so no config
  patch is needed and cspChecked is honestly true.
- Forward port 8400 with requireLocalPort. The script injected into the page
  hard-codes http://localhost:8400, so if VS Code remaps it the element picker
  silently never loads — the one devcontainer-specific trap here.
- Ignore the per-session journal/screenshots; keep the configs tracked.

DESIGN.md is required — live.mjs refuses to boot without it (context_missing).
Generated via the `document` skill from the actual codebase, so it records what
the code really does, including the gaps (dark mode defined but dead, --font-sans
referenced but never defined, --radius unused, the broken Tremor colour block).
Worth a read rather than a rubber stamp: it's the context live mode generates
variants against.

Verified: live.mjs boots ok with the helper on 8400 and injects into layout.tsx;
live-server.mjs stop strips the tag back out cleanly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 17:32:06 +00:00

61 lines
2.4 KiB
JSON

{
"name": "assessment-model",
"dockerComposeFile": "docker-compose.yml",
"service": "frontend",
"remoteUser": "vscode",
"workspaceFolder": "/workspaces/assessment-model",
// Host preflight: ensure GitHub auth exists before we try to build.
// Either ~/.config/gh (from `gh auth login`) or a GITHUB_TOKEN env var.
"initializeCommand": "test -d \"$HOME/.config/gh\" || test -n \"$GITHUB_TOKEN\" || { echo >&2 'error: no GitHub auth found. Run `gh auth login && gh auth setup-git` on the host, or export GITHUB_TOKEN, then retry.'; exit 1; }",
// Install Domna's curated skill set (pinned to 0.0.5) into this workspace,
// then install npm deps. `gh repo clone` handles private-repo auth using
// the mounted host ~/.config/gh.
// impeccable (github.com/pbakaus/impeccable) is no longer installed here: the
// old `skills add --global` step silently never landed it, and live mode needs
// its scripts/ on a stable path anyway. It's now vendored at
// .claude/skills/impeccable and updated with `npx impeccable update`.
"postCreateCommand": "gh repo clone Hestia-Homes/agentic-toolkit /tmp/agentic-toolkit -- --branch 0.0.8 --depth 1 && bash /tmp/agentic-toolkit/setup.sh && npm install",
"forwardPorts": ["frontend:3000", "pgadmin:80", "frontend:6080", "frontend:8400"],
"portsAttributes": {
"frontend:3000": {
"label": "Next.js"
},
"frontend:6080": {
"label": "Playwright noVNC desktop",
"onAutoForward": "silent"
},
// impeccable live mode's helper server (serves /live.js + SSE to the page).
// The script injected into the app hard-codes http://localhost:8400, so this
// must land on host port 8400 exactly — if VS Code remaps it to a free port
// because 8400 is taken, the element picker silently fails to load.
"frontend:8400": {
"label": "impeccable live helper",
"onAutoForward": "silent",
"requireLocalPort": true
}
},
"mounts": [
// Optional, just makes getting from Downloads (local env) easier
"source=${localEnv:HOME},target=/workspaces/home,type=bind"
],
"customizations": {
"vscode": {
"settings": {
"files.defaultWorkspace": "/workspaces/assessment-model",
"editor.formatOnSave": true,
"editor.tabSize": 2,
"editor.insertSpaces": true
},
"extensions": [
"esbenp.prettier-vscode",
"Anthropic.claude-code"
]
}
}
}