Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
532 commits
Select commit Hold shift + click to select a range
51c9ba5
test(atlas): tighten router mock typing
tnaum-ms Jul 27, 2026
414c0d2
feat: enhance CreateIndexDrawer for wildcard index support
tnaum-ms Jul 27, 2026
58ebdbe
feat(atlas): refine credential webview with breadcrumb progress
tnaum-ms Jul 27, 2026
d452f7a
docs(indexView): update priority index table and status references fo…
tnaum-ms Jul 27, 2026
e4ea448
feat(atlas): refine cards, radio selection, and verify flow
tnaum-ms Jul 27, 2026
92d6eb7
feat(atlas): stable titles, breadcrumb checks, Close action
tnaum-ms Jul 27, 2026
d0854f2
fix: update references in UX review documentation for Create Index re…
tnaum-ms Jul 27, 2026
d41b366
fix(atlas): MessageBar layout and truthful verification steps
tnaum-ms Jul 27, 2026
fb25694
fix(atlas): no spinner on failed verify, unified Back buttons
tnaum-ms Jul 27, 2026
affba42
feat(atlas): error log details, cleaner error icon, trimmed inputs
tnaum-ms Jul 28, 2026
f53dea3
feat(atlas): drop product name from credential webview copy
tnaum-ms Jul 28, 2026
79e134a
chore(atlas): l10n and formatting
tnaum-ms Jul 28, 2026
cd5b6d9
docs: add review report for PR #732 detailing correctness and input/o…
tnaum-ms Jul 28, 2026
f16e509
docs: update PR #732 review report with independent re-review finding…
tnaum-ms Jul 28, 2026
2eff210
fix(indexView): route index deletion through configured confirmation …
tnaum-ms Jul 28, 2026
8d81c41
docs(review): mark MEDIUM-1 resolved with fix commit reference
tnaum-ms Jul 28, 2026
0204b97
fix(indexView): stop background poll failures from spamming error toasts
tnaum-ms Jul 28, 2026
cd384cd
docs(review): mark MEDIUM-2 resolved with fix commit reference
tnaum-ms Jul 28, 2026
414b44e
fix(indexView): disable busy-row delete and hide actions
tnaum-ms Jul 28, 2026
dd9c791
docs(review): mark LOW-1 resolved with fix commit reference
tnaum-ms Jul 28, 2026
4cc9dce
fix(indexView): isolate raw advanced-option fragments in generated co…
tnaum-ms Jul 28, 2026
9604419
docs(review): mark LOW-2 resolved with fix commit reference
tnaum-ms Jul 28, 2026
463089f
fix(indexView): tighten create-index schema at the tRPC boundary
tnaum-ms Jul 28, 2026
e2d5c9d
docs(review): mark LOW-3 resolved with fix commit reference
tnaum-ms Jul 28, 2026
760f4fd
fix(indexView): drop redundant aria-label on index type badge
tnaum-ms Jul 28, 2026
7d61c65
docs(review): mark LOW-4 resolved with fix commit reference
tnaum-ms Jul 28, 2026
5318241
fix(webview): make dev ResizeObserver detector installation idempotent
tnaum-ms Jul 28, 2026
5513077
docs(review): mark LOW-5 resolved with fix commit reference
tnaum-ms Jul 28, 2026
2668db1
chore(l10n): add 'Field path is required.' string from LOW-3 fix
tnaum-ms Jul 28, 2026
f0b8773
feat(atlas): rework credential webview and unify IP-access handling
tnaum-ms Jul 28, 2026
de9b5b9
feat(collectionView): add Index Management tab (#732)
tnaum-ms Jul 28, 2026
fc37973
feat(atlas): enhance guide section with structured steps and improved…
tnaum-ms Jul 28, 2026
0d094ca
feat(atlas): log external URL before opening for better traceability
tnaum-ms Jul 28, 2026
3142534
feat(atlas): improve credential completion flow
tnaum-ms Jul 28, 2026
32c1414
Refresh Atlas tree after credential save
tnaum-ms Jul 29, 2026
f3e9419
Close Atlas credential webview on completion
tnaum-ms Jul 29, 2026
77a060a
feat(atlas): add logging for deep link resolution in IP-blocked scena…
tnaum-ms Jul 29, 2026
05ac289
fix(atlas): handle credentials with no accessible projects
tnaum-ms Jul 29, 2026
e4e7112
feat(atlas): open sign-in webview directly
tnaum-ms Jul 29, 2026
c4f5185
Merge remote-tracking branch 'origin/dev/tnaum/atlas-review-iteration…
tnaum-ms Jul 29, 2026
cbffa94
Show rejected IP in Atlas access errors
tnaum-ms Jul 29, 2026
02c197c
feat(atlas): standardize credential webview navigation footer
tnaum-ms Jul 30, 2026
f966bf3
fix(atlas): improve credential wizard breadcrumb a11y
tnaum-ms Jul 30, 2026
ac9fe92
fix(atlas): move focus to step heading on wizard step change
tnaum-ms Jul 30, 2026
b38d359
docs(atlas): record footer standardization & wizard a11y progress (it…
tnaum-ms Jul 30, 2026
f98d4c0
feat(atlas): reveal credential footer separator only while content sc…
tnaum-ms Jul 30, 2026
9993762
feat(atlas): make credential wizard breadcrumb responsive (overflow)
tnaum-ms Jul 30, 2026
2ba08cd
docs(atlas): record dynamic footer separator & responsive breadcrumb …
tnaum-ms Jul 30, 2026
1d60396
docs(atlas): mark items 2 & 3 done (superseded/implemented in Iterati…
tnaum-ms Jul 30, 2026
02604b7
fix(atlas): announce the credential form step for screen readers
tnaum-ms Jul 30, 2026
4ade50f
fix(atlas): preserve credential identities
tnaum-ms Jul 30, 2026
94a39b5
feat(atlas): add footer experiment toggle
tnaum-ms Jul 30, 2026
135d62e
Atlas discovery: multi-credential model, quiet merged tree, and crede…
tnaum-ms Jul 30, 2026
7d470bc
fix(webview): redact external URL diagnostics
tnaum-ms Jul 30, 2026
484c3f1
feat(atlas): UX review iteration 4.1 — wizard recovery, credential we…
tnaum-ms Jul 30, 2026
abb16e2
Merge remote-tracking branch 'origin/main' into feature/atlas-discovery
tnaum-ms Jul 30, 2026
d401fb7
Move Create Index option explanations into tooltips
tnaum-ms Jul 30, 2026
1bb4409
Reorder vector index algorithm cards, preselect DiskANN
tnaum-ms Jul 30, 2026
f1ae917
fix(atlas): migrate webview telemetry context
tnaum-ms Jul 30, 2026
2f06ee8
Merge remote-tracking branch 'origin/release/0.10.0' into feature/atl…
tnaum-ms Jul 30, 2026
7ecc946
[wip] review
tnaum-ms Jul 30, 2026
e3df946
Implement code changes to enhance functionality and improve performance
tnaum-ms Jul 31, 2026
d7cfbd4
fix(atlas): check cancellation signal before persisting credential (M…
tnaum-ms Jul 31, 2026
145104c
fix(atlas): sign full Digest request-target and cache challenge (WITH…
tnaum-ms Jul 31, 2026
a5b7e8f
fix(atlas): show index context-menu commands for Atlas clusters (NEW-2)
tnaum-ms Jul 31, 2026
19cbf7b
fix(atlas): serialize discovery passes with timeout and abort handlin…
tnaum-ms Jul 31, 2026
fff4cd2
fix(atlas): classify token failures and fix credential-blaming tree m…
tnaum-ms Jul 31, 2026
bf374b4
revert(atlas): remove per-source shell terminal labelling (NEW-8)
tnaum-ms Jul 31, 2026
698fb3f
fix(atlas): prevent stale credential writes without a write queue (ME…
tnaum-ms Jul 31, 2026
a69f078
fix(atlas): surface link-open failures and neutral 403 wording (LOW-1…
tnaum-ms Jul 31, 2026
ac4a37e
fix(atlas): localize cluster tooltip fields and fix terminology (LOW-…
tnaum-ms Jul 31, 2026
c84d829
fix(atlas): tree/wizard parity, journey correlation ID, payload guard…
tnaum-ms Jul 31, 2026
fb0f014
chore(atlas): regenerate l10n bundle and apply formatting/lint fixes
tnaum-ms Jul 31, 2026
d7dd3d2
docs(atlas): add implementation iteration executive summary to review
tnaum-ms Jul 31, 2026
931a09c
fix(atlas): disable experimental adaptive footer position by default
tnaum-ms Jul 31, 2026
ca1a6ea
docs(atlas): relocate review doc to PR #834 folder and note footer de…
tnaum-ms Jul 31, 2026
772d3e3
Simplify wildcard index scope options
tnaum-ms Jul 31, 2026
a9cfa76
Animate index option settings
tnaum-ms Jul 31, 2026
41fd4bc
Animate wildcard scope settings
tnaum-ms Jul 31, 2026
ea8c887
Animate vector compression settings
tnaum-ms Jul 31, 2026
2452be3
Review iteration: MongoDB Atlas discovery provider (PR #765 findings)…
tnaum-ms Jul 31, 2026
2ed7c81
Fix wildcard projection motion
tnaum-ms Jul 31, 2026
75b5b86
Simplify index option hints
tnaum-ms Jul 31, 2026
ec391f7
Add bottom padding to createIndexDrawerBody for improved spacing
tnaum-ms Jul 31, 2026
3e44108
Require fields for wildcard projection
tnaum-ms Jul 31, 2026
add376a
Ignore inactive wildcard parent paths
tnaum-ms Jul 31, 2026
acff8c6
Polish Create Index drawer interactions (#836)
tnaum-ms Jul 31, 2026
68d94dd
Merge remote-tracking branch 'origin/main' into feature/atlas-discovery
tnaum-ms Jul 31, 2026
8c12494
Merge remote-tracking branch 'origin/release/0.10.0' into feature/atl…
tnaum-ms Jul 31, 2026
4639570
Revert unintended main merge from Atlas discovery branch
tnaum-ms Jul 31, 2026
ee12d40
fix(atlas): make forbidden error message generic
tnaum-ms Jul 31, 2026
2bba63d
feat: add MongoDB Atlas discovery provider plugin (#765)
tnaum-ms Jul 31, 2026
6d10856
Merge remote-tracking branch 'origin/main' into feature/local-quickstart
tnaum-ms Jul 31, 2026
cc2c76a
Use Fluent cards for index options
tnaum-ms Jul 31, 2026
5d6bac9
Align Atlas pending status icons
tnaum-ms Jul 31, 2026
92bf286
Merge branch 'release/0.10.0' into feature/local-quickstart
tnaum-ms Jul 31, 2026
76cd7ee
Align Atlas credential stage icons
tnaum-ms Jul 31, 2026
ed94f60
fix(indexView): make card RadioGroups controlled with onChange/disabled
tnaum-ms Jul 31, 2026
082f098
refactor(indexView): drop redundant per-Radio state handlers in card …
tnaum-ms Jul 31, 2026
54ffd8f
fix(indexView): preserve type narrowing in card RadioGroup onChange
tnaum-ms Jul 31, 2026
23aa385
Unify Atlas and index option UI (#837)
tnaum-ms Jul 31, 2026
bc27766
Merge branch 'release/0.10.0' into feature/local-quickstart
tnaum-ms Jul 31, 2026
be57123
fix(webviews): adapt Fluent interaction colors
tnaum-ms Aug 1, 2026
20159b9
fix(indexView): adapt interaction colors to theme
tnaum-ms Aug 1, 2026
ea7680f
fix(IndexTable): implement zebra striping for Fluent Table rows
tnaum-ms Aug 1, 2026
55f5881
fix(webviews): adapt Fluent field colors
tnaum-ms Aug 2, 2026
e1a1c25
wip: plan
tnaum-ms Aug 2, 2026
9315a9d
wip: plan
tnaum-ms Aug 3, 2026
cf2ba81
fix(webviews): adapt Fluent progress colors
tnaum-ms Aug 3, 2026
a3d4f3c
finalized plan for docker state detedtion and control
tnaum-ms Aug 3, 2026
8d0cb52
Classify Docker readiness failures
tnaum-ms Aug 3, 2026
5b05214
Document Slice A classifier checkpoint
tnaum-ms Aug 3, 2026
d832ebc
Capture Docker probe evidence
tnaum-ms Aug 3, 2026
4932a3f
Document Docker probe evidence checkpoint
tnaum-ms Aug 3, 2026
e076243
Orchestrate bounded Docker readiness checks
tnaum-ms Aug 3, 2026
b1bc6ca
Document Docker readiness orchestration checkpoint
tnaum-ms Aug 3, 2026
afd62dc
docs(webviews): document the input mixin stroke tokens
tnaum-ms Aug 3, 2026
dcd7ffe
test(theme): use namespace node imports in the Fluent contract test
tnaum-ms Aug 3, 2026
e41a744
test(theme): drop the self-referential gradient assertion
tnaum-ms Aug 3, 2026
0aa98d4
fix(webviews): give the Fluent overrides an explicit import site
tnaum-ms Aug 3, 2026
e0f3251
Present actionable Docker readiness failures
tnaum-ms Aug 3, 2026
9c09701
Document Docker readiness UI checkpoint
tnaum-ms Aug 3, 2026
dcad405
docs(theme): note the indeterminate override also clears the rail
tnaum-ms Aug 3, 2026
ec79a88
docs(indexView): move the zebra striping rationale next to the rules
tnaum-ms Aug 3, 2026
1871071
docs(theme): correct the token-coverage note
tnaum-ms Aug 3, 2026
4265d8f
Format Docker readiness modules
tnaum-ms Aug 3, 2026
40e6ab4
Finalize Slice A Docker readiness handoff
tnaum-ms Aug 3, 2026
80b84c1
fix(theme): preserve pressed-state contrast
tnaum-ms Aug 3, 2026
8a7780c
Refine Docker permission recovery evidence
tnaum-ms Aug 3, 2026
968a591
Document pending-session host refinement
tnaum-ms Aug 3, 2026
f5769b8
Adapt Fluent colors to VS Code themes (#838)
tnaum-ms Aug 3, 2026
4f36341
Guide Docker permission session recovery
tnaum-ms Aug 3, 2026
3e6ec27
Document pending-session recovery refinement
tnaum-ms Aug 3, 2026
d2adeac
Record pending-session validation results
tnaum-ms Aug 3, 2026
54cd54f
Add post-Slice A restart guidance handoff
tnaum-ms Aug 3, 2026
0883211
Clarify WSL session restart guidance
tnaum-ms Aug 3, 2026
ec6c311
Document WSL guidance correction
tnaum-ms Aug 3, 2026
1522cda
Isolate Docker group readiness tests
tnaum-ms Aug 3, 2026
da67c3e
Update WSL manual verification handoff
tnaum-ms Aug 3, 2026
a16fba7
Clarify WSL Quick Start reconnection
tnaum-ms Aug 3, 2026
15c8ea1
Fix duplicate CI runs for release PRs
tnaum-ms Aug 3, 2026
d6254c1
Add Docker readiness contracts
tnaum-ms Aug 3, 2026
3b35c98
Record Docker readiness contract completion
tnaum-ms Aug 3, 2026
54e13d9
Complete Docker readiness classification
tnaum-ms Aug 3, 2026
ed273d4
Record Docker classifier completion
tnaum-ms Aug 3, 2026
0720fbe
Allow diagnosed reachable Docker daemons
tnaum-ms Aug 3, 2026
658c766
Record reachable daemon contract correction
tnaum-ms Aug 3, 2026
d79aa50
Complete Docker readiness orchestration
tnaum-ms Aug 3, 2026
e48b6e2
Record Docker orchestration completion
tnaum-ms Aug 3, 2026
eb3c682
Add provider-aware Docker launcher
tnaum-ms Aug 3, 2026
e6eaee9
Record Docker launcher completion
tnaum-ms Aug 3, 2026
149025d
Update Docker readiness router telemetry
tnaum-ms Aug 3, 2026
25892c3
Record Docker router telemetry completion
tnaum-ms Aug 3, 2026
aea5b04
Complete Docker readiness webview
tnaum-ms Aug 3, 2026
2f762ac
Record Docker webview completion
tnaum-ms Aug 3, 2026
8e0c048
Expand Docker readiness integration tests
tnaum-ms Aug 3, 2026
1b8a8e3
Record Docker readiness test completion
tnaum-ms Aug 3, 2026
77c4bfe
Reuse Docker readiness during provisioning
tnaum-ms Aug 3, 2026
dfdd283
Record provisioning recovery completion
tnaum-ms Aug 3, 2026
c1876d2
Add verified Docker readiness fixtures
tnaum-ms Aug 3, 2026
3d550ed
Record Docker fixture verification
tnaum-ms Aug 3, 2026
6117a83
Document Docker Quick Start recovery
tnaum-ms Aug 3, 2026
3f98c7a
Record Docker documentation completion
tnaum-ms Aug 3, 2026
478cb83
Format Docker readiness implementation
tnaum-ms Aug 3, 2026
d4d5ec1
Finalize Slice B Docker readiness plan
tnaum-ms Aug 3, 2026
de18c8e
Record definitive Slice B validation
tnaum-ms Aug 3, 2026
4e37f88
Preserve Docker provider memory during polling
tnaum-ms Aug 3, 2026
fab0950
fix(localization): improve clarity of connection and index messages
tnaum-ms Aug 3, 2026
214ae1f
Preserve provisioning errors during Docker recovery
tnaum-ms Aug 3, 2026
d6acaee
Suppress successful Docker poll transcripts
tnaum-ms Aug 3, 2026
216abf4
Suppress Docker readiness poll telemetry
tnaum-ms Aug 3, 2026
ff07f2c
Restore Docker architecture warnings
tnaum-ms Aug 3, 2026
92b12e8
Localize Docker readiness diagnostics
tnaum-ms Aug 3, 2026
ac83f08
Localize readiness timeout messages
tnaum-ms Aug 3, 2026
68b79be
Hide decorative Docker status badges
tnaum-ms Aug 3, 2026
ed7a1c6
Wire Docker installation readiness action
tnaum-ms Aug 3, 2026
c2278a2
Remove unused Docker readiness error field
tnaum-ms Aug 3, 2026
3dbf0b1
Add Atlas cluster deep link command
tnaum-ms Aug 3, 2026
3384340
Derive Docker CLI status from probes
tnaum-ms Aug 3, 2026
fa3ddc4
feat: add support for paused clusters in Atlas integration
tnaum-ms Aug 3, 2026
d42fc3b
Summarize Slice B review remediation
tnaum-ms Aug 3, 2026
1b03ff9
Finalize Docker readiness detection and error handling. (#841)
tnaum-ms Aug 3, 2026
f8b814b
Address PR review feedback on the Atlas paused-cluster change
tnaum-ms Aug 3, 2026
4455630
Format index stats on the extension host and share the Atlas availabi…
tnaum-ms Aug 3, 2026
d6db771
Improve localization and support for paused Atlas clusters (#842)
tnaum-ms Aug 3, 2026
ab899cf
Redesign Local Quick Start as a four-step wizard
tnaum-ms Aug 4, 2026
9db0bb0
Polish Local Quick Start message bars, notes and plan list
tnaum-ms Aug 4, 2026
76172e7
Document the live webview preview + Playwright check workflow
tnaum-ms Aug 4, 2026
c4e1dc3
Rework Configure onto the Fluent Table and tighten the Docker failure…
tnaum-ms Aug 4, 2026
a643558
Merge branch 'main' into release/0.10.0
tnaum-ms Aug 4, 2026
f306831
choire: version bump to `0.10.0-bug-bash-1`
tnaum-ms Aug 4, 2026
6f4c2b4
docs: add MongoDB Atlas service discovery guide
tnaum-ms Aug 4, 2026
2c69c81
Polish the Local Quick Start webview and fix the alternating Retry
tnaum-ms Aug 4, 2026
70f5caa
docs: add index management guides
tnaum-ms Aug 4, 2026
cc1dece
Redesign Local Quick Start as a wizard and fix the alternating Retry …
tnaum-ms Aug 4, 2026
1b60b85
Bump version to 0.10.0 and add MongoDB Atlas documentation (#850)
tnaum-ms Aug 4, 2026
8a00587
Merge remote-tracking branch 'origin/release/0.10.0' into feature/loc…
tnaum-ms Aug 4, 2026
1365964
feat: add experimental adaptive footer feature with toggle and measur…
tnaum-ms Aug 4, 2026
99a0332
fix(local-quickstart): hide lifecycle commands from the Command Palet…
guanzhousongmicrosoft Aug 5, 2026
9e6b979
wip - code review
tnaum-ms Aug 5, 2026
93b29a8
fix(quickstart): fire the Missing status change only on transition (H1)
tnaum-ms Aug 5, 2026
6e43ef1
fix(tls): keep a deliberate TLS bypass for public hosts (H2, L4)
tnaum-ms Aug 5, 2026
c51d1f1
fix(quickstart): palette gating, log-follow disposal and masking hard…
tnaum-ms Aug 5, 2026
3318363
docs(review): record the WP-1, WP-2 and WP-5 outcomes inline
tnaum-ms Aug 6, 2026
7ef3810
feat(quickstart): explicit port model and durable provisioning
tnaum-ms Aug 6, 2026
410c377
fix(quickstart): localize the webview lookups and service messages
tnaum-ms Aug 6, 2026
2c2d7e9
docs(review): mark WP-1 through WP-5 as landed on the status board
tnaum-ms Aug 6, 2026
b911b57
Refactor DocumentDB cluster item presentation and Quick Start service…
tnaum-ms Aug 6, 2026
81f062f
fix(quickstart): strip credentials from the Quick Start tree model (M…
tnaum-ms Aug 6, 2026
bef2128
perf(quickstart): skip suggestPort() on polled readiness calls (M6-b,…
tnaum-ms Aug 6, 2026
1a0f3ab
perf(quickstart): render the tree row from cache instead of blocking …
tnaum-ms Aug 6, 2026
ec0a77c
test(quickstart): pin the H5 credential-source contract (I2-1)
tnaum-ms Aug 6, 2026
7ae61fd
docs(quickstart): record the single-instance scope at the multi-insta…
tnaum-ms Aug 6, 2026
f473b02
feat(quickstart): ask before recreating, and take the choice as an ex…
tnaum-ms Aug 6, 2026
5e2c931
feat(quickstart): guard the wizard when an instance already exists (I…
tnaum-ms Aug 6, 2026
a684ce9
feat(quickstart): render actionable error nodes for failed Quick Star…
tnaum-ms Aug 6, 2026
bca46b6
fix(quickstart): clear the cached tree error state when the failure i…
tnaum-ms Aug 6, 2026
f507ca6
docs(review): close Iteration 2 and open Iteration 3 (PR #798)
tnaum-ms Aug 6, 2026
1edcfc1
refactor(webview): split displayInformationMessage into two dedicated…
tnaum-ms Aug 6, 2026
b8e25fc
refactor(quickstart): move the durable instance state into StorageSer…
tnaum-ms Aug 6, 2026
f970c2a
docs(review): close Iteration 3 (I3-1 shipped, no migration needed)
tnaum-ms Aug 6, 2026
b5ad073
refactor(webview): move indexView folder into collectionView/indexesTab
tnaum-ms Aug 6, 2026
e07cdd4
refactor(webview): move queryInsightsTab to collectionView level
tnaum-ms Aug 6, 2026
4a618d0
fix(quickstart): stop offering Start for a container that no longer e…
tnaum-ms Aug 6, 2026
cfd57f5
refactor: update import paths for focusableBadge styles across compon…
tnaum-ms Aug 6, 2026
2334758
refactor(quickstart): merge the data choice into one block and calm t…
tnaum-ms Aug 6, 2026
a7fe1ff
docs(review): record the post-iteration fixes and correct the N1 status
tnaum-ms Aug 6, 2026
457b913
fix(local-quickstart): send Windows and macOS users to Docker Desktop…
guanzhousongmicrosoft Aug 5, 2026
4892ca2
fix(local-quickstart): stop the success step implying a connection st…
guanzhousongmicrosoft Aug 5, 2026
aae1d6e
fix(local-quickstart): detect DocumentDB Local when a localhost conne…
guanzhousongmicrosoft Aug 5, 2026
6083192
chore(l10n): rebuild the bundle for the Quick Start bug-bash fixes
guanzhousongmicrosoft Aug 5, 2026
08a5318
test(local-quickstart): pin the manifest-level bug-bash fixes in Jest
guanzhousongmicrosoft Aug 5, 2026
f8faa3a
fix(local-quickstart): make Open Connection actually open the connection
guanzhousongmicrosoft Aug 5, 2026
c9be7f0
Merge branch 'feature/local-quickstart' into dev/guanzhousong/quickst…
tnaum-ms Aug 6, 2026
1a82a20
fix(local-quickstart): reconcile the bug-bash tests with the reviewed…
tnaum-ms Aug 6, 2026
b8d4569
fix(local-quickstart): drop em dashes from the new user-facing strings
tnaum-ms Aug 6, 2026
2803a38
Fix the Local Quick Start bug-bash issues (#851, #852, #855, #856, #8…
tnaum-ms Aug 6, 2026
2c92d29
fix(local-quickstart): remove optional connection string instructions…
tnaum-ms Aug 6, 2026
0312533
Merge remote-tracking branch 'origin/release/0.10.0' into feature/loc…
tnaum-ms Aug 6, 2026
6cd7b83
DocumentDB Local with Quick Start helpers (#798)
tnaum-ms Aug 6, 2026
00ff6d2
chore: version bump for bug bash 2
tnaum-ms Aug 6, 2026
6cc5260
Fix Atlas collection import and export resolution
tnaum-ms Aug 6, 2026
db4f645
Merge remote-tracking branch 'origin/release/0.10.0' into dev/tnaum/i…
tnaum-ms Aug 7, 2026
39f06e2
Fix Quick Start collection tree resolution
tnaum-ms Aug 7, 2026
6c7ff1a
Improve Quick Start credential recovery guidance
tnaum-ms Aug 7, 2026
0ae7ce1
Localize Collection View output action
tnaum-ms Aug 7, 2026
24da905
Report Collection View resolution failures
tnaum-ms Aug 7, 2026
65320b5
Add tree-cluster-architecture skill documentation for cluster nodes a…
tnaum-ms Aug 7, 2026
3243b2e
Fix Collection View import and export resolution (#871)
tnaum-ms Aug 7, 2026
c8e3510
Rename indexView class to indexesTab for consistency in styling
tnaum-ms Aug 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ For Discovery View, both `treeId` and `clusterId` are sanitized (all `/` replace

See `src/tree/models/BaseClusterModel.ts` and `docs/analysis/08-cluster-model-simplification-plan.md` for details.

- [skills/tree-cluster-architecture/SKILL.md](skills/tree-cluster-architecture/SKILL.md) - Required patterns for cluster tree items, dual identity, provider lookup, and regression tests
- [skills/telemetry-instrumentation/SKILL.md](skills/telemetry-instrumentation/SKILL.md) - Telemetry instrumentation patterns

## Terminology
Expand Down Expand Up @@ -226,4 +227,5 @@ For detailed patterns, see:

- [instructions/typescript.instructions.md](instructions/typescript.instructions.md) - TypeScript patterns and anti-patterns
- [instructions/wizard.instructions.md](instructions/wizard.instructions.md) - AzureWizard implementation details
- [skills/tree-cluster-architecture/SKILL.md](skills/tree-cluster-architecture/SKILL.md) - Cluster tree items, identity, lookup, and test contracts
- [skills/telemetry-instrumentation/SKILL.md](skills/telemetry-instrumentation/SKILL.md) - Telemetry instrumentation patterns
198 changes: 198 additions & 0 deletions .github/skills/tree-cluster-architecture/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
---
name: tree-cluster-architecture
description: Patterns for cluster nodes and tree data providers in vscode-documentdb. Use when adding or changing a cluster tree item, discovery provider, Connections/Azure/Discovery tree hierarchy, tree/list mode, cluster identity, treeId/clusterId lookup, Collection View import/export resolution, reveal behavior, credentials, shell actions, or copy connection string support.
---

# Tree Cluster Architecture

Use this skill whenever a tree node represents a database cluster or a hierarchy change can move a cluster node.

## Non-Negotiable Rule

Every **browsable cluster node** must extend `ClusterItemBase<TModel>` from `src/tree/documentdb/ClusterItemBase.ts`.

Do not implement a cluster as a plain `TreeElement` or `createGenericElement*` node. Hand-rolled cluster nodes silently lose shared behavior and force each feature to reimplement it:

- database and collection expansion
- credential/client cache integration
- retry and open-shell recovery nodes
- the canonical `treeItem_documentdbcluster` context tag
- standard command/menu eligibility
- `getCredentials()` used by Copy Connection String and Save/Add to Connections flows
- consistent connection progress, cancellation, and error handling

Generic tree elements are appropriate for structural parents, placeholders, actions, and **non-browsable state rows**. When a state becomes browsable, render a `ClusterItemBase` subclass.

## Implementing a Cluster Item

1. Define a model extending `BaseClusterModel`.
2. Construct a `TreeCluster<TModel>` containing both stable identity and tree position.
3. Extend `ClusterItemBase<TModel>` and call `super(cluster)`.
4. Implement:
- `getCredentials(): Promise<EphemeralClusterCredentials | undefined>`
- `authenticateAndConnect(): Promise<ClustersClient | null>`
5. Optionally override:
- `beforeCachedClientConnect()` for tunnels or reachability preparation
- presentation through `descriptionOverride`, `tooltipOverride`, `iconPath`, or a justified `getTreeItem()` override
6. Preserve the base context value. Add feature tags with `createContextValue([this.contextValue, ...extraTags])`; never replace it with a string that omits `treeItem_documentdbcluster`.
7. Use `this.cluster.clusterId` for `CredentialCache` and `ClustersClient`, never `this.id`.

Representative subclasses:

- Stored connection: `src/tree/connections-view/DocumentDBClusterItem.ts`
- Kubernetes discovery: `src/plugins/service-kubernetes/discovery-tree/documentdb/KubernetesResourceItem.ts`
- Atlas discovery: `src/plugins/service-atlas-mongodb/discovery-tree/AtlasClusterItem.ts`
- Managed synthetic cluster: `QuickStartClusterItem` in `src/tree/connections-view/LocalQuickStart/LocalQuickStartItem.ts`

## Dual Identity Contract

A cluster has two IDs with different ownership:

| ID | Meaning | Stability | Valid uses |
| ----------- | ---------------------------------- | ---------------------------------------------- | -------------------------------------------------------------------------------- |
| `clusterId` | Stable resource/cache identity | Must survive tree moves and layout changes | credentials, clients, sessions, serialized webview context, reverse lookup input |
| `treeId` | Current hierarchical tree position | May change with folders, parents, or view mode | `TreeElement.id`, child IDs, reveal/navigation |

Rules:

- `clusterId` must not contain `/`.
- `treeId` must represent the node's actual rendered path.
- `viewId` must identify the branch provider that owns the rendered node.
- Child IDs derive from `treeId`, using helpers such as `buildDatabaseTreeId()` and `buildCollectionTreeId()`.
- Never cache by `treeId` or `this.id`.
- Never assume a stable ID is also a tree path unless the provider explicitly guarantees `clusterId === treeId`.
- Never change tree construction without checking reverse lookup from `clusterId`.

## Design Rendering and Lookup Together

When adding a cluster hierarchy or a tree/list mode, specify these four functions before coding:

1. **Stable identity:** How is `clusterId` built and made collision-safe?
2. **Rendering:** How is `treeId` built in every layout?
3. **Ownership:** Which branch provider receives `viewId` and `clusterId` later?
4. **Reverse lookup:** How does that provider recover the current `treeId` and then the collection node?

The round trip must hold:

```text
rendered cluster
-> { clusterId, treeId, viewId }
-> open Collection View with { clusterId, viewId }
-> owning provider resolves current treeId
-> provider resolves <treeId>/<database>/<collection>
```

### Connections View

Persisted connections use `clusterId = storageId`. Reconstruct the current folder path from storage with `buildFullTreePath()`; do not persist or guess an old `treeId`.

Synthetic nodes are not in connection storage. Their feature must own:

- an exact, side-effect-free ownership predicate
- tree path builders used by rendering and reveal code
- stable-ID-to-tree-ID resolution

The Connections provider may dispatch to that feature before falling back to persisted storage. Classify ownership **before invoking feature code**, so a feature resolver failure cannot break ordinary stored connections. See:

- `src/tree/connections-view/resolveConnectionsClusterTreeId.ts`
- `src/tree/connections-view/LocalQuickStart/quickStartTreeIdentity.ts`

Do not put feature-specific ID prefixes or synthetic paths into `buildFullTreePath()`.

### Discovery View

`clusterId` is provider-prefixed. The current `DiscoveryBranchDataProvider` removes that prefix and finds a cached tree node by its final suffix. Therefore every layout for that provider must end the cluster `treeId` with the same stable unprefixed suffix.

- Preserve visible hierarchy in preceding path segments.
- Use one helper to build the stable suffix for both `clusterId` and every tree layout.
- Make the suffix collision-safe within the provider.
- Test tree and list modes separately.
- Do not rely on cluster display names alone when uniqueness is scoped by project, namespace, context, or source.

This suffix lookup is a current compatibility contract, not an ideal general identity mechanism. Issue #869 tracks exact stable-identity lookup. Until that changes, new Discovery providers must satisfy the suffix contract.

### Azure Resources View

Direct lookup is valid only where the provider intentionally guarantees `clusterId === treeId`. Document that invariant and test it.

## Provider Responsibilities

Branch providers must implement both when their clusters can open Collection View:

- `findClusterNodeByClusterId(clusterId)`
- `findCollectionByClusterId(clusterId, databaseName, collectionName)`

Prefer one shared cluster-ID-to-tree-ID resolver so cluster and collection lookup cannot drift. Once the cluster node is known, use scoped child lookup to avoid expanding unrelated branches.

Do not silently fall back between providers or storage zones unless identity ownership is explicit. An owned but currently unavailable synthetic cluster should return `undefined`, not masquerade as a persisted connection.

## Required Tests for New Cluster Nodes or Layouts

Add focused tests before considering the feature complete.

### 1. Base cluster behavior

- The browsable item is a `ClusterItemBase` subclass.
- Its context value retains `treeItem_documentdbcluster` plus feature tags.
- `getCredentials()` is implemented for commands that need connection material.
- Expansion returns database nodes and base failure paths return retry/open-shell nodes as applicable.

Use `src/tree/documentdb/ClusterItemBase.test.ts` as the base-behavior reference.

### 2. Identity invariants

- `clusterId` is stable and slash-free.
- Moving folders or switching layout changes only `treeId`, not `clusterId`.
- IDs remain unique where display names can repeat.
- Cache operations use `clusterId`, not `treeId`.

Use `src/tree/connections-view/models/ConnectionClusterModel.test.ts` as a reference.

### 3. Render-to-lookup round trip (mandatory)

Construct the cluster through the **real parent/root item**, not only as a model fixture, then assert:

```typescript
expect(rendered.cluster.clusterId).toBe(expectedStableId);
expect(rendered.cluster.treeId).toBe(expectedTreePath);
expect(await provider.findClusterNodeByClusterId(rendered.cluster.clusterId)).toBe(rendered);
expect(await provider.findCollectionByClusterId(rendered.cluster.clusterId, databaseName, collectionName)).toBe(
expectedCollection,
);
```

This test must exist for every materially different layout: root/folder, tree/list, or other synthetic hierarchy. It would have caught both the Atlas suffix mismatch and the Quick Start storage-path mismatch.

### 4. Ownership isolation for synthetic nodes

- Exact owned ID uses the feature resolver.
- Ordinary IDs never invoke the feature resolver.
- Owned-but-unavailable IDs do not fall through to persisted lookup.
- A feature resolver failure cannot affect ordinary persisted lookup.

Use `src/tree/connections-view/resolveConnectionsClusterTreeId.test.ts` as a reference.

### 5. Command compatibility

At minimum, verify the context contract and `getCredentials()` path needed by:

- Copy Connection String
- Open Shell
- Save/Add to Connections when enabled

If a command is intentionally unavailable, gate it explicitly with context values and document why; do not omit base behavior accidentally.

## Review Checklist

Before approving a cluster tree change, answer yes to all:

- [ ] Browsable cluster extends `ClusterItemBase`.
- [ ] Base cluster context tag is preserved.
- [ ] `clusterId`, `treeId`, and `viewId` have documented owners.
- [ ] Credentials and clients use `clusterId` only.
- [ ] Every rendered layout has a reverse lookup strategy.
- [ ] Cluster and collection lookup share one resolver.
- [ ] Synthetic ownership is exact and isolated from stored lookup.
- [ ] IDs are collision-safe beyond display names.
- [ ] A real render-to-lookup round-trip test covers every layout.
- [ ] Standard cluster commands work or are explicitly gated off.
9 changes: 2 additions & 7 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: CI

# This workflow handles the following scenarios:
#
# 1. Push to `main` or `release/**`:
# 1. Push to `main`:
# - Runs all jobs: code checks, tests, packaging, and caches build sizes
# for PR comparisons
#
Expand All @@ -25,7 +25,6 @@ on:
push:
branches:
- main
- release/**

pull_request:
branches:
Expand All @@ -34,11 +33,7 @@ on:
- feature/**

concurrency:
# Use head_ref for PRs, ref_name for pushes. When a forward-merge PR
# (release/X.Y → main) is open, both the push to release/X.Y and the
# PR trigger resolve to the same group (release/X.Y) so they cancel
# each other instead of running CI twice.
group: ${{ github.head_ref || github.ref_name }}
group: '${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}'
cancel-in-progress: true

jobs:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ Connect to any database that speaks the MongoDB API wire protocol.
- **Azure Service Discovery**: Browse and connect to Azure DocumentDB, Azure Cosmos DB for MongoDB (RU), and DocumentDB on Azure VMs directly from the sidebar
- **MongoDB Atlas**: Connect using your Atlas connection string
- **Entra ID authentication**: Multi-account, multi-tenant support for Azure-hosted databases
- **Local instances and emulators**: Connect to DocumentDB Local, Azure Cosmos DB Emulator, or any local MongoDB API instance
- **Local instances and emulators**: [Create and manage DocumentDB Local with Docker Quick Start](docs/user-manual/local-quick-start.md), or connect to Azure Cosmos DB Emulator and other local MongoDB API instances
- **Folder organization**: Group your connections into folders and subfolders

## Browse and Manage Data
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# PR #653: Local DocumentDB Quick Start — Design Decisions

**Status:** Open
**Branch:** `guanzhou/local-quickstart-design`
**Base:** `main`
**Date:** 2026-06-15

## Why this note

This PR adds a design doc only (no shipping code). Before implementation we
benchmarked the design against a proven, shipping reference — the
**PostgreSQL extension's "Local Docker Server"** flow (`ms-ossdata.vscode-pgsql`,
read at the source level). This note records the **non-obvious decisions**:
where we deliberately diverge from that reference and why, where we match it,
and the deviations that override shared/base behavior inside our own codebase.
It exists so human reviewers and review agents don't have to re-derive the
rationale — or mistake a deliberate deviation for an oversight.

Full design: [`../../local-quickstart/local-quickstart-v2.md`](../../local-quickstart/local-quickstart-v2.md)
(iteration 2, supersedes iteration 1). Review-resolution map is in v2 §18.

## Reference: PostgreSQL "Local Docker Server"

A 3-page webview (Home → Prereqs → Create form) that checks Docker (CLI +
daemon) via VS Code tasks, runs a **required-field** form, creates a container
through `@microsoft/vscode-container-client`, passes credentials via a temp
`--env-file`, waits for `pg_isready` **inside** the container, then saves +
reveals the connection and auto-closes the webview. It is **create-and-connect
only** — no persistent volume, no lifecycle (stop/start/delete), no
labels/adopt. The "Easy Management" welcome copy is marketing; no such
commands exist in its source.

## Deliberate deviations from the reference (non-obvious — keep)

| We do | PG does | Why we deviate |
| ----------------------------------------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------- |
| **Zero required fields** (generate creds/names) | 3 required fields | First-run friction is the thing to remove; PG even shipped a "password required before start" bug. |
| **Persistent named volume** | No volume (data lost on `rm`) | A local dev DB that silently loses data on container removal is a footgun. |
| **Wire-protocol readiness, 60 s** | `pg_isready` in-container, 5 s | DocumentDB has no in-image readiness CLI we can rely on; PG's 5 s is fragile on a cold `initdb`. |
| **Full lifecycle (7 states; stop/start/delete/logs)** | None (create-only) | The managed-instance tree is our core value; PG only _markets_ lifecycle. |
| **tRPC + FluentUI** | mssql-fork custom RPC | Matches this repo's webview stack (CollectionView/DocumentView); we are not a fork. |
| **Stricter telemetry** (resolved semver only) | sends registry/image/tag | Avoid leaking image/registry identifiers. |
| **Docker labels + adopt** | name-only refuse | Lets us recognize and re-attach containers we created. |

## Changes folded back into v2 from the PG study

- **v1.0 create-progress = terminal task + button spinner + auto-close** (the
in-webview multi-step progress card is descoped to v1.1). PG proves the
terminal-task model ships without streaming `docker pull` % into a webview.
- **Adopt `@microsoft/vscode-container-client`** (the runtime layer PG uses;
ships both `DockerClient` and `PodmanClient`) instead of a hand-rolled
abstraction → makes "OCI/podman later" a driver swap, not a rewrite.
- **Port rule:** only auto-fallback the _default_ port; never silently relocate
a port the user typed in Advanced (match PG's intent-respecting behavior).
- **Read the real bound host port from `docker inspect`** before composing the
saved connection string (don't trust the requested port; matters with fallback).
- **Distinguish failed-to-create vs failed-to-start** in error copy (cheap, via inspect).
- **Pre-create duplicate check on both connection name and container name.**

## Deviations that override shared/base behavior (flag for reviewers)

These are the easy-to-miss ones — we extend or override shared infrastructure
rather than add isolated code:

1. **TLS exception folded into the shared new-connection wizard** (gated to
localhost / private hosts) instead of a separate emulator wizard. This
overrides the shared wizard with a conditional step, and the old
`New Local Connection...` entry point is removed.
2. **Canonical port `10260` overrides the shared wizard's hardcoded `10255`**
(`PromptConnectionTypeStep.ts`, `PromptPortStep.ts`). This is a pre-ship fix
that changes existing manual-connection defaults — not Quick-Start-local.
3. **Legacy migration mutates the shared `ConnectionType.Emulators` storage
zone** (moves entries into a `Local Connections (Legacy)` folder; the old
zone is kept read-only for one release before removal as a rollback path).

## Status

Design only; no implementation in this PR. Open questions are tracked in
v2 §17; the full reviewer-comment → resolution map is in v2 §18.
Loading
Loading