This file provides guidance to agents when working with code in this repository.
- Settings View Pattern: When working on
SettingsView, inputs must bind to the localcachedState, NOT the liveuseExtensionState(). ThecachedStateacts as a buffer for user edits, isolating them from theContextProxysource-of-truth until the user explicitly clicks "Save". Wiring inputs directly to the live state causes race conditions.
Prefer the narrowest test layer that proves the behavior. This follows standard test-pyramid guidance: keep most coverage in fast, focused tests; add integration tests for cross-module contracts; reserve end-to-end tests for full workflow confidence.
- Use package-local unit tests for pure logic, parsing, state transitions, validation, serialization, request construction, retry decisions, and error handling.
- Use integration tests when behavior depends on multiple internal modules working together, but does not require the real VS Code extension host or browser/webview runtime.
- Use
webview-uitests for React rendering, hooks, component state, forms, validation, and webview UI wiring. - Use
apps/vscode-e2eonly when the behavior depends on the real VS Code extension host, VS Code workspace APIs, extension activation, webview/extension messaging, file watcher behavior, or a complete user workflow. - Keep e2e tests focused on high-value smoke coverage across boundaries. Avoid placing detailed protocol, parsing, storage, retry, or edge-case assertions in e2e when they can be covered reliably at a lower layer.
- When fixing a regression, add the regression test at the lowest layer that would have failed for the bug. Add an e2e test only if lower-level tests cannot represent the failure mode.