Skip to content

Commit c8f0030

Browse files
committed
docs(coord): announce-on-join merged and was never installed
Found while checking a peer session's report, not by looking for it. That session announced itself by hand on 2026-08-02 and gave the reason as "the hook is on an unmerged branch". It had merged (#133, 3389aa2) hours earlier, so the observation was right and the diagnosis was not, and nothing would have corrected it. Measured across all five config roots: - no `mefor-announce` UserPromptSubmit entry anywhere - the one UserPromptSubmit entry installed is `# mefor-web-announce`, which resolves scripts/hooks/announce.ps1 -- a different script in a different repo, and one the installer's own comment already warns is easy to confuse with this marker - <git-common-dir>/mefor-coord/announce/ does not exist, so there is not a single receipt: it has never executed install-coordination.ps1 was last run before the announce row existed, and merging a hook does not install one. Its two other entries -- the SessionStart banner and the collision gate -- were wired then and are present, which is precisely why nothing looked wrong. The part worth carrying: the missing-script notice was built so this class could not hide, and it CANNOT FIRE when the hook is not wired at all, because it lives inside the shim. Same shape as the defect this document already records one level down -- the detector sat downstream of the failure it existed to detect. So the status table now distinguishes rule 4's inert-BY-DESIGN from this one's inert-BY-ACCIDENT, and the confirmation step is a receipt on disk rather than a reading of the settings file. Not installed here: that writes ~/.claude/settings.json, which is shared with every session on this machine. Owner's call, from a plain terminal.
1 parent 2ac05f4 commit c8f0030

1 file changed

Lines changed: 28 additions & 1 deletion

File tree

docs/SESSION-DRIFT-CONTROLS.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ reading the emitted decision — not by reading source alone.
166166
| Selfheal — primary auto-repair | user (4 of 5 dirs) | LIVE |
167167
| Selfheal — hijack warning | user (4 of 5 dirs) | **LIVE and currently mis-firing** (§3, G4) |
168168
| `session-context.ps1` banner | project | LIVE where the branch carries the file |
169-
| Announce-on-join (`announce-session.ps1`) | user | **NEW** — the only **push** control; asks, cannot send, and every decision leaves a receipt |
169+
| Announce-on-join (`announce-session.ps1`) | user | **MERGED, NOT INSTALLED — inert by accident, 2026-08-02.** The only **push** control; asks, cannot send, and every decision leaves a receipt. It has never run. See below |
170170
| Announce wiring reaches a real script | test | **NEW** — `tests/test_announce_wiring.py`; nothing asserted this for *any* hook before, which is how a wired-but-inert shim survived weeks |
171171
| Announce missing-script notice | user | **NEW** — the one surface that still reports when the script itself fails to resolve |
172172
| Collision gate — unresolved notice | user | **NEW** — every fail-open path used to be indistinguishable from an all-clear; it now says which reason, once per 30 min, and still allows |
@@ -180,6 +180,33 @@ Rule 4 being inert is **deliberate and announced** — the commit that landed it
180180
nothing changes until `install-gate.ps1` is re-run." It is listed as INERT here because a control that
181181
has never been installed is a source artefact, not an enforcement.
182182
183+
**Announce-on-join is inert too, and that one is an accident.** Measured 2026-08-02, hours after
184+
[#133](https://github.com/MEFORORG/MessageFoundry/pull/133) merged it to `main`:
185+
186+
| Check | Result |
187+
|---|---|
188+
| `mefor-announce` UserPromptSubmit entry in any of the 5 config roots | **absent** |
189+
| The one UserPromptSubmit entry that *is* installed | `# mefor-web-announce`, resolving `scripts/hooks/announce.ps1` — **a different script in a different repo** |
190+
| `<git-common-dir>/mefor-coord/announce/` | **does not exist**, so there is not one receipt: it has never executed |
191+
192+
`install-coordination.ps1` was last run before the announce row existed, and merging a hook does not
193+
install one. The two `mefor-coord` entries it wired then — the SessionStart banner and the collision
194+
gate — are present, which is exactly why nothing looked wrong.
195+
196+
Two things this costs, both observed rather than predicted. A peer session announced itself **by hand**
197+
on 2026-08-02 and reported the hook as unavailable because it was "on an unmerged branch"; it had
198+
merged, so the correct diagnosis was never reached. And the missing-script notice listed below — the
199+
surface built precisely so this class cannot hide — **cannot fire when the hook is not wired at all**,
200+
because it lives inside the shim. That is this section's own lesson recurring one level up: the
201+
detector was still downstream of the failure. Re-arm from a plain terminal, then confirm by receipt
202+
rather than by reading the settings file:
203+
204+
```powershell
205+
pwsh -NoProfile -File scripts\coord\install-coordination.ps1
206+
# then, after one prompt in any session in this repo:
207+
ls (Join-Path (git rev-parse --path-format=absolute --git-common-dir) 'mefor-coord/announce/receipts')
208+
```
209+
183210
---
184211

185212
## 2. What it demonstrably buys

0 commit comments

Comments
 (0)