Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
229 commits
Select commit Hold shift + click to select a range
5ad4089
feat(windows): add the native Windows app in C# and WinUI 3
countradooku Oct 28, 2026
355f3ef
feat(windows): restore tabs, Fix with AI, favorites in completion, ac…
countradooku Oct 28, 2026
1bdecd5
ci(windows): build and test the Windows app, and document it
countradooku Oct 28, 2026
61c4eb1
feat(windows): every TablePro engine in the catalog, with dialects fo…
countradooku Oct 28, 2026
5508cb7
feat(windows): parameter prompts, XLSX export, JSON import, suggest w…
countradooku Oct 28, 2026
2824ad1
feat(windows-grid): chart a result as bars, lines or areas
countradooku Oct 28, 2026
58e8b4c
feat(windows): search a value across every table of the schema
countradooku Oct 28, 2026
fbc35a5
docs(windows): mark search, parameters, charts, XLSX, JSON import and…
countradooku Oct 28, 2026
45f4f87
feat(windows): Open Quickly fuzzy switcher with per-connection recency
countradooku Oct 28, 2026
18244e9
feat(windows-drivers): Redis driver with key browsing, MULTI/EXEC sav…
countradooku Oct 28, 2026
37a702e
feat(windows-drivers): ClickHouse, Oracle and Teradata drivers
countradooku Oct 28, 2026
6536b7f
feat(windows-drivers): MongoDB driver with a mongosh parser and docum…
countradooku Oct 28, 2026
581134e
feat(windows-drivers): Cassandra, ScyllaDB and DynamoDB drivers
countradooku Oct 28, 2026
509e5c4
feat(windows-drivers): Snowflake, BigQuery, Spanner and Trino drivers
countradooku Oct 28, 2026
76017aa
feat(windows-drivers): Elasticsearch, Typesense, Weaviate and Surreal…
countradooku Oct 28, 2026
ace26e1
feat(windows-drivers): Kafka, etcd, Cloudflare D1 and R2 SQL, libSQL …
countradooku Oct 28, 2026
05b69e6
docs(windows): record the new engines and their gaps in the roadmap
countradooku Oct 28, 2026
93c2b74
docs(windows): list the 34 engines and how driver suites test
countradooku Oct 28, 2026
3667b0b
feat(windows-drivers): ClickHouse save review shows the mutations it …
countradooku Oct 28, 2026
27e1fa7
refactor(windows-drivers): one in-memory filter evaluator in Core for…
countradooku Oct 28, 2026
7fa10b0
feat(windows-drivers): Beancount, Dameng and SAP HANA drivers
countradooku Oct 28, 2026
dc19351
fix(windows): edit documents and keys in the grid, and honour read-on…
countradooku Oct 28, 2026
edac4ab
docs(windows): record Dameng, SAP HANA and Beancount
countradooku Oct 28, 2026
152dff2
feat(windows-editor): Vim mode ported from the macOS engine
countradooku Oct 28, 2026
2a06059
feat(windows): graphical query plan with tree, diagram and plan compa…
countradooku Oct 28, 2026
0388e04
feat(windows-editor): turn on Vim from Settings, show its mode, and m…
countradooku Oct 28, 2026
900afb0
feat(windows): users and roles editor for PostgreSQL, MySQL and SQL S…
countradooku Oct 28, 2026
d57e969
feat(windows-drivers): Safe Mode reads BQL statements as reads on Bea…
countradooku Oct 28, 2026
1c25c88
docs(windows): mark Vim mode, query plans and users and roles in the …
countradooku Oct 28, 2026
3898f8f
feat(windows-connections): proxy, Cloud SQL, Cloudflare and command t…
countradooku Oct 28, 2026
47b9a82
feat(windows-editor): multiple cursors and Emacs key bindings
countradooku Oct 28, 2026
df677c7
feat(windows): customizable keyboard shortcuts with a Keyboard settin…
countradooku Oct 28, 2026
473a26a
feat(windows): MCP client pairing with a persisted audit log, and Nar…
countradooku Oct 28, 2026
2f70c32
feat(windows): Parquet export, SQL import with a column mapping edito…
countradooku Oct 28, 2026
fd21828
feat(windows): MSIX package, per-user installer, release workflow, wi…
countradooku Oct 28, 2026
48bee60
docs(windows): mark connections, editor, shortcuts, MCP, data and pac…
countradooku Oct 28, 2026
217e15f
feat(windows): check constraint, partition and table option editors
countradooku Oct 28, 2026
e6b62eb
feat(windows-editor): diagnostics, hover, go to definition and rename…
countradooku Oct 28, 2026
1f48584
feat(windows): routine debugger for PL/pgSQL and Oracle PL/SQL
countradooku Oct 28, 2026
af6a103
feat(windows): join builder, row generator and copying objects betwee…
countradooku Oct 28, 2026
1432e7d
feat(windows): data and schema compare with sync, and Data Rewind
countradooku Oct 28, 2026
79f77d6
feat(windows): linked SQL folders, version history with Git, and the …
countradooku Oct 28, 2026
ab0dd67
feat(windows): menus, settings and hooks for the new tools
countradooku Oct 28, 2026
08752c9
docs(windows): record the new tools in the roadmap and the optional s…
countradooku Oct 28, 2026
d811574
feat(windows): translate the app into the macOS languages
countradooku Oct 29, 2026
83dfd31
feat(windows-connections): Google Cloud IAM and Redshift IAM sign-in
countradooku Oct 29, 2026
7eaf991
feat(windows-users): Oracle and Typesense principals, multi-select an…
countradooku Oct 29, 2026
df71bee
feat(windows-import): write modes, saved mappings and SQL file encoding
countradooku Oct 29, 2026
5403242
feat(windows-compare): multi-table compare and saved comparison profiles
countradooku Oct 29, 2026
29dbfe2
feat(windows): licensing and the team library
countradooku Oct 29, 2026
dd1b9d9
feat(windows-drivers): Redis Sentinel and Cluster, structure editing …
countradooku Oct 29, 2026
11aaf5b
docs(windows): update the roadmap for the closed parity gaps
countradooku Oct 29, 2026
24eb9b4
feat(windows): one transaction for multi-table sync and replacing imp…
countradooku Oct 29, 2026
a61851b
feat(windows): SQLite loadable extensions and team library connections
countradooku Oct 29, 2026
1c86d3a
feat(windows-redis): key table browsing, namespace tree and ElastiCac…
countradooku Oct 29, 2026
5e6c6fb
docs(windows): update the roadmap for Redis, transactions, SQLite and…
countradooku Oct 29, 2026
273979a
feat(windows): translate text built in Core, Storage, SSH, AI and the…
countradooku Oct 29, 2026
ce49cc7
feat(windows): gate the paid features behind the license as on macOS
countradooku Oct 29, 2026
cbf5a8f
feat(windows): warn about MySQL tables that cannot roll back, import …
countradooku Oct 29, 2026
d7ed30c
test(windows-drivers): run the drivers against live servers and fix w…
countradooku Oct 29, 2026
a49204a
fix(windows-drivers): recover killed connections, MariaDB plans, Orac…
countradooku Oct 29, 2026
3e5dfc4
fix(windows): stop the result chart crash and fix bugs found in scree…
countradooku Oct 29, 2026
db3071f
Merge branch 'main' into feat/windows-app
datlechin Nov 1, 2026
8f1622b
Merge remote-tracking branch 'origin/main' into feat/windows-app
datlechin Nov 2, 2026
6548627
chore(windows): remove the first Windows app before the rebuild on th…
datlechin Nov 2, 2026
86ee611
feat(core): add the ffi crate, one UniFFI API and the grid's window C…
datlechin Nov 2, 2026
f5d3d5b
feat(windows): add the .NET interop library over the core's ffi crate
datlechin Nov 2, 2026
b1a33ac
ci(windows): test the interop library on x64, Arm64 and macOS runners
datlechin Nov 2, 2026
4b463ee
ci(windows): run the windows suite for every core crate and the works…
datlechin Nov 2, 2026
e7a4fd0
ci: drop the DuckDB sources the Cargo cache restores without their files
datlechin Nov 2, 2026
cecf492
feat(core): keep the connection library as a group tree with manual o…
datlechin Nov 2, 2026
a7dbb16
feat(linux): show groups nested elsewhere by their path
datlechin Nov 2, 2026
a6c4980
feat(windows-editor): add the editor's text model, undo history and l…
datlechin Nov 2, 2026
5169310
feat(core-sql): add syntax tokens for editor coloring
datlechin Nov 2, 2026
5679e97
feat(ffi): export the editor's syntax token scan over the C ABI
datlechin Nov 2, 2026
7f7ddbd
feat(windows-interop): add SqlSyntax.Tokenize over the core's token scan
datlechin Nov 2, 2026
a5a8859
chore(windows-editor): merge the core syntax token scan
datlechin Nov 2, 2026
2107b34
test(linux): pass the group label to row actions in the tag test
datlechin Nov 2, 2026
b1147ea
docs(linux): note the version 3 connection file in the changelog
datlechin Nov 2, 2026
a673300
feat(windows-editor): add the SQL editor control over Direct2D, Direc…
datlechin Nov 2, 2026
7cce421
fix(windows-editor): release replaced highlighters, keep TSF failures…
datlechin Nov 2, 2026
7647d30
fix(linux): return a duplicated connection as the store placed it
datlechin Nov 2, 2026
660b8f7
docs(windows-editor): record the editor control decision and map the …
datlechin Nov 2, 2026
f87da7f
feat(windows-editor): fill in line facts while idle and keep find box…
datlechin Nov 2, 2026
00458f7
build(linux): list the new test support file in POTFILES.in
datlechin Nov 2, 2026
c69964e
chore: merge main and number the library ADR 0006
datlechin Nov 2, 2026
16a4a87
build: bump pulldown-cmark to 0.13.6 for RUSTSEC-2026-0433
datlechin Nov 2, 2026
580f9c7
fix(windows-editor): never skip a TSF composition update
datlechin Nov 2, 2026
2612607
build(linux): regenerate the license notices for pulldown-cmark 0.13.6
datlechin Nov 2, 2026
5755fd2
fix(windows-editor): generate the control's PRI file on Windows
datlechin Nov 2, 2026
a9fd049
fix(windows-editor): follow contrast changes through UISettings, whic…
datlechin Nov 2, 2026
6c0a7b5
build(linux): leave the ffi crate out of the Linux unit suite
datlechin Nov 2, 2026
aae24c6
feat(windows-editor): expose the caret's screen rectangle for input m…
datlechin Nov 2, 2026
49a8e12
perf(windows-editor): keep one frame in flight so Present never block…
datlechin Nov 2, 2026
1fb62db
docs(windows-editor): correct what the gate found about CoreTextEditC…
datlechin Nov 2, 2026
b44a75a
fix(windows-editor): keep carets carets through line comments, lex id…
datlechin Nov 2, 2026
38f36e7
build(linux): update pulldown-cmark to 0.13.6 for RUSTSEC-2026-0433
datlechin Nov 2, 2026
dbe54e1
fix(windows-editor): give UIA text rectangles in client pixels, as Wi…
datlechin Nov 2, 2026
d070026
perf(windows-editor): let two frames wait for the screen so a scroll …
datlechin Nov 2, 2026
38b400e
feat(windows-editor): warm font fallback off the UI thread and lay ou…
datlechin Nov 2, 2026
e05aa64
docs(windows-editor): record the gate's numbers in the editor decision
datlechin Nov 2, 2026
b1196eb
fix(windows-editor): lay out empty lines again after the span change
datlechin Nov 2, 2026
06d962e
docs(windows-editor): record the final gate run in the editor decision
datlechin Nov 2, 2026
0c35adc
Merge remote-tracking branch 'origin/main' into windows/editor
datlechin Nov 2, 2026
df4c282
Merge remote-tracking branch 'origin/feat/core-connection-library' in…
datlechin Nov 2, 2026
a437aa2
refactor(windows): move the editor's Direct2D and DirectWrite layer i…
datlechin Nov 2, 2026
3b5c73d
feat(core-ffi): expose the connection library, saved connects and Cre…
datlechin Nov 2, 2026
01a7c57
feat(windows-interop): wrap the connection library, saved connects an…
datlechin Nov 2, 2026
6e3d6ca
feat(windows-grid): add the data grid's model: columns, selection, ke…
datlechin Nov 2, 2026
eff7c48
feat(windows): add the app model for settings, session, library tree …
datlechin Nov 2, 2026
a3d248c
Merge remote-tracking branch 'origin/main' into windows/app-shell
datlechin Nov 2, 2026
c2edc34
feat(windows): add the WinUI app with the rail, Connections page, con…
datlechin Nov 2, 2026
c9f7c8e
docs(windows): record the app shell decision and run the app's UI tes…
datlechin Nov 2, 2026
1281e01
fix(windows): resolve icons from the app folder and tree rows through…
datlechin Nov 2, 2026
31d59e4
fix(windows): keep the back-to-tree button on the default style
datlechin Nov 2, 2026
0411ce9
feat(windows-graphics): draw into composition surfaces with Direct2D …
datlechin Nov 2, 2026
e4c4797
feat(windows-grid): add the DataGridView control with drawn rows, fro…
datlechin Nov 2, 2026
5f81832
test(windows-grid): cover the ItemsRepeater traps, input, copy, UIA a…
datlechin Nov 2, 2026
a256ee8
test(windows-grid): add the grid gate harness with the spike's phases…
datlechin Nov 2, 2026
b63a84a
fix(windows-grid): measure the view's insets before Loaded and keep a…
datlechin Nov 2, 2026
cc77006
ci(windows-grid): run the grid gate by dispatch on x64 and Arm64 runners
datlechin Nov 2, 2026
f89b7ad
refactor(windows-grid): read a result set's row count live instead of…
datlechin Nov 2, 2026
7c9fbc0
docs(windows): map the data grid projects and how a host feeds the grid
datlechin Nov 2, 2026
444eda6
perf(windows-grid): keep closures and boxed enumerators out of the sc…
datlechin Nov 2, 2026
d575373
test(windows-grid): fail fast when the WinUI host cannot start
datlechin Nov 2, 2026
256ffd6
build(windows-interop): regenerate the bindings for the connection li…
datlechin Nov 2, 2026
1465e40
fix(windows-grid): redraw on a simulated device loss, re-measure row …
datlechin Nov 2, 2026
258ad00
feat(windows-grid): let the app warm the grid's fallback fonts at sta…
datlechin Nov 2, 2026
54bd0f4
test(core-ffi): say why a deleted Credential Manager item is still re…
datlechin Nov 2, 2026
4714f37
fix(windows-grid): align the panes left and top, as ScrollViewer's he…
datlechin Nov 2, 2026
5c21f04
test(windows): cover cancelling a connect and capture the connecting …
datlechin Nov 2, 2026
3f17eda
fix(windows-grid): follow contrast changes through UISettings, which …
datlechin Nov 2, 2026
5851cca
Merge branch 'windows/editor' into feat/windows-app
datlechin Nov 2, 2026
b8cb0a2
Merge remote-tracking branch 'origin/main' into feat/windows-app
datlechin Nov 2, 2026
5d7681e
fix(windows): import the namespace of the Mica backdrop
datlechin Nov 2, 2026
489189e
fix(windows-grid): give the grid its theme background, keep header ce…
datlechin Nov 2, 2026
4503de3
fix(core-ffi): serialize Credential Manager calls, which lost concurr…
datlechin Nov 2, 2026
3b932e9
test(windows-grid): check that no row or header cell anchors the scro…
datlechin Nov 2, 2026
15fb30a
perf(windows-grid): warm fonts on the grid's own device, read cells i…
datlechin Nov 2, 2026
6cd45e1
test(windows-grid): drag, double-click and click the header with real…
datlechin Nov 2, 2026
b56969c
fix(windows-grid): release the rows' text layouts and surfaces when t…
datlechin Nov 2, 2026
a05f61b
fix(windows-grid): take prepared rows and headers out of the ScrollVi…
datlechin Nov 2, 2026
97dfe41
fix(windows): settle the analyzer findings and hook list handlers in …
datlechin Nov 2, 2026
f0cb3e4
perf(windows-grid): read cells in blocks of 32 by 8 sized exactly, so…
datlechin Nov 2, 2026
993d04a
perf(windows-grid): warm the rows' device with cell-shaped layouts of…
datlechin Nov 2, 2026
00dba71
test(windows): run the UI tests in one class instead of the obsolete …
datlechin Nov 2, 2026
e06373e
fix(windows-grid): turn the ScrollViewer's anchoring off
datlechin Nov 2, 2026
8cbb653
test(windows-grid): split a step's draw time into layouts and surface…
datlechin Nov 2, 2026
61bbaea
test(windows): make the name prefix lookup static
datlechin Nov 2, 2026
16f8410
perf(windows-grid): draw each script's common glyphs once ahead; let …
datlechin Nov 2, 2026
28dd9f9
docs(windows-grid): keep comments to one line
datlechin Nov 2, 2026
ac2f6e7
fix(windows): keep default settings for keys a file leaves out, left-…
datlechin Nov 2, 2026
81526f7
test(windows-grid): send a key again when the runner's shell took it,…
datlechin Nov 2, 2026
4eb6836
fix(windows-grid): paint the frozen pane opaque so scrolled columns d…
datlechin Nov 2, 2026
3de1929
Merge remote-tracking branch 'origin/main' into feat/windows-app
datlechin Nov 2, 2026
4dd1776
test(windows): find owned windows under their owner and report failur…
datlechin Nov 2, 2026
b8115ba
test(windows-grid): send a chord again when the runner's shell took it
datlechin Nov 2, 2026
c0b32a5
fix(windows): open tree rows through their containers, since TreeView…
datlechin Nov 2, 2026
06ee197
fix(windows): keep the port field the host field's height when the ho…
datlechin Nov 2, 2026
c406789
ci(windows-grid): keep the gate workflow's comment to one line
datlechin Nov 2, 2026
161aa55
test(windows): read FlaUI retries by Success
datlechin Nov 2, 2026
863f54f
test(windows-grid): record the UI thread's cycles and the runner's ot…
datlechin Nov 2, 2026
444644d
fix(windows): open tree rows once they load, load the default schema …
datlechin Nov 2, 2026
c8ce365
fix(windows): stretch a tab's content to the tab view
datlechin Nov 2, 2026
826f928
test(windows-grid): name the processes that took the runner's CPU dur…
datlechin Nov 2, 2026
5f12680
fix(windows): keep the home tree's open sections across rebuilds
datlechin Nov 2, 2026
4478237
fix(windows): stretch the tab view, whose style aligns it to the top
datlechin Nov 2, 2026
e4c2c80
fix(windows): open home sections through their containers after each …
datlechin Nov 2, 2026
fe8bdff
docs(windows): record what the runner showed in the app shell decision
datlechin Nov 2, 2026
637165c
test(windows-grid): say why the gate turns off real-time scanning
datlechin Nov 2, 2026
c911fd8
docs(windows-grid): record the data grid decision and its gate runs
datlechin Nov 2, 2026
65529b5
Merge branch 'windows/data-grid' into feat/windows-app
datlechin Nov 2, 2026
6890375
Merge branch 'windows/data-grid' into windows/app-shell
datlechin Nov 2, 2026
27adb21
feat(core): write sorted table pages and query re-runs for the Window…
datlechin Nov 2, 2026
58868cb
feat(windows): show results in the data grid and sort them on the server
datlechin Nov 2, 2026
22858d5
fix(core-clickhouse): read the login's readonly level when the analyz…
datlechin Nov 2, 2026
b4346a8
fix(windows-grid): recycle the old rows and headers when the data is …
datlechin Nov 2, 2026
8b7a7dc
test(windows): bring the app to the front before each click and key
datlechin Nov 2, 2026
a9b1931
ci(windows): stop the Arm64 image's WSL prompt before the UI tests
datlechin Nov 2, 2026
0fd0205
test(windows-grid): replace the data the way a run does, empty and th…
datlechin Nov 2, 2026
5695367
test(windows): click again when a click did not land
datlechin Nov 3, 2026
0fa25e5
docs(windows): record the runs that passed with the data grid
datlechin Nov 3, 2026
a513231
Merge branch 'windows/app-shell' into feat/windows-app
datlechin Nov 3, 2026
a3f7961
Merge remote-tracking branch 'origin/main' into feat/windows-app
datlechin Nov 3, 2026
b9e9148
refactor(core): order held values in the core, for every app
datlechin Nov 3, 2026
2537abd
feat(core): sort by name or position, else sort the rows a result holds
datlechin Nov 3, 2026
d91650d
feat(windows): sort held rows, size columns to content and report sor…
datlechin Nov 3, 2026
9d279dc
docs: record how a result sorts, by name, position or the rows held
datlechin Nov 3, 2026
d1a9321
style(core): format the sort code and keep its comments to one line
datlechin Nov 3, 2026
ef5b229
feat(core): give each engine the family the macOS app lists it under
datlechin Nov 3, 2026
261ab9c
feat(core): expose tags, placed moves, table pages, session health an…
datlechin Nov 3, 2026
c79ad81
feat(windows): map the core's tags, pages, health and transaction sta…
datlechin Nov 3, 2026
c976437
feat(windows): add the models for paging, drops, closed tabs, engine …
datlechin Nov 3, 2026
2bac331
ci(windows): share desktop.ps1 from windows/ci between the app tests …
datlechin Nov 3, 2026
4160728
feat(windows): engine artwork, rail marks, pane, placement, password …
datlechin Nov 3, 2026
155b771
docs(windows): record the shell's second pass in ADR 0004
datlechin Nov 3, 2026
b16a709
test(windows): ask again after a password that did not log in
datlechin Nov 3, 2026
f799b35
build(windows): generate the bindings for the result set sort
datlechin Nov 3, 2026
df1ea8c
fix(windows): satisfy the analyzers in the shell's new code
datlechin Nov 3, 2026
6f23efd
fix(windows): drag library rows from the tree and size the pane from …
datlechin Nov 3, 2026
e9d6328
fix(windows): open dialogs in the app's theme and keep a transaction'…
datlechin Nov 3, 2026
ffafeca
docs(windows): record the run that passed with the result sort
datlechin Nov 3, 2026
831a8af
chore(windows): merge the fork's result sort into windows/shell-polish
datlechin Nov 3, 2026
b4b010d
test(windows): drag with SendInput, which WinUI sees as a mouse
datlechin Nov 3, 2026
dbb669b
Merge remote-tracking branch 'origin/main' into feat/windows-app
datlechin Nov 3, 2026
9dff09e
fix(windows): open library rows again after the tree's own pass and s…
datlechin Nov 3, 2026
482d19e
docs(windows): record what the shell's CI runs showed
datlechin Nov 3, 2026
d3a2a9a
fix(windows-grid): read a cell peer outside the current data as empty…
datlechin Nov 3, 2026
c588a8f
fix(windows): hand the grid a new result once it has rows, so a sort …
datlechin Nov 3, 2026
258f398
fix(windows): open library rows through their nodes and retry the UI …
datlechin Nov 3, 2026
f9131e4
fix(windows): open library rows through their containers again
datlechin Nov 3, 2026
79dec72
docs(windows): name the runs that passed with the shell's second pass
datlechin Nov 3, 2026
ffa9b19
Merge branch 'windows/shell-polish' into feat/windows-app
datlechin Nov 3, 2026
5e196bc
style(windows-editor): fold the editor's comments into one-line whys
datlechin Nov 3, 2026
9685b3e
style(windows-grid): fold the grid's comments into one-line whys
datlechin Nov 3, 2026
c8df596
style(windows-interop): replace the interop library's XML docs with o…
datlechin Nov 3, 2026
0c15409
style(core): keep the FFI crate's comments to one line
datlechin Nov 3, 2026
b73b2ec
ci(windows): fold the workflows' comments to one line
datlechin Nov 3, 2026
792c63e
style(windows): fold the app's comments into one-line whys
datlechin Nov 3, 2026
47eee16
fix(windows): show a paged table's range, total and time as one status
datlechin Nov 3, 2026
353b461
fix(windows): check a connection on every row it shows in selection mode
datlechin Nov 3, 2026
1b12a31
docs(windows): record the maintainer's shell decisions and the toolki…
datlechin Nov 3, 2026
846fdf3
docs(fix-issue): add the Windows platform profile and verify backend
datlechin Nov 3, 2026
d8aee4b
fix(windows): skip the Connections page's queued tree passes once the…
datlechin Nov 3, 2026
9b040d6
test(windows): open the Tags submenu through ExpandCollapse and try a…
datlechin Nov 3, 2026
91881b2
test(windows): invoke the new tag item instead of gliding the pointer…
datlechin Nov 3, 2026
9e0c8fd
docs(windows): name the run that passed and what the runners showed w…
datlechin Nov 3, 2026
32df909
Merge branch 'windows/fix-issue-profile' into feat/windows-app
datlechin Nov 3, 2026
35a0abb
chore(github): add Windows to the issue forms' platform list
datlechin Nov 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions .claude/rules/ci.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,23 @@ paths:

