Files
lux/docs/constellation-work.md
T
2026-09-10 10:19:05 +02:00

295 lines
19 KiB
Markdown

# Constellation: working state
Read [the design](constellation.md) and this file to resume. Keep this file short:
replace superseded state rather than appending a chronological log.
## Working agreement
- Explore the philosophy through concrete use, discuss meaningful choices, then
implement a small coherent change. Curiosity and alternative designs are welcome;
an idea need not prove a defect before we explore it.
- Write succinctly without losing important details. Distinguish accepted choices,
proposals and observations. Ask when intent would change the design; resolve
routine implementation details autonomously. Infer opportunities from the user's
philosophy and actual use; contribute design ideas beyond literal backlog items.
Continue to the next natural step when the user could only usefully say "continue";
pause for material choices or missing authority, not routine progress.
- Minimize input stops: plan a coherent batch of autonomous work and gather the
material inputs needed for the next batch together. Avoid serial question/action
loops. When pausing, state exactly what input is needed and what it will decide;
otherwise continue with the next logical step rather than ending with an offer.
- The main agent owns alignment, design and integration and may do small work.
Use subagents for bounded independent investigations or implementation with clear
ownership. Begin with at most two workers; avoid overlapping writes, duplicate
investigations and mandatory delegation of trivial tasks.
- Give workers the question, relevant paths, constraints and expected result.
Prefer a compact brief and fresh context when sufficient; retain relevant prior
context for follow-ups. Return conclusions, uncertainty and evidence pointers,
not raw logs. Astra/Sol orchestration is a candidate to learn from, not a fixed rule.
- Read only what can affect the current decision. Use quiet commands and bounded
output; keep large logs in `/tmp` and inspect relevant failures. Do not repeatedly
check settled facts. Consult current documentation for consequential or unfamiliar
interfaces when needed for the task.
- No tests unless explicitly requested. Keep other verification proportional;
report only what was actually checked. Avoid turning small changes into campaigns.
- Keep durable decisions in the design and current questions/next steps here.
Add an area-specific document only when an active topic outgrows this arrangement.
No separate backlog, scratchpad, audit ledger or agent-role files for now.
## Boundaries
Repository remotes are read-only. Only the user activates system generations.
Agents must not have write access to live company systems; test writes require
task-specific authority and care. Do not read secret values for layout discovery.
Current exploration does not authorize relocating credentials, synchronizing
company content or deleting existing material. Existing local changes are preserved.
## Git baseline — 2026-09-09
The accumulated NixOS changes are recorded in focused local commits on
`chore/workflow-system`: AI tooling/inputs, editor ergonomics, query persistence
and target context, workspace navigation, Notes, SharePoint, Zellij and TeamViewer.
The original long handoff and archived plans are preserved in commit `4e3a3ac`;
use Git history for chronology. `nvim.log` is retained locally and ignored.
Workbench changes are committed on its local `main`: `eb8da6a` organizes HTTP/SQL
material and `063157c` archives helpers and documents native tools. The ordinary
company-root files are outside either repository and remain user-owned.
This cleanup preserves implementation behavior; a commit does not establish runtime
acceptance. Keep subsequent implementation and its documentation in the same
coherent commit before starting unrelated work.
## Implemented state
- **Places:** `~/yookr` has ordinary `.envrc` and `AGENTS.md` files; its environment
loads workbench tools only. Workbench is at `~/yookr/workbench`, company projects
at `~/yookr/projects`, and personal groups at `~/projects/{own,ext,forks}`.
Direct moves retained archives/worktrees; all three linked dashboard worktrees
were repaired. Nix owns tools/integration, not these workspace files.
- **Navigation:** Walker enters Yookr or a repository; Git identity follows the
company root; XDG projects points to `~/projects`. Notes has a desktop entry
opening `~/sync/notes` without creating a daily note. Existing note commands,
project search and Niri daily-note behavior remain.
- **Synchronization:** Bruno collections were previously moved to Trash on Zenith
and their shared Syncthing entry removed. Other devices' files were untouched.
Syncthing was subsequently observed running. Notes and credentials remain in place.
- **API/database work:** workbench `http/` groups requests by service with shared
authentication; `databases/` groups reusable queries by database. Private HTTP
environment files are ignored at any depth. Dadbod working queries persist under
`stdpath('data')/db_ui/working`; write them there without promoting them into Git.
Saved-query storage also contains connection state and must stay outside Git.
Lualine uses native Kulala environment and Dadbod connection/timing components.
These indicators are not access controls.
- **Editor ergonomics:** word-boundary wrapping, count-aware displayed-line `j/k`
in ordinary normal/visual buffers, and Blink Escape cancellation. The existing
`tests/neovim-ergonomics.lua` is retained; earlier smoke-check evidence is in the
archived plan, with interactive preview restoration/visual behavior unproven.
- **Agents:** Herdr is selected; agent-deck and tmux remain installed alongside it.
Codex has agent-deck notifications and hooks enabled. Shared Context7/NixOS skills
live under `.agents/skills`; a Nix-managed marketplace exposes Ponytail.
Zellij is also declared on workstations. Further project workflow work is deferred.
- **SharePoint:** Zenith declares an hourly service syncing `company-sharepoint:`
into `~/.local/share/yookr-reference/sharepoint/Algemeen` and
`company-sharepoint-projecten:` into `Projecten`. Each invocation has
`--max-delete 100`; new files use `UMask=0077`. The latest implementation only
checks for `rclone.conf`; the old environment-file gate is gone. Archived setup
instructions describe an earlier version. Consent, remote configuration and
synchronization state were not inspected during this cleanup.
- **Remote support:** Zenith enables TeamViewer. Temporary Xorg/Xfce settings are
comments only. The purpose beyond remote support and runtime acceptance were
not recorded; preserve the change without calling it a settled design.
- **Inputs:** accumulated lock updates are retained, including an older Elephant
revision (`376ee71c` replacing `23f37238`). No rollback rationale was recorded.
## Activation and verification
Earlier handoffs report user activation of the relocated XDG/Git/Walker paths and
Dadbod working-query persistence. Notes and the newer target statusline were last
recorded as pending activation. Only Zenith's filesystem was relocated; other hosts
need their own migration before adopting the shared paths. Reopen shells or
recreate path-dependent development environments as needed; no compatibility links
or cache rewrites were introduced.
For this cleanup, `nix flake check --no-build --quiet` and diff whitespace checking
passed in both NixOS and workbench. NixOS emitted the expected dirty-tree and unknown
`modules` warnings; workbench emitted only the dirty-tree warning.
No builds, tests, activation, credential reads or company-service calls were
performed. Active-generation differences were not checked; earlier activation
reports are not a fresh comparison with this baseline.
## Open choices and next discussion
Current focus: look and feel/theming, informed by `~/sync/notes/setup-todo.md`.
The user accepted complete Nix theme modules with arbitrary plugin/configuration
behavior, rather than Stylix or a palette-only abstraction. The single import in
`modules/capabilities/theme.nix` selects `./_themes/kanagawa.nix`. `_themes` is
excluded from automatic module discovery, so unselected themes are not loaded.
Kanagawa owns GTK/icons/cursor, Qt integration, Kitty, Niri colors, Noctalia
palette/font/wallpaper, Herdr colors, the native Neovim plugin and its setup, and
Limine/SDDM/Plymouth appearance. Only Kanagawa is implemented so far; switching
means selecting another module and rebuilding, not a live theme picker.
Walker shares a compact layout with theme-provided colors: reduced padding,
24px icons, clearer secondary text, and a smaller minimum window height.
Limine's terminal background is fully transparent with no edge gradient so it
does not obscure the wallpaper. Runtime appearance needs user verification.
SDDM's purple-leaves theme and Plymouth's spinner are retained within Kanagawa;
their visual redesign and the low-frame-rate boot animation remain open.
Verification: flake evaluation and both workstation builds passed. A headless
check of the built Neovim confirmed Kanagawa Wave, inactive-window dimming and
the custom gutter setting. Rendered Herdr TOML, Walker XML and Limine settings
also passed targeted checks. No system activation or live desktop changes performed.
Dictation: plain local transcription is selected; rambling cleanup is deferred.
Handy preferences are application-owned again: the Nix settings generator and
startup reset are removed. The existing settings file is left untouched.
Nix installs Handy/wtype and runs Handy as a graphical-session user service.
Super+D launches a short-lived Python/evdev listener: hold to record, release D
or Super to finish. Both keys must be on the same keyboard. Niri owns the shortcut
and disables repeat; no persistent keyboard logger or exclusive input grab runs.
A udev uaccess rule grants the active local user access to keyboard event devices.
Super+Shift+D toggles; Super+Ctrl+D cancels. Both stop any active hold listener
before issuing their Handy command, preventing a later release from restarting
recording. Begin push-to-talk from idle: Handy exposes toggles, not idempotent
start/stop commands. Niri 26.04 itself has no key-release bindings.
Noctalia suppresses microphone activity popups/indicators; camera and screen-sharing
indications remain. Automatic paste and live capture need interactive checks.
Hang investigation, parked at the user's request: a debugger capture confirmed
Handy's recorder waits for another audio chunk before processing its stop command.
When capture stalls, stopping can therefore hang indefinitely; the transcription
worker was idle. Bluetooth transport failures accompanied the hangs, and the user
reported dictation working after disconnecting the Sony WH-1000XM6. The user wants
its microphone when connected. Keeping the headset in a microphone-enabled HFP
profile was proposed to avoid repeated profile transitions, but was not applied
or verified; the reconnect attempt timed out. No source or Bluetooth configuration
was changed. CPU and Vulkan batch inference both worked; changing inference backend
is not an established fix. Resume this investigation only if requested.
Synthetic listener checks cover release during startup, repeat, modifier-first
release, device disconnect and cancellation, without live input/audio access.
System activation and an interactive hold/release trial remain user-owned.
Formatting, flake evaluation, both workstation builds, synthetic listener checks
and whitespace checking passed. No live input listener or microphone was started.
The focus is the broader environment, not further API/database polish. Candidate
areas remain places/ownership, navigation/interaction, human/agent collaboration,
and system operation/maintenance; these are discussion areas, not a work queue.
Herdr's configured keys are accepted: the user reports liking them in practice.
Niri workspace grouping stays informal while the user discovers what fits; Herdr
provides enough structure for now. No workspace rules or fixed layout are needed.
The user reopened Herdr configuration on 2026-09-10 for direct shortcuts and less
interaction friction, using supported configuration only. Layout presets and
launchers are explicitly unwanted; arrange panes manually. Agent evaluation is
explicitly deferred. Do not resume replacement-tool comparisons or ask for an
evaluation task/budget as a prerequisite for this work.
Read-only inspection found existing Niri overview, workspace movement and tabbed
columns; Kitty has no declared project/session organization. Installed versions:
Kitty 0.48.2, Niri 26.04, tmux 3.7c, Zellij 0.45.1 and Herdr 0.9.0.
Herdr's installed default config confirms remappable navigation and agent jumps.
Current [Herdr keyboard docs](https://herdr.dev/docs/keyboard/) describe direct
chords; [Kitty sessions](https://sw.kovidgoyal.net/kitty/sessions/) supply native
session creation/switching. Session layouts and window overviews do not themselves
provide authoritative agent attention states. tmux detach keeps processes alive;
Zellij resurrection recreates layouts/commands, not process memory. None of these
capabilities was exercised interactively; no sessions were inspected or changed.
Deferred agent workflow proposal (not accepted or a Niri workspace requirement):
one lead conversation owns each coherent change. Use bounded subagents when work
is independent, with explicit ownership and evidence returned to the lead. Separate
worktrees for independent writing efforts, one integration owner. Keep enduring
repository rules in AGENTS.md, current goals/acceptance in task prompts, and durable
decisions/current state in existing project docs. No fixed agent team is selected.
Herdr configuration is now declared in `modules/capabilities/ai.nix`, including
the existing Kanagawa theme, workspace-sorted agent panel and disabled toasts.
Home Manager owns `~/.config/herdr/config.toml` after activation; maintain these
preferences in Nix. Its configured `.bak` mechanism preserves the previous regular
file. Direct Ctrl+Alt bindings supplement the existing Ctrl+B prefix shortcuts:
| Ctrl+Alt + | Action |
| --- | --- |
| H / J / K / L | Focus pane left / down / up / right |
| U / I | Next / previous workspace |
| O / G | Workspace picker / goto picker |
| P / N | Previous / next agent |
| [ / ] | Previous / next tab |
| Enter | New tab |
| V / Minus | Split right / down |
| F | Zoom pane |
| Q | Detach, leaving the session running |
| Shift+H / J / K / L | Swap panes left / down / up / right (Shift on each) |
| Shift+arrows | Resize pane directly |
| R | Resize mode |
| Tab / Shift+Tab | Next / previous pane |
| Backspace | Return to last pane, including across tabs/spaces |
| X / Shift+X | Close pane / tab |
| Shift+P / Shift+A | Rename pane / tab |
| Shift+[ / Shift+] | Move tab earlier / later |
| Shift+Enter | New space |
| Shift+W / Shift+D | Rename / close space |
| W / Shift+B | Open / create worktree |
| Y / E | Copy mode / open scrollback in Neovim |
| Shift+G | Lazygit popup |
| B | Toggle sidebar |
| / | Keybinding help |
| S / Shift+R | Settings / reload configuration |
Inside workspace navigation, U/I moves down/up and H/J/K/L retains pane navigation.
Niri and Kitty bindings are unchanged. Direct number bindings are removed because
the user finds them unergonomic; built-in prefix shortcuts remain available.
Use one space per project or worktree, tabs for different activities, and panes
for tools needed together. Start Neovim in a shell, split right with Ctrl+Alt+V
for an agent shell, and optionally split that pane down with Ctrl+Alt+Minus for
tests or a server. Choose and launch the agent manually. No preset is installed.
Ctrl+Alt+Shift+G opens lazygit at 90% width/height in the focused pane's working
directory. Quit lazygit to return; the popup owns input until its command exits.
Tabs now open immediately with generated names; rename them only when useful.
New spaces already skip naming, and new panes inherit the current directory by
default. Workspace-close confirmation remains enabled to protect running work.
Direct resizing, previous/next agent navigation, last-pane switching, copy mode,
and Neovim scrollback access avoid extra navigation or mode-entry steps.
No documented native setting or CLI action opens Goto directly in search mode;
that limitation remains under the configuration-only constraint. No input macros,
plugins, or package patches are added.
After activating Nix, reload Herdr with Ctrl+B then Shift+R; subsequent reloads
can use Ctrl+Alt+Shift+R. The expanded shortcuts require interactive verification
through Kitty, including popup working directory, pane swapping/resizing, and
scrollback opening. The earlier bindings were reported working by the user.
Verification (2026-09-10): formatting, flake evaluation, Polaris and Zenith no-link
system builds, and whitespace checks passed. Both hosts generate identical Herdr
TOML, accepted by installed Herdr 0.9.0's `config check`. No activation or live
Herdr session changes were performed.
The earlier activation installed the Herdr config and preserved `config.toml.bak`,
but Home Manager later timed out (below).
Activation fix (2026-09-09): Home Manager's service switch stopped and restarted
the running SharePoint oneshot, then waited until Home Manager's five-minute start
timeout. Service-state inspection identified SharePoint as the sole pending user
job; its oneshot start timeout is unlimited. This was not a Herdr file collision.
Set `Unit.X-SwitchMethod = "keep-old"` in `sharepoint-reference.nix` so activation
leaves an in-flight sync running; subsequent timer runs use the updated unit.
Verified against pinned Home Manager/sd-switch source. Formatting, flake evaluation,
Zenith build and whitespace checks passed; the focused sd-switch dry run reported
`Keep active sharepoint-reference-sync.service`, with no restart planned. No live
units were changed and no company content or credentials were read. The user must
retry activation to verify the full switch; sync health/content completeness were
not investigated.
Mail search remains unresolved. The workbench's custom mail reader, inventory
pilot, justfile and old README are archived; native Garden/kubectl/K9s now own the
documented operations. No replacement mail helper or semantic index is selected;
raw mailbox grep is not assumed sufficient. No new ingestion is authorized.
Human credential delivery remains both test/live via environment variables with
ordinary editor startup. Workbench `.envrc` supplies aggregate credentials; agents
must not source it. Separate read-only agent credentials and access isolation are
explicitly deferred, not prerequisites for unrelated work. Do not resume the
rejected per-connection launchers or per-selection decryption proposal.
Notes placement and further company material organization remain open. Work is
mostly project-based and notes mostly meetings; do not impose investigation
folders, outer project containers or company-wide editor search without a need.