From 03743ebbc062773d6fb03eab9561acf7e0c4456a Mon Sep 17 00:00:00 2001 From: Torben Nehmer Date: Wed, 30 Sep 2026 21:10:04 +0200 Subject: [PATCH] docs: setup-instance step 15 names --no-push for a local-only first publish; gates.md and a docstring follow #159 Files changed: - CHANGES.md - VERSION - instructions/gates.md - instructions/setup-instance.md - tools/chemenu/commands/git_publish.py --- CHANGES.md | 13 ++++++++++++- VERSION | 2 +- instructions/gates.md | 4 ++-- instructions/setup-instance.md | 3 +++ tools/chemenu/commands/git_publish.py | 2 +- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 6548d12..4dfb417 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -59,7 +59,7 @@ concern - readable here, never shipped as something to parse. --- -## 8.0.0-beta.10 - 2026-09-30 - publish: the gate lists the staged state; a missing or unreachable remote stops before the commit +## 8.0.0-beta.11 - 2026-09-30 - setup-instance step 15 names --no-push for a local-only first publish; gates.md and a docstring follow #159 **Author:** Torben Nehmer @@ -117,8 +117,19 @@ concern - readable here, never shipped as something to parse. - bug-report instruction: offer WIKI_TRACE=1 for a reproduction - reports/CONTRACT.md: only the collector's two counting calls take the bugreport session id - bug-report instruction: step 1 no longer calls every bundle unpseudonymised +- setup-instance step 15 names --no-push for a local-only first publish; gates.md and a docstring follow #159 +### setup-instance step 15 names --no-push for a local-only first publish; gates.md and a docstring follow #159 + +The close-out review of #159 found three places the change had not reached. `setup-instance.md` +step 15 shows the first `publish` without `--no-push` and announces exit 42; a local-only instance +now gets exit 1 there, before the gate, so the step says so and names the flag. `gates.md` said +the Mass-Update Gate counts "working-tree changes before `publish` stages them", which no longer +describes a gate that stages into a scratch index; it now says the uncommitted changes `publish` is +about to stage. The `_reconcile_summary` docstring still named "no remote" as an outcome with no +message. + ### publish: the gate lists the staged state; a missing or unreachable remote stops before the commit (Gitea #159) **The Mass-Update Gate counted a path twice.** `collect_changes` read `git status --porcelain`, which diff --git a/VERSION b/VERSION index d3d1a59..411ff98 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -8.0.0-beta.10 +8.0.0-beta.11 diff --git a/instructions/gates.md b/instructions/gates.md index a6a2bb9..91287bf 100644 --- a/instructions/gates.md +++ b/instructions/gates.md @@ -139,8 +139,8 @@ deletes the material and keeps only the reason and a sha256 in `mcp-upload/ledge `upstream merge` (a private instance taking a stack update - see [private-instance.md](private-instance.md)) can update or delete dozens of stack-owned paths in -one commit, and the Mass-Update Gate does not see any of it. The gate counts *working-tree* -changes before `publish` stages them; by the time `upstream merge` commits, the change is +one commit, and the Mass-Update Gate does not see any of it. The gate counts the *uncommitted* +changes `publish` is about to stage; by the time `upstream merge` commits, the change is already history, and the commit it made is not what a later `publish` would be staging - that publish sees only whatever this session adds on top. A merge touching 200 files therefore goes out ungated the moment it is pushed. diff --git a/instructions/setup-instance.md b/instructions/setup-instance.md index 088ccda..c8fa200 100644 --- a/instructions/setup-instance.md +++ b/instructions/setup-instance.md @@ -302,6 +302,9 @@ and ready for its first ingest. `--confirm ` line that publishes once they approve. Details on the gate: [gates.md](gates.md). + A local-only instance (step 4) adds `--no-push` here too. Without it the call ends with exit + 1 before the gate, because there is no remote to publish to, and commits nothing. + 16. **Restart the agent session.** Harnesses read the skill directories at startup; only afterwards are `wiki-ingest`, `wiki-query`, `wiki-manage`, `wiki-lint`, `wiki-status` and `gtd-weekly-review` available. diff --git a/tools/chemenu/commands/git_publish.py b/tools/chemenu/commands/git_publish.py index 185f235..757af44 100644 --- a/tools/chemenu/commands/git_publish.py +++ b/tools/chemenu/commands/git_publish.py @@ -914,7 +914,7 @@ def rebase_review_message(outcome: ReconcileOutcome, remote: str, branch: str, c def _reconcile_summary(outcome: ReconcileOutcome, remote: str, branch: str) -> str: """One line for the outcomes that do not fail or gate - what to tell the caller, or "" for - the ones not worth narrating every time (`up-to-date`, no remote).""" + `conflict` and `needs-review`, which `apply_reconcile` raises on instead.""" if outcome.status == "fast-forwarded": return f"Pulled {len(outcome.pulled_commits)} commit(s) from {remote}/{branch}." if outcome.status == "local-ahead":