Teilpaket von #140. Erledigt am 2026-10-01 mit a6d07f9 (8.0.0-beta.20) und der Doku-Korrektur danach. CI ist grün: Run 486 (verify mit Replay, pwsh mit PSScriptAnalyzer) und Run 487 (release, beim Beta-Kandidaten übersprungen).
Grundlage sind diese Entscheidungen: D2, D3, D5, D7 (2026-09-27), D11, D12, D17, D19, D26, D27 (2026-09-28), D32 (2026-09-30), D38–D41 (in #151, 2026-10-01) und E1–E6 (hier, 2026-10-01). Eingeflossen sind auch die Ergebnisse vom Windows-Zielsystem (#140 T1–T8) und die Handprüfung von #151.
Warum
Der analysierte Lauf über Weg D (#140) scheiterte an einer Anleitung, die in sich fehlerhaft war:
Schritt 3 brauchte wikitool vor dem venv.
Es fehlte, wie ein leeres Repo befüllt wird.
Es war offen, was vom Demo-Korpus stehen bleibt.
Rund 180 rm-Aufrufe standen gegen ein Budget von 60.
Dev-Skills und Demo-Persona landeten in der privaten Instanz.
Für Weg D stand ein falscher Telemetrie-Default da.
Entschieden (Betreiber):
Installiert wird nur noch über Releases (Weg A).
dist export ist ein Build-Werkzeug.
Ein Klon dieses Repos dient der Entwicklung.
Die Wege B, C und D entfallen samt upstream merge/verify.
Das ist ein Major-Bruch ohne Migration und ohne Übergang, weil keiner der Wege im Einsatz war.
Entscheidungen dieses Pakets (Betreiber, 2026-10-01)
E1 Die Installationsanweisung als Asset ist instructions/setup-instance.md selbst. Dazu kommt instructions/preflight.md als zweites Asset. Beide hängt release.yml aus dem exportierten Baum an. Eine eigene install.md gibt es nicht, sie wäre eine zweite Fassung von Schritt 0. Gitea 1.26 hat keinen festen „latest“-Download-Link (geprüft 2026-10-01). Der Installationssatz führt deshalb über …/api/v1/repos/torben/chemenu/releases/latest und browser_download_url.
E2 Download in Schritt 0: je Plattform ein Codeblock (Invoke-WebRequest … -OutFile bzw. curl -fLO), als zweite benannte Ausnahme neben D26.
E3 Neuer Befehl tools/wikitool dist adopt [<template>…]. Er übernimmt kb/*/COLLECTION.md.template und types/*.template und überschreibt nie ein vorhandenes Ziel. Er ersetzt for … cp in setup-instance.md, cp in upgrade-instance.md und die Schleife im CI-Replay.
E4 Shell-Neutralität per pytest. Die Regel steht in instructions/CONTRACT.md, der Test ist tools/chemenu/tests/test_instructions_shell.py. Ausnahmen sind D26 und E2 mit je einer Zeile pro Shell; instructions/migrations/ ist ausgenommen.
E5 Session-ID unter Copilot. Weder Copilot CLI noch der VS-Code-Agent-Modus setzt laut Doku eine Session-Variable (microsoft/vscode#311382, #265446; Copilot-CLI-Referenz; geprüft 2026-10-01). HARNESS_ENV_VARS bleibt deshalb unverändert. setup-instance.md Schritt 10 lässt die Zeile vor doctor setzen, session-setup.md begründet das. Die bash-Inline-Form entfällt; bei frischer Shell pro Aufruf wird die Zeile mit ; vorangestellt.
E6 Installiert wird direkt ins gegebene leere Verzeichnis, ohne chemenu/ (ändert D40). Erlaubt sind dort nur das Skript selbst und ein .git, ein leerer Klon des eigenen Repos ist also möglich. Entpackt wird in einen temporären Ordner im Ziel, danach wird hochgeschoben. Das Asset löscht sich selbst, wenn es im Ziel liegt. --into gilt mit derselben Regel. setup-instance.md ruft git init -b main nur auf, wenn noch kein Repo da ist; ein leerer Klon behält seinen origin.
Umgesetzt
Entfernt wurden instructions/private-instance.md, commands/upstream_cmd.py samt Tests und Records sowie alle Verweise in Code, Tests, Instruktionen und Doku. ownership.is_stack_owned bleibt. Der Abschnitt „blind spot: upstream merge“ in gates.md ist weg. Das Publish-Remote-Gate bleibt, nur seine Begründung ist neu gefasst. Das 3.0.0-Migrationsdokument datiert seinen Verweis in Worten.
INSTALL.md beschreibt genau einen Weg: Voraussetzungen (Windows mit pwsh 7, RemoteSigned, Git for Windows, höchstens 95 Zeichen, LongPathsEnabled nur als Alternative), den Satz für den Agenten, seine Fragen und jeden Stoppfall des Preflights in beiden Modi. Eine nummerierte Schrittfolge gibt es nicht. Die generierte Voraussetzungs-Region bleibt bei #154.
DEVELOPMENT.md bekommt den Abschnitt Entwicklungsumgebung: Klon, Demo-Korpus und -Persona, Telemetrie an, dist export als Build- und Testwerkzeug, Release-Feed in einem privaten Repo. Neu dazu kommt instructions/dev/dev-setup.md, nicht ausgeliefert und von stack-dev und AGENTS.md (Strip-Block) erreichbar.
setup-instance.md beginnt mit Schritt 0, der über das Release-Asset installiert (preflight.md lesen, laden, mit Bypass starten). Ab Schritt 1 geht es wie bisher weiter; die Schritte sind neu nummeriert.
Release-Assets:release.yml hängt setup-instance.md und preflight.md neben Tarball, .sha256 und den beiden Preflight-Skripten an.
Shell-neutral: angepasst sind setup-instance.md, session-setup.md, upgrade-instance.md, ingest-large-tree.md und mcp-read-server.md (Variablentabellen, zwei git-Zeilen, -m pip), außerdem der Hinweis, den work new ausgibt.
bootstrap.md gilt jetzt für einen weiteren Checkout einer bestehenden Instanz (D11).
upgrade-instance.md ist an Instanzen nur aus Releases angepasst. Der Klon-Weg ist entfernt. Der Offline-Weg verlässt sich auf die .sha256-Prüfung, die dist upgrade selbst macht. Für fehlende Templates gibt es dist adopt.
Doku-Pull-Through:README.md (Getting started), EVALS.md (Telemetrie-Default), tools/README.md, tools/CONTRACT.md (neu generiert), AGENTS.md § Bootstrap, die Liste der docs-Seiten und der Strip-Block für Entwickler. docs/ownership-and-templates.md hat den neuen Abschnitt „Why an instance comes only from a release“.
Nebenbei behoben: Unter bash zeigte der Asset-Modus beim zu langen Ordner C:\\Chemenu mit doppeltem Backslash.
Akzeptanzkriterien
In ausgelieferten Dateien steht upstream merge/upstream verify/private-instance nur noch als Rückblick: im 3.0.0-Migrationsdokument, außerdem in der Begründung unter docs/ und in einem Code-Kommentar in ownership.py. Die Abweichung vom Wortlaut ist bewusst, weil die Begründung ohne den Namen nicht trägt. Geprüft per grep über einen dist export; docs verify ist grün.
tools/wikitool upstream existiert nicht mehr; tools/wikitool -h | grep -c upstream gibt 0.
INSTALL.md enthält genau einen Weg und keine nummerierte Schrittfolge; DEVELOPMENT.md beschreibt Klon und dist export.
INSTALL.md nennt jeden Stoppfall des Preflights im Baum- und im Asset-Modus sowie die 95-Zeichen-Grenze.
instructions/dev/dev-setup.md existiert und fehlt im dist export-Baum (geprüft).
Codeblöcke ausgelieferter Instruktionen enthalten kein Heredoc, export, $(, sha256sum, curl oder tar und kein Inline-Env, && oder cp; Ausnahmen sind nur D26 und E2. Das prüft test_instructions_shell.py.
dist adopt übernimmt die Templates vollständig und überschreibt nie ein vorhandenes Ziel. Tests stehen in test_dist_cmd.py.
Der Asset-Modus installiert in ein leeres Verzeichnis oder eines mit nur .git. Ein anderes verweigert er mit Exit 1, ohne etwas zu ändern, und er hinterlässt keine Kopie von sich. Tests gibt es für sh und pwsh.
Ein Release-Lauf hängt setup-instance.md und preflight.md an. release.yml ist geändert und vom Workflow-Test abgedeckt. Am echten Release beobachtet ist das noch nicht: Das nächste Release ohne Suffix gehört zum Nachlauf in #140.
Das CI-Replay läuft gegen einen lokal gebauten Tarball über das Preflight-Skript mit --archive grün (Run 486), lokal auch in einen leeren Klon.
Installationssatz und setup-instance.md führen zu preflight.md, bevor der Preflight startet. Jeder pwsh-Aufruf des Preflights in ausgelieferten Dateien trägt den Bypass; das prüft test_instructions_shell.py.
Die session-id-Warnung unter Copilot ist bewusst beschrieben (E5). Ob sie nach der Einrichtung tatsächlich verschwindet, zeigt die Handprüfung im Nachlauf von #140.
Der Major-Bump trägt --breaking (entfernte Wege, upstream merge/verify, neues Ziel des Assets) und --no-migration; docs verify ist grün.
docs verify, instructions verify und lint sind grün.
Lokaler Replay in einen leeren Klon: doctor ohne FAIL, 15 Templates per dist adopt.
CI Run 486 (verify, pwsh mit PSScriptAnalyzer) und Run 487 sind grün.
Offen an anderer Stelle
#154 (Doku-Kopplung, generierte Voraussetzungs-Region) baut hierauf auf.
Der Asset-Weg am echten Release und Copilots session-id nach der Einrichtung gehören in den Nachlauf von #140.
Der Nebenbefund python3 in bug-report.md liegt in #166.
Teilpaket von #140. **Erledigt am 2026-10-01** mit `a6d07f9` (8.0.0-beta.20) und der Doku-Korrektur danach. CI ist grün: Run 486 (`verify` mit Replay, `pwsh` mit PSScriptAnalyzer) und Run 487 (`release`, beim Beta-Kandidaten übersprungen).
Grundlage sind diese Entscheidungen: D2, D3, D5, D7 (2026-09-27), D11, D12, D17, D19, D26, D27 (2026-09-28), D32 (2026-09-30), D38–D41 (in #151, 2026-10-01) und E1–E6 (hier, 2026-10-01). Eingeflossen sind auch die Ergebnisse vom Windows-Zielsystem (#140 T1–T8) und die Handprüfung von #151.
## Warum
Der analysierte Lauf über Weg D (#140) scheiterte an einer Anleitung, die in sich fehlerhaft war:
- Schritt 3 brauchte `wikitool` vor dem venv.
- Es fehlte, wie ein leeres Repo befüllt wird.
- Es war offen, was vom Demo-Korpus stehen bleibt.
- Rund 180 `rm`-Aufrufe standen gegen ein Budget von 60.
- Dev-Skills und Demo-Persona landeten in der privaten Instanz.
- Für Weg D stand ein falscher Telemetrie-Default da.
Entschieden (Betreiber):
- Installiert wird nur noch über Releases (Weg A).
- `dist export` ist ein Build-Werkzeug.
- Ein Klon dieses Repos dient der Entwicklung.
- Die Wege B, C und D entfallen samt `upstream merge/verify`.
- Das ist ein Major-Bruch ohne Migration und ohne Übergang, weil keiner der Wege im Einsatz war.
## Entscheidungen dieses Pakets (Betreiber, 2026-10-01)
- **E1 Die Installationsanweisung als Asset ist `instructions/setup-instance.md` selbst.** Dazu kommt `instructions/preflight.md` als zweites Asset. Beide hängt `release.yml` aus dem exportierten Baum an. Eine eigene `install.md` gibt es nicht, sie wäre eine zweite Fassung von Schritt 0. Gitea 1.26 hat keinen festen „latest“-Download-Link (geprüft 2026-10-01). Der Installationssatz führt deshalb über `…/api/v1/repos/torben/chemenu/releases/latest` und `browser_download_url`.
- **E2 Download in Schritt 0:** je Plattform ein Codeblock (`Invoke-WebRequest … -OutFile` bzw. `curl -fLO`), als zweite benannte Ausnahme neben D26.
- **E3 Neuer Befehl `tools/wikitool dist adopt [<template>…]`.** Er übernimmt `kb/*/COLLECTION.md.template` und `types/*.template` und überschreibt nie ein vorhandenes Ziel. Er ersetzt `for … cp` in `setup-instance.md`, `cp` in `upgrade-instance.md` und die Schleife im CI-Replay.
- **E4 Shell-Neutralität per pytest.** Die Regel steht in `instructions/CONTRACT.md`, der Test ist `tools/chemenu/tests/test_instructions_shell.py`. Ausnahmen sind D26 und E2 mit je einer Zeile pro Shell; `instructions/migrations/` ist ausgenommen.
- **E5 Session-ID unter Copilot.** Weder Copilot CLI noch der VS-Code-Agent-Modus setzt laut Doku eine Session-Variable (microsoft/vscode#311382, #265446; Copilot-CLI-Referenz; geprüft 2026-10-01). `HARNESS_ENV_VARS` bleibt deshalb unverändert. `setup-instance.md` Schritt 10 lässt die Zeile vor `doctor` setzen, `session-setup.md` begründet das. Die bash-Inline-Form entfällt; bei frischer Shell pro Aufruf wird die Zeile mit `;` vorangestellt.
- **E6 Installiert wird direkt ins gegebene leere Verzeichnis, ohne `chemenu/`** (ändert D40). Erlaubt sind dort nur das Skript selbst und ein `.git`, ein leerer Klon des eigenen Repos ist also möglich. Entpackt wird in einen temporären Ordner im Ziel, danach wird hochgeschoben. Das Asset löscht sich selbst, wenn es im Ziel liegt. `--into` gilt mit derselben Regel. `setup-instance.md` ruft `git init -b main` nur auf, wenn noch kein Repo da ist; ein leerer Klon behält seinen `origin`.
## Umgesetzt
1. **Entfernt** wurden `instructions/private-instance.md`, `commands/upstream_cmd.py` samt Tests und Records sowie alle Verweise in Code, Tests, Instruktionen und Doku. `ownership.is_stack_owned` bleibt. Der Abschnitt „blind spot: `upstream merge`“ in `gates.md` ist weg. Das Publish-Remote-Gate bleibt, nur seine Begründung ist neu gefasst. Das 3.0.0-Migrationsdokument datiert seinen Verweis in Worten.
2. **`INSTALL.md`** beschreibt genau einen Weg: Voraussetzungen (Windows mit pwsh 7, `RemoteSigned`, Git for Windows, höchstens 95 Zeichen, `LongPathsEnabled` nur als Alternative), den Satz für den Agenten, seine Fragen und jeden Stoppfall des Preflights in beiden Modi. Eine nummerierte Schrittfolge gibt es nicht. Die generierte Voraussetzungs-Region bleibt bei #154.
3. **`DEVELOPMENT.md`** bekommt den Abschnitt Entwicklungsumgebung: Klon, Demo-Korpus und -Persona, Telemetrie an, `dist export` als Build- und Testwerkzeug, Release-Feed in einem privaten Repo. Neu dazu kommt `instructions/dev/dev-setup.md`, nicht ausgeliefert und von `stack-dev` und `AGENTS.md` (Strip-Block) erreichbar.
4. **`setup-instance.md`** beginnt mit Schritt 0, der über das Release-Asset installiert (`preflight.md` lesen, laden, mit Bypass starten). Ab Schritt 1 geht es wie bisher weiter; die Schritte sind neu nummeriert.
5. **Release-Assets:** `release.yml` hängt `setup-instance.md` und `preflight.md` neben Tarball, `.sha256` und den beiden Preflight-Skripten an.
6. **Shell-neutral:** angepasst sind `setup-instance.md`, `session-setup.md`, `upgrade-instance.md`, `ingest-large-tree.md` und `mcp-read-server.md` (Variablentabellen, zwei `git`-Zeilen, `-m pip`), außerdem der Hinweis, den `work new` ausgibt.
7. **`bootstrap.md`** gilt jetzt für einen weiteren Checkout einer bestehenden Instanz (D11).
8. **`upgrade-instance.md`** ist an Instanzen nur aus Releases angepasst. Der Klon-Weg ist entfernt. Der Offline-Weg verlässt sich auf die `.sha256`-Prüfung, die `dist upgrade` selbst macht. Für fehlende Templates gibt es `dist adopt`.
9. **Doku-Pull-Through:** `README.md` (Getting started), `EVALS.md` (Telemetrie-Default), `tools/README.md`, `tools/CONTRACT.md` (neu generiert), `AGENTS.md` § Bootstrap, die Liste der docs-Seiten und der Strip-Block für Entwickler. `docs/ownership-and-templates.md` hat den neuen Abschnitt „Why an instance comes only from a release“.
10. **Nebenbei behoben:** Unter bash zeigte der Asset-Modus beim zu langen Ordner `C:\\Chemenu` mit doppeltem Backslash.
## Akzeptanzkriterien
- [x] In ausgelieferten Dateien steht `upstream merge`/`upstream verify`/`private-instance` nur noch als Rückblick: im 3.0.0-Migrationsdokument, **außerdem in der Begründung unter `docs/` und in einem Code-Kommentar in `ownership.py`**. Die Abweichung vom Wortlaut ist bewusst, weil die Begründung ohne den Namen nicht trägt. Geprüft per `grep` über einen `dist export`; `docs verify` ist grün.
- [x] `tools/wikitool upstream` existiert nicht mehr; `tools/wikitool -h | grep -c upstream` gibt 0.
- [x] `INSTALL.md` enthält genau einen Weg und keine nummerierte Schrittfolge; `DEVELOPMENT.md` beschreibt Klon und `dist export`.
- [x] `INSTALL.md` nennt jeden Stoppfall des Preflights im Baum- und im Asset-Modus sowie die 95-Zeichen-Grenze.
- [x] `instructions/dev/dev-setup.md` existiert und fehlt im `dist export`-Baum (geprüft).
- [x] Codeblöcke ausgelieferter Instruktionen enthalten kein Heredoc, `export`, `$(`, `sha256sum`, `curl` oder `tar` und kein Inline-Env, `&&` oder `cp`; Ausnahmen sind nur D26 und E2. Das prüft `test_instructions_shell.py`.
- [x] `dist adopt` übernimmt die Templates vollständig und überschreibt nie ein vorhandenes Ziel. Tests stehen in `test_dist_cmd.py`.
- [x] Der Asset-Modus installiert in ein leeres Verzeichnis oder eines mit nur `.git`. Ein anderes verweigert er mit Exit 1, ohne etwas zu ändern, und er hinterlässt keine Kopie von sich. Tests gibt es für sh und pwsh.
- [x] Ein Release-Lauf hängt `setup-instance.md` und `preflight.md` an. `release.yml` ist geändert und vom Workflow-Test abgedeckt. Am echten Release beobachtet ist das noch nicht: Das nächste Release ohne Suffix gehört zum Nachlauf in #140.
- [x] Das CI-Replay läuft gegen einen lokal gebauten Tarball über das Preflight-Skript mit `--archive` grün (Run 486), lokal auch in einen leeren Klon.
- [x] Installationssatz und `setup-instance.md` führen zu `preflight.md`, bevor der Preflight startet. Jeder pwsh-Aufruf des Preflights in ausgelieferten Dateien trägt den Bypass; das prüft `test_instructions_shell.py`.
- [x] Die `session-id`-Warnung unter Copilot ist bewusst beschrieben (E5). Ob sie nach der Einrichtung tatsächlich verschwindet, zeigt die Handprüfung im Nachlauf von #140.
- [x] Der Major-Bump trägt `--breaking` (entfernte Wege, `upstream merge/verify`, neues Ziel des Assets) und `--no-migration`; `docs verify` ist grün.
## Geprüft
- pytest: 2000 Tests bestanden, 3 übersprungen, Coverage 90,6 % (Untergrenze 85 %).
- `docs verify`, `instructions verify` und `lint` sind grün.
- Lokaler Replay in einen leeren Klon: `doctor` ohne FAIL, 15 Templates per `dist adopt`.
- CI Run 486 (verify, pwsh mit PSScriptAnalyzer) und Run 487 sind grün.
## Offen an anderer Stelle
- #154 (Doku-Kopplung, generierte Voraussetzungs-Region) baut hierauf auf.
- Der Asset-Weg am echten Release und Copilots `session-id` nach der Einrichtung gehören in den Nachlauf von #140.
- Der Nebenbefund `python3` in `bug-report.md` liegt in #166.
Release-Assets: Der Agent lädt sie ohne Browser, damit keine Markierung entsteht (T7).
Neues Kriterium zu Stoppfällen und Ordner.
#161 ist erledigt; die Abhängigkeit darauf ist aufgelöst.
Version: Der Kandidat ist schon 8.0.0-beta.x.
**Changelog:** Ergebnisse vom Windows-Zielsystem (#140, 2026-09-30) in Punkt 2 und 5 eingearbeitet.
- **Windows-Voraussetzungen** in `INSTALL.md` bestätigt: pwsh 7.6.6, `RemoteSigned`, Git Bash für Claude Code.
- **Neu: kurzer Installationsordner** (T8, Grenze nach D32).
- **Stoppfälle** werden aus #151 übernommen.
- **Release-Assets:** Der Agent lädt sie ohne Browser, damit keine Markierung entsteht (T7).
- **Neues Kriterium** zu Stoppfällen und Ordner.
- **#161** ist erledigt; die Abhängigkeit darauf ist aufgelöst.
- **Version:** Der Kandidat ist schon 8.0.0-beta.x.
Changelog: D32 entschieden (2026-09-30). INSTALL.md nennt jetzt eine konkrete Grenze: Der Installationsordner hat höchstens 95 Zeichen. Das Kriterium ist entsprechend geschärft.
**Changelog:** D32 entschieden (2026-09-30). `INSTALL.md` nennt jetzt eine konkrete Grenze: Der Installationsordner hat höchstens 95 Zeichen. Das Kriterium ist entsprechend geschärft.
Zu Punkt 5: Das Anhängen von preflight.sh und preflight.ps1 an das Release übernimmt #151 Abschnitt C (D38, entschieden 2026-10-01). Das Skript bekommt dabei die URLs von Tarball und .sha256 desselben Releases eingetragen (D39). Hier bleibt die Installationsanweisung als Asset. Der Installationssatz aus D5 muss den Agenten das Preflight-Asset des neuesten Releases laden lassen, etwa über browser_download_url aus …/api/v1/repos/torben/chemenu/releases/latest. Das Skript selbst fragt den Feed nicht ab.
Zu Punkt 5: Das Anhängen von `preflight.sh` und `preflight.ps1` an das Release übernimmt #151 Abschnitt C (D38, entschieden 2026-10-01). Das Skript bekommt dabei die URLs von Tarball und `.sha256` desselben Releases eingetragen (D39). Hier bleibt die Installationsanweisung als Asset. Der Installationssatz aus D5 muss den Agenten das Preflight-Asset des neuesten Releases laden lassen, etwa über `browser_download_url` aus `…/api/v1/repos/torben/chemenu/releases/latest`. Das Skript selbst fragt den Feed nicht ab.
Changelog: Stand nach #151 Abschnitt C und dessen Handprüfung (2026-10-01).
Punkt 4: Schritt 0 ist jetzt das Preflight-Asset. Es lädt das Release, prüft die sha256, entpackt nach chemenu/ und startet den Baum-Preflight. Das CI-Replay nutzt --archive.
Punkt 5: Das Anhängen der Preflight-Skripte ist durch #151 erledigt (D38/D39). Hier bleiben die Installationsanweisung als Asset und der Installationssatz, der das neueste Preflight-Asset lädt.
Punkt 2: Die Stoppfälle sind um den Asset-Modus und venv/pip ergänzt.
Neu, Punkt 10, mit zwei Kriterien: Befunde aus der Handprüfung:
Copilot hat den Preflight ohne Bypass-Präfix gestartet und den Anleitungsblock übersetzt statt darunter.
doctor warnt session-id unter Copilot.
Abhängigkeiten:#151 ist im Code fertig, das Paket also startbar. #164 betrifft den Nachlauf, nicht dieses Paket.
**Changelog:** Stand nach #151 Abschnitt C und dessen Handprüfung (2026-10-01).
- **Punkt 4:** Schritt 0 ist jetzt das Preflight-Asset. Es lädt das Release, prüft die sha256, entpackt nach `chemenu/` und startet den Baum-Preflight. Das CI-Replay nutzt `--archive`.
- **Punkt 5:** Das Anhängen der Preflight-Skripte ist durch #151 erledigt (D38/D39). Hier bleiben die Installationsanweisung als Asset und der Installationssatz, der das neueste Preflight-Asset lädt.
- **Punkt 2:** Die Stoppfälle sind um den Asset-Modus und venv/pip ergänzt.
- **Neu, Punkt 10, mit zwei Kriterien:** Befunde aus der Handprüfung:
- Copilot hat den Preflight ohne Bypass-Präfix gestartet und den Anleitungsblock übersetzt statt darunter.
- `doctor` warnt `session-id` unter Copilot.
- **Abhängigkeiten:** #151 ist im Code fertig, das Paket also startbar. #164 betrifft den Nachlauf, nicht dieses Paket.
Neu: Abschnitt „Entscheidungen dieses Pakets“ mit E1–E6. E6 (direkt ins leere Verzeichnis, kein chemenu/) ändert D40.
Umfang: Liste der betroffenen Dateien auf d0f08d1 aktualisiert; Punkt 6 nennt die konkreten Instruktionen.
Kriterien: neue für dist adopt (E3) und das Ziel des Asset-Modus (E6). Das Shell-Kriterium ist auf Codeblöcke ohne Migrationsdokumente eingegrenzt (E4).
Neu: Nebenbefund python3 in bug-report.md, der in ein eigenes Issue gehört.
**Changelog:** Design abgeschlossen (2026-10-01).
- **Neu:** Abschnitt „Entscheidungen dieses Pakets“ mit E1–E6. E6 (direkt ins leere Verzeichnis, kein `chemenu/`) ändert D40.
- **Umfang:** Liste der betroffenen Dateien auf `d0f08d1` aktualisiert; Punkt 6 nennt die konkreten Instruktionen.
- **Kriterien:** neue für `dist adopt` (E3) und das Ziel des Asset-Modus (E6). Das Shell-Kriterium ist auf Codeblöcke ohne Migrationsdokumente eingegrenzt (E4).
- **Neu:** Nebenbefund `python3` in `bug-report.md`, der in ein eigenes Issue gehört.
Changelog: Geschlossen (2026-10-01, a6d07f9, 8.0.0-beta.20; CI Run 486 und 487 grün).
Body: auf den Endstand gebracht; der Umfang steht jetzt als „Umgesetzt“.
Kriterien: alle abgehakt. Beim ersten gibt es eine bewusste Abweichung, weil docs/ und ein Code-Kommentar den Namen upstream merge als Rückblick behalten.
Nachlauf von #140: zwei Prüfungen sind dorthin verschoben, der Asset-Weg am echten Release und die Copilot-session-id.
**Changelog:** Geschlossen (2026-10-01, `a6d07f9`, 8.0.0-beta.20; CI Run 486 und 487 grün).
- **Body:** auf den Endstand gebracht; der Umfang steht jetzt als „Umgesetzt“.
- **Kriterien:** alle abgehakt. Beim ersten gibt es eine bewusste Abweichung, weil `docs/` und ein Code-Kommentar den Namen `upstream merge` als Rückblick behalten.
- **Nachlauf von #140:** zwei Prüfungen sind dorthin verschoben, der Asset-Weg am echten Release und die Copilot-`session-id`.
- **Nebenbefund:** liegt als #166 vor.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Teilpaket von #140. Erledigt am 2026-10-01 mit
a6d07f9(8.0.0-beta.20) und der Doku-Korrektur danach. CI ist grün: Run 486 (verifymit Replay,pwshmit PSScriptAnalyzer) und Run 487 (release, beim Beta-Kandidaten übersprungen).Grundlage sind diese Entscheidungen: D2, D3, D5, D7 (2026-09-27), D11, D12, D17, D19, D26, D27 (2026-09-28), D32 (2026-09-30), D38–D41 (in #151, 2026-10-01) und E1–E6 (hier, 2026-10-01). Eingeflossen sind auch die Ergebnisse vom Windows-Zielsystem (#140 T1–T8) und die Handprüfung von #151.
Warum
Der analysierte Lauf über Weg D (#140) scheiterte an einer Anleitung, die in sich fehlerhaft war:
wikitoolvor dem venv.rm-Aufrufe standen gegen ein Budget von 60.Entschieden (Betreiber):
dist exportist ein Build-Werkzeug.upstream merge/verify.Entscheidungen dieses Pakets (Betreiber, 2026-10-01)
instructions/setup-instance.mdselbst. Dazu kommtinstructions/preflight.mdals zweites Asset. Beide hängtrelease.ymlaus dem exportierten Baum an. Eine eigeneinstall.mdgibt es nicht, sie wäre eine zweite Fassung von Schritt 0. Gitea 1.26 hat keinen festen „latest“-Download-Link (geprüft 2026-10-01). Der Installationssatz führt deshalb über…/api/v1/repos/torben/chemenu/releases/latestundbrowser_download_url.Invoke-WebRequest … -OutFilebzw.curl -fLO), als zweite benannte Ausnahme neben D26.tools/wikitool dist adopt [<template>…]. Er übernimmtkb/*/COLLECTION.md.templateundtypes/*.templateund überschreibt nie ein vorhandenes Ziel. Er ersetztfor … cpinsetup-instance.md,cpinupgrade-instance.mdund die Schleife im CI-Replay.instructions/CONTRACT.md, der Test isttools/chemenu/tests/test_instructions_shell.py. Ausnahmen sind D26 und E2 mit je einer Zeile pro Shell;instructions/migrations/ist ausgenommen.HARNESS_ENV_VARSbleibt deshalb unverändert.setup-instance.mdSchritt 10 lässt die Zeile vordoctorsetzen,session-setup.mdbegründet das. Die bash-Inline-Form entfällt; bei frischer Shell pro Aufruf wird die Zeile mit;vorangestellt.chemenu/(ändert D40). Erlaubt sind dort nur das Skript selbst und ein.git, ein leerer Klon des eigenen Repos ist also möglich. Entpackt wird in einen temporären Ordner im Ziel, danach wird hochgeschoben. Das Asset löscht sich selbst, wenn es im Ziel liegt.--intogilt mit derselben Regel.setup-instance.mdruftgit init -b mainnur auf, wenn noch kein Repo da ist; ein leerer Klon behält seinenorigin.Umgesetzt
instructions/private-instance.md,commands/upstream_cmd.pysamt Tests und Records sowie alle Verweise in Code, Tests, Instruktionen und Doku.ownership.is_stack_ownedbleibt. Der Abschnitt „blind spot:upstream merge“ ingates.mdist weg. Das Publish-Remote-Gate bleibt, nur seine Begründung ist neu gefasst. Das 3.0.0-Migrationsdokument datiert seinen Verweis in Worten.INSTALL.mdbeschreibt genau einen Weg: Voraussetzungen (Windows mit pwsh 7,RemoteSigned, Git for Windows, höchstens 95 Zeichen,LongPathsEnablednur als Alternative), den Satz für den Agenten, seine Fragen und jeden Stoppfall des Preflights in beiden Modi. Eine nummerierte Schrittfolge gibt es nicht. Die generierte Voraussetzungs-Region bleibt bei #154.DEVELOPMENT.mdbekommt den Abschnitt Entwicklungsumgebung: Klon, Demo-Korpus und -Persona, Telemetrie an,dist exportals Build- und Testwerkzeug, Release-Feed in einem privaten Repo. Neu dazu kommtinstructions/dev/dev-setup.md, nicht ausgeliefert und vonstack-devundAGENTS.md(Strip-Block) erreichbar.setup-instance.mdbeginnt mit Schritt 0, der über das Release-Asset installiert (preflight.mdlesen, laden, mit Bypass starten). Ab Schritt 1 geht es wie bisher weiter; die Schritte sind neu nummeriert.release.ymlhängtsetup-instance.mdundpreflight.mdneben Tarball,.sha256und den beiden Preflight-Skripten an.setup-instance.md,session-setup.md,upgrade-instance.md,ingest-large-tree.mdundmcp-read-server.md(Variablentabellen, zweigit-Zeilen,-m pip), außerdem der Hinweis, denwork newausgibt.bootstrap.mdgilt jetzt für einen weiteren Checkout einer bestehenden Instanz (D11).upgrade-instance.mdist an Instanzen nur aus Releases angepasst. Der Klon-Weg ist entfernt. Der Offline-Weg verlässt sich auf die.sha256-Prüfung, diedist upgradeselbst macht. Für fehlende Templates gibt esdist adopt.README.md(Getting started),EVALS.md(Telemetrie-Default),tools/README.md,tools/CONTRACT.md(neu generiert),AGENTS.md§ Bootstrap, die Liste der docs-Seiten und der Strip-Block für Entwickler.docs/ownership-and-templates.mdhat den neuen Abschnitt „Why an instance comes only from a release“.C:\\Chemenumit doppeltem Backslash.Akzeptanzkriterien
upstream merge/upstream verify/private-instancenur noch als Rückblick: im 3.0.0-Migrationsdokument, außerdem in der Begründung unterdocs/und in einem Code-Kommentar inownership.py. Die Abweichung vom Wortlaut ist bewusst, weil die Begründung ohne den Namen nicht trägt. Geprüft pergrepüber einendist export;docs verifyist grün.tools/wikitool upstreamexistiert nicht mehr;tools/wikitool -h | grep -c upstreamgibt 0.INSTALL.mdenthält genau einen Weg und keine nummerierte Schrittfolge;DEVELOPMENT.mdbeschreibt Klon unddist export.INSTALL.mdnennt jeden Stoppfall des Preflights im Baum- und im Asset-Modus sowie die 95-Zeichen-Grenze.instructions/dev/dev-setup.mdexistiert und fehlt imdist export-Baum (geprüft).export,$(,sha256sum,curlodertarund kein Inline-Env,&&odercp; Ausnahmen sind nur D26 und E2. Das prüfttest_instructions_shell.py.dist adoptübernimmt die Templates vollständig und überschreibt nie ein vorhandenes Ziel. Tests stehen intest_dist_cmd.py..git. Ein anderes verweigert er mit Exit 1, ohne etwas zu ändern, und er hinterlässt keine Kopie von sich. Tests gibt es für sh und pwsh.setup-instance.mdundpreflight.mdan.release.ymlist geändert und vom Workflow-Test abgedeckt. Am echten Release beobachtet ist das noch nicht: Das nächste Release ohne Suffix gehört zum Nachlauf in #140.--archivegrün (Run 486), lokal auch in einen leeren Klon.setup-instance.mdführen zupreflight.md, bevor der Preflight startet. Jeder pwsh-Aufruf des Preflights in ausgelieferten Dateien trägt den Bypass; das prüfttest_instructions_shell.py.session-id-Warnung unter Copilot ist bewusst beschrieben (E5). Ob sie nach der Einrichtung tatsächlich verschwindet, zeigt die Handprüfung im Nachlauf von #140.--breaking(entfernte Wege,upstream merge/verify, neues Ziel des Assets) und--no-migration;docs verifyist grün.Geprüft
docs verify,instructions verifyundlintsind grün.doctorohne FAIL, 15 Templates perdist adopt.Offen an anderer Stelle
session-idnach der Einrichtung gehören in den Nachlauf von #140.python3inbug-report.mdliegt in #166.Changelog:
kind/decision→kind/build.dist upgrade --latest(#161).INSTALL.mdbeschreibt jeden Stoppfall des Preflights.torben referenced this issue2026-09-30 04:48:11 +00:00
Changelog: Ergebnisse vom Windows-Zielsystem (#140, 2026-09-30) in Punkt 2 und 5 eingearbeitet.
INSTALL.mdbestätigt: pwsh 7.6.6,RemoteSigned, Git Bash für Claude Code.Changelog: D32 entschieden (2026-09-30).
INSTALL.mdnennt jetzt eine konkrete Grenze: Der Installationsordner hat höchstens 95 Zeichen. Das Kriterium ist entsprechend geschärft.Zu Punkt 5: Das Anhängen von
preflight.shundpreflight.ps1an das Release übernimmt #151 Abschnitt C (D38, entschieden 2026-10-01). Das Skript bekommt dabei die URLs von Tarball und.sha256desselben Releases eingetragen (D39). Hier bleibt die Installationsanweisung als Asset. Der Installationssatz aus D5 muss den Agenten das Preflight-Asset des neuesten Releases laden lassen, etwa überbrowser_download_urlaus…/api/v1/repos/torben/chemenu/releases/latest. Das Skript selbst fragt den Feed nicht ab.Changelog: Stand nach #151 Abschnitt C und dessen Handprüfung (2026-10-01).
chemenu/und startet den Baum-Preflight. Das CI-Replay nutzt--archive.doctorwarntsession-idunter Copilot.Changelog: Design abgeschlossen (2026-10-01).
chemenu/) ändert D40.d0f08d1aktualisiert; Punkt 6 nennt die konkreten Instruktionen.dist adopt(E3) und das Ziel des Asset-Modus (E6). Das Shell-Kriterium ist auf Codeblöcke ohne Migrationsdokumente eingegrenzt (E4).python3inbug-report.md, der in ein eigenes Issue gehört.Changelog: Geschlossen (2026-10-01,
a6d07f9, 8.0.0-beta.20; CI Run 486 und 487 grün).docs/und ein Code-Kommentar den Namenupstream mergeals Rückblick behalten.session-id.