Skip to content

Commit 7867752

Browse files
jobordujoborduclaude
authored
fix(install): sync providers.json from ~/.claude.json when repo file is empty (#150)
* docs(407): create phase plan for issue 149 - manifest-driven CLI detection with user consent - Plan to replace hardcoded CLI detection with providers.json manifest - Add detect+prompt UX for user consent per CLI - Remove all CCR preset references from install.js - Single wave, 3 tasks, autonomous execution - Requirements: ISSUE-149-01 through ISSUE-149-06 * feat(install): remove CCR references and clean up manifest-driven detection (issue 149) * docs(quick-407): issue 149 * docs(quick-407): update verification status * test(install): update provider tests for post-CCR manifest-driven detection * req(quick-407): add INST-11 * feat(providers): add Daintree Z.AI + MiniMax presets via fan-out import, rename link-canopy → link-daintree Import Daintree claude agent presets (Z.AI and MiniMax) into providers.json using the existing fan-out import mechanism from /nf:link-canopy. This clones claude-1 as vanilla and creates claude-z-ai and claude-minimax slots with preset-specific env overrides (ANTHROPIC_BASE_URL, model mappings). Also renames the skill from nf:link-canopy to nf:link-daintree to match the product name. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(providers): remove Daintree presets from repo — secrets must stay local The fan-out import wrote Z.AI and MiniMax preset entries (containing ANTHROPIC_AUTH_TOKEN secrets) into the repo's bin/providers.json. These are user-specific and should only exist in ~/.claude/nf/bin/providers.json via /nf:link-daintree. Reverted providers.json to 5 vanilla providers and restored test assertions to match. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * refactor(providers): empty providers.json in repo — populated at install time via /nf:link-daintree The repo's bin/providers.json is now empty. Provider entries are user-specific and get populated when the user runs /nf:link-daintree, which discovers installed Daintree agents, vanilla CLIs, and presets. This prevents shipping hardcoded provider configs (and potential secrets) to all npm users. Tests use inline fixture data instead of reading from providers.json. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * feat(install): PATH scan fallback when providers.json is empty When the repo's providers.json is empty (no Daintree presets), install.js now scans PATH for known CLIs (claude, codex, gemini, opencode, copilot) using the existing resolveCli helper — no Daintree required for vanilla install. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(install): sync providers.json from ~/.claude.json when repo file is empty - When bin/providers.json is empty (issue 149 convention), ensureMcpSlotsFromProviders() now syncs slots from ~/.claude.json MCP servers + PATH scan fallback - KNOWN_CLI_PREFIXES filter excludes generic MCPs like canopy/sentry - Fan-out slots (claude-z-ai, claude-minimax) from /nf:link-daintree are included - Also fix River ML venv creation order — create venv BEFORE checking import - Update nForma.test.cjs and provider-mapping.test.cjs to use FIXTURE_PROVIDERS instead of reading empty bin/providers.json directly Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix: resolve merge conflict markers in formal model registry and related JSON files Resolving conflict markers left in .planning/ files after the merge: - .planning/formal/model-registry.json (restored clean version from 7bd1b00) - .planning/formal/solve-state.json (6 conflicts resolved) - .planning/formal/proximity-index.json (1 conflict resolved) - .planning/formal/evidence/doc-claims.json (3 conflicts resolved) - .planning/formal/solve-trend.jsonl (1 conflict resolved) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(formal): give max_retries a safe default value in oauth-rotation.pm PRISM requires all constants to be defined before model checking. The max_retries constant was declared without a default, relying entirely on run-oauth-rotation-prism.cjs to inject it via -const. When the runner is invoked without -const (e.g. in CI's formal-verify pipeline that calls the script directly), PRISM fails with "Undefined constant max_retries". Fix: initialize max_retries = 3 as the safe default (matches the legacy gemini-1 config). The runner still overrides it live from providers.json when available. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: jobordu <jonathan@jonathanborduas.com> Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 6844540 commit 7867752

