178 lines
11 KiB
Markdown
178 lines
11 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to this documentation repository, grouped into numbered revisions (`v1`, `v2`, …)
|
||
of the repository as a whole. There is no semantic version here — this repository has no manifest and
|
||
ships documents, so it uses the same `v#` scheme as the documents themselves.
|
||
|
||
Individual guideline documents carry their own `Document Version` header, and the skills carry
|
||
`metadata.version`; both are independent of the revisions below.
|
||
|
||
## v7 — 2026-09-24
|
||
|
||
### Added
|
||
- **`API/DESIGN_DOCUMENT_API.md` v2** — guidelines for any project that exposes an HTTP API,
|
||
carried in addition to the language design document. It settles what was previously left to
|
||
precedent: the URL version (`/v0`) and the product version are separate axes, the first naming a
|
||
frozen consumer contract that moves only on a breaking change, the second following semantic
|
||
versioning per release. Also fixes path naming
|
||
(`/v<n>/<CONSUMER>/<resource-in-kebab-case>`, resources spelled out and never PascalCase),
|
||
parameter and handler naming, the response envelope and its reserved paging keys, when an
|
||
endpoint may be a delta and when it must stay a full snapshot, status-code meanings (an empty
|
||
collection is `200`, not `404`), and the endpoint-level testing floor.
|
||
- `API/DESIGN_DOCUMENT_API.md` registered in `check_versions.py` and in the project-type table, so
|
||
`--sync` propagates it like every other guideline document.
|
||
- Section 2.1 was rewritten before release (v1 → v2). The v1 draft filed `/subscribe` under
|
||
endpoints that are "not part of any consumer contract" and declared the whole group free to
|
||
change with the product version. It is the opposite: the token endpoints are the widest
|
||
contract in the API, every delta consumer holds a token they issued, and the unversioned
|
||
legacy feeds are contracts too. The section now splits operational endpoints from unversioned
|
||
consumer endpoints and subjects the second group to section 1.1 — having no version to bump
|
||
is not permission to break.
|
||
- **`WEB/DESIGN_DOCUMENT_WEBAPP.md` v1** — guidelines for a server-rendered web interface driven
|
||
over a websocket (NiceGUI on FastAPI), carried in addition to `DESIGN_DOCUMENT_PYTHON.md`. Covers
|
||
layers, one connection and one lock per service, page and dialog structure, where the language
|
||
belongs, tables as the main idiom (including the slot trap), hand-written canvases, theming,
|
||
performance, errors and notifications, authentication, testing, and a checklist for a new screen.
|
||
|
||
### Changed
|
||
- **`AGENTS.md` v8 → v9** — the table mapping project types to design documents is gone. Every
|
||
`DESIGN_DOCUMENT*.md` in the project root now applies, with the suffix saying what it covers (a
|
||
language, application vs. library, or a part of the system such as `_WEBAPP`), so the list can no
|
||
longer go stale. Where two design documents disagree, the more specific one wins for what it covers.
|
||
- The `MASTERS` comment in `check_versions.py` no longer claims a design document is always named
|
||
after a language — it is named after what it scopes, which may be a cross-cutting concern.
|
||
|
||
---
|
||
|
||
## v6 — 2026-08-18
|
||
|
||
### Added
|
||
- `--sync` in `check_versions.py` — offers to overwrite the outdated copies with the master, after
|
||
listing them and asking for confirmation (`--yes` skips the prompt, `--dry-run` writes nothing).
|
||
Each file keeps the line endings it already used, so a version bump stays a one-line diff on
|
||
Windows and Linux alike, and the write goes through a backup that is restored if it fails.
|
||
A `MODIFIED` copy is never overwritten — it holds a local edit that copying would discard
|
||
- `.gitignore` at the repository root for `__pycache__/`
|
||
|
||
### Changed
|
||
- **The design documents are renamed so the language is part of the file name**:
|
||
`DESIGN_DOCUMENT.md` → `DESIGN_DOCUMENT_PYTHON.md` / `DESIGN_DOCUMENT_RUST.md`,
|
||
`DESIGN_DOCUMENT_MODULE.md` → `DESIGN_DOCUMENT_PYTHON_MODULE.md`,
|
||
`DESIGN_DOCUMENT_LIB.md` → `DESIGN_DOCUMENT_RUST_LIB.md`. Python and Rust applications used to
|
||
share one file name, which only worked because the folder here disambiguated them — and the folder
|
||
does not travel with the copy that lands in a project root. A project can now carry one design
|
||
document per language, and `check_versions.py` no longer has to guess the language from
|
||
`Cargo.toml`. Bumped: `DESIGN_DOCUMENT_PYTHON.md` v10 → v11, `DESIGN_DOCUMENT_PYTHON_MODULE.md`
|
||
v3 → v4, `DESIGN_DOCUMENT_RUST.md` v3 → v4, `DESIGN_DOCUMENT_RUST_LIB.md` v3 → v4,
|
||
`AGENTS.md` v7 → v8, `CLAUDE.md` v2 → v3
|
||
- `check_versions.py` recognises the pre-rename file names, reports them as `OLD NAME`, and renames
|
||
them during `--sync`. The `Cargo.toml` check survives only to disambiguate legacy
|
||
`DESIGN_DOCUMENT.md` copies and can be deleted once every project is migrated. A project holding
|
||
both the old and the new name is reported as `DUPLICATE` and never touched
|
||
|
||
## v5 — 2026-08-18
|
||
|
||
### Added
|
||
- `check_versions.py` — walks the sibling project directories, compares every `CLAUDE.md`,
|
||
`AGENTS.md` and `DESIGN_DOCUMENT*.md` copy against its master here, and reports the ones that are
|
||
behind or were edited in place. Standard library only; exits non-zero when anything needs
|
||
attention
|
||
- "Guideline copies in projects" section in `README.md` — the copies in project roots are now
|
||
**committed** with each project, with the rationale and the three rules that keep them from
|
||
drifting (never edit a copy, deviations go to `PROJECT.md`, sync commits stand alone)
|
||
|
||
### Changed
|
||
- `README.md` step 3 of "Starting a new project": the guideline copies are committed with the
|
||
project instead of being kept out of version control, and `Claude/CLAUDE.md` is named alongside
|
||
`AGENTS.md` and the design document
|
||
- `AGENTS.md` v6 → v7: the Git section said the opposite of the new policy — "Never commit shared
|
||
documentation" is replaced by the rule that every core document is committed, must never be edited
|
||
inside a project, and is synchronised in its own commit that stays out of the project `CHANGELOG.md`
|
||
- `CLAUDE.md` added to the list of core root documents in `AGENTS.md` and in all five design
|
||
documents, which had omitted it: `DESIGN_DOCUMENT.md` v9 → v10, `DESIGN_DOCUMENT_MODULE.md` v2 → v3,
|
||
`Rust/DESIGN_DOCUMENT.md` v2 → v3, `Rust/DESIGN_DOCUMENT_LIB.md` v2 → v3,
|
||
`DESIGN_DOCUMENT_GODOT.md` v2 → v3
|
||
- `Python/TEMPLATE.md`: the note that the shared documents are "never committed" now matches the new
|
||
policy — they stay out of the template, but the copies in a project are committed and never edited
|
||
- `Project template/CHANGELOG.md` gained a "Versioning" section: semantic versioning stays mandatory
|
||
for software projects, while documentation and other manifest-less repositories may use
|
||
single-number revisions (`v1`, `v2`, …). This repository's own changelog was converted to that
|
||
scheme and its revisions renumbered `0.1.0`–`0.4.0` → `v1`–`v4`
|
||
|
||
## v4 — 2026-08-18
|
||
|
||
### Added
|
||
- Skill versioning: every `SKILL.md` now carries `metadata.version` — `changelog` v2, `check` v1,
|
||
`commit` v2, `documentation` v1, `documentation_context` v2. The skill format has no top-level
|
||
`version` field; `metadata` is one of the six Agent Skills spec fields, so the frontmatter still
|
||
packages and uploads cleanly
|
||
- "Skills" section in `README.md` describing the versioning convention, the install location
|
||
(`~/.claude/skills/`) and the rule that the folder name — not `name:` — is the command
|
||
- The five skills listed individually in the `README.md` structure tree
|
||
- `AGENTS.md` v5 → v6: new "Commit messages" subsection under Git — commits and pull requests must
|
||
never carry AI authorship (`Co-Authored-By`, "Generated with …", tool signatures or emoji footers).
|
||
The subsection also states the single-line verbal English style, so assistants without the `commit`
|
||
skill get the same rules; the AI-authorship rule was added to the skill as well
|
||
- `CHANGELOG.md` for this repository, with history backfilled from the git log
|
||
- Explicit line length for Rust: 100 characters (rustfmt default `max_width`) in both Rust design documents
|
||
- `README.md`, `docs/`, `prebuild.py` and the PyInstaller `.spec` to the template structure in `Python/TEMPLATE.md`
|
||
- Note in `Python/TEMPLATE.md` that `AGENTS.md` and `DESIGN_DOCUMENT.md` are not part of the template
|
||
- `README.md` to the session read list in `Claude/CLAUDE.md`, plus a missing top-level heading
|
||
- `Document Version` marker in `Claude/CLAUDE.md`, starting at v2 — it is copied into projects like
|
||
`AGENTS.md` and the design documents, so it can go stale there the same way
|
||
|
||
### Changed
|
||
- Document versions bumped for the structural changes released on 2026-08-18:
|
||
`DESIGN_DOCUMENT.md` v8 → v9, `DESIGN_DOCUMENT_MODULE.md` v1 → v2,
|
||
`Rust/DESIGN_DOCUMENT.md` v1 → v2, `Rust/DESIGN_DOCUMENT_LIB.md` v1 → v2,
|
||
`DESIGN_DOCUMENT_GODOT.md` v1 → v2
|
||
- `Project template/CHANGELOG.md` now names the project manifest generically
|
||
(`pyproject.toml`, `Cargo.toml`, `project.godot`) instead of `pyproject.toml` only
|
||
- Godot debug constant renamed `Constants.DEBUG` → `Constants.DEFAULT_DEBUG`, matching the Python reference module
|
||
- `README.md` step 1 of "Starting a new project" now also requires writing a `README.md`
|
||
- `Python/TEMPLATE.md` entry point is named by purpose or tool name instead of `main.py`
|
||
- `prebuild.py` loads `.env` before importing `src.constants` instead of relying on the import side effect
|
||
|
||
### Fixed
|
||
- Skill folder `Claude/skills/context/` renamed to `documentation_context/`, with the frontmatter
|
||
`name` matched to it. The folder name is what Claude Code turns into the command, so the old
|
||
mismatch meant installing from this repository would have changed `/documentation_context`
|
||
into `/context`
|
||
- Removed the misplaced lock-file rule from the Testing sections of `DESIGN_DOCUMENT_MODULE.md` (§9)
|
||
and `Rust/DESIGN_DOCUMENT_LIB.md` (§8) — it already belongs to the Poetry / Distribution sections
|
||
|
||
## v3 — 2026-08-18
|
||
|
||
### Added
|
||
- `Zscaler/ZSCALER_CERTIFICATE.md` — full certificate setup for Node, Python, git and cargo
|
||
- Language-specific `.gitignore` files for Python, Rust and Godot, plus a shared core in `Project template/`
|
||
- `poetry.lock` and `prebuild.py` sections in `Python/DESIGN_DOCUMENT.md`
|
||
|
||
### Changed
|
||
- Unified task notation across all languages on the Todo Tree tags `TODO`, `FIXME`, `BUG`, `HACK`, `NOTE`
|
||
- `AGENTS.md` v4 → v5: rewritten as strictly language-agnostic, naming no concrete tool
|
||
- Python line length 150 → 120 characters
|
||
- Rust edition 2021 → 2024 (requires Rust 1.85 or newer)
|
||
- Godot project version key corrected to `application/config/version`
|
||
- Every design document now lists `README.md` among the core root documents
|
||
|
||
### Removed
|
||
- `Zscaler/NODE_EXTRA_CA_CERTS.md`, superseded by `ZSCALER_CERTIFICATE.md`
|
||
|
||
## v2 — 2026-06-24
|
||
|
||
### Added
|
||
- `Godot/DESIGN_DOCUMENT_GODOT.md` — Godot development guidelines (v1)
|
||
|
||
## v1 — 2026-05-25
|
||
|
||
### Added
|
||
- `Rust/DESIGN_DOCUMENT.md` and `Rust/DESIGN_DOCUMENT_LIB.md` — Rust guidelines for applications and libraries (v1)
|
||
- `Claude/` — `CLAUDE.md`, `AGENTS.md` (v4) and the custom skills `changelog`, `check`, `commit`, `context`, `documentation`
|
||
- `Python/` — `DESIGN_DOCUMENT.md` (v8), `DESIGN_DOCUMENT_MODULE.md` (v1), `TEMPLATE.md`, and the reference `constants.py` module with tests
|
||
- `Project template/` — `PROJECT.md` and `CHANGELOG.md` templates
|
||
|
||
### Changed
|
||
- Documentation organised into topic folders: `Claude/`, `Python/`, `Zscaler/`, `Project template/`
|
||
- `README.md` rewritten to describe the repository itself instead of a single project
|