Installed TypeSafe agent skill
(npx skills add typesafe-ai/skills --skill typesafe-ai) →
copied to ~/.pi/agent/skills/ and
~/.agents/skills/
Read full TypeSafe SKILL.md: three primitives (Choice/Noul/Score),
parallel questions, design-for-composition workflow
Verified live docs accessible at docs.typesafe.ai, read Quick Start
and Choice reference
Configured TYPESAFE_API_KEY via chezmoi templates:
dot_bashrc.tmpl +
dot_config/nushell/env.nu.tmpl sourcing from
chezmoi.toml [data.typesafe.api_key] (private config, not
in dotfiles repo)
Applied chezmoi, verified key loaded successfully
Designed and sent real Jev API call: chose which charly-vibes repo
needs fixing → wai (0.97 confidence, 0.98 probability)
— 3 open issues + 7 TODOs, core ecosystem infra
Confirmed TypeSafe skill fully operational in this environment
Problem:z-ai/glm-5.3-flash sessions
derailing with "Operation aborted" errors and mode collapse (long
streams of random words)
Root cause: OpenRouter routes glm-5.3-flash through
33 different providers with varying quantization levels
(fp4 → fp8). During peak hours (9AM ART / 8AM ET), Z.AI's native API
gets congested and OpenRouter falls back to cheap fp4
(4-bit) providers (OpenInference, DeepInfra) where the model's
attention mechanism collapses under complex tool-use + high thinking
load → generates free-associative garbage
Key discovery: OpenRouter charges a single fixed
list price ($150/1M tokens) but routes requests to whichever provider
maximizes their profit margin. fp4 providers cost them $20-75/1M but
produce degraded output
Morning pattern confirmed across entire month:
12:00 UTC (9AM ART) has highest error rate. Sep 30 was an extreme
outlier with 13.3% combined failure vs 0.44% baseline
Safest hours: 10AM ART (0.25%), 12PM ART (0.26%),
7PM ART (0.38%)
How to verify:curl https://openrouter.ai/api/v1/models/z-ai/glm-5.3-flash/endpoints
shows per-provider quantization level and uptime
Documented via this investigation
Next: consider switching default model to
deepseek/deepseek-v4-flash which has fp8 minimum quality
floor, or set thinkingLevel to low to reduce
cognitive load on fp4 providers
Implemented progressive-disclosure design: new
content/distilled/review/references/rule-of-5-universal/references/typesafe-verification.md
(mechanical pre-gate → one parallel Choice question per finding →
verdict mapping with measured FP rate; constants table; UNVERIFIED
banner fallback) + Tier-0 trigger in the Validation rule
Live smoke test: real finding verified @ 0.89 (stands); planted
fabrication @ 0.43 → correctly routed to human review below gate
Released v0.11.0: CHANGELOG, npm version minor,
version-stamp catalog regen (pre-push hook caught it), npm publish +
GitHub Pages green; registry propagation confirmed (~5 min lag, matches
known gotcha)
Local install audit: all 47 incitaciones skills at 0.11.0 with
content verified; zero consolidation-refactor leftovers (installed set
== manifest, all 8 pointers present); typesafe-ai md5-fresh vs upstream;
.pi/.agents/.config copies byte-identical
Next: housekeeping candidates —
npm pkg fix to silence bin/repository warnings in the
publish workflow; optional cleanup of the 6 stale Jev validation
payloads in /tmp
Archived add-contract-property-class — post-archive ah check caught
7 no-toml findings (archive deploys scenarios without contracts; hct
pattern). Wrote 7 gate contracts wired to cycle 1–4 tests; found +
closed coverage gap (warnings-exit-0 had no CLI test — TDD'd it).
Commits 70f78e3 + c1f4946
Released v0.8.0 (tag + CI + crates.io + GH Release
all green): falsifiability_class end-to-end, severity field,
mutation-ownership doctor check. Release prep commit 31a7ff7 included
CHANGELOG, README (finding kinds/severity/falsifiability_class/ah lint),
commands.md (added missing ah lint section), status.md rewritten from
deployed specs (old page claimed 13/15/6/7 scenarios vs real 72/47/25/15
and listed an archived change as in-progress)
Docs deploy was wedged ~40 min: build green but deploy stuck
'waiting' behind a hung github-pages deployment (sha e4412869),
cancelling all later Docs runs. Fixed: marked stuck deployment inactive
via API, cancelled dead runs, re-dispatched → success, live site serves
updated status page
Refreshed stale local ah binary (0.6.0 on PATH, phantom
version-drift) via just install
Next (user actions): add TAP_GITHUB_TOKEN secret +
re-run Publish tap/scoop jobs for BOTH v0.7.0 and v0.8.0; pretender#30
doc recording (completes djw acceptance). Next dev session: c9v
(deferred P0 pi extension) or fresh tickets
Renew via turu recall; release-flow gotcha applied: found release
commits v0.8.2/v0.8.3 already tagged+published, so no re-bump needed
before 4mq
genesis-4mq closed via red→green: 7 RED tests first
(equal-timestamp selection, crate-name validation/traversal, backoff
preserves known-good latest, future checked_at stale, 3s-response server
proving the 5s total budget, request-path lock, debug stderr signal)
then GREEN in src/update_check.rs
Key fixes: first-stable-entry selection (CORR-001),
is_valid_crate_name guard (CORR-002), backoff_entry preserving prior
latest (CORR-003), TOTAL_TIMEOUT 2s→5s with pub consts (EDGE-003),
GENESIS_UPDATE_CHECK_DEBUG one-line stderr signal with HTTP-status vs
transport split — 404 no longer mislabeled transport error
(EXCL-002)
Test pattern banked: subprocess stderr assertion via
Command::new(current_exe()).args(["--exact", child, "--nocapture"]) with
piped stderr; child doubles as a regular fail-silent test
Contract a-binary-wires-its-own-crate-name.toml now maps
request_path_is_the_crate_endpoint; spec unchanged (no timeout/debug
requirements pinned)
Released v0.9.0: just ci green, Cargo.toml 0.9.0 +
README/docs pins same-commit (doc_sync guard), CHANGELOG stamped [0.9.0]
— 2026-09-30, tag pushed, crates.io max_stable 0.9.0, just
notify-downstream → all 7 downstream repos; CI+Docs green