No description
Find a file
Barrett Ruth 0cf3d29972 fix(oauth): resolve re-auth deadlock and improve flow robustness (#87)
* fix(oauth): resolve re-auth deadlock and improve flow robustness

Problem: in-flight TCP server held port 18392 for up to 120 seconds.
Calling `auth()` again caused `bind()` to fail silently — the browser
opened but no listener could receive the OAuth callback. `_wipe()` on
exchange failure also destroyed credentials, forcing full re-setup.

Solution: `_active_close` at module scope cancels any in-flight server
when `auth()` or `clear_tokens()` is called. Binding is guarded with
`pcall`; the browser only opens after the server is listening. Swapped
`_wipe()` for `clear_tokens()` in `_exchange_code` to preserve
credentials on failure. Added `select_account` to `prompt` so Google
always shows the account picker on re-auth.

* test(oauth): isolate bundled-credentials fallback from real filesystem

Problem: `resolve_credentials` reads from `vim.fn.stdpath('data')`,
the real Neovim data dir. The test passed only because `_wipe()` was
incidentally deleting the user's credential file mid-run.

Solution: stub `oauth.load_json_file` for the duration of the test so
real credential files cannot interfere with the fallback assertion.

* ci: format
2026-03-06 15:47:42 -05:00
.github doc: minify readme (#24) 2026-02-25 09:40:06 -05:00
doc feat(sync): unify Google auth under :Pending auth (#72) 2026-03-05 21:08:22 -05:00
lua/pending fix(oauth): resolve re-auth deadlock and improve flow robustness (#87) 2026-03-06 15:47:42 -05:00
plugin feat: :Pending auth subcommands + fix #61 (#84) 2026-03-06 12:36:47 -05:00
scripts fix: harden sync backends and fix edit recompute (#66) 2026-03-05 11:50:13 -05:00
spec fix(oauth): resolve re-auth deadlock and improve flow robustness (#87) 2026-03-06 15:47:42 -05:00
syntax refactor: adopt markdown-style checkbox buffer format (#20) 2026-02-24 23:21:55 -05:00
.busted build: add tooling and dev environment configs 2026-02-24 15:08:44 -05:00
.editorconfig build: initial repo scaffold 2026-02-24 15:08:35 -05:00
.gitignore fix: harden sync backends and fix edit recompute (#66) 2026-03-05 11:50:13 -05:00
.luarc.json refactor(config): default icons to ascii (#55) 2026-03-04 17:49:30 -05:00
.pre-commit-config.yaml ci: format 2026-02-24 15:17:24 -05:00
flake.lock build: add tooling and dev environment configs 2026-02-24 15:08:44 -05:00
flake.nix ci: nix 2026-03-04 14:07:04 -05:00
LICENSE build: initial repo scaffold 2026-02-24 15:08:35 -05:00
pending.nvim-scm-1.rockspec feat: rename 2026-02-24 15:21:44 -05:00
README.md feat(sync): interactive setup, auth continuation, and credential resolution fixes (#70) 2026-03-05 15:29:32 -05:00
selene.toml build: add tooling and dev environment configs 2026-02-24 15:08:44 -05:00
stylua.toml build: add tooling and dev environment configs 2026-02-24 15:08:44 -05:00
vim.yaml build: add tooling and dev environment configs 2026-02-24 15:08:44 -05:00

pending.nvim

Edit tasks like text. Inspired by oil.nvim, vim-fugitive

demo

Requirements

  • Neovim 0.10+
  • (Optionally) curl for Google Calendar and Google Task sync

Installation

Install with your package manager of choice or via luarocks:

luarocks install pending.nvim

Documentation

:help pending.nvim

Acknowledgements