Changelog

Every release, in the words of the person who shipped it. Issue keys link into the public backlog, so a line here can be read all the way back to what asked for it.

Rendered from CHANGELOG.md in the repository. View on GitHub

v0.18.1 — 2026-08-26

The patch where the terminal learned to clean up after itself, written the same day 0.18.0 shipped it.

Closing a terminal closes everything it started. A shell puts a background job in its own process group, so closing a session used to leave sleep 999 & — or a forgotten agent — running forever. The close now walks every process on the session’s terminal, once, while the walk can still be trusted; a measured Linux failure where a second walk found another session’s shell is why it is once (GDK-950).

gadak views open reaches every open window — the CLI’s focus used to be consumed by whichever window polled first, and the window you were looking at stayed put. And two views open in the same second no longer lose the second one: the payload is deduped on what it says, not just when it was written (GDK-960, GDK-981).

The terminal pane says why it cannot open — no PTY on Windows, a token without the terminal scope, a network drop — in words, with a retry, on the web and on the phone from the same source (GDK-944).

gadak keeps a log file, and doctor hands it to you. A Finder-launched app used to discard every diagnostic line; now gadak doctor names the file and quotes its recent errors. Credentials are scrubbed before a line is written (GDK-967).

Also: the agent skill teaches an agent to diagnose the wall it hit and to report the friction instead of silently working around it (GDK-968); a CLI exit path that used to leave a stale “open” marker behind clears it (GDK-971); the hosted demo’s mirror is published as a file you can download and open in your own gadak (GDK-975); and the benchmark tables were re-measured on a quiet machine, on the corpus the demo actually ships. A release audit of this delta ran before the tag — parent GDK-980.

v0.18.0 — 2026-08-26

