# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ### Added - Deterministic backbone: mandatory blocking validator (solver + Monte Carlo against the shared golden suite), budget meter with hard fail-fast caps, provenance stamping. - Agentic learning loop wired end to end, one load-bearing seam at a time (target-picture steps 1, 3/4, 5, 7, 8): OKF-navigated bundle context with the gated ExpeL fold, maker-checker debate where the checker gates the reasoning, informed refinement (previous rejection reason fed into the next bounded attempt), async verdict file inbox, and gated wiki promotion (fail-closed). - Offline end-to-end simulation proving the learning loop closes with a scripted client (`uv run python -m portfolio_optimiser.simulation`) — plumbing proof, not live-model proof. - Framework-neutral shared core in `shared/`: OKF concept + example bundle, golden validator suite, and the expert-reviewer persona as an Agent Skill. - CLI parity (S5.3): `run.py` drives the whole method from the command line in **two modes** — single-project (`--dimension-config`, `--outbox-dir`/`--run-id`, plus the already-wired `--bundle-dir`/`--verdict-dir`) and portfolio (`--portfolio` with `--goals`/`--ledger`), the latter printing an observable `goal reached: …` line when a savings goal is met. Adds a fail-fast `load_dimension` loader and structured refusals (rc 1, no traceback) for misuse and mode-exclusivity violations. The prior-verdict fold is on the `--bundle-dir` path only; a `--docs-dir`-only run is single-shot. - Azure/Foundry offline preflight config gate (`preflight.py`, S4.1). - Offline live-dry-run drill (`--live-dry-run`, S4.2): walks the whole path up to the eager client build and stops before the first model call — zero chat calls. - Out-of-band HITL verdict routing CLI (`hitl.py`, S5.1): code-prefix routing on the candidate id. - Expert-notification contract (`notify.py`, S5.2): the declared `Notifier` with `ConsoleNotifier`, `FileNotifier` (byte-deterministic JSONL), and `WebhookNotifier`, plus a fail-fast `build_notifier`; the webhook is the only egress point, fail-closed behind an explicit per-run `allow_egress` opt-in. Not auto-wired into `run.py`. - `docs/knowledge-base-recipe.md` (S5.3, D-H item 1): the documented team process (technical + domain expert) for building a knowledge base, with the honest 1–2 week expectation. - Test suite: 431 passing tests (4 skips are live-provider-only), every wired seam covered by a load-bearing test that goes red when the seam is detached. ### Notes - Licensed under the MIT License (see `LICENSE`).