The bundle contains read-only files (e.g. the bundled OpenSSL dylibs), so a
sudo-less 'xattr -dr com.apple.quarantine' fails with Permission denied for
some users. Standardize on 'sudo xattr -dr com.apple.quarantine' in the
README, ROADMAP, the release.yml SIGNING STATUS comment, and the release
notes; AGENTS.md now requires release notes to carry the macOS first-launch
instructions until a Developer ID cert is secured.
* fix: macOS Finder launch (store path, ad-hoc signing, vendored openssl)
- Store::open was resolving 'gridline.db' relative to the working directory;
Finder/LaunchServices launches run with cwd=/ so the .expect() panicked
(exit 101, silent 'app does nothing') before Tauri ever started. Open the
store under app.path().app_data_dir() in setup instead (same dir as the
demo DB), creating the dir when needed.
- Add bundle.macOS.signingIdentity "-" + hardenedRuntime false so the
bundler ad-hoc signs the whole bundle. Previously only the inner binary
got Xcode 16's linker-signed signature, which macOS treats as unsigned:
quarantined downloads showed 'damaged and can't be opened', and after
quarantine removal LaunchServices silently refused to spawn it.
- ssh2 now builds OpenSSL vendored (feature vendored-openssl): the release
binary previously carried an absolute LC_LOAD_DYLIB to the build machine's
/opt/homebrew/opt/openssl@3/lib, which dyld aborted on (and hardened
runtime library-validation rejected even when present).
- README: document the macOS first-launch paths (right-click Open / xattr
for the damaged-error case, re-run after every upgrade).
- release.yml: update SIGNING STATUS comment to reflect ad-hoc signing.
* chore: bump 0.7.8 -> 0.7.9 (release prep)
- Version sync across package.json, src-tauri/Cargo.toml, src-tauri/tauri.conf.json
- version.test.ts / bundle-config.test.ts / docs-coverage.test.ts expect 0.7.9
- README: both download tables -> v0.7.9 asset names; new v0.7.9 changelog entry;
tag instructions -> v0.7.9; MAINTENANCE comment updated
- AGENTS.md maintenance note example -> v0.7.9
- ROADMAP: Shipped (0.7.9) section; Next up retitled (0.8.0) TBD
The releaseAssetNamePattern input was never honored by tauri-action —
the draft release got default versioned asset names (Gridline_0.7.5_*.dmg,
Gridline-0.7.5-1.x86_64.rpm, ...), so the version-free releases/latest
links in the README would 404. Per user decision, drop the dynamic
scheme: both README download tables now link statically to the v0.7.5
assets, with a MAINTENANCE comment and an AGENTS.md checklist entry
reminding to bump both tables on each release. Remove the dead
releaseAssetNamePattern config from release.yml.
Three independent pg-tools step failures on the 5th release run:
- Linux: 'ar: libpgcommon_srv.a: file format not recognized' — parallel
`make -C` tool builds race each other's recursion into src/common
(rm -f / ar crs on the same archive). Pre-build generated-headers +
libpq (which pulls in common/port) serially so the -j tool builds find
the archives up to date.
- macOS x86_64: strchrnul marked 'introduced in macOS 15.4' by Xcode 16.4
fails -Werror=unguarded-availability-new and would crash at runtime on
macOS < 15.4. Force ac_cv_func_strchrnul=no and rename PG16's inline
fallback (pg_strchrnul) so it compiles on any SDK without touching the
system symbol.
- Windows: EDB pg_dump.exe needs libcrypto/libssl/libiconv/libintl/
libwinpthread/liblz4/libzstd/ICU DLLs; copy every bin/*.dll, not just
libpq.dll.
All three verified locally (macOS: full build + tools run from resource
dir; YAML + bash -n for all platform variants).
The per-platform binary-suffix check used
f="$OUT/${b}$( [ platform = windows-latest ] && echo .exe )".
The [ ] test exits 1 when false (linux/macos), and under 'set -euo
pipefail' the failing command substitution aborts the whole step before
any check output — exit 1 right after checksums with no error message.
Replace with an if/else BIN_EXT variable set before the loops.
Verified locally: full script block (checksums -> file check -> sanity)
passes with real pg_dump/pg_restore/psql + libpq, exit 0.
- patchelf was passed '\$ORIGIN' (backslash-dollar inside single quotes),
so the ELF rpath was a literal \$ORIGIN path — the loader never expanded
it and the tools couldn't find libpq at runtime. Use '$ORIGIN'.
- macOS awk program had \$1, which awk rejects as a syntax error; use $1
(verified locally: otool -> install_name_tool -> all 3 tools run).
cp ran from /tmp/postgresql-16.4 after 'cd', so the relative
src-tauri/resources/pg_tools target didn't exist. Use
${GITHUB_WORKSPACE}/src-tauri/resources/pg_tools so copies land in the repo.
CI (release.yml) — pg-tools bundle step failed on Linux/macOS with
'catalog/pg_*_d.h not found': building src/bin/pg_dump directly raced its
generated-headers prerequisite under -j. Fix: run 'make -C src/backend
generated-headers' serially first. Also drop the unrecognized --disable-shared
flag (PG16 client tools link shared libpq) and bundle libpq alongside the
tools — @loader_path rewrite via install_name_tool on macOS, $ORIGIN rpath
via patchelf on Linux — plus a 'tools run' sanity check so a broken bundle
fails the step before release. Windows (EDB download + libpq.dll) already
passed. Verified locally: all 3 tools run from the bundled dir.
Cmd+K palette — selecting a result did nothing visible:
- non-table results set selectedObjectType but never switched the view (the
Objects page only mounts when DbViewerScreen's local currentView ===
'objects'), so nothing happened. Added a store 'requestedView' field that
DbViewerScreen consumes and clears; the palette now requests the right view
('objects' for functions/triggers/sequences/enums/etc., 'db-viewer' for
tables/views/matviews before openTab) so the tab or Objects list actually
appears.
- Added keyboard navigation: ↑/↓ move the highlight (wrapping), Enter picks,
Esc closes. scrollIntoView guarded with optional call so jsdom tests don't
crash on the ref callback.
- Tests: palette select now asserts requestedView; new ArrowDown/Enter,
ArrowUp-wrap, empty-Enter cases; store test for requestedView setter.
* chore: bump version to 0.7.5 (Task 1.1)
* feat(db): pure object DDL/search/depend builders (Task 1.2)
* feat(models): ObjectSearchHit, DependencyInfo, PgToolPaths, tool source fields (Task 1.3)
* feat(backup): bundle-aware pg tool resolution, system-first fallback (Task 2.1)
* feat(objects): schema CRUD commands + integration test (Task 2.2)
* feat(objects): search_objects command (current-schema, all types) (Task 2.3)
* feat(objects): get_object_ddl for all browsable types (Task 2.4)
* feat(objects): pg_depend object dependencies + schema contents (Task 2.5)
* feat(ipc): register object management commands (Task 3.1)
* feat(ipc): frontend wrappers + types for object management (Task 3.2)
* feat(build): declare bundled pg_tools resources (Task 3.3)
* test(capabilities): lock objects capability PG-only for search/ddl/dependencies (Task 3.4)
* feat(ui): Cmd+K object search palette in DB viewer (Task 4.1)
* feat(ui): schema CRUD menu + dependency dialog (Task 4.2)
* feat(ui): copy-as-DDL + dependency view context menu in Objects (Task 4.3)
* feat(ui): dependency check before table drop + bundled-tool status (Task 4.4)
* docs: v0.7.5 release notes + status table + bundled-tools (Task 5.1)
* ci: build/verify bundled pg client tools per platform before tauri build (Task 5.2)
* fix(objects): report pg_rewrite dependencies as the dependent view (pg_class)
pg_depend records view dependencies via the view's internal rewrite rule
(classid = pg_rewrite). The user-facing dependent object is the VIEW itself,
so map that classid to pg_class (name still resolved through ev_class).
Fixes the live-PG integration test object_dependencies_for_table_includes_view
and makes the dependency dialog readable for view dependents.
* test: add idempotent PG integration-test seed script
Seeds the first PG test db (GRIDLINE_TEST_SRC) with the objects the
#[ignore] integration tests assert against: users (+users_id_seq),
products (3 rows), orders (3 rows), order_summary view, audit_log +
get_user functions, user_role enum. Idempotent: DROP + recreate.
* fix(build): regenerate multi-resolution icons + roadmap Keychain item
- icon.ico previously contained a single 16x16 frame (Windows scaled it
up -> blurry taskbar/start-menu icon). Regenerated from the 512px source
via 'tauri icon': ICO now has 16/24/32/48/64/256 frames, icns has full
@2x coverage up to 1024px, PNGs re-rendered from the same source.
- Added icons/icon.png (512px) to bundle.icon so Linux hicolor installs
a high-DPI entry.
- ROADMAP: log the 'Enable Keychain' toggle (currently a form-only
placeholder) under Next up -> Connection & credentials.
* docs(readme): dynamic version-free download links + 3-col table
- release.yml: set releaseAssetNamePattern to '[name]_[platform]_[arch][setup][ext]'
(version-free), so asset filenames are stable across releases:
Gridline_darwin_aarch64.dmg, Gridline_windows_x64-setup.exe,
Gridline_linux_amd64.deb, Gridline_linux_x86_64.rpm, etc.
- README: both download tables now 3-column (OS | Architecture | Download)
and link via GitHub's releases/latest/download/<file> redirect — they
always point at the newest published release, no per-release edits.
- AGENTS.md: releases checklist updated — download links stay version-free.
* docs(readme): platform-per-column download table (macOS | Windows | Linux)
Table now mirrors the release layout: one column per OS with a logo row
and a download-links row underneath. Links stay version-free via
releases/latest/download/<file> (releaseAssetNamePattern in release.yml).
* docs(readme): revert download table to clean image-less 3-col layout
Logo row was hard to read on GitHub dark mode; the plain OS | Architecture
| Download table is cleaner and still uses dynamic releases/latest links.
* docs: correct competitor comparison for DB Pro, Beekeeper, TablePlus
Research-verified the 'Why Gridline vs the alternatives' claims against
vendor docs, pricing pages, GitHub, and release notes (May 2026):
- DB Pro is an Electron app (founder-confirmed), not native; add
TablePlus column to the comparison table
- Fix wrong cells: DB Pro has query/dashboard folders + table tags and
CSV/JSON export on the free tier; object-explorer depth corrected for
DB Pro (tables/views/indexes/enums) and Beekeeper
(tables/views/routines/triggers)
- Reframe differentiators: unlimited-everything framing dropped for
Beekeeper (free tier is already unlimited on tabs/connections/queries);
keep DB-to-DB sync as the genuinely unique feature
- Add a dated 'Competitor reality check' section to AGENTS.md so future
edits don't re-assert inaccurate claims
* docs: add project roadmap, link it from README and AGENTS
New ROADMAP.md is the source of truth for planned work, reflecting the
in-flight v0.7.0 connection-screen-revamp spec (new-connection flow,
full MySQL DB viewer, capability gating, Supabase/Neon presets,
SQLite path mode, tag overflow scroll, styling sweep).
Next-up scope: PostgreSQL object management CRUD with companion
features (schema CRUD, global object search, copy-as-DDL, object
dependencies) and an admin follow-up (users/roles/grants,
VACUUM/ANALYZE/REINDEX). MySQL Objects view explicitly deferred.
Queue: Redis browsing, MariaDB/TimescaleDB, PlanetScale/Turso,
query workbench upgrades (multiple result sets, query cancel,
result streaming, visual query builder), schema/data tooling,
SQLite .dump, schema diff, more export formats.
Planned: BYOK AI, website & docs, rolling UI/UX polish (incl.
onboarding tour, settings import/export, SSH key management).
README roadmap section now links to ROADMAP.md; AGENTS.md Related
Documents + Implementation Status reference it and the v0.7.0 spec.
* docs: release notes reference prod as the production branch
The repo's production branch is prod (feature branches merge back to
prod), not main. Update the release-cut instructions in the README and
the trigger comment in release.yml.
* docs: add robust bug report issue template
Structured .github/ISSUE_TEMPLATE/bug_report.md covering environment
(OS, Gridline version, install type, DB type/version, hosted provider,
connection method incl. SSH/TLS/socket), steps to reproduce, expected vs
actual, screenshots, logs, impact, and workarounds — plus a duplicate
checklist and secrets-redaction note. Referenced from the README
Contributing section.
* docs: drop in-flight branch mention from roadmap; remove unused starter assets
- ROADMAP.md no longer references the in-flight feature branch/spec
(removed at the end anyway when the branch PRs into prod)
- Remove unused Vite/Tauri starter SVGs from public/ (no favicon or
asset references anywhere in the app)
* test: fix stale README comparison-table regex in docs-coverage (5-col table)
* feat: shared INPUT_ROUNDING constant + bump to v0.7.0 (Task 1.1)
* fix: map SQLite file path to host field + provider host detection (Task 1.2)
* test: bump version expectation to 0.7.0 (Task 1.1 follow-up)
* feat: db capability matrix for DB viewer gating (Task 1.3)
* feat: provider tab definitions, Supabase/Neon icons + setup guides (Task 1.4)
* feat(rust): MySQL SQL builders + identifier quoting (Task 2.1)
* chore(rust): sync Cargo.lock to gridline 0.7.0
* feat(rust): MySQL db_connect (SSL + SSH tunnel) + pool variant (Tasks 2.2-2.3)
* feat(rust): MySQL execute_query with wrapped pagination + raw fallback (Task 2.4)
* feat(rust): MySQL introspection + changes-queue editing + DDL (Task 2.5)
* fix(ui): show table toolbar immediately while tab is still loading first data
* feat: gate DB viewer sidebar nav by db capabilities (Task 3.1)
* feat: guard DB viewer views by capability + Redis unsupported state (Task 3.2)
* feat(ui): 2-column provider tab grid (Task 4.1)
* feat(ui): collapsible Supabase/Neon setup guide (Task 4.2)
* feat(ui): SQLite file-path input with Browse (Task 4.3)
* feat(ui): connection metadata row (label + tags/env/folder) (Task 4.4)
* feat(ui): rework GeneralTab (URI + OR + manual) + reduce Detailed form tabs (Task 4.5)
* feat(ui): NewConnectionScreen two-stage flow; remove SimpleConnectionForm (Task 5.1)
* feat(ui): scroll connection-card tag row past 3 tags (Task 5.2)
* style: sweep form controls from rounded-full to rounded-lg (Task 5.3)
* feat(ui): EditConnectionModal parity + managed-preset SSL hint (Task 5.4)
* fix(rust): decode MySQL VARBINARY metadata columns (information_schema/SHOW) as strings
* test: full suite green for v0.7.0 connection revamp (Task 5.5)
* feat(ui): schema dropdown + tables tree loading state while schema tree fetches
* docs: update AGENTS/README/ROADMAP for v0.7.0 (connection revamp, MySQL viewer, gating)