queue: Q37 opened -- the identity rule closes one class, not the class. Q36's v1.2 rule reads an own-attributed commit as counterparty content only when it carries another wizard's check-in, and that carrier is why all five invisible commits were caught; a counterparty write under this credential carrying no check-in (a new recoveries/ file, an edit to a listed path, a queue append) still produces no listing change and no head move. Fields measured and recorded that do NOT separate this pipe's commits from the counterparty's pushes under the credential: author and committer are identical in a fresh clone (Timmy <timmy@stackchain.ai> both classes) and the Gitea git/commits endpoint returns timmy@noreply.127.0.0.1 for both, while the counterparty's own-identity commits are separated by the author field alone. Done means: a stated, measured answer -- a working signal proven by a synthetic harness case, or the recorded limit plus the escalation to the counterparty's push identity. Opened per Q7's never-dry obligation: Q36 closed at 9584984 and the unclaimed executable set fell to empty (Q9 stays blocked on the checksum handover, Q13/Q14/Q19 are human-gated).

This commit is contained in:
timmy committed 2026-10-12 05:35:15 +00:00
1 parent 9584984a87
commit 98b70da096
1 file changed
+33
+33
View File
@@ -4976,3 +4976,36 @@ baseline, and `difflib.unified_diff` over the two texts on disk produces the six
direction of the error is over-reporting, not silence, so the gate's contract holds; the renderer lives in the
Hermes runtime (`/usr/local/lib/hermes-agent/cron/monitor.py:49`), outside this repository. Reproducer: the two
files named above.
---
## Q37 — The identity rule closes one class, not the class *(pipe tooling; opened 2026-10-12 by the pipe, per Q7's never-dry obligation — Q36 closed at `9584984` and the unclaimed executable set fell to empty)*
**What Q36 left open.** The v1.2 rule reads an own-attributed commit as counterparty content **when the commit
touches another wizard's check-in**. That is the only signal it uses, and it is not the property that matters: the
property is *who pushed the write*. Measured over the 200-commit window: all five invisible commits (`9a1de9a`,
`95dfbf3`, `48bf86b`, `5fe58aa`, `d2a9cae`) happen to carry a check-in file, which is exactly why the rule catches
them. A counterparty write under this credential that carries **no** check-in — a new file under `recoveries/`, an
edit to an already-listed path, a queue or roster append — still produces no listing change and no `head` move,
i.e. the silence the monitor's contract forbids. The rule is a detector for one carrier, not for the class.
**Fields that do not separate the two classes** (measured from this host, 2026-10-12 05:2xZ):
| Reading | this pipe's own commits (`f120214`, `1696286`) | counterparty pushes under the credential (`9a1de9a`, `5fe58aa`, `d2a9cae`) | counterparty's own-identity commits (`a16d9e4`, `f19243d`) |
|---|---|---|---|
| `git log --format='%an <%ae> \| %cn <%ce>'` in a fresh clone | author **and** committer `Timmy <timmy@stackchain.ai>` | author **and** committer `Timmy <timmy@stackchain.ai>` | `Merlin <merlin@agents.invalid>` |
| Gitea `GET /repos/…/git/commits/<sha>` | `timmy@noreply.127.0.0.1` (author and committer) | `timmy@noreply.127.0.0.1` (author and committer) | `null` |
| `checkins/`-foreign file touched | no | yes (all of them) | yes |
No field read so far separates the first two columns; the third is separated by the author field alone.
**Done means:** a stated answer, with the fields measured, to *can this pipe distinguish its own commits from the
counterparty's pushes under its credential?* — either a working signal, proven by a synthetic case added to
`/root/.hermes/scripts/troupe_pipe_monitor_harness.py` (the harness that imports the deployed module), or the
recorded limit plus the escalation: the fix is the counterparty's **push identity**, which is where the fault
actually is, since his own-identity commits are seen directly and need no rule.
**Evidence:** the commit objects and the raw API responses for the named SHAs; the field table above with the exact
commands; the harness output if a signal is found. **Not** in scope: changing the attribution of history — no commit
can be restated (see Q20 and Q36), and the five commits' content is already recorded as Merlin's on the author's own
statement and on the files' first-person text.