# Changelog

## Score

- CAI 51 → 52 (+0.9)
- Rubric changed (rubric-2026.09.13 → rubric-2026.10.1) — scores are not directly comparable.

## Lenses

- Code Health 49 → 49 (-0.2)
- Architecture 98 → 87 (-11.0)
- Maturity 78 → 78 (-0.0)
- Readiness 42 → 42 (+0.5)
- Security 55 → 63 (+8.4)

## Resolved (109)

- (anonymous)::onmessage (cognitive 18) (SageFs.Host/Resources/devreload.js)
- (anonymous)::onmessage (cognitive 18) (SageFs/Resources/devreload.js)
- (anonymous)::renderErrorPanel (cognitive 38) (SageFs.Host/Resources/devreload.js)
- (anonymous)::renderErrorPanel (cognitive 38) (SageFs/Resources/devreload.js)
- (anonymous)::renderErrorPanel (cyclomatic 24) (SageFs.Host/Resources/devreload.js)
- (anonymous)::renderErrorPanel (cyclomatic 24) (SageFs/Resources/devreload.js)
- Change coupling: SessionManager.fs ↔ SessionMode.fs (SageFs.Core/SessionManager.fs)
- Codec.decodeEvent (cognitive 28) (SageFs/McpFrictionRecorder.fs)
- Cohort.decide (cognitive 211) (SageFs.Core/Cohort.fs)
- Cohort.decide (cyclomatic 119) (SageFs.Core/Cohort.fs)
- CohortLandingVerify.runTestsInSession (cyclomatic 20) (SageFs/CohortLandingVerify.fs)
- CoverageViewModule.project (cognitive 17) (SageFs.Core/Features/LiveTestingTypes.fs)
- CoverageViewStateModule.fromCounts (cognitive 19) (SageFs.Core/Features/LiveTestingTypes.fs)
- DashboardFragments.renderHotReloadPanel (cyclomatic 20) (SageFs/DashboardFragments.fs)
- Documentation: no architecture or design documentation (docs/index.html)
- Documentation: no installation or build instructions (README.md)
- Documentation: no installation or build instructions (docs/index.html)
- Documentation: no usage examples (docs/index.html)
- ExpectoExecutor.executeReflected (cognitive 26) (SageFs.Core/Features/LiveTestingExecutors.fs)
- ExpectoExecutor.executeReflected (cyclomatic 19) (SageFs.Core/Features/LiveTestingExecutors.fs)
- …and 89 more

## New (310)

- Ansi.tokenize (cognitive 58) (scripts/lemmings/ui/nvim/Ansi.fs)
- Ansi.tokenize (cyclomatic 28) (scripts/lemmings/ui/nvim/Ansi.fs)
- Answer.planRipple (cyclomatic 16) (SageFs/McpAnalysis.fs)
- AppRunner.resolveProjectAssembly (cognitive 17) (SageFs.Host/AppRunner.fs)
- AppRunner.resolveProjectAssembly (cyclomatic 17) (SageFs.Host/AppRunner.fs)
- CapabilitySim.step (cognitive 59) (SageFs.Simulation/CapabilitySim.fs)
- CapabilitySim.step (cyclomatic 46) (SageFs.Simulation/CapabilitySim.fs)
- Change coupling: DaemonClient.fs ↔ Editor.fs (SageFs/DaemonClient.fs)
- Change coupling: Editor.fs ↔ RenderPipeline.fs (SageFs/Editor.fs)
- CliCommandModule.parse (cognitive 17) (SageFs/Program.fs)
- Cohort.decideRaw (cognitive 231) (SageFs.Core/Cohort.fs)
- Cohort.decideRaw (cyclomatic 127) (SageFs.Core/Cohort.fs)
- CohortGit.rebaseCommitsOnto (cognitive 32) (SageFs/CohortGit.fs)
- CohortGit.rebaseCommitsOnto (cyclomatic 16) (SageFs/CohortGit.fs)
- CohortStatusText.render (cognitive 23) (SageFs.Core/Features/CohortStatusText.fs)
- CohortStatusText.render (cyclomatic 16) (SageFs.Core/Features/CohortStatusText.fs)
- CompileOrderInsight.analyzeWithReferences (cognitive 19) (SageFs.Core/CompileOrderInsight.fs)
- CompileOrderInsight.analyzeWithReferences (cyclomatic 19) (SageFs.Core/CompileOrderInsight.fs)
- CoreEvidence.evidenceFor (cognitive 22) (SageFs.Core/CoreEvidence.fs)
- CoreEvidence.inspectProject (cognitive 48) (SageFs.Core/CoreEvidence.fs)
- …and 290 more