17 files changed

Lines changed: 1224 additions & 1717 deletions

.planning/STATE.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ See: .planning/PROJECT.md
4242
| 404 | Build nf:debug autonomy benchmark with graded difficulty stubs, fix-cycle runner, and standalone scorer | 2026-04-17 | 27ad207d | Verified | [404-build-nf-debug-autonomy-benchmark-with-g](.planning/quick/404-build-nf-debug-autonomy-benchmark-with-g/) |
4343
| 405 | Implement PR merge-readiness autopilot script (issue #136) | 2026-04-30 | c86519ab | Verified | [405-work-on-issue-136](./quick/405-work-on-issue-136/) |
4444
| 405 | Bidirectional fleet sync: Canopy presets <-> nForma providers (issue 138) | 2026-05-01 | fc2a0e25 | Needs Review | [405-bidirectional-fleet-sync-canopy-presets-](./quick/405-bidirectional-fleet-sync-canopy-presets-/) |
45+
| 407 | Cleanup manifest-driven CLI detection (issue 149) | 2026-05-01 | 3f19b4c7 | Verified | [407-issue-149](./quick/407-issue-149/) |
4546

4647
## Session Log
4748

@@ -66,4 +67,4 @@ See: .planning/PROJECT.md
6667
- 2026-04-10 - Completed quick task 388: Sync baseline requirements and audit solver-generated formal models and test stubs
6768
- 2026-04-11 - Completed quick task 389: Fix shell-prompt-quorum-dedup.als Alloy assertion failure
6869

69-
Last activity: 2026-05-01 - Completed quick task 405: Bidirectional fleet sync (issue 138)
70+
Last activity: 2026-05-01 - Completed quick task 407: Cleanup manifest-driven CLI detection (issue 149)

.planning/formal/evidence/doc-claims.json

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,4 @@
11
{
2-
<<<<<<< HEAD
3-
"generated": "2026-04-20T18:19:34.054Z",
4-
"total_claims_checked": 188,
5-
"doc_files_scanned": 8,
6-
"raw_broken_count": 49,
7-
"weighted_residual": 96,
8-
"suppressed_fp_count": 9,
9-
"category_breakdown": {
10-
"user": 47,
11-
=======
122
"generated": "2026-04-16T21:04:43.632Z",
133
"total_claims_checked": 188,
144
"doc_files_scanned": 8,
@@ -17,7 +7,6 @@
177
"suppressed_fp_count": 7,
188
"category_breakdown": {
199
"user": 56,
20-
>>>>>>> origin/main
2110
"developer": 2
2211
},
2312
"broken_claims": [
@@ -41,18 +30,6 @@
4130
},
4231
{
4332
"doc_file": "README.md",
44-
<<<<<<< HEAD
45-
"line": 685,
46-
"type": "file_path",
47-
"value": "gates/gate-a-grounding.json",
48-
"reason": "file not found",
49-
"category": "user",
50-
"weight": 2
51-
},
52-
{
53-
"doc_file": "README.md",
54-
=======
55-
>>>>>>> origin/main
5633
"line": 964,
5734
"type": "dependency",
5835
"value": "api-and-interface-design",
@@ -79,18 +56,6 @@
7956
"weight": 1
8057
},
8158
{
82-
<<<<<<< HEAD
83-
"doc_file": "docs/dev/requirements-coverage.md",
84-
"line": 1997,
85-
"type": "file_path",
86-
"value": ".planning/formal/promotion-changelog.json",
87-
"reason": "file not found",
88-
"category": "developer",
89-
"weight": 1
90-
},
91-
{
92-
=======
93-
>>>>>>> origin/main
9459
"doc_file": "docs/USER-GUIDE.md",
9560
"line": 362,
9661
"type": "dependency",
@@ -569,3 +534,4 @@
569534
}
570535
]
571536
}
537+

0 commit comments

Comments
 (0)