miblioteca: debug tooling validation, wrap-up of multi-day feature
sprint
Log
Sessions 13:47
(miblioteca — 14 sessions)
Bundle MVP (05-07): Ran full Android Chrome
verification of portable bundle export (ticket u39) — all
passed; filed thumbnail bug jwd (thumbnails were full-res
copies), fixed same session via makeThumbnail
UI polish (05-07): Deferred backend tickets to
2026-07-01; implemented hash routing (72k), sessions list
(3fa), captures gallery with URL lifecycle
(pa3); fixed gallery race conditions via
gallerySeq monotonic counter
App wiring + back button (05-08): Fixed ghost
overlay never activating (App.ts now wires real
Gyroscope/Accelerometer); back button on
#/new; bundle filename dedup fix;
overflow:hidden clipping found and reverted
Translation tracking (05-08): Integrated
DeviceMotion.acceleration via trapezoidal rule with
beta-angle guard and ZUPT on snapshot; fixed null-to-zero velocity
drift; 542 tests; add-distance-config tickets created
Debug replay validation (05-09, today): Configured
Playwright MCP for HTTPS
(PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS=true env var); loaded
miblioteca-debug-2026-05-09 JSON into
debug-replay.html; found and fixed
innerHTML += orphaning canvas elements in 4 places — zero
console errors, all charts rendering, 566 tests green, pushed
Next: Manual device acceptance tests
mibilioteca-4n4 (ghost overlay on real device) and
mibilioteca-2tu (bundle export on Android Chrome);
implement add-distance-config starting with
mibilioteca-7st (ruler calibration overlay)
Morning journaling
(15min dedicated session)
Reading Hickey's "A History of Clojure" — languages as processable
sets of design decisions (saved as poo)
Nushell reject as complement of select
(saved as TIL)
Thought on AI interface trust: ask-first vs wall-of-text, trust
builds over time via interaction memory (saved as poo)
Co-evolution loop: user shapes Claude Code's character, character
shapes interactions, repeat (saved as poo)
Journal form: considering freer stream-of-consciousness vs
structured SCRUM-style daily; language: let spanglish stabilize
naturally (saved as poo)
Created org-mode syntax machete
Brain dump effect: head lighter after rapid logging, ready for
technical work
Rapid logging vs daily review: two modes that feed each other (saved
as poo)
Claude Code CLI-first advantage: character as text file =
versionable, portable, composable; user defines HOW the AI interacts,
not just WHAT it does (saved as poo)
Session 17:31
(general — pi claude-cli extension)
Reviewed custom-provider-claude-cli extension
architecture (how pi spawns claude as subprocess,
serializes context, streams responses)
Two rounds of Rule of 5 review on format-context.ts and
index.ts
Round 1 fixes: dynamic windowing (budget-based instead of static
WINDOW_SIZE=20), system prompt separation via
--system-prompt flag, elision marker for dropped messages,
totalTokens double-counting fix, JSON parse fallback to stderr, dead
code cleanup, model list update (added Opus 4.7)
Round 2 fixes: temp file for large system prompts (>100K chars),
signal-aware close handler, double stream.end() guard,
negative remainingBudget floor
Ported all edits from direct ~/.pi/ to chezmoi source
at dotfiles/dot_pi/
Committed and pushed to work_files branch
(f04b783)
Session 18:53
(general — pi claude-cli verbosity fix)
Diagnosed excessive compaction in pi sessions: assistant responses
500–17K chars/turn, 30:1 ratio vs user messages, causing 6 compactions
per session
Applied three fixes to reduce context bloat: conciseness
instructions in the preamble, asymmetric truncation (assistant messages
capped at 4K vs 16K for user), --max-tokens output cap (16K
tokens)
Synced both format-context.ts and index.ts
to chezmoi source
Next: test in a real miblioteca session to validate
compaction frequency drops
Session
19:09 (general — pi claude-cli --max-tokens fix)
Discovered --max-tokens is not a valid Claude CLI flag
— caused runtime failure
Removed the flag from index.ts, synced to chezmoi
source
Committed and pushed to work_files
(f93230c)
Remaining verbosity fixes still active: conciseness preamble +
asymmetric truncation (4K cap on assistant messages)
Next: test in a real miblioteca session to validate
compaction frequency drops
Session 23:22 (general
— video-langs script)
Inspected audio/subtitle streams of a movie file using
ffprobe one-liner (Hoodwinked.mp4: H.264 video, AAC audio,
English only)
Created bin/video-langs in charly/canticos
— lists all streams grouped by type (VIDEO/AUDIO/SUBTITLE) with codec,
language tag, and title
Ran /rule-of-5-universal review on the script: found 2
HIGH (fragile CSV column-order assumption, phantom empty line from
here-string), 3 MEDIUM, 3 LOW issues
Applied all fixes: switched ffprobe output to JSON + jq
(eliminates positional column fragility), removed
2>/dev/null (errors now surface), moved dependency check
after arg parsing (--help works without ffprobe), added
directory-input guard, added [[ -z "$index" ]] and
[[ -z "$codec_type" ]] guards, fixed stale comment, fixed
local declaration order
Committed and pushed to charly-vibes/canticos
(c8767c3)
Added custom resize key table to chezmoi tmux template:
prefix + R enters modal resize mode; H/J/K/L resize freely;
Escape exits — no need to re-prefix between directions
Added [resize] indicator to status-right
(red, only shows when in resize mode, using
#{client_key_table})
Added display-panes-time 2000 so
prefix + q pane numbers stay visible for 2 seconds
All changes in chezmoi source
dotfiles/dot_tmux.conf.tmpl
Implemented CAPTURED phase for ghost calibration page: summary panel
(compact top-strip, not full-screen overlay), Export JSON button
(downloads CalibrationExport JSON), Next Cycle button
(resets to IDLE)
Fixed production build — ghost.html was missing from
rollupOptions.input; Vite only auto-bundles
index.html, so ghost page was 404 on GitHub Pages
Fixed corner buttons: Export JSON and Next Cycle were stacked
center-screen; moved to small fixed boxes in bottom-right and
bottom-left corners
Fixed hint text: "DRAG rectangle..." was still visible in CAPTURED
state; now hidden on transitionToCaptured, restored on
transitionToIdle
Applied 3 ro5u corrections: inline summaryText closure, disable
export button initially, capture single new Date() in
exportJson to prevent timestamp skew
Validated full IDLE→RECORDING→REPOSITIONING→CAPTURED→IDLE flow via
Playwright MCP on localhost HTTPS dev server
Discussion: rectangle is not truly "fixed in space" — rotation
compensation works (gyro/yaw → focal-length shift) but translational
parallax is uncompensated; add-translation-tracking spec
(0/19) is the planned fix; add-distance-config provides
target depth needed for parallax math
Commit hash badge already present in header from earlier commit
7c9c43e