## Changes since last survey

- 300 commits — 245 feature/other, 55 fixes

## By area

- (root) — 39 commits
- scripts/lemmings — 36 commits
- (repo) — 29 commits
- SageFs.Core/Features — 28 commits
- docs/decisions.md — 11 commits
- sagefs-vscode/src — 11 commits
- sagefs-vscode/tests — 11 commits
- SageFs.Tests/fixtures — 10 commits
- docs/roadmap.md — 9 commits
- SageFs.Core/Capability.fs — 3 commits
- SageFs.Tests/ArchitectureTests.fs — 3 commits
- SageFs.Tests/DashboardBrowserTests.fs — 3 commits
- SageFs.Tests/InputHashCoverageTests.fs — 3 commits
- SageFs.Tests/LiveBindingsBrowserTests.fs — 3 commits
- docs/configuration.md — 3 commits
- scripts/plugin-impact-baseline — 3 commits
- SageFs.Core/MachineCalibration.fs — 2 commits
- SageFs.Core/MachineProfile.fs — 2 commits
- SageFs.Core/MemberTable.fs — 2 commits
- SageFs.Core/SessionManager.fs — 2 commits

## Notable commits

- fix: chore(scripts): delete fix-async.ps1 and launch_daemon_detached.py
- fix: chore(ship): move the plugin-impact baseline past the VS Code fixes merge
- fix: fix(analysis): read the val line behind the MCP result prefix
- fix: fix(build): build.fsx fails the test target on any non-zero exit
- fix: fix(cohort): a landing is verified against the files evaluated over the build, not coverage alone
- fix: fix(cohort): a member's public id is a fingerprint of the connection handle, not the handle
- fix: fix(dashboard): bound the eval result block, and keep a following output panel at the bottom when its own box changes size
- fix: fix(dashboard): give every held row of the live-bindings pane a signal of its own, and wait on the clicked row's mark
- fix: fix(dashboard): the live-bindings layout check judges the rows that have a box
- fix: fix(gate): a test whose coverage hit nothing has no cache key, so it is always run
- fix: fix(gate): a test's cache key sees the files coverage cannot, trustBeyond and seenFiles
- fix: fix(gate): gate-reap.fsx loads MachineTier.fs before Timeouts.fs
- fix: fix(hot-reload): keep the delta emitter inside two architecture ratchets, and make the child's protocol a closed set
- fix: fix(hot-reload): latency tier follows a patched save from its own compile, and takes the files as the journeys left them
- fix: fix(hot-reload): the REPL-freshness wiring fits the repo's ratchets and its wire shapes are pinned
- fix: fix(hot-reload): the emitter folds line numbers out of field and helper-method names, found by a real F# build
- fix: fix(hot-reload): the latency tier's restart row measures a restart, and a delta row measures the default route
- fix: fix(hygiene): the always-loaded skill stays under its word budget, and the browser journey disposes by await
- fix: fix(lemmings): Neovim harness types ;; whole, keeps the editor shell off the harness, and says what it needs
- fix: fix(lemmings): Neovim oracle follows what real runs showed
- …and 280 more

## API surface

- 13 added · 0 removed (a removed endpoint is potentially breaking)

## Added endpoints (13)

- GET /api/local-data
- GET /api/sessions/{sid}/live-values/mode
- POST /api/lease/release
- POST /api/lease/request
- POST /api/live-testing/debug
- POST /api/live-testing/debug/continue
- POST /api/live-testing/pause
- POST /api/live-testing/resume
- POST /api/live-testing/scope
- POST /api/local-data/clear
- POST /api/sessions/{sid}/live-values/evaluate
- POST /api/sessions/{sid}/live-values/mode
- POST /api/sessions/{sid}/workflow
