Repository navigation
fix: release readiness — sessions survive outages, Keychain-only tokens, real script timeouts - #2
Merged
Merged
Conversation
…ime out - Launch: only the server refusing the session signs out. Offline, a timeout, a 5xx, or a captive portal keeps the tokens and shows a "can't reach inklet" screen with Try Again; requests no longer wait for connectivity, so the splash reaches it in about 20 s. - Release builds never write tokens to a plaintext file: a Keychain failure keeps the session in memory for that launch, and a file left by an older release is moved into the Keychain and deleted. - Location: add the hardened-runtime location entitlement; weather is off by default and asks for location only when turned on. - AppleScript context capture runs in an osascript child, so the deadline is real (the process is killed) and nothing blocks the main thread. Photos exports live in one temp folder that is emptied at launch, on each summon, after a send, and on sign-out. - Attachments load off the main thread, capped at 10 MiB each and 50 items per send, with the backend's list of accepted types. - Opt out of automatic and sudden termination: the menu bar app must keep its hot key, Services, and run tracking with no window open. - One API host in InkletPresentationKit (still dev.iminklet.com), overridable at build time with INKLET_API_BASE_URL for the app and the widget. - A 401 on History and Quote/0 signs out like everywhere else; Services keeps what was sent while signed out and opens it after sign-in; the OAuth callback accepts exactly inklet://auth/callback. - Settings shows Accessibility status for highlighted-text capture. Drop the unsupported public.image Services type and the unused widget entitlements file; the README lists the URL scheme actually registered. Tests: 49 -> 71 (session restore, OAuth callback parsing, attachment limits, API host).
…ags from main - A first job checks the tag's format and refuses a stable tag whose commit is not on origin/main, before any release is created. Pre-release tags may still come from a branch. - The build checks out exactly the commit that job verified. A manual run takes only the tag and checks its Release exists, instead of building main HEAD under a stale default version. - swift test runs before the signing certificate is imported.
…docs The repository is public. The acceptance notes named the server's IP, its daemon user, how to log in, and an internal tracker; the audit linked absolute paths on one machine. Say what they meant without them.
CLCK0622
force-pushed
the
fix/release-readiness
branch
from
September 23, 2026 02:22
d77f670 to
318ba21
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
A pre-release audit found issues that should be fixed before a stable v0.2.4:
release.ymlcould buildmainHEAD under a tag's name, ran no tests, and would accept a stable tag from any branch.What
fix:com.apple.security.personal-information.location. Weather is now off by default and asks for location only when turned on.osascriptchild process, so the deadline kills it and it never blocks the main thread.NSAppleScriptis main-thread-only and cannot be cancelled.NSSupportsAutomaticTerminationandNSSupportsSuddenTerminationare set tofalse, so the menu bar app keeps its hot key and Services when no window is open.INKLET_API_BASE_URLfor both the app and the widget. The default is stillhttps://dev.iminklet.com.inklet://auth/callback.build(release):resolve-tagjob refuses a stable tag that isn't onmain. Pre-release tags can still come from branches.swift testruns before the signing certificate is imported.docs:removed the server IP, daemon user, login steps, internal tracker URL and absolute local paths from this public repo. They remain in git history.Verification
swift buildis clean.swift testpasses 71 tests (49 before). New tests cover session restore, OAuth callback parsing, attachment limits and the API host../Scripts/build-app.sh debugbuilds a bundle that passescodesign --verify --deep --strict, and its entitlements include the location entitlement.ScriptProcesswas exercised on its own:Still needs a Developer ID-signed build
osascriptchild: it should be attributed to inklet Portal, and a Photos export should leave the UI responsive.