Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
175 commits
Select commit Hold shift + click to select a range
fb130a2
fix(tui): force consistent terminal colors and wire splash screen tra…
joshsmithxrm Feb 8, 2026
8109351
chore: suppress CS0618 warning for intentional ROPC usage
joshsmithxrm Feb 8, 2026
dadf2c1
chore: remove all ADR references and docs/adr directory
joshsmithxrm Feb 8, 2026
1d9ed05
fix(tui): bind tab environment at creation and sync status bar on switch
joshsmithxrm Feb 8, 2026
dd97bd6
test(tui): add unit tests for multi-environment tab fixes
joshsmithxrm Feb 8, 2026
e074dba
fix(tui): remove MenuBar mouse click debounce that worsened flicker
joshsmithxrm Feb 8, 2026
a1e369f
fix(tui): show tab bar and drive shortcuts dialog from HotkeyRegistry
joshsmithxrm Feb 8, 2026
2119adc
feat(auth): add EnvironmentConfig models and EnvironmentConfigStore
joshsmithxrm Feb 8, 2026
dff33d7
feat(cli): add IEnvironmentConfigService with implementation and comp…
joshsmithxrm Feb 8, 2026
5f83135
fix(tui): wire environment switch to open tabs, profile switch to clo…
joshsmithxrm Feb 8, 2026
902db12
feat(tui): wire TUI theme system to EnvironmentConfigService for user…
joshsmithxrm Feb 8, 2026
c58d64f
feat(cli): add env config/type commands and wire EnvironmentConfigSer…
joshsmithxrm Feb 8, 2026
66aa972
feat(tui): add EnvironmentConfigDialog for configuring environment la…
joshsmithxrm Feb 8, 2026
a71ef88
fix(tui): fix tab highlight color regression and config dialog defaults
joshsmithxrm Feb 8, 2026
14eb149
docs: add environment config implementation plan
joshsmithxrm Feb 8, 2026
fe066b7
fix(tui): use config service for tab bar environment labels
joshsmithxrm Feb 8, 2026
b5a3d79
fix(tui): remove incorrect CRM region-based environment type detection
joshsmithxrm Feb 8, 2026
a10e3d4
docs: add XML documentation to IEnvironmentConfigService interface
joshsmithxrm Feb 8, 2026
5f75da4
fix(tui): final polish pass before new panels phase
joshsmithxrm Feb 8, 2026
3f75f48
feat(tui): improve environment selector UX with resolved labels, prev…
joshsmithxrm Feb 8, 2026
f06e501
feat(tui): add Certificate Store, Username/Password auth and Rename b…
joshsmithxrm Feb 8, 2026
8b48128
fix(tui): override Terminal.Gui global color defaults on startup
joshsmithxrm Feb 8, 2026
4ada8ee
fix(tui): move palette override after Init and set Top.ColorScheme
joshsmithxrm Feb 8, 2026
592f29a
fix(tui): don't force SQL tab open when switching environments from s…
joshsmithxrm Feb 8, 2026
2ff3061
fix(tui): prevent menu flicker via PpdsMenuBar subclass
joshsmithxrm Feb 8, 2026
f137704
fix(tui): change splash logo color to BrightCyan and add copy-paste d…
joshsmithxrm Feb 8, 2026
a5a6745
feat(tui): smart copy/paste with column-scoped selection and headers
joshsmithxrm Feb 8, 2026
f1160d6
docs: add query engine v2 spec and implementation plan
joshsmithxrm Feb 8, 2026
36853d8
fix(tui): dynamic copy hints in status bar based on selection state
joshsmithxrm Feb 8, 2026
9ccdd26
feat(query): add ISqlStatement hierarchy and expression AST types
joshsmithxrm Feb 8, 2026
7485554
feat(query): add expression evaluator for client-side computation
joshsmithxrm Feb 8, 2026
60968f6
feat(query): add execution plan infrastructure types
joshsmithxrm Feb 8, 2026
eb3424a
feat(query): add FetchXmlScanNode and ProjectNode plan operators
joshsmithxrm Feb 8, 2026
2c27af4
feat(query): integrate execution plan layer into query pipeline
joshsmithxrm Feb 8, 2026
6a9df87
fix(query): address Phase 0 code review findings
joshsmithxrm Feb 8, 2026
81385e6
feat(query): add HAVING clause and COUNT(*) optimization
joshsmithxrm Feb 8, 2026
fd81c31
feat(query): add CASE/WHEN/THEN/ELSE and IIF expression support
joshsmithxrm Feb 8, 2026
ecd065d
feat(query): add computed column expressions in SELECT
joshsmithxrm Feb 8, 2026
e565dc2
feat(query): support expressions in WHERE conditions
joshsmithxrm Feb 8, 2026
eaa3134
fix(tui): force redraw after OSC 4 palette to fix first-frame colors
joshsmithxrm Feb 8, 2026
b36e8ec
fix(query): re-throw OperationCanceledException in CountOptimizedNode
joshsmithxrm Feb 8, 2026
a458ecf
feat(query): add EXISTS/NOT EXISTS subquery support
joshsmithxrm Feb 8, 2026
7eaea16
feat(query): add IN (SELECT ...) subquery support
joshsmithxrm Feb 8, 2026
a4ab326
feat(query): add UNION and UNION ALL support
joshsmithxrm Feb 8, 2026
9bbdded
feat(query): add date functions with FetchXML GROUP BY pushdown
joshsmithxrm Feb 8, 2026
5867298
feat(query): add TDS Endpoint plan routing
joshsmithxrm Feb 8, 2026
df55ca4
fix(query): add CAST expression evaluation and fix STUFF test
joshsmithxrm Feb 8, 2026
ff38d1e
fix(query): address code review findings for Phases 2/3/3.5
joshsmithxrm Feb 8, 2026
dc14a7f
docs: add SQL intellisense design plan
joshsmithxrm Feb 8, 2026
0bc5829
feat(query): add parallel aggregate partitioning for 50K limit
joshsmithxrm Feb 8, 2026
29a96d4
feat(query): add prefetch scan node for page-ahead buffering
joshsmithxrm Feb 8, 2026
7ef1f7a
feat(query): add EXPLAIN command for query plan inspection
joshsmithxrm Feb 8, 2026
176de12
feat(query): add DML safety guard with strict protections
joshsmithxrm Feb 8, 2026
cc02c30
feat(query): add metadata schema for querying entity definitions
joshsmithxrm Feb 8, 2026
d2f501b
feat(query): add MetadataQueryExecutor implementation and tests
joshsmithxrm Feb 8, 2026
1f9e315
feat(query): add Phase 4/5/6 parallel execution, EXPLAIN, DML safety,…
joshsmithxrm Feb 8, 2026
2ecdebe
feat(query): add INSERT/UPDATE/DELETE parsing and DML execution
joshsmithxrm Feb 8, 2026
f0acc5e
feat(query): add window functions (ROW_NUMBER, RANK, DENSE_RANK)
joshsmithxrm Feb 8, 2026
e06d8d7
feat(query): add DECLARE/SET variables and TUI progressive streaming
joshsmithxrm Feb 8, 2026
0e41542
feat(query): add IF/ELSE flow control for multi-statement scripts
joshsmithxrm Feb 8, 2026
019a34d
fix(query): fix MetadataScanNode null executor, ParallelPartitionNode…
joshsmithxrm Feb 8, 2026
157babc
feat(query): add QueryExecutionException with structured error codes
joshsmithxrm Feb 8, 2026
3d90707
fix(query): wire DI dependencies, fix metadata prefix, and add plan o…
joshsmithxrm Feb 8, 2026
3386c79
fix(query): resolve FetchXML top+page attribute conflict
joshsmithxrm Feb 8, 2026
68419c0
fix(query): fix DML row cap, INSERT SELECT ordinal mapping, and progr…
joshsmithxrm Feb 8, 2026
7a72876
fix(query): dispose SemaphoreSlim, add progress reporting, and wrap a…
joshsmithxrm Feb 8, 2026
4989d86
fix(query): add memory bounds to ClientWindowNode and structured erro…
joshsmithxrm Feb 8, 2026
6b7df9b
feat(query): add pool and parallelism metadata to EXPLAIN output
joshsmithxrm Feb 8, 2026
d2b78c7
test(query): add tests for query engine v2 review fixes
joshsmithxrm Feb 8, 2026
ff68567
docs: add query engine v2 review fixes plan
joshsmithxrm Feb 8, 2026
983d916
fix(auth): token cache scope mismatch in device code and factory mapp…
joshsmithxrm Feb 8, 2026
0544be4
fix(query): make MetadataScanNode.MetadataExecutor nullable
joshsmithxrm Feb 8, 2026
5fe138d
fix(query): create ExpressionEvaluator per execution to fix thread sa…
joshsmithxrm Feb 8, 2026
14eaa00
fix(query): add DML safety guard to streaming execution path
joshsmithxrm Feb 8, 2026
ebe3655
fix(query): narrow bare catch to XmlException in FetchXmlScanNode
joshsmithxrm Feb 8, 2026
a83f0f1
test(query): add ExplainCommand CLI integration tests
joshsmithxrm Feb 8, 2026
3ae203c
test(query): add error code tests for ExpressionEvaluator exceptions
joshsmithxrm Feb 8, 2026
7c5ada7
test(query): add streaming virtual column expansion test
joshsmithxrm Feb 8, 2026
e316749
feat(auth): add explicit AuthMethod property to ProfileCreateRequest
joshsmithxrm Feb 8, 2026
7112473
feat(auth): DetermineAuthMethod prefers explicit AuthMethod over infe…
joshsmithxrm Feb 8, 2026
d3d603b
feat(auth): pass beforeInteractiveAuth through profile creation flow
joshsmithxrm Feb 8, 2026
190a785
fix(auth): wire callbacks and explicit AuthMethod through TUI profile…
joshsmithxrm Feb 8, 2026
cd95dea
docs: add auth bugfix implementation plan
joshsmithxrm Feb 8, 2026
bbd586d
docs: add query engine v2 followup and vscode extension MVP plans
joshsmithxrm Feb 8, 2026
c352e03
fix(auth): pass session to ProfileCreationDialog and fix silent task …
joshsmithxrm Feb 8, 2026
6ea9c05
diag(auth): add TuiDebugLog tracing to profile creation auth flow
joshsmithxrm Feb 8, 2026
5c14ec7
fix(auth): use Task.Run to prevent UI thread deadlock in profile crea…
joshsmithxrm Feb 8, 2026
f2faafe
fix(auth): pass session to EnvironmentSelectorDialog after profile cr…
joshsmithxrm Feb 8, 2026
bf982d3
fix(tui): pass session to ExportDialog and ClearAllProfilesDialog
joshsmithxrm Feb 9, 2026
ab10ac8
fix(auth): activate new profile immediately and clean up diagnostics
joshsmithxrm Feb 9, 2026
afe41ab
fix(tui): use white text on blue backgrounds, black text on green
joshsmithxrm Feb 9, 2026
b7617d1
feat(tui): add SQL syntax highlighting to query editor (Phase 1)
joshsmithxrm Feb 9, 2026
31cc29f
feat(dataverse): add metadata caching layer for SQL IntelliSense (Pha…
joshsmithxrm Feb 9, 2026
b51aa0d
feat(intellisense): add autocomplete engine with AST-based context de…
joshsmithxrm Feb 9, 2026
7c99438
docs: add VS Code Extension MVP plan with full TUI parity
joshsmithxrm Feb 9, 2026
0fd655d
feat(tui): add autocomplete popup UI with trigger detection (Phase 4)
joshsmithxrm Feb 9, 2026
60689c0
docs: add accurate COUNT(*) via partitioned aggregates plan
joshsmithxrm Feb 9, 2026
ab31634
feat(intellisense): add SQL validation with error highlighting (Phase 5)
joshsmithxrm Feb 9, 2026
7086da7
feat(query): implement GetTotalRecordCountAsync in QueryExecutor
joshsmithxrm Feb 9, 2026
cff737c
feat(tui): add resizable query editor with keyboard and mouse drag (P…
joshsmithxrm Feb 9, 2026
372f99f
feat(query): add GetMinMaxCreatedOnAsync for aggregate partitioning
joshsmithxrm Feb 9, 2026
163ed79
docs: add implementation plan for SQL IntelliSense code review fixes
joshsmithxrm Feb 9, 2026
3291f0c
feat(query): route bare COUNT(*) through aggregate path for accuracy
joshsmithxrm Feb 9, 2026
e25eee4
feat(query): wire SqlQueryService to provide partitioning metadata
joshsmithxrm Feb 9, 2026
08ef886
test(query): update tests for accurate COUNT(*) via partitioned aggre…
joshsmithxrm Feb 9, 2026
941bdb7
fix: address all code review issues for SQL IntelliSense
joshsmithxrm Feb 9, 2026
b0b0449
fix(query): fix plan doc task count and add dry-run test
joshsmithxrm Feb 9, 2026
95ff088
refactor(query): remove dead CountOptimizedNode code
joshsmithxrm Feb 9, 2026
51c0ccb
feat(query): enable prefetch for TUI query execution
joshsmithxrm Feb 9, 2026
07c63c8
docs: add missing XML doc comments to fix CS1591 warnings
joshsmithxrm Feb 9, 2026
17aefae
docs: add query engine v3 design plan
joshsmithxrm Feb 9, 2026
a370b23
fix(query): add script DML detection and flatten AggregateException
joshsmithxrm Feb 9, 2026
c982141
fix(intellisense): make SqlValidator sealed, async, and add WHERE col…
joshsmithxrm Feb 9, 2026
47b3bdb
fix(tui): fix splitter drag, add Dispose, escape filter brackets
joshsmithxrm Feb 9, 2026
3c4f3b0
fix(tui): cache color schemes, fix hotkey alt check, broaden exceptio…
joshsmithxrm Feb 9, 2026
d410a61
fix(auth): add disposal guards, empty-string-clears, typed catches, u…
joshsmithxrm Feb 9, 2026
be5d9ff
fix(tui): pre-load environment config in InitializeAsync
joshsmithxrm Feb 9, 2026
5ac9216
docs: add code review fixes implementation plan
joshsmithxrm Feb 9, 2026
b30da76
fix(intellisense): resolve language service eagerly at screen init
joshsmithxrm Feb 9, 2026
886253f
fix(query): use sorted top-1 queries for MIN/MAX createdon metadata
joshsmithxrm Feb 9, 2026
5080334
fix(tui): change query editor resize keybinding to Alt+Up/Down
joshsmithxrm Feb 9, 2026
971ea64
debug(intellisense): add comprehensive tracing for IntelliSense pipeline
joshsmithxrm Feb 9, 2026
9e8bf7c
fix(intellisense): render autocomplete popup in custom Redraw override
joshsmithxrm Feb 9, 2026
69ef442
chore(intellisense): remove per-keystroke debug logging, keep lifecyc…
joshsmithxrm Feb 9, 2026
714b9aa
feat(query): add AdaptiveAggregateScanNode with recursive retry on 50…
joshsmithxrm Feb 9, 2026
e392cb2
fix(tui): use BrightBlue for SQL keywords to improve readability
joshsmithxrm Feb 9, 2026
915cb84
refactor(query): wire AdaptiveAggregateScanNode into partitioned aggr…
joshsmithxrm Feb 9, 2026
30680ce
refactor(query): remove aggregate-limit wrapping from ParallelPartiti…
joshsmithxrm Feb 9, 2026
7b15c61
test(query): add AdaptiveAggregateScanNode unit and execution tests
joshsmithxrm Feb 9, 2026
fef277f
fix(test): update planner tests for AdaptiveAggregateScanNode partiti…
joshsmithxrm Feb 9, 2026
1805c52
fix(query): align merge node alias with transpiler for unaliased aggr…
joshsmithxrm Feb 9, 2026
ed56e62
fix(tui): align autocomplete popup with word start and remove kind icons
joshsmithxrm Feb 9, 2026
3ad911d
fix(query): skip *name column expansion for aggregate results
joshsmithxrm Feb 9, 2026
9a810ca
fix(tui): add elapsed time to query spinner and fix cursor visibility
joshsmithxrm Feb 9, 2026
eb0419e
fix(tui): use consistent DarkGray background for editor cursor
joshsmithxrm Feb 9, 2026
082e1fa
fix(tui): use BrightCyan for SQL keywords and Gray for cursor background
joshsmithxrm Feb 9, 2026
0588a3a
fix(tui): clear stale diagnostics when revalidation starts
joshsmithxrm Feb 9, 2026
9071935
fix(tui): high-contrast editor cursor and environment-colored tabs
joshsmithxrm Feb 9, 2026
42f9f20
fix: remove dead code identified during code review
joshsmithxrm Feb 9, 2026
139c307
fix(query): address critical thread safety, exception handling, and i…
joshsmithxrm Feb 9, 2026
2b7f1e1
fix(tui): fix timer leak, event leak, and splitter drag issues
joshsmithxrm Feb 9, 2026
a86d28c
fix: address IntelliSense, auth, and environment detection issues
joshsmithxrm Feb 9, 2026
3890730
fix: color revert support and escaped string literal cursor detection
joshsmithxrm Feb 9, 2026
c0bfabe
fix: architecture cleanup — PpdsException wrapping, dedup, dispose, e…
joshsmithxrm Feb 9, 2026
d843e2b
docs: fix CHANGELOG formatting and add [Unreleased] entries
joshsmithxrm Feb 9, 2026
dbeeaf9
chore: add UsernamePasswordCredentialProvider test and sync .gitignore
joshsmithxrm Feb 9, 2026
54459f4
docs: add Auth DI registration implementation plan
joshsmithxrm Feb 9, 2026
ce12cdb
chore(auth): add Microsoft.Extensions.DependencyInjection.Abstraction…
joshsmithxrm Feb 9, 2026
baccd2d
feat(auth): add AddAuthServices DI registration for ProfileStore, Env…
joshsmithxrm Feb 9, 2026
6c5bab5
refactor(cli): use AddAuthServices in AddCliApplicationServices, add …
joshsmithxrm Feb 9, 2026
e95f82e
refactor(cli): add CreateLocalProvider helper for non-connected commands
joshsmithxrm Feb 9, 2026
43a81dc
refactor(auth): migrate AuthCommandGroup to resolve stores from DI
joshsmithxrm Feb 9, 2026
526b09e
refactor(cli): migrate EnvCommandGroup to resolve stores from DI
joshsmithxrm Feb 9, 2026
b3eb3f8
refactor(rpc): migrate RpcMethodHandler to resolve stores from DI
joshsmithxrm Feb 9, 2026
a70b65a
refactor(cli): migrate DaemonConnectionPoolManager default profile lo…
joshsmithxrm Feb 9, 2026
b626baa
refactor(mcp): register auth services in Host DI and inject into McpT…
joshsmithxrm Feb 9, 2026
87e1985
refactor(mcp): inject ProfileStore into McpConnectionPoolManager
joshsmithxrm Feb 9, 2026
b599e78
refactor(tui): inject EnvironmentConfigStore into InteractiveSession …
joshsmithxrm Feb 9, 2026
f73a9b5
test: update test infrastructure for auth DI registration
joshsmithxrm Feb 9, 2026
e84117a
fix(tui): improve tab UX — contrast, escape behavior, and dispose guard
joshsmithxrm Feb 9, 2026
60f563f
test: fix CI failures for TUI color and escape behavior changes
joshsmithxrm Feb 9, 2026
ad76f33
fix: resolve null-dereference CodeQL alerts in test files
joshsmithxrm Feb 9, 2026
fb0a497
fix: remove redundant SqlSelectStatement casts in QueryPlannerTests
joshsmithxrm Feb 9, 2026
6c89ab9
fix: remove useless null-to-object upcasts in tests
joshsmithxrm Feb 9, 2026
a26ca14
fix: remove useless local variable assignments
joshsmithxrm Feb 9, 2026
11cd82d
fix: ensure disposables are cleaned up on test assertion failure
joshsmithxrm Feb 9, 2026
bccbeae
fix: dispose CancellationTokenSource and ContextMenu properly
joshsmithxrm Feb 9, 2026
fc7c2ee
fix: use TryGetValue instead of ContainsKey + indexer
joshsmithxrm Feb 9, 2026
c7d49af
fix: use ReferenceEquals for intentional reference comparisons
joshsmithxrm Feb 9, 2026
46cecbe
fix: use 'using' for disposable resource management
joshsmithxrm Feb 9, 2026
2cc0f32
fix: handle floating-point equality comparisons for SQL semantics
joshsmithxrm Feb 9, 2026
c20bdeb
fix: resolve remaining CodeQL alerts in production code
joshsmithxrm Feb 9, 2026
279b248
fix: resolve remaining CodeQL alerts in tests
joshsmithxrm Feb 9, 2026
a21d3da
docs: add CodeQL cleanup implementation plan
joshsmithxrm Feb 9, 2026
81ab830
fix: resolve CodeQL alerts for null-flow and unused variables
joshsmithxrm Feb 9, 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
  •  
  •  
  •  
25 changes: 7 additions & 18 deletions .github/CODE_SCANNING.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ Compile-time enforcement of architectural patterns. Analyzers run during build a

| ID | Name | Description | Source |
|----|------|-------------|--------|
| PPDS001 | NoDirectFileIoInUi | UI layer using File.Read/Write directly | ADR-0024 |
| PPDS002 | NoConsoleInServices | Service using Console.WriteLine | ADR-0015 |
| PPDS003 | NoUiFrameworkInServices | Service referencing Spectre/Terminal.Gui | ADR-0025 |
| PPDS004 | UseStructuredExceptions | Service throwing raw Exception | ADR-0026 |
| PPDS005 | NoSdkInPresentation | CLI command calling ServiceClient directly | ADR-0015 |
| PPDS007 | PoolClientInParallel | Pool client acquired outside parallel loop | ADR-0002/0005 |
| PPDS001 | NoDirectFileIoInUi | UI layer using File.Read/Write directly | Architecture |
| PPDS002 | NoConsoleInServices | Service using Console.WriteLine | Architecture |
| PPDS003 | NoUiFrameworkInServices | Service referencing Spectre/Terminal.Gui | Architecture |
| PPDS004 | UseStructuredExceptions | Service throwing raw Exception | Architecture |
| PPDS005 | NoSdkInPresentation | CLI command calling ServiceClient directly | Architecture |
| PPDS007 | PoolClientInParallel | Pool client acquired outside parallel loop | Architecture |
| PPDS008 | UseBulkOperations | Loop with single Delete/Update calls | Gemini PR#243 |
| PPDS011 | PropagateCancellation | Async method not passing CancellationToken | Gemini PR#242 |

Expand Down Expand Up @@ -116,19 +116,8 @@ If a finding reveals a real bug:
2. Reference the analyzer rule (e.g., "Found by PPDS012")
3. Include the file and line number

## Architecture (ADRs)

Bot instructions reference these Architecture Decision Records:

| ADR | Summary |
|-----|---------|
| [0015](../docs/adr/0015_APPLICATION_SERVICE_LAYER.md) | Application Services for CLI/TUI/Daemon |
| [0024](../docs/adr/0024_SHARED_LOCAL_STATE.md) | Shared local state architecture |
| [0025](../docs/adr/0025_UI_AGNOSTIC_PROGRESS.md) | UI-agnostic progress reporting |
| [0026](../docs/adr/0026_STRUCTURED_ERROR_MODEL.md) | Structured error model |

## Related Issues

- [#231](https://github.com/joshsmithxrm/power-platform-developer-suite/issues/231) - Tune code scanning tools to reduce noise
- [#232](https://github.com/joshsmithxrm/power-platform-developer-suite/issues/232) - ADR-0024 (style) - Prefer foreach over LINQ
- [#232](https://github.com/joshsmithxrm/power-platform-developer-suite/issues/232) - Prefer foreach over LINQ
- [#246](https://github.com/joshsmithxrm/power-platform-developer-suite/issues/246) - Analyzer triage process and PPDS013 refinement
2 changes: 1 addition & 1 deletion .github/codeql/codeql-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ queries:
query-filters:
- exclude:
id:
# LINQ style suggestions - conflicts with ADR-0024 (prefer explicit foreach)
# LINQ style suggestions - prefer explicit foreach
- cs/linq/missed-where
- cs/linq/missed-select
# Style preferences - not quality issues
Expand Down
6 changes: 3 additions & 3 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,20 @@ This file guides GitHub Copilot's code review behavior for the PPDS repository.
- Application Services own all business logic
- Services are UI-agnostic - no `Console.WriteLine`, no Spectre/Terminal.Gui references

### File I/O (ADR-0024: Shared Local State)
### File I/O

- UIs never read/write files directly
- All file access through Application Services
- WRONG: `File.ReadAllText` in command handler
- CORRECT: `await _profileService.GetProfilesAsync()`

### Progress Reporting (ADR-0025: UI-Agnostic Progress)
### Progress Reporting

- Services accept `IProgressReporter`, not write to console
- UIs implement adapters for their display medium
- Services return data, presentation layers format it

### Error Handling (ADR-0026: Structured Error Model)
### Error Handling

- Services throw `PpdsException` with `ErrorCode` and `UserMessage`
- Never expose technical details (GUIDs, stack traces) in `UserMessage`
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,4 @@ states.json

# Git worktrees
.worktrees/
.muse/
18 changes: 7 additions & 11 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@ SDK, CLI, TUI, VS Code Extension, and MCP server for Power Platform development.

- Regenerate `PPDS.Plugins.snk` - breaks strong naming for all assemblies
- Create new `ServiceClient` per request - 42,000x slower than pool; use `IDataverseConnectionPool`
- Hold single pooled client for multiple queries - defeats pool parallelism; see ADR-0002
- Hold single pooled client for multiple queries - defeats pool parallelism
- Write CLI status messages to stdout - use `Console.Error.WriteLine`; stdout is for data
- Throw raw exceptions from Application Services - wrap in `PpdsException` with ErrorCode

## ALWAYS

- Use connection pool for multi-request scenarios - see ADR-0002, ADR-0005
- Use connection pool for multi-request scenarios
- Use bulk APIs (`CreateMultiple`, `UpdateMultiple`) - 5x faster than `ExecuteMultiple`
- Use Application Services for all persistent state - single code path for CLI/TUI/RPC (ADR-0024)
- Accept `IProgressReporter` for operations >1 second - all UIs need feedback (ADR-0025)
- Include ErrorCode in `PpdsException` - enables programmatic handling (ADR-0026)
- Use Application Services for all persistent state - single code path for CLI/TUI/RPC
- Accept `IProgressReporter` for operations >1 second - all UIs need feedback
- Include ErrorCode in `PpdsException` - enables programmatic handling

## Tech Stack

Expand All @@ -27,10 +27,9 @@ SDK, CLI, TUI, VS Code Extension, and MCP server for Power Platform development.

## Key Files

- `src/PPDS.Cli/Services/` - Application Services (ADR-0015)
- `src/PPDS.Cli/Services/` - Application Services
- `src/PPDS.Dataverse/Generated/` - Early-bound entities (DO NOT edit)
- `docs/adr/` - Architecture Decision Records
- `docs/patterns/` - Canonical code patterns
- `docs/specs/` - Feature specifications

## Commands

Expand All @@ -47,9 +46,6 @@ SDK, CLI, TUI, VS Code Extension, and MCP server for Power Platform development.
- Integration (live): `--filter Category=Integration`
- TUI: `--filter Category=TuiUnit`

See ADR-0028 (TUI testing), ADR-0029 (full strategy).

## Architecture

TUI-first multi-interface platform. All business logic in Application Services, never in UI code.
See `docs/patterns/architecture.md` for diagrams.
12 changes: 6 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,10 @@ The pre-commit hook automatically runs unit tests (~10s).

| Pattern | Reference |
|---------|-----------|
| Connection pooling | ADR-0002, `ServiceClientPool.cs` |
| Bulk operations | ADR-0005, `BulkOperationExecutor.cs` |
| CLI output | ADR-0008 |
| Application services | ADR-0015 |
| Connection pooling | `ServiceClientPool.cs` |
| Bulk operations | `BulkOperationExecutor.cs` |
| CLI output | `src/PPDS.Cli/Services/` |
| Application services | `src/PPDS.Cli/Services/` |

### What to Avoid

Expand All @@ -122,15 +122,15 @@ power-platform-developer-suite/
│ └── PPDS.Mcp/ # MCP server
├── extension/ # VS Code extension
├── tests/ # Test projects
├── docs/adr/ # Architecture Decision Records
├── docs/specs/ # Feature specifications
└── templates/claude/ # Claude Code integration
```

## Getting Help

- **Questions**: Open a [Discussion](https://github.com/joshsmithxrm/power-platform-developer-suite/discussions)
- **Bugs**: Open an [Issue](https://github.com/joshsmithxrm/power-platform-developer-suite/issues)
- **Architecture**: Check [ADRs](docs/adr/README.md) for design decisions
- **Architecture**: Check `docs/specs/` for design decisions

## License

Expand Down
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<ItemGroup Label="Azure and Identity">
<PackageVersion Include="Azure.Identity" Version="1.17.1" />
<PackageVersion Include="Devlooped.CredentialManager" Version="2.6.1.1" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.2.2" />
<PackageVersion Include="Microsoft.Identity.Client" Version="4.81.0" />
<PackageVersion Include="Microsoft.Identity.Client.Extensions.Msal" Version="4.81.0" />
<PackageVersion Include="Microsoft.PowerPlatform.Dataverse.Client" Version="1.2.10" />
Expand Down
10 changes: 0 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -271,16 +271,6 @@ dotnet test --filter Category=TuiUnit

---

## Architecture Decisions

Key design decisions are documented as ADRs in [docs/adr/](docs/adr/README.md):

- [ADR-0002: Multi-Connection Pooling](docs/adr/0002_MULTI_CONNECTION_POOLING.md)
- [ADR-0005: DOP-Based Parallelism](docs/adr/0005_DOP_BASED_PARALLELISM.md)
- [ADR-0007: Unified CLI and Shared Authentication](docs/adr/0007_UNIFIED_CLI_AND_AUTH.md)
- [ADR-0008: CLI Output Architecture](docs/adr/0008_CLI_OUTPUT_ARCHITECTURE.md)
- [ADR-0015: Application Service Layer](docs/adr/0015_APPLICATION_SERVICE_LAYER.md)

## Patterns

- [Connection Pooling](docs/architecture/CONNECTION_POOLING_PATTERNS.md) - When and how to use connection pooling
Expand Down
18 changes: 3 additions & 15 deletions docs/FEATURE_ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
- Power Apps Admin API for connections (different from Dataverse)
- Orphaned connection reference detection (port from extension)
- Deployment settings sync with value preservation and deterministic sorting
- PAC-compatible format (see [ADR-0011](adr/0011_DEPLOYMENT_SETTINGS_FORMAT.md))
- PAC-compatible format

---

Expand All @@ -55,7 +55,7 @@

**Scope:**
- Full filtering (25 fields, 11 operators, 8 quick filters)
- Hybrid filter approach: inline flags + filter file (see [ADR-0012](adr/0012_HYBRID_FILTER_DESIGN.md))
- Hybrid filter approach: inline flags + filter file
- Timeline correlation view
- Trace level management (off/exception/all)
- Export/delete operations
Expand All @@ -67,7 +67,7 @@
**Design Session:** 2026-01-04 - Completed

**Scope:**
- Published vs unpublished content (default: published per [ADR-0010](adr/0010_PUBLISHED_UNPUBLISHED_DEFAULT.md))
- Published vs unpublished content (default: published, `--unpublished` flag)
- Conflict detection on push (timestamp-based with hash tracking)
- Efficient filtering for 60K+ resources
- Hierarchical pull with `--strip-prefix` option
Expand All @@ -90,17 +90,6 @@ Full plugin lifecycle: assemblies, packages, steps, images, service endpoints, w

---

## Architecture Decision Records

| ADR | Decision |
|-----|----------|
| [ADR-0009](adr/0009_CLI_COMMAND_TAXONOMY.md) | Use `ppds plugintraces` (not `traces` or `plugins traces`) |
| [ADR-0010](adr/0010_PUBLISHED_UNPUBLISHED_DEFAULT.md) | Default to published, `--unpublished` flag |
| [ADR-0011](adr/0011_DEPLOYMENT_SETTINGS_FORMAT.md) | Use PAC-compatible deployment settings format |
| [ADR-0012](adr/0012_HYBRID_FILTER_DESIGN.md) | Hybrid filter design: inline flags + filter file |

---

## Key Design Decisions

### JSON Output Strategy
Expand All @@ -120,5 +109,4 @@ Every command serves Extension (JSON-RPC), Humans (tables), AI/Tooling (structur

## References

- [CLI Output Architecture (ADR-0008)](adr/0008_CLI_OUTPUT_ARCHITECTURE.md)
- [Extension CLI Migration Issues](https://github.com/joshsmithxrm/power-platform-developer-suite/issues?q=is%3Aissue+label%3Aepic%3Acli-daemon)
140 changes: 0 additions & 140 deletions docs/adr/0017_GIT_BRANCHING_STRATEGY.md

This file was deleted.

Loading
Loading