# Dokumentace Personal development documentation — guidelines, conventions, and templates for my projects, structured for use with AI coding assistants. ## Purpose This repository is the single source of truth for how I develop software. AI assistants (Claude Code, Cursor, Copilot) are given these documents at the start of each session to understand my conventions before touching any code. ## Structure ``` Dokumentace/ ├── Claude/ # AI assistant configuration │ ├── CLAUDE.md # Claude Code session instructions │ ├── AGENTS.md # Language-agnostic rules for all AI assistants │ └── skills/ # Custom Claude Code skills │ ├── changelog/ # /changelog — update CHANGELOG.md │ ├── check/ # /check — run tests, investigate failures │ ├── commit/ # /commit — changelog + commit message proposal │ ├── documentation/ # /documentation — write docs/ │ └── documentation_context/ # /documentation_context — compress docs/ into CONTEXT.md │ ├── Python/ # Python development guidelines │ ├── DESIGN_DOCUMENT.md # Guidelines for Python applications │ ├── DESIGN_DOCUMENT_MODULE.md # Guidelines for Python libraries │ ├── TEMPLATE.md # New project template specification │ ├── .gitignore # Python-specific ignore rules │ ├── prebuild.py # Pre-build script (PyInstaller) │ ├── src/ # Reference constants module + version fallback │ └── tests/ # Tests for the reference module │ ├── Rust/ # Rust development guidelines │ ├── DESIGN_DOCUMENT.md # Guidelines for Rust applications │ ├── DESIGN_DOCUMENT_LIB.md # Guidelines for Rust libraries │ └── .gitignore # Rust-specific ignore rules │ ├── Godot/ # Godot development guidelines │ ├── DESIGN_DOCUMENT_GODOT.md # Guidelines for Godot projects │ └── .gitignore # Godot-specific ignore rules │ ├── Project template/ # Reusable files for new projects │ ├── CHANGELOG.md # Changelog template │ ├── PROJECT.md # Project documentation template │ └── .gitignore # Shared, language-agnostic ignore rules │ ├── Zscaler/ # Corporate network setup │ ├── ZSCALER_CERTIFICATE.md # Cert setup for Node, Python, git, cargo │ └── ZscalerRootCertificate-2048-SHA256.crt │ └── CHANGELOG.md # History of this repository ``` ## AI Coding Workflow Every project gets two rule documents, and the split between them is strict: - **AGENTS.md** — language-agnostic rules only: documentation language, dependency management, static typing, secrets, git, versioning, task notation. It names no concrete tool. - **DESIGN_DOCUMENT\*.md** — everything language-specific: package manager, formatter, linter, test framework, logging library, line length, project layout, distribution. Where the two disagree, **the design document wins**. | Project type | Design document | |--------------|-----------------| | Python (application) | `Python/DESIGN_DOCUMENT.md` | | Python (library) | `Python/DESIGN_DOCUMENT_MODULE.md` | | Rust (application) | `Rust/DESIGN_DOCUMENT.md` | | Rust (library) | `Rust/DESIGN_DOCUMENT_LIB.md` | | Godot | `Godot/DESIGN_DOCUMENT_GODOT.md` | ### Starting a new project 1. Copy `Project template/PROJECT.md` and `Project template/CHANGELOG.md` into the project root and write a `README.md` — all three are committed. 2. Build `.gitignore` from `Project template/.gitignore` plus the `.gitignore` of the matching language folder. 3. Copy `Claude/AGENTS.md` and the matching `DESIGN_DOCUMENT*.md` into the project root — these are **not** committed, they come from here. 4. For Python, follow `Python/TEMPLATE.md` to generate the project skeleton. ### Skills The skills in `Claude/skills/` are the source of truth; the copies Claude Code actually runs live in `~/.claude/skills/`. Install or refresh them by copying the whole folder across. Two rules keep the two sides from drifting apart: - **The folder name is the command.** For personal skills the frontmatter `name` is only a display label — `/documentation_context` comes from the directory, not from `name:`. Keep the two identical so renaming a folder can never silently change the command. - **Every skill carries a version** in `metadata.version`, incremented on every content change, the same way design documents carry `Document Version`: ```yaml --- name: commit description: Updates changelog and proposes a concise verbal git commit message metadata: version: v2 --- ``` There is no top-level `version:` field in the skill format. `metadata` is a free-form map that Claude Code ignores, and it is one of the six fields the [Agent Skills](https://agentskills.io) spec allows — so it also survives an upload to claude.ai or the Skills API. Any other invented key fails packaging with `Unexpected key(s) in SKILL.md frontmatter`. ## Key Conventions - **Python tooling:** Poetry · Ruff · mypy · pytest · loguru - **Rust tooling:** Cargo · rustfmt · clippy · tracing (`thiserror` / `anyhow` for errors) - **Godot tooling:** gdformat · gdlint · GUT - **No `print()` for debugging** — the language's logging library, everywhere - **Static typing required** on every parameter and return value - **Line length:** 120 characters (Python), 100 characters (Rust, rustfmt default), 100 soft limit (GDScript) - **Tests:** the framework named in the design document — pytest (Python, never `unittest`), built-in `#[test]` (Rust), GUT (Godot) - **Tasks:** single-line `TODO` / `FIXME` / `BUG` / `HACK` / `NOTE` comments in code — no checkboxes in documentation - **Versioning:** semantic, always ask before bumping, `CHANGELOG.md` updated first - **Secrets:** `.env`, never committed; libraries take configuration from the caller