8b8e549
${VAR:-} not ${VAR:?}Status: DRAFT for the v0.4.0 tag. Attorney legal-substance walk-through cleared (gate 1). Branch ↔
mainreconciliation is done (merged336c66;origin/mainis now an ancestor) andapi+gateway__version__are bumped to0.4.0. All post-merge gates pass. What remains is the merge tomain+ the annotatedv0.4.0tag — see “Release readiness” below.
Milestone 4 turns LQ.AI from an assistant you drive into one that can also run on its own — but only when you opt in, and only inside hard brakes. The layer is off by default; nothing runs autonomously until an operator turns it on per-user in Settings. Every autonomous run is bounded by a cost cap, an external halt + idle watchdog, and per-phase tool limits, and emits an inspectable receipt. This release also ships the operability surfaces that make the layer discoverable and self-explanatory, and a thorough reconciliation of the docs and Learn content to what the code actually does.
A new Autonomous area (opt-in, off by default; enabled per-user in Settings → Autonomous).
What it runs
How it runs — a LangGraph phase machine (intake → analysis → drafting → ethics review →
delivery) that performs real in-loop agentic work through the same guarded chokepoint as the rest
of the platform: every tool call (retrieve / run-skill / run-playbook) passes through
guarded_tool_call with audit + OpenTelemetry spans, and a tolerant structured-output parser that
completes honestly rather than crashing on malformed model output.
Safety brakes (all live, all leave a receipt)
max_cost_usd (default $5, configurable via
autonomous_default_max_cost_usd); a run that would overspend is halted with
terminal_reason = cost_cap_reached. Live-verified during fresh-install acceptance.Where results land
propose_precedent), with promote-to-Matter.Opt-in enforcement — mutate endpoints are gated on the per-user autonomous_enabled flag
(read + halt stay open so you can always inspect and stop); schedule/watch spawn paths skip
opted-out users.
Made the (off-by-default) layer discoverable and honest about its own scope:
POST /autonomous/run-now (trigger_kind='manual', reusing the
executor + brakes), its API client, and the Sessions-page UI + Cypress smoke.A pass to make every user-facing claim match the shipped code:
docs/autonomous-layer.md feature reference; ADR 0013 for the autonomous-layer design.build_receipt call sites hardened so a receipt-build failure can’t crash the
worker; brake-halted (R4/R5) sessions still surface their terminal_reason.docker-compose.yml
(single migrator; workers wait for api-healthy).retrieve_chunks since-mode; race-safe precedent upsert.max_cost_usd on watches + schedules). Phase 1 added no new
migration.cost_usd: "0", tier_used: null; the pre-flight estimator is unaffected).skill_inputs collected in the UI don’t yet reach the model for non-templated
skills (gateway assembler change; first of the post-M4 Donna backend asks).The platform-cohesion design’s §3 model and §5 roadmap (Phases 2–5) are recommendation-only and were intentionally not built in this release.
Branch ↔ main reconciliation — DONE. feat/lqvern-m4-autonomous had diverged from main at
d54df6b (before v0.3.1) and was missing 10 main-only commits. Merge d336c66 brought them all in
— origin/main is now an ancestor of the branch. The merged-in commits:
8b8e549
${VAR:-} not ${VAR:?}82d7874
0.3.0 → 0.3.13e5809b
0101b65
--profile local (now DE-320)4df3b9b
anonymization_applied + message_id7c7ce14
inference_routing_log on streamed completions9672ef4
438198c
/v1/models alias fields5df44b7
ROADMAP.md + README contributor anchorsFour doc conflicts were resolved keeping the more-recent/accurate side while preserving both sides’
substance (PRD §3.10 dedup + kept-both DE sets incl. DE-320; HONEST-STATE §9 PaddleOCR correction;
observability §3 source-reconciliation; the alignment guide’s shipped propose_precedent). api +
gateway __version__ are bumped to 0.4.0.
Post-merge gates — all green: web check:lq-ai 0 errors + vitest 692/692; api ruff/mypy
clean + pytest 95 passed/276 skipped; gateway ruff/mypy --strict clean + pytest 529 passed/2
skipped.
Remaining steps (maintainer):
feat/lqvern-m4-autonomous → main (fast-forward is possible since origin/main is an
ancestor; a --no-ff merge commit is fine too).v0.4.0 (annotated, using the message above), push the tag to both remotes — the existing
Release workflow builds + signs the images and attaches the SBOM.docker compose build web && up -d web) on the merged main.Drafted from the main..feat/lqvern-m4-autonomous inventory; reconciled branch HEAD d336c66
(post-merge, 0.4.0). Per-task review trail and verification results are in the Phase-1 plan and the
docs/LQVern/HANDOFF-2026-05-31-… brief.