Skip to content

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

Merged
gHashTag merged 7 commits into
masterfrom
claude/t27os-kc-cli
Oct 20, 2026
Merged

gHashTag merged 7 commits into
masterfrom
claude/t27os-kc-cli

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closes #11265

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

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/keys.t27 tests=[81] fail=[0] vacuous=[0]
TEST specs/t27os/pty_logic.t27 tests=[34] fail=[0] vacuous=[0]
SEAL specs/t27os/keys.t27 :: all hashes MATCH
SEAL specs/t27os/pty_logic.t27 :: all hashes MATCH
TYPES RATCHET: CLEAN
DUPE failing=4 extra-vs-master=[]

🤖 Generated with Claude Code

claude and others added 7 commits October 20, 2026 14:00
…red panes wait for their keys (Closes #11241)

The rotation lane's four commits on the T27 OS stack (claude/t27os-keyrot-11241, head 30d60eb), applied onto master, whose copies of these five files equal the stack head the lane built on.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ored panes wait for their keys (Closes #11241)

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>
…s per provider in the KEYS tab

keys_host.t27 no longer calls SecItem*: the ad-hoc-signed window is a new code
identity at every rebuild, so each read asked for the login password again.
It runs /usr/bin/security (posix_spawn, pipes, poll with a timeout, waitpid):
read = find-generic-password -w, delete = delete-generic-password, add = one
line on the stdin of `security -i` (a key never on argv). SIGCHLD is set to
default for a run (editors_host leaves it ignored, which breaks waitpid) and
SIGPIPE is ignored while the line is written; a silent or chatty tool is
killed. Security.framework is no longer linked.

keys.t27 holds every decision, tested: argv building, the add line, the bytes
`security -i` can carry (no space, quote, backslash, control), the exit-status
table (44 = not found; quit is not a command there, EOF ends the session),
output -> key, the scan rule (stop after two misses), and the KEYS decisions
for several keys per provider: next free number, newest key to delete, "full",
per-key check status, "6/7 valid", keys withheld from the server one by one.

glass_window.t27: the KEYS row text and click handler only. add stores the
next free account and never replaces; delete removes the newest key; check
probes every key and keeps one status per key.

Refs #11241

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
master took the rotation PR (#11256, a squash of the branch this one was cut
from), its reseal (#11257), the homes registry (#11261) and csr_map (#11255).
keys.t27 and keys_host.t27 on master are byte-identical to this branch's
base, so this branch's versions are kept whole; glass_window.t27 keeps this
branch's KEYS edits with the #11261 delta applied on top; the two seals
(T27osKeys, T27osPtyLogic) are master's, and the T27osKeys seal is stale for
the changed keys.t27 until it is resealed on landing.

Refs #11241

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…x; keys-orchestration.md says the host reads through security

pty_logic.t27 already imports from keys.t27 and keys.t27 does not import
pty_logic.t27, so the one definition of "where key k of provider p sits"
(p * MAX_KEYS + k) is keys.t27 key_index and pty_logic's private kidx is gone.
dupe_scan --like is silent for both specs. keys-orchestration.md: two rows
now say the host reads every numbered key, up to 8 per provider, through
/usr/bin/security.

Refs #11265

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Master took the glass PR (matte glass, panels narrow the terminal, KEYS foot
rows, the chip click test following those rows). It merges without a
conflict: this branch changes the KEYS row text (status text, add/full word,
profile line) and the click and key handlers; the glass lane changed the
painting and layout, including the foot rows below the key rows.

Refs #11265

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…alogs after rebuilds), several keys per provider in the KEYS tab (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 07:50
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-20 07:51:30 UTC

Summary

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

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).

@gHashTag
gHashTag merged commit 1417e3b into master Oct 20, 2026
31 of 36 checks passed
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