← All posts

v1.2.0 - Observable Self-Evolution, Timed Quizzes, and Release Hygiene

Keating 1.2 makes the self-improvement loop much easier to inspect, adds timed quiz sessions and stronger quiz result cards, quiets the browser persistence warning path, and cleans up release metadata so the CLI, package shim, web app, and generated sandbox boot files stay aligned.

1.2.0 is a hardening release for Keating's most sensitive loop: the part where the system evaluates and changes itself. The release makes those changes visible to humans, strengthens quiz feedback, and cleans up the release path so the shipped CLI and browser surfaces agree on what version they are running.

Observable Self-Evolution

auto-improve now writes a more complete transaction trail: baseline and after snapshots, structured JSON, Mermaid diagrams, trace entries, and policy/prompt state that can be compared after the run. The web usage page gained a self-evolution health panel so recent improvement loops show their verdict, score delta, policy signature, and rollback state without asking someone to dig through hidden files.

Prompt evolution is stricter too. If the best generated candidate scores worse than the current prompt, Keating records the attempt but does not apply it. That keeps the audit trail useful without letting a bad prompt candidate quietly become the new baseline.

Timed Quiz Sessions

Quiz sessions now show timing where learners expect it: before start, while answering, and after completion. Time-limited questions display a countdown, completed attempts report total time, and review rows retain per-question timing so slow or uncertain answers are easier to spot.

Quiz result cards were tightened at the same time. Durations render as readable minute/second values, low scores use a clearer result tone, and light-mode contrast was raised so metadata and result details stay legible in chat.

Debugging Surfaces

Tool calls are easier to inspect in the transcript. Structured arguments and results can render as expandable JSON views instead of raw preformatted dumps, which makes it faster to tell whether a tool received the right inputs and returned the right shape.

Session forking also got a correctness pass. Forking from an earlier assistant turn now creates a branch ending at that turn, keeps the related tool results, and shows a banner linking back to the original session.

Storage and State

The browser persistence request path now uses the native storage API directly. When a browser refuses persistent storage, Keating shows the durable-storage risk without spamming the console with a misleading permission warning. The chat state work also moves more of the web agent surface toward a dedicated Zustand store.

Release Hygiene

The CLI help banner and package shim now report the current version with keating --version, and the version sync script updates those surfaces alongside the web app, Pi extension, HTML metadata, and Open Graph image. Fine-tune export scripts now live as real Python, Bash, requirements, and Markdown template files, and the browser operational protocol moved into Markdown instead of a large embedded prompt string. The NodePod boot-file generation task now points at the checked-in Bun TypeScript generator, so the browser sandbox bundle can be refreshed from the same source tree used by the release build. The generator also skips its own output, preventing recursive bundle growth from breaking the PWA build.