CodeNomad/dev-docs
Pascal André ec1c0bedbf
feat(plugins): add scoped V2 plugin activation controls (#726)
## Summary

- Add narrow CodeNomad routes for native OpenCode V2 plugin inventory
and activation-rule mutations.
- Present one row per user/configured plugin with exactly two compact
**Global** and **Project** switches, sharing Yolo/MCP switch geometry.
Builtins are hidden; exact configured disabled IDs remain available.
- Keep complete names, source paths, failures and configuration targets
readable on narrow keyboard/touch layouts. Retain focused rows across
refreshes and guard repeated pending activation without removing
keyboard focus.
- Provide translated feedback in all ten locales and suppress stale
feedback after the owning surface is disposed.

## Authority and refresh behavior

- Discover roots through the authenticated daemon's `config.get`, after
native-location ownership and connection-generation checks.
- Append only exact activation rules while preserving JSONC comments,
source options, unknown keys, formatting, BOM and native permissions.
Bound reads, check optimistic conflicts, serialize by write target and
use atomic replacement with nonce-owned locks.
- Require proven raw/normalized alignment before acknowledging a no-op.
Watcher lag cannot report success for a rule that is no longer saved on
disk.
- Account for inherited `.opencode` precedence by choosing a
higher-precedence target in the active project location; preserve
ancestor files and reject an escaping fallback target.
- Use native WSL filesystem operations. Retain canonical invalidation
and one trailing reconciliation when host/native cache records converge.
- Cache display snapshots by instance/worktree, share them across
sessions in that worktree, and refresh only on visible demand. Global
writes invalidate sibling snapshots without background reads.

## Compatibility

The current server/UI/bundled-plugin dependency pin and recommended
runtime are **2.0.16**, aligned with `dev`. The demonstrated technical
minimum remains **2.0.7**. Activation writes use the narrow local JSONC
operation rather than a runtime-specific write endpoint.

## Validation status and provenance

Final reviewed head: **`5204d97694ca8ced954bddc9cc94ea464e46119d`**,
aligned with `dev@9d7ea5d6`. Both independent resumed review loops
reached **ZERO actionable findings**: UX R6 and quality/optimization R5.

Local validation on the final head: **100 plugin/server/cache/WSL tests
passed**, **eight real-component browser regressions passed**, **14
restoration/metadata integration tests passed**, server/UI typechecks
and UI production build passed. Translation keys/placeholders match
across all ten locales. The current-dev baseline and PR browser
comparison passed the same 34 shared cases with one optional native
Electron skip; detailed revision provenance is in the final review
comment.

**CI qualification is excluded at the user's explicit request.** No
final CI success is claimed, and CI completion is not being awaited.

The earlier head `38845060` failed typechecking because `noticeId` was
undeclared; the earlier historical UX R4 zero-finding claim was also
incorrect and has been [explicitly
corrected](https://github.com/NeuralNomadsAI/CodeNomad/pull/726#issuecomment-5816956417).

Historical test results and the installer built from `bd31dcd0` are not
validation or artifacts of the final corrected head. See the final
review comment for completed counts, review evidence and revision
boundaries. The PR remains open.

## Scope note

Implemented independently; no code was copied from PR #593.

This separate V2 implementation supersedes PR #593.
2026-09-25 01:29:14 +02:00
..
ui-harmonization-demo V2(ui): progressively harmonize the CodeNomad interface (#667) 2026-09-15 14:17:30 +01:00
architecture.md feat(browser): add autonomous native previews (#666) 2026-09-18 17:46:14 +02:00
ATTACHMENT_UX_PLAN.md feat(composer): unify native device attachments and project references (#729) 2026-09-24 23:12:44 +02:00
BROWSER_AUTOMATION.md fix(automation): remove the active-conversation targeting requirement (#746) 2026-09-22 10:15:37 +02:00
CACHE_REFRESH_CONVENTIONS.md fix(models): retain active-session selections across admission and refresh races (#771) 2026-09-24 21:16:40 +02:00
DEV_V2_CODE_REDUCTION.md feat(opencode): migrate CodeNomad to native V2 (#647) 2026-09-04 11:36:11 +01:00
DEVELOPER_MODE.md feat(browser): add autonomous native previews (#666) 2026-09-18 17:46:14 +02:00
INDEX.md docs(opencode): define stable runtime setup and update plan 2026-09-20 14:31:45 +02:00
MVP-PRINCIPLES.md feat(opencode): migrate CodeNomad to native V2 (#647) 2026-09-04 11:36:11 +01:00
OPENCODE_V2_COMPATIBILITY.md chore(opencode): qualify 2.0.16 with aligned clients and plugin (#772) 2026-09-24 20:42:08 +02:00
OPENCODE_V2_POST_BETA.md fix(opencode): use native upgrade for live Windows runtime updates (#769) 2026-09-24 15:19:35 +02:00
PALETTE_REVIEW_2026-09-08.md V2(ui): progressively harmonize the CodeNomad interface (#667) 2026-09-15 14:17:30 +01:00
PALETTE_SOURCES.md V2(ui): progressively harmonize the CodeNomad interface (#667) 2026-09-15 14:17:30 +01:00
PLUGIN_ACTIVATION_CONTROLS.md feat(plugins): add scoped V2 plugin activation controls (#726) 2026-09-25 01:29:14 +02:00
pr724-go-to-destinations.png feat(ui): add workspace-root navigation to directory browser (#724) 2026-09-24 10:24:58 +02:00
pr724-go-to-filtered.png feat(ui): add workspace-root navigation to directory browser (#724) 2026-09-24 10:24:58 +02:00
pr729-attachments-fr-narrow.png feat(composer): unify native device attachments and project references (#729) 2026-09-24 23:12:44 +02:00
pr729-attachments-he-wide.png feat(composer): unify native device attachments and project references (#729) 2026-09-24 23:12:44 +02:00
SAVED_PALETTE_CALIBRATION_2026-09-11.md V2(ui): progressively harmonize the CodeNomad interface (#667) 2026-09-15 14:17:30 +01:00
SESSION_ENVIRONMENT.md fix(environment): refresh profile variables before each prompt (#714) 2026-09-19 18:18:56 +02:00
SESSION_HISTORY_NAVIGATION.md fix(ui): preserve semantic icons for historical timeline tools (#738) 2026-09-21 23:46:51 +02:00
SESSION_HISTORY_QUERIES.md feat(history): add global timeline and direct message-window navigation 2026-09-20 12:04:30 +02:00
SESSION_HISTORY_STRESS_REVIEW.md feat(history): persist timeline indexes and reconcile changed checkpoints 2026-09-20 23:21:03 +02:00
SESSION_PRUNING_DEPLOYMENT.md feat(pruning): restore opt-in selective deletion through native plugin RPC (#686) 2026-09-10 13:31:40 +02:00
SESSION_PRUNING_RPC.md feat(history): query full sessions and clean technical content through native RPC 2026-09-20 11:02:31 +02:00
SESSION_PRUNING_SAFETY.md feat(pruning): restore opt-in selective deletion through native plugin RPC (#686) 2026-09-10 13:31:40 +02:00
solidjs-llms.txt update blank session cleanup code for now session store logic 2025-11-27 20:18:22 -05:00
SUMMARY.md feat(v2): manage session families across worktrees (#649) 2026-09-17 22:57:37 +02:00
TAB_CHROME_REVIEW_2026-09-10.md V2(ui): progressively harmonize the CodeNomad interface (#667) 2026-09-15 14:17:30 +01:00
TAURI_WINDOWS_INPUT_DEADLOCK.md fix(tauri): prevent Windows input reentrancy deadlocks (#773) 2026-09-24 21:02:20 +02:00
technical-implementation.md fix(opencode): support earlier and modern V2 runtime contracts (#695) 2026-09-16 23:48:08 +02:00
TOOL_CALL_IMPLEMENTATION.md Split workspace into electron and ui packages 2025-11-17 12:06:58 +00:00
user-interface.md Puff-up README 2025-11-14 23:26:13 +00:00
WORKTREE_SESSION_PLACEMENT.md fix(worktrees): unblock existing-worktree selection on large repositories (#740) 2026-09-21 17:33:11 +02:00