tasks: squeekboard is the sole OSK; add 71 (mobile scanner recon) and 73 (self-dashboard)
This commit is contained in:
parent
89cf93f965
commit
c9d40b26e8
8 changed files with 274 additions and 57 deletions
|
|
@ -1,23 +1,29 @@
|
|||
# TASK 17 — Keyboard (stevia) + dictation polish
|
||||
# TASK 17 — Squeekboard + dictation polish
|
||||
|
||||
**Status:** Squeekboard replacement source authored 2026-08-11; parser tests
|
||||
green, full package build and glass proof pending. Stevia remains the active
|
||||
fallback until the new Squeekboard package is installed and survives repeated
|
||||
dismiss/reopen cycles.
|
||||
**Status:** single-OSK cutover installed 2026-08-11. Pixel3Arch CI 1362 built
|
||||
pkgrel 4; the phone runs it as the sole OSK, and the former second keyboard
|
||||
plus process switcher are uninstalled. Commit `3794aa9` advances pkgrel 5 with
|
||||
an explicit in-keyboard Daily/Terminal chooser and removes every dual-OSK
|
||||
living path; CI 1368 and phone installation/glass proof remain.
|
||||
|
||||
## Current decision (2026-08-11)
|
||||
|
||||
One keyboard owns the phone: Squeekboard. The daily layout has a permanent
|
||||
number row plus Fn/numpad; the terminal hint selects the compact terminal
|
||||
layout. Both expose the same first-party dictation action. The old
|
||||
Stevia/Squeekboard switcher and drag-up keyboard swap retire only after the
|
||||
replacement is proven on glass.
|
||||
One keyboard owns the phone: Squeekboard. Ordinary inputs select a four-row
|
||||
iOS-style Daily layout with no terminal modifiers, arrows, Fn layer, or
|
||||
permanent number row. Its mode key opens Squeekboard's own chooser, where
|
||||
Terminal selects the five-row layout with Tab, number row, Ctrl/Alt/Esc,
|
||||
arrows, and Fn/numpad. Terminal input purpose may select it automatically, but
|
||||
the visible chooser is the reliable manual route in either direction. Both
|
||||
layouts expose the same first-party dictation action and an explicit dismiss
|
||||
key. No process is swapped and no shell or pill gesture chooses a keyboard.
|
||||
|
||||
`Pixel3Arch/pkgs/squeekboard` now carries:
|
||||
|
||||
- a `dictate` layout action that spawns packaged
|
||||
`/usr/bin/souveraine-stt`;
|
||||
- daily and terminal layouts with the mic available from their base rows;
|
||||
- Daily and Terminal layouts with the mic available from their base rows;
|
||||
- the Daily mode key and upstream chooser entry that make Terminal reachable
|
||||
without relying on input-purpose hints;
|
||||
- a Cairo-drawn, state-honest mic: restrained violet at idle, three breathing
|
||||
violet bubbles while recording, a rotating broken ring while transcribing,
|
||||
and a red-violet error mark;
|
||||
|
|
@ -29,7 +35,7 @@ No bitmap was imported and no Stevia completion code was reused. Native
|
|||
Squeekboard word completion remains the next layer after the single-keyboard
|
||||
path is stable.
|
||||
|
||||
## Earlier Stevia path (historical, currently installed)
|
||||
## Earlier Stevia path (historical, no longer installed)
|
||||
|
||||
- **stevia is the OSK**, patched to run under Hyprland. Upstream stevia
|
||||
hard-requires `zphoc_device_state_v1` (phoc-private) before creating a
|
||||
|
|
@ -59,7 +65,7 @@ path is stable.
|
|||
|
||||
1. **Dictation UX:** the earlier Stevia implementation established the state
|
||||
contract. Squeekboard now renders that contract directly in the mic key;
|
||||
package and glass proof remain.
|
||||
pkgrel 5 publication, install, and glass proof remain.
|
||||
|
||||
**2026-07-30 progress:**
|
||||
- `souveraine-stt` now writes a 3-state file
|
||||
|
|
@ -82,16 +88,12 @@ path is stable.
|
|||
(200px, no auto-scale). The taller auto value is
|
||||
`['auto-portrait','auto-landscape']` (348px). Applies live, no restart.
|
||||
Not a bug — just record the chosen default so a reflash keeps it.
|
||||
3. **Layouts**: the vendored squeekboard `us+apple` (iOS-style) and
|
||||
`us+hacker` designs are the target *feel*; stevia uses its own JSON
|
||||
layout format (`src/layouts/*.json` in the stevia tree). Porting the
|
||||
iOS layout to stevia is open design work — start from the squeekboard
|
||||
header notes in `SouveraineOS/blueline/squeekboard/`.
|
||||
The target is now explicit: iOS-like letter geometry, a permanent number
|
||||
row, Hunspell completion retained, working language/layout switcher, mic
|
||||
retained, and compact arrows available outside the terminal-only layout.
|
||||
The parked `surfaces/quickshell/assets/keyboard/us.json` number-row draft
|
||||
is input, not acceptance.
|
||||
3. **Layouts**: the vendored Squeekboard `us+apple` reference produced the
|
||||
four-row Daily board. Dense work keys remain a separate Terminal layout;
|
||||
the explicit mode key and chooser connect them inside one process. A
|
||||
permanent number row on Daily is deliberately absent. Native completion
|
||||
remains the follow-on; it must be built in Squeekboard rather than copied
|
||||
from the retired implementation.
|
||||
5. **Hyprland key safety**: Pixel3Arch `a5fdbf6` ships stevia 0.56.0-5 with
|
||||
high virtual eventcodes plus zeroed fallback modifiers. Keep the
|
||||
compositor-collision hammer test (bound letters/digits must never dispatch
|
||||
|
|
@ -104,9 +106,9 @@ path is stable.
|
|||
|
||||
## Context
|
||||
|
||||
- Patches: `Pixel3Arch/pkgs/stevia/0001-make-zphoc-device-state-optional.patch`
|
||||
(Hyprland compat, upstream candidate) and
|
||||
`0002-dictation-key-terminal-arrows.patch` (mic key + arrows).
|
||||
- Retired dual-OSK implementation and its patches:
|
||||
`Pixel3Arch/archive/retired-dual-osk-2026-08-11/`. This is evidence only;
|
||||
no build, overlay, compositor startup, or package workflow reads it.
|
||||
- CLI: `Pixel3Arch/rootfs-overlay/usr/local/bin/souveraine-stt`.
|
||||
- Shell: `souveraine/surfaces/quickshell/modules/settings/SpeechConfig.qml`,
|
||||
`modules/common/Config.qml` (speech block), `settings-phone.qml`.
|
||||
|
|
@ -117,19 +119,20 @@ path is stable.
|
|||
## Acceptance
|
||||
|
||||
Squeekboard raises from ordinary and terminal inputs, types letters/numbers,
|
||||
and survives at least five dismiss/reopen cycles. Its mic key dictates real
|
||||
speech into the focused field and visibly traverses idle → recording →
|
||||
and survives at least five dismiss/reopen cycles. Daily's mode key opens the
|
||||
chooser; Terminal exposes Tab, number row, Ctrl/Alt/Esc, arrows and Fn; the
|
||||
chooser returns to Daily without losing the focused field. Its mic key dictates
|
||||
real speech into the focused field and visibly traverses idle → recording →
|
||||
transcribing → idle; the error state is also forced once. The AI side panels
|
||||
must not dismiss or strand it. Only after that proof may Stevia,
|
||||
`souveraine-osk-switch`, and the shell's keyboard-swap gesture be removed.
|
||||
must not dismiss or strand it. Stevia and `souveraine-osk-switch` are already
|
||||
removed from the live phone; no acceptance path may silently reinstall them.
|
||||
Native word completion is a following acceptance step, not a blocker for the
|
||||
single-keyboard cutover.
|
||||
|
||||
## Connects to
|
||||
|
||||
[[whisper-stt-server]] (the STT backend), TASK-15 (dictation is a network
|
||||
fetcher the idle coordinator must wake for), the stevia patches are
|
||||
upstream candidates (Hyprland compat especially). Under viewtop the OSK's
|
||||
fetcher the idle coordinator must wake for). Under viewtop the OSK's
|
||||
z-order is structurally enforced by the compositor (`ad2b6cb`, TASK-43) — a
|
||||
layer derived from the surface's furniture role, not a layerrule — so the
|
||||
layer-collision class this task fought in quickshell does not arise there.
|
||||
|
|
@ -1,8 +1,16 @@
|
|||
# TASK 24 — Keyboard layout rethink
|
||||
|
||||
**Status:** 2026-07-24 — Casey is not pleased with the current state. The
|
||||
layout needs to be rethought from scratch, not incrementally patched.
|
||||
**Size:** redesign + implementation. **Repo:** `Pixel3Arch/pkgs/stevia`.
|
||||
**Status:** superseded in implementation 2026-08-11 by TASK-17's one-keyboard
|
||||
Squeekboard cutover; retained as the evidence that forced a reference-led
|
||||
redesign. **Repo:** `Pixel3Arch/pkgs/squeekboard`.
|
||||
|
||||
The resulting Daily board starts from the validated iOS-style geometry and is
|
||||
four rows with mic, dismiss, and mode keys. The mode key opens Squeekboard's
|
||||
own chooser; Terminal is a separate five-row layout with Tab, number row,
|
||||
Ctrl/Alt/Esc, arrows, and Fn/numpad. An input-purpose hint may select it, but
|
||||
the visible chooser is the reliable route both ways. Stevia is no longer
|
||||
installed. Remaining glass acceptance and word completion live in TASK-17;
|
||||
do not resume the Stevia patch plan below.
|
||||
|
||||
## Problem
|
||||
|
||||
|
|
|
|||
|
|
@ -69,6 +69,17 @@ stubs is fine. A janky dial is not.
|
|||
- Does not appear over a locked screen with anything personal on it.
|
||||
- Reaches a device by a mechanism that survives the next update.
|
||||
|
||||
## Visual references (recon 2026-08-11)
|
||||
|
||||
- `ay-hooshan/circular-menu` — a ring of Qt Quick Shapes wedges with a center
|
||||
cutout, elastic open animation, per-wedge icon color and click. No
|
||||
screenshots upstream — **unproven visuals**, treat as geometry reference
|
||||
only, not a look to copy. ~664 lines.
|
||||
- `nextsigner/timelineview` — Qt 5.14 "Zooland": concentric-circle chart
|
||||
rendering (bodies/houses/signs/aspect arcs) plus a `ZmMoveTime` motion dial.
|
||||
The concentric ring composition and arc math are the sample; the astrology
|
||||
content is not.
|
||||
|
||||
## Connects to
|
||||
|
||||
TASK-13 (squeeze — the first invocation), TASK-30 (the vocabulary),
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
# TASK 32 — The pill and the keyboard, as owned apps
|
||||
|
||||
**Status:** open. Both are erroneous in daily use (Casey, 2026-07-26).
|
||||
**Status:** partly resolved 2026-08-11. Squeekboard now has one package and one
|
||||
runtime owner; the pill and the shell's `$HOME` delivery still need ownership.
|
||||
**Size:** two sessions, one each. **Repo:** `~/Projects/souveraine`,
|
||||
`~/Projects/Pixel3Arch/pkgs/stevia`.
|
||||
`~/Projects/Pixel3Arch/pkgs/squeekboard`.
|
||||
|
||||
## Why one task for two surfaces
|
||||
|
||||
|
|
@ -18,25 +19,25 @@ updates**, and what it refuses. Not a bag of fixes.
|
|||
|
||||
## The keyboard
|
||||
|
||||
**Current state:** stevia 0.56.0-7, patched for Hyprland, with a dictation mic
|
||||
key. TASK-24 scoped the layout rework and it has not happened: backspace is on
|
||||
the wrong row, the bottom row has seven keys against the reference's six, and
|
||||
the layout matches no validated design. TASK-17 records the other live defect —
|
||||
completion is on by default but stevia asks hunspell for `en-us` while the
|
||||
dictionary is `en_US`, so it may still show nothing.
|
||||
**Current state:** `souveraine-squeekboard` pkgrel 4 is installed from the
|
||||
Pixel3Arch package repository and is the sole active OSK. Ordinary input gets
|
||||
the four-row Daily board; its mode key opens Squeekboard's own chooser, where
|
||||
Terminal selects the five-row board with Tab, number row, Ctrl/Alt/Esc, arrows,
|
||||
and Fn/numpad. Both carry dictation and dismiss keys. Commit `3794aa9` advances
|
||||
pkgrel 5 with that visible route and removes the remaining dual-OSK
|
||||
provisioning. Stevia and the process switcher are absent. Publication, glass
|
||||
acceptance, and native word completion remain in TASK-17.
|
||||
|
||||
**The rule TASK-24 already wrote and that must hold:** start from a validated
|
||||
reference (squeekboard `us+apple`, gmankab `us-mobile`), not from first
|
||||
principles. No layout change ships without a screenshot of the rendered
|
||||
keyboard on the device.
|
||||
|
||||
**Update management.** stevia is a Pixel3Arch package built on archdev and
|
||||
hand-carried; nothing publishes it (TASK-27). Upstream ALARM ships a
|
||||
`squeekboard` that declares `conflicts=stevia`, so the phone currently pins
|
||||
squeekboard to keep both — an interim recorded in `rootfs-overlay/etc/
|
||||
pacman.conf` that must come off when our own squeekboard ships at a version
|
||||
outranking theirs. The osk-switch toggle is the runtime arbiter and is staged,
|
||||
not functional.
|
||||
**Update management.** Pixel3Arch CI builds, signs, and publishes
|
||||
`souveraine-squeekboard`; pacman owns the binary and both layout provenance
|
||||
files. Commit `3794aa9` removes the old pin, dual-keyboard services, overlay,
|
||||
and package workflow from every living path; their evidence is retained only
|
||||
under `archive/retired-dual-osk-2026-08-11/`.
|
||||
|
||||
## The pill
|
||||
|
||||
|
|
@ -61,7 +62,8 @@ owns the fix.
|
|||
- Each has a section in `docs/` naming what it owns, what it refuses, and how
|
||||
it reaches a device — not a list of fixed bugs.
|
||||
- Keyboard: layout matches a validated reference, screenshot-verified at every
|
||||
level; completion actually completes.
|
||||
level and through repeated dismiss/reopen cycles; completion actually
|
||||
completes.
|
||||
- Pill: the gesture table is single-sourced; adding a gesture touches one row.
|
||||
- Both ship by a mechanism that survives an update, or the gap is named with
|
||||
the task that owns it.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,11 @@
|
|||
# TASK 38 — Pill swipe-to-max swaps the keyboard
|
||||
|
||||
**Status:** open, 2026-07-27 (Casey). **Size:** micro. **Repo:** `souveraine`
|
||||
(`surfaces/quickshell`) + `Pixel3Arch` (osk-switch).
|
||||
**Status:** superseded 2026-08-11; archive after TASK-17's remaining glass
|
||||
acceptance. The phone has one Squeekboard process. Daily's mode key opens its
|
||||
own chooser, which selects the five-row Terminal board and returns to Daily;
|
||||
input-purpose selection is only a convenience. Stevia and
|
||||
`souveraine-osk-switch` are uninstalled, so no pill gesture swaps keyboard
|
||||
processes. The history below records why the discarded design existed.
|
||||
|
||||
## What Casey asked for
|
||||
|
||||
|
|
|
|||
51
docs/tasks/71-qml-mobile-scanner-candidate.md
Normal file
51
docs/tasks/71-qml-mobile-scanner-candidate.md
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# TASK 71 — QmlMobileScanner as a components app candidate
|
||||
|
||||
**Status:** recon 2026-08-11, verdict owed. **Source reviewed:**
|
||||
`emericg/QmlMobileScanner` (GPL-3.0, upstream clone for reference).
|
||||
|
||||
## What it is
|
||||
|
||||
A demo barcode & QR **scanner + writer** in Qt Quick: live camera scanning,
|
||||
read-from-picture (WIP), barcode generation, and a SQLite history
|
||||
(`DatabaseManager`). Phone, tablet, and desktop UIs in one tree, plus a small
|
||||
`ComponentLibrary`. Backends: zxing-cpp v3.0.2, QZXing v3.3.0 (Qt6 port), and
|
||||
zint v2.16 for generation. Qt 6.8+, Qt Multimedia with **ffmpeg backend**,
|
||||
CMake.
|
||||
|
||||
## Why it fits (and the caveats)
|
||||
|
||||
- License: GPL-3.0 inside Souveraine's AGPL-3.0 is compatible — AGPL is a
|
||||
GPLv3 superset, vendoring is legal, but the component's provenance must be
|
||||
visible (thirdparty/ carries full zxing-cpp + zint trees already).
|
||||
- The phone-side gate is **camera**: TASK-46 has the front IMX355 streaming
|
||||
since 2026-07-29 with the rear IMX363 DT still unbuilt. Scanner can ship
|
||||
laptop-first with a webcam and land on glass when the rear camera does.
|
||||
- Qt Multimedia/ffmpeg is the heavyweight — check the ffmpeg backend actually
|
||||
binds freedreno's V4L2 before committing; the no-GNOME/no-KDE constraint
|
||||
doesn't bar Qt, but a second multimedia stack might be worth a fight.
|
||||
- **fontawesome-qml** (`schnitzeltony/fontawesome-qml`, LGPL-3.0): flagged as
|
||||
possibly needed. Verified: the scanner's QML has **no FontLoader or ttf
|
||||
references** — icons are its own `MenuXxx` components and logo images — so
|
||||
it **may already work** as-is; fontawesome would only matter if we re-skin.
|
||||
Marked unverified, not assumed.
|
||||
- `souveraine-components/` is referenced in `docs/README.md` (authority
|
||||
binaries + audit ladder) but has **no local repo** — decide whether this
|
||||
candidate lives in a new components repo (TASK-25 packaging story) or
|
||||
stays an app package.
|
||||
|
||||
## What's owed
|
||||
|
||||
1. Verdict: adopt as component / adopt as app / archive the idea.
|
||||
2. If adopt: dependency pass (ffmpeg backend on freedreno), icon story
|
||||
(fontawesome verdict), and whether the demo-grade code (read-from-picture
|
||||
WIP, writer WIP) matches the acceptance bar.
|
||||
|
||||
## Acceptance
|
||||
|
||||
One written verdict with the camera gate and multimedia stack named, and —
|
||||
if adopt — the component landed in the repo of record.
|
||||
|
||||
## Connects to
|
||||
|
||||
TASK-46 (camera gate), TASK-25 (one repo, all packages),
|
||||
`docs/README.md` (components reference).
|
||||
134
docs/tasks/73-self-dashboard.md
Normal file
134
docs/tasks/73-self-dashboard.md
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
# 73 — The self-dashboard: one spine, two skins (Gatehouse)
|
||||
|
||||
Status: **designed 2026-08-10/11, nothing built.** Working name for the house
|
||||
skin: **Gatehouse** — name decision is Casey's, still open. Owner: Rook, under
|
||||
Casey's direction.
|
||||
|
||||
Origin: the 2026-08-10 session (exported to clipboard) opened with Casey: *"I
|
||||
was building a local desktop app vewsion"* of RedFlag, and then, on sshbool:
|
||||
*"we're stealing it for RedFlag and SouveraineOS's implementation of the
|
||||
self-dashboard. It'll need to include 'Agent Health' as well Federated Agents.
|
||||
So massive expansion and we're stealing what we want from it into our own
|
||||
desktop app."*
|
||||
|
||||
## The shape — decided
|
||||
|
||||
One spine, two skins. The UI is a view, never a state writer — both skins are
|
||||
thin clients of the local agent; the authority stays in the agent/helper.
|
||||
|
||||
- **Skin 1 — RedFlag Desktop** (public, MIT, Codeberg): stays **Tauri v2**,
|
||||
already the stack in `RedFlag/desktop/`. Tauri's value is for machines Casey
|
||||
doesn't own: installers, updater, plugin ecosystem, a security model someone
|
||||
else audits. Tray lives here. FEAT-007 owns it and is mostly built.
|
||||
- **Skin 2 — House Gatehouse** (private): the **wry way**, souveraine-lens's
|
||||
skeleton — `wry 0.56 + tao 0.36`, ~317-byte manifest, LTO/strip. No tray
|
||||
code at all: Casey, 2026-08-11: *"we have QML we can build whatever we want
|
||||
so tray is irrelevant as argument."* Presence is the shell's. Two
|
||||
affordances:
|
||||
- **The glance** — agent health, gate badges, pending approvals. A native
|
||||
QML widget in the shell (`surfaces/quickshell/services/`), one socket
|
||||
payload, no webview, no window.
|
||||
- **The workbench** — SFTP panes, terminal, Monaco, fleet graph: the
|
||||
sshbool frontend steal, in a wry window summoned by the shell over a unix
|
||||
socket (the lens's own pattern: `--ipc $XDG_RUNTIME_DIR/souveraine/lens.sock`,
|
||||
one JSON object per line, both ways).
|
||||
- **The wall:** `gatedLocalApproval` hard-gates dnf/apt only —
|
||||
`agent/internal/handlers/local_approve.go:52`, mirrored at
|
||||
`LocalAgentApp.tsx:151`. SouveraineOS is Arch; the Pixel 3 is Arch ARM. So
|
||||
RedFlag-as-self-dashboard, today, lists every update on the house machines
|
||||
and can install none — which is exactly why `souveraine-updater` exists
|
||||
(Rust + 16 QML, `updater-core/src/auth.rs:50`:
|
||||
`pkexec /usr/bin/pacman -S --noconfirm` — no token, no closure, no gate).
|
||||
- **The spine:** teach the closure resolver pacman. Signed repo metadata plus
|
||||
`-Sp --print-format` gives the artifact set — tractable, and untracked (no
|
||||
GATE-* covers it; GATE-006 is Docker). When the spine lands,
|
||||
souveraine-updater's pkexec path becomes **deletable** rather than defended.
|
||||
- **License flow is one-way:** MIT shell flows into the house freely;
|
||||
house-specific never reaches the public mirror (the gitignored-`docs/tasks/`
|
||||
trick). sshbool is Apache-2.0 — clean, decision settled 2026-08-10.
|
||||
|
||||
## Acceptance
|
||||
|
||||
- [ ] The pacman closure spine exists in the agent and resolves an update set
|
||||
from signed repo metadata; a RedFlag gate verdict covers Arch packages.
|
||||
- [ ] `pkexec pacman --noconfirm` is gone; souveraine-updater retired; update
|
||||
approval on house machines goes through the gated flow.
|
||||
- [ ] House Gatehouse repo exists: lens skeleton, socket IPC to the
|
||||
agent/substrate, pacman-owned delivery (no updater, no second channel).
|
||||
- [ ] The glance renders agent health and gate verdicts on the shell from the
|
||||
socket; the workbench opens/summons from the shell and shows the same
|
||||
payloads as a deep seat (SFTP, terminal, fleet graph).
|
||||
- [ ] sshbool frontend pieces ported into the workbench; Agent Health and
|
||||
Federated Agents views present.
|
||||
- [ ] Public skin: FEAT-007 remainder lands (journal read endpoint, fleet-join
|
||||
transition, live e2e) and ships as RedFlag Desktop.
|
||||
- [ ] Verified on hardware: laptop, ArchDev, and the Pixel 3 agent through the
|
||||
gated path — update listed, approved, installed.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Origin session quotes and dates above; the thread was exported, no task
|
||||
file existed until this one.
|
||||
- RedFlag `public` branch is clean at `1f75bfd2` (v0.2.9.3) with **four
|
||||
uncommitted desktop files**: `desktop/tauri.conf.json`,
|
||||
`web/vite.desktop.config.ts`, `helper/src/main.rs`,
|
||||
`agent/internal/handlers/upgrade_healthcheck.go` — launcher plumbing to make
|
||||
the tray appear at all in compositor-only sessions (Hyprland/Sway/River),
|
||||
untouched since Jul 27.
|
||||
- FEAT-007 is ~two-thirds built: `LocalAgentApp.tsx` rewritten Jul 1 20:03 —
|
||||
update list, scan trigger, approve, override-reason on a blocked gate,
|
||||
verdict rendering, standalone-vs-fleet branching. Missing: journal read
|
||||
endpoint, fleet-join transition, live e2e.
|
||||
- sshbool audit (2026-08-10): v0.1.4, Apache-2.0, Tauri v2 + React 19 + russh;
|
||||
ships `tauri-plugin-single-instance` — the dep RedFlag's tray lacks. README
|
||||
overclaims: **SQLCipher absent** (plain sqlite, plaintext host rows at
|
||||
`crates/infrastructure/src/ssh/manager.rs:120`), **FIDO2 absent** (no
|
||||
ctap/webauthn anywhere). Real hole to know about: first-contact host keys
|
||||
accepted at `manager.rs:23` and the pin written after `authenticate()`.
|
||||
The clone lived only in the session scratchpad — **needs re-pull.**
|
||||
- `souveraine-lens` is the house precedent: `README.md` seam sentence — "the
|
||||
lens is a surface over them, not a home for them" — and the shell-over-
|
||||
socket drive pattern.
|
||||
|
||||
## Remaining work
|
||||
|
||||
1. Re-pull sshbool into the workspace (it is not on disk anywhere).
|
||||
2. Decide the name — Casey's call (Gatehouse / The Watch / The Ward).
|
||||
3. Decide where the shared shell/spine physically lives: crate in RedFlag
|
||||
consumed by the house, a shared repo, or vendoring. Two skins, zero
|
||||
duplicated state writers — do not fork the spine.
|
||||
4. File the pacman-closure task (new GATE-* under RedFlag's docs/tasks).
|
||||
5. House skeleton: lens skeleton + socket to the agent/substrate.
|
||||
6. The glance: QML service in `surfaces/quickshell/services/`.
|
||||
7. Port the sshbool frontend pieces into the wry workbench.
|
||||
8. Wire gate verdict rendering to the spine.
|
||||
9. Delete the pkexec path; retire souveraine-updater.
|
||||
10. FEAT-007 remainder on the public skin; ship RedFlag Desktop.
|
||||
|
||||
## Open questions the audit session should ask
|
||||
|
||||
- The name.
|
||||
- Home repo for the house skin: new `souveraine-gatehouse` vs a directory in
|
||||
`souveraine` (lens is its own repo).
|
||||
- On a house box both agents live: does the workbench speak to the RedFlag
|
||||
agent over localhost HTTP and to the substrate over the socket — or is one
|
||||
agent enough on the x86 seats?
|
||||
- What "Federated Agents" means at house scale: the fleet graph across
|
||||
ArchDev / .19 / Pixel 3 / laptop, rendering the same payloads the glance
|
||||
shows per-box.
|
||||
- Scope of the glance vs the workbench: which payloads stay native QML and
|
||||
which wake the webview.
|
||||
|
||||
## Connections
|
||||
|
||||
- `RedFlag/docs/tasks/FEAT-007-desktop-tray-standalone-ui.md` — public-skin
|
||||
owner; this task owns the structure around it.
|
||||
- 29-souveraine-updater — the task this design replaces.
|
||||
- 68-shared-household-state — the dashboard renders household state; the
|
||||
first slice (admitted task trail + QML view) overlaps the glance.
|
||||
- 69-agent-usage-session-daemon — "shell services become projections of one
|
||||
socket" is the same shape as the glance.
|
||||
- RedFlag RAF §11 — the gate only gates what routes through it; the pacman
|
||||
spine is the helper pointed inward.
|
||||
- 66-souveraineai-overhaul — the public face; the Gatehouse is the private
|
||||
seat of the same house.
|
||||
|
|
@ -64,6 +64,10 @@ Four that are cheap relative to what they unblock:
|
|||
|
||||
| # | Task | What's left |
|
||||
|---|------|-------------|
|
||||
| 73 | [One spine, two skins: the self-dashboard](73-self-dashboard.md) | Designed 2026-08-11, nothing built. RedFlag Desktop (Tauri, public) + house Gatehouse (wry + QML glance, lens skeleton), spine is agent-side pacman closure resolution that retires souveraine-updater's `pkexec --noconfirm`. Name and home-repo decisions are Casey's. |
|
||||
| 71 | [QmlMobileScanner as a components app candidate](71-qml-mobile-scanner-candidate.md) | Recon 2026-08-11, verdict owed. GPL-3.0 Qt Quick scanner+writer (zxing-cpp/QZXing/zint, SQLite history). Compatible inside AGPL; camera gate is TASK-46; ffmpeg backend needs a freedreno check; fontawesome-qml likely **not** needed (no FontLoader in the tree — unverified). |
|
||||
| 70 | [The island: agent surfacing for the shell](70-the-island-agent-surfacing.md) | Recon 2026-08-11. "Open Agent Island" — end-4 fork (same ancestor as ii-base) with a morphing notch, Claude Code status, and permission Allow/Deny from the notch. Take the mechanisms (AgentService + bridge, 13/13 safety) onto ii-base, not the shell. Twines with TASK-59: the notch can host Annie as a morph state. Adjacent to TASK-69. |
|
||||
| 69 | [Agent usage, one spine: the session daemon](69-agent-usage-session-daemon.md) | Recon 2026-08-11, nothing built. One collector tracks Souveraine + Claude Code + Codex from their local truth (`~/.codex/sessions` JSONL, `~/.claude/projects` JSONL, substrate `core/session`). Two gaps are one shape: the substrate records usage nobody reads (TASK-67). Shell services become projections of one socket. |
|
||||
| 68 | [Shared household state: tasks first](68-shared-household-state.md) | Canonical plan landed 2026-08-10. First slice is an admitted local task trail + materialized QML app/sidebar view; Culver is the Personal-class client, not the authority. |
|
||||
| 67 | [The caching landed blind, and compaction drifted](67-caching-landed-blind-and-compaction-drift.md) | Prompt caching works — one turn shows `cache_write=22585` then `cache_read=22585` — and **nothing reads the counters**: `assistant_with_usage` has zero callers, so the only proof is a log line. Separately, the live config hands the subconscious `sliding_window` where the doc and the code default both say `sliding_reflect`, and the `memory` tool's enum exposes the blind strategy while hiding the safe one. §1 needs Casey's word, not a fix. |
|
||||
| 64 | [One SouveraineOS build for the iPhone](64-one-iphone-build.md) | Scoped 2026-08-10, not started. `linux-pauli` is not a repository, reaches the phone by `scp`, and CI has never built it. The display work that day is worth more than its code: the raster is **derived, not guessed** — 888×1845 @ 60 off `adp_mipi_regs` — and `aperture_remove_all_conflicting_devices()` is the correct handoff. ADP still shows nothing with everything else correct; the `adp16` kernel is staged and has never booted. |
|
||||
|
|
@ -87,17 +91,17 @@ Four that are cheap relative to what they unblock:
|
|||
| 07 | [WCD9340 mic](07-mic-wcd9340-slim-tx.md) | Functional and in daily STT use. One defect: the permanent sysclk + MICB2 power pin. Kernel branch `mic-race-fix`. |
|
||||
| 09 | [Suspend-resume FTS calibration race](09-suspend-resume-fts.md) | Kernel-side real fix; interim fix shipped. Cold-boot only. |
|
||||
| 12 | [Face auth as a capability factor](12-gaze-reference-face-auth.md) | Per-target. Phone needs front-camera bring-up — **that is TASK-46's IMX355 half.** |
|
||||
| 17 | [Keyboard + dictation polish](17-keyboard-stevia-dictation.md) | Dictation works in daily use. Open: no word completion (`en-us` vs `en_US`) and the stateful mic-key indicator is written but not built. Layout moved to TASK-24. **TTS now exists** (`10.10.20.123:7863`). |
|
||||
| 17 | [Squeekboard + dictation polish](17-keyboard-squeekboard-dictation.md) | Sole OSK installed at pkgrel 4. Pkgrel 5 adds Daily's visible mode key and chooser for the separate five-row Terminal board; CI, install, repeated reopen, mic-state, and side-panel focus proof remain. Native completion follows. |
|
||||
| 18 | [Selection/highlight action menu](18-selection-menu.md) | Component first, fluid before functional. **Read Aloud is unblocked** — TTS is live. |
|
||||
| 20 | [Player: video + agent control](20-player-video-agent.md) | Video, snapshot, manifest. Preserve the music path. |
|
||||
| 21 | [Reboot-to-Android confirmation](21-reboot-android-confirmation.md) | Scoped 07-22. A one-tap irreversible slot flip still sits bare in app search. |
|
||||
| 23 | [culver locked-notification nudge](23-culver-locked-notification-nudge.md) | Needs `SyncBurst()` + an IdleCoordinator schedule (TASK-15). |
|
||||
| 24 | [Keyboard layout rethink](24-keyboard-layout-rethink.md) | Redesign from scratch, not more patches. Start from squeekboard `us+apple`. Casey decides where the mic key goes. |
|
||||
| 24 | [Keyboard layout rethink](24-keyboard-layout-rethink.md) | Superseded by TASK-17's reference-led Daily/Terminal Squeekboard layouts. Retained as design evidence; do not resume its Stevia patch plan. |
|
||||
| 27 | [Gitea pipeline audit](27-gitea-pipeline-audit.md) | The fixes. Overlay is not a package; no `primary` branch; poisoned build sysroot. |
|
||||
| 32 | [Pill and keyboard as owned apps](32-pill-and-osk-as-apps.md) | Both erroneous daily; neither has an owner or a shipping story. |
|
||||
| 32 | [Pill and keyboard as owned apps](32-pill-and-osk-as-apps.md) | Keyboard now has one runtime/package owner and no dual-OSK provisioning; glass proof remains. Pill ownership and package-owned shell delivery remain open. |
|
||||
| 33 | [Battery belongs to the state machine](33-battery-as-device-state.md) | Last raw feed going straight to the glass. The charge ceiling is writable today. |
|
||||
| 37 | ["Back" as a first-class verb](37-navigation-back-verb.md) | Our `Gestures.qml` is already the compositor half; `can_go_back` is the dial's enabled/reason. |
|
||||
| 38 | [Pill swipe-to-max swaps the keyboard](38-pill-swipe-osk-swap.md) | Micro. The only route to a terminal keyboard since stevia dropped its layout. |
|
||||
| 38 | [Pill swipe-to-max swaps the keyboard](38-pill-swipe-osk-swap.md) | Superseded: Squeekboard's own visible mode chooser selects Daily/Terminal inside one process. Archive after TASK-17 glass acceptance. |
|
||||
| 39 | [Audio levels as tracked state](39-audio-levels-as-state.md) | Open policy: roles, defaults, lock tiers, and state-driven profile intent. WirePlumber persistence works; do not add a second writer. |
|
||||
| — | [Unify the shell trees](unify-shell-trees-laptop-phone.md) | **DONE 2026-07-31** — verified by md5 across both devices: 918 differing files → 7, all 7 declared in the `ii-phone` overlay, laptop-only **0**, zero stranded. The KEEP list was promoted to repo overrides, not lost. Blocks nothing; archive it. |
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue