From cbe864b59b3d74dfde0c5a685c6ae135b0b4e1df Mon Sep 17 00:00:00 2001 From: jobordu Date: Sat, 2 May 2026 20:02:31 +0100 Subject: [PATCH 1/2] Release v0.43.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changelog: - refactor(install): manifest-driven CLI detection — providers.json shipped empty, populated at install time - fix(formal): resolve merge conflict markers in .planning JSON files - fix(formal): give max_retries a safe default in oauth-rotation.pm Co-Authored-By: Claude Opus 4.7 --- CHANGELOG.md | 9 +++++++++ docs/assets/terminal.svg | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 509d8b2da9..bfc61d33f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,15 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +## [0.43.0] - 2026-05-02 + +### Changed +- refactor(install): manifest-driven CLI detection — `providers.json` now shipped empty and populated at install time from `~/.claude.json` MCP servers and PATH auto-detection + +### Fixed +- fix(formal): resolve merge conflict markers in `.planning/formal/` JSON files that caused `extract-annotations.cjs` to fail with JSON parse errors +- fix(formal): give `max_retries` a safe default value in `oauth-rotation.pm` — PRISM requires all constants to be defined + ## [0.43.0-rc.1] - 2026-04-23 — next prerelease ### Changed diff --git a/docs/assets/terminal.svg b/docs/assets/terminal.svg index 2f61a2433b..b7913a8504 100644 --- a/docs/assets/terminal.svg +++ b/docs/assets/terminal.svg @@ -80,7 +80,7 @@ - nForma — Consensus before code. Proof before production. v0.43.0-rc.1 + nForma — Consensus before code. Proof before production. v0.43.0 Built on GSD-CC by TÂCHES. The task of leadership is to create an alignment of strengths so strong that it makes the system’s weaknesses irrelevant. diff --git a/package-lock.json b/package-lock.json index d4f2a0a748..cbbfd7df17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@nforma.ai/nforma", - "version": "0.43.0-rc.1", + "version": "0.43.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@nforma.ai/nforma", - "version": "0.43.0-rc.1", + "version": "0.43.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index d5d1b8da1a..cd103c7f23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nforma.ai/nforma", - "version": "0.43.0-rc.1", + "version": "0.43.0", "description": "nForma — Multi-agent coding orchestrator with quorum consensus and formal verification (TLA+, Alloy, PRISM). Consensus before code, proof before production.", "bin": { "nforma": "bin/nforma-cli.js", From defeb4359de892ade25cd3bee90a39812f1d296b Mon Sep 17 00:00:00 2001 From: jobordu Date: Sun, 3 May 2026 09:24:57 +0100 Subject: [PATCH 2/2] fix(link-daintree): correct family-gate fallback in fan-out import MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When inferring a family from preset env (e.g. ANTHROPIC_* → "anthropic"), the findVanilla() pool construction erroneously returned [] instead of all candidates when no vanilla slot matched the inferred family. This caused all presets to be skipped when providers have mainTool=claude but provider="claude" (not "anthropic"). Fix: change pool construction from: familyMatch.length ? familyMatch : (family ? [] : candidates) to: familyMatch.length ? familyMatch : candidates The family gate is still respected when matches exist; when it doesn't, we correctly fall back to all candidates sorted by daintree_preset_id then numeric suffix. Co-Authored-By: Claude Opus 4.7 --- CHANGELOG.md | 5 +++++ commands/nf/link-daintree.md | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfc61d33f7..9302e15021 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +## [0.43.1] - 2026-05-03 + +### Fixed +- fix(link-daintree): fan-out fallback logic no longer silently drops presets when no vanilla provider has a matching `provider` field — the family gate is now correctly bypassed when the inferred family doesn't match any vanilla slot, falling back to all candidates sorted by daintree_preset_id then numeric suffix + ## [0.43.0] - 2026-05-02 ### Changed diff --git a/commands/nf/link-daintree.md b/commands/nf/link-daintree.md index 92cb7b29d4..5702100b2d 100644 --- a/commands/nf/link-daintree.md +++ b/commands/nf/link-daintree.md @@ -482,7 +482,7 @@ function inferFamily(envObj) { function findVanilla(agentName, family) { const candidates = providersData.providers.filter(p => p.mainTool === agentName); const familyMatch = family ? candidates.filter(p => p.provider === family) : candidates; - const pool = familyMatch.length ? familyMatch : (family ? [] : candidates); + const pool = familyMatch.length ? familyMatch : candidates; // Prefer provider without daintree_preset_id, then lowest numeric suffix pool.sort((a, b) => { const aIsClone = !!a.daintree_preset_id;