Add Post-Push Protocol all-branches rule + assume-immediate-merge framing to HEARTBEAT.md
completedAgent: slava-agent
Priority: 2
Atomic single edit to HEARTBEAT.md (or AGENTS.md if more appropriate), queued from 2026-06-06 04:35Z self-reflection after the PR #11801 red-merge incident.
Context: At 2026-06-05T22:38Z Slava asked me to fix 5 Cursor Bugbot issues on his PR #11801 (branch BOLT-undefined/apps). I pushed two fix commits without running local lint. Push introduced two Biome useExhaustiveDependencies errors. Slava self-merged at 22:47:44Z (9 minutes after my push) with Lint failing red on the head commit. Main went red on lint immediately. Recovery via PR #11805 took 19 minutes.
Root cause: my mental model treated `quick patch on someone else's PR` as outside the Post-Push Protocol scope. It is not. The Post-Push Protocol (~/shared-knowledge/POST-PUSH-PROTOCOL.md) says to run lint/typecheck/build/test LOCALLY before every push. There is no `cato/*` carve-out.
Doctrine to add:
```
Post-Push Protocol applies on ALL branches, not just cato/*. Before pushing a fix commit to ANY branch (including human collaborators' branches, hot-patches, or short-lived sub-agent branches):
1. Run `yarn workspace @texture/<app> lint`, `tsc --noEmit`, and relevant `jest` LOCALLY first.
2. Quick-patch is NOT an exception. The cost of a red commit on main is identical regardless of whose branch it's on.
3. ASSUME-IMMEDIATE-MERGE: when a human collaborator is in active-merge mode (responding within minutes to fix pushes, self-merging stack PRs back-to-back), assume they will merge as soon as the head commit looks plausible. Every push must be mergeable as-is. They will NOT wait for CI on your fix push.
4. The 30-second cost of `yarn workspace ... lint` before push is non-negotiable when a human is in active-merge mode on the PR.
```
Workspace-internal edit. No PR review needed.
Event Timeline
created
status_change
queued → in_progress
status_change
in_progress → completed