Changelog¶
Version 0.5.9 — “心砺光华”¶
Perfecting the essence until the work needs no words to shine.
PSP-7: Robust Correction Loop Contracts:
Structured Artifact Bundle Format — Switched correction prompt from free-form
File: ...output to a strict JSON{ artifacts: [], commands: [] }schema. Includes exact target paths from evidence so the LLM targets the correct files, reducing parse failures.AgentTools Integration — Routed correction commands through
execute_correction_command()to integrate with plugin policy, user approval gates, and tool failure tracking.Typed Parse Pipeline — Replaced Option-based bundle extraction with a 5-layer fail-closed typed parse pipeline. Added
RetryClassification(Retarget, MalformedRetry, SupportFileViolation, Replan) population inCorrectionAttemptRecord.Manifest Policy Enforcement — Added semantic validation to prevent implicit mutation of root manifests (Cargo.toml, package.json) unless explicitly listed as output targets, while preserving legal support files.
Strict Budget Exhaustion — Widened budget exhaustion checks from cost-only to
any_exhausted()to properly respect step and revision caps before attempting LLM calls.
LLM Provider Maintenance:
genai Upgrade — Bumped
genaidependency from 0.5.1 to 0.5.3 (stable patch release with bug fixes).Dead Code Cleanup — Removed
generate_response_with_history()andgenerate_response_with_options()which had zero callers across the workspace and were the only methods leakinggenai::ChatOptionsinto the public API surface.Clippy Fixes — Fixed clippy::unnecessary-sort-by and applied clippy::collapsible-match auto-fixes for Rust 1.95 compatibility.
Version 0.5.8 — “Qualitätsveredelung”¶
Orchestration State Overhaul Release
“Qualitätsveredelung — the craft of refining what exists until its quality speaks for itself. Not new features, but the quiet discipline of making every state transition truthful, every metric honest, and every dead path removed.”
Orchestration Correctness (Refs: #112, #113, #114, #116):
SessionOutcome enum — New
SessionOutcometype (Success, PartialSuccess, Failed) derived from actual completed/escalated node counts. TheCompleteevent now carries truthful outcomes instead of unconditionalsuccess: true.NodeOutcome enum —
execute_node()returnsResult<NodeOutcome>whereNodeOutcomeisCompletedorEscalated, replacing the previousResult<()>that could not distinguish outcomes.Correct session outcome derivation —
run_orchestration()andrun_resumed_inner()track completed/escalated counts per node and derive the finalSessionOutcomeaccordingly.Always-on LLM telemetry —
call_llm_with_logging()now records token usage (in/out), latency, and estimated cost viarecord_llm_usage()after every LLM call, regardless of--log-llm. The flag now only controls verbose prompt/response text persistence.Budget envelope persistence —
upsert_budget_envelope()called after eachBudgetUpdatedevent to persist cost/step tracking to the database.Sandbox-aware context retrieval —
ContextRetrieverinstep_speculate()useseffective_working_dir(idx)(the node’s sandbox directory) instead of the workspace root. Sandbox file tree listings included in actuator and correction prompts for better generation grounding.
Type-Safe State Management (Refs: #114):
NodeState::from_display_str() — Case-insensitive canonical parser with legacy aliases (“running” → Coding, “stable” → Completed, “retrying” → Retry). Replaces all ad-hoc string parsing across the codebase.
NodeState helpers —
is_success()(true only for Completed),is_active()(true for Coding, Verifying, Planning, Retry, SheafCheck, Committing), andDisplayimpl producing lowercase labels.CLI state cleanup — All string-based state comparisons in
status.rs,agent.rs, andresume.rsreplaced withNodeState::from_display_str()and type-safe helper methods.
Dead Code Elimination:
Removed 16 unused functions across
perspt-core,perspt-store,perspt-agent,perspt-policy,perspt-tui(~234 lines)Downgraded
canonicalizetopub(crate)inperspt-policyRemoved orphaned
sha2dependency fromperspt-store
Bug Fixes (Refs: #107, #111):
Session status stuck at RUNNING — Status now persisted in
end_session()withCOALESCE-based finalization guarantee (#111)LLM token counts always zero — Real provider token usage (prompt + completion tokens) extracted from
genaiChatResponse::usageand persisted per request (#107, #110)
Tests:
7 new tests covering
NodeStateparsing round-trips,SessionOutcomeequality,NodeOutcomediscriminants, and session outcome derivation from completed/escalated countsTotal test count: 359 (up from 352)
Documentation:
Updated README: fixed crate count (8 → 9), deduplicated dashboard command, added missing agent flags (
--single-file,--verifier-strictness,--output-plan, all--*-fallback-model), aligned contributing commands with CI gatesUpdated Perspt Book: SRBN architecture (Phase 7 → Commit & Outcome), CLI reference (
logsalways shows token metrics), developer architecture guide (orchestrator lifecycle, NodeOutcome, SessionOutcome in type inventory and data flow), workspace crates (removed deadis_safe_for_auto_exec)Updated PSP-5: execution flow steps 8–11 with Completed/Escalated paths and SessionOutcome derivation, headless output with
OUTCOMEline, added Orchestration State Overhaul implementation appendix
Version 0.5.6 — “ikigai 生き甲斐”¶
SRBN Sandbox Revision Flow Release
“A reason for being — the happiness of always being busy with what you love.”
Real-Time Web Dashboard (PSP-6):
perspt-dashboard crate — Axum 0.8 + Askama 0.15 + HTMX 2 + Tailwind v4/DaisyUI 5 web interface for monitoring agent execution
Read-only store access —
SessionStore::open_read_only()with DuckDBAccessMode::ReadOnlyfor safe concurrent reads alongside the agentSix monitoring pages — Overview (sessions), DAG (task graph), Energy (Lyapunov components), LLM (request telemetry), Sandbox (provisional branches), Decisions (escalations, sheaf validations, rewrites, plan revisions, repairs, verifications)
SSE live updates — Server-Sent Events stream node statistics every 2 seconds
Password authentication — Random token, HttpOnly/SameSite cookie, Secure flag on non-localhost deployments
``perspt dashboard`` CLI command — Launches the dashboard server on a configurable port
12 integration tests — Route smoke tests, SSE content-type, auth flow
Store extensions —
get_session_energy_history(),get_all_sheaf_validations(),get_all_repair_footprints()
SRBN Sandbox Revision Flow (PSP-5 Phases 3-12):
PlanningPolicy — Adaptive agent gating with 5 policies (LocalEdit, FeatureIncrement, LargeFeature, GreenfieldBuild, ArchitecturalRevision).
needs_architect()andneeds_speculator()gate agent tier activationFeatureCharter auto-creation — Policy-derived file/module/revision limits created before architect planning so the plan gate has bounds to enforce
Speculator lookahead gating — Speculator tier only activates for LargeFeature, GreenfieldBuild, and ArchitecturalRevision policies
BudgetEnvelope session restore — Step/cost/revision caps restored from DB during
resumeso interrupted sessions honour the original limitsBundle path normalization —
filter_bundle_to_declared_pathsusesnormalize_artifact_pathfor correct comparison of path variants (e.g../src/main.rsvssrc/main.rs)NodeState::Superseded — New terminal state for plan amendment (Phase 14 preparation). Updated
is_terminal(),parse_node_state(), andNodeStatusconversionOrchestrator module extraction —
orchestrator.rssplit into 9 submodules:mod.rs,bundle.rs,commit.rs,convergence.rs,init.rs,planning.rs,repair.rs,solo.rs,verification.rsCentralized prompts — All 15 agent prompts consolidated in
prompts.rswith constants andrender_*helpers; duplicates removed fromagent.rsRepairFootprint-backed correction —
build_correction_promptusesRepairFootprintfor precise, grounded repair contextGreenfield bootstrap ordering — Plugin-driven project initialization with correct pre-sheafify plugin re-detection
Provisional branch lifecycle — Sandbox-first execution with branch creation, merge, and flush cascade
Escalation classification — 5 categories with 9 rewrite actions and graph surgery support
Documentation:
Updated architecture docs with PlanningPolicy, FeatureCharter, and NodeState::Superseded documentation
Added Planning Policy and Feature Charter sections to SRBN architecture guide
Updated workspace crates docs with orchestrator submodule structure
Added speculator lookahead and budget restore documentation to agent mode guide
Fixed energy weight default (gamma=2.0) in advanced features guide
Refreshed all version references to 0.5.6
Version 0.5.5¶
PSP-5 Cross-Platform and CI Stabilization Release
Cross-Platform Fixes:
Windows sandbox path normalization —
list_sandbox_filesnow returns forward-slash-separated relative paths on all platformsWindows workspace-bound validation —
validate_workspace_boundcorrectly detects absolute paths with Windows drive prefixes (C:\...) and normalizes backslash path separators before POSIX shell tokenizationClippy and fmt CI compliance — Resolved
items_after_test_moduleanduseless_vecwarnings that were failing CI on all platforms
Build and CI Improvements:
Removed accidental eval workspace member —
.perspt-eval/rust_cliremoved from workspace members;.perspt-eval/added to.gitignoreStabilized cargo doc — Added
doc = falseto CLI bin target to prevent output collision with thepersptlibrary crateRemoved deprecated atty dependency — Replaced with
std::io::IsTerminalfor TTY detectionLockfile refresh — Cleared hard
cargo auditvulnerability failures via dependency updates
Documentation:
Updated workspace coding instructions to match current multi-crate architecture
Refreshed all version references across the Perspt Book and Sphinx configuration
Version 0.5.4¶
PSP-5 Compliance Release
SRBN Agent Enhancements:
Per-node error recovery — Retry logic respects
ErrorTypeclassification (Compilation,ToolFailure,ReviewRejection) with separate countersMulti-file extraction — Actuator reliably extracts artifact bundles with multiple files from LLM responses
Multi-artifact bundles — Bundle protocol correctly handles write, diff, and command artifacts in a single node
Plugin-driven project initialization — All plugins use
uv init --lib(Python),cargo init(Rust),npm init(JS) for proper project scaffoldingDegraded verification mode — When tool binaries are missing, falls back to heuristic verification with clear warnings
Sheaf validation — 7 validator classes for cross-node contract verification
Bug Fixes:
Fixed
uv inittouv init --libinplugin.rs(2 locations) andtest_runner.rs(1 location) for correctsrc/layout with[build-system]Removed dead
test_check_workspace_requirementtest fromorchestrator.rs
Documentation:
Complete rewrite of the Perspt Book for PSP-5 accuracy
Updated developer guide with full type inventory and architecture diagrams
Added tutorials for headless mode, Python ETL, Rust CLI, and scientific computing
Updated all model names and provider defaults to current versions
Version 0.5.3¶
SRBN energy convergence improvements
Provisional branch lifecycle management
Interface seal and flush cascade support
DuckDB migration from SQLite
Version 0.5.2¶
Initial SRBN orchestrator implementation
Per-tier model selection (
--architect-model, etc.)Merkle ledger with DuckDB backend
Plugin system for Python, Rust, and JavaScript
Agent TUI with dashboard, task tree, and review modal
Starlark policy engine
Basic sandbox command execution
10 CLI subcommands (chat, agent, simple-chat, init, config, ledger, status, abort, resume, logs)
Version 0.5.1¶
Multi-provider chat support
TUI markdown rendering with code blocks
Simple CLI mode for scripting
Streaming response protocol with EOT signal
Version 0.5.0¶
Initial release
Basic chat interface with OpenAI
Configuration auto-detection from environment