diff --git a/MIGRATION_PLAN.md b/MIGRATION_PLAN.md index dc3ca6f..7492680 100644 --- a/MIGRATION_PLAN.md +++ b/MIGRATION_PLAN.md @@ -59,7 +59,7 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date. - [x] Add core completion stack: `nvim-cmp`, `cmp-nvim-lsp`, `cmp-buffer`, `cmp-path`, `LuaSnip` ## Phase 3.4 — Project‑local configuration (neoconf) -- [ ] Confirm scope and priorities for this subphase +- [x] Confirm scope and priorities for this subphase - [x] Choose approach: use `folke/neoconf.nvim` (replaces custom loader) - [x] Add `folke/neoconf.nvim` plugin spec and minimal setup - [x] Document `.neoconf.json` usage and example in README @@ -76,6 +76,34 @@ Source of truth for the step-by-step rebuild. Keep this concise and up to date. - [x] Temporarily inject `intelephense.environment.includePaths` via lspconfig for `WORKSPACE_SIMPLE` to validate goto-definition - [x] After validation, remove the temporary injection and rely on neoconf +## Phase 3.9 — Neoconf + Root Fix (BLOCKER) + +## Phase 3.9.1 — Confirm neoconf merge hook +- [ ] Ensure neoconf lspconfig integration applies before server setup (validate with `jsonls` in `WORKSPACE_SIMPLE`) +- [ ] Decide schema for `intelephense` settings (nested `settings.intelephense.environment.includePaths`) + +## Phase 3.9.2 — Temporary merge shim (if needed) +- [ ] Implement minimal per-server merge from `.neoconf.json` → `lspconfig.intelephense.settings` at setup-time (remove later if neoconf resolves) + +## Phase 3.9.3 — Robust PHP root resolver +- [ ] Implement explicit `root_dir` resolver (prefer `.neoconf.json`, `composer.json`, `.nvimroot`, then nearest `.git`) using `vim.fs.find` +- [ ] Keep `single_file_support = false` for `intelephense` + +## Phase 3.9.4 — Validate in WORKSPACE_SIMPLE +- [ ] `:LspInfo` shows correct root +- [ ] `gd` works for local and any configured includePaths + +## Phase 3.9.5 — Validate in WORKSPACE_TEST + EXTERNAL_TEST +- [ ] With forced workspace root, `gd` still resolves external library symbols via includePaths +- [ ] Confirm behavior after client restart and fresh session + +## Phase 3.9.6 — Decision: rooter plugin (optional) +- [ ] If root resolution remains brittle, propose adding a rooter plugin (requires approval), tuned for tab-per-context + +## Phase 3.9.7 — Finalize approach +- [ ] If neoconf merge works reliably, remove temporary shim; otherwise retain shim and document +- [ ] Document root marker guidance (`.nvimroot`) and includePaths best practices + ## Phase 3.5 — LSP minimal defaults - [x] Add `nvim-lspconfig` with minimal defaults (no over-configuration) - [x] Add minimal LSP on-attach keymaps (gd, gr, K, gD, gI) @@ -202,9 +230,10 @@ Notes: - Prefer simple defaults; only add settings that clearly improve workflow. - Plugin approval policy: unlisted plugins may be proposed, but must be explicitly confirmed before installation. -Known Issues / Follow-ups: +Known Issues / Follow-ups (tracked by Phase 3.9): - lua-language-server (lua_ls) from Mason failed to start due to missing shared library `libbfd-2.38-system.so`. Options: - Install lua-language-server via system package manager compatible with your distro. - Provide the required `libbfd` or adjust symlink to match expected soname. - Skip lua_ls for now; neoconf validation can be done with other servers (e.g., jsonls) and PHP (intelephense). - LSP root detection: In some cases, the parent repository is picked as the root (e.g., when a workspace lives inside another repo). Workaround: create an empty `.git` directory (or a marker like `.nvimroot`) in the intended workspace root to pin the project root for LSPs. +- Neoconf merge + root correctness are a blocker for migration. Address via Phase 3.9 subphases above.