logiguard fork: GPUI xdg-activation keyboard-focus serial fix
Some checks failed
Update All Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Triage Project Sync (#84) / Sync triage project (push) Has been cancelled
release_nightly / notify_on_failure (push) Has been cancelled
release_nightly / check_style (push) Has been cancelled
release_nightly / run_tests_windows (push) Has been cancelled
release_nightly / clippy_windows (push) Has been cancelled
release_nightly / bundle_linux_aarch64 (push) Has been cancelled
release_nightly / bundle_linux_x86_64 (push) Has been cancelled
release_nightly / bundle_mac_aarch64 (push) Has been cancelled
release_nightly / bundle_mac_x86_64 (push) Has been cancelled
release_nightly / bundle_windows_aarch64 (push) Has been cancelled
release_nightly / bundle_windows_x86_64 (push) Has been cancelled
release_nightly / build_nix_linux_x86_64 (push) Has been cancelled
release_nightly / build_nix_mac_aarch64 (push) Has been cancelled
release_nightly / update_nightly_tag (push) Has been cancelled
Hotfix Review Monitor / check-hotfix-reviews (push) Has been cancelled
Stale PR Review Reminder / check-stale-prs (push) Has been cancelled
Update Weekly Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Bump collab-staging Tag / update-collab-staging-tag (push) Has been cancelled
compliance_check / scheduled_compliance_check (push) Has been cancelled
Some checks failed
Update All Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Triage Project Sync (#84) / Sync triage project (push) Has been cancelled
release_nightly / notify_on_failure (push) Has been cancelled
release_nightly / check_style (push) Has been cancelled
release_nightly / run_tests_windows (push) Has been cancelled
release_nightly / clippy_windows (push) Has been cancelled
release_nightly / bundle_linux_aarch64 (push) Has been cancelled
release_nightly / bundle_linux_x86_64 (push) Has been cancelled
release_nightly / bundle_mac_aarch64 (push) Has been cancelled
release_nightly / bundle_mac_x86_64 (push) Has been cancelled
release_nightly / bundle_windows_aarch64 (push) Has been cancelled
release_nightly / bundle_windows_x86_64 (push) Has been cancelled
release_nightly / build_nix_linux_x86_64 (push) Has been cancelled
release_nightly / build_nix_mac_aarch64 (push) Has been cancelled
release_nightly / update_nightly_tag (push) Has been cancelled
Hotfix Review Monitor / check-hotfix-reviews (push) Has been cancelled
Stale PR Review Reminder / check-stale-prs (push) Has been cancelled
Update Weekly Top Ranking Issues / update_top_ranking_issues (push) Has been cancelled
Bump collab-staging Tag / update-collab-staging-tag (push) Has been cancelled
compliance_check / scheduled_compliance_check (push) Has been cancelled
Single-commit orphan branch: full zed-industries/zed @ 8c74db0 source tree with a 3-file patch applied (no upstream history). Patch (crates/gpui_linux/src/linux/wayland/): - serial.rs: add SerialKind::KeyboardEnter - client.rs: store wl_keyboard.enter serial; add latest_serial_of() - window.rs: activate() uses keyboard-enter serial (Mutter focus gate) Mutter honors window activation only when the token carries the keyboard- focus serial from wl_keyboard.enter; GPUI used a stale mouse-press serial. See docs/tray-window-focus-wayland.md in logiguard. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
380
docs/.conventions/CONVENTIONS.md
Normal file
380
docs/.conventions/CONVENTIONS.md
Normal file
@@ -0,0 +1,380 @@
|
||||
# Zed Documentation Conventions
|
||||
|
||||
This document covers structural conventions for Zed documentation: what to document, how to organize it, and when to create new pages.
|
||||
|
||||
For voice, tone, and writing style, see the [brand-voice/](./brand-voice/) directory, which contains:
|
||||
|
||||
- `SKILL.md` — Core voice principles and workflow
|
||||
- `rubric.md` — 8-point scoring criteria for quality
|
||||
- `taboo-phrases.md` — Patterns and phrases to avoid
|
||||
- `voice-examples.md` — Before/after transformation examples
|
||||
|
||||
---
|
||||
|
||||
## What Needs Documentation
|
||||
|
||||
### Document
|
||||
|
||||
- **New user-facing features** — Anything users interact with directly
|
||||
- **New settings or configuration options** — Include the setting key, type, default value, and example
|
||||
- **New keybindings or commands** — Use `{#action ...}` and `{#kb ...}` syntax
|
||||
- **All actions** — Completeness matters; document every action, not just non-obvious ones
|
||||
- **New AI capabilities** — Agent tools, providers, workflows
|
||||
- **New providers or integrations** — LLM providers, MCP servers, external agents
|
||||
- **New tools** — Agent tools, MCP tools, built-in tools
|
||||
- **New UI panels or views** — Any new panel, sidebar, or view users interact with
|
||||
- **Public extension APIs** — For extension developers
|
||||
- **Breaking changes** — Even if the fix is simple, document what changed
|
||||
- **Version-specific behavior changes** — Include version callouts (e.g., "In Zed v0.224.0 and above...")
|
||||
|
||||
### Skip
|
||||
|
||||
- **Internal refactors** — No user-visible change, no docs
|
||||
- **Bug fixes** — Unless the fix reveals that existing docs were wrong
|
||||
- **Performance improvements** — Unless user-visible (e.g., startup time)
|
||||
- **Test changes** — Never document tests
|
||||
- **CI/tooling changes** — Internal infrastructure
|
||||
|
||||
---
|
||||
|
||||
## Page vs. Section Decisions
|
||||
|
||||
### Create a new page when:
|
||||
|
||||
- Introducing a **major feature** with multiple sub-features (e.g., Git integration, Vim mode)
|
||||
- The topic requires **extensive configuration examples**
|
||||
- Users would search for it **by name** (e.g., "Zed terminal", "Zed snippets")
|
||||
- It's a **new category** (e.g., a new AI provider type)
|
||||
|
||||
### Add to an existing page when:
|
||||
|
||||
- Adding a **setting** to a feature that already has a page
|
||||
- Adding a **keybinding** to an existing feature
|
||||
- The change is a **minor enhancement** to existing functionality
|
||||
- It's a **configuration option** for an existing feature
|
||||
|
||||
### Examples
|
||||
|
||||
| Change | Action |
|
||||
| ------------------------------------ | -------------------------------------- |
|
||||
| New "Stash" feature for Git | Add section to `git.md` |
|
||||
| New "Remote Development" capability | Create `remote-development.md` |
|
||||
| New setting `git.inline_blame.delay` | Add to existing Git config section |
|
||||
| New AI provider (e.g., "Ollama") | Add section to `llm-providers.md` |
|
||||
| New agent tool category | Potentially new page, depends on scope |
|
||||
|
||||
---
|
||||
|
||||
## Document Structure
|
||||
|
||||
### Frontmatter
|
||||
|
||||
Every doc page needs YAML frontmatter:
|
||||
|
||||
```yaml
|
||||
---
|
||||
title: Feature Name - Zed
|
||||
description: One sentence describing what this page covers. Used in search results.
|
||||
---
|
||||
```
|
||||
|
||||
- `title`: Feature name, optionally with "- Zed" suffix for SEO
|
||||
- `description`: Concise summary for search engines and link previews
|
||||
- Keep frontmatter values as simple single-line `key: value` entries (no
|
||||
multiline values, no quotes) for compatibility with the docs postprocessor
|
||||
|
||||
#### Frontmatter SEO Guidelines
|
||||
|
||||
- Choose one primary keyword/intent phrase for each page
|
||||
- Write unique `title` values that clearly state the page topic and target user
|
||||
intent; aim for ~50-60 characters
|
||||
- Write `description` values that summarize what the reader can do on the page;
|
||||
aim for ~140-160 characters
|
||||
- Use the primary keyword naturally in the `title` and page body at least once
|
||||
(usually in the opening paragraph); avoid keyword stuffing
|
||||
|
||||
### Section Ordering
|
||||
|
||||
1. **Title** (`# Feature Name`) — Clear, scannable
|
||||
2. **Opening paragraph** — What this is and why you'd use it (1-2 sentences)
|
||||
3. **Getting Started / Usage** — How to access or enable it
|
||||
4. **Core functionality** — Main features and workflows
|
||||
5. **Configuration** — Settings, with JSON examples
|
||||
6. **Keybindings / Actions** — Reference tables
|
||||
7. **See Also** — Links to related docs
|
||||
|
||||
### Section Depth
|
||||
|
||||
- Use `##` for main sections
|
||||
- Use `###` for subsections
|
||||
- Avoid `####` unless absolutely necessary — if you need it, consider restructuring
|
||||
|
||||
### Anchor IDs
|
||||
|
||||
Add explicit anchor IDs to sections users might link to directly:
|
||||
|
||||
```markdown
|
||||
## Getting Started {#getting-started}
|
||||
|
||||
### Configuring Models {#configuring-models}
|
||||
```
|
||||
|
||||
Use anchor IDs when:
|
||||
|
||||
- The section is a common reference target
|
||||
- You need a stable link that won't break if the heading text changes
|
||||
- The heading contains special characters that would create ugly auto-generated anchors
|
||||
|
||||
---
|
||||
|
||||
## Formatting Conventions
|
||||
|
||||
### Code Formatting
|
||||
|
||||
Use inline `code` for:
|
||||
|
||||
- Setting names: `vim_mode`, `buffer_font_size`
|
||||
- Keybindings: `cmd-shift-p`, `ctrl-w h`
|
||||
- Commands: `:w`, `:q`
|
||||
- File paths: `~/.config/zed/settings.json`
|
||||
- Action names: `git::Commit`
|
||||
- Values: `true`, `false`, `"eager"`
|
||||
|
||||
### Action and Keybinding References
|
||||
|
||||
Use Zed's special syntax for dynamic rendering:
|
||||
|
||||
- {#action git::Commit} — Renders the action name
|
||||
- {#kb git::Commit} — Renders the keybinding for that action
|
||||
|
||||
This ensures keybindings stay accurate if defaults change.
|
||||
|
||||
### JSON Examples
|
||||
|
||||
Always use the `[settings]` or `[keymap]` annotation:
|
||||
|
||||
```json [settings]
|
||||
{
|
||||
"vim_mode": true
|
||||
}
|
||||
```
|
||||
|
||||
```json [keymap]
|
||||
{
|
||||
"context": "Editor",
|
||||
"bindings": {
|
||||
"ctrl-s": "workspace::Save"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Tables
|
||||
|
||||
Use tables for:
|
||||
|
||||
- Action/keybinding reference lists
|
||||
- Setting options with descriptions
|
||||
- Feature comparisons
|
||||
|
||||
Keep tables scannable — avoid long prose in table cells.
|
||||
|
||||
### Paragraphs
|
||||
|
||||
- Keep paragraphs short (2-3 sentences max)
|
||||
- One idea per paragraph
|
||||
- Use bullet lists for multiple related items
|
||||
|
||||
### Pronouns
|
||||
|
||||
Minimize vague pronouns like "it", "this", and "that". Repeat the noun so readers know exactly what you're referring to.
|
||||
|
||||
**Bad:**
|
||||
|
||||
> The API creates a token after authentication. It should be stored securely.
|
||||
|
||||
**Good:**
|
||||
|
||||
> The API creates a token after authentication. The token should be stored securely.
|
||||
|
||||
This improves clarity for both human readers and AI systems parsing the documentation.
|
||||
|
||||
### Callouts
|
||||
|
||||
Use blockquote callouts for tips, notes, and warnings:
|
||||
|
||||
```markdown
|
||||
> **Note:** This feature requires signing in.
|
||||
|
||||
> **Tip:** Hold `cmd` when submitting to automatically follow the agent.
|
||||
|
||||
> **Warning:** This action cannot be undone.
|
||||
```
|
||||
|
||||
### Version-Specific Notes
|
||||
|
||||
When behavior differs by version, be explicit:
|
||||
|
||||
```markdown
|
||||
> **Note:** In Zed v0.224.0 and above, tool approval is controlled by `agent.tool_permissions.default`.
|
||||
```
|
||||
|
||||
Include the version number and what changed. This helps users on older versions understand why their behavior differs.
|
||||
|
||||
---
|
||||
|
||||
## Cross-Linking
|
||||
|
||||
### Internal Links
|
||||
|
||||
Link to other docs using relative paths:
|
||||
|
||||
- `[Vim mode](./vim.md)`
|
||||
- `[AI configuration](./ai/configuration.md)`
|
||||
|
||||
### External Links
|
||||
|
||||
- Link to `zed.dev` pages when appropriate
|
||||
- Link to upstream documentation (e.g., Tree-sitter, language servers) when explaining integrations
|
||||
|
||||
### "See Also" Sections
|
||||
|
||||
End pages with related links when helpful:
|
||||
|
||||
```markdown
|
||||
## See also
|
||||
|
||||
- [Agent Panel](./agent-panel.md): Agentic editing with file read/write
|
||||
- [Inline Assistant](./inline-assistant.md): Prompt-driven code transformations
|
||||
```
|
||||
|
||||
### SEO Linking Guidelines
|
||||
|
||||
- Ensure each page is reachable from at least one other docs page (no orphan
|
||||
pages)
|
||||
- For non-reference pages, include at least 3 internal links to related docs
|
||||
when possible
|
||||
- Reference pages (for example, `docs/src/reference/*`) can use fewer links when
|
||||
extra links would add noise
|
||||
- Add links to closely related docs where they help users complete the next task
|
||||
- Use descriptive link text that tells users what they will get on the linked
|
||||
page
|
||||
- For main feature pages with a matching marketing page, include a relevant
|
||||
`zed.dev` marketing link in addition to docs links
|
||||
|
||||
---
|
||||
|
||||
## Language-Specific Documentation
|
||||
|
||||
Language docs in `src/languages/` follow a consistent structure:
|
||||
|
||||
1. Language name and brief description
|
||||
2. Installation/setup (if needed)
|
||||
3. Language server configuration
|
||||
4. Formatting configuration
|
||||
5. Language-specific settings
|
||||
6. Known limitations (if any)
|
||||
|
||||
Keep language docs focused on Zed-specific configuration, not general language tutorials.
|
||||
|
||||
---
|
||||
|
||||
## Settings Documentation
|
||||
|
||||
When documenting settings:
|
||||
|
||||
1. **Show the Settings Editor (UI) approach first** — Most settings have UI support
|
||||
2. **Then show JSON** as "or add to your settings file:"
|
||||
3. **State the setting key** in code formatting
|
||||
4. **Describe what it does** in one sentence
|
||||
5. **Show the type and default** if not obvious
|
||||
6. **Provide a complete JSON example**
|
||||
|
||||
Example:
|
||||
|
||||
> Configure inline blame in Settings ({#kb zed::OpenSettings}) by searching for "inline blame", or add to your settings file:
|
||||
>
|
||||
> ```json [settings]
|
||||
> {
|
||||
> "git": {
|
||||
> "inline_blame": {
|
||||
> "enabled": false
|
||||
> }
|
||||
> }
|
||||
> }
|
||||
> ```
|
||||
|
||||
For JSON-only settings (complex types without UI support), note this and link to instructions:
|
||||
|
||||
> Add the following to your settings file ([how to edit](./configuring-zed.md#settings-files)):
|
||||
|
||||
### Settings File Locations
|
||||
|
||||
- **macOS/Linux:** `~/.config/zed/settings.json`
|
||||
- **Windows:** `%AppData%\Zed\settings.json`
|
||||
|
||||
### Keymap File Locations
|
||||
|
||||
- **macOS/Linux:** `~/.config/zed/keymap.json`
|
||||
- **Windows:** `%AppData%\Zed\keymap.json`
|
||||
|
||||
---
|
||||
|
||||
## Terminology
|
||||
|
||||
Use consistent terminology throughout:
|
||||
|
||||
| Use | Instead of |
|
||||
| --------------- | -------------------------------------- |
|
||||
| folder | directory |
|
||||
| project | workspace |
|
||||
| Settings Editor | settings UI |
|
||||
| command palette | command bar |
|
||||
| panel | sidebar (be specific: "Project Panel") |
|
||||
|
||||
---
|
||||
|
||||
## Formatting Requirements
|
||||
|
||||
All documentation must pass **Prettier** formatting (80 character line width):
|
||||
|
||||
```sh
|
||||
cd docs && npx prettier --check src/
|
||||
```
|
||||
|
||||
Before any documentation change is considered complete:
|
||||
|
||||
1. Run Prettier to format: `cd docs && npx prettier --write src/`
|
||||
2. Verify it passes: `cd docs && npx prettier --check src/`
|
||||
|
||||
---
|
||||
|
||||
## Quality Checklist
|
||||
|
||||
Before finalizing documentation:
|
||||
|
||||
- [ ] Frontmatter includes `title` and `description`
|
||||
- [ ] Page has a clear primary keyword/intent phrase
|
||||
- [ ] Primary keyword appears naturally in the page body (no keyword stuffing)
|
||||
- [ ] Opening paragraph explains what and why
|
||||
- [ ] Settings show UI first, then JSON examples
|
||||
- [ ] Actions use `{#action ...}` and `{#kb ...}` syntax
|
||||
- [ ] All actions are documented (completeness matters)
|
||||
- [ ] Anchor IDs on sections likely to be linked
|
||||
- [ ] Version callouts where behavior differs by release
|
||||
- [ ] No orphan pages (linked from somewhere)
|
||||
- [ ] Non-reference pages include at least 3 useful internal docs links
|
||||
- [ ] Main feature pages include a relevant `zed.dev` marketing link
|
||||
- [ ] Passes Prettier formatting check
|
||||
- [ ] Passes brand voice rubric (see `brand-voice/rubric.md`)
|
||||
|
||||
---
|
||||
|
||||
## Gold Standard Examples
|
||||
|
||||
See `../.doc-examples/` for curated examples of well-documented features. Use these as templates when writing new documentation.
|
||||
|
||||
---
|
||||
|
||||
## Reference
|
||||
|
||||
For automation-specific rules (safety constraints, change classification, output formats), see `docs/AGENTS.md`.
|
||||
Reference in New Issue
Block a user