update postmortem with salt state details, update CLAUDE.md
postmortem now documents permanent fixes via salt states, added salt states section with top.sls targeting. CLAUDE.md updated: build server docs, SVG animation pattern changed from scroll-driven to click-to-play, post-processing checklist updated.
This commit is contained in:
parent
949bfaacc2
commit
524542c33a
2 changed files with 69 additions and 21 deletions
56
CLAUDE.md
56
CLAUDE.md
|
|
@ -251,24 +251,23 @@ venv/bin/python lib/tag_stats.py 5 # only tags with 5+ posts
|
|||
- Root SVG: `width="100%" height="100%"` with `viewBox` (never fixed pt/px)
|
||||
- RST embed: `:width: 100%` and `:align: center`
|
||||
|
||||
### Animation Pattern (CSS only, no JS)
|
||||
```xml
|
||||
<defs>
|
||||
<style type="text/css">
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
.anim { opacity: 0; animation: fadeIn 0.8s ease-out forwards; }
|
||||
.d0 { animation-delay: 0s; }
|
||||
.d1 { animation-delay: 3s; }
|
||||
/* ... increment by 2-3s per group */
|
||||
</style>
|
||||
</defs>
|
||||
```
|
||||
### Animation Pattern (click-to-play)
|
||||
|
||||
SVGs render fully visible by default. A play button overlay triggers sequential fadeIn animation on click.
|
||||
|
||||
**SVG markup:** No `<style>` block needed. Just wrap groups in `<g class="anim dN">` where N controls sequence order.
|
||||
|
||||
**JS controller** (added once per page via `raw:: html`):
|
||||
- Finds all SVGs with `.anim` elements, wraps each in a container, adds play button
|
||||
- On click: hides all `.anim` groups (opacity 0), then animates them in sequence using `@keyframes svgFadeIn` with calculated delays based on `dN` class values
|
||||
- Total animation spread scales to ~15s regardless of group count (`step = 15 / (maxD + 1)`)
|
||||
- After animation completes, restores full opacity & shows play button again
|
||||
|
||||
**Previous approach (scroll-driven CSS view-timeline) was removed** because browser support proved unreliable. See royal-we post for the working click-to-play implementation.
|
||||
|
||||
- Wrap each conceptual group in `<g class="anim dN">`
|
||||
- Groups fade in sequentially (3s apart for major concepts, 1-2s for chain elements)
|
||||
- Keep total animation under 30s
|
||||
- N values control sequence order (d0 appears first, d1 second, etc.)
|
||||
- Multiple groups can share the same dN class to appear simultaneously
|
||||
|
||||
### Graphviz Dot Conventions
|
||||
```dot
|
||||
|
|
@ -281,8 +280,9 @@ edge [color="#AAAAAA" arrowsize=0.6 fontcolor="#AAAAAA"]
|
|||
1. Strip `<title>` tags: `sed -i 's/<title>[^<]*<\/title>//g'` (prevents tooltip artifacts)
|
||||
2. Replace fixed dimensions: `width="100%" height="100%"` keeping viewBox
|
||||
3. Change cluster label fontcolor from `#aaaaaa` to `#cccccc`
|
||||
4. Wrap groups with animation classes
|
||||
5. Verify: no `fill="black"`, no `stroke="black"`, no `fill="#333333"`
|
||||
4. Wrap groups with animation classes (`<g class="anim dN">`)
|
||||
5. Remove `<defs><style>...</style></defs>` block (animation handled by page-level JS)
|
||||
6. Verify: no `fill="black"`, no `stroke="black"`, no `fill="#333333"`
|
||||
|
||||
## RUSSELL'S PROJECT TECH STACKS
|
||||
|
||||
|
|
@ -307,6 +307,24 @@ edge [color="#AAAAAA" arrowsize=0.6 fontcolor="#AAAAAA"]
|
|||
- make_post_sell & remarkbox are **Python/Pyramid**, NOT Django
|
||||
- uncloseai.com is **Node.js**, NOT Python
|
||||
|
||||
## BUILD SERVER (build.unturf.com)
|
||||
|
||||
**CI/CD for this blog & all unturf projects.** GitLab Runner with shell executor.
|
||||
|
||||
**Config management:** Salt states in `~/git/foxhop-states/`
|
||||
- `gitlab/build-host/ubuntu.sls` — runner config, cleanup cron, build deps
|
||||
- `lxd/build-host.sls` — LXD + ZFS, image cache expiry
|
||||
- `top.sls` targets `build.unturf.com` with both states
|
||||
|
||||
**Key settings (salt-managed):**
|
||||
- `concurrent = 4` in `/etc/gitlab-runner/config.toml` (pillar: `gitlab-runner:concurrent`)
|
||||
- LXD `images.remote_cache_expiry = 3` days, `images.auto_update_interval = 0`
|
||||
- `/etc/cron.d/build-cleanup` — hourly container + zombie cleanup, weekly image prune, disk alerts at 85%
|
||||
|
||||
**Postmortem:** `russell.ballestrini.net/build-server-postmortem-disk-full/` (2026-03-08)
|
||||
|
||||
**Pipeline for this repo:** `make venv && make html && make formats && make resume` → tar → deploy via `deploy-www.sh`
|
||||
|
||||
## DATE HANDLING FOR NEW CONTENT
|
||||
|
||||
**CRITICAL: ALWAYS check the current date BEFORE creating ANY new documents**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue