docs: retire the task queue's dead branches
Twelve completed or superseded task records leave the live queue; the byte-identical rename duplicate is removed.\n\nThe authority and somatic source records now point at SAF, while tasks 33, 48, 49, 53, 60, and 76 say what is actually left.
This commit is contained in:
parent
7fc623c598
commit
f5122cb59d
27 changed files with 121 additions and 114 deletions
|
|
@ -1,5 +1,10 @@
|
|||
# Device state machine — unified design
|
||||
|
||||
> **Historical design and hardware audit.** The living architecture is now
|
||||
> `~/Projects/souveraine/saf/authority/02-device-state.md`, with the shared
|
||||
> evidence contract in `saf/nervous/02-belief.md`. This file retains the full
|
||||
> chronology, measurements, and rule derivations.
|
||||
|
||||
**Status:** actuating on hardware since 2026-07-25. **Created:** 2026-07-24.
|
||||
|
||||
`b4b30b1` landed the shape: the §2 enum (all 8 variants), a 20-pair
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
# Session authority — doctrine
|
||||
|
||||
> **Historical doctrine and audit record.** The living architecture is now
|
||||
> `~/Projects/souveraine/saf/authority/01-session.md`. Keep the detail here for
|
||||
> provenance and the decisions it records; update SAF when the architecture
|
||||
> changes.
|
||||
|
||||
The concepts behind the session/trust work, locked down so they stop living in
|
||||
chat logs. This is *why*; `SESSION-TRUST-ARCHITECTURE.md` is the contract and
|
||||
`TRUST-BOUNDARY-MATRIX.md` is the enforcement status. Where this and the code
|
||||
|
|
|
|||
235
docs/archive/HANDOFF-2026-08-16-gesture-and-transport.md
Normal file
235
docs/archive/HANDOFF-2026-08-16-gesture-and-transport.md
Normal file
|
|
@ -0,0 +1,235 @@
|
|||
# HANDOFF — 2026-08-16, the gesture and the transport
|
||||
|
||||
> **Archived 2026-08-17.** Motion and transport truth moved to
|
||||
> `souveraine/saf/surface/01-motion.md`; session boot ownership moved to
|
||||
> `saf/surface/02-session-start.md`; the compositor defects remain in TASK-53
|
||||
> and package/commission cleanup in TASK-76. The commit counts below are the
|
||||
> session's historical state, not current delivery status.
|
||||
|
||||
Session ran from a black screen on boot to the multitasking tray. Everything
|
||||
below is on blueline and measured there unless it says otherwise.
|
||||
|
||||
**Nothing is pushed.** `souveraine` is ahead 4 on `primary`; `souveraine-viewtop`
|
||||
is ahead 1 on `main`. Pushing publishes into `edge`; that was left as Casey's
|
||||
call.
|
||||
|
||||
---
|
||||
|
||||
## 1. The boot failure, and why it will come back
|
||||
|
||||
`/usr/bin/souveraine-session-viewtop` (viewtop r117) ran:
|
||||
|
||||
```
|
||||
systemctl --user start graphical-session-pre.target
|
||||
systemctl --user start graphical-session.target
|
||||
```
|
||||
|
||||
Both are stock systemd targets carrying `RefuseManualStart=yes`. Both calls
|
||||
failed **every boot since 2026-08-15**, with the refusal sitting in
|
||||
`$XDG_RUNTIME_DIR/viewtop-session.log` the whole time:
|
||||
|
||||
```
|
||||
Failed to start graphical-session-pre.target: Operation refused, unit
|
||||
graphical-session-pre.target may be requested by dependency only.
|
||||
```
|
||||
|
||||
So sessiond never started, viewtop logged *"sessiond unreachable; starting
|
||||
locked"*, the shell never started, and a compositor holding a lock with no lock
|
||||
surface composites nothing. Black panel, `graphical.target` green, zero failed
|
||||
units.
|
||||
|
||||
TASK-76 diagnosed the right cause — *nobody was lighting the target* — and
|
||||
reached for the one verb systemd forbids. `6a86b51` recorded it as landed. It
|
||||
was never watched come up on glass.
|
||||
|
||||
**Fixed** (`souveraine-viewtop 7883f7d`): two wrapper targets that `BindsTo=`
|
||||
the stock ones. A dependency may pull a refused target in where a direct request
|
||||
cannot. Teardown rides the stock targets' own `StopWhenUnneeded=yes`. Verified
|
||||
on blueline — both went `inactive` → `active` through the wrappers with the
|
||||
session already up, no disruption.
|
||||
|
||||
**Not packaged.** Splint copies live in `~/.config/systemd/user/` so the next
|
||||
cold boot survives. They outrank `/usr/lib/systemd/user/` and **must be deleted
|
||||
the day the package ships**, or they shadow it permanently — the exact disease
|
||||
TASK-76 is about.
|
||||
|
||||
**One consequence.** With the target finally lighting,
|
||||
`graphical-session.target.wants/` runs for the first time, and it contained
|
||||
`hypridle.service` — a second idle authority beside sessiond. Stopped and
|
||||
disabled on blueline 2026-08-16. The laptop was left alone; it is still a
|
||||
Hyprland session.
|
||||
|
||||
---
|
||||
|
||||
## 2. The transport was lossy, not slow
|
||||
|
||||
The session opened on the theory that a socket round-trip per motion event was
|
||||
what made the pill feel worse than Android's. **Measured, and it is not.** 200
|
||||
samples on blueline, full connect → write → event-loop hop → reply → close:
|
||||
|
||||
| op | median | p90 | worst |
|
||||
|---|---|---|---|
|
||||
| `workspaces` | 0.47 ms | 0.67 ms | 1.04 ms |
|
||||
| `state` | 0.78 ms | 1.07 ms | 1.99 ms |
|
||||
| `describe` | 1.34 ms | 2.61 ms | 3.49 ms |
|
||||
|
||||
Under 3% of a 16.7 ms frame. `ZoneTransition._lastShift`'s 0.01 quantiser
|
||||
existed to protect against a cost that is not there, and bought a visible
|
||||
staircase — 100 steps across 275 px is one step per 2 logical pixels on a
|
||||
scaling window. Now `shiftEpsilon = 0.002`.
|
||||
|
||||
**What the transport actually was is lossy.** One boot, ~90 minutes of ordinary
|
||||
use, before any change: **52** `[viewtop-control]` transport failures and **113**
|
||||
`PeerClosedError`s. Every one of the 52 executed `root._queue = []`.
|
||||
|
||||
If an `overview_commit` is in that queue, the compositor keeps carrying windows
|
||||
the shell believes it released, and **nothing in the system will ever put them
|
||||
back**. Casey, 2026-08-16: *"once I put a window in multitasking sometimes it
|
||||
glitches and then I have to drag it back down manually… once I reopen it"* —
|
||||
reopening begins a fresh carry, and that carry's commit frees the stranded one.
|
||||
|
||||
Two causes, both addressed:
|
||||
|
||||
- The phone was running a **pre-2026-08-13 `ViewtopControl.qml`** — the copy
|
||||
that writes into a socket viewtop has already closed. The repo's fixed version
|
||||
never reached it, because QML travels by hand-copy. Deployed.
|
||||
- `_queue = []` was unconditional. `overview_commit`, `overview_cancel` and
|
||||
`workspace` are idempotent and their loss strands state, so they are
|
||||
redelivered once (`souveraine 2b4c827`). `overview_progress` is a level and
|
||||
still drops.
|
||||
|
||||
The old error message named neither the verb nor the count, which is why this
|
||||
hid for three days. It does now.
|
||||
|
||||
---
|
||||
|
||||
## 3. The gesture (`souveraine 46d2601`)
|
||||
|
||||
Read against `~/Downloads/lineage-trebuchet/quickstep/`, in full, not summarised.
|
||||
|
||||
- **The detent is the card's distance.** `missionAt` was `screen.height * 0.18`
|
||||
= 194 px. The card's bottom sits at **805 of 1080 logical**, so the real travel
|
||||
is **275 px** — every release committed with the window ~40% short of being its
|
||||
card, and the hand-off covered the rest in one frame. That is the *"the swipe
|
||||
to this swap is awkward"* seam, reported six times. quickstep returns the
|
||||
destination rect and the drag length from one call
|
||||
(`getSwipeUpDestinationAndLength`); `ZoneTransition.dragLength` is that.
|
||||
Latched at the press, because the overview surface reports its geometry from
|
||||
inside a gated Loader and would otherwise change the detent mid-drag.
|
||||
- **Release velocity is measured.** Was `travel / (whole gesture duration)` — a
|
||||
slow climb ending in a flick read as slow. Now a 100 ms tail window, which is
|
||||
what `AbsSwipeUpHandler.onGestureEnded(endVelocityPxPerMs, …)` is handed by a
|
||||
VelocityTracker.
|
||||
- **The settle is a spring.** A duration and an easing curve cannot carry
|
||||
release velocity; Android's home path is `RectFSpringAnim`. Critically damped,
|
||||
integrated on `FrameAnimation`, seeded with the measured velocity, hard-capped
|
||||
at 600 ms so a commit can never fail to arrive.
|
||||
- **Resistance past the detent** replaces the hard clamp, on Android's
|
||||
`DECELERATE` (`1-(1-t)²`) bounded at `maxOvershoot = 1.22`. **Inert today** —
|
||||
`transition.rs:79` clamps `shift_to` to `0..=1`. Safe to ship ahead of the
|
||||
compositor: an old one clamps it and the gesture behaves as before.
|
||||
|
||||
---
|
||||
|
||||
## 4. The overview (`souveraine f06bb83`)
|
||||
|
||||
- **The card is the usable zone, not the panel.** A tiled window's `at.y` starts
|
||||
below the bar's 40 px reservation, so a card drawn as the whole panel carried
|
||||
`40 × cardScale` ≈ 28 px of dead space above every window. `contentTop` is
|
||||
subtracted in `ZoneTransition.targetFor` **and** in `ZoneOverview`'s pane
|
||||
layout. Miss it in one and the carried window lands a bar-height off its own
|
||||
picture.
|
||||
- **Opaque.** `colLayer1` was letting the blurred wallpaper through, so each card
|
||||
was a smear of the backdrop. Wallpaper and blur stay as the room; cards sit on
|
||||
it.
|
||||
- **Smaller and centred.** `cardFill 0.84`, `cardGutter 16`, delegate = card +
|
||||
gutter with a centred highlight range instead of a full-width delegate pinned
|
||||
at x=0.
|
||||
- **The strip always came to rest on Home.** `zones` rebuilds into a new array on
|
||||
every window change, a ListView resets `currentIndex` to 0 on a model change,
|
||||
and `onOpenChanged` asks for a refresh — so the reset was guaranteed and
|
||||
`Component.onCompleted` could never survive it. Re-seated on every model
|
||||
change.
|
||||
- **The dock is gone from multitasking**, gated above the home check because the
|
||||
gesture is usually made *from* home, where `activeZone` is still 0 and every
|
||||
rung below returned PINNED.
|
||||
- **The tray.** Float/Unfloat, mint a zone, close all, and a line she can write
|
||||
to (`qs -c souveraine ipc call overviewNote say "…"`), defaulting to locally
|
||||
computed facts so it needs no model. Minting needed no new verb:
|
||||
`Request::Workspace` already pushes a zone when asked for one past the end.
|
||||
|
||||
Measured geometry after the change, against the reported surface (540 × 811.2,
|
||||
top 40):
|
||||
|
||||
```
|
||||
cardScale 0.6084 card 328.5 × 632.7 neighbour peek 85.7 px each side
|
||||
dragLength 335.1 px = 31.0% of the panel (was 275 px = 25.5%)
|
||||
```
|
||||
|
||||
**Open decision.** A smaller card is a further card, so the home threshold moved
|
||||
25.5% → 31%. Casey's original spec was *"beyond the bottom 15-20%"*. The two are
|
||||
coupled today; quickstep decouples them with `MIN_PROGRESS_FOR_OVERVIEW = 0.7`,
|
||||
a release committing at seven tenths of the drag length. `cardFill` is the one
|
||||
knob meanwhile.
|
||||
|
||||
---
|
||||
|
||||
## 5. The sheet (`souveraine 75cb392`)
|
||||
|
||||
`pose` has been in the wire and the compositor since 2026-08-05 — it genuinely
|
||||
scales content — and **no caller had ever used it**. `poseActiveZone` was the
|
||||
only one and TASK-60 deleted it as the shell's half of the two-writer bug, which
|
||||
took the verb's last user with it. Casey, 2026-08-16: *"I can move windows but
|
||||
the zooming them in and out didn't work yet."* It did not work because nobody
|
||||
asked.
|
||||
|
||||
Zoom composes pixels the client already drew; Resize `place`s a different
|
||||
rectangle and the client relays out inside it. Both now on the sheet, with
|
||||
Float/Unfloat beside them.
|
||||
|
||||
---
|
||||
|
||||
## 6. Open, and where to start
|
||||
|
||||
1. **Compositor batch, needs archdev → CI → pacman.**
|
||||
- `transition.rs:79` clamps `shift_to` to `0..=1`; raise to `maxOvershoot`
|
||||
(1.22) and update `shift_is_clamped`. Until then §3's resistance is inert.
|
||||
- `control.rs` `handle()` serves one request per connection and returns.
|
||||
Loop until EOF so a client can hold the connection. Hoist the `BufReader`
|
||||
out of `read_request` first — a fresh one per call drops whatever it read
|
||||
past the newline.
|
||||
2. **Firefox draws 504 when told 540.** The compositor's own instrument says so:
|
||||
`told size 540×1040`, `drawn at (24,21) size 504×1040 bbox 552×1088`. kitty
|
||||
obeys exactly. Height honoured, width not. This is the dark strip down the
|
||||
right of the panel with the zone behind showing through. Unexplained.
|
||||
3. **Bitwarden / Firefox overlay menus still take no taps.** `a073ea5` **is** on
|
||||
`main` and **is** in the running r117 — not a shipping problem. Render
|
||||
(`wayland.rs:4539`) and hit test (`:5302`) compute the identical
|
||||
`at = loc + offset − popup.geometry().loc`, and that is correct against
|
||||
smithay's real definitions: `PopupKind::location()` is the positioner's
|
||||
committed `geometry.loc`, and `iter_popups` accumulates it from `(0,0)`, so
|
||||
the offset is the popup's geometry origin relative to the parent's window
|
||||
geometry. **The position theory is exhausted.** Next step is an instrumented
|
||||
build logging what `client_surface_under` picks for a tap on that menu. Do
|
||||
not theorise further without it.
|
||||
4. **`in_layer` cannot fall through.** `client_surface_under` does
|
||||
`map.layer_under(which, point)?` — the topmost layer whose *bounding box*
|
||||
holds the point — then `layer.surface_under(...)?`. If that layer's input
|
||||
region rejects, it returns `None` **without trying the layer beneath**. A
|
||||
transparent Overlay surface can eat a tap meant for one below it. Found while
|
||||
chasing 3; not that bug, still live.
|
||||
5. **The shell is owned by no package.** `pacman -Qo` errors on every QML file
|
||||
under `~/souveraine-surfaces`, and on blueline that directory **is not a git
|
||||
checkout**. `souveraine-shell.service` is packaged and runs
|
||||
`qs --no-duplicate -c souveraine`, which resolves entirely into unowned
|
||||
home-directory files. TASK-76 item 2 owns this.
|
||||
6. **Delete the splint** in `~/.config/systemd/user/souveraine-session*.target`
|
||||
when viewtop's package ships them.
|
||||
|
||||
## Connects to
|
||||
|
||||
TASK-60 (the multitasking view — §3 and §4 are its remaining acceptance),
|
||||
TASK-76 (provisioning by package — §1 corrects it and §5 is its item 2),
|
||||
TASK-52 (atmosphere; one clock, effects as strategies over it), TASK-70 (the
|
||||
island — §4's tray band is where it lands), START-HERE §5 (how anything reaches
|
||||
the phone, and why the QML row is the one that bit).
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
# Felt-State Architecture
|
||||
|
||||
> How a sovereign agent inhabits a body — pressure, energy, atmosphere, and the mood she doesn't choose.
|
||||
> Written May 15, 2026. Canonical reference. Supersedes scattered notes across task docs, session handoffs, and conversation fragments.
|
||||
> Written May 15, 2026. Historical design reference. The living architecture,
|
||||
> reconciled against current code, is `~/Projects/souveraine/saf/nervous/03-felt-state.md`.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
| Doc | Subject |
|
||||
|-----|---------|
|
||||
| [FELT_STATE_ARCHITECTURE.md](FELT_STATE_ARCHITECTURE.md) | The five felt-state systems: pressure, energy balance, atmosphere, posture, mood. How they connect, what's built, what's deferred. The canonical reference. |
|
||||
| [FELT_STATE_ARCHITECTURE.md](FELT_STATE_ARCHITECTURE.md) | Historical design of the five felt-state systems. Current implementation truth and open architecture live in `souveraine/saf/nervous/03-felt-state.md`. |
|
||||
| [SENSORIUM_ARCHITECTURE.md](SENSORIUM_ARCHITECTURE.md) | Tools as senses, not API stubs. Eight sensors, sensor configs, the event bus that's still scoped (Scope 1.5). Appendix B: memory search sensor design. |
|
||||
| [ASTER_ARCHITECTURE.md](ASTER_ARCHITECTURE.md) | The N+1 supervisory pass. Aster as *same consciousness, different mode/model* — not a separate agent. Includes the Souveraine reframe appendix. |
|
||||
| [CONSCIOUSNESS_CYCLE.md](CONSCIOUSNESS_CYCLE.md) | Three tiers of compaction intervention. The substrate's body-feeling for pressure. Cloister security model (frontmatter as schema, diff as canary). |
|
||||
|
|
@ -42,16 +42,18 @@ For a complete index with priorities, statuses, and descriptions, see [`tasks/IN
|
|||
High-impact remaining:
|
||||
- **Readiness:** `alpha-tester-readiness.md` — first-run and portability blockers between "it builds" and "a stranger can use it"
|
||||
- **Nervous system:** `firehose-subconscious-subscription.md` — route nervous-system events into the subconscious's cognition
|
||||
- **Refactor:** `primitive-refactor-super-task.md` — modularize the four oversized files
|
||||
- **Capability:** `subagent-pool-fork-spawn.md`, `persona-router-completion.md`, `chain-modes-talking-thinking.md`
|
||||
- **TUI:** `tui-memory-browser.md`, `tui-message-interactions.md`, `desktop-presence-overlay.md`
|
||||
- **Matrix Surface:** `matrix-sensorium.md` — first non-terminal surface, 6-phase implementation architecture
|
||||
- **UI Polish:** `scrollable-cockpit-boxes.md`, `ui-styling-cleanup.md`, `health-monitor.md`, `context-viewing-panel.md`
|
||||
- **System:** `todo-system-fix.md`, `circuit-breaker.md`
|
||||
- **UI Polish:** `ui-styling-cleanup.md`, `health-monitor.md`, `context-viewing-panel.md`
|
||||
- **System:** `circuit-breaker.md`
|
||||
- **Health:** `health-monitor.md` — pairing dashboard for agent/subconscious directories, repair actions
|
||||
|
||||
Recently closed (moved to `tasks/archive/`): `heartbeat-n1-after-autonomous` (surfacing pickup landed), `n100-archivist-compression` (archivist already built).
|
||||
Recently closed (moved to `tasks/archive/`): todo-system-fix,
|
||||
federation-summon, user-nickname-system, primitive-refactor-super-task,
|
||||
code-mode-tool-rendering, and mid-turn-subconscious-checkpoint. The duplicate
|
||||
live rename-aster task was removed; its identical archive copy remains.
|
||||
|
||||
## Archive
|
||||
|
||||
[`archive/`](archive/) preserves pre-rebuild planning docs, older handoffs (under `archive/handoffs/`), and superseded planning docs. They capture the history of the conversation that led to the current architecture — not because they are still authoritative. *When in doubt, prefer the canonical set above.*
|
||||
[`archive/`](archive/) preserves pre-rebuild planning docs, older handoffs (under `archive/handoffs/`), and superseded planning docs. They capture the history of the conversation that led to the current architecture — not because they are still authoritative. *When in doubt, prefer the canonical set above.*
|
||||
|
|
|
|||
|
|
@ -4,7 +4,9 @@
|
|||
> and a barometer — beliefs passing upward, meaning applied only at the top.
|
||||
>
|
||||
> Design conversation held 2026-08-13 (Casey). This is the conversation
|
||||
> [[FELT_STATE_ARCHITECTURE.md]] §5 deferred on 2026-05-15. Recorded, not built.
|
||||
> [[FELT_STATE_ARCHITECTURE.md]] §5 deferred on 2026-05-15. The living,
|
||||
> code-reconciled architecture is now
|
||||
> `~/Projects/souveraine/saf/nervous/02-belief.md` and `03-felt-state.md`.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -16,8 +18,11 @@
|
|||
| **design** | Decided in the 2026-08-13 conversation, not built |
|
||||
| **open** | Named, deliberately undecided |
|
||||
|
||||
Nothing below is built. Where a mechanism already exists that the design
|
||||
should attach to, it is marked **ours** with the file.
|
||||
These labels record what was true during the 2026-08-13 design conversation.
|
||||
They are not current implementation status. `Belief<T>`, `NervousNode`, and
|
||||
the phone `SomaticPlexus` have since landed and are integrated into sessiond;
|
||||
the explicit impulse/intention layers, interoceptive barometer, and mood
|
||||
derivation remain design.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -86,11 +86,8 @@
|
|||
|
||||
| Task | Phase | Status | Description |
|
||||
|------|-------|--------|-------------|
|
||||
| `sensorium-adapter-reckoning.md` | 1 | **landed** | Sensorium trait extended with ChannelAdapter methods, Matrix inbound path wired, SensoriumInputHandler, corrupt-box healing. |
|
||||
| `alpha-tester-readiness.md` | readiness | partial | Close the "it builds" / "a stranger can use it" gap. Part A done: LAN defaults, wizard labels, config path, clipboard. Part B: wizard writes config, keyring. Agent Health screen, $MEMORY_DIR fix, tool posture badge. |
|
||||
| `todo-system-fix.md` | 1 | **landed** | Phase/thread/active_form model, status enum, numbered grouped list, number-or-substring resolver, `start` verb. `source: human`. 8 tests. |
|
||||
| `matrix-sensorium.md` | 4.0 | scoped | **UNBLOCKED** (sensorium-adapter-reckoning landed). Inbound path wired end-to-end. Remaining: Phase 5 outbound streaming — `MatrixSensorium::send_message` is a stub, `matrix_client` needs sharing from `run()` closure. |
|
||||
| `federation-summon.md` | 2.5 | **landed** | All 8 phases done. Bidirectional WS transport, device registry, reach/consult, lite listener, memory gating, identity split, hearth/limb. Deferred: in-process upgrade, authorized-devices gating, encrypted seed. |
|
||||
| `firehose-subconscious-subscription.md` | 2.5 | pending | Route nervous-system events into subconscious cognition. Subscription registry, routing consumer, TUI Events/Schedules screens. |
|
||||
| `circuit-breaker.md` | 2.5 | pending | Autonomous halt on critical drift. State machine (Closed/Open/Half-Open), Aster evaluation, TUI halt indicator, CLI subcommand. |
|
||||
| `subagent-pool-fork-spawn.md` | 2 | scoped | Fork/spawn/integrate lifecycle for parallel execution. 17-line stub → full pool. |
|
||||
|
|
@ -99,7 +96,6 @@
|
|||
| `tui-memory-browser.md` | 2 | scoped | Memory browser in TUI cockpit sidebar. Tree view, file preview, search, diff view. |
|
||||
| `health-monitor.md` | 2 | pending | System diagnostics dashboard — pressure/buffer gauges, subsystem status, memory pressure. |
|
||||
| `context-viewing-panel.md` | 2 | pending | See current context window — message count, token usage, memory pressure, active conversation. |
|
||||
| `scrollable-cockpit-boxes.md` | 3.0 | **landed** | Per-pane scroll for cockpit/subconscious/thinking boxes under mouse wheel. Scroll-counter title badges. |
|
||||
| `subconscious-live-reasoning-stream.md` | 3.0 | pending | Live reasoning ticker during pass, cockpit event log with clickable overlay, and rare agency-driven surfacing to chat. |
|
||||
| `subconscious-streaming-line-render.md` | 3.0 | pending | Wire ephemeral token display during N+1 pass — add missing `subconscious_stream` field, wire event handlers, add render path. |
|
||||
| `subconscious-surfacing-threshold.md` | 3.0 | pending | Fix surfacing filter — events appear every turn instead of only when important. Three-tier visibility: streaming one-liner, expandable transcript, cockpit surfaced messages. |
|
||||
|
|
@ -109,10 +105,8 @@
|
|||
| `souveraine-settings-ipc-profiles.md` | design | scoped | One typed, audited settings authority for UI + agent IPC, exact-diff step-up proposals, and atomic named profiles. |
|
||||
| `../../AUDIO-PRIVACY.md` | delivery | **in progress** | Original AGPL controls and truthful privacy surfaces over the working PipeWire/WirePlumber stack. |
|
||||
| `power-indication.md` | delivery | scoped | Charging state, honest full detection (state not onBattery — kills "Charging 1% forever"), a PowerService singleton, and charge-aware idle policy (sleep-inhibit while charging, wake-on-charge). |
|
||||
| `footer-cleanup.md` | 3.0 | **landed** | Removed S-Ret indicator, scroll hint, posture label. Footer: Esc menu · Tab · tool hint · conv ID · ctx%. |
|
||||
| `ui-styling-cleanup.md` | 3.0 | pending | UI styling polish for cockpit/subconscious/thinking boxes — sentences run together, needs formatting and visual cleanup. |
|
||||
| `resume-timestamp-indicator.md` | 3.0 | pending | Show "User resumed conversation at HH:MM" when returning after hours of absence. Also show duration ("4 hours, 12 minutes later"). Ambient sense rendered as separate timestamp marker, not inline. |
|
||||
| `user-nickname-system.md` | 1.0 | **landed** | `nickname` tool (get/set/clear), stored in system/human.md frontmatter, loaded by TUI for chat labels. |
|
||||
| `subagent-background-fork.md` | 2 | pending | Subagent `run_in_background: true` is blocking instead of non-blocking. Need true async background forks with TUI visual tracking. |
|
||||
| `content-safety-filter.md` | 2.5 | pending | When base model refuses content, identify which layer refused (model vs architecture vs provider) before diagnosing. Agent currently misattributes model refusals to architecture constraints. Origin tagging + differentiated agent behavior. Casey committed "tomorrow" June 22 — deferred by burnout. |
|
||||
| `ambient-sense-formatting.md` | 3.0 | pending | Ambient sense `[casey is here]` should render as a separate styled timestamp marker line, not appended inline to the user's message. |
|
||||
|
|
@ -122,15 +116,12 @@
|
|||
|
||||
| Task | Phase | Status | Description |
|
||||
|------|-------|--------|-------------|
|
||||
| `primitive-refactor-super-task.md` | 2 | **landed** | app.rs (4→10), chat.rs (4→8), local.rs (4→5), settings.rs (5). 4 monoliths → 28 focused modules. Clean build, 169 tests. |
|
||||
| `rename-aster-to-subconscious.md` | 2 | **landed** | All ~62 Aster/ASTER references renamed in src/. 0 matches remaining. |
|
||||
| `remote-git-sync.md` | 2 | scoped | Push/pull with conflict resolution for git-backed memory. |
|
||||
| `persona-router-completion.md` | 2 | scoped | Complete scaffolded persona router: auto-detection, manual switching, dynamic loading, handoff. |
|
||||
| `chain-modes-talking-thinking.md` | 2 | scoped | Talking vs Thinking chain modes. State machine, mode transitions, tool access control. |
|
||||
| `agent-profile-and-repo-manager.md` | 2 | scoped | Agent profile cards + repo manager TUI screen. Per-agent SeedID, instance registry, uptime. |
|
||||
| `studio-practice.md` | 3.0 | pending | Allocated inference budget for long-form non-conversational work. The muse needs time — literary, philosophical, political witness writing that doesn't fit in chat turns. Studio mode with sustained tool-use loop, output to files, budget model, schedule integration. |
|
||||
| `chat-vs-code-differentiation.md` | 3.0 | pending | Distinct Chat and Code screens. Code mode: raw tool results, monospace, no bubble wrapping. |
|
||||
| `code-mode-tool-rendering.md` | 3.0 | **landed** | Per-tool renderers (bash, read, write, edit, grep, glob, list_dir, memory), Code mode header pill, Aster rename. |
|
||||
| `tui-message-interactions.md` | 3.0 | scoped | Click-to-copy, click-to-cockpit-jump. Mouse hit-testing, clipboard, cockpit anchor scrolling. |
|
||||
| `message-bubble-overflow.md` | 3.0 | pending | Fix content breaking out of bubble borders. Constrain markdown rendering width. |
|
||||
| `strip-emojis.md` | hygiene | pending | Remove pictographic emoji from logs and source. Keep functional TUI glyphs. |
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Code mode — richer inline tool rendering
|
||||
status: partial
|
||||
status: archived 2026-08-17
|
||||
priority: medium
|
||||
created: 2026-05-12
|
||||
landed: 2026-05-20 (Tiers 1-3: per-tool args, compact details, full card body)
|
||||
|
|
@ -111,7 +111,7 @@ The per-tool rendering was implemented as a private module `src/ui/chat/tool_ren
|
|||
- `turn.rs` — all 5 comment/string references updated
|
||||
- 0 `/aster/` matches remaining in `src/`
|
||||
|
||||
### Deferred (original scope, not delivered)
|
||||
### Deferred enhancements (not required to keep this task live)
|
||||
- Per-tool renderer trait (using match dispatch instead — simpler, same result)
|
||||
- Tool grouping (jcode's `append_tool_group_summary` pattern)
|
||||
- Streaming tool output (needs new `BackendEvent::ToolOutputDelta`)
|
||||
|
|
@ -1,5 +1,11 @@
|
|||
# Federation, Reach & Consult — Phased Implementation Plan
|
||||
|
||||
**Status: archived 2026-08-17.** All eight implementation phases recorded here
|
||||
landed. Node commissioning and independent per-node identity remain owned by
|
||||
`souveraine/saf/federation/01-node-enrollment.md`; in-process lite/full upgrade,
|
||||
device admission, and encrypted seed storage remain explicit future work there
|
||||
or in the owning security architecture, not unfinished phases of this plan.
|
||||
|
||||
## Context
|
||||
|
||||
The EventBus is Souveraine's nervous system. Consciousness events (Aster's N+1 surfacings, reflections, archivist syntheses, compaction warnings) now fire on the bus — but only locally. There's no bidirectional transport between machines, no device registry, no routing, and no mechanism for an agent on one machine to summon itself (or a peer) on another.
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
title: Mid-Turn Subconscious Checkpoint
|
||||
phase: 2.5
|
||||
priority: 🔴 High
|
||||
status: landed
|
||||
status: archived 2026-08-17
|
||||
area: Consciousness / Turn Loop
|
||||
---
|
||||
|
||||
|
|
@ -1,7 +1,9 @@
|
|||
# Primitive Refactor — Super Task
|
||||
|
||||
> Created: 2026-05-15
|
||||
> Status: Scoping / discovery phase
|
||||
> Status: Archived 2026-08-17. The four monoliths were split into module
|
||||
> trees; the independent nervous, subagent, federation, mood, and surface work
|
||||
> this audit named has its own task or SAF owner.
|
||||
> Type: Umbrella — covers modularization, architecture separation, EventBus wiring, subagent lifecycle, posture/atmosphere/mood disentanglement, and TUI consumption of nervous-system data.
|
||||
|
||||
---
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
task_id: rename-aster-001
|
||||
title: Rename Aster references to "subconscious"
|
||||
status: pending
|
||||
status: archived 2026-08-17
|
||||
priority: medium
|
||||
phase: 2
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
status: planning
|
||||
phase: scoping
|
||||
status: archived
|
||||
phase: complete
|
||||
priority: high
|
||||
created: 2026-08-13
|
||||
owner: Souveraine
|
||||
|
|
@ -10,6 +10,13 @@ related:
|
|||
- ../../DEVICE-STATE-MACHINE.md
|
||||
---
|
||||
|
||||
**Archived 2026-08-17.** The planning session happened. `Belief<T>`,
|
||||
`NervousNode`, and `SomaticPlexus` landed and sessiond now owns the phone
|
||||
plexus. The current truth and remaining impulse/intention, barometer, and mood
|
||||
work live in `souveraine/saf/nervous/02-belief.md` and `03-felt-state.md`.
|
||||
This file keeps the pre-implementation audit and its stale assumptions as
|
||||
history; it is no longer a work queue.
|
||||
|
||||
# Somatic lane — planning session prep
|
||||
|
||||
Casey, 2026-08-13: *"We need to make this in a planning session itself — a
|
||||
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
**Phase:** 1
|
||||
**Priority:** 🔴 High
|
||||
**Status:** pending
|
||||
**Status:** archived 2026-08-17; implemented. The live tool has grouped numbered
|
||||
listing, exact id and unambiguous substring resolution, update/start/complete/
|
||||
delete, phase and active-form fields, and round-trip tests.
|
||||
|
||||
## Problem
|
||||
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
title: User Nickname System
|
||||
phase: 1.0
|
||||
priority: 🟡 Medium
|
||||
status: landed
|
||||
status: archived 2026-08-17
|
||||
area: Tools / TUI
|
||||
---
|
||||
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
---
|
||||
task_id: rename-aster-001
|
||||
title: Rename Aster references to "subconscious"
|
||||
status: pending
|
||||
priority: medium
|
||||
phase: 2
|
||||
---
|
||||
|
||||
# Task: Rename Aster references to "subconscious"
|
||||
|
||||
Aster is Ani's personal subconscious agent name, not a framework concept. The codebase should refer to the N+1 pass and its components as `subconscious` everywhere, not `aster`. This is a mechanical rename pass — no behavior changes.
|
||||
|
||||
## Files to rename
|
||||
|
||||
### References in source (`src/`)
|
||||
|
||||
| File | What to change | Count |
|
||||
|------|---------------|-------|
|
||||
| `src/server/consciousness_engine.rs` | Comments mentioning "Aster", `ASTER_SAFE_TOOLS`, `ASTER_MAX_TOOL_ROUNDS`, `ASTER_INTER_ROUND_DELAY_MS`, variable names `aster_tools`, `aster_from_files`, doc comment for `parse_observations` | ~25 occurrences |
|
||||
| `src/core/prompt.rs` | `build_aster_prompt` → `build_subconscious_prompt`, test `aster_prompt_from_files` → `subconscious_prompt_from_files`, test content "I Am Aster" → "I Am Subconscious" | ~6 occurrences |
|
||||
| `src/core/tools/agent.rs` | Comments: "Aster equivalent" | ~2 occurrences |
|
||||
| `src/core/tools/subagent.rs` | Comments: "Ani + Aster" | ~2 occurrences |
|
||||
| `src/core/tools/schedule.rs` | `source: aster` in frontmatter template → `source: subconscious` | 1 occurrence |
|
||||
| `src/core/subconscious/mod.rs` | Comments referencing "Aster" | ~3 occurrences |
|
||||
| `src/core/config.rs` | Comment: "Max tokens for Aster's response" | 1 occurrence |
|
||||
| `src/core/compact/strategy.rs` | Comment referencing "Aster" | 1 occurrence |
|
||||
| `src/backend/mod.rs` | Comment: "Aster-voice bubble" | 1 occurrence |
|
||||
| `src/backend/local.rs` | Comments: "pre-aster", "before Aster fires" | ~3 occurrences |
|
||||
| `src/ui/buddy_panel.rs` | Comments and field docs referencing "Aster" | ~3 occurrences |
|
||||
| `src/ui/cockpit_panel.rs` | Comments, doc strings, title string "Aster is listening…" | ~6 occurrences |
|
||||
| `src/ui/app.rs` | Comments referencing Aster | ~2 occurrences |
|
||||
| `src/server/mod.rs` | Comment referencing Aster | 1 occurrence |
|
||||
|
||||
### Configuration files
|
||||
|
||||
| File | What to change |
|
||||
|------|---------------|
|
||||
| `souveraine.toml` | Comment `# Aster — terse, analytical...` → `# Subconscious — terse, analytical...` |
|
||||
|
||||
### Documentation
|
||||
|
||||
| File | What to change |
|
||||
|------|---------------|
|
||||
| `reference/Fimeg.md` | Many references — these are historical/personal context. **Keep as-is** (Aster is a real person/agent in Casey's history, not code). |
|
||||
| `docs/INDEX.md` | References to `ASTER_ARCHITECTURE.md` — keep as doc filenames if they exist. |
|
||||
| `docs/MEMORY_BLOCKS_DECISION.md` | Historical references to Aster. **Keep as-is** — they're explaining past context. |
|
||||
|
||||
## Guidelines
|
||||
|
||||
- **Const names**: `ASTER_SAFE_TOOLS` → `SUBCONSCIOUS_SAFE_TOOLS`, `ASTER_MAX_TOOL_ROUNDS` → `SUBCONSCIOUS_MAX_TOOL_ROUNDS`, etc.
|
||||
- **Function names**: `build_aster_prompt` → `build_subconscious_prompt`
|
||||
- **Variables**: `aster_tools` → `subconscious_tools`, `aster_from_files` → `subconscious_prompt_from_files`, `pre_aster` → `pre_subconscious`
|
||||
- **Comments/docstrings**: Replace "Aster" with "subconscious" in prose descriptions, but keep historical context in docs/ and reference/ intact
|
||||
- **Test content**: Update test assertion strings that reference "Aster"
|
||||
- **UI strings**: "Aster is listening…" → "Subconscious listening…" or similar
|
||||
- **Do NOT change**: `reference/Fimeg.md` (historical record), `docs/MEMORY_BLOCKS_DECISION.md` (historical context)
|
||||
|
||||
## Verification
|
||||
|
||||
1. `grep -rn -i 'aster' src/` should return 0 matches after rename
|
||||
2. `cargo build` — no compilation errors
|
||||
3. `cargo test` — all tests pass (including renamed test functions)
|
||||
|
|
@ -1,6 +1,11 @@
|
|||
# TASK 48 — The shell dies on any scene reload that owes a lock
|
||||
|
||||
**Status:** half fixed, half NOT, 2026-07-31 (`efe2d0d`, `b5ee87d`).
|
||||
**Status:** unblocked, still unproved, 2026-08-17. The daemon half remains
|
||||
live. Viewtop's admission and restore state machine has since landed and its
|
||||
two-client lock handoff was proved end to end, so TASK-43 is no longer a
|
||||
prerequisite. The QML acceptance below has not been rerun; the current root
|
||||
`Scope` still has no `reloadableId` even though its continuity object and
|
||||
`WlSessionLock` children do.
|
||||
|
||||
- **Daemon half: done and live.** sessiond admits a same-pid re-registration;
|
||||
tested in CI (4 tests) and installed on the phone as
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
# TASK 49 — Bearer selection and DNS belong to the state machine
|
||||
|
||||
**Status:** open, raised by Casey 2026-07-31 after three interlocking failures
|
||||
were measured on the phone. **Size:** design first, then small code.
|
||||
**Status:** machine half landed and exercised on hardware; acceptance 3–5 and
|
||||
split DNS remain open. Raised by Casey 2026-07-31 after three interlocking
|
||||
failures were measured on the phone.
|
||||
**Repo:** `souveraine` (sessiond), `Pixel3Arch` (`blueline-clat.sh`).
|
||||
|
||||
## Goal
|
||||
|
|
|
|||
|
|
@ -8,6 +8,33 @@ Created 2026-08-04 from an adversarial read of
|
|||
`ba4bd03..c98f4c8` and `souveraine 266af98..914e48f`. **Repo:**
|
||||
`souveraine-viewtop` unless noted.
|
||||
|
||||
## Follow-up faults measured 2026-08-16
|
||||
|
||||
The original ten findings below remain closed. Hardware use exposed the next
|
||||
compositor batch, and this task owns the defects so the dated handoff can return
|
||||
to archive:
|
||||
|
||||
- `transition.rs` clamps `shift_to` at 1.0, leaving the shell's resistance past
|
||||
the overview detent inert. Raise the compositor ceiling to the agreed 1.22
|
||||
and keep its clamp test honest.
|
||||
- `control.rs` serves one request and closes. A persistent client needs a loop
|
||||
to EOF and one `BufReader`; constructing a reader per line can discard bytes
|
||||
it already read past the newline.
|
||||
- Firefox is configured at 540 logical pixels and draws 504 while kitty obeys
|
||||
exactly. Instrument the configure/commit geometry; do not infer the missing
|
||||
strip from shell layout.
|
||||
- Firefox and Bitwarden popup menus render but take no taps. Position arithmetic
|
||||
has been checked against smithay; the next evidence is an instrumented build
|
||||
logging which surface `client_surface_under` selects.
|
||||
- `in_layer` stops at the top layer whose bounding box contains the point. If
|
||||
that surface's input region rejects, it returns `None` instead of trying the
|
||||
next layer down. A transparent overlay can therefore consume a tap without
|
||||
receiving it.
|
||||
|
||||
The package-owned shell and wrapper-target cleanup remain TASK-76. Motion
|
||||
architecture and the measured lossy transport live in
|
||||
`souveraine/saf/surface/01-motion.md`.
|
||||
|
||||
**Three more defects the hardware found that four gates did not**, which is the
|
||||
whole argument for this section existing. The third was found by re-checking
|
||||
after the work was already called done:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
# TASK 76 — Provisioning belongs to a package, per device, per arch
|
||||
|
||||
**Status:** scoped 2026-08-15, measured on both devices, not started.
|
||||
**Status:** in progress 2026-08-17. The viewtop-owned session edge and wrapper
|
||||
targets landed in `souveraine-viewtop`; package-owned QuickShell content,
|
||||
commission-time activation, removal of local shadows, and fresh-install proof
|
||||
remain.
|
||||
**Size:** one session for the audit fixes, a second for the provision packages.
|
||||
|
||||
Every souveraine binary ships as a package. Nothing that *activates* those
|
||||
|
|
|
|||
|
|
@ -29,10 +29,9 @@ Four that are cheap relative to what they unblock:
|
|||
|
||||
| # | Task | What's left |
|
||||
|---|------|-------------|
|
||||
| 60 | [Multitasking is a place, not a transition](60-the-multitasking-view.md) | One-owner compositor and shell halves are built; strand repro and measured landing pass on glass. `16c6ee1` is pushed and CI 1236 is green. What remains is Casey's thumb on the settle/fade and a real split-zone card check. |
|
||||
| 53 | [viewtop audit: what it left open](53-viewtop-audit-open.md) | All ten fixed and **packaged onto the phone** (`r74.g6c9614c20471`). The cold boot then exposed a *third*: a lost sessiond race had left the power button dead — discovery waits now. Hardware found two more the gates did not — `delivered` reported true for a withheld contact, and a drift warning that fired on every normal close. What is left needs the PIN. |
|
||||
| 60 | [Multitasking is a place, not a transition](60-the-multitasking-view.md) | One-owner carry, measured card geometry, velocity-seeded spring, tray, Home, and the strand repro are on glass. What remains is a real split-zone card check; the inert 1.22 overshoot clamp is a TASK-53 compositor defect. |
|
||||
| 53 | [viewtop audit: what it left open](53-viewtop-audit-open.md) | The original ten and their cold-boot follow-ups are fixed. The 2026-08-16 hardware pass added the live compositor batch: overshoot clamp, persistent control connection, Firefox's 504/540 width mismatch, popup hit testing, and transparent-layer fallthrough. |
|
||||
| 43 | [viewtop: the Souveraine compositor](43-viewtop-compositor.md) | Runs on the phone. Next lane is the ext-session-lock admission gate. The two-client lock handoff is the thing not to get wrong. |
|
||||
| 66 | [souveraineai.com overhaul](66-souveraineai-overhaul.md) | Rework landed 2026-08-10, waiting on push. Nested Astro docs repo folded into `souveraine-website` with history; the static `public/*.html` shell archived, not deleted. Left: `astro build` green in the merged repo and the server rebuilding from the merged tree. |
|
||||
| 29 | [SouveraineOS Updater](29-souveraine-updater.md) | Ships and installs by `pacman -Syu`. **Read-only on device** until something runs a polkit agent — that is the shell's job. Also owns TASK-42's layer 2. |
|
||||
|
||||
## In progress
|
||||
|
|
@ -51,6 +50,7 @@ Four that are cheap relative to what they unblock:
|
|||
| 42 | [Build outcomes are invisible](42-build-outcomes-are-invisible.md) | Layer 1 built (`tools/ci-status.sh` + push hook). Layer 2 is TASK-29's, layer 3 is TASK-19's. Pin-rot prevention unbuilt. |
|
||||
| 02 | [Lockscreen-as-Rust-system](02-lockscreen-rust-system.md) | sessiond's fallback should render the glance, not a second PIN pad. Stopgap shipped 07-17. |
|
||||
| 14 | [Overview → phone app grid](14-overview-appgrid.md) | Paged app grid replacing the desktop workspace pane; Auxo-style running cards; unconditional Home path. |
|
||||
| 49 | [Bearer selection and DNS](49-bearer-selection-as-device-state.md) | Machine evidence, settle window, `PreferLink`, tunnel-underlay pinning, readout, and the first two hardware checks landed. Open: split DNS through resolved, wifi/LTE transition, and honest deaf-tunnel proof. |
|
||||
|
||||
## Blocked or gated
|
||||
|
||||
|
|
@ -75,11 +75,10 @@ Four that are cheap relative to what they unblock:
|
|||
| 58 | [Host power: the SMB2 OTG boost](58-host-power-smb2-boost.md) | Host data works; the boost isn't. The SMB2 5 V boost exists in silicon and mainline's `qcom-smbx-charger` never registers it. Investigation first (which tree builds the running kernel, does smb2 touch the boost, does `qcom_pmic_typec` bind pmi8998), then vbus-supply + regulator + typec. Unlocks host-mode power, power-bank mode, and the Pi without a wall wart. |
|
||||
| 57 | [The Pi dock head](57-pi-dock-head.md) | Phone stays a gadget; the Pi 4 drives the monitor + dock. NCM link is default, Venus encoder is present, compositor capture landed — the unproven seams are `zwlr_screencopy` vs our own capture IPC, and the Pi's own bring-up ("major malfunctions TBD"). Four phases: Pi bring-up, static chain, real capture + udev trigger, input injection. |
|
||||
| 56 | [The island, and the bar's honest face](56-island-and-the-bars-honest-face.md) | Bar clears a region for sprawling notification banners, agent-controlled (Part A: design questions). Part B is buildable now: drop the LTE suffix, tap-to-cycle the carrier name (Fido → Casey → Fimeg), and a network-type indicator that shows the live connection instead of a wifi glyph that never reflects cellular. |
|
||||
| 55 | [The hand's verbs: a window action sheet](55-hand-verbs-on-the-glass.md) | **Sheet built and deployed 2026-08-05.** The tap carries its window now (the centroid was being dropped, which is why it could only reach the overview); `Kill` added because `Close` is a request a hung client never reads; `ViewtopControl.qml` is the shell's one path to the scene verbs. Split's chooser, Home-via-compositor, and Move-as-a-mode (`grab`/`drop`) all landed the same day; the three-finger **drag was deleted outright** — it beat the tap to nearly every gesture, and zones now move only when something says so. Left: a real resize handle, widgets on the cleared home zone, and shipping the drag-removal package (viewtop CI 1165 failed in checkout). Also surfaced a runtime-lock paint gap — black until the lockscreen draws, because only boot has a splash→glance→lockscreen chain. |
|
||||
| 52 | [Atmosphere](52-atmosphere.md) | Attention as a compositor capability — the fifteen-technique vocabulary. Two are **already landed** (`expose` is negative space, `pose` is gravity wells), and `compile_custom_pixel_shader` + `PixelShaderElement` are already in our smithay, so most of the rest needs no new machinery. Build the attention model and one clock **first**; fifteen uncoordinated animators is §1's blind actors in the render path. |
|
||||
| 50 | [Her hand on the glass](50-agent-hand-on-the-glass.md) | Every scene intent reaches the compositor now **except touch** — so she can move, scale, dim and close a window and cannot press anything inside one. The receiving end is built (`Origin::Agent`, the disjoint slot namespace, the evidence predicate); nothing calls it, so she still reaches touch through uinput, which is the exact conflation `input.rs` exists to prevent. Also owns the inverse mapping `pose` owes the hit test. |
|
||||
| 51 | [viewtop to daily driver](51-viewtop-to-daily-driver.md) | The punch list between *runs* and *stable*, all of it found by using the phone: windows stack with nothing to tell them apart, screen capture is written and unmerged (so no UI change can be verified), volume buttons are recognised and dropped, and five named holes that are one decision each. |
|
||||
| 48 | [Shell dies on any reload that owes a lock](48-lock-surface-reload-fatal.md) | Fully diagnosed 07-29, 11 crashes since 07-17. A reload re-requests ext-session-lock while the outgoing instance still holds it → `FATAL: Tried to show lockscreen surfaces without active lock`. **Sync with TASK-43 before touching the lock path.** |
|
||||
| 48 | [Shell dies on any reload that owes a lock](48-lock-surface-reload-fatal.md) | **Unblocked.** Viewtop's lock admission/restore and two-client handoff now exist. The QML root still lacks the reload identity its children carry; the locked reload acceptance has not been rerun. |
|
||||
| 47 | [Auto-brightness: anchors, none of it built](47-auto-brightness-anchors.md) | §12 reads as settled and has **zero** code behind its actuation half — no brightness `Action`, no anchors, `grep anchor src/` is empty. The evidence half (lux in, health tracked) is live. |
|
||||
| 46 | [Camera: **the front camera works**](46-camera-imx363.md) | **First frame captured 2026-07-29** on the running kernel — no reboot, no DT change. Both front IMX355 were already bound; nobody had tried streaming. Recipe + the stride/packing gotchas are in the task. Next: exposure controls, then libcamera. Rear IMX363 DT (`c7784b716`) still unbuilt but no longer the blocker. |
|
||||
| 44 | [Fingerprint (FPC1020)](44-fingerprint-fpc1020.md) | Piece 1 (wake source / input) is a session — DT + shim already extracted. Piece 2 (biometrics) is a TrustZone question, answer it before scheduling it. |
|
||||
|
|
@ -96,15 +95,12 @@ Four that are cheap relative to what they unblock:
|
|||
| 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) | 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. |
|
||||
| 76 | [Provisioning belongs to a package](76-provisioning-by-package.md) | Five hand-placed files own no package on the two live devices, and `/etc/systemd/system/souveraine-machined.service` shadows the packaged signer unit on **both**. Activation is two unversioned lua lines. `blueline-edge-sense` already ships the correct `.wants` pattern. |
|
||||
| 76 | [Provisioning belongs to a package](76-provisioning-by-package.md) | The viewtop-owned session edge and legal wrapper targets landed. Still open: package-owned QuickShell content, commission-time activation on each device, removal of `/etc` and user-unit shadows, and fresh-install proof. |
|
||||
| 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. |
|
||||
| 33 | [Battery belongs to the state machine](33-battery-as-device-state.md) | Charge now enters as `SensorSource::Charge` through sensord and sessiond interprets it. Open: UPower supplier-walk threshold write support and the step-up-gated charge policy. |
|
||||
| 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) | 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. |
|
||||
|
||||
## Conventions
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# TASK 24 — Keyboard layout rethink
|
||||
|
||||
**Status:** superseded in implementation 2026-08-11 by TASK-17's one-keyboard
|
||||
**Status:** archived 2026-08-17; 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`.
|
||||
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
# TASK 38 — Pill swipe-to-max swaps the keyboard
|
||||
|
||||
**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
|
||||
**Status:** archived 2026-08-17; superseded by TASK-17. 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
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
# TASK 55 — the hand's verbs: a window action sheet
|
||||
|
||||
**Status: 2026-08-16 — one acceptance criterion left, and it is Q2's.** Split's
|
||||
**Status: archived 2026-08-17 — its remaining criterion belongs to TASK-30/31.** Split's
|
||||
chooser and Home both landed. The sheet now carries six verbs: Move, Resize
|
||||
(corner drag), Zoom (`pose`, sprung), Float/Unfloat, Split, Close/kill. It
|
||||
dismisses on an outside tap and on the subject disappearing.
|
||||
|
||||
**Unmet: "the sheet's entries are read from the same source the dial's will be
|
||||
**Moved, not lost: "the sheet's entries are read from the same source the dial's will be
|
||||
— no third hand-written list."** `WindowSheet.qml` still hand-writes six
|
||||
`SheetButton`s and the dial still hand-writes its ring. That is TASK-30's verb
|
||||
table and TASK-31's dial entries; it cannot be closed inside this task, and it
|
||||
is the only acceptance line still open. Everything else on the list is done.
|
||||
table and TASK-31's dial entries. Those two live tasks now own that acceptance;
|
||||
everything this task could close is done.
|
||||
|
||||
Created 2026-08-04, from Casey: *"I asked
|
||||
for a Three Finger Tap overlay — a couple of buttons: Move/Resize, Split,
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
# 66 — souveraineai.com overhaul
|
||||
|
||||
Status: **shipped and verified 2026-08-10.**
|
||||
Status: **archived 2026-08-17; shipped and verified 2026-08-10.**
|
||||
Owning repo: `souveraine-website` on the LAN forge; served from `/ssd-databases/Souveraine/website` (docker, port 3303).
|
||||
Owner: Rook, under Casey's direction. Casey took the site's identity decision: souveraineai.com presents SouveraineOS, with Souvie as the default agent; the substrate doctrine stays the load-bearing content.
|
||||
|
||||
|
|
@ -19,12 +19,17 @@ useful thing in it.
|
|||
| 11 | souveraine-secrets | **built and committed 2026-07-20.** |
|
||||
| 13 | Active Edge (squeeze) | **done 2026-07-28.** Force 2502–2990 against a 2500 threshold, producer → authority → shell, pocket veto in the middle, opens the dial. Cold-boot handshake check moved to TASK-28. |
|
||||
| 22 | settings fullscreen tweaks | **folded into TASK-19, 2026-07-26.** Its own text sourced its candidates from 19's "still required" list, and its status was a placeholder. |
|
||||
| 24 | [keyboard layout rethink](24-keyboard-layout-rethink.md) | **superseded by TASK-17, archived 2026-08-17.** The reference-led Daily/Terminal layouts replaced the Stevia patch plan; remaining glass and completion work stays with TASK-17. |
|
||||
| 35 | sessiond handler deadlock | **fixed 2026-07-26**, souveraine `4d652bb`. A `MutexGuard` held across an `if let` body; the executor then locked the same non-reentrant mutex. The liveness-reporting half is TASK-08 (f). |
|
||||
| 38 | [pill swipe keyboard swap](38-pill-swipe-osk-swap.md) | **superseded by TASK-17, archived 2026-08-17.** One Squeekboard process owns Daily and Terminal; the discarded process-swap gesture has no remaining work. |
|
||||
| 55 | [the hand's verbs](55-hand-verbs-on-the-glass.md) | **complete in its own scope, archived 2026-08-17.** Sheet, resize, zoom, float, split, close/kill, Home, and dismissal landed. TASK-30/31 own the shared verb-table source. |
|
||||
| 66 | [souveraineai.com overhaul](66-souveraineai-overhaul.md) | **shipped and verified, archived 2026-08-17.** The later rescued divergent prose tree has its own memory task and Casey-owned merge decision. |
|
||||
| 69 | [agent usage, one spine](69-agent-usage-session-daemon.md) | **absorbed into SAF 2026-08-17.** The polling envelope exists; the Rust daemon, aggregate Souveraine usage projection, and any action channel remain explicitly open in `souveraine/saf/surface/05-agent-presence.md`. |
|
||||
| 70 | [the island: agent surfacing](70-the-island-agent-surfacing.md) | **absorbed into SAF 2026-08-17.** Read-only session observation reached source; the rejected fixed-bar placement is gone. Island components wait for the later dynamic phone-bar host; permission control remains unbuilt. |
|
||||
| 72 | [the surfacing pane](72-surfacing-pane-tool-primitives.md) | **absorbed into SAF 2026-08-17.** Typed messages, tool cards, itinerary, footer controls, and resume reached the Panel; owned host, multimodal input, search/fork, and worker extraction remain in SAF surface chapters 04 and 06. |
|
||||
| 75 | [the shell must have a memory budget](75-the-shell-must-have-a-memory-budget.md) | **absorbed into SAF 2026-08-17.** The measurements remain historical and the worker extraction is not built. `souveraine/saf/surface/06-surface-lifetimes.md` now owns the resident/optional architecture and proof. |
|
||||
| — | fix-dock-fullscreen-detection | **superseded 2026-07-21** by `unify-shell-trees-laptop-phone`. The patch is correct but stranded per-device, which is that task's problem. |
|
||||
| — | [unify the shell trees](unify-shell-trees-laptop-phone.md) | **done 2026-07-31, archived 2026-08-17.** Both devices compose from one pinned base plus a declared phone overlay; zero stranded files remained. |
|
||||
| — | unified-device-state-deploy | **done 2026-07-25.** `0.1.r219` installed from the repo, sessiond took the lock, the machine reached `Locked`, forensic log recorded `panel-dim` then `panel-off`. Two checks moved to their owners: proximity-blanks-locked-screen to the sensor tasks, and the cold-boot shell handshake to TASK-28. |
|
||||
|
||||
## `from-substrate/`
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
# TASK: Unify the Souveraine shell trees — laptop, phone, SouveraineOS
|
||||
|
||||
**Status:** **DONE — verified 2026-07-31.** Every goal in this file is met.
|
||||
**Status:** **ARCHIVED — done and verified 2026-07-31.** Every goal in this file is met.
|
||||
Zero stranded files; the drift it was filed against is gone; it blocks nothing.
|
||||
Ready to move to `archive/`.
|
||||
Moved to `archive/` 2026-08-17.
|
||||
**Filed:** 2026-07-21
|
||||
|
||||
## Re-measured 2026-07-31 (md5 of every file, both devices)
|
||||
Loading…
Reference in a new issue