diff --git a/docs/plans/credential-consolidation.md b/docs/.archive/plans/credential-consolidation.md similarity index 98% rename from docs/plans/credential-consolidation.md rename to docs/.archive/plans/credential-consolidation.md index 045b858..62088f5 100644 --- a/docs/plans/credential-consolidation.md +++ b/docs/.archive/plans/credential-consolidation.md @@ -1,5 +1,7 @@ # Yookr credential consolidation +Archived: historical credential inventory and migration evidence. + This inventory contains names and provenance only. It intentionally contains no credential values or value hashes. diff --git a/docs/.archive/plans/workflow-phase-two.md b/docs/.archive/plans/workflow-phase-two.md new file mode 100644 index 0000000..beca7d0 --- /dev/null +++ b/docs/.archive/plans/workflow-phase-two.md @@ -0,0 +1,1156 @@ +# Phase-two workflow design + +Archived: abandoned direction; recorded approvals and next actions are historical. + +Status: SharePoint login resumed at user request; admin coordination is now possible. +Mail retrieval design reopened: user questions the custom helper and proposes +semantic/vector search for mail and documents. No new ingestion is authorized. Earlier +A/B local changes remain pending user +activation and interactive editor acceptance. Updated 2026-09-08. + +## Scope and decisions + +Primary agenda: `~/sync/notes/setup-todo.md` (line references below refer to this +snapshot). Phase-one evidence: `../workflow-discovery.md`, `workflow-system.md`, +and `credential-consolidation.md`. During design these sources and implementation +are read-only; only this new planning file may be changed. A subsequent explicit +user instruction authorized tranche A/B implementation. The working method was +realigned before resumption; remotes remain read-only and activation user-controlled. + +## Working agreement for agents and handoffs + +- **Astra owns the whole task:** scope, source precedence, user intent, evidence + relevance, consequential decisions, conflicts, synthesis and integration. Keep + its context focused on those responsibilities; delegate bounded technical + investigations instead of routinely loading low-level tool/source output here. +- **Design delegation:** at most two GPT-5.6 Sol investigators, each with one + independent question, exact relevant paths and a concise evidence/uncertainty/ + recommendation return. Low effort for facts, medium for synthesis, high only for + critical judgment. Investigators neither delegate nor write shared files or + overlap. Use one fresh Sol reviewer at high effort for a substantial synthesis. + This design used those investigators and that reviewer; do not silently restart + the discovery budget or repeat their successful work after a handoff. +- **Astra is the orchestrator, not the implementer or tester:** it explores + high-level ideas with the user, maintains this plan, scopes bounded assignments + and integrates concise findings. Implementation, test writing and validation + belong to subagents, even for small changes. Carry applicable delegation limits + and read/write boundaries into each assignment; keep one writer per area. The + earlier Astra-written editor check violated this division of responsibility. +- **Collaborative exploration:** probe significant under-formed ideas with + concrete journeys and tradeoffs before choosing a solution. Make routine + assumptions. Do not require speculative memory, taxonomy or review policies; + learn those through use. Keep proposals distinct from accepted requirements. +- **Compose first, optimize from use:** start with the smallest existing units. + Do not predefine task/system categories, entry screens or workflows for imagined + convenience. Optimize a specific repeated interaction only after it causes + observed friction; a few ordinary manual steps are an acceptable baseline. +- **Evidence and context:** ask what decision each inspection can change. Accept + ordinary documented capabilities; inspect pinned APIs only where integration or + risk warrants it. Use targeted Context7/primary sources, bounded command output, + quiet Nix commands and failure-only logs. Stop checking when the decision is + settled. Keep raw output and investigation logs out of this living plan. +- **Minimal implementation and verification:** use existing owners, native tools + and the smallest complete change. Prefer existing checks and one bounded smoke + check of the changed integration. Add a small regression check only for concrete + custom logic or a confirmed defect; no expansive test harness, duplicated tests + of native behavior, or lengthy testing campaign for a few mappings. Report only + checks actually completed and their limits. +- **Durable state:** update this file after material decisions and before handoff, + compaction or finalization. Record accepted corrections, scope, dispositions, + consequential evidence, status, blockers and next action. On resumption read + those sections first; never treat a model switch as a fresh workflow or repeat + completed discovery. Keep the plan concise and remove superseded duplication. +- **Pause discipline:** the two design steering boundaries are complete. Further + questions need a material design choice or missing authority; routine progress + does not become another check-in. A change from design to implementation must + update the recorded scope before work starts. +- **Autonomous continuation:** continue all useful in-scope synthesis and bounded + delegated work without waiting for a "continue." Acknowledgements and completed + small steps are not stopping points. Exhaust independent work, then group only + material unresolved questions with the recommendation and tradeoff. Stop for + needed user input, missing authority or genuine completion—not routine approval. + +## Current implementation authority and checkpoint + +The user authorized the local-first company-context tranche after its final review. +Astra maintains this plan and coordinates; two bounded Sol implementation units +own (1) project/workbench navigation and local-mail retrieval and (2) native +SharePoint synchronization configuration. This implementation delegation does not +restart phase-two discovery. Existing reviewer audits integration if material. +No service/model code, remotes or mailbox state may be changed; Microsoft consent +and system activation remain user-controlled. SharePoint blockers do not stop the +independent source-navigation work. + +Current SharePoint implementation defaults: Zenith only, dedicated destination +`~/.local/share/yookr-reference/sharepoint`, hourly refresh plus manual preview/ +refresh, bounded first document library before expansion. Exact library and footprint +await authenticated discovery; this is not a permanent company-content allowlist. +Interactive Microsoft sign-in/consent is needed. Tenant-admin approval or a custom +app is conditional on actual policy, not an established prerequisite. No OAuth, +cloud reads, downloads or activation have occurred for this unit yet. + +Source-navigation/local-mail implementation is complete pending integration review: +workbench and model-project README/AGENTS now link the shared sources and mark +`DOMAINS.md` provisional. Workbench `just mail` uses one standard-library mbox +reader, with bounded metadata output and opt-in bodies; Thunderbird remains the +only syncer. A real `just mail Innexo --limit 1` read returned a cached company +message with source identity/date/folder and an available attachment. Wustmans +queries found no cached match, not proof of company-wide absence. The reader's +small self-check, documented invocation, command catalog and focused Nix check +passed. Folder/body coverage and freshness remain unknown. No mailbox state was +modified and no credentials were read by that pilot; the reader accesses message files, +not the client credential store. SharePoint configuration passed focused rendered +service evaluation, flake evaluation and the full Zenith system build without +activation. Review corrections are implemented: Just passes literal positional +arguments; the mail command uses a native read-only Bubblewrap mount and Python's +verified read-only mbox fallback, not a custom parser. A bounded verification +confirmed a non-writable mailbox handle; an adversarial argument check passed +without command execution. The routine self-check now runs without mounting or +reading the private mailbox, and its final run passed. This bounds that command, +not parent-agent credential authority. +SharePoint pins its gated config file and uses private `UMask=0077`; final rendered +unit evaluation passed after those changes, without repeating the full build. +Final review found no remaining material blockers. The native unit and its setup guidance +are in `modules/capabilities/sharepoint-reference.nix` and +`docs/sharepoint-reference.md`. The source gate remains absent; the subsequent +consent blocker and partial native-config state are recorded below. + +SharePoint previously required tenant-admin approval; the user now requests resuming +login and can coordinate with the admin. The old OAuth session was cancelled. Native remote names +are `orion:` and a partial `company-sharepoint:`; both are preserved. The runtime +source gate and local mirror directory are absent. No SharePoint content was read +or synced, and nothing was activated. A fresh native sign-in flow is authorized; +admin/tenant changes are for the user's administrator, never performed by agents. + +Next action: the existing `company-sharepoint` remote has been resumed without +duplication. A fresh token-redacted browser flow is waiting for the user's company +sign-in; configured requested scopes remain `Files.Read Files.Read.All Sites.Read.All +offline_access`. Capture any actual nonsecret approval details for the user's admin. +Keep requested permissions read-only; no download before scope/size/preview gates. +Semantic retrieval evaluation is paused, not authorized. The custom mail helper +is not accepted as the final approach; leave current local implementation in place +but do not expand it. Assess existing retrieval capability and semantic/hybrid search +before proposing a new index or provider. Do not repeat completed mail reads/builds, +ingest content, replace Thunderbird or remove files during this design discussion. + +The user's implementation go-ahead explicitly accepts write-capable credentials +for the **test** discovery pilot while permitting **read operations only**. This +supersedes the earlier requirement to prove test credentials read-only or deploy a +separate identity before that pilot. Production testing remains deferred until +agent-accessible production credentials for all systems are confirmed read-only. +No SOPS-wide credential export, production inspection, remote writes or generation +activation is needed for this pilot. Earlier design gates below remain the desired +production boundary, not a reason to block the accepted test pilot. + +Completed so far: eight lines of Neovim option/mapping changes; workbench source-map +and access guidance, a test-only inventory recipe, and a code-linked observation. +The test `yookr-management` namespace returned three Deployments, three Services +and three running Pods; the Svelte frontend has matching local manifest evidence. +The modified editor package built without activation. The 18-line runnable check +in `tests/neovim-ergonomics.lua` passed through configured startup: word wrapping +option, displayed-line motion, counted logical motion, unchanged operator mapping, +special-buffer fallback and configured Blink Escape cancellation. It does not prove +interactive preview restoration or visual-mode behavior. NixOS flake evaluation, +the workbench's existing command-catalog check and both tracked diffs' whitespace +checks passed. Invalid namespace rejection passed locally without authentication. +No company workload write was issued. No full system build or activation was run. + +Next action: the user activates when ready and checks wrapped prose in normal and +visual mode, an operator, completion-preview cancellation and ordinary Escape. +Do not expand the pilot, create a test framework, or repeat successful cluster reads. +Agent entry is settled for now: create a Herdr space, navigate to the relevant +folder and ask through the native agent. No popup or predefined system chooser. +Further design concerns composing existing company primitives on a real task, not +optimizing this entry in advance. The next-task selection is recorded in section C; +note search remains independent, not an authorized change or a prerequisite. + +Design direction: make frequent work discoverable, make its project and +environment visible, and constrain authority before adding automation. Nix owns +stable integration; applications own sessions and mutable state; repositories +own technical facts; the notebook owns personal knowledge. Prefer native keys, +files, protocols, and commands. Keyboard-first is a usability criterion, not a +requirement to replace a working GUI. New agenda entries remain candidates. + +Provisional priority: + +1. **Composable company workbench:** discoverable company context and reusable + access capabilities for investigation, design and authorized operations, with + explicit scope and enforced permissions. +2. **Keyboard ergonomics:** notes search/capture, completion cancellation, + wrapped-line and split navigation, visible context, then launcher/icon polish. +3. **Agent collaboration:** bounded output and context, existing native sessions + through Herdr, targeted skill/MCP repair, small comparative evaluations. +4. **Host operations:** actionable disk/service status and secure remote access; + remote agents only after isolation and a real offload use case. +5. **Personal administration:** bank-sync feasibility, vault hygiene and recovery, + filesystem organization; retain separate explicit daily-use PIM gates. + +Working defaults: explicit scope for each operation; use existing agent sessions, +file/native search, Home Manager and Android. Recommend a small keyboard tranche +alongside the workbench discovery foundation. Company production access is gated +on enforcement evidence, not a read-only label. + +The user accepted this order and access direction at the first steering boundary. +Important, under-formed ideas will be explored with the user before becoming +requirements; routine low-risk details may use the recommended default. + +The second steering establishes a broader workbench intent. It is the common +company entry point for humans and agents: small composable capabilities for +databases, APIs, queues, files, repositories and meeting knowledge should support +investigation, design, information synthesis and routine service management. +"Quick question" describes low-friction task entry, not a separate agent type, +short runtime, or read-only task. Examples include adding a NixOS capability, +finding a keybinding, explaining an editor action, investigating a RabbitMQ queue, +finding live database records, designing a data model and synthesizing SharePoint +domain information. Entry is now settled as Herdr → folder → native agent; +conversation lifetime can evolve through use. + +The working architectural proposal is a shared capability and context catalogue +that points to authoritative sources and existing tools. It should make relevant +context discoverable on demand; it need not preload all company information, +replicate each source, or impose a custom command wrapper on every tool. This +proposal is grounded in the user's clarification: company processes and knowledge +organization are still forming. Starting sources are SharePoint, meeting +transcriptions, codebases, backend services and GitHub. Phase two must allow these +sources and retrieval methods to evolve without redesigning the whole workflow. +There is no established company knowledge taxonomy to reproduce or wait for. +The model-project case also identifies company email, public web sources and +uncaptured employee knowledge. These are potential evidence sources, not a mandate +to build one connector per source or ingest everything. + +The durable design principle is inspectable text as the interchange for context. +Use existing Markdown, source files, JSON and tabular output as appropriate; +materialize files when useful for inspection, reuse or handoff rather than requiring +every response to become a saved file. Keep source location and revision or +retrieval time alongside derived text so an agent can distinguish current service +state, code behavior, transcript claims and reviewed business decisions. The +appropriate source depends on the question: inspect current systems for runtime +facts, and use code, documents and discussions for intent and rationale. Extracted +text is a view, not an independent truth. +Complex documents may still need their original tables, diagrams or attachments to +interpret them correctly; text extraction should retain links to those originals. + +Canonical ownership means where a file, service or decision is maintained, not that +its contents are correct or complete. `DOMAINS.md` may be wrong or incomplete, as +the user explicitly cautions. Apply the same skepticism to source comments, email, +transcripts and inferred business meaning. Distinguish observations, documented +claims, inferences and unresolved questions in ordinary prose; no confidence-scoring +framework. Contradictions trigger targeted checking, not automatic preference for +the newest document. Missing evidence is not evidence of a missing requirement. + +Initial organization should be a small editable source/capability map with native +commands and access prerequisites. Introduce domain groupings only as actual tasks +reveal them. New source adapters, indexing or cached text require a demonstrated +retrieval gap; no compulsory ingestion pipeline, plugin interface or central +knowledge database is selected. This keeps iteration local to the affected source. + +Live inspection is the preferred path for current-state questions: retrieve the +current database schema from the target database and discover deployed services +from the relevant Kubernetes environment. Source files still explain intended +schema changes and service responsibilities; runtime inventory alone does not +establish business meaning or capture services outside that cluster. Report the +actual environment and visibility scope, including unavailable sources. + +A synthesized service taxonomy is a candidate derived view. It should identify +observed facts, inferred relationships, source scope and last successful observation +time. Revalidate volatile claims against live sources when they matter to a task. +Start with an on-demand refresh using the same discovery capabilities; investigate +periodic agent-assisted updates only if maintaining that view proves useful in +practice. Native tools collect facts; agents may add synthesis where interpretation +is needed. A failed or partial refresh must not make old information appear fresh. + +The user does not yet know the useful memory or review policy and expects to learn +it during use. This is not a planning blocker. Keep native task history and simple, +replaceable artifacts; evolve retention and review conventions from concrete tasks +without requiring a general memory policy before starting. + +## Material evidence and conflicts + +- Phase one's workbench-only-cross-system-artifacts rule is historical scope. The + user's second steering broadens the phase-two design to company-wide task context + and routine management capabilities. This does not authorize implementation, + service mutation, or changes to existing documentation in this design phase. +- Phase one verified read-only operations but did not thereby establish that + supplied credentials lack write privileges. The new agenda's live-agent + restriction is stronger; credential delivery must be assessed before reuse. +- Phase-one SharePoint browse/download was deferred alongside personal workflows; + company document retrieval now belongs to W1, independently of personal PIM. + Existing API, database and RabbitMQ read pilots are evidence of reusable access, + not evidence that their aggregate credential delivery is suitable for agents. +- `modules/hosts/polaris/default.nix` already imports OpenSSH and permits port 22 + from `192.168.178.0/24`; the shared module disables root/password login. This is + declared configuration, not a new live verification. Wake-on-LAN remains open. +- `modules/capabilities/transcription.nix` already declares a systemd path unit + watching the inbox. Replacing a timer is already covered. +- `modules/capabilities/ai.nix` already declares agents, MCP, a Nix-owned skill, + Ollama and a grounded-docs container. Another retrieval store would need to + demonstrate a gap in these existing capabilities first. The phase-one statement + that global runtimes are absent has an explicit Node exception in current code. +- [Herdr keyboard](https://herdr.dev/docs/keyboard/) and + [remote workflows](https://herdr.dev/docs/how-to-work/) document keyboard control, + persistent sessions, and phone SSH access. Mouse-first marketing alone does not + justify replacement. Exact pinned integration remains a later implementation check. +- [Actual GoCardless setup](https://actualbudget.org/docs/advanced/bank-sync/gocardless/) + says new provider accounts stopped in July 2025. Actual is already hosted on + Orion, but that does not establish usable Rabobank sync for this user. +- [OpenAI models](https://learn.chatgpt.com/docs/models) supports choosing Astra + for demanding multi-step work and using the lowest adequate effort. Astra-led + synthesis with bounded Sol investigation is a hypothesis to evaluate, not a + claim that delegation is always cheaper or better. +- [OpenAI authentication](https://learn.chatgpt.com/docs/auth) describes native + cached credentials and automatic OAuth refresh. Keep OAuth with its client; + do not turn SOPS into a competing token-refresh authority. +- Local access evidence: `~/dev/work/yookr-workbench/.envrc` exports both test/live + DB connections and other credentials; its `justfile` selects the test Garden + target and K9s client mode. `modules/secrets/sops.nix` identifies a distinct + administrative age key. None of these files establishes server-side grants. +- Editor evidence: `modules/capabilities/neovim/lua-config/lua/{options,keymaps}.lua` + and `plugins/{completion,notes,http,database}.lua` establish the existing owners. + Context7 retrieved upstream [Blink cancellation](https://github.com/saghen/blink.cmp/blob/main/doc/configuration/keymap.md) + and [Kulala environment methods](https://github.com/mistweaverco/kulala.nvim/blob/main/doc/kulala.public-methods.txt). + These support native integration; pinned behavior must be checked during implementation. +- [Syntax-highlighting essay](https://tonsky.me/blog/syntax-highlighting/) informs + the restrained-emphasis candidate; it is an opinion, not a measured local defect. + +## Agenda dispositions + +Line numbers give complete traceability, including combined duplicates. Type: +**problem** = user-observed friction (not necessarily reproduced); **improvement** += proposed enhancement; **research** = unresolved capability/choice; +**speculation** = no demonstrated need. Recommend means a design recommendation, +not implementation authorization. Already covered means declared or historically +verified; it does not claim a fresh live test. + +| Agenda lines / idea | Type | Disposition | Owner / reason and dependency | +| --- | --- | --- | --- | +| 1, 82: global note search and note/agent entry keys | improvement | recommend | W2: direct desktop entry to existing notebook picker; retain daily capture. W3 owns agent entry. No second notes index. | +| 2, 66: simplify SOPS loading; SecretSpec | problem/research | investigate | W1: first narrow authority and export scope. Existing jq already performs necessary URL encoding/shell quoting. SecretSpec adds provider abstraction; adopt only if a real multi-provider requirement removes more code than it adds. | +| 3: Polaris SSH | improvement | already covered | W4: declared key-only, user-restricted SSH and LAN firewall rule; runtime reachability not rechecked. | +| 3: Polaris wake-on-LAN | improvement | investigate | W4: establish wired NIC/firmware support and waking source; no WAN port forward. Resume machine pilot explicitly before hardware tests. | +| 4: unclear terminal purpose | problem | recommend | W2: visibly name project/task/host through existing terminal or session title surfaces; do not encode secrets. Test identification with several terminals open. | +| 5: notifications | improvement | investigate | W3 owns agent attention, W4 service failures; choose one missed event and an actionable completion/failure notification. Preserve phase-one quiet default until a new pilot wins. | +| 5: keys that launch background work | improvement | investigate | W2 owns entry, the launched service/session owns lifecycle. First identify one repeated long task and how its status is reopened; a key alone would make work disappear. | +| 6: visible Kulala environment | problem | recommend | W1/W2: show native selected environment at request point. Public getter exists; result winbar alone is not proven to show request scope. | +| 7, 10: bounded command output and Nix-aware agents | problem | recommend | W3: refine existing command/context contract using actual recurring failures; preserve exit status and diagnostic files. No universal output-filter wrapper. | +| 9: Dadbod attachment, global environment, per-DB files | problem/improvement | investigate | W1: retain explicit per-operation environment as the safety rule. Choose buffer association, named query files or another native flow only after the user describes representative query journeys. | +| 11, 78: whole-system coherence and user/agent collaboration | improvement | recommend | Cross-cutting owner map and scope visibility below; improve the same entry points for both actors. No parallel agent-only knowledge universe. | +| 13: Neovim window movement across buffers | problem | recommend | W2: retain normal-mode Ctrl-h/j/k/l; use terminal-normal escape then same vocabulary. Add mode-specific bridges only for reproduced friction; no navigation plugin initially. | +| 15: Esc restores pre-completion text | problem | recommend | W2: Blink native cancel handles preview rollback; verify pinned behavior and define Esc as cancel-menu first, ordinary Escape when no menu. Accepted completion remains an edit handled by undo. | +| 16: Ctrl-j/k versus Ctrl-n/p | research | recommend | W2: keep established j/k movement in normal/navigation contexts; retain native n/p where applications own it. Do not override insert-mode meanings globally merely for symmetry. | +| 17: sometimes slow Walker | problem | investigate | W2: compare cold readiness and warm socket launch; service is already enabled. Optimize measured provider/startup bottleneck, not a speculative replacement. | +| 18: quick prompts through Walker, persistent Herdr | improvement | defer | W3: popup dropped for now; use a new Herdr space, navigate to the relevant folder and ask. No predefined system chooser. Revisit only a specific recurring friction; retain existing persistence. | +| 19: system-aware question agent | improvement | recommend | W3: discoverable current system context and capabilities usable by any agent; no distinct specialist daemon required. Nix tasks use system owners, company tasks use workbench context. | +| 20: Herdr keyboard fit | research | investigate | W3: official keyboard controls exist; evaluate five daily actions and prefix conflicts. Keep Herdr if keyboard pilot passes; native sessions remain fallback. | +| 21: Walker integrations, prefixes, projects/apps combined | improvement | recommend | W2: one launcher with distinct provider identities and existing project opener; promote frequent provider entry to a key. Avoid merging unlike result types or mirroring browser bookmarks. | +| 22: broadly seek new applications | speculation | defer | All owners: search replacements only after a named failed workflow; no tool-shopping workstream. | +| 23: declarative Vivaldi | improvement | investigate | W2: launchers already declared. Inventory only stable desired preferences and supported management interfaces; browser owns bookmarks, sessions, profiles and auth. No editing its live profile database. | +| 24: impermanence | speculation | defer | W4/W5: first classify persistent state and test backup/restore. Revisit for a demonstrated rebuild/drift problem, not as home cleanup. | +| 25: Hjem | speculation | defer | Nix/Home Manager: no demonstrated limitation justifies migration and loss/reimplementation of current module integration. | +| 26: active disk-space watcher | improvement | recommend | W4: one native timer/service check per relevant host, actionable threshold and recovery, no automatic deletion; tune from actual capacity during implementation. | +| 27: more Orion uses | speculation | defer | W4: add only a workload with a named owner and benefit. Hosting existing services and transcription is already useful. | +| 28: terminal Orion dashboard | improvement | defer | W4: start with systemd status/journal, disk usage and Herdr's own status. Add a composite surface only if repeated cross-service triage remains awkward. | +| 29: Tailscale rather than public IPs | research | investigate | W4: pilot personal administrative SSH privately; compare current SSH and plain WireGuard. Do not replace company VPN or remove public client access without a consumer map. | +| 30: OpenAI account switching | problem | investigate | W3: identify affected native client and personal/work identity need; verify supported account separation without copying refresh tokens or rotating accounts automatically. | +| 30: upgrade subscription | improvement | defer | W3: record actual allowance bottlenecks and task value first; no purchase recommendation before current plan, usage and budget are known. | +| 31: Bitwarden vault cleanup | improvement | recommend | W5: review ownership, duplicates and stale entries in native vault; preserve recovery and obtain item-specific deletion/revocation approval. Company and personal vaults remain distinct. | +| 32: finances, Rabobank sync, terminal/custom alternative | research | investigate | W5: bank-sync eligibility is a hard gate. Retain installed Actual pending provider/account evidence; GUI acceptable. Custom banking client rejected for this tranche; manual import does not satisfy required sync. | +| 33, 76: Omarchy and broader design philosophy | improvement | recommend | Soft selection criteria: simple, coherent, keyboard/terminal-first where useful, restrained visual hierarchy, open source, text and standard protocols, native Unix/systemd/Nix capabilities, inspectable tools, Rust over C++ for new owned code, and avoidance of dependency-heavy web stacks. Borrow principles; no distro/editor/VCS/language migration implied. | +| 34: consolidate theme, display manager, boot, Walker density | improvement/problem | recommend | W2: use existing Kanagawa palette; prioritize information density/readability and named defects. Stage login/boot polish after desktop behavior stabilizes. No theme framework by default. | +| 34: Limine overlay/logo defect | problem | investigate | W2/W4: reproduce on affected display, inspect actual asset/layout owner; keep boot recovery path. Do not infer a cause from description. | +| 34: smooth/120 Hz boot animation | research | defer | W2/W4: prefer static or subtle low-motion design; refresh rate depends on boot graphics path/hardware. Exact 120 Hz is not a prerequisite for good appearance. | +| 35: Nautilus missing icons | problem | investigate | W2: distinguish app icon, MIME icon and theme inheritance issue; existing GTK icon theme owns fix. No blanket icon pack replacement without reproduction. | +| 36, 63: home cleanup and move NixOS into projects | improvement | recommend | W5: inventory authored/state/cache ownership and path consumers, then reversible move to own-project root outside sync. No deletion mixed into relocation; activation/path references need explicit migration. | +| 37: centralize OAuth/API/Context7 credentials | research | recommend | W1/W3: centralize ownership knowledge, not all bytes. Native OAuth refresh stores; caller-scoped API secrets; existing machine/user SOPS authorities remain distinct. | +| 38: Neovim AI integration | improvement | defer | W3: start with adjacent native agent and files; add one integration only if selection/diff transfer is a measured bottleneck. Avoid second chat history/context manager. | +| 39: syntax highlighting essay | research | investigate | W2: compare restrained emphasis on real Nix/Rust/SQL files; preserve diagnostics and contrast. A design opinion, not empirical proof that current theme harms productivity. | +| 40: Nix-managed agents, skills and MCP | improvement | recommend | W3: already partly implemented; finish owner mapping and remove duplicate declarations only when identified. Nix owns durable config, plugin manager owns installed plugin state; no competing writers. | +| 41: broken Svelte MCP in Codex | problem | investigate | W3: absent from inspected managed MCP declaration; identify actual client/plugin config and precise failure before repair. Neovim Svelte LSP is a different owner. | +| 42, 45: prompt/skill/workflow evaluation and history pipeline | improvement | investigate | W3: explore which decisions the feedback loop should improve, then choose minimal sources, retention and redaction with the user. Start with a small manual evaluation set; automate only repeated useful analysis. | +| 43: initial rbw popup | problem | investigate | W2/W5: distinguish startup provider unlock from first intentional password lookup; retain authentication/lock boundary. No caching/unlocking workaround until trigger is understood. | +| 44: vi alias for nvim | improvement | recommend | W2: use existing Home Manager Neovim alias option if absent; no wrapper. | +| 46: word-boundary wrapping and visual j/k | problem | recommend | W2: native linebreak and count-aware display-line navigation; preserve counted logical-line movement, motions/operators and special buffers. | +| 47: Noctalia keyboard control | improvement | recommend | W2: bind native shell IPC for a small repeated set (notification history and control panel provisional); existing media/lock keys remain owners. | +| 48: Noctalia/Niri workspace icons | problem/research | investigate | W2: determine pinned native support and icon identity mapping; no custom workspace tracking service. | +| 49, 59: learn jq/jless and snippets | improvement | recommend | W2/W3: three real tasks using existing JSON tooling and completion/snippets. Learning tasks, not configuration infrastructure. | +| 51: Gardenctl packaging/workflow duplication | problem | recommend | W1: duplication confirmed in dev-tools.nix and workbench flake; select one pinned package owner for both consumers. Keep test-only scope; K9s readonly is not RBAC. | +| 52: Oil icons on direct directory open | problem | investigate | W2: initialization order of existing mini.icons and Oil is plausible, not proven; compare direct startup with later opening before adjusting load order. | +| 54: full Yookr architecture/topology/workbench | improvement | recommend | W1: user confirms company-wide context and composable capabilities for investigation, design, synthesis and routine management. Workbench owns discovery and composition; sources retain authoritative facts. Concrete context retrieval and operational interfaces remain to explore. | +| Steering: live discovery of schemas and deployed services | improvement | recommend | W1: prefer authorized live observations for runtime questions; report environment, scope and observation time. Code/documents explain intent and business meaning. | +| Steering: periodically regenerated service taxonomy | improvement | investigate | W1: try an on-demand derived view first; schedule refresh only after use establishes benefit and acceptable freshness/cost. Separate observed inventory from inferred classification. | +| 56: VPN legacy cipher | research | investigate | W1/W4: historical AES-256-CBC compatibility is explicit. Determine negotiated cipher and server upgrade owner in an authorized later check; do not silently change client or substitute personal mesh VPN. | +| 58: zk LSP | improvement | already covered | W2: zk package and zk-nvim LSP notebook root configured; diagnose only an actual failure. | +| 61: Bitwarden TOTP | improvement | investigate | W5: verify deployed Vaultwarden/client support and recovery. Same-vault TOTP trades independent-factor isolation for convenience; keep vault recovery/root second factor outside that vault. | +| 64: terminal interface for gh | improvement | defer | W3: gh and local review worktrees already own PR inspection; pilot a maintained TUI only when a concrete browsing/navigation gap remains, with read-only remote credentials. | +| 65: vector DB for notes/work/memories | research/improvement | investigate | W1/W3: reopened by user for semantic search over company mail/documents supporting cross-domain model design. Assess existing grounded-docs/Ollama before another component. Compare semantic plus exact retrieval; no new index/provider or ingestion accepted yet. | +| 67: Orion transcription watcher instead of timer | improvement | already covered | W4: systemd PathChanged watcher and phase-one successful transcription pilot. | +| 68: Orion persistent Herdr and Android access | improvement | investigate | W4 after W1/W3: SSH to the host where work lives; no public agent web UI. Separate service secrets from agent account, decide code location and resources; persistence does not imply reboot recovery. | +| 69: NixOS on phone | speculation | defer | W4: Android SSH client meets proposed remote access need; revisit only with device-specific support and a distinct OS need. No replacement phone OS research now. | +| 70: SOPS for company/other secrets | research | already covered | W1: company user-key authority approved and active. Team-wide backend remains a separate company decision; improved scope/delivery is still recommended above. | +| 71: evaluate/rework nixos-maintainer skill | improvement | recommend | W3: evaluate existing short skill on a real add-feature task; ask only consequential preferences, retain inspect/options/check flow. No rename or generic interview wizard without demonstrated mismatch. | +| 74: indiscriminate interaction/process/history capture | speculation | reject | W3: captures credentials/company material and creates retention burden without a defined decision it improves. | +| 74: local workflow feedback loop | improvement | investigate | W3: define the questions it should answer, then explore bounded opt-in events, selective existing histories, retention and redaction with the user. | +| 80: agents never get live write authority; careful test writes | requirement candidate | recommend | W1: hard design invariant; verified service permissions plus separation from human credentials/keys/sockets. Test writes require named scope and recovery, never inferred from read access. | +| 83: mnemonic, low-hand-movement key standard; Super+Alt | improvement | recommend | W2: preserve Super focus and Super+Alt movement; use free mnemonic chords for entry points. Do not collide with existing movement or globally renumber bindings. Ergonomic preference remains user-tested. | +| 85: compare Pi/other harnesses, quality/training hypothesis | research | investigate | W3: same bounded tasks and model where supported, permissions, tools and rubric; no assertion of official-harness superiority from training speculation. Name exact alternative before a second trial. | +| 87: Astra orchestration, Sol investigators, long-task context | research | recommend | W3: accepted split—Astra scopes, explores and integrates; bounded subagents investigate, implement and validate, with one writer per area. Evaluate quality/context efficiency through actual tasks; no claim of universal delegation gains. | + +## Related unfinished phase-one work + +| Item | Disposition | Owner / gate | +| --- | --- | --- | +| Cross-system investigation | already covered | W1: bounded test Kubernetes inventory linked to owning code completed. A broader business/technical composition is an extension, not unfinished acceptance of this pilot. | +| Marimo report pilot | defer | W1: after that trace produces an analysis requiring reproducible computation; Markdown/SQL first. | +| Docked Zenith two-output exchange | investigate | W2: hardware-gated pilot; names/focus restore and failure leaves session unchanged. No redesign before observation. | +| Evolution and Android DAVx5/Tasks.org daily-use pilots | defer | W5: user chooses to resume; existing Microsoft 365/Radicale authorities and Thunderbird/Outlook stay. Validate recurrence/reminders/default accounts then. | +| Polaris workstation/VPN/credential replication | defer | W4: distinct from SSH already declared; no remote access/testing until explicitly resumed. | +| Original plaintext credential retirement and archive review | recommend | W1/W5: verify each consumer/owner, then user approves exact deletion/revocation. Archive presence is not evidence of inactivity. | +| MariaDB identity-verification exceptions | investigate | W1: service owner must provide trusted CA/valid host identity; gate agent live DB use. | +| Malformed deployed OpenAPI and raw Authorization contract mismatch | defer | W1: use reviewed local contract; upstream correction belongs to service owners and requires separate authority. Mark caveats in topology links. | +| Account-service issue 197 implementation | defer | W1: route to account repos if product work is requested; retain local dashboard plans as evidence, not the implementation owner. | +| Additional Leafcloud project/rclone read pilot | defer | W1: new project credentials and permission evidence needed; existing Irristaud listing already passed. | +| SharePoint browse/download | recommend | W1: user wants native local filesystem access, so investigate one-way SharePoint-to-local synchronization using an established tool. Independent of personal PIM; no cloud writes or custom ingestion framework. | +| Team release process/OpenAPI publication automation | defer | W1: company policy/owner decision first; remote mutation prohibited. | +| Company-wide infrastructure secret source | defer | W1: company selection required; personal workbench decision cannot establish team authority. | +| Workbench publication | defer | W1: sharing need and changed remote policy required. | +| Retire Bruno/DBeaver | defer | W1: outside previous scope; only after replacement covers actual daily work and user requests retirement. | +| Worktrunk, codex agents, CI/remote builders/offload | defer | W3/W4: native worktrees/agents first; named concurrency, build-capacity or reliability gap required. | +| Report servers/notebook hubs/groupware/terminal PIM | defer | W1/W5: no demonstrated hosting or client gap. | +| Meeting summaries/OCR/dictation/clipboard remapping | defer | W2/W5: repeated workflow and data-consent owner first; do not auto-ingest recordings. | +| Additional concurrency isolation | defer | W3: add ports/data isolation on an actual concurrent workload; credential isolation in W1 is required for a different reason and is not deferred. | + +## Coherent interaction model + +Every frequent workflow should have five visible coordinates without requiring a +new control plane: + +`entry point → project/owner → environment/host → authority → durable result` + +- Direct compositor keys own a few frequent global intentions: terminal, daily + capture and launcher; note search is a candidate. No dedicated agent entry now. +- Walker discovers applications, projects, and infrequent actions. Its providers + stay distinct so a result's meaning is apparent. +- Neovim owns file-local editing, requests, queries, and notes. The current buffer + should reveal the selected API/DB context before execution. +- Herdr presents persistent work sessions and agent attention. Native agent TUIs + own prompts, conversation state, tools, and subagents. +- Nix declares stable packages, services, keys and integration. It does not own + OAuth refresh tokens, browser state, vault items, database contents, or agent + transcripts. +- Repositories own code facts and executable project commands. The workbench owns + company-wide capability discovery, context navigation and useful compositions; + it points into service repositories, document systems and meeting knowledge. + +The same surfaces serve the user and agents. Authority can differ: shared context +does not imply shared credentials. + +## Workstreams + +### W1 — Composable company capabilities and context + +**Problem.** Company tasks need technical and business context across services, +documents and meetings as well as access to tools. The user wants capabilities +that both humans and agents can discover and compose for new tasks without +building a separate workflow for every question. The existing workbench makes +cross-system reads convenient, but exports API, +database, object-store and RabbitMQ credentials—including live database URLs—to +every child process. Dadbod, Kulala and `k9s --readonly` can issue arbitrary +operations; sample reads and client modes do not prove server-enforced limits. +The current API/DB environment is not always visible at execution time. Gardenctl +packaging is duplicated. Phase two must add useful company-wide context while +keeping each underlying fact and operation with its authoritative owner. + +**Evidence and assumptions.** Workbench `.envrc`, `justfile`, HTTP/query files and +Neovim integration establish credential exposure and client behavior. Database +grants, API scopes, Kubernetes RBAC, RabbitMQ permissions and object-store policy +are not represented locally and remain unknown. The user accepts isolating agent +access. The workbench's user SOPS authority and the flake's administrative SOPS +authority are separate until recipients prove otherwise. Both MariaDB URLs disable +server identity verification; this is material for live credentials. + +**Owner and boundary.** Service owners grant permissions; the workbench exposes +capability discovery, source relationships and supported composition. Native tools +perform reads and authorized management operations under the caller's identity; +SOPS stores appropriate local encrypted values. An agent +never receives a credential capable of live writes. Test writes require a named +task, bounded target, explicit authority and recovery. Live database use remains +gated by server-side read-only evidence and valid endpoint identity. + +**Alternatives.** UI/client read-only modes are useful guardrails but insufficient +enforcement. A single global test/live toggle hides scope and creates ambient +risk. SecretSpec is valuable when one schema must resolve multiple backends; it +does not supply permissions and currently adds an owner. An isolation boundary is +needed whenever the agent principal can otherwise obtain out-of-scope credentials +or authority. Human live-write credentials are a particularly consequential case; +use a separate OS identity or constrained runtime if existing controls cannot +enforce the boundary. + +**Proposed composable units.** Reuse the existing native interfaces first. A unit +needs a clear purpose, source/target, explicit scope, permission boundary and usable +output; that is a documentation convention, not a requirement for a new framework. + +| Capability | Existing or intended owner | Example composition | +| --- | --- | --- | +| Database/schema access | Dadbod/native drivers and schema-owning repository | Find records; inspect constraints for a proposed model. | +| API/queue/service access | Service contracts and official management clients | Inspect queue metadata, then link producer/consumer code and service status. | +| Company files/search | SharePoint and its authorized access interface | Retrieve domain documents with source links and revision information. Access remains consent-gated. | +| Meeting/domain knowledge | Authored notes and approved recording/transcript sources | Link decisions and unresolved questions to documents and code; preserve source uncertainty. | +| Company correspondence | Company mail service; existing mail synchronization and local store | User prefers local-first email access shared by humans and agents. Read local copies without changing flags, moving/deleting messages or exposing mail credentials; preserve message/thread/date and attachment context. | +| Public domain context | Public primary sources and ordinary web search | Find terminology and external claims, then verify relevance; public descriptions do not establish private project requirements. Never include private company details in web queries. | +| Repository/architecture navigation | Service repos; workbench relationship map | Find the owner, current model and relevant project commands from a company-domain question. | +| GitHub issue/PR history | GitHub read-only access through gh | Link implementation rationale and discussion to code and domain documents; remote mutations remain prohibited. | + +Suggested compositions to explore: queue metadata → producer/consumer ownership → +relevant logs or records; domain documents + meeting decisions + existing schemas → +data-model proposal. These are examples of reuse, not scripted workflows to build. +Queue inspection must distinguish metadata from message consumption or purge. +Information access must preserve source ACLs and company/personal boundaries. + +**Context iteration.** Anchor the first discovery pilot in an authorized current +system: inspect one Kubernetes test scope, then connect the +observations to its owning code or documentation. Use a test credential only for +the bounded read operations under tranche A's revised gate. If access is unavailable, finish +the source map and command documentation; do not substitute old files while claiming +live discovery. Add SharePoint retrieval when its access prerequisite is resolved. +Keep results scoped to the question and label unavailable sources, inferred +relationships and disagreements. Changing a retrieval tool should affect only its +source entry and consumers of any changed output. + +Use native task history and optional plain-text findings during the pilot. Learn +what is worth retaining or reviewing from actual use; do not block the pilot on a +memory taxonomy, automatic promotion policy or scheduled synthesis service. + +**Smallest first slice.** Make one current-state discovery capability discoverable +and reusable: test Kubernetes service inventory, linked to owning repositories. +Document its native entry, bounded output, permissions and refresh procedure in +the workbench. The accepted test credential allowance and read-only operations are +specified in tranche A; production requires authoritative permission evidence. +Unknown production authority stays unavailable +to agents. A source map can be completed without credential access, but the live +pilot stays explicitly pending until its access gate passes. The selected tranche +below defines the deliverables and completion boundary. + +**Long-term production success (not a test-pilot gate).** A reviewer can trace +every workbench operation to one identity and +server-enforced permission set. An agent process cannot obtain human write +credentials. Live actions visibly say LIVE before execution, ordinary reads pass, +and authoritative permission evidence establishes write denial. Mutation probes +are permitted only on a disposable test target with explicit scope and recovery. +TLS authenticates the MariaDB endpoint. Later capability pilots demonstrate that a +human and agent can use the same documented primitive, then combine its output +with another source for an investigation or design task. Routine management uses +the owning tool with explicit authority; it is not excluded from the architecture. + +**Stop/defer.** Omit production systems with unknown or excessive authority; use +only the explicitly accepted test scope for this pilot. Stop topology +expansion when the next link does not help an actual company task. Defer Marimo until +the investigation needs reproducible computation; defer SecretSpec and a separate +runtime until the permission/credential inventory demonstrates their need. + +### W2 — Keyboard-first, context-visible interaction + +**Problem.** Several small daily frictions weaken an otherwise coherent desktop: +wrapped-line movement, completion cancellation, note search discovery, terminal +identity, database/API context, occasional Walker latency, direct-directory Oil +icons, and inconsistent desktop polish. Combining them into a rewrite would hide +which change helped. + +**Evidence and assumptions.** Note capture (`Super+N`), zk find/create and zk LSP +already exist. Neovim already uses Ctrl-h/j/k/l for window focus and Ctrl-j/k in +completion and Telescope. Native Blink `cancel` reverts preview insertion. Walker +already uses its service/socket path; latency needs measurement. Kitty is the sole +terminal and Niri requests no client-side decorations, explaining the sparse +window identity without proving the preferred presentation. Existing Kanagawa +configuration is the visual palette owner. + +**Owner and boundary.** Niri owns global chords and window motion; Walker owns +discovery; each application owns its internal modes; Neovim owns editing motions; +Kitty/Herdr expose terminal task identity; Noctalia owns shell panels. Preserve +standard application meanings unless a frequent workflow demonstrates a conflict. +Never place environment secrets in titles, status lines or notifications. + +**Alternatives.** A navigation plugin adds value only if native mappings cannot +bridge a reproduced mode. Notes in Walker reuse the notebook but create another +search presentation; a direct key to the existing zk picker is the smaller first +step. A universal key vocabulary is attractive but clashes with mode-specific +semantics; consistent intention matters more than identical chords everywhere. + +**Smallest first slice.** One native Neovim ergonomics cluster: word-boundary +wrapping, count-aware display-line `j/k`, and Escape invoking Blink cancel only +when its preview is active. Queue the `vi` alias, note-search entry, terminal title, +Walker measurement and defect reproductions independently. + +**Success.** On a fixed Markdown sample, uncounted `j/k` traverses every displayed +segment, `3j/3k` retains logical-line behavior, operators and special buffers are +unchanged, and words are not split when width allows. On a completion sample, +Escape restores pre-preview text while ordinary Escape still exits insert mode. +Later milestones define their own note, terminal and launcher criteria. + +**Stop/defer.** Revert any mapping that breaks operators, counts or a common native +interaction. Defer theme-wide changes until concrete icon/layout defects are +reproduced. Defer exact boot refresh work; prefer a static or subtle transition if +animation exposes low refresh. Add Walker notes/provider prefixes or a navigation +plugin only after the direct/native slice leaves recurring friction. + +### W3 — Agent entry, persistence, context and evaluation + +**Problem.** Ordinary questions can become persistent project work, company +investigation or system changes. The accepted entry is a new Herdr space, navigation +to the relevant folder and a native agent conversation. No predefined system +categories or prompt popup are wanted. Large command output consumes context; Svelte MCP is reportedly +broken; model/harness/orchestration ideas lack comparable evidence. Broad history +logging would create more sensitive data than useful feedback. + +**Evidence and assumptions.** Herdr documents keyboard navigation, persistent +local sessions, phone-over-SSH and direct remote attachment. Phase one verified +session lifecycle and deliberately disabled notifications. Official OpenAI guidance +fits Astra to demanding end-to-end judgment and Sol to complex bounded work, while +recommending the lowest adequate effort. The existing global agent instructions +already require quiet Nix commands, targeted logs, `nix run` for missing commands, +and remote read-only behavior. + +**Owner and boundary.** Native agents own conversation/tool state and subagents; +Herdr owns session persistence and attention; the native agent owns prompt input. +No additional entry interface is selected. Repositories and `AGENTS.md` +own durable context; +Nix owns installed clients and stable MCP/skill declarations. Evaluation stores +only task, result, time/usage, corrections and notable failure—never raw credential, +company, shell or chat capture by default. + +**Alternatives.** One persistent system agent minimizes startup and can accumulate +useful conversational context, but risks stale context and unclear scope. A fresh +project-rooted agent has clearer authority and current files, but adds launch cost. +A Walker prompt popup is fast but must invent submission, error and attachment +semantics. A vector store duplicates file search and the existing grounded-docs +experiment before a recall failure exists. Neovim chat duplicates the native agent +unless transferring selections/diffs is measurably painful. + +**Smallest first slice.** Use the accepted Herdr → folder → native conversation +journey without building anything. Let conversation lifetime follow actual work; +do not require an upfront policy. Revisit entry only when a specific repeated task +reveals worthwhile friction. Queue noisy-command +handling, Svelte MCP diagnosis, orchestration evaluation and harness comparison as +independent milestones so their effects can be attributed. + +**Success.** Use a Herdr space rooted in the relevant folder and native +conversation/resume; record specific recurring friction before optimizing. No +additional entry pilot or upfront lifecycle choice is required. Task authority +remains explicit and does not follow automatically from the working directory. +Later output and model evaluations use a fixed task/rubric and an acceptance +threshold chosen before comparison. No new index or transcript database is needed. + +**Stop/defer.** Use native agent sessions directly if Herdr keys conflict after +remapping. Stop delegation when integration/review costs exceed its result. Defer +notifications until attention is actually missed, account upgrades until measured +limits block valuable work, and remote agents until local entry and authority are +settled. + +### W4 — Quiet host operations and remote reachability + +**Problem.** Polaris wake-up, Orion status, disk exhaustion and remote agent access +are related by availability, but a dashboard is premature. Polaris SSH is already +declared; Orion already hosts services and event-driven transcription. Personal +remote access and the company VPN have different owners and must not be conflated. + +**Evidence and assumptions.** Polaris permits key-only SSH for the named user from +the local subnet; live reachability is not reverified. Orion exposes SSH and durable +services. The transcription path watcher is implemented. Herdr can attach over +ordinary SSH and adapt to a phone terminal. Tailscale can provide private reachability +but its account/control plane and endpoint inventory need an explicit choice. + +**Owner and boundary.** Firmware/NIC and LAN own wake-on-LAN; OpenSSH owns login; +the personal overlay network, if adopted, owns private reachability; systemd owns +service/path state; each service owns health. Never expose a generic agent web UI, +auto-delete for disk pressure, or use personal Tailscale as a substitute for the +company VPN. + +**Candidate milestones.** Select independently: (a) verify declared Polaris SSH +and wired WoL during a resumed machine session; (b) define and pilot one disk +threshold and actionable notification; (c) design personal remote access by +comparing current public ingress, Tailscale and plain WireGuard on exposure, +control-plane/account dependence, device support and upkeep, then pilot phone SSH +to Herdr only after a choice. None belongs in the next tranche by default. + +**Success.** Polaris wakes from an intended state only from a trusted path and +accepts only key login. Disk pressure is reported early with host, filesystem, +usage and a manual recovery link; no data is deleted. A phone can inspect and +interact with a persistent low-authority agent session without public agent ports or +service credentials. + +**Stop/defer.** Stop WoL if firmware or wireless-only operation makes it unreliable. +Defer a dashboard until three or more status commands are repeatedly correlated. +Defer Orion offload until a named workload benefits and agent/service identities are +isolated. Defer NixOS-on-phone because SSH already covers the stated access goal. + +### W5 — Personal administration roadmap + +**Problem.** Vault cleanup, TOTP, finances, home-directory ownership and deferred +PIM pilots concern durable personal state. They need recovery and data ownership, +not a common terminal UI. Rabobank synchronization is required for finance, while +Actual's documented European provider no longer accepts new accounts. + +**Evidence and assumptions.** Actual is already hosted on Orion; Microsoft 365 and +Radicale remain PIM authorities. Original credential sources remain pending +consumer-specific retirement. No evidence establishes an eligible bank-sync +account. Moving this Nix repository changes absolute paths and activation workflow; +home cleanup can destroy uncatalogued state if combined with deletion. + +**Owner and boundary.** Bitwarden/Vaultwarden owns personal secrets and optional +TOTP; a separate recovery route and root second factor remain outside that vault. +The bank and supported sync provider own transaction import; Actual may own budget +data. The filesystem inventory classifies authored data, mutable application state, +cache and archive before moving anything. Each PIM service remains authoritative. + +**Candidate milestones.** These are separate projects and only one is selected at a +time: (a) finance feasibility ends with a documented supported/unsupported Rabobank +connector decision for the user's actual eligibility; (b) vault hygiene begins with +an owner/status inventory and independently verified recovery before exact approved +revocations or deletions; (c) filesystem organization inventories top-level paths +and consumers before separately planning a reversible Nix repository move; (d) PIM +daily-use pilots resume only by user choice. None belongs in the next tranche. + +**Stop/defer.** Retain the current finance process if no trusted connector meets the +sync requirement; do not build a bank client. Defer same-vault TOTP until recovery +is proven. Defer impermanence until backup/restore and state classification expose a +specific persistence problem. Resume Evolution/Android PIM only by user choice. + +## Dependencies and roadmap + +1. W1 permission evidence precedes all production company-agent access; W2 context + visibility may be designed concurrently but cannot make access safe by itself. + Fresh inspection of test systems also requires an appropriately scoped identity. + "Live information" means current observation; it does not imply production. +2. Existing Herdr spaces and native agents suffice for entry. Neither additional + entry design nor editor acceptance blocks W1 context/access work. Add note or + launcher integration only for its own demonstrated value; popup prompts remain + deferred. Notifications and editor chat need a concrete missed event or friction. +3. W3's local persistence and authority model precedes W4 remote agents. W4 remote + reachability precedes any Orion dashboard consideration. +4. W5 credential retirement depends on verified consumers from W1. Finance and PIM + are otherwise independent and should not delay daily workflow improvements. +5. Visual consolidation follows functional context and reproduced icon/boot defects; + its acceptance is visual coherence, not configuration centralization. + +## Selected next tranche + +Selection reflects both steering boundaries and the subsequent agreement on live +information and easy iteration. A/B was selected and authorized; current +implementation status and remaining user acceptance are recorded above. + +### A. Workbench discovery foundation — first priority + +**Deliverables.** Extend the existing workbench README/AGENTS entry with a compact +source map: SharePoint, meeting notes/transcripts, code, backend systems and GitHub. +Create one summary entry per source family and expand only the Kubernetes source +needed for this pilot. Do not inventory all repositories, sites or services; add +detail as later tasks require it. +For each, record the authoritative location, existing native access command/tool, +scope and prerequisite, output form, and how to obtain current information. Mark +unavailable access honestly. Keep source-specific detail beside its existing owner; +do not introduce a capability framework or require every tool to share a wrapper. + +Document one reproducible discovery route for the existing test Kubernetes target, +limited to one explicit namespace. Use native tooling to collect the names/types +of running workloads and services and the minimum non-secret relationships needed +to connect them to owning code. Exclude Secrets, raw environment dumps, full +manifests, logs and payloads. Record an observed service inventory with cluster, +namespace, retrieval time, source commands and links to relevant code. Label any +inferred business role and missing ownership. This is the first incremental service +map, not a claim of complete backend taxonomy. + +**Access gate, revised by the user.** Use the named test target and namespace; +write-capable test credentials are accepted while operations remain reads only. +Do not read Secrets, use exec/attach, consume messages or modify resources. Use the +native Garden login without loading the workbench's aggregate SOPS-derived direnv +exports. Neither client mode nor filtered output proves credential isolation, and +the pilot must not claim otherwise. Production testing stays deferred until all +agent-accessible production credentials are confirmed read-only. Provisioning a +new OS identity is not a prerequisite for this accepted test pilot. + +**Observable acceptance.** + +1. Every listed source has an owner and working entry or a named unmet prerequisite. +2. Human and agent can follow the same documented discovery commands for the named + namespace, subject to their permissions, without a new orchestration service. +3. The inventory is based on a fresh query; at least one observed service is linked + to source evidence for its owner/role, or an explicit ownership gap is recorded. +4. Repeating the query produces fresh timestamped output, scratch or replaceable + by default. Retain history only when useful to a task. An unavailable source is + reported as unavailable and cannot silently reuse an old snapshot as current. +5. The report distinguishes observed state, inferred meaning and uninspected scope; + it contains no secret values or unnecessary service data. +6. Record the exact test target and read operations, and state that credentials + may permit writes. If test access is unavailable, mark the runtime pilot blocked + and complete the source map/command design and independent editor work. + +Prefer this Kubernetes pilot over simultaneously adding database, SharePoint and +queue integrations: it directly exercises the user's current-service-map example +through an existing access path. It does not assume that K9s readonly proves RBAC. +Do not switch to production or add another connector to evade an unmet access gate. + +### B. Native Neovim ergonomics — independent, small implementation + +Implement word-boundary wrapping and count-aware displayed-line `j/k` for ordinary +editing buffers, plus native completion-preview cancellation on Escape. Preserve +counted logical-line motions, operators, special-buffer mappings and normal Escape +behavior when completion is inactive. Use the existing plugins/options and verify +the pinned completion API before editing. + +Acceptance is the fixed W2 sample: wrapped prose, `j/k`, `3j/3k`, an operator and a +special buffer, then completion preview cancellation and ordinary Escape. Check +the actual configured startup path, not only a standalone Lua function. Add one +small runnable regression check for the custom branching mapping, without a test +framework. The configured editor build and flake evaluation suffice for this Lua-only +slice; Neovim is shared by all three hosts, not only workstations. Do not repeat a +successful build unless its inputs change. Only the user activates a generation. + +### C. Follow-on sequence and stop points + +| Order | Milestone / owner | Evidence needed to proceed | +| --- | --- | --- | +| Next design slice | Enable the traceability data-model exploration / W1 | Use `~/dev/work/traceability-data-model` as the concrete case: domain fit, replacement scope, general versus specific models, and performance. Reuse project-owned research and native access; do not choose the model here. | +| Only if that task needs it | One missing retrieval or access primitive / W1 | Narrow credential delivery for the required test source, or enable a missing source such as SharePoint. No automatic connector expansion; source-specific access prerequisites apply. | +| Independent | Global note search / W2 | Existing notebook picker is the default; no new index. This convenience does not block company work. | +| Parallel when reproduced | Bounded command output, Svelte MCP, Oil/Walker/rbw/icon defects / W2–W3 | Each has a concrete failure and its own small fix/check. Packaging consolidation follows confirmed shared consumers. | +| After repeated agent use | Skill, orchestration and harness evaluations / W3 | Fixed representative tasks and rubric; change one variable at a time, compare correctness/corrections, time and available usage. Retain only demonstrated gains. | +| After useful repeated views | Service-map refresh automation / W1 | Observe required freshness and refresh cost; use native scheduling, add agent synthesis only where interpretation helps. | +| Later, independent | Host operations and personal milestones / W4–W5 | Resume one named pilot at a time; hardware, access, bank eligibility and recovery gates remain explicit. | + +This sequence is a working priority, not a dependency between unrelated tasks. +Deferred ideas retain their inventory dispositions and may move forward when use +establishes their value. No fixed memory policy, domain taxonomy, indexing backend, +new dashboard or company process is needed to start. + +**Selected real case: traceability data-model exploration.** The user is working in +`~/dev/work/traceability-data-model`. They need to understand fit with existing +systems and how broadly the new model should replace them; compare a general model +with multiple domain-specific models; explore performance implications; and examine +Walkro/CNC, Irristaud, Innexo, Wustmans and the company's sensor/device/template +system. Relevant context is scattered. The exact question and useful output are +not settled, and need not be invented as a prerequisite to exploration. + +Workflow-design scope: establish how the user and agents can discover and combine +the needed evidence, compare alternatives and pursue targeted experiments through +small existing capabilities. The model project owns domain analysis, model choices +and experiments; the workbench owns reusable company-source access and navigation. +This is not authorization to redesign that project, change services, run benchmarks +or ingest company documents. Inspect its existing design/source material read-only +through a bounded subagent before proposing any new research artifact. + +Read-only project review establishes existing owners: `AGENTS.md` names +`DOMAINS.md` as the current requirements/source document, and `sql/schema.sql` for the reviewed +generic PostgreSQL/PostGIS candidate. This is a prototype, not a migration design; +`sql/README.md:15` describes fresh-schema deployment. The current candidate is +evidence to compare, not a phase-two requirement to preserve unquestioned. +The user explicitly warns that `DOMAINS.md` may be incorrect or incomplete: neither +its domain claims nor its scope exclusions become accepted requirements here. + +| Required context | Evidence already in the model project | Remaining gap | +| --- | --- | --- | +| Walkro/CNC | `DOMAINS.md:135` describes lifecycle, lineage and required queries; sources at line 369 | Validate against actual company/customer needs, not just public domain descriptions. | +| Irristaud | Plant-cultivation scenario at `DOMAINS.md:228`, sources at line 377 | Establish which actual requirements the representative scenario misses. | +| Innexo | Existing project per user, with a GitHub repository and Kubernetes deployment; possible SharePoint/public material | Locate remote sources rather than infer absence from local checkout names; deployment environment is not yet established or authorized for inspection. | +| Wustmans | Planning-stage project per user; possible public, SharePoint and email evidence | Look for intended needs and unresolved plans, not a deployed implementation that may not exist. | +| Sensor/device/template system | The existing company data model per user; dated dumps locally | Read current schemas and trace code/API usage when authorized; infer semantics cautiously. Historical dumps are not live truth. | +| Performance | Candidate indexes, no comparative measurements or workload targets found | Actual operations, volumes and distributions that could discriminate alternatives; do not infer performance from schema appearance. | + +**Proposed exploration, not a fixed research framework.** Reuse the project's +existing design documents as revisable evidence. Trace a claimed requirement to its source, +candidate representation, affected current component and unresolved evidence. +No parallel workbench model ledger. Cover source availability across all named +domains first; deepen one discriminating journey rather than pretending one domain +proves generality. Treat missing facts as unknown, consistent with the project's +progressive-enrichment rule (`DOMAINS.md:31`). + +Keep three questions separable: common domain meaning; general versus specialized +representations (including a shared core with domain-specific parts as a candidate); +and physical storage/query choices. Replacement breadth is an output of comparing +these alternatives, not an input the user must settle now. The document's exclusion +of connectivity, transport, auth and dashboards (`DOMAINS.md:345`) is an existing +scope proposal to examine, not permission to rule out investigation of sensor/template +data or measurement storage. + +Performance exploration should begin with representative operations and scale, +then use the smallest discriminating experiment if needed. Any later experiment +belongs to the model project and is executed by a subagent under separate authority +on disposable local/test resources. No production benchmarks, speculative test +suite or performance conclusion from synthetic results without a stated limit. + +The workbench's role is to make source locations and native retrieval reusable: +code and design files for intended behavior, notes/company documents for business +meaning, scoped live schemas for current structure, and workload evidence when a +performance decision requires it. Add only the missing access path identified by +this case. First-use success is that an unfamiliar agent can find the relevant +owners and evidence gaps from the project/workbench entries without the user +manually assembling all context; it need not produce a final model recommendation. + +Bounded local source-location review found `~/dev/work/yookr-api/README.md` and +device/sensor service and migration filenames as likely current-behavior pointers; +`~/dev/work/yookr-management-svelte-redo/README.md` and device-route filenames as +likely user-facing workflow pointers. Their semantics have not been reviewed in +this workflow-design pass. No Innexo/Wustmans-named repository or README path was +found among immediate active work repositories. `~/sync/notes/todo.md:16` contains +task mentions only, including obtaining an Innexo account, with no source pointer. +This is a bounded coverage gap, not a +claim that company sources do not exist. + +Neither the model project's `AGENTS.md` nor its `README.md` references the +workbench. This is a concrete discoverability gap when an agent starts there. + +Existing read-only GitHub access successfully located private repositories +`yookrdev/yookr-innexo`, `yookrdev/yookr-innexo-2` and `yookrdev/yookr-InnexoFE`. +Descriptions are empty; metadata does not establish which version is current. +The frontend role is suggested by its name, not verified from behavior. This +settles availability of remote repository discovery, not Innexo domain meaning +or deployed ownership. No new login, cloning or Kubernetes access was needed. + +**Authorized local-first tranche:** + +1. Make company-source navigation discoverable from the model project's native + entry, with links back to project-owned design work. Extend existing entries, + not a second evidence database or global task/system chooser. +2. Exercise remote repository discovery and source reading through existing GitHub + access using Innexo; identify intended versus deployed behavior without querying + an unapproved cluster. Reuse schemas and code/API owners for current-model work. +3. Provide native local SharePoint file access through one-way synchronization, + using an established tool and native scheduler. Establish remote library scope, + size and consent before downloading; cloud write authority is not required by + the design. Reuse Thunderbird's existing local email synchronization if suitable; + investigate a separate mail sync tool only for a demonstrated store/access gap. + +First-use acceptance: an agent starting in the model project can locate the +workbench, find the known source owners for each named domain, retrieve a relevant +source through an available native route, and label inaccessible sources and +unsupported claims without treating `DOMAINS.md` as ground truth. No requirement +to finish the model comparison or add code. Later runtime reads expose only that +test source's credentials, never aggregate test/live exports. Stop source expansion +when further retrieval cannot affect the current comparison. + +Tacit employee knowledge has unknown extent and ownership; do not inventory every +employee or start interviews preemptively. When a consequential ambiguity survives +available evidence, formulate the specific question and ask the user who can help. +Contacting colleagues or sending messages needs separate authorization. Record an +answer beside the affected project decision, with attribution and uncertainty. +No current blocker requires the user to quantify missing knowledge, settle model +scope or provide a complete source inventory. + +**Accepted company-content boundary:** the user chooses on-demand search across +all company content available to the authorized account, with selective retrieval +and writes prohibited. No curated site/folder/mailbox allowlist is required now; +scope may narrow later. Keep personal accounts out. The user explicitly requires +SharePoint access across all sites available to their company account. +Distinguish broad delegated authorization from configured +sync coverage: the first-library pilot is not the completed all-sites solution. +Inventory sites and their document libraries after consent, then plan coverage +without implying every site is a single folder or every site object is a file. +The user's subsequent native +filesystem requirement explicitly permits proposed background SharePoint and mail copies; +the earlier blanket no-mirroring recommendation is superseded. This does not imply +an embedding/indexing pipeline. Broad availability does not require exhaustive retrieval for every +task. Existing source ACLs still apply; this permission neither provisions new +credentials nor proves read-only scopes. Production-runtime access retains its +separate verified-read-only gate; the earlier test-credential exception is unchanged. + +**Accepted SharePoint design:** one-way remote-to-local synchronization with +read-only cloud authority. The user and agents treat the local folder as read-only; +the user edits through SharePoint's web application. SharePoint owns the originals, +and the sync process is the sole intended local writer. Use a dedicated managed +reference directory outside authored notes, Git repositories and Syncthing. +Reflect cloud updates and deletions within that directory; it is not an archive +or backup. Never place authored work there. Resolve the exact target and download +footprint before execution, and preview changes before enabling scheduled sync. + +Read-only cloud authority, consumer behavior and filesystem enforcement are +distinct. A user-owned directory or a read-only label alone is not an enforced +agent boundary. Use existing native agent permissions where available and report +what is actually enforced; do not claim credential isolation without evidence. +For both Thunderbird and the mirror, consumer read-only use is currently an +operating rule; OS-level immutability and credential isolation are not demonstrated. +No new identity/isolation framework is selected by this design. + +Preserve original formats and source paths, report refresh failures, and allow an +on-demand refresh when a decision needs current files. A local Office/PDF file is +not automatically searchable as plain text: use native readers or task-specific +extraction when needed, without adding a permanent indexing service by default. +The user has now authorized offline implementation of this design and its bounded +pilot. New Microsoft consent and system activation remain user steps; actual sync +still requires read-only cloud authority, known scope/footprint and safe preview. + +Primary documentation supports **rclone → managed local directory**, scheduled +with a native user timer. [OneDrive/SharePoint authorization](https://rclone.org/onedrive/) +allows explicit read scopes; its default requested permissions are broader, so do +not accept defaults as proof of read-only authority. Tenant consent/app policy is +an implementation prerequisite, not established access. With cloud as source, +[sync](https://rclone.org/commands/rclone_sync/) changes the local destination to +match it, including deletions; [copy](https://rclone.org/commands/rclone_copy/) +retains destination-only files and therefore is not an exact current mirror. +Use an empty dedicated target, scope/size preview and native deletion safeguards +before any bulk sync. No custom scheduler/downloader is justified. + +**Accepted email design:** keep Thunderbird as the sole mail sync owner and read +its existing local company store. Do not change mailbox files, flags or sync state, +expose client credentials, or change the human mail workflow. mbsync is a replacement +fallback only for a demonstrated limitation, never an additional syncer. Keep +retrieval replaceable; no custom universal mail interface or UI migration. + +Delegated metadata-only inspection found a populated company Microsoft 365 IMAP +store under `~/.thunderbird/kiri/ImapMail/`, using standard mbox storage; relevant +configuration is in `~/.thunderbird/kiri/prefs.js:148` and `:162`. No concrete local +reading blocker was found. The inspected account preferences do not establish +complete folder/body/attachment coverage, and the active profile can change while +being read. Keep Thunderbird; confirm any needed missing content and consistent +read behavior through the first real task, not an exhaustive mailbox audit. +Only configuration and file metadata were inspected, not message contents or +credentials. Local reads do not require another mail authorization or syncer; +freshness still depends on Thunderbird's synchronization. + +[Thunderbird offline synchronization](https://support.mozilla.org/en-US/kb/imap-synchronization) +can retain message bodies locally; configuration and download scope must be checked. +Its [Maildir option](https://support.mozilla.org/en-US/kb/maildir-thunderbird) is not +an interchangeable standard Maildir store. Neither that limitation nor an mbox +cache's mutability alone justifies replacing a working syncer: start with read-only +local access and report incomplete/unavailable content. The investigator's initial +mbsync-first recommendation is superseded by the user's explicit Thunderbird-first +choice. No separate mail-sync daemon or IMAP provisioning is selected. + +If a later concrete gap warrants mbsync, note that Microsoft's +[IMAP OAuth scope](https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth) +is not itself a read-only credential. Pull-only configuration cannot substitute +for keeping its token outside agent authority; this is a fallback design caveat, +not a prerequisite for reading already-local company mail. + +**Next-tranche acceptance and execution order:** + +These are independently deliverable units: SharePoint consent or footprint blockers +must not hold up source navigation or available local-mail access. No further user +design choice is needed; consent and activation remain user-controlled boundaries. + +1. Extend existing project/workbench entries: from the model repository an agent + can find company sources, the three Innexo repository candidates and their + unresolved status, and the owners/gaps for all five named domain groups. Keep + `DOMAINS.md` visibly provisional; do not create another model-research ledger. +2. Read one relevant local company email through an existing/native or standard + parsing route; preserve message identity/date/folder and attachment availability. + Account for an active mutable store without changing it. Missing bodies or + attachments are a reported coverage gap, not a reason to install another syncer. +3. Configure the smallest native rclone/user-timer SharePoint mirror after approved + sign-in/consent. Inventory accessible libraries and download footprint first; + stop for a material storage/policy obstacle, not routine path/cadence choices. + Demonstrate one bounded initial download, cloud-read-only permission evidence, + refresh/status visibility and the local-only deletion plan. Schedule only after + user-controlled activation. No remote write probe or exhaustive sync test suite. + +Use ordinary defaults for destination and cadence based on host/disk facts; report +them before activation. Partial or failed refreshes must not be presented as a +complete current snapshot. A useful local file can be opened by both user and agent, +linked back to its SharePoint source and refreshed without a custom service. +No need to finish the data-model comparison to accept this access tranche. + +**Prior implementation goal (paused; retrieval design now reopened):** + +> Implement the local-first company-context tranche in this plan: connect the +> model project's native entry to the workbench and existing source owners; reuse +> Thunderbird's local company mail read-only; add a cloud-read-only rclone mirror +> of accessible SharePoint libraries into a dedicated managed reference directory +> with native scheduling. Preview scope/size/deletions before bulk sync; keep all +> authored changes out of the mirror and edit SharePoint only through its web UI. +> Keep one mail syncer, no indexing framework and no model experiments. Astra +> orchestrates; bounded subagents implement and perform minimal verification. +> Stop for Microsoft consent or a material storage/access blocker. Do not mutate +> company sources, mailbox state, service/model code or repository remotes; do not +> query production or activate NixOS/Home Manager. Report remaining coverage and +> enforcement limits honestly. + +## Open decisions and handoff + +### Reopened: semantic retrieval for company mail and documents + +The user finds the custom mail route too complex and questions whether a vector +database would better support semantic search. This reopens retrieval design; it +does not authorize replacing the helper, starting services, embedding company +content or selecting a database/provider. SharePoint remains consent-blocked. + +Provisional direction: evaluate a maintained semantic/hybrid retrieval tool rather +than build around a database first. Keep three responsibilities distinct: + +- Acquisition and freshness: Thunderbird and eventual SharePoint access still + supply originals. A vector index cannot fetch inaccessible sources or bypass + admin approval. Keep one mail sync owner. +- Search: a replaceable derived index could combine conceptual matching with exact + names/identifiers. Reuse the declared grounded-docs/Ollama experiment if it + actually fits; declaration alone is not proof of ingestion support or usefulness. +- Evidence: return source-linked candidates, then read original messages/threads, + documents or attachments. Semantic similarity is not confirmation of a domain + requirement, and missing hits do not prove missing company knowledge. + +These are responsibilities, not three new custom services. Native filesystem +access remains useful to the user; semantic indexing need not replace local copies. +Prefer an established tool owning extraction/index updates and a usable human/agent +search interface over independently writing parsers, chunkers, refresh jobs and +vector-store wrappers. Existing native agent conversations can own synthesis; no +second chat UI is implied. Compare whole-workflow complexity, not just line count. + +Before adopting an index, establish its source-format support, provenance, update/ +deletion behavior and company-data boundary. Do not send a whole company corpus to +a new embedding/search provider under the existing permission to read it. A small +future comparison should ask whether meaningful relevant sources are found beyond +exact keywords while exact identifiers remain retrievable; no broad evaluation +framework or exhaustive corpus ingestion is selected. + +Bounded primary-source assessment: + +| Candidate | Useful existing capability | Material limit / disposition | +| --- | --- | --- | +| Declared Grounded Docs + Ollama | `modules/capabilities/ai.nix:72` declares local `nomic-embed-text`; line 82 pins docs-mcp-server 2.4.0. Upstream documents full-text/semantic hybrid search and common local document formats. | No company source mount/library, refresh schedule or Codex MCP entry is declared; no successful pilot is recorded. Mailbox formats/thread semantics are not advertised. Investigate reuse for semantic document retrieval; do not call this a ready company search system. | +| Recoll | Maintained local full-text index with native Thunderbird mbox, attachments and common document formats, plus CLI search. Could replace custom mailbox handling. | Official docs do not establish vector/semantic similarity. It is a credible simpler baseline, not fulfillment of semantic discovery by itself. Do not deploy a second permanent index by default. | + +Evidence: [Grounded Docs pinned README](https://github.com/arabold/docs-mcp-server/blob/v2.4.0/README.md), +[search configuration](https://github.com/arabold/docs-mcp-server/blob/v2.4.0/docs/setup/configuration.md), +[Recoll formats](https://recoll.org/pages/features.html), +[Recoll CLI](https://www.recoll.org/manpages/recollq.1.html), +[incremental indexing](https://www.recoll.org/usermanual/webhelp/docs/RCL.INDEXING.INTRODUCTION.html). + +Recommendation remains the capability, not a database: source-linked hybrid +retrieval with maintained ingestion, if its benefits justify the total machinery. +A bounded local-only comparison on a small sample of company mail and model +documents could establish whether semantic matches materially help the user's +questions and whether the simpler full-text route is sufficient. Temporary sample +conversion is an experiment, not acceptance of a permanent custom mail adapter. +Indexing/embedding that sample requires new user authorization; no pilot has run. +Do not index inaccessible SharePoint content, upload a company corpus to a new +provider, launch a general evaluation harness or replace the existing tool yet. + +The user authorized A/B and accepted test write-capable credentials for read-only +operations. Production permission/isolation remains deferred. Database certificate +identity and SharePoint consent apply to later +capabilities, not to the Kubernetes source-map preparation. Their absence must not +be reported as resolved by this design. + +Agent popup is deferred; a predefined system chooser is rejected. Use existing +Herdr spaces and ordinary folder navigation. Learn during use: conversation lifetime, what findings deserve +retention, domain organization, recurring refresh cadence, Dadbod interaction and +which history signals improve workflow. These are intentionally open, not unanswered +prerequisites. Native sessions and an editable source map provide the initial path. + +The independent audit and its follow-up covered the clarified live-discovery +architecture. Material findings are resolved: no live write probes, scoped +Kubernetes permissions, isolation from all out-of-scope authority, bounded source +mapping, small independent slices and replaceable observations. Coverage checking +accounted for all 70 agenda bullets; whitespace checking passed. No configuration +tests or live-service checks were run for this planning-only deliverable. + +**Implementation goal (authorized; follow the working agreement above):** + +> Implement tranche A/B from `docs/plans/workflow-phase-two.md`: add the company +> source/capability map and one documented native discovery route for a single +> namespace in the existing test Kubernetes target, and independently implement the native +> Neovim wrapping/movement/completion ergonomics. Preserve current owners and use +> existing tools. Test write-capable credentials are allowed, but issue only read +> operations against the explicit test scope without loading aggregate credentials. +> If access is unavailable, deliver the source map/command design, mark the runtime +> pilot blocked, and complete the independent editor work. Defer production access +> until all agent-accessible production credentials are confirmed read-only. Never probe writes, +> change company services, expose secret values, modify remotes, or activate a NixOS +> or Home Manager generation. Keep changes local to NixOS configuration and workbench +> documentation/tooling; service repositories are read-only. Verify the acceptance +> criteria above and report exactly what passed, what needs user activation or +> company access provisioning, and the next smallest useful capability. diff --git a/docs/plans/workflow-system.md b/docs/.archive/plans/workflow-system.md similarity index 99% rename from docs/plans/workflow-system.md rename to docs/.archive/plans/workflow-system.md index 6a94c05..1d5cf38 100644 --- a/docs/plans/workflow-system.md +++ b/docs/.archive/plans/workflow-system.md @@ -1,5 +1,7 @@ # Workflow system execution +Archived: historical implementation evidence, not the current iteration plan. + Source: [`../workflow-discovery.md`](../workflow-discovery.md) Phase one is complete; explicitly deferred pilots remain. This file is the diff --git a/docs/.archive/sharepoint-reference.md b/docs/.archive/sharepoint-reference.md new file mode 100644 index 0000000..6a4ea6b --- /dev/null +++ b/docs/.archive/sharepoint-reference.md @@ -0,0 +1,65 @@ +# SharePoint reference mirror + +Archived: guidance for the existing implementation, not a new design decision. + +The Zenith user timer mirrors one selected company SharePoint document library +into `~/.local/share/yookr-reference/sharepoint` hourly. SharePoint is +authoritative: remote updates overwrite local files and remote deletions remove +local files. Never author files there; edit them in SharePoint's web UI. The job +stops before more than 100 local deletions and reports the failure in the user +journal. A failed run may leave earlier updates in place and is not evidence of a +complete current snapshot; rclone does not delete destination files when the run +has errors. + +The timer remains inert until both `~/.config/rclone/rclone.conf` and +`~/.config/rclone/sharepoint-reference.env` exist and the latter names a source. +Before adding the SharePoint remote or source file, the user must explicitly +start the interactive company sign-in and consent step. Use only delegated, +cloud-read-only scopes: +`Files.Read Files.Read.All Sites.Read.All offline_access`. Do not accept rclone's +broader default scopes or create an application registration. Tenant policy may +require administrator consent or an approved single-tenant application; involve +the administrator only if the consent response requires it. + +After approval, run `rclone config`, choose Microsoft OneDrive, set the advanced +`access_scopes` value above, and select one company SharePoint document library +(not a personal account). Before enabling the job, inspect and accept its exact +scope, footprint, and first change set: + +```console +rclone config redacted company-sharepoint +rclone lsd company-sharepoint: +rclone size company-sharepoint: +rclone sync company-sharepoint: ~/.local/share/yookr-reference/sharepoint --dry-run --max-delete 100 +``` + +The remote-scoped redacted output confirms the configured requested scopes, not +what the tenant actually granted. Confirm the consent response also contains only +the requested read scopes; stop if it denies them or offers broader authority. + +Only after that preview is accepted, create the gate with mode `0600`: + +```text +RCLONE_SHAREPOINT_SOURCE=company-sharepoint: +``` + +Save it as `~/.config/rclone/sharepoint-reference.env`. Home Manager activation +then enables the hourly timer. This is the first bounded library, not a permanent +allowlist or a claim that all accessible SharePoint content is mirrored. Add +another library only after its own size/preview check, using another native unit +and dedicated destination rather than widening this source silently. Refresh and +inspect the current unit with: + +```console +systemctl --user start sharepoint-reference-sync.service +systemctl --user status sharepoint-reference-sync.service +journalctl --user -u sharepoint-reference-sync.service +``` + +For an accepted deletion set larger than 100 files, rerun the dry-run and then a +manual `rclone sync` without `--max-delete`; the scheduled guard stays in place. +The mutable OAuth token remains in rclone's config outside the Nix store. The +local directory is user-writable and its read-only consumer policy is not an OS +permission or credential-isolation boundary. New mirror files are private to the +user by default (`UMask=0077`), but same-user processes can still read and change +them. diff --git a/docs/workflow-discovery.md b/docs/.archive/workflow-discovery.md similarity index 100% rename from docs/workflow-discovery.md rename to docs/.archive/workflow-discovery.md diff --git a/docs/constellation-work.md b/docs/constellation-work.md new file mode 100644 index 0000000..998052b --- /dev/null +++ b/docs/constellation-work.md @@ -0,0 +1,210 @@ +# 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. +- 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. + +## Current exploration — organization + +Accepted: repositories are primarily code; general notes belong outside them. +Company work is broader than repositories. Workbench has a different purpose from +product projects. Structure should be intuitive without constraining future work. + +Observed through shallow listings: project groups (now relocated below), `~/work`, +`~/sync/notes`, mixed material in `~/sync`, and loose work artifacts in home. +Names alone do not establish ownership, contents or redundancy. + +Accepted: the workbench supplies an environment at the company root. Reusable HTTP +and SQL files need a home. Native tools should remain freely composable; the current +custom inventory and mail commands are not the desired direction. Notes, credential +placement and synchronization remain open; no relocation is approved. + +Workbench `.envrc` still loads tools and exports test/live database, API, +object-store and RabbitMQ credentials together. Neovim's global database plugin +names four company connections. No services or secrets were read. + +Direction: a tool/context environment at company root, maintained `workbench/` +tooling with `http/` and `databases/` material, and separate local investigation files. +Human credentials are supplied through environment variables for both test/live; +agent access requires separate treatment. +Organize reusable requests by service and queries by database, with visible target +selection. Keep setup +shortcuts only where they add value; let kubectl and other clients own operations. +Mail needs a searchable representation that preserves message meaning; rg over raw +mailbox storage is not automatically an adequate substitute for the current helper. + +API/database proposal: reusable HTTP files grouped by service, shared authentication +requests, and explicit visible HTTP target selection. Start database exploration +from a named connection (database + environment), creating or reopening an attached +query; retain direct-file opening with explicit connection assignment. Keep reusable +query text separate from target credentials. Working queries should survive restart +without automatically becoming tracked workbench material. + +Native evidence: [Kulala imports](https://github.com/mistweaverco/kulala.nvim/blob/main/doc/kulala.import-and-run-http.txt) +support sharing named authentication requests across files. +[Dadbod UI](https://github.com/kristijanhusak/vim-dadbod-ui/blob/master/doc/dadbod-ui.txt) +supports connection-associated saved queries, persistent temporary-query locations +and explicit assignment of independently opened buffers. Callable connection URLs +resolve while populating the list, not on selection (confirmed in pinned source); +they do not support the proposed per-selection credential delivery. +Its save location also holds connection state, so do not put the entire directory +under Git. Context7 covered Kulala; Dadbod required upstream help as fallback. +The persistent-query option was also confirmed in pinned Dadbod source. HTTP +import/run syntax was checked in current Kulala documentation; not exercised +against company services. + +Chosen root: `~/yookr`. Company-wide Neovim search is explicitly deferred for lack +of a concrete use case. Existing project search remains unchanged. + +Created `~/yookr` directly with ordinary `.envrc` and `AGENTS.md` files. Moved the +actual workbench checkout from `~/dev/work/yookr-workbench` to `~/yookr/workbench`; +the temporary link was removed. Prefer direct moves over compatibility links. +Removed the earlier Home Manager +workspace declarations: Nix owns tools/integration, not working directories or +their authored files. Notes and credentials remain in place; +workbench uncommitted work moved with the checkout. Walker's Yookr entry and Git's new work-path identity rule remain +activated by the user. + +Repository environments remain independent. Future relocation/composition must +account for their own `.envrc` files (direnv provides `source_up`) without imposing +a personal directory layout on portable repositories. The workbench's own `.envrc` +still exports aggregate credentials; root entry uses its flake only. + +Verification: checked ordinary file types and whitespace +after the ownership correction. The earlier Nix configuration evaluation passed; +it was not repeated for removing the workspace declarations. No builds, tests, +credential reads or activation performed. The workspace files exist now; the user +can authorize its environment with `direnv allow ~/yookr`. System activation for +Walker/Git also includes pre-existing editor/AI/SharePoint changes in this checkout. + +Credential decision: user wants environment-variable delivery of BOTH test and +live credentials, with ordinary Neovim startup. Removed the rejected `mysql-test` +launcher; existing workbench `.envrc` already supplies both and remains unchanged. +Do not resume per-selection decryption or add per-connection launchers. The root +environment is still tools-only; agent isolation remains separate from the chosen +human workflow. No secrets were decrypted or databases contacted. + +API/database organization implemented: `http/` contains service-specific files, +shared `auth.http` and the unchanged endpoint catalogue. Protected requests use +native `import`/`run` to authenticate before execution in the selected environment. +`databases/mysql/` separates server discovery and the two existing schemas; +`databases/mongodb/server.js` preserves MongoDB discovery. Existing request and +query contents were retained, with no additional system access or credentials. +Private HTTP environment files are ignored at any depth. No compatibility files. + +Neovim uses `db_ui_tmp_query_location` under its data directory at +`db_ui/working`; write working queries there without promoting them into Git. +Dadbod's saved-query storage and connection selection remain unchanged. This +one-line editor change has been activated by the user. Whitespace and Lua syntax +were checked; no tests, company-service requests or decryption performed. + +Target context prepared in the existing Lualine statusline: pinned Kulala 6.29.0 +supplies a native `kulala` component for `.http` buffers (environment selection); +Dadbod's `db_ui#statusline` supplies connection/schema/table in attached query +buffers and timing in result buffers. No copied target state or credential URLs. +These additions await the next user activation; they are indicators, not access +controls. Lua syntax and whitespace checked; no company-service calls or tests. + +Access isolation explicitly deferred by the user. Separate read-only credentials +for agents are the eventual direction, but cannot be created now. Root remains +tools-only; the workbench child supplies both human credential environments. +Existing agent restrictions remain. Do not revisit isolation as a prerequisite +for unrelated work or silently broaden access. + +Current focus: the bigger picture, not further API/database polish. Revisited the +idea inbox. Proposed areas for exploration, not a committed implementation plan: +places and ownership; navigation and interaction; human/agent collaboration; +system operation and maintenance. Start with places because they establish the +context that launchers, editors and agents enter. + +User clarification: work is mostly project-based, not organized into topics or +investigations; relevant project material mostly stays in the repository. Notes +are mostly meeting notes so far. Do not add investigation folders or outer project +containers without a concrete need. + +Approved relocation completed: `~/dev/work` moved directly to `~/yookr/projects`, +including `.archive` and `.worktrees`; remaining `~/dev` renamed `~/projects`, +retaining `own`, `ext`, `forks`. No compatibility links. Repaired the three linked +worktrees in yookr-dashboard and yookr-dashboard-new with native Git repair; +all three resolve at their new paths. Updated company README/AGENTS references. +Walker roots, XDG projects path and Git identity rules updated in Nix. The new +XDG projects path is now active. Existing shells and path-dependent development environments +may need reopening/recreation; no caches or project files were rewritten. + +User requested removal of Bruno collections and their Syncthing configuration. +Stopped the local Syncthing service before moving `~/dev/bruno` to Trash +(recoverable); removed its folder entry from shared Nix configuration. Other +devices' files were not touched. Syncthing was stopped for the move and has since +resumed (observed active on the following turn). +Only zenith's filesystem was migrated; other hosts need their own relocation +before adopting the shared project-path change. Nix files formatted; worktree +paths and whitespace checked. No tests or remote repository changes. + +Notes entry: existing Neovim `Space n f` finds notes, `Space n n` creates one, +and `Space n t` finds tags. Niri `Mod+N` opens a daily note. Added a standard +Notes desktop entry, discoverable through Walker, opening `~/sync/notes` in +terminal Neovim. This neutral entry uses existing file/text search (`Space s f`, +`Space s g`) and note commands, without creating a daily note. Pending activation. +No new search provider, shortcuts, templates or note directories. Notes placement +and existing daily-note behavior unchanged; agent isolation remains deferred. + +Current exploration: agent-session navigation. Agent-deck 1.15.0 is already +installed alongside Herdr and tmux; do not plan installation from stale notes. +Its installed help provides session search, attach and Ctrl+Q detach, plus native +project-path sessions and optional groups. No sessions were started, inspected, +stopped or migrated. Asked the user whether they have tried it and what feels good +or awkward before changing bindings or selecting it as Herdr's replacement. + +Proposed division of responsibility: Walker enters a place/application, Niri +navigates visible windows, the session manager finds and resumes agent work. +Avoid mirroring the whole session list into another launcher or forcing a group +hierarchy before actual use. Agent isolation remains deferred. + +Command cleanup complete: archived the workbench justfile, custom mail reader, +discovery pilot and old README in its `.archive/`. Removed the obsolete command +catalogue check and bubblewrap/Python/just shell dependencies. The shorter README +documents native Garden target/session setup followed by ordinary kubectl or K9s, +fixes product-repository links after relocation, and marks mail search unresolved. +No credentials, mail or remote systems were accessed. Files are recoverable in the +archive; no replacement wrapper or index was introduced. +Workbench `nix flake check --no-build --quiet` and whitespace checking passed. + +Iteration setup: all five previous docs moved under `docs/.archive/`, retaining +their relative layout. Prior editor, AI and SharePoint implementation changes +remain; consult their owners when those areas become active. diff --git a/docs/constellation.md b/docs/constellation.md new file mode 100644 index 0000000..5a0745b --- /dev/null +++ b/docs/constellation.md @@ -0,0 +1,75 @@ +# Constellation + +An evolving personal computing environment. This is the current design, starting +fresh with iteration two; decisions can change through discussion and use. +See [working state](constellation-work.md) for how we collaborate and where to resume. + +## Philosophy + +Build a quiet, keyboard-driven, text-oriented environment from understandable +tools that compose naturally. Keep information accessible through standard formats +and interfaces, so humans and agents can work with the same underlying resources. +Organize files and workflows consistently, making it intuitive where to look, +where things belong and how to proceed. Let structure guide everyday work while +leaving room for exploration and exceptions. Use graphical applications where +they serve the task well. + +Make the usual path obvious and exceptions understandable. Consistency should +reduce remembering and decision-making without requiring identical bindings or +fixed procedures everywhere. A terminal interface alone does not establish fit. + +Nix configures installed tools and system integration. Working directories, +checkouts, workspace `.envrc` files and context documents are ordinary user-owned +files, maintained directly rather than generated by Home Manager. A workbench may +use a flake to declare its tools without Nix owning the surrounding workspace. + +## What that means so far + +- Neovim, Niri, Walker and the terminal feel right: direct, keyboard-driven + interaction with useful connections to the rest of the environment. +- Outlook is acceptable as an application, but its interaction and integration + do not fit as naturally. Accessible mail for tools and agents matters separately + from choosing a mail reader. Preserve meaning and source context, not just text. +- Herdr's persistent-agent concept fits; its shortcuts do not. Agent-deck is + already installed alongside Herdr; whether it fits through actual use remains + open. No replacement has been selected. +- Repositories should contain code and documentation needed by that code, not + become containers for general notes and company material destined for Git remotes. +- Company work includes repositories, reference material, notes, credentials and + investigation tools. Its organization must accommodate those different roles. +- Actual work is mostly project-based; notes are primarily meeting notes so far. + Do not impose a topic/investigation workflow or a fixed future note taxonomy. +- Yookr workbench is an investigation environment, not a product repository. + Its placement and versioning can be considered separately. +- Accepted direction: workbench supplies the environment at the company-workspace + root. Its maintained tooling and reusable HTTP/SQL files still need a clear home; + the company root need not itself be a Git repository. +- Expose native capabilities and useful context rather than a menu of predetermined + investigations. The user rejects the current `k8s-inventory` and custom `mail` + direction. API/database organization and broader system access remain exploratory. +- Accepted interaction direction: find HTTP requests by service; start database + exploration from a named connection. Keep targets visible and use the existing + execution vocabulary. Working queries should survive restart without automatically + becoming reusable tracked material. Company-wide Neovim search is deferred: no + concrete use case currently justifies adding it. +- Human credential delivery uses environment variables with both test and live + credentials available. Keep ordinary editor startup; no per-connection launcher + or on-demand decryption workflow. Agent authority is a separate concern. +- Separate read-only company credentials for agents are the eventual direction. + Access isolation is explicitly deferred: new credentials cannot be made now. + Existing agent access boundaries remain in force; this does not block unrelated + design and organization work. + +The company root is `~/yookr`, with repositories in `~/yookr/projects` and the +cross-project workbench in `~/yookr/workbench`. Personal/non-company repositories +live under `~/projects/{own,ext,forks}`. Projects currently mostly live in their +repositories; no extra project containers are needed. Meeting notes remain in +`~/sync/notes`. Remaining layout and credential locations are still being explored. + +## Sources + +`~/sync/notes/setup-todo.md` is the idea inbox, not a committed backlog. +Existing implementation is the starting system, not a fixed future architecture. +Documents under [.archive/](.archive/) are historical evidence; consult only the +relevant parts when needed. Their plans, priorities and old approvals do not define +this iteration. Preserve existing work while reconsidering its design.