{
  "schemaVersion": 1,
  "cards": [
    {
      "id": "shell.build-command", "chapter": "shell", "title": "Build a command without surprises",
      "synonyms": ["quote spaces", "arguments", "pipes and redirection", "what does the vertical bar do", "connect commands", "local versus remote"],
      "kind": "reference", "layer": "Shell prompt — before pressing Enter", "requirements": [],
      "body": "cards/build-command.md", "effect": "Understand what the shell passes to each program; examples only print synthetic text.",
      "recovery": "Ctrl-C cancels the current input or interrupts a foreground command. It cannot undo an overwrite or a remote action.",
      "related": ["shell.find-file", "shell.history"],
      "source": {"label": "zsh manual", "url": "https://zsh.sourceforge.io/Doc/Release/Shell-Grammar.html", "revision": "zsh 5.9 concepts; generic, not local bindings"}
    },
    {
      "id": "shell.find-file", "chapter": "finding", "title": "Find a file without typing its path",
      "synonyms": ["find a file", "without typing a path", "insert a filename", "fuzzy find files", "open a file by name"],
      "kind": "keys", "layer": "Interactive shell prompt — not inside Neovim", "requirements": ["fzf"],
      "body": "cards/find-file.md", "effect": "A configured file picker inserts a path into the command line; it does not run that command.",
      "recovery": "Esc cancels the picker. Inspect the resulting shell line; Ctrl-C clears it before execution.",
      "related": ["shell.build-command", "shell.history", "nvim.modes"],
      "source": {"label": "fzf shell integration", "url": "https://junegunn.github.io/fzf/shell-integration/", "revision": "fzf 0.74.3 reference; shell hooks must be checked separately"},
      "exercise": {"goal": "Insert a disposable file's path without typing the full path. Do not execute the completed command.", "hints": ["Start at your shell prompt, in a small directory you know.", "Type nvim followed by a space. Check the file-picker binding in this card.", "Select a filename, inspect the inserted path, then Ctrl-C to discard the line."], "success": "You can explain why choosing a file and running the completed command are two separate actions."}
    },
    {
      "id": "shell.history", "chapter": "finding", "title": "Recall a command without running it blindly",
      "synonyms": ["recall a command", "search history", "past commands", "find that command again", "reverse history search"],
      "kind": "keys", "layer": "Interactive shell prompt", "requirements": ["fzf"],
      "body": "cards/history.md", "effect": "Recall text for inspection before execution; this guide never reads your shell history.",
      "recovery": "Esc cancels a configured fzf picker; Ctrl-C discards a recalled line. Previous commands may have effects that cannot be undone.",
      "related": ["shell.build-command", "shell.find-file"],
      "source": {"label": "fzf shell integration", "url": "https://junegunn.github.io/fzf/shell-integration/", "revision": "fzf 0.74.3 reference; recorded shell hooks are not runtime verification"}
    },
    {
      "id": "tmux.workspaces", "chapter": "tmux", "title": "Return to a workspace without closing your work",
      "synonyms": ["return to my workspace", "get back to my session", "detach and attach", "sessions windows panes", "leave terminal running", "switch workspace"],
      "kind": "reference", "layer": "tmux session / shell outside tmux", "requirements": ["tmux"],
      "body": "cards/workspaces.md", "effect": "Detaching leaves the session running on its host. Reattaching shows the same workspace; reboot survival needs separate configuration.",
      "recovery": "Use detach, not exit or kill-session, to leave work running. Cancel a tmux chooser with Esc. Reattach from the same host.",
      "related": ["tmux.key-layers", "personal.cockpit"],
      "source": {"label": "tmux manual", "url": "https://man.openbsd.org/tmux", "revision": "tmux 3.6a concepts; commands rather than guessed keybindings"},
      "exercise": {"goal": "Detach from a disposable tmux workspace and return to the same pane.", "hints": ["Choose an expendable session, not a production process or unfamiliar remote host.", "From its shell, run tmux detach-client. From the outer shell, run tmux list-sessions.", "Run tmux attach-session -t '=YOUR_EXACT_SESSION_NAME', replacing the quoted placeholder with the listed name."], "success": "Your pane remains and you can distinguish detach from terminating a session. No progress is stored."}
    },
    {
      "id": "tmux.key-layers", "chapter": "tmux", "title": "Work out which layer receives a shortcut",
      "synonyms": ["tmux prefix", "why does this key not work", "terminal shortcuts", "key layers", "tmux menu"],
      "kind": "reference", "layer": "Terminal → tmux → application", "requirements": ["tmux"],
      "body": "cards/key-layers.md", "effect": "Identify the receiver before trying a shortcut; terminal settings can intercept keys before tmux or Neovim sees them.",
      "recovery": "Esc usually cancels an application picker; it is not a universal undo. Return to the shell before testing shell-specific shortcuts.",
      "related": ["tmux.workspaces", "nvim.modes"],
      "source": {"label": "tmux manual", "url": "https://man.openbsd.org/tmux", "revision": "tmux 3.6a; private prefix/menu intentionally unresolved without profile"}
    },
    {
      "id": "nvim.modes", "chapter": "nvim", "title": "Edit, select and undo without losing the file",
      "synonyms": ["undo an edit", "normal insert visual", "get out of insert mode", "buffer versus file", "Neovim basics", "select whole lines"],
      "kind": "keys", "layer": "Neovim — mode matters", "requirements": ["nvim"],
      "body": "cards/nvim-modes.md", "effect": "Edits change the buffer first. Only an explicit write such as :write changes the file on disk.",
      "recovery": "Esc returns to Normal mode; u undoes an edit, Ctrl-R redoes it (default mappings). :quit refuses unsaved changes; :quit! discards them deliberately.",
      "related": ["shell.find-file", "tmux.key-layers", "writing.review"],
      "source": {"label": "Neovim user manual", "url": "https://neovim.io/doc/user/usr_02.html", "revision": "Neovim 0.11 standard defaults; custom mappings may override them"}
    },
    {
      "id": "nvim.find-project", "chapter": "nvim", "title": "Find files and text in a project",
      "synonyms": ["find text in project", "find in files", "Quick Open", "project explorer", "recent files", "grep project", "search code", "Oil directory"],
      "kind": "keys", "layer": "Neovim Normal mode → picker or directory buffer", "requirements": ["nvim"],
      "body": "cards/nvim-find-project.md", "effect": "Distinguish filename, content and recent-file search; Oil can apply filesystem changes if you explicitly save them.",
      "recovery": "Cancel a picker with Ctrl-C in Insert or Esc to Normal then Esc. Ctrl-O returns after a jump. Do not write unwanted Oil changes.",
      "related": ["nvim.buffers-windows", "nvim.code-navigation", "nvim.quick-reference", "shell.find-file"],
      "source": {"label": "Authored snacks.lua / oil.lua and Neovim quickfix manual", "url": "https://neovim.io/doc/user/quickfix.html", "revision": "Authored source and installed plugin docs inspected 2026-09-06; local bindings require a separate profile"}
    },
    {
      "id": "nvim.code-navigation", "chapter": "nvim", "title": "Go to definition and navigate code with LSP",
      "synonyms": ["go to definition", "find usages", "find references", "hover documentation", "rename symbol", "quick fix", "format document", "jump back"],
      "kind": "keys", "layer": "Neovim Normal mode; buffer-local LspAttach mappings", "requirements": ["nvim"],
      "body": "cards/nvim-code-navigation.md", "effect": "Navigation requests information; rename, format and code actions can change buffers or trigger server commands.",
      "recovery": "Ctrl-O returns after a jump. Review every affected buffer after edits; undo is buffer-local, not atomic multi-file rollback.",
      "related": ["nvim.find-project", "nvim.buffers-windows", "nvim.quick-reference"],
      "source": {"label": "Authored lsp-config.lua and Neovim LSP manual", "url": "https://neovim.io/doc/user/lsp.html", "revision": "Authored source and installed lsp.txt inspected 2026-09-06; requires attached capable server"}
    },
    {
      "id": "nvim.buffers-windows", "chapter": "nvim", "title": "Switch buffers and arrange editor windows",
      "synonyms": ["switch buffers", "open documents", "editor tabs", "split editor", "two files side by side", "move between splits", "close editor view"],
      "kind": "keys", "layer": "Neovim Normal mode; navigator may hand off to tmux", "requirements": ["nvim"],
      "body": "cards/nvim-buffers-windows.md", "effect": "Switch documents or views without confusing a buffer, editor window, tab page or terminal pane.",
      "recovery": "Return with :buffer # or Ctrl-W then p. Respect unsaved-change refusals; closing a view does not delete a disk file.",
      "related": ["nvim.find-project", "nvim.modes", "tmux.panes", "nvim.quick-reference"],
      "source": {"label": "Authored snacks.lua / nvim-tmux-navigation.lua and Neovim windows manual", "url": "https://neovim.io/doc/user/windows.html", "revision": "Authored source and installed windows.txt inspected 2026-09-06; navigator counterpart must be loaded"}
    },
    {
      "id": "nvim.tests", "chapter": "nvim", "title": "Run nearest test, file or suite deliberately",
      "synonyms": ["run nearest test", "test at cursor", "test this file", "run test suite", "rerun last test", "visit last test", "test gutter button", "vimux runner"],
      "kind": "keys", "layer": "Neovim Normal mode → vim-test → vimux tmux runner pane", "requirements": ["nvim", "tmux"],
      "body": "cards/nvim-test-runner.md", "effect": "An intentional test run executes project code with possible side effects; TestVisit only navigates. The guide runs nothing.",
      "recovery": "Interrupt only the identified runner with Ctrl-C or :VimuxInterruptRunner. Interruption cannot undo test side effects.",
      "related": ["nvim.code-navigation", "tmux.panes", "nvim.quick-reference"],
      "source": {"label": "Authored vim-test.lua; installed test.txt and vimux.txt", "url": "https://neovim.io/doc/user/terminal.html", "revision": "Plugin commands/strategy inspected 2026-09-06; native terminal reference supplies context, not plugin key defaults"}
    },
    {
      "id": "nvim.quick-reference", "chapter": "nvim", "title": "Neovim quick reference for everyday editing",
      "synonyms": ["nvim cheatsheet", "neovim cheatsheet", "nvim cheat sheet", "neovim quick reference", "editor shortcuts", "IDE to Neovim", "which key menu"],
      "kind": "reference", "layer": "Neovim modes, native commands and separately recorded local keys", "requirements": ["nvim"],
      "body": "cards/nvim-quick-reference.md", "effect": "Recall everyday editing and IDE equivalents while keeping stock defaults separate from personal bindings.",
      "recovery": "Esc returns to Normal; u undoes buffer edits. :quit refuses unsaved loss; :quit! deliberately discards it.",
      "related": ["nvim.modes", "nvim.find-project", "nvim.code-navigation", "nvim.buffers-windows", "nvim.tests", "tmux.quick-reference"],
      "source": {"label": "Neovim manual and inspected authored editor mappings", "url": "https://neovim.io/doc/user/usr_02.html", "revision": "Reference reconciliation 2026-09-06; private sheet not exported, native help unchanged"}
    },
    {
      "id": "tmux.panes", "chapter": "tmux", "title": "Split terminal panes and move between them",
      "synonyms": ["split terminal", "split down", "split right", "new terminal tab", "new window", "move between panes", "zoom pane"],
      "kind": "keys", "layer": "tmux prefix table, before the shell or editor", "requirements": ["tmux"],
      "body": "cards/tmux-panes.md", "effect": "Splits and windows start shells; focus and zoom change the view without terminating existing processes.",
      "recovery": "Toggle zoom again or move focus back. Detach to preserve work; killing a pane is destructive, not split undo.",
      "related": ["tmux.workspaces", "tmux.key-layers", "nvim.buffers-windows", "tmux.quick-reference"],
      "source": {"label": "Authored tmux/main.conf and tmux manual", "url": "https://man.openbsd.org/tmux", "revision": "Authored source and installed tmux.1 inspected 2026-09-06; stock defaults are not live verification"}
    },
    {
      "id": "tmux.copy-mode", "chapter": "tmux", "title": "Copy terminal output and search scrollback",
      "synonyms": ["copy terminal output", "search scrollback", "select terminal text", "copy mode", "paste tmux buffer", "clipboard paste", "scroll terminal history"],
      "kind": "reference", "layer": "tmux copy-mode-vi versus application input and system clipboard", "requirements": ["tmux"],
      "body": "cards/tmux-copy-mode.md", "effect": "Copy mode reads pane history into tmux buffers. Pasting sends input to an application and may execute commands.",
      "recovery": "Stock vi q exits copy mode; Esc clears selection. Pasted commands and clipboard changes have no general undo.",
      "related": ["tmux.key-layers", "tmux.panes", "tmux.quick-reference"],
      "source": {"label": "Authored tmux/main.conf clipboard defect and tmux copy-mode manual", "url": "https://man.openbsd.org/tmux", "revision": "Source inspected 2026-09-06; pbcopy paste defect flagged, not fixed or executed; clipboard integration unverified"}
    },
    {
      "id": "tmux.quick-reference", "chapter": "tmux", "title": "tmux quick reference for keeping work running",
      "synonyms": ["tmux cheatsheet", "tmux cheat sheet", "tmux quick reference", "tmux shortcuts", "tmux key help", "every binding"],
      "kind": "reference", "layer": "tmux prefix/suffix, menu and native commands", "requirements": ["tmux"],
      "body": "cards/tmux-quick-reference.md", "effect": "Recall session/window/pane actions and distinguish direct key help from the authored menu's full key listing.",
      "recovery": "Esc cancels the menu/prompt; q leaves stock vi copy mode. Detach rather than killing work; reconnect on the same host.",
      "related": ["tmux.workspaces", "tmux.key-layers", "tmux.panes", "tmux.copy-mode", "nvim.quick-reference"],
      "source": {"label": "Authored tmux/main.conf and tmux manual", "url": "https://man.openbsd.org/tmux", "revision": "Reference reconciliation 2026-09-06; stock defaults and persistence plugins are not verified runtime state"}
    },
    {
      "id": "writing.review", "chapter": "writing", "title": "Choose between a rewrite and feedback",
      "synonyms": ["improve a paragraph", "AI writing", "review before applying", "critique prose", "Fabric patterns", "keep my voice", "summarize text"],
      "kind": "reference", "layer": "Writing workflow — reference only, not an AI action", "requirements": [],
      "body": "cards/writing-review.md", "effect": "Decide the input scope and desired result before using an AI tool. Opening this card sends nothing.",
      "recovery": "Keep the original. Discard an unwanted proposal; never paste a critique over the prose. Existing editor AI routes retain their own behavior.",
      "related": ["nvim.modes", "shell.build-command"],
      "source": {"label": "Fabric patterns used independently", "url": "https://github.com/danielmiessler/Fabric#just-use-the-patterns", "revision": "research snapshot 6b0914d1bb0dbf54facec1743838c7312e945634; prompts not yet vendored or executable"}
    },
    {
      "id": "personal.cockpit", "chapter": "personal", "title": "Know when to use a cockpit instead of another shell",
      "synonyms": ["my cockpit", "custom commands", "personal dashboard", "where are my tools", "open the cockpit", "leave the cockpit"],
      "kind": "reference", "layer": "Personal tools — availability and bindings vary by machine", "requirements": ["cockpit"],
      "body": "cards/cockpit.md", "effect": "A cockpit groups personal workflows; a shell builds arbitrary commands. This guide explains the distinction without opening either.",
      "recovery": "Use the application's documented quit/back key, or switch tmux windows to leave it running. Do not assume Ctrl-C safely cancels a task already submitted.",
      "related": ["tmux.workspaces", "tmux.key-layers"],
      "source": {"label": "Shell executable discovery", "url": "https://zsh.sourceforge.io/Doc/Release/Shell-Builtin-Commands.html", "revision": "generic discovery only; private cockpit source/distribution intentionally not included"}
    }
  ]
}
