Attach Remote keyboard injection to approved controlled sessions
Local launch and managed startup now start the incoming-key owner for sessions installed with keyboard-inject, using one input-helper Supervisor retained for the reader lifetime. Delivery rechecks lock, XTerm handoff and internal reader UI in addition to lease, grant and deadline. build-cthulhu.sh and both Arch packages build and install cthulhu-input-helper; a missing helper leaves keyboard input unavailable without affecting startup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c1333c2fdb
commit
27017bef11
13 files changed
+362
-66
No files matched your search
@@ -1,10 +1,10 @@
|
||||
# Experimental Remote keyboard IPC prerequisite
|
||||
|
||||
The protocol 1.1 host recognizes `remote.key`, with public Go types and matching
|
||||
Python validation. Reader code can explicitly attach a bounded incoming-key
|
||||
mailbox. No production input owner is attached: ordinary reader sessions return
|
||||
owner-unavailable, and the external Remote command still discards keyboard
|
||||
payloads. This is not desktop keyboard control.
|
||||
Python validation. A bounded incoming-key mailbox is attached in production
|
||||
for sessions installed with `keyboard-inject`, and the external Remote command
|
||||
forwards controller keys when keyboard control is approved for the session.
|
||||
See the production attachment section below; live acceptance is pending.
|
||||
|
||||
## Wire contract
|
||||
|
||||
@@ -116,7 +116,7 @@ original-epoch cleanup/process-exit barrier; unconfirmed retirement blocks
|
||||
replacement. The quarantined `app.run_remote_keyboard` worker now joins this
|
||||
supervisor to the authenticated mailbox with a required policy callback; see
|
||||
[its lifecycle and native evidence](testing/remote-input-helper.md#quarantined-leasemailbox-worker).
|
||||
No production reader launch or mailbox owner is attached.
|
||||
`start_remote_keyboard` is now its production caller; see below.
|
||||
|
||||
No capture event API, production Xorg input owner or supervised helper attachment,
|
||||
core escape/bypass integration or installed Remote keyboard command is
|
||||
@@ -130,3 +130,25 @@ existing speech regression harness, affected-package vet, a separate reader
|
||||
build and Tentacles `make check`. The lifecycle regression now checks malformed
|
||||
typed keys and keeps its unsupported-operation check on Braille. No full reader
|
||||
suite or native/hardware acceptance was performed; no active reader was replaced.
|
||||
|
||||
## Production attachment (2026-11-06)
|
||||
|
||||
Local launch and managed-session startup now call `start_remote_keyboard`
|
||||
for every session installed with `keyboard-inject`, next to the speech owner.
|
||||
It attaches the mailbox before the child becomes active and runs the existing
|
||||
lease/mailbox worker with one `remoteinput.Supervisor` retained for the reader
|
||||
lifetime, so the uncertainty latch survives session replacement. The helper is
|
||||
`cthulhu-input-helper` beside the reader executable; `build-cthulhu.sh` and both
|
||||
Arch packages now build and install it. A missing helper or a session without
|
||||
the grant leaves `remote.key` owner-unavailable and does not affect startup.
|
||||
|
||||
Delivery-time policy adds reader lock, XTerm-handoff suspension and active
|
||||
internal reader UI to the worker's lease, grant and deadline checks; a denied
|
||||
key revokes the original lease. A clean helper failure retires only that lease
|
||||
and is announced; unconfirmed cleanup is announced as requiring a reader
|
||||
restart. Real SDK-process tests cover delivery and lock-policy retirement,
|
||||
handoff denial before helper launch, and the no-grant and missing-helper cases.
|
||||
|
||||
This makes injection reachable from an approved controlled session. It does not
|
||||
add physical-collision safety, injection provenance, lock/AltGr policy or live
|
||||
acceptance, which remain required before keyboard control is declared ready.
|
||||
@@ -5,7 +5,7 @@ its own process. `internal/remoteinput` supplies bounded private IPC, a separate
|
||||
EOF lifeline, and a three-second heartbeat watchdog. The helper owns its X
|
||||
connection and stored destination-key ledger on one locked OS thread.
|
||||
|
||||
No production reader owner launches this helper or attaches `remote.key`.
|
||||
At this increment, no production reader owner launched this helper or attached `remote.key`. (Superseded 2026-11-06: see [production attachment](../tentacle-remote-keyboard.md#production-attachment-2026-11-06).)
|
||||
Remote's UI still offers experimental speech only and discards keyboard traffic.
|
||||
The ordinary build/install script still builds the reader and Braille helper;
|
||||
this additional executable is source-built by the private test harness only.
|
||||
@@ -164,12 +164,12 @@ and Control on a separate X connection before fresh-helper admission.
|
||||
This launcher is callable only as a quarantined prerequisite. Production reader
|
||||
startup does not construct it, the mailbox has no production native owner, and
|
||||
the normal build/install script still does not install the input helper. No native
|
||||
delivery-time policy or physical collision safety is implied.
|
||||
delivery-time policy or physical collision safety is implied. (Superseded 2026-11-06: see [production attachment](../tentacle-remote-keyboard.md#production-attachment-2026-11-06).)
|
||||
|
||||
### Quarantined lease/mailbox worker
|
||||
|
||||
`internal/app.run_remote_keyboard` now joins an explicitly enabled reader key
|
||||
mailbox to a retained Supervisor. It has no production caller. One worker owns
|
||||
mailbox to a retained Supervisor. At this increment it had no production caller. (Superseded 2026-11-06: see [production attachment](../tentacle-remote-keyboard.md#production-attachment-2026-11-06).) One worker owns
|
||||
one session's mailbox and serially sends its transitions; it creates no extra
|
||||
key queue. Host queued/in-flight budgets remain reserved until helper operation
|
||||
completion or the full cleanup barrier, including uncertain effects.
|
||||
|
||||
Reference in new issue
Block a user