A terminal, inside gadak. ⌘K → Terminal, or `Ctrl+“. It is a real shell in the same window as your issues — so you can run a coding agent there and watch it move the board next to it. Same terminal in the web tab, in the macOS app, and on a paired phone. Korean composition lands on the cursor, where a terminal canvas does not make that automatic. It ships Beta — useful, and we would rather name the rough edges than hide them (GDK-862, GDK-864, GDK-865, GDK-892, GDK-895, GDK-956).

A token that opens a shell and nothing else. gadak pairing mint --scope terminal is the only kind that opens one; a serve or origin token opens none — though a serve token now reaches the whole mirror REST, not a 13-path allowlist. Revoke a terminal token and the shells it opened close within seconds, and are told why. Loopback still needs no token at all (GDK-863, GDK-883).

The phone app is something you can use. Issues in your own saved views, wiki pages beside them, search that shows page hits, an issue detail that lands on the thread, and notifications only for what is actually yours — assigned, mentioned, reopened. It reaches the terminal too, over a second token, and unpairing forgets that shell too. Internal TestFlight builds ship in one command (GDK-805, GDK-867, GDK-870, GDK-879, GDK-884, GDK-885, GDK-886, GDK-887, GDK-888, GDK-905, GDK-906, GDK-907, GDK-908, GDK-910).

gadak create --type Bug works on a non-English Jira. It used to fail once on every localised site and make you look up the type id. Names, ids, epic/subtask, and a small locale table all resolve now; two matches is a clear error rather than a guess (GDK-741).

The wiki’s scope is stated before you install. It was always opt-in and always per-space — gadak init --spaces ENG,PROD, or Settings → Sources — but nothing said so until you had already installed and run a sync. Someone told us they had not tried gadak because a whole Confluence looked like too much to mirror. It never was (GDK-964).

The changelog you are reading is on the site now, in both languages, rendered from the repository rather than copied — plus the search-engine basics the site never had: canonical links, a sitemap, and structured data for the releases.

Smaller things. A dashboard link opens an issue without losing the wall (GDK-880). gadak open no longer scans ports to find a running serve (GDK-859). WebSocket upgrades are origin-checked (GDK-860). One stale cached row can no longer blank the whole UI (GDK-835). gadak dev --help lists every verb it has, and gadak pairing lists, like every other list command (GDK-946, GDK-947). The agent skill now carries a complete, working dashboard example instead of pointing at a file that was never installed beside it (GDK-963).

v0.17.3 — 2026-08-25

The phone stopped being a skeleton. A paired iPhone reads your mirror over its own serve pairing scope — a one-way door, so that token cannot ride the origin passthrough and an origin token cannot dump the mirror — and pairing mint works on a connected workspace. On the phone: a quiet queue as the first screen with real status names, pairing that proves the connection it claims and explains each failure, search that answers before you type (recent searches, your saved views as chips), an issue detail whose comment draft survives a failed send, and notifications only for assigned, mentioned and reopened — silent while you are looking at the app (GDK-796, GDK-797, GDK-798, GDK-799, GDK-800, GDK-801, GDK-802, GDK-837).

Spacing, layout and type are yours too, not just colour. ui.tokens grew three more axes, and setting one no longer risks the rest — each is a key-wise merge, so a bad write leaves the config untouched. One token is a path of its own: gadak config set ui.tokens.type.terminal 15px, no JSON and no quoting, with an unknown name refused rather than stored as a typo. gadak config get ui.tokens.dim-catalog lists every name with its default, its range, and what it has to move together with (GDK-842, GDK-849, GDK-850, GDK-852, GDK-853).

Your look is yours: validation warns and saves instead of refusing. Contrast, colour distance, deuteranopia and the token relations all still run and still tell you what you are about to get — but only what the machine genuinely cannot honour is rejected. The warnings carry the next move, not just the diagnosis: a contrast line names the palettes that fail and where to fix them, a type line prints the whole ladder that has to move together. The way out of any look is always one CLI line (GDK-856, GDK-857, GDK-858).

A dashboard link can open an issue. A wall can now navigate the app to any of its own routes — an issue, a saved view, a filtered list, a search — and an external link opens a new tab instead of replacing the wall (GDK-854).

v0.17.2 — 2026-08-25

Your agent can build you a dashboard. One HTML document plus named queries, saved like a view and rendered full-tab in the running web UI. The host runs the SQL (or JQL) and hands the rows in; the page itself never reaches the network. Saving re-renders an open tab in about a second, and new mirror data re-pushes on its own. Charts work offline — uPlot ships inside gadak, so there is no CDN and no loosened policy (GDK-781, GDK-782, GDK-792, GDK-793).

And any chart library you want, downloaded once. gadak dashboards lib add <url> fetches a library, pins its hash, and serves it locally — re-hashed on every request, so a file tampered with after the fact fails closed instead of running. Dashboards name the libraries they use; ones that do not are unaffected. three.js stopped shipping inside the binary and became the documented example instead, which is 750 KB off every download (GDK-808).

Colours are yours. ui.tokens, ui.tokensByTheme and ui.dataColors let you repaint the window, with ui.tokens.catalog to discover the names. Writes are checked against the same contrast rules the shipped palettes had to pass, an open tab repaints without a reload, and a boot cache means a customised install never flashes the default palette first (GDK-785, GDK-786, GDK-787, GDK-791).

gadak sql stopped answering from a stale copy. An unprefixed table name now falls through to the live local.db rather than a snapshot frozen at migration time, which had been answering quietly and wrong (GDK-824).

The staleness warning names which source is stale. mirror last synced 154h ago came from the oldest row across every source, so one quiet Confluence space made the whole mirror read as six days old while status showed a watermark ten minutes back — two screens, opposite stories, no way to tell which to believe. It now names the source and prints the same timestamp status does (GDK-810).

A page id you read is a page id you can write to. Search prints it, the JSON help admits pages exist, and the agent recipes emit the id the origin actually accepts (GDK-816).

Two typos the CLI used to swallow. gadak create GDK "…" filed an issue whose title began with a project key; it is now refused with the --project spelling, and only when the first word really is a key this workspace knows. config set projects accepted any string; keys are shape-checked, the site is asked whether they exist, and status and sync name both sides of a scope that has drifted (GDK-594, GDK-809).

Smaller things. A dashboard can no longer paint over the issue list (GDK-815, GDK-821), and it answers Esc like everything else (GDK-827). A collapsed documents tree stays collapsed across a sync (GDK-817). The feed takes the column instead of overlaying it, so Esc from the feed lands on the list. Fourteen error messages across three languages now name the next move rather than only the problem (GDK-828, GDK-829, GDK-831). The excerpt a list shows and the text search indexes come from one place, so they cannot drift apart (GDK-814).

v0.17.1 — 2026-08-24

The patch where the mirror learned to share. A day of using gadak on a 20,000-issue mirror found every way two gadak processes could end up waiting on one file.

A standalone workspace keeps its record in SQLite. The embedded tracker writes to origin/issuetap.db, one transaction per write, instead of rewriting a whole YAML file on a timer. An existing YAML seeds it once and is left alone as your rollback; export still speaks YAML. Backup is that file: stop the app and copy it, or use sqlite3 .backup while it runs (GDK-202).

“Database is busy” tells you who is holding it. A write that reached Jira no longer fails just because the local re-read collided with another process, and a genuine refusal names the neighbour — another app, a serve, a CLI — instead of an error code. gadak doctor lists them. Browsing history took its own connection, so reading no longer queues behind a sync, and an agent’s reads wait politely rather than failing instantly (GDK-740, GDK-753, GDK-754, GDK-757, GDK-755).

Faster where it was slowest, measured at 20k issues. gadak issue KEY reads that one key instead of loading the mirror. search --jql resolves people narrowly, on the CLI and on the server. doctor samples instead of scanning every document (GDK-747, GDK-748, GDK-749, GDK-756).

Exclude works on every filter. A ⊘ on any value in any picker (Alt-click too), replacing a modal toggle that only some menus had. Copy JQL writes not in where JQL can say it and tells you which axes it left out, and search --jql matches the same negations (GDK-771).

Narrow windows stop clipping. An audit of every seam below 1100px closed three: a chip that would not hide, row columns cut mid-character, and a minimum width that disagreed with the layout it was supposed to describe. A CI check keeps all three closed (GDK-758, GDK-766).

On gadak.dev: a Korean browser is offered the Korean page — a suggestion, never a redirect, and it remembers your answer (GDK-770). Plus llms.txt for agents reading the site, and landing media that shows the product at readable scale instead of full-screen video (GDK-751, GDK-752).

v0.17.0 — 2026-08-23

The cycle where an agent’s writes grew up. An issue shows the code that implements it, the write verbs learned what a coding agent actually sends, and a workspace stopped being something you re-select on every command.

An issue knows its pull requests. PRs, commits, deployments, builds and the people on them, mirrored from a connected site and writable on a standalone one. gadak dev scan sweeps a repository’s PRs into an issue in one pass, gadak dev link writes one, and the web opens a GitHub link in-app. Those links survive the next sync. When the panel is empty it says why (GDK-495, GDK-496, GDK-497, GDK-527, GDK-531, GDK-536, GDK-537, GDK-538, GDK-539, GDK-540, GDK-541, GDK-555, GDK-562, GDK-589, GDK-592). Issue links are no longer a reason to leave the app: gadak link A B --type blocks, or the detail panel (GDK-19, GDK-85).

Write verbs that do what a project requires. create and edit take --field alias=value for required custom fields, and the create dialog learns what this project and this issue type actually demand. transition carries --resolution, --field and a comment. edit writes fix versions and components by name. assign takes a name or an account id, not only an email. A wrong-typed field is refused rather than written as an empty string. A rejected parent lists the epics you could have picked (GDK-254, GDK-330, GDK-509, GDK-513, GDK-514, GDK-515, GDK-516, GDK-517, GDK-635, GDK-643).

A write that reached Jira counts as a success even if the local re-read right afterwards did not (GDK-740). Bulk reads take many keys, or --keys -, with nothing silently dropped (GDK-328, GDK-425). gadak claim KEY takes an issue in one move, and gadak issue shows how long the work sat — wait 3d · progress 5h (GDK-591).

Writes carry who made them. GADAK_ACTOR names the agent, and the web marks bot work with a badge, so a machine’s edit is not indistinguishable from yours. A standalone workspace speaks your language, and a restricted issue looks different from a public one (GDK-519, GDK-586, GDK-588, GDK-590, GDK-593, GDK-597).

A workspace stays chosen. gadak workspace use <name> stores a default. Pairing tells the truth about what it is and what failed, a bound workspace cannot be quietly repointed at a different site, and replacing an origin takes its derived rows with it (GDK-418, GDK-433, GDK-449, GDK-452, GDK-453, GDK-490, GDK-561, GDK-677, GDK-678).

Korean search finds the word inside the compound. Plus: fix versions keep their ids and the project’s release catalog reaches the mirror, sprint is a column you can query, and JQL parent = / parent IN filter locally (GDK-259, GDK-444, GDK-518, GDK-521, GDK-532, GDK-329).

rm gadak.db no longer costs you anything. Saved views, visits and search history moved out of the mirror, which is supposed to be the throwaway half (GDK-105).

For agents. gadak pick chooses work. gadak recents walks back what the CLI has read. gadak sync --if-stale 15m is the session opener an agent can call blind. Batch writes answer per key, honestly. Closing an issue is one round trip that is safe to retry (GDK-500, GDK-501, GDK-502, GDK-503, GDK-598, GDK-599).

The window, made consistent. Esc closes the thing it was aimed at and nothing else. Four type sizes and nothing between them. Empty is a state with words, not a blank. A transition that needs a screen asks inline; components and parent edit in place; a story shows its children. There is one kind of saved view. A read that finishes quickly paints no skeleton at all. And a full Japanese catalog (GDK-83, GDK-86, GDK-121, GDK-129, GDK-130, GDK-316, GDK-437, GDK-604, GDK-613, GDK-617, GDK-626, GDK-737, GDK-738, GDK-739).

Desktop. A second launch raises the window you have instead of starting a rival. On Windows: gadak:// links work, install-cli speaks Windows, and the app stops claiming it notified you when it did not (GDK-349, GDK-350, GDK-351, GDK-353, GDK-658, GDK-700).

Network, audited. An empty host counts as a non-loopback bind, so serve demands --allow-remote for it like any other exposure (GDK-542). Linear’s rate limit is a retry rather than a death, and a Linear-only workspace is a configured workspace (GDK-263, GDK-654). The Web Push client is gone: it called endpoints the server answers 404 to, and vendor push services are outbound traffic this project does not make (GDK-711).

gadak’s own backlog is public, at gadak.dev, with a front door and a demo beside it — and a page explaining that Windows warning (GDK-211, GDK-389, GDK-676).

v0.16.1 — 2026-08-20

The release that finishes what 0.16 started.

Linear is a third tracker, and gadak writes to it. A "linear" block in your workspace config and gadak sync --source linear mirror issues, comments, labels and attachments. Writes route by whichever origin owns the row, and what Linear cannot do yet refuses honestly instead of half-applying. Jira, standalone and Linear all answer the same write verbs (GDK-263, GDK-359, GDK-360, GDK-361).

The wiki stops being read-only. Create a page, edit its title or body, comment on it — all through the origin, from the CLI or the REST API (GDK-344, GDK-380, GDK-381, GDK-382).

Two gadak processes stop fighting over a standalone workspace. The desktop app advertises its origin the way serve does, so an app and a CLI cannot both hold the record file. An acknowledged write is on disk before you get the answer, and a write that could not be persisted fails instead of pretending. A standalone failure no longer reports itself as a missing credential, and converting a workspace says what conversion actually does to your local-only issues (GDK-241, GDK-333, GDK-340, GDK-342, GDK-343, GDK-345, GDK-346, GDK-347, GDK-348).

Agents learn that standalone exists. The embedded skill knows the word, the CLI says which origin it means, and transition names each target’s status_id — and accepts the one the read path just handed out, which is the loop an agent kept failing on. issues_full gained description_text, and a standalone init fills the mirror so nothing starts empty (GDK-239, GDK-312, GDK-313, GDK-363, GDK-364, GDK-365, GDK-366, GDK-367, GDK-368, GDK-371, GDK-376).

Docs that stop contradicting the product. The install page admits standalone exists, the FAQ stops telling you to rm -rf ~/.gadak, the network gets its own page, and export/import finally has a paragraph (GDK-271, GDK-372, GDK-373, GDK-374, GDK-375, GDK-601).

v0.16.0 — 2026-08-19

The release where gadak stops needing an Atlassian account to be useful, stops needing a Mac to run, and stops being read-only about the fields people actually triage by.

A workspace without an Atlassian account. Standalone: the origin is a minimal tracker that runs inside gadak and travels with it. The mirror is still a disposable cache and every write still goes through the origin — the only change is who the origin is. A workspace is bound to one origin, so connecting a credential cannot quietly repoint it somewhere else. Standalone wikis write through the same path (GDK-183, GDK-237, GDK-238, GDK-247, GDK-267).

Windows and Linux. Windows gets a portable pack, an installer path, a working install-cli, a Scoop manifest, and gadak:// links that survive first launch. Linux gets a tarball install beside brew and an AUR packaging kit. Omarchy gets a bar widget showing what changed in your mirror (GDK-115, GDK-116, GDK-208, GDK-209, GDK-225, GDK-229, GDK-246, GDK-293).

Edit an issue where you read it. Due dates set and cleared from the detail panel, with Jira’s refusal shown as a sentence you can read. Descriptions edit as plain text, with a guard before anything rich gets destroyed. p opens a priority menu wherever s/a/l already work. What is editable comes from the issue’s own metadata rather than a fixed list, so your site’s custom fields are included (GDK-82, GDK-223, GDK-249, GDK-250, GDK-251, GDK-322, GDK-323, GDK-331, GDK-332).

The palette can file an issue from whatever you just typed, required fields with obvious answers stop being questions, and posting a comment finally tells you it landed (GDK-217, GDK-218, GDK-300, GDK-301, GDK-302).

A non-English Jira stops silently returning nothing. Status, priority and issue type key on ids and categories everywhere instead of display names — status = 'In Progress' is zero rows on a Korean account, and that class of quiet wrong answer is closed (GDK-161, GDK-248, GDK-272, GDK-275). Korean mid-compound search works too (GDK-259).

Updates that tell you, and do not act. gadak notices a new release, says the right thing for your platform, and renders the notes in the app. It never updates itself (GDK-213, GDK-214, GDK-215, GDK-216).

Smaller things. A cold open no longer serialises everyone behind it, a contended write waits instead of dying instantly, and a background sync stops outliving the server that started it (GDK-270, GDK-282, GDK-305). The hosted demo opens on the product, and feedback channels live in Settings and the macOS Help menu (GDK-335, GDK-336). A read-only Linear client landed as groundwork, deliberately not wired to workspaces yet — that is 0.16.1 (GDK-258, GDK-261, GDK-263, GDK-274).

v0.15.2 — 2026-08-17

The release where settings stop being a screen.

Every field the settings dialog edits is also a CLI verb. gadak config list | get | set and the settings API go through one table, so they cannot disagree — which means an agent can set up a workspace end to end. Themes live in the workspace config file, so picking one in the UI and setting it from a terminal are the same act (GDK-190, GDK-193).

Three darks, and one of them is yours. dark is a neutral-cool charcoal, ink is a new blue-black, and ember keeps the previous warm dark exactly as it was (GDK-190).

Smaller things. A bare number finds that issue in any project, on every search surface (GDK-186). The settings dialog stops repeating its mirror block above every tab (GDK-188). Menus stopped installing things behind your back — Settings → Integrations does that, and says what is already installed (GDK-189, GDK-191).

v0.15.1 — 2026-08-17

v0.15.0 — 2026-08-17

The release that opens gadak outward. A view or an issue is a link any app can hand over, search is fast enough to sit under someone else’s keystroke, and there is a dark theme built to the same standard as the light one.

A piece of gadak travels as a link. gadak:// deep links, with every place in the app addressable — and gadak produces the links it consumes: a copy-link action in the UI, gadak issue KEY --link on the CLI (GDK-119, GDK-124, GDK-163, GDK-164).

Search fast enough to drive another app’s UI. Typing an issue key finds that issue; on a 20,000-issue mirror the worst case went from 1.6s to 110ms. That is what makes a launcher extension feel local (GDK-117, GDK-166, GDK-170).

An issue can name its parent. gadak create --parent and gadak edit --parent write the sub-issue relationship through Jira (GDK-19, GDK-86).

A dark theme, done properly. Warm ground, ink foregrounds, the same paper metaphor as light, and no flash on first paint. Both palettes clear the same measured floors: status colours stay distinguishable in normal and colour-blind vision, and success and failure are never told by colour alone (GDK-154, GDK-156, GDK-157, GDK-158, GDK-159, GDK-162, GDK-171).

The list behaves like a list. The right side of a row is a column you can scan, the last row stops being cut in half, Esc closes what you are looking at, and a panel that covers the list says so (GDK-128, GDK-131, GDK-132, GDK-133).

Korean typing stopped fighting the search box. A half-composed syllable is not a query, and chosung matching is gone product-wide — it was matching things you did not mean (GDK-168, GDK-169).

Honesty at the edges. The hosted demo stops advertising verbs it cannot answer (GDK-52). A read-only home is a warning, not a refusal to start (GDK-149, GDK-173). Copy means copied, an attachment is fetched at most once, and the desktop app stops loading its runtime twice (GDK-150, GDK-177, GDK-178).

v0.14.2 — 2026-08-16

The release about the first ten minutes, and the day your token dies. Nothing here is a new capability so much as an existing one that finally tells you what it is doing.

Every token trap is named before you paste, not after the 401 — and a rejected token is recoverable without having to write anything first (GDK-68, GDK-69, GDK-98). Expiry is warned about before the sync dies (GDK-67).

Picking no projects is a choice, not an unfinished form (GDK-99).

gadak skill install treats an upgrade as an upgrade, and the embedded skill knows the verbs the CLI actually has (GDK-91, GDK-92).

A quiet wiki costs almost nothing to sync — a tick over an unchanged Confluence reads zero page bodies (GDK-113).

gadak issue <KEY> --derive shows where the derived columns came from (GDK-111).

Smaller things. History keeps its order (GDK-26). gadak sql warns on a stale mirror (GDK-90). Opening a mirror repairs a search index this build cannot write (GDK-112). The browse pane yields to Escape (GDK-78). Search help works on touch (GDK-53).

v0.14.1 — 2026-08-15

One day of using gadak on gadak’s own backlog, shipped as it landed.

The first CLI write verbs: gadak create, gadak attach, gadak edit.

The macOS app is notify-only. The in-app self-updater — never exercised, never earned — is gone, and this release deliberately ships no desktop zip (GDK-58, GDK-61).

The hosted demo works where people actually tap it: inside in-app browsers, with a first paint readable at phone width (GDK-23, GDK-51).

Failures say what happened. A truncated key list says how many were dropped, and a rejected credential stops the watch loop for every source rather than one (GDK-24, GDK-35, GDK-48). Priority colours read the rank, not the account’s language. Keystrokes during boot are held rather than dropped (GDK-46, GDK-76).

v0.14.0 — 2026-08-15

The release about trust: surfaces that fail loudly instead of silently, docs that match the code, and measured numbers instead of adjectives.

The first agent call succeeds, or says why not. gadak_search takes query, every tool error starts with ERROR: and echoes the keys it got, and a response over the size cap sheds the oldest comments and says truncated rather than lying about completeness.

Three things are a promise you can build on: issues_full plus the RECIPES queries, gadak sql stdout, and views open --keys -.

gadak export / gadak import round-trip what you would actually miss — saved views, watches, favourites — carrying no credentials and no site URL.

Numbers, with the rows where gadak loses. Measured against a live 2,853-issue Cloud project: 42× on a simple filter, 162× on an epic GROUP BY, and a reopen count that takes about twenty minutes over REST against 14.5 ms locally.

brew install midagedev/tap/gadak is the app now; gadak-cli is the CLI-only formula. Plus a Korean README, and a settings dialog that stops claiming things about project selection that were not true.

v0.13.0 — 2026-08-14

The release that puts search, history and the agent’s window in one place.

One search box that searches everything. ⌘K queries every issue and document in one index, ignoring the filter chips on the list. The box above the list keeps its old job: narrow what is already there.

History is a file beside the mirror. Issues, documents and searches on one timeline in ~/.gadak/local.db — so throwing away the mirror does not throw that away, and an agent can join what you visited to what you have in a single gadak sql.

The window follows the agent. An arbitrary set of issue keys is a first-class view, so gadak views open --keys - puts an agent’s answer on your running window. gadak views open opens in gadak; gadak open leaves for Jira. Hosts without a shell get the same through a new MCP tool.

Paste a Jira URL, get the filters. A navigator URL or a jql= clause applies the matching chips, Copy JQL is the way back, and anything in the unsupported subset is listed rather than silently dropped. Your Jira saved filters show up in the sidebar, and gadak views lists, shows, opens and saves them.

Wiki scope became real. Each Confluence space carries its own watermark, a newly selected space backfills in full, and a space that leaves the scope is removed.

People are matched by account id, not by email. Person filters no longer depend on your site making email addresses visible (#1, thanks @elppaaa) — across JQL, saved views, filters and the member directory.

The macOS window can be dragged (#2, thanks @wafe).

Smaller things. Comment-only wiki edits reach the mirror, an unchanged page stops bumping its version, and a deleted issue is tombstoned by a single-item sync. An unknown --profile errors with the real list. A failed mirror re-read after an upload returns the documented error instead of pretending.

v0.12.0 — 2026-08-13

The look-and-rename release. gadak is a strand (가닥): uncoated paper, sumi ink, one 쪽빛 thread.

Paper, not a dark dashboard. The mark is 가 drawn as two strokes. The crystal-ball dashboard and the TUI are gone.

Renamed to gadak — binary, home directory (~/.gadak), environment prefix (GADAK_*), MCP tools, module path and desktop bundle id. An existing ~/.scry tree is renamed on first launch, and SCRY_* is still read wherever the GADAK_* equivalent is unset.

Labels and priority became things you change. Labels stay visible on the list, edit on the issue, and apply to a selection from the bulk bar (l, beside s and a). Priority writes by id from the site’s own catalog. The title is editable.

Workspaces work in the desktop app, and every workspace with a credential gets its own sync loop.

Document lists stopped freezing on a large mirror — 4,433 ms to 68 ms on a 10,000-page window.

Smaller things. The native title bar is gone; window controls moved into the sidebar. gadak skill install embeds the Claude Code skill without needing MCP, and gadak install-cli puts the running binary on your PATH. gadak doctor prints redacted diagnostics you can paste into a bug report. gadak api is the raw Atlassian REST escape hatch, refused at a foreign host.

v0.9.0 — 2026-08-06

The people-and-visual-foundation release. A name in ⌘K opens a person, every search hit says why it matched, and the chrome finally sits on one type scale and one orb.

v0.8.0 — 2026-08-06

v0.7.0 — 2026-08-06

The release that pins an agent to the right mirror and puts a face on the product. MCP install writes the current profile into the host, the local API stops being an open proxy, and the README leads with the live demo.

v0.6.0 — 2026-08-06

The wiki release. Confluence pages join the items spine, show up in the web UI and the TUI, and issues grow an honest epic hierarchy.

v0.5.0 — 2026-08-05

v0.4.0 — 2026-08-05

v0.3.0 — 2026-08-05

v0.2.1 — 2026-08-05

v0.2.0 — 2026-08-05

Team config sharing, a zero-install hosted demo, a personal watch feed, and the storage schema plus the HTTP, sync and agent contracts.