All notable changes to this project will be documented in this file.
- Sidecar mode: compose precision prompts in VectorPad and inject into active agent sessions
internal/sidecarpackage: session discovery, JSONL parsing, user entry injection with UUID chain- Launch target 7 (Sidecar inject): direct inject into most recent session JSONL
- Launch target 8 (Sidecar + deliberate): VectorCourt deliberation on framing before inject
- Two-path flow: DIRECT (compose → inject) and DELIBERATE (compose → VectorCourt → inject)
- Pressure panel: only show bars for non-zero sentences, display "✓ clear" when all safe
- Async submit flow: POST /v1/submit with queue position, poll loop, and live SSE spar events
Submit(),PollSubmission(),GetCase()client methods- Transparent fallback to sync
Consult()when server returns 404/501
- Escalation support: parse clarification questions from VectorCourt verdicts
SubmitClarification()client method for POST /v1/cases/:id/clarifyvectorpad clarify <case-id>CLI command: interactive or--jsonpipe mode- CLI submit output shows escalation questions with impact level and defaults
- TUI verdict summary shows clarification hint with case ID
- Instant precedent recognition: 300ms debounced trigram search in risk panel while typing
InstantPrecedents()client method for GET /v1/precedents- Prediction debt health display in risk panel: debt ratio and band (healthy/accumulating/critical)
GetPredictionDebt()client method for GET /v1/health/prediction-debt- Live spar viewer:
vectorpad submit --to vectorcourt --livestreams deliberation rounds via SSE - SSE stream client (
internal/vectorcourt/stream.go) for GET /v1/submissions/{id}/stream - ANSI spar renderer (
internal/tui/spar.go) — plain terminal output, works over SSH - Editor line indicator:
L3/18in dashboard when text overflows visible area - Adaptive classified view: collapses to 2 lines for long text, hidden for very long text
- Rebrand Oracul to VectorCourt: package
internal/oraculrenamed tointernal/vectorcourt - Auth header:
X-Oracul-Keyreplaced byX-VC-Key - Default endpoint:
https://oracul.appreplaced byhttps://vectorcourt.com - Config keys:
oracul.api_key/oracul.endpointreplaced byvectorcourt.api_key/vectorcourt.endpoint - CLI flags:
--to oracul/--format oraculreplaced by--to vectorcourt/--format vectorcourt - TUI: launch target "Oracul Council" renamed to "VectorCourt"
- Backward-compatible config migration: existing
oraculconfig keys auto-migrate on load
vectorpad outcome <claim-id> --result success|failure|partial --note "...": report decision outcomes to OraculReportOutcome()client method for POST /v1/cases/:id/outcome- Outcome auto-annotates matching flight log record
- Shell completions updated with
outcomesubcommand
vectorpad stash diff <id1> <id2>: compare two verdict entries field-by-field- Verdict diff logic in
internal/stash/diff.go: JSON parsing, field comparison, rendered output lookupStashItemhelper: find items by ID, claim ID, or prefix match
vpshort alias: same binary built asvpvia GoReleaser, included in Homebrew install and release tarballs
- Oracul metadata in flight recorder: tier, filing quality, preflight result, warnings, precedent count
vectorpad log --statsshows Oracul aggregates: submits, avg filing quality, rejection rate, top warningsUpdateOracul()method on Recorder for attaching async verdict data to flight records
- Async Oracul submit: deliberation runs in background, TUI remains interactive
- Elapsed timer display in editor panel during deliberation
- Context cancellation on TUI quit cancels in-progress deliberation
- Rejects duplicate submissions while deliberation is active
- Precedent search: live similar-case lookup in TUI risk panel after 3s idle
vectorpad precedentCLI subcommand with--limitand--jsonflags- PRECEDENTS section in risk panel: similarity scores, outcome dots, ref class summary
SearchPrecedents()client method for GET /v1/precedents/search- Debounced async precedent search with independent 3s tick track
- Verdict history in stash: Oracul verdicts auto-stashed after successful submit
- Distinct
◆symbol for verdict entries in TUI stash panel and CLI list SourceVerdictandItemTypeVerdicttypes for verdict classificationstash list --type verdictfilters to verdict entries onlystash show <id>renders full verdict JSON for verdict entries
- Live preflight readiness indicator: READY/WARN/BLOCKED updates in risk panel after 2s idle
- Debounced async preflight check with Bubbletea tick/cmd pattern
- Cached results until text changes — no redundant API calls
- Oracul Council as launch target 6 in ctrl+l overlay: classify, preflight gate, submit, verdict summary
- Target only visible when API key is configured; hidden otherwise
- Oracul account status in TUI risk panel: tier, usage bar, reset time (only when API key configured)
- Account status refreshes on startup and after each launch
- Silent degradation: section hidden when no key or fetch fails
- Oracul integration:
vectorpad submit --to oraculsends classified cases for deliberation - Oracul export:
vectorpad export --format oraculemits CaseFiling JSON offline - Config system:
vectorpad config set/getfor persistent settings (API key, endpoint) - Preflight gate: validates cases with Oracul before submission, blocks rejected filings
- Sentence-to-CaseFiling mapper: DECISION, CONSTRAINT, TENTATIVE, SPECULATION, EXPLANATION tags map to filing fields
- Shell completions updated for config, submit, export commands
- ContextSpectre feedback loop: risk panel shows session health grade, context pressure, turns remaining, model, and cost
- Decision economics display: actual CPD/TTC/CDR from contextspectre stats with per-epoch breakdown
- Feedback refreshes on TUI startup and after each launch event
- Graceful degradation: feedback sections hidden when contextspectre is not installed
- Claim registry: SQLite stash with embedding similarity (
vectorpad stash) - SQLite backend replaces JSON for stash persistence (auto-migrates existing JSON)
- Ollama embeddings via nomic-embed-text for semantic similarity search
- Cosine similarity with thresholds: near-duplicate (>0.90), same idea (0.80-0.90), related (0.65-0.80)
- Claim IDs assigned at stash time for tracking idea evolution
- CLI:
stash add,stash list,stash compare,stash show,stash cluster,stash evolve,stash reindex - Graceful degradation: works without Ollama (no embeddings, Jaccard fallback for clustering)
- Vector decomposition (
ctrl+b): split high-blast-radius vectors into focused sub-vectors by target groups - Sub-vectors include shared preamble (constraints, context) plus group-specific sentences
- Decompose suggestion in risk panel when 3+ distinct targets detected
- Decompose output in CLI pipe mode (
DECOMPOSEsection)
- Pressure heat map: per-sentence risk scoring based on lock policy, classification tag, vague verb presence, and brevity
- Three pressure levels (LOW/MED/HIGH) with visual bar in risk panel
- Pressure output in CLI pipe mode (
PRESSUREsection)
- Risk panel now displays detected scope markers ("all repos") and target count instead of showing
repos: 0 files: 0
- Scope declaration (
ctrl+d): declare blast radius before writing, cross-reference against text - Scope mismatches surface in risk panel (scope vs constraints, operation vs preservation, target mentions)
- Negative space detection: 6 gap types flag missing constraint classes (preservation, success criteria, review, rollback, scope boundary, identity)
- Drift timeline in TUI: risk panel shows meaning drift as you edit (strengthened/weakened/flipped/added/removed)
- Flight recorder: append-only JSONL log of launched vectors with metrics, gaps, and outcome annotation (
vectorpad log) - Constraint pinning: risk panel warns when CONSTRAINT sentences are removed during editing
- Pastewatch detection now checks both
pastewatch-cli(Homebrew) andpastewatchbinary names
- Launch target picker (
ctrl+l): clipboard, Claude for Mac, ChatGPT for Mac, Claude Code CLI, file - Essence extraction (
ctrl+e): collapse stash stack into launchable summary - Stash uniqueness symbols:
●bright (novel),○dim (overlaps),◌faint (duplicate) - Shell completions for bash, zsh, and fish (
vectorpad completion <shell>) - Full README with badges, architecture, philosophy, bond, roadmap
vectorpadnow launches TUI by default (no need forvectorpad tui)- Added keybinding hint bar at bottom of editor panel
- Clipboard test skips on Linux CI when xsel/xclip unavailable
- File attachment pipeline: detect paths, classify by extension, preview, serialize for copy-out
- Image protocol detection (iTerm2, kitty)
- Object card rendering in editor panel
- Paste interception: dragged files become attachment objects, not inline text
- Excerpt configuration per attachment
- Three serialization modes: path-only, excerpt, evidence
- Three-panel TUI: stash roster, vector editor, risk panel
- Sentence classifier with 6 tags (CONSTRAINT, DECISION, TENTATIVE, QUESTION, SPECULATION, EXPLANATION)
- Meaning drift detection on 6 axes
- Pre-flight metrics: token weight, CPD, TTC, CDR projections
- Ambiguity detection with blast radius, brevity ratio, vague verb flagging
- Nudge protocol for ambiguous vectors
- Stash persistence with Jaccard similarity clustering
- Capability detection for pastewatch and contextspectre
- Pastewatch integration: scan outbound payload before clipboard copy
- CLI pipeline: stdin classification + preflight + ambiguity analysis
vectorpad tui- interactive three-panel interfacevectorpad add- quick-add ideas to stash from CLI