comparison .claude/skills/zenbu-personal-site/SKILL.md @ 265:056790c4fb0d

add role-aware Epi assistant prompts Add verified June knowledge, guest/member/admin Copilot profiles, profile-isolated session recovery, animated Epi greetings, and a single authoritative runtime config workflow for inference. Co-authored-by: Copilot <[email protected]>
author MrJuneJune <me@mrjunejune.com>
date Fri, 07 Aug 2026 10:50:30 -0700
parents 04fee26ecce0
children
comparison
equal deleted inserted replaced
264:04fee26ecce0 265:056790c4fb0d
26 padding or height. 26 padding or height.
27 - New site CSS uses `--zenbu-sys-*` semantic roles. Do not consume 27 - New site CSS uses `--zenbu-sys-*` semantic roles. Do not consume
28 `--zenbu-ref-color-*` or add new `--zen-*` compatibility-token usage. 28 `--zenbu-ref-color-*` or add new `--zen-*` compatibility-token usage.
29 - `mrjunejune/test/`: integration tests and snapshots. 29 - `mrjunejune/test/`: integration tests and snapshots.
30 - `mrjunejune/BUILD`: Bazel build, bundle, asset movement, and test-visible filegroups. 30 - `mrjunejune/BUILD`: Bazel build, bundle, asset movement, and test-visible filegroups.
31 - `mrjunejune/.config` and `.config.development`: server configuration. Do not commit secrets. 31 - `mrjunejune/.config` is the single ignored runtime configuration source for
32 the server, auth, S3, inference, LiteLLM, and Copilot token paths.
33 `.config.development` is the committed copyable template. Do not use `.env`
34 files or require shell exports for normal build/run/deploy workflows.
32 - The JRPG chat is a production route. Seobeo owns conversation CRUD and POST 35 - The JRPG chat is a production route. Seobeo owns conversation CRUD and POST
33 SSE, Deita stores turns, and a Bazel-managed Python Copilot SDK sidecar uses a 36 SSE, Deita stores turns, and a Bazel-managed Python Copilot SDK sidecar uses a
34 loopback LiteLLM `github_copilot` provider. Never use a virtualenv or pip 37 loopback LiteLLM `github_copilot` provider. Never use a virtualenv or pip
35 install workflow. 38 install workflow.
36 39
86 runs its shards in parallel. Keep future slow browser scenarios in the narrowest 89 runs its shards in parallel. Keep future slow browser scenarios in the narrowest
87 independent shard, or create another shard rather than extending one serial 90 independent shard, or create another shard rather than extending one serial
88 test process. Give every shard its own port, temporary database, and fixture 91 test process. Give every shard its own port, temporary database, and fixture
89 state. 92 state.
90 93
91 Run the complete local inference stack with: 94 Authenticate Copilot once, using the token directory from `.config`:
92 95
93 ```bash 96 ```bash
94 export GITHUB_COPILOT_TOKEN_DIR="$HOME/.local/state/mrjunejune/inference/litellm-copilot" 97 bazel run //mrjunejune:run_inference_stack -- --authenticate
95 bazel run //mrjunejune/inference:litellm_proxy -- \ 98 ```
96 --authenticate \
97 --token-dir "$GITHUB_COPILOT_TOKEN_DIR"
98 99
99 LITELLM_MASTER_KEY='<local proxy key>' \ 100 Then run live inference with no shell configuration:
100 MRJUNEJUNE_ALLOW_ANONYMOUS_INFERENCE=1 \ 101
101 bazel run //mrjunejune:run_inference_stack 102 ```bash
103 bazel run //mrjunejune:run_inference_stack
102 ``` 104 ```
103 105
104 Use `bazel run //mrjunejune:run_inference_stack -- --mock` for deterministic 106 Use `bazel run //mrjunejune:run_inference_stack -- --mock` for deterministic
105 UI development through the real Seobeo, Deita, inference bridge, and SSE path 107 UI development through the real Seobeo, Deita, inference bridge, and SSE path
106 without Copilot authentication or a LiteLLM key. Mock stream scenarios are 108 without Copilot authentication or a LiteLLM key. Mock stream scenarios are
111 ## Production-minded checklist 113 ## Production-minded checklist
112 114
113 - Use Dowa's fixed-width aliases and `boolean`/`TRUE`/`FALSE` in first-party C 115 - Use Dowa's fixed-width aliases and `boolean`/`TRUE`/`FALSE` in first-party C
114 instead of introducing `<stdint.h>` `_t` types or `<stdbool.h>` `bool`. 116 instead of introducing `<stdint.h>` `_t` types or `<stdbool.h>` `bool`.
115 - Keep auth-protected APIs strict: missing auth should be `401`, invalid token `403`, malformed JSON/input `400`, unavailable DB/S3/ffmpeg `500`. 117 - Keep auth-protected APIs strict: missing auth should be `401`, invalid token `403`, malformed JSON/input `400`, unavailable DB/S3/ffmpeg `500`.
116 - Never hardcode secrets. Read configuration from `.config` or environment wiring already used by the Bazel target. 118 - Never hardcode secrets. Normal runtime configuration and secrets come from
119 the single ignored `.config`.
120 - Normal runtime settings belong in the single ignored `.config`. Environment
121 variables may be used internally between supervised subprocesses or as
122 backwards-compatible test/deployment overrides, but must not be required user
123 setup and must not replace `.config` with a `.env` file.
117 - For uploads and downloads, validate filenames and content lengths before touching `/tmp`. 124 - For uploads and downloads, validate filenames and content lengths before touching `/tmp`.
118 - For binary responses, set `content-length` and avoid string-only operations on body bytes. 125 - For binary responses, set `content-length` and avoid string-only operations on body bytes.
119 - If a route is part of the public website, add or update snapshot coverage in `mrjunejune/test`. 126 - If a route is part of the public website, add or update snapshot coverage in `mrjunejune/test`.
120 - Keep PWA changes consistent across `manifest.json`, `sw.js`, icons, and `PWA_SETUP.md`. 127 - Keep PWA changes consistent across `manifest.json`, `sw.js`, icons, and `PWA_SETUP.md`.
121 - Site themes use `data-zen-theme` with Auto, Paper, Ink, Playful, and 128 - Site themes use `data-zen-theme` with Auto, Paper, Ink, Playful, and