3.6 KiB
3.6 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[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.pydrives 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 (--portfoliowith--goals/--ledger), the latter printing an observablegoal reached: …line when a savings goal is met. Adds a fail-fastload_dimensionloader and structured refusals (rc 1, no traceback) for misuse and mode-exclusivity violations. The prior-verdict fold is on the--bundle-dirpath only; a--docs-dir-only run is single-shot. - Value report (S5.4): a read-only
--report [--json] --ledger <file>surface onrun.pythat rolls up the accumulatedSavingsLedger— per-project + portfolio totals (dimension-free-deduped integer øre), flagged cross-dimension overlaps (each counted once), and per-entry provenance — as a human table or deterministic JSON. Makes no model calls; mode-exclusive (only--ledger/--jsonpermitted with--report, which requires--ledger). Honest scope boundary: the report core (value_report.py) now exists but is deliberately not wired intocostsim'skost_mot_verdiplaceholder — that cost-vs-value integration is a separate, deferred step. Thecostsimseam note was reworded from the stale "fylles av S5.4 verdirapport" to a truthful forward reference socostsim's own output no longer claims the wiring is done. - 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 declaredNotifierwithConsoleNotifier,FileNotifier(byte-deterministic JSONL), andWebhookNotifier, plus a fail-fastbuild_notifier; the webhook is the only egress point, fail-closed behind an explicit per-runallow_egressopt-in. Not auto-wired intorun.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).