From 77fb427efd8432a48e112e21ac4fddf0a7550490 Mon Sep 17 00:00:00 2001 From: Torben Nehmer Date: Fri, 16 Oct 2026 11:57:23 +0200 Subject: [PATCH] tools: export run/upload collect - Fehlertexte im Kommandovertrag nennen die Backup-Ordner und die Laufzeit-Ablehnung von Backup- und Exportdaten (#216); 10.1.0-beta.17 Files changed: - CHANGES.md - VERSION - docs/reference/commands/exports.md - docs/reference/commands/raw-material-and-uploads.md - tools/CONTRACT.md - tools/chemenu/commands/export_cmd.py - tools/chemenu/commands/upload_cmd.py Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2 --- CHANGES.md | 3 ++- VERSION | 2 +- docs/reference/commands/exports.md | 4 ++-- docs/reference/commands/raw-material-and-uploads.md | 2 +- tools/CONTRACT.md | 12 ++++++------ tools/chemenu/commands/export_cmd.py | 7 ++++--- tools/chemenu/commands/upload_cmd.py | 8 +++++--- 7 files changed, 21 insertions(+), 17 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 8bbe010..d63e80c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,7 +14,7 @@ place only: `instructions/dev/version-parts.md` § The candidate model. --- -## 10.1.0-beta.16 - 2026-10-16 - Export- und Eingangsordner dürfen im Backup-Ziel neben git/ und den Maschinenordnern liegen: die Überschneidungsregel gilt nur noch für /git und den eigenen Maschinenordner, upload collect und export run weisen Ordner in oder unter Backup-/Export-Daten fremder Maschinen zur Laufzeit ab +## 10.1.0-beta.17 - 2026-10-16 - export run/upload collect: Fehlertexte im Kommandovertrag nennen die Backup-Ordner statt backup.target und die Laufzeit-Ablehnung von Backup- und Exportdaten (#216) **Author:** Torben Nehmer @@ -38,6 +38,7 @@ place only: `instructions/dev/version-parts.md` § The candidate model. - read-page-images: liest der Harness mit Subagenten, öffnet die Ingest-Sitzung die Seitenbilder gar nicht selbst, auch nicht zur Kontrolle (#234) - wiki-ingest step 1 sends the session to read-page-images.md before the discussion, so up to the threshold the page images are no question for the user - gates.md/session-setup.md: die Regel für eine neue Session-Id steht nur noch in gates.md, mit dem ausdrücklich gewünschten weiteren Ingest-Lauf als zweiter Grenze neben plan.md (#219) +- export run/upload collect: Fehlertexte im Kommandovertrag nennen die Backup-Ordner statt backup.target und die Laufzeit-Ablehnung von Backup- und Exportdaten (#216) ### Konverter-Tests gegen echte Dokumente im privaten Repository diff --git a/VERSION b/VERSION index 3b40ccd..6889438 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -10.1.0-beta.16 +10.1.0-beta.17 diff --git a/docs/reference/commands/exports.md b/docs/reference/commands/exports.md index 43efc02..93537b9 100644 --- a/docs/reference/commands/exports.md +++ b/docs/reference/commands/exports.md @@ -130,9 +130,9 @@ tools/wikitool export run work-notes **Exit codes** - `0` - success -- `1` - No `export` section, an unknown target name, or a broken section (a predicate that does not parse, a path inside the instance or in the way of another target, an `intake` folder or the backup target) +- `1` - No `export` section, an unknown target name, or a broken section (a predicate that does not parse, a path inside the instance or in the way of another target, an `intake` folder or a folder the backup writes into: `/git` or this machine's folder) - `1` - `kb/` or `types/` has uncommitted changes, the instance is not a git checkout, or a page under `kb/` has unreadable frontmatter -- `1` - A target failed: a foreign folder, a file changed in the target, an empty selection, an unknown field, a converter that did not exit 0 +- `1` - A target failed: a foreign folder, a folder in backup data, a file changed in the target, an empty selection, an unknown field, a converter that did not exit 0 **See also** diff --git a/docs/reference/commands/raw-material-and-uploads.md b/docs/reference/commands/raw-material-and-uploads.md index 83985d6..516b178 100644 --- a/docs/reference/commands/raw-material-and-uploads.md +++ b/docs/reference/commands/raw-material-and-uploads.md @@ -548,7 +548,7 @@ tools/wikitool upload collect onedrive - `0` - success - `1` - Unknown channel name, an `mcp` channel as argument, a malformed `intake` section, or an `mcp-upload/` that still holds submissions -- `1` - A channel or a file failed (folder missing, program exited non-zero, timed out or could not be started, a source that could not be removed) +- `1` - A channel or a file failed (folder missing, a folder in backup or export data, program exited non-zero, timed out or could not be started, a source that could not be removed) **See also** diff --git a/tools/CONTRACT.md b/tools/CONTRACT.md index e221e94..1fa8a15 100644 --- a/tools/CONTRACT.md +++ b/tools/CONTRACT.md @@ -1896,12 +1896,12 @@ Pull material from the configured `folder` and `command` intake channels into th - 0 success - 1 Unknown channel name, an `mcp` channel as argument, a malformed `intake` section, or an `mcp-upload/` that still holds submissions -- 1 A channel or a file failed (folder missing, program exited non-zero, timed out or could not be started, a source that could not be removed) +- 1 A channel or a file failed (folder missing, a folder in backup or export data, program exited non-zero, timed out or could not be started, a source that could not be removed) **ON FAILURE** - Unknown channel name, an `mcp` channel as argument, a malformed `intake` section, or an `mcp-upload/` that still holds submissions -> Fix the named cause and retry once -- A channel or a file failed (folder missing, program exited non-zero, timed out or could not be started, a source that could not be removed) -> Not fixed by retrying unchanged - read the per-channel lines, fix the channel's folder or program, then run `collect ` for that channel only +- A channel or a file failed (folder missing, a folder in backup or export data, program exited non-zero, timed out or could not be started, a source that could not be removed) -> Not fixed by retrying unchanged - read the per-channel lines, fix the channel's folder or program, then run `collect ` for that channel only. A folder in backup or export data is the user's to move; never remove a manifest to make it pass **NEVER** @@ -2439,15 +2439,15 @@ Write the derived, read-only reading copy of `kb/` into the folders the `export` **EXIT STATUS** - 0 success -- 1 No `export` section, an unknown target name, or a broken section (a predicate that does not parse, a path inside the instance or in the way of another target, an `intake` folder or the backup target) +- 1 No `export` section, an unknown target name, or a broken section (a predicate that does not parse, a path inside the instance or in the way of another target, an `intake` folder or a folder the backup writes into: `/git` or this machine's folder) - 1 `kb/` or `types/` has uncommitted changes, the instance is not a git checkout, or a page under `kb/` has unreadable frontmatter -- 1 A target failed: a foreign folder, a file changed in the target, an empty selection, an unknown field, a converter that did not exit 0 +- 1 A target failed: a foreign folder, a folder in backup data, a file changed in the target, an empty selection, an unknown field, a converter that did not exit 0 **ON FAILURE** -- No `export` section, an unknown target name, or a broken section (a predicate that does not parse, a path inside the instance or in the way of another target, an `intake` folder or the backup target) -> Show the message to the user; the section is theirs to write by hand, never yours +- No `export` section, an unknown target name, or a broken section (a predicate that does not parse, a path inside the instance or in the way of another target, an `intake` folder or a folder the backup writes into: `/git` or this machine's folder) -> Show the message to the user; the section is theirs to write by hand, never yours - `kb/` or `types/` has uncommitted changes, the instance is not a git checkout, or a page under `kb/` has unreadable frontmatter -> Fix the named pages, or publish the changes first, then retry once -- A target failed: a foreign folder, a file changed in the target, an empty selection, an unknown field, a converter that did not exit 0 -> Show the target's reason to the user; the other targets were still served. Never delete or edit files in a target folder to make a run pass +- A target failed: a foreign folder, a folder in backup data, a file changed in the target, an empty selection, an unknown field, a converter that did not exit 0 -> Show the target's reason to the user; the other targets were still served. Never delete or edit files in a target folder to make a run pass **NEVER** diff --git a/tools/chemenu/commands/export_cmd.py b/tools/chemenu/commands/export_cmd.py index 7936dda..924437f 100644 --- a/tools/chemenu/commands/export_cmd.py +++ b/tools/chemenu/commands/export_cmd.py @@ -506,7 +506,8 @@ def export_guidelines_command( cli_contract.Failure( cause="No `export` section, an unknown target name, or a broken section (a predicate " "that does not parse, a path inside the instance or in the way of another target, an " - "`intake` folder or the backup target)", + "`intake` folder or a folder the backup writes into: `/git` or this " + "machine's folder)", reaction="Show the message to the user; the section is theirs to write by hand, never " "yours", ), @@ -516,8 +517,8 @@ def export_guidelines_command( reaction="Fix the named pages, or publish the changes first, then retry once", ), cli_contract.Failure( - cause="A target failed: a foreign folder, a file changed in the target, an empty " - "selection, an unknown field, a converter that did not exit 0", + cause="A target failed: a foreign folder, a folder in backup data, a file changed in " + "the target, an empty selection, an unknown field, a converter that did not exit 0", reaction="Show the target's reason to the user; the other targets were still served. " "Never delete or edit files in a target folder to make a run pass", ), diff --git a/tools/chemenu/commands/upload_cmd.py b/tools/chemenu/commands/upload_cmd.py index 43d9704..675dddc 100644 --- a/tools/chemenu/commands/upload_cmd.py +++ b/tools/chemenu/commands/upload_cmd.py @@ -341,10 +341,12 @@ def _result_lines(result: collect_module.ChannelResult) -> list[str]: reaction="Fix the named cause and retry once", ), cli_contract.Failure( - cause="A channel or a file failed (folder missing, program exited non-zero, timed out or " - "could not be started, a source that could not be removed)", + cause="A channel or a file failed (folder missing, a folder in backup or export data, " + "program exited non-zero, timed out or could not be started, a source that could not be " + "removed)", reaction="Not fixed by retrying unchanged - read the per-channel lines, fix the channel's " - "folder or program, then run `collect ` for that channel only", + "folder or program, then run `collect ` for that channel only. A folder in " + "backup or export data is the user's to move; never remove a manifest to make it pass", ), ), examples=(