Releases: midagedev/scry
Release list
scry v0.5.0
Highlights
Korean search finds inflected words. FTS5's unicode61 tokenizer treats every Korean conjugation and particle as a different token, so 로그인 used to miss 로그인이 실패했다. Bare search terms are now rewritten to prefix matches ("로그인"*) in both the web UI and the TUI — agglutinated forms match without you thinking about it. Explicit FTS syntax (quotes, *, AND/OR/NOT/NEAR) passes through untouched. Known limit, documented rather than hidden: word-middles (결제 inside 간편결제) still miss.
The TUI came alive. A neon look with an ambient background wave, a shimmering title, and a pulsing active tab — always at rest, never in your way (SCRY_NO_ANIM=1 or NO_COLOR turns it all off, and light terminals skip the background wave). With it:
- Ctrl+K command palette — jump to a tab, an issue by key, a saved view, or an action from one fuzzy prompt.
- Mouse support — wheel to scroll the list and feed, click to select, click again to open, click the tab bar to switch.
- Search-term highlight — your filter text lights up in every matching row.
Workspaces: one process, every profile. scry serve now mounts each sibling profile under /w/<name>/ — full API, reads and write-through, opened lazily on first request. When more than one profile exists, the web sidebar shows a WORKSPACES switcher with the current mirror marked. Two mirrors on one origin never share cache or favorites (storage is keyed per workspace). The trust boundary is unchanged: same loopback listener, same single OS user, and the workspace list endpoint carries site + projects only — never credentials.
Notes
- Releases are now fully automated: the Homebrew formula updates from the release workflow itself (write-scoped deploy key, one repository).
- Upgrade:
brew upgrade midagedev/tap/scry, or grab a binary below. Running installs will notice this release on their own within a day.
scry v0.4.0
Highlights
Edit custom fields from the TUI. Press e on any issue: pick one of your editable fields, then pick a value from what Jira actually allows on that issue — single select for options, multi-select (with current values preselected) for option/version arrays, your member list for user fields. No free-text input anywhere; a clear entry empties the field. The same allowlist and value shaping now drive both the web editor and the TUI (internal/fields).
Update notices on every surface. scry now checks GitHub releases at most once a day (anonymous GET to api.github.com, nothing sent, cached on disk) and tells you when a newer version exists — after scry sync, in scry status (and its --json), as a badge in the TUI header, and as a link in the web sidebar. Opt out with updateCheck: false; dev builds never check.
TUI shows your custom fields. The detail view renders discovered field specs with their labels, and body-role fields (team-specific description/analysis/result fields) as prose sections.
Hosted demo works — or says why not. In-app browsers (Twitter/X, Instagram) block the service worker the zero-install demo runs on; instead of an eternal loading skeleton you now get a clear notice with a copy-link button. The service-worker handshake is raced against a deadline, so restricted WebViews that hang (rather than fail) also land on the notice.
Notes
- The update check is the only network call scry makes besides your Jira site, and it carries no identity. See SECURITY.md.
- Upgrade:
brew upgrade midagedev/tap/scry, or grab a binary below.
scry v0.3.0
The mirror configures itself
Until now, custom fields required a hand-written fieldMap — so in practice
nobody configured them and every board looked half-empty. v0.3.0 removes the
step entirely:
-
Custom-field auto-discovery. The first full sync fetches every field,
groups the site catalog by display name (Jira mints a separate field id per
board template for the same concept — on one large site, 57 of 353 names
carried two or more ids), classifies each field's role and editor from its
schema, and backfills the mirror from the already-stored raw documents with
no re-download. The sync log tells you what it did:fields: discovered 23 custom fields in use — labels, filters, and editors configured fields: backfilled 6,543 issues from the mirror (no re-download) -
Projects are optional.
scry initneeds only site, email, and token.
An empty project list means every project the account can see; the sync
start line shows the total so you can narrow later. -
The UI follows the data. Detail panels show only the fields an issue
actually fills, with Jira's own display names; long-form fields (repro
steps, QA notes) render as document sections, not chips. Filter axes come
from the discovered fields per project scope — a team board is not offered
a QA board's thirty fields.array<option>fields get a proper
multi-select editor, values from Jira's own allowed list. -
Everything stays editable: Settings → Fields in the web UI (edits are
pinned across re-discovery),scry fields --apply, or thefieldsarray
in~/.scry/config.json.
Also in this release
- Readable sync progress —
1,200 / 6,543 (18%)with an upfront count
and elapsed time, instead of a page counter with no denominator. - Sync history — click the sidebar timestamp for recent runs (kind,
changed/deleted counts, errors). Meaningful runs only; no-op polls are not
recorded. - Agent-driven onboarding —
docs/AGENT_SETUP.mdopens with a paste-ready
prompt that lets a coding agent move an existing Jira setup (env vars, MCP
connector) into scry end to end. - The group-taxonomy field is renamed to the neutral
team_group.
Install / upgrade
brew install midagedev/tap/scry # or: brew upgrade midagedev/tap/scry
# or
curl -fsSL https://raw.githubusercontent.com/midagedev/scry/main/scripts/install.sh | shmacOS binaries are signed and notarized. Existing mirrors: run
scry sync --full once after upgrading to trigger field discovery.
scry v0.2.1
Changelog
- 90da3e1 feat(web): demo writes apply locally and say they were not saved
- 2427516 fix(web): the hosted demo now says it is a demo, and stops asking for a token
- 97f220a release: sign and notarize the macOS binaries
Install
After the first public release:
brew install midagedev/tap/scry
# or
curl -fsSL https://raw.githubusercontent.com/midagedev/scry/main/scripts/install.sh | shOr download the archive for your OS/arch from this release, unpack it, and run:
./scry init && ./scry serve --syncThe web UI is embedded — the binary is the whole install. See the README for Docker and source builds.
scry v0.2.0
Changelog
- b511862 assets: generated GitHub social-preview image
- f7e7bf0 chore(media): commit regenerated demo GIF and MP4 assets
- 975b0ac chore(media): freshen the sync clock for recordings only
- 95e6f99 chore(release): Homebrew tap, install script, and install docs
- 0dfb135 chore(release): single self-contained binary is the release artifact
- 0d8fb8a chore(scan): keep the scrub word list out of the public tree
- 4800921 chore(web): English source comments
- 08e1261 ci: add secret and internal-string scan (T7.4)
- c1d9ce3 ci: one tenant scan, not two that disagree
- 5fc6f6d docs(agent-setup): point paste blocks at the issues_full view
- 40a9749 docs(mcp): document MCP path and mark T5.4 done
- e07b90c docs(media): document demo media pipeline and mark binary assets
- 693bc81 docs(plugins): document kind payload schemas from server merge
- ccb1966 feat(bench): 10k fixture generator and server latency benches (T6.7)
- 515a8d6 feat(cli): agent-first commands — issue, search, comment, transition, assign
- 5d48545 feat(cli): init/sync/serve --sync/sql/status/profiles 배선 + --profile 글로벌 플래그
- 37d3a7f feat(cli): install-service and serve syncs by default
- 7daade3 feat(cli): newest-first full sync and scry open
- 9e4f94a feat(cli): non-interactive scry init for agents and provisioning
- 11c0947 feat(cli): per-command help that says what the command does
- 195bfa6 feat(cli): scry demo — 스냅샷 제로컨피그 서빙 (T6.6) + tasks.md 실상 정렬
- 5509cf1 feat(cli): scry fields — which custom fields are actually used
- 7756824 feat(cli): scry snapshot — shareable mirror copies (T6.4)
- 99b72b0 feat(cli): scry team export/import — share views and field mappings
- 41c61d8 feat(config): ~/.scry/config.json 로더 — 자격증명·필드맵·설정화 스키마 공유 지점
- 989e063 feat(config): 멀티 계정 프로필 — --profile/SCRY_PROFILE 로 config·DB 통째 분리
- 18622e5 feat(demo): ship attachment bytes so the offline snapshot shows real images
- 9f81ec0 feat(demo): show attachments in the recording, and seed the test fixture's cache
- b36798f feat(examples): add deploy-status and csv-import plugins
- 1156b8e feat(examples): add github-prs enrichment plugin
- 967e73a feat(examples): demo.db 스냅샷 — 519이슈 데모 미러, 개인정보 스크럽 완료 (T6.5)
- 67e09d6 feat(hosted-demo): zero-install static demo for GitHub Pages
- d6efe4e feat(mcp): add stdio MCP server with four read-only tools
- b7336ce feat(media): add Playwright web UI demo recording pipeline
- fdce32f feat(media): add VHS tapes for TUI and agent CLI demos
- 0eade3e feat(release): add GoReleaser config and tag-triggered workflow
- a873e2a feat(release): add multi-stage Dockerfile for containerized serve
- 0294507 feat(serve): default to the embedded web UI
- dff2526 feat(serve): open the browser once the server answers, --no-open opts out
- 793e563 feat(server): GET/POST feed endpoints, account_id, feed default on
- 31ae6eb feat(server): enrichments 머지 — 플러그인 경계 완성 (task #9)
- 6b675a5 feat(server): favorites live in the mirror, not just the browser
- 293a822 feat(server): read API — bootstrap/delta/detail/search/attachments + settings (G3)
- 888d709 feat(server): split credential_rejected and optional sync mode
- 4e0ba48 feat(server): write-through — Jira 쓰기 + 미러 재동기화 (G4)
- b74bce2 feat(settings): UI for sync intervals and this-mirror panel
- 85a7f92 feat(settings): expose sync intervals and runtime on settings API
- 6149aec feat(store): SQLite 스키마·마이그레이션·파생필드 (G1)
- d344e12 feat(store): compute personal feed from mirror with feed_reads (v4)
- 92a10d6 feat(store): derive reopen_reason and cloned_from (schema v3)
- 3c6e05f feat(store): enrichments 테이블 — SQLite 플러그인 경계 (v2)
- 751304c feat(store): read API 가 막힌 4개 노출 (custom·reporter_email·synced_at·comment body)
- ff16a02 feat(store): schema v5 retention counters and issues_full view
- 20fdd5b feat(sync): Jira connector — full/incremental/reconcile + 파생필드 (G2)
- 0910093 feat(sync): OS desktop notifications after each watch cycle
- 182f9ae feat(tools): seed 도구 Go 포팅 — Python 의존 제거
- 4002ea9 feat(tui): add terminal issue navigator
- 7b78b25 feat(tui): feed focus tabs and saved-view sort/group
- c23f695 feat(tui): feed, help, saved views, watch, narrow layout
- 9a15a86 feat(web): Sync now, credential copy split, offline strip, search errors
- 96fb7b8 feat(web): command palette (Cmd+K)
- 633428b feat(web): first-run onboarding, distinct empty states, cheat sheet, restrained motion
- fde0f06 feat(web): highlight search matches in issue title and key
- b966e2e feat(web): i18n — 영어 기본 로케일 + 한국어 보존 (T0.10)
- 48433dd feat(web): in-tab feed notifications and payload alignment
- 26ed1b5 feat(web): onboarding escapes, detail shortcuts, drafts, search help
- b6b082e feat(web): show Jira call volume in the settings runtime panel
- 04f4d9a feat(web): 설정 다이얼로그 — 프로젝트·기능·그룹·멤버·필드매핑 편집
- a007f8b feat: cache attachment bytes on disk, and inline images in comments
- 376e90f feat: count our own Jira call volume (schema v6, api_usage)
- 7241bfb feat: embed the built web UI for single-binary releases
- f329e42 feat: first-run onboarding — connect, pick projects, watch the first sync
- 4bf8797 feat: scry — 로컬 우선 이슈 트래커 미러 (초기 추출 + 명세)
- e0c8859 fix(build): keep the embed placeholder across vite builds
- 81c7633 fix(ci): restore the embed placeholder and build the UI before the binary
- c3c81f1 fix(cli): stable field aliases and CJK-correct columns in scry fields
- 066e81e fix(fixture): English issue types and resolution; retime the demo recording
- 4b62128 fix(fixture): English status names in the demo snapshot
- a686a91 fix(media): freshen sources.synced_at so recordings do not show a stale badge
- e7ad888 fix(release): keep goreleaser output out of dist/ so --clean cannot delete the embedded UI
- a408314 fix(server): sync_health 메시지를 영어로 — i18n 기본 로케일 정렬 (T0.10)
- 3155082 fix(sync): reporter_email 적재 누락
- b5121e2 fix(tools): 상태 해석을 카테고리 기반 계단식 전이로 교체
- f8eeb23 fix(tui): align columns by terminal cell width, not rune count
- 3fcd27a fix(web): brand the shell as scry
- de47283 fix(web): features 플래그 실게이팅 + stale/카테고리 판정을 계약에 정렬
- cddfdf2 fix(web): unlock write UI from the server credential alone
- 4b4a8dc merge: Playwright E2E 스위트 (grok, e2e 브랜치, T7.3)
- 47682a7 merge: i18n — 영어 기본 로케일 + 한국어 보존 (grok, i18n 브랜치, T0.10)
- ae52976 merge: seed 도구 Go 포팅 (grok, seed-port 브랜치)
- 47999eb refactor(sync): Watch uses the Effective* interval helpers it was written for
- d96ab4d refactor(web): drop the presence stack, unify initials, rename storage keys
- 593bef0 refactor(web): remove login; identity is stored Jira credential
- 583aadb release: do not fail a tag on a missing Homebrew tap token
- ed20fe5 style(tui): align palette, cards, and spinner with web dark theme
- fbd5fc1 test(e2e): Playwright 스위트 — demo.db 픽스처로 브라우저 E2E
- 98bac4d test(e2e): anchor the 519-count assertion to one elem...