tools: dist export no longer cuts the dist export record out of the shipped tools/CONTRACT.md (#121)
CI / verify (push) Successful in 1m20s
Release / release (push) Successful in 37s

Files changed:
- CHANGES.md
- VERSION
- tools/CONTRACT.md
- tools/chemenu/commands/dist_cmd.py
- tools/chemenu/tests/test_docs_verify.py
This commit is contained in:
torben committed 2026-09-26 08:00:21 +02:00
1 parent 5ffab3accf
commit 2a60f3a265
5 files changed
+28 -4

No files matched your search

+13 -1
View File
@@ -59,7 +59,7 @@ concern - readable here, never shipped as something to parse.
--- ---
## 7.1.0-beta.5 - 2026-09-26 - wikitool: usage lines name wikitool, and the -h acceptance checks become tests ## 7.1.0-beta.6 - 2026-09-26 - dist export no longer cuts the dist export record out of the shipped tools/CONTRACT.md
**Author:** Torben Nehmer **Author:** Torben Nehmer
@@ -69,6 +69,7 @@ concern - readable here, never shipped as something to parse.
**Medium impact** **Medium impact**
- CalDAV task-tracker provider (Nextcloud Tasks, iOS Reminders); review reports unknown-value findings instead of skipping them - CalDAV task-tracker provider (Nextcloud Tasks, iOS Reminders); review reports unknown-value findings instead of skipping them
- dist export no longer cuts the dist export record out of the shipped tools/CONTRACT.md
**Low impact** **Low impact**
- version bump no longer points at version release in its output - version bump no longer points at version release in its output
@@ -162,6 +163,17 @@ frame characters in help or in a usage error, the top-level index listing at lea
non-idempotent commands - had only been checked by hand; they are now pinned in non-idempotent commands - had only been checked by hand; they are now pinned in
`test_cli.py`. `test_cli.py`.
### dist export no longer cuts the dist export record out of the shipped tools/CONTRACT.md
`dist export` removes every `dist:strip-start`/`dist:strip-end` marker span from the files it
ships, and the `dist export` record's own notes quoted that marker pair literally - so the export
cut a piece out of the middle of the generated command region, and the fresh instance's own
`docs verify` then reported that region stale. CI's fresh-instance replay caught it on the first
push. The old table row carried the same quote and was mangled the same way; nothing compared the
shipped copy against its source until the region became generated. The record now names the
markers without spelling out the pair, and a new test pins that the export plan ships
`tools/CONTRACT.md` byte-identical to the working tree.
--- ---
## 7.0.0 - 2026-09-22 - Task-Tracker-Anbindung: Vorhaben als Seitenart, Verpflichtungsschicht, Weekly Review als Read-Time-Join ## 7.0.0 - 2026-09-22 - Task-Tracker-Anbindung: Vorhaben als Seitenart, Verpflichtungsschicht, Weekly Review als Read-Time-Join
+1 -1
View File
@@ -1 +1 @@
7.1.0-beta.5 7.1.0-beta.6
+1 -1
View File
@@ -1469,7 +1469,7 @@ Write a contentless, distributable copy of this repo's machinery.
**NOTES** **NOTES**
Write a contentless, distributable copy of this repo's machinery into an empty `<target>` directory: `AGENTS.md`/`README.md`/`EVALS.md` with any `<!-- dist:strip-start -->...<!-- dist:strip-end -->` region removed, `instructions/` (minus `instructions/dev/`), `types/` (the `root: kb` page type-specs and their schemas re-keyed as `.template`, the stack's own verbatim), `docs/` verbatim, `tools/` (no venv/caches), the `.github/hooks/`+`.vibe/` session-tracing config plus `.claude/settings.json`, `kb/CONTRACT.md` (no pages, no areas), the two flat anchors `raw/.gitkeep` and `incoming/.gitkeep` (both roots are flat now that a file's location under `raw/` is a date shard rather than a hand-picked type, so a fresh export no longer creates any type subdirectories under either root; `incoming/.gitkeep` is trackable and survives becoming a git repository, so a plain clone gets the directory without any bootstrap step re-creating it), `VERSION`, `USER.md.template`/`SOUL.md.template` plus `kb/CONVENTIONS.md.template` and each collection's contract re-keyed as `kb/<name>/COLLECTION.md.template` (the templates ship; the filled `USER.md`/`SOUL.md`/`kb/CONVENTIONS.md`/`kb/<name>/COLLECTION.md`/`types/<page-type>.md` never do - all of them bind their instance and none are the stack's to decide, and `find_leaks` refuses a plan carrying one), and a generated `.wikitool-release.json` stamp (version, export date, origin, and a sha256 per exported file - the base a later upgrade would compare against). The four origin options only fill stamp fields: `export` never calls git and cannot discover them. Refuses a non-empty target, and a tree with no `VERSION`. See `instructions/setup-instance.md`. One-way: there is no command that reconstructs a distributed instance into a dev instance - work on the stack in the origin repo (or a new dev instance exported from it) instead Write a contentless, distributable copy of this repo's machinery into an empty `<target>` directory: `AGENTS.md`/`README.md`/`EVALS.md` with any `dist:strip-start`...`dist:strip-end` marker region removed, `instructions/` (minus `instructions/dev/`), `types/` (the `root: kb` page type-specs and their schemas re-keyed as `.template`, the stack's own verbatim), `docs/` verbatim, `tools/` (no venv/caches), the `.github/hooks/`+`.vibe/` session-tracing config plus `.claude/settings.json`, `kb/CONTRACT.md` (no pages, no areas), the two flat anchors `raw/.gitkeep` and `incoming/.gitkeep` (both roots are flat now that a file's location under `raw/` is a date shard rather than a hand-picked type, so a fresh export no longer creates any type subdirectories under either root; `incoming/.gitkeep` is trackable and survives becoming a git repository, so a plain clone gets the directory without any bootstrap step re-creating it), `VERSION`, `USER.md.template`/`SOUL.md.template` plus `kb/CONVENTIONS.md.template` and each collection's contract re-keyed as `kb/<name>/COLLECTION.md.template` (the templates ship; the filled `USER.md`/`SOUL.md`/`kb/CONVENTIONS.md`/`kb/<name>/COLLECTION.md`/`types/<page-type>.md` never do - all of them bind their instance and none are the stack's to decide, and `find_leaks` refuses a plan carrying one), and a generated `.wikitool-release.json` stamp (version, export date, origin, and a sha256 per exported file - the base a later upgrade would compare against). The four origin options only fill stamp fields: `export` never calls git and cannot discover them. Refuses a non-empty target, and a tree with no `VERSION`. See `instructions/setup-instance.md`. One-way: there is no command that reconstructs a distributed instance into a dev instance - work on the stack in the origin repo (or a new dev instance exported from it) instead
#### `dist upgrade` #### `dist upgrade`
+1 -1
View File
@@ -585,7 +585,7 @@ def _write_plan(target: Path, plan: dict[str, PlannedFile]) -> None:
), ),
notes="Write a contentless, distributable copy of this repo's machinery into an empty " notes="Write a contentless, distributable copy of this repo's machinery into an empty "
"`<target>` directory: `AGENTS.md`/`README.md`/`EVALS.md` with any " "`<target>` directory: `AGENTS.md`/`README.md`/`EVALS.md` with any "
"`<!-- dist:strip-start -->...<!-- dist:strip-end -->` region removed, `instructions/` " "`dist:strip-start`...`dist:strip-end` marker region removed, `instructions/` "
"(minus `instructions/dev/`), `types/` (the `root: kb` page type-specs and their schemas " "(minus `instructions/dev/`), `types/` (the `root: kb` page type-specs and their schemas "
"re-keyed as `.template`, the stack's own verbatim), `docs/` verbatim, `tools/` (no " "re-keyed as `.template`, the stack's own verbatim), `docs/` verbatim, `tools/` (no "
"venv/caches), the `.github/hooks/`+`.vibe/` session-tracing config plus " "venv/caches), the `.github/hooks/`+`.vibe/` session-tracing config plus "
+12
View File
@@ -107,6 +107,18 @@ def test_the_real_commands_region_is_current():
assert docs_verify.check_commands_region() == [] assert docs_verify.check_commands_region() == []
def test_the_commands_region_survives_dist_export_unchanged():
"""`dist export` removes `dist:strip` marker spans from shipped files, so a
record whose prose quotes the literal marker pair gets cut in the
exported `tools/CONTRACT.md` - and the fresh instance's own `docs verify`
then reports its generated region stale. That is what failed CI's
fresh-instance step the first time this region shipped; this pins it
without needing the full replay."""
plan = dist_cmd.build_plan()
shipped = plan["tools/CONTRACT.md"].content
assert shipped == (config.ROOT / "tools" / "CONTRACT.md").read_text(encoding="utf-8")
def test_every_registered_commands_flags_are_documented(): def test_every_registered_commands_flags_are_documented():
"""Forward direction against the real tree and the real Click app: every """Forward direction against the real tree and the real Click app: every
non-hidden flag of every command must appear in its cli_contract non-hidden flag of every command must appear in its cli_contract