## What runs where

- `ci.yml` runs on every PR, on pushes to main and `release/**`, and by dispatch. `Plan` runs the detector per suite, then calls each workflow when its suite is true: `macos-tests.yml` (`macos`), `ios-tests.yml` (`ios`), `swiftlint.yml` (`swiftlint`), `build-linux.yml` (`linux-docs`, docs job only unless `linux`; never on `release/**`, since Linux ships from main or `linux-X.Y`), `core.yml` (`linux`, the shared Rust core on Windows and macOS; never on `release/**`) and `repo-hygiene.yml` (always). `plugins`, `oracle` and `hana` go in as inputs.
- `ci.yml` runs on every PR, on pushes to main and `release/**`, and by dispatch. `Plan` runs the detector per suite, then calls each workflow when its suite is true: `macos-tests.yml` (`macos`), `ios-tests.yml` (`ios`), `swiftlint.yml` (`swiftlint`), `build-linux.yml` (`linux-docs`, docs job only unless `linux`; never on `release/**`, since Linux ships from main or `linux-X.Y`), `core.yml` (`linux`, the shared Rust core on Windows and macOS; never on `release/**`), `windows.yml` (`windows`, the Windows app, its UI tests and the .NET libraries over the core's FFI crate; never on `release/**`) and `repo-hygiene.yml` (always). `plugins`, `oracle` and `hana` go in as inputs.
- The base is a PR's base SHA, or on a main push the head SHA of the last green CI push run on main. No such run, or a dispatch, runs everything. A dispatch never counts as main's last green run or for a tag.
- Concurrency is only in `ci.yml`: a PR keeps its newest run, main pushes run one at a time and a newer pending run replaces the older, and each `release/**` commit and each dispatch has its own group.
- macOS Tests runs the Unit and UI plans in full, with no shard, parallel, iteration or retry flag.
- A `v*` tag runs only `release.yml`, a `linux-v*` tag only `release-linux.yml`.
- `windows-grid-gate.yml` runs only by dispatch: the Windows data grid's timing and behavior gate on `windows-2025` and `windows-11-arm`, whose numbers vary too much between hosted runners to gate a merge (`windows/docs/decisions/0003-data-grid-control.md`, Gate). `windows.yml` runs the grid's tests on every change.

## Change detector

- `scripts/ci/detect-changed-paths.sh [--base <sha>] [--head <rev>] [--ref <ref>] <suite>` prints `true` or `false`. No base prints true; an all-zero base diffs from the merge base with `origin/main`; `--ref refs/heads/release/*` prints true.
- Suites: `macos`, `plugins`, `ios`, `oracle`, `hana`, `swiftlint`, `linux` (`linux/`, `core/` and the Cargo workspace files at the top; no Markdown but `linux/CHANGELOG.md`, `linux/docs/regression-tests.md` and `linux/data/`), `linux-docs`, `release` (what Release Build reads) and `shipped` (`release` without `.github/`; `version.py check` reads it).
- Suites: `macos`, `plugins`, `ios`, `oracle`, `hana`, `swiftlint`, `linux` (`linux/`, `core/` and the Cargo workspace files at the top; no Markdown but `linux/CHANGELOG.md`, `linux/docs/regression-tests.md` and `linux/data/`), `linux-docs`, `windows` (`windows/`, `core/`, `Cargo.toml`, `Cargo.lock` and `rust-toolchain.toml` at the top; no Markdown), `release` (what Release Build reads) and `shipped` (`release` without `.github/`; `version.py check` reads it).
- Every suite but `shipped` watches `ci.yml` and its own workflow. A path a suite newly reads joins its pattern in the same change.

## Runners

- Xcode jobs run on `xcode-27`, a GitHub preview image. `setup-xcode` pins the Xcode build.
- Every job runs on a GitHub-hosted runner. There is no self-hosted runner. `core.yml` uses `windows-2025`, `windows-11-arm` and `macos-15`.
- Every job runs on a GitHub-hosted runner. There is no self-hosted runner. `core.yml` and `windows.yml` use `windows-2025`, `windows-11-arm` and `macos-15`.
- At most 5 hosted macOS jobs and 20 jobs in all run at once.

## Release Build
Expand All @@ -57,9 +58,9 @@ paths:
## Caches

- `~/.spm-cache`, keyed on the app's `Package.resolved`. macOS Tests saves it on a push miss; Release and Release Build only restore it.
- Linux caches Cargo through `Swatinem/rust-cache`. No libs or DerivedData cache.
- Linux, `core.yml` and `windows.yml` cache Cargo through `Swatinem/rust-cache`. `windows.yml` also caches the pinned uniffi-bindgen-cs. No libs or DerivedData cache.

## Writing workflow and lint code

- Pin every action by commit SHA. Repo Hygiene runs actionlint and `shellcheck --severity=warning`; Supply chain runs zizmor on `ci.yml`, `core.yml` and the Linux workflows.
- Pin every action by commit SHA. Repo Hygiene runs actionlint and `shellcheck --severity=warning`; Supply chain runs zizmor on `ci.yml`, `core.yml`, `windows.yml` and the Linux workflows.
- Nested `.swiftlint.yml` files under `apple/TableProTests`, `apple/Plugins` (not `TableProPluginKit`), `apple/TableProMobile` and `apple/TableProUITests` use `only_rules`, so a new rule applies there only once listed.
70 changes: 70 additions & 0 deletions .claude/skills/fix-issue/references/platform-windows.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Platform: Windows

The native Windows app. Every profile has these seven sections in this order, so a value is always in the same place.

## Covers

- A report from Windows 10 or 11, on x64 or Arm64. The issue form's Platform field lists no Windows yet, so the `platform-windows` label or the reporter's own words name it.
- Code: `windows/`, the C# app on WinUI 3 with its interop library, the SQL editor and data grid controls and their tests (`windows/AGENTS.md`, Map).
- The core: the app reaches it through `core/crates/ffi` (`tablepro-ffi`), and a fix lands in whichever core crate holds the cause (`core/AGENTS.md`).
- A fix lands in one or more projects under `windows/src/` or crates under `core/crates/`; name them.

## Base

- Worktree base: `origin/main`.
- Pull request base: `main`.

## Done

- `windows/AGENTS.md`, plus the root `AGENTS.md` principles and writing style it points to. The per-change checklist is its Every change section. Under Claude Code, `windows/CLAUDE.md` loads it once a file under `windows/` is read; read it by path anyway in Phase 0. Codex loads it only when started in `windows/`.
- A fix in a core crate also follows `core/AGENTS.md`, Every change.
- The decisions in `windows/docs/decisions/` bind the app as the guide does: a fix that changes one says so and updates the record.

## Native standard

- WinUI 3 and Fluent, used as the Windows App SDK docs and the Windows design guidance on learn.microsoft.com describe, with the control WinUI or the Windows Community Toolkit already provides before anything drawn by hand (`windows/AGENTS.md`, Principles 2).
- The version floor is Windows 10 1809, build 17763: every Windows project sets `TargetPlatformMinVersion` and `SupportedOSPlatformVersion` to 10.0.17763.0.
- The build catches only part of what lies above the floor. CA1416 fails a call whose projection carries a `SupportedOSPlatform` above 17763. In the Windows SDK projection only some types carry one, none from `UniversalApiContract` 11 on, and Windows App SDK types carry none (`references/research-windows.md`, Windows platform; `windows/docs/decisions/0001-toolchain-baseline.md`, Why runtime checks).
- So an API above the floor gets a run-time check, and the plan names the fallback: `ApiInformation.IsApiContractPresent` or `IsTypePresent` for a Windows SDK API, the type's own check (`MicaController.IsSupported()`) for Windows App SDK behavior. Where CA1416 does fire, it accepts only `OperatingSystem.IsWindowsVersionAtLeast` as the guard, not `ApiInformation`.
- The Windows App SDK, Windows SDK build tools, TerraFX, Community Toolkit and test package versions are in `windows/Directory.Packages.props`; the .NET SDK is in `windows/global.json`; the Windows SDK the projection comes from is the target framework, `net10.0-windows10.0.26100.0`.
- Sources, the API ground truth and how to measure on a Windows runner: `references/research-windows.md`.

## Verify

Pass `--platform windows`, which a Windows shell (Git Bash, MSYS2, Cygwin) picks by default. The .NET steps run in `<tree>/windows`; `core` runs at the top of the tree.

| Step | When |
| --- | --- |
| `build` | always: the solution, with the core built first |
| `test <project> [filter]` | always, for each test project that covers what you changed |
| `test` | before the pull request: every test project in the solution, as CI runs them |
| `core [package] [filter]` | `core/crates/ffi` or a core crate changed; `tablepro-ffi` unless a package is named |
| `bindings` | the FFI crate's exported API, its UniFFI items or `src/window_abi.rs` changed |
| `app` | Windows only: anything under `windows/src/TablePro.App` changed, before `ui` |
| `ui [filter]` | Windows only: the change is visible in the app, or a flow the UI tests cover changed |

- Pick tests by what you changed: `src/<Name>` has its tests in `tests/<Name>.Tests` where that folder exists. `TablePro.Graphics` is reached through `TablePro.DataGrid.Tests`, and `TablePro.Editor` and `TablePro.App` through the UI tests. A core crate has its tests in its own folder.
- On macOS or Linux, `build`, `test`, `core` and `bindings` run. `app`, `ui` and `TablePro.DataGrid.Tests` report INCONCLUSIVE there: the pull request's `windows / Windows (x64)` and `windows / Windows (Arm64)` jobs run them.
- There is no lint step: `windows.yml` runs none. `build` is the lint, since `windows/Directory.Build.props` turns on the latest recommended analyzers and the `.editorconfig` style with warnings as errors.
- Extra review pass: none beyond the security pass.
- Traps and remedies: `references/verification-windows.md`.

## Screen

- The screenshots come from the UI tests. `AppSession.Screenshot(name)` saves `<TABLEPRO_UI_SCREENSHOTS>/<theme>/<name>.png`, each test runs once in Light and once in Dark, and each launch gets a data folder of its own, so no real connection shows. A surface no test shows gets a UI test that shows it.
- On Windows, `verify.sh ui` sets `TABLEPRO_UI_SCREENSHOTS` to a folder beside its log and names it in the verdict. The tests take the mouse and keyboard, so leave the machine alone while they run.
- Elsewhere the shots come from CI. `windows.yml` uploads them from each runner as `windows-screenshots-x64` and `windows-screenshots-Arm64`, also when a test failed:
```bash
run=$(gh run list --repo TableProApp/TablePro --branch <branch> --workflow CI --limit 1 --json databaseId -q '.[0].databaseId')
gh run download "$run" --repo TableProApp/TablePro -n windows-screenshots-x64 -D <scratch>/shots/x64
gh run download "$run" --repo TableProApp/TablePro -n windows-screenshots-Arm64 -D <scratch>/shots/arm64
```
- The before shots are the same artifacts from the last CI run on `main` whose `windows` jobs ran. A surface with no test yet gets its before shot from a temporary branch that adds only the test (`references/research-windows.md`, Measuring on the runners).
- When an `AppSession` wait gives up, it saves `failure-<time>.png` beside the shots: look at it before reading the log.

## Ship

- `windows/` has no `changelog.d/` yet, and `.claude/rules/changelog.md` gives a fragment folder only to `apple/` and `linux/`. A change only the Windows app shows adds no fragment, and never one in another app's folder. A core change another app shows adds that app's fragment (`core/AGENTS.md`, Every change).
- Commit scope `windows`, or `windows-<area>` for one area of the app.
- Regenerated bindings ship in the same commit as the FFI change that made them (`windows/AGENTS.md`, Bindings).
- A probe worth keeping becomes a test in the project it measures: `windows/tests/` for the .NET side, the crate's `tests/` for the core. A fact measured on a runner goes in the decision that relies on it, with the run id, as `windows/docs/decisions/0004-app-shell.md`, What the runner showed, does. A temporary branch or workflow never merges.
Loading
Loading