A small helpdesk system: an office Pixel running a patched GrapheneOS Dialer answers technician calls, records both call legs as separate channels, and a Ruby backend transcribes them through Whisper and files an AI summary against the caller. Squashed to a single commit for sharing. No credentials are included; secrets live outside the repo in /etc/helpdesk/env on the server or a gitignored .claude/env.local locally. See .claude/env.local.example for the shape. Start at README.md, then docs/architecture.md. |
||
|---|---|---|
| .. | ||
| patches | ||
| apply.sh | ||
| README.md | ||
Helpdesk sepolicy patch (GrapheneOS system/sepolicy)
Declares a private helpdesk_prop property type so the patched Dialer (priv_app) can READ its backend
config (ro.helpdesk.* / persist.helpdesk.*) and shell can SET it (live re-pointing on dev builds).
Without this, custom *.helpdesk.* props get default_prop context which priv_app cannot read, so the
persist/ro pin never applies (confirmed on-device 2026-07-09: avc + priv_app_36 can't read default_prop).
Apply into the tree before building: bash components/sepolicy-patch/apply.sh
(applies patches/0001-helpdesk-prop.patch to /build/grapheneos/system/sepolicy). Validate with
m selinux_policy (runs the neverallow/treble/freeze checks). Declared PRIVATE (private/property.te) so it
doesn't trip the public-policy freeze/treble tests.