v1.0.2 — Stability & Hardening
- AST-based analysis**: Complexity scoring and injection detection now use real AST walks instead of string counting/regex
- Deterministic builds**: `uv.lock` committed, CI uses `uv sync --frozen`, lock-drift check prevents silent dep changes
- Build smoke test**: Every push builds a wheel, installs in a clean env, and verifies imports work
- Repo governance**: CODEOWNERS, issue/PR templates, Dependabot (pip + GitHub Actions, weekly)
- Single-source versioning**: `__version__` reads from `importlib.metadata`, test enforces parity with `pyproject.toml`
- `confidence` field renamed to `signal_strength` on all suggestion/issue dataclasses — **backward compatible**: `to_dict()` still emits both keys, `@property` aliases preserved
v1.0.0 - Streaming Prosody Engine
- All notable changes to this project will be documented in this file.
- Deterministic Prosody Engine**: Core DSP logic for expressivity control.
- Micro-Timing Control**: Sub-millisecond precision for rhythm and duration.
- Streaming Architecture**: Low-latency audio processing pipeline.
- Reference Handbook**: Comprehensive guide to vocology and prosody concepts.
- `voice-engine-dsp`: Primary DSP package.
v2.5.0 — MCP Integration & Agent Interoperability
- Voice Soundboard v2.5.0 — the agent bridge release.
- MCP Server** — embedded MCP-compliant server with tool registration, WebSocket transport, and configurable concurrency
- Core Tools** — `voice.speak`, `voice.stream`, `voice.interrupt`, `voice.list_voices`, `voice.status`
- Agent Sessions** — session-scoped synthesis with agent ownership and priority-based interruption
- Streaming Interrupts** — structured interrupt handling with fade-out and rollback points
- Observability** — synthesis metadata with latency, duration, cost estimates, and cache hit tracking
v1.0.0 — Security Hardening & Release Ready
- The soundboard plugin hits **v1.0.0** — fully hardened, documented, and ready for production use.
- | Tag | Phase | Highlights |
- |-----|-------|------------|
- | v0.1.0 | Core speech pipeline | SSML-lite, smart chunking, multi-chunk synthesis |
- | v0.2.0 | Multi-speaker dialogue | Script parser, auto-casting, stage directions |
- | v0.3.0 | Emotion & ambient | 8 emotions, SFX tags, inner monologue |
v0.4.0-alpha.0 — Optional Adapters
- Five adapters for common AI integration patterns, all living in separate subpath exports for tree-shaking.
- | Adapter | Import | Description |
- |---------|--------|-------------|
- | **fetch** | `throttleai/adapters/fetch` | Wraps any `fetch`-compatible function |
- | **OpenAI** | `throttleai/adapters/openai` | Wraps `openai.chat.completions.create` with token estimation |
- | **Tool** | `throttleai/adapters/tools` | Wraps any async function (embeddings, rerankers, etc.) |
v0.3.0-alpha.0 — Usability & DX
- Presets** — `presets.quiet()`, `presets.balanced()`, `presets.aggressive()` return opinionated `GovernorConfig` objects. Spreadable and overridable.
- `snapshot()`** — `gov.snapshot()` returns a read-only view of current state (concurrency, rate pools, flags). Print a one-line health status from any monitoring loop.
- `onEvent` hook** — Optional `GovernorEventHandler` fires structured events on `acquire` / `deny` / `release` / `expire` / `warn`. No logging by default — you decide.
- Better deny guidance** — `recommendation` strings now include concrete numbers (slot counts, rate usage, actor IDs, retry timing).
- `waitForRetry()` + `retryAcquire()`** — Retry helpers: `waitForRetry(decision)` sleeps for `retryAfterMs`, `retryAcquire(gov, req, { maxAttempts })` wraps acquire with automatic retry.
- Strict mode** — `strict: true` catches dev mistakes: double release → error, unknown leaseId → error, long-held leases (>80% TTL) → warn event.
v0.2.0-alpha.0 — Phase 2: Smarter Decisions
- 5 commits that make the governor's decisions more intelligent without changing the API surface or adding runtime dependencies.
- Better retryAfter** — computed, not heuristic
- Concurrency denial retryAfterMs derived from earliest lease expiry
- Rate denial retryAfterMs computed from rolling window math
- All values clamped to [25ms, 5000ms] via `clampRetry()`
- Weighted concurrency** — `estimate.weight`
v0.1.0 — Security Hardening & Reliability
- LeaseGate v0.1.0 delivers defense-in-depth security hardening and reliability improvements across the full governance stack. All 5 implementation phases are complete, tested, and production-ready.
- Command injection prevention** — Shell metacharacter blocklist and direct process execution (no `cmd.exe /c` indirection) in tool isolation
- Service account token hashing** — SHA-256 hash comparison by default with plaintext backward compatibility
- Payload size limits** — 16 MB cap on named pipe message framing
- Path traversal protection** — All file export endpoints reject `..` traversal and constrain to temp/app data directories
- CSV formula injection prevention** — Report exports escape formula injection characters (`=`, `+`, `-`, `@`)
v1.0.0 — Shared Content System Core
- Portable, local-first content ingestion + normalization + indexing for **Dev-Op-Typer** (Windows) and **linux-dev-typer** (Linux).
- Deterministic language detection** — 3-tier: user choice > file extension > heuristic fallback
- Normalization** — UTF-8 (lossy fallback), LF-only line endings, append trailing newline
- Metrics** — `lines`, `characters`, `symbolDensity` (29-char frozen set incl `"` and `'`), `maxIndentDepth`
- Content-addressed IDs** — SHA-256(language + normalized code), stable across platforms
- Deduplicated, deterministically ordered index** — by language then title
v1.2.0 - Enhanced Vortex Rendering
- Catmull-Rom Spline Smoothing**
- Trajectory paths now render with smooth, organic curves instead of jagged line segments. Each segment is interpolated with 8 subdivisions for fluid motion.
- Adaptive Stroke Width**
- Line thickness now varies inversely with velocity - faster motion creates thinner strokes, slower motion creates thicker strokes. Like calligraphy, this adds natural visual rhythm to the trajectory.
- Trail Opacity Decay**
- Older trajectory points fade naturally, with recent path emphasized. The fade starts at 40% opacity and increases toward the current position, making it easy to see temporal progression.
v1.1.0 - Zero-Warning Build & Complete Crash Recovery
- Session Recovery**: Full crash recovery now restores playback position, current page, and playback state
- Automatically reloads the file that was open when the app crashed
- Resumes playback from exact position
- Navigates to the page you were viewing
- Zero-Warning Build**: Eliminated all 11 compiler warnings
- CS0108: Added \