Chart VoidKontrol wayfinding and correct current hidraw evidence

This commit is contained in:
Codex
2026-09-21 05:06:05 +00:00
parent 700b34fb60
commit f90df8aba1
5 changed files with 197 additions and 7 deletions
+36 -2
View File
@@ -6,8 +6,8 @@ Issues and specs for this repo live as Gitea issues. Use the official [`tea`](ht
- **Create an issue**: `tea issues create --title "..." --description "..."`.
- **Read an issue**: `tea issues <number>`.
- **List issues**: `tea issues`; use `tea issues --state all` for all states and `tea issues --format json` for machine-readable output.
- **Comment on an issue**: `tea comment issue <number>`.
- **List issues**: `tea issues`; use `tea issues --state all` for all states and `tea issues --output json` for machine-readable output.
- **Comment on an issue**: `tea comments add <number> "<body>"`.
- **Apply / remove labels**: `tea issues edit <number> --add-labels "..."` / `--remove-labels "..."`.
- **Close**: `tea issues close <number>`.
- **Pull requests**: use `tea pulls create`, `tea pulls <number>`, and `tea pulls checkout <number>`.
@@ -25,3 +25,37 @@ Create a Gitea issue.
## When a skill says "fetch the relevant ticket"
Run `tea issues <number>`.
## Wayfinding operations
The current project is `xavierk/voidkontrol`, with configured tea login
`xavierk`. Pass `--login xavierk --repo xavierk/voidkontrol` when repository
context is unavailable. Use `tea api` for API operations not exposed by a
dedicated command; read the server's `/swagger.v1.json` for its current schema.
- **Map**: the issue labelled `wayfinder:map`. Start by reading its body.
- **Children**: Gitea 1.27.1 exposes issue dependencies but no parent/subissue
endpoint in this server's schema. Give each child `wayfinder:child-of-<map
index>` plus its `wayfinder:research`, `wayfinder:task`,
`wayfinder:grilling`, or `wayfinder:prototype` label. Its body ends with a
named `Parent map` link. This membership convention does not replace native
blocking.
- **Claim**: assign the driving user before work:
`tea issues edit --add-assignees xavierk <index>`. An open issue with an
assignee is claimed. If work stops incomplete, leave an evidence/progress
comment and release the claim with an API PATCH containing `{"assignees":[]}`.
- **Blocking**: POST `{"owner":"xavierk","repo":"voidkontrol","index":<blocker>}`
to `repos/xavierk/voidkontrol/issues/<blocked>/dependencies` using `tea api`.
Create all tickets before adding these relationships. Verify by GET on that
endpoint; each returned issue blocks the issue in the URL.
- **Frontier**: list open issues with the map-membership label, paginate through
all results, discard assigned issues, and GET each candidate's dependencies.
A candidate is takeable when every dependency is closed. Order by issue
creation/index ascending. Use names, with links, when presenting this result.
- **Resolution**: publish the answer as a comment, link any committed research
or prototype asset, close the child, then append one named link and a short
gist to the map's `Decisions so far`. Read the latest map before editing so
concurrent additions survive. The full decision stays on the child.
Canonical starting map:
[Find the way to VoidKontrol v1: complete verified Swarm75 control on Void Linux](https://git.bongbetic.com/xavierk/voidkontrol/issues/1).
+71
View File
@@ -0,0 +1,71 @@
# Swarm75: read-only host and descriptor recheck
Observed on 2026-09-21 during initial VoidKontrol wayfinding. This is discovery
evidence, not an authenticated control session or a hardware acceptance result.
## Findings
| Observation | Evidence |
| --- | --- |
| Host | `/etc/os-release`: Void Linux; `uname -r`: `7.2.6_1`; `getconf GNU_LIBC_VERSION`: `glibc 2.41` |
| hidraw support | `/boot/config-7.2.6_1`: `CONFIG_HIDRAW=y`, `CONFIG_HID_GENERIC=m`, `CONFIG_USB_HID=m` |
| Swarm identity | Both relevant sysfs HID devices report `HID_ID=0003:0000258A:0000010C`, `HID_NAME=BY Tech Kreo Swarm` |
| Input ownership | Both sysfs devices report `DRIVER=hid-generic`; nothing was unbound or grabbed |
| Interface 0 | Present as `/dev/hidraw4` at observation time |
| Interface 1 | Present as `/dev/hidraw5` at observation time; sysfs USB interface suffix `:1.1` |
| Access | Interface 1 node is `root:root`, mode `0600`; desktop-user `test -r` and `test -w` both fail |
| Vendor usage | Interface 1 descriptor includes vendor application collections with usage page `0xff00`, usage `0x01` |
| Descriptor | 240 bytes, SHA-256 `04f6ae259d80ba5828ae7f6b81cdcb2d31acf0b20dc93b473561cd8b3c930ab0` |
The node numbers are observations, not persistent identifiers. Discovery must
reselect and revalidate the matching interface each time.
Parsing the descriptor's report-size and report-count items gives these payload
sizes (excluding the report ID byte):
| Report ID | Input payload | Feature payload |
| --- | --- | --- |
| 1 | 1 byte including padding | — |
| 2 | 2 bytes | — |
| 3 | 3 bytes | — |
| 4 | 15 bytes | — |
| 5 | — | 5 bytes |
| 6 | 7 bytes | 519 bytes |
| 7 | 7 bytes | — |
Report 1 includes three meaningful system-control bits and padding, consistent
with the original specification's description. The descriptor agrees with the
declared report-6 transport size; that agreement does not establish authentication,
command semantics, checksums, firmware identity, or safe persistence behavior.
## Correction to the initial specification
The earlier inference from `modprobe hidraw` was incorrect. Linux declares
[`CONFIG_HIDRAW` as `bool`](https://github.com/torvalds/linux/blob/master/drivers/hid/Kconfig),
so `CONFIG_HIDRAW=m` is not an alternative and a missing standalone module is
not proof that the running kernel lacks hidraw. Current kernel configuration
and existing nodes directly establish its presence here.
## Reproduction and boundaries
Inspect `/sys/class/hidraw/*/device/uevent` and resolve their symlink targets to
identify the Swarm interfaces. Read the selected device's `report_descriptor`
attribute, sum report-size × report-count bits by report ID and main-item type,
and hash the descriptor with SHA-256. Query node properties with `udevadm info`
and inspect access without opening the device for control.
Only kernel configuration, sysfs metadata, descriptor bytes, and filesystem
permissions were read. No feature reports were sent, no normal input events
were read, no permission rules were installed, and no device settings changed.
Ordinary typing continuity was not measured by an interactive acceptance test.
## Evidence still required
- Confirm the physical connection and keyboard layout, including special controls.
- A deliberately scoped official Kontrol authentication and configuration-read
capture for this device and transport.
- Exact framing/authentication/checksum and complete configuration-read coverage.
- Later, explicit reversible write/readback/persistence/restore verification for
every feature advertised as supported.
Tracked by [Obtain authenticated Swarm75 evidence without interrupting normal input](https://git.bongbetic.com/xavierk/voidkontrol/issues/5).