Skip to content

T27 OS: the PTY server reads the keys itself through /usr/bin/security at start and when a spawn finds none, so every pane gets a key without the window - #11278

Merged
gHashTag merged 2 commits into
masterfrom
claude/t27os-srv-keys
Oct 20, 2026
Merged

gHashTag merged 2 commits into
masterfrom
claude/t27os-srv-keys

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closes #11265

T27 OS: the PTY server reads the keys itself through /usr/bin/security at start and when a spawn finds none, so every pane gets a key without the window

Gates run on the merged tree (t27c from master): 2 spec(s) with tests clean and vacuous passes 0, seal --verify MATCH, tri types ratchet CLEAN, dupe_scan failure set a subset of master's (inherited red).

TEST specs/t27os/pty_logic.t27 tests=[37] fail=[0] vacuous=[0]
TEST specs/t27os/keys.t27 tests=[81] fail=[0] vacuous=[0]
SEAL specs/t27os/pty_logic.t27 :: all hashes MATCH
SEAL specs/t27os/keys.t27 :: all hashes MATCH
TYPES RATCHET: CLEAN
DUPE failing=4 extra-vs-master=[]

🤖 Generated with Claude Code

claude and others added 2 commits October 20, 2026 15:04
…ith no window connected still has its key

Measured 2026-10-20 on the bench Mac: after the key store moved to /usr/bin/security
(no Keychain dialog), three Claude Code panes spawned with T27OS_CTL=spawn all showed
"key -" in T27OS_CTL=list. The server learned keys only from the window (OP_SETKEY),
so a pane spawned while the window was not connected, and every pane of a restarted
server, started keyless.

pty_server.t27: load_keys reads every number of every provider through keys_host
kc_get_n (the same /usr/bin/security reader, scan_goes_on) and puts each key in the
table by put_key, the code path OP_SETKEY now shares (extracted, not copied). It runs
once at start, after the socket listens and before panes are restored, so a restored
pane's wait for a key resolves at once; and at a spawn that finds no key for the pane's
agent when the last read is older than a minute. A window's OP_SETKEY still adds and
overrides (the same key again keeps its cooldown). The start prints a count, never a key.

pty_logic.t27: the decisions, with tests: load_all_mask, load_mask_agent (claude: the
four profile providers; others: AGENT_PROVIDERS), load_wants, keys_reload_due,
KEYS_RELOAD_MS, G_KLOAD (table word 228). 34 -> 37 tests; sealed again.

keys_probe.t27 (new, moved from keys_host.t27, not copied): the check button with its
CoreFoundation and Objective-C externs. A module's @extern imports travel with it and
t27b put CFRelease, CFStringCreateWithBytes and NSClassFromString into pty_server.o,
which links libSystem only; keys_host.t27 is now libSystem only. glass_window imports
probe from keys_probe; the server's nm -u lists _posix_spawn and _pipe and nothing from
CoreFoundation.

Refs #11265

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…y at start and when a spawn finds none, so every pane gets a key without the window (Closes #11265)

Merge of master plus sealing, gates run on the merged tree with t27c from master: tests clean with vacuous passes 0, seal --verify MATCH, tri types ratchet CLEAN, dupe_scan failure set a subset of master's.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@gHashTag
gHashTag enabled auto-merge (squash) October 20, 2026 08:08
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-20 08:08:52 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 47
PRs with All Checks Green 3
READY 2
FAILING 47
PENDING 0
NO CHECKS YET 0

These columns do not partition: 2 + 47 + 0 + 0 = 49, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=5aec047d42ec != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

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.

T27 OS keys: read and write through /usr/bin/security (no Keychain dialogs after rebuilds), several keys per provider in the KEYS tab

2 participants