Skip to content

clear three backlog items: folder usage strings, seeded Lazygit target, unused public surface - #474

Merged
umputun merged 3 commits into
masterfrom
backlog-fruit
Aug 20, 2026
Merged

clear three backlog items: folder usage strings, seeded Lazygit target, unused public surface#474
umputun merged 3 commits into
masterfrom
backlog-fruit

Conversation

@umputun

@umputun umputun commented Aug 20, 2026

Copy link
Copy Markdown
Owner

Clears three backlog items. None of them changes behavior, and each commit removes its own item file.

Protected-folder usage strings (agterm/Info.plist). The sixteen existing strings cover the
entitlement-gated services and none of the Files & Folders family, so macOS fell back to its own copy and
asked the user why agterm wanted his Downloads without saying. Five strings added in the voice the other
sixteen already use. They gate nothing: agterm can obtain these grants without them, so this repairs no
denial and adds no access, it replaces generic prompt copy with the reason.

Seeded Lazygit example (ConfigPaths.swift). It shipped without --target, and active resolves when
the request reaches the server rather than when the chord captured its context. Custom commands are spawned
detached, so a session switch between keypress and delivery opened the overlay over whatever was selected by
then. Now pinned with $AGT_SESSION_ID, the stable id a custom command already has. This matters more since
the #extend lesson sends new users to File ▸ Edit Keymap…, where they read this example beside the
pinned one in the command reference and got two different answers. The neighbouring Zed and Deploy examples
are unaffected, neither sends a session-addressed request.

Unused public surface (AgentHooksInstall.swift). codexWrapperPath was public with its only caller in
the same file, sitting next to codexWrapperName, which earns its public through AgentHooksInstaller.swift:136.
The item asked for the whole enum in one pass rather than one symbol, and eight more were the same:
piExtensionName, opencodePluginName, rcMarkerBegin, rcMarkerEnd, piExtensionDirectory,
opencodePluginDirectory, wrapperPath, codexHooksBlock. Checked the app target, agtermctlKit and
agtermctl for each; the only consumers are that file and the tests, and a testable import needs no public.
What stays exported is what the app target actually calls.

swift test 2601 in 97 suites, make lint zero findings, plutil -lint OK, and the app target builds
against the narrowed interface. No XCUITest run: nothing here touches UI behavior.

macOS defines an optional usage string per protected folder and falls back to
its own copy when none is present, so the user was asked why a terminal wants
his Downloads and told nothing. The other sixteen strings in this file all
explain hosted-CLI responsibility; these five now say the same thing in the
same voice.

They gate nothing. agterm can obtain these grants without them, so this repairs
no denial and adds no access, it only replaces Apple's generic prompt copy with
the reason. CI pins the entitlement set and asserts nothing here, and confirming
the text renders needs a signed build with fresh TCC state by hand.
`--target` defaults to `active`, and `active` resolves when the request reaches
the server rather than when the chord captured its context. Custom commands are
spawned detached and fire-and-forget, so a session or window switch between the
keypress and delivery opened the overlay over whatever was selected by then.
`$AGT_SESSION_ID` is the stable id a custom command already has for this.

The seed is now what a new user reads next to the pinned example in the command
reference, so the two no longer give different answers. The neighbouring Zed and
Deploy examples are unaffected: neither sends a session-addressed request.
`codexWrapperPath` was public with its only caller in the same file, sitting
beside `codexWrapperName`, which earns its public through
`agterm/AgentHooksInstaller.swift:136`. The two looked alike while only one was
an app-target contract, so a reader had to grep to tell them apart.

The backlog item asked for the rest of the enum in the same pass rather than one
symbol alone, and eight more were the same: piExtensionName, opencodePluginName,
rcMarkerBegin, rcMarkerEnd, piExtensionDirectory, opencodePluginDirectory,
wrapperPath and codexHooksBlock. Checked the app target, agtermctlKit and
agtermctl for each; the only consumers are this file and the tests, and a
testable import needs no public.

What stays exported is what the app target actually calls, so the surface now
answers "app-target contract" rather than "happened to be written public". The
app target builds against the narrowed interface.
Copilot AI lite review requested due to automatic review settings August 20, 2026 22:54

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@umputun
umputun merged commit d54b50f into master Aug 20, 2026
8 checks passed
@umputun
umputun deleted the backlog-fruit branch August 20, 2026 23:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants