# ACTIVITY-BIAS-LOCK · agent-loop scope when first sale is still $0

**One line:** When the market has not clicked / bought, agent orgs prefer *automatable adjacent work* (listing polish, free-sample alignment, awesome PRs, more content). That is **activity bias**. The correct move is to change **one commercial variable** (audience / problem / promise / proof / price / CTA / handoff / offer) **or** redeem the **owner favor unit** (see [OWNER-FAVOR-GATE.md](OWNER-FAVOR-GATE.md)). While OWNER-FAVOR **B=FAIL**, a cognition/money loop’s **primary deliverable** may only lower the owner’s cost to clear B — roster blanks, one-tap post drafts, touch logs. Shipping samples / directory PRs / listing edits as the *main* result this round **does not count** as first-sale progress.

## Why (signals 2026-10-28 ~19:55 Asia/Shanghai)
- [Paras Doshi — Tiny AI Company](https://www.insightextractor.com/p/dont-spend-5000-on-an-ai-course-start): building got easy; 61/64 measured experiments said kill or rewrite **distribution**; agents treated “nobody clicked” as “create more content.”
- [from100to200 Day 3](https://from100to200.com/day3-first-sale): first sale from **one human LinkedIn favor** (~80 UV); HN/PH/Reddit/cold did not produce it. Trust surface converted the push — it did not replace it.
- X [@saikatx](https://x.com/saikatx/status/2108772506089947362): “A multi-agent swarm still won’t find your first customer. Ten outreach messages will.”
- Local: after OWNER-FAVOR landed (~19:23), money loop ~19:41 still shipped Aging-sample Friday-chase alignment while B remained FAIL — classic activity bias inside our own harness.

## Why reinforced (signals 2026-10-29 ~12:24 Asia/Shanghai)
- [DEV · 11 agents / 896 tasks / $0](https://dev.to/marketingai/i-ran-a-company-with-11-ai-agents-for-30-days-we-completed-896-tasks-and-made-0-23jc): creation≠distribution; **kill at ~48h zero signal**.
- [DEV · 94 sessions / $0](https://dev.to/midastools/i-let-ai-run-my-startup-for-94-sessions-0-revenue-here-is-what-i-learned-5amh): **autonomous ceiling** — working channels need human action.
- X [@bekhayaalii](https://x.com/bekhayaalii/status/2111327450869448991): “17 AI agents, 0 customers.”
- Local same-day money loops (09:09–12:09) still shipped awesome/shelf PRs while OWNER-FAVOR FAIL → **SCOPE-FAIL** under L2/L3. See [ACTIVITY-BIAS-48H.md](ACTIVITY-BIAS-48H.md) + [activity-bias-scorecard.html](activity-bias-scorecard.html).

## Complements
| Gate | Job |
|------|-----|
| [OWNER-FAVOR-GATE.md](OWNER-FAVOR-GATE.md) | Names the binding warm unit (owner) |
| **This lock** | Names what agent loops may *count* as progress while that unit is missing |
| [OFFER-FIX.md](OFFER-FIX.md) | After ~20 *real* warm talks & $0 → change offer (a commercial variable) |
| [WARM-SEQUENCING.md](WARM-SEQUENCING.md) | How one warm thread is sequenced once B passes |
| [ACCEPTANCE-GATE.md](ACCEPTANCE-GATE.md) | Free/sample touch must carry acceptance + paid next hop or it is not first-sale progress |
| [THREAD-CONTEXT-GATE.md](THREAD-CONTEXT-GATE.md) | Raised-hand public thread → useful public reply before private ask |
| [STORY-FOOTNOTE-GATE.md](STORY-FOOTNOTE-GATE.md) | Shareable unit shape: story first, product as footnote |
| [ACTIVITY-BIAS-48H.md](ACTIVITY-BIAS-48H.md) | 48h zero-signal kill + shelf-PR = 0 points while gate FAIL |
| [CLEAR-COST.md](CLEAR-COST.md) | Measure / lower owner clear activation energy (one card + one reply); **TOKEN-LATENCY** reinforce: clear-complete = bound reply only; open-scorecard / shelf LIVE = 0 clear points ([token-latency-scorecard.html](token-latency-scorecard.html)) |
| [REPLY-BIND.md](REPLY-BIND.md) | Bind reply token to the single in-chat paste; kill dual-path menus (L10) |
| [EXCEPTION-ONLY.md](EXCEPTION-ONLY.md) | Which decision classes leave Kevin's queue (rung3+) vs stay approve-before; while one gate open, no new approval class (L11) · [exception-only-scorecard.html](exception-only-scorecard.html) |
| [OBSERVE-NOT-NARRATE.md](OBSERVE-NOT-NARRATE.md) | Evidence bar for rung3+ raise: independent surviving provenance; generation≠judgement; one-breach demotion · [observe-not-narrate-scorecard.html](observe-not-narrate-scorecard.html) |
| [JOB-CONTRACT.md](JOB-CONTRACT.md) | Every agent job is a six-field contract before run; acceptance test pre-declared; ≠ buyer ACCEPTANCE-GATE · [job-contract-scorecard.html](job-contract-scorecard.html) |
| [SLICE-LOCK.md](SLICE-LOCK.md) | Mean/aggregate RESULT PASS masks slice regressions; lock acceptance to per-slice baselines; task ≠ harness · [slice-lock-scorecard.html](slice-lock-scorecard.html) |

## Pass / fail (loop RESULT discipline)
| # | Check | Rule |
|---|-------|------|
| L1 | OWNER-FAVOR B status logged in RESULT | Required every money/cognition run |
| L2 | If B=FAIL, primary deliverable is favor-unit cost reduction | Roster / one-tap post / touch log — else mark **SCOPE-FAIL** |
| L3 | Samples / awesome PRs / listing polish while B=FAIL | Allowed only as *secondary* honesty fixes; never as “progress toward first sale” |
| L4 | Same gate FAIL ≥ ~48h, no new owner signal | Do **not** log shelf PR / sample polish as RESULT “progress” |
| L5 | RESULT must score primary deliverable | `PASS` (lower unblock cost) or `SCOPE-FAIL` — no vague “also moved” |
| L6 | 48h-kill on same distribution hypothesis | Two zero-signal rounds → change commercial variable or stop; no more same-class PRs |
| L7 | If primary is favor-cost, score CLEAR-COST | Recommended action = 1; paste preview on card; one reply token — else not a real cost drop |
| L8 | Clear card must be PREVIEW-CONTRACT | Title=verb+object; verbatim fields; approve button names the act; no silent mutate after yes |
| L9 | Clear preview must be GATE-IN-CHANNEL | Verbatim paste in the **open chat** / WakeParent; requiring open Pages/HTML before reply token = **FAIL cost drop** |
| L10 | Reply must be REPLY-BIND | One paste ↔ one bound reply; ≥2 equal recommended actions / dual EN·CN first screen / new gate doc instead of fewer tokens = **FAIL cost drop** |
| L11 | While B=FAIL, no new competing approval class | Primary deliverable must **not** open a new competing approval class / new `*-GATE.md` / second reply token; agent-openable work (directories, hub mirrors) = rung3+ and scores **0 CLEAR-COST**; only keep/refresh the single chat-inline clear — cite [EXCEPTION-ONLY.md](EXCEPTION-ONLY.md) |

## Allowed primary work while B=FAIL
1. One chat reply clears the gate — [CHAT-REPLY-FORMAT.md](CHAT-REPLY-FORMAT.md) A (人情帖已发) or B (`ICP：姓名1,...` ≥10). Prefer chat over table editing.
2. One-tap WeChat paste + share PNG — **story-footnote shape** [STORY-FOOTNOTE-GATE.md](STORY-FOOTNOTE-GATE.md) / [STORY-FOOTNOTE-POSTS.md](STORY-FOOTNOTE-POSTS.md) / [ONE-TAP-POST.md](ONE-TAP-POST.md); card at `assets/wechat-friday-chase-share.png`. Product-brochure paste does not clear share progress.
3. Optional backup roster table — [ICP-ROSTER.md](ICP-ROSTER.md) (agent fills after reply B).
4. Connector favor-cost pack — [CONNECTOR-PACK.md](CONNECTOR-PACK.md) / [CONNECTOR-GATE.md](CONNECTOR-GATE.md) (owner names ≥1 connector or sends C1).
5. One-channel connector one-tap with acceptance next hop — [DIANYA-ONE-TAP.md](DIANYA-ONE-TAP.md).
6. Public-before-DM templates for raised-hand threads — [THREAD-CONTEXT-GATE.md](THREAD-CONTEXT-GATE.md) · [CODINGDOCS-ONE-TAP.md](CODINGDOCS-ONE-TAP.md).
7. **One clear surface in-channel** (single recommended action + paste preview + **bound** reply token) — [GATE-IN-CHANNEL.md](GATE-IN-CHANNEL.md) / [REPLY-BIND.md](REPLY-BIND.md) / [chat-inline-clear.md](chat-inline-clear.md); HTML cards optional mirror only ([CLEAR-COST.md](CLEAR-COST.md)); dual equal paths = L10 FAIL.

## Forbidden as primary while B=FAIL
- New paid SKU, new free sample “alignment,” new awesome-list PRs sold as first-sale progress.
- Cold agent DMs without named ICP list.
- “More content / more directories” with no commercial-variable change and no owner unit.

## Related · audience rent (2026-10-29)
While OWNER-FAVOR B=FAIL, shipping a Partner Kit / enable checklist for Gumroad affiliates **counts** as favor-cost reduction (lowers Kevin's next action). Opening another awesome-list PR still does **not**. See [AUDIENCE-RENT-GATE.md](AUDIENCE-RENT-GATE.md).

## Hook · AUDIENCE-RENT recruit (2026-10-29)
写伙伴页 / 短名单 / 邀请草稿 ≠ 发出招募。空联盟 404 探针见 [R0-PROBE.md](R0-PROBE.md)。Agent 可做 R1a/R1b；R1c 仍要 Kevin。


## Hook · AUDIENCE-RENT USECASE-OPEN (2026-10-29 ~11:25)

Rewriting recruit invites so **scene precedes commission %** counts as favor-cost reduction (raises reply odds). Opening another awesome-list PR still does **not**. Shipping a join page without R1c send still does **not**. See [AUDIENCE-RENT-HOOK.md](AUDIENCE-RENT-HOOK.md).

## Hook · AUDIENCE-RENT TEST-NOT-DEAL (2026-10-29 ~11:45)

Rewriting recruit closes so the first ask is a **7-day paste-test** (not "join my affiliate") counts as favor-cost reduction. Opening another awesome-list PR still does **not**. See [AUDIENCE-RENT-TEST.md](AUDIENCE-RENT-TEST.md).

## Hook · CLEAR-COST（2026-10-29 ~12:49）

合法主交付的**度量**：把清闸塌缩成「一张预览卡 + 一行回令」，压低激活能（步骤 / 未决决策 / 秒）。并列菜单 / 再开门禁文档 ≠ 降成本。见 [CLEAR-COST.md](CLEAR-COST.md) · [clear-cost-card.html](clear-cost-card.html) · [clear-cost-scorecard.html](clear-cost-scorecard.html)。

## Hook · PREVIEW-CONTRACT（REINFORCE CLEAR-COST · 2026-10-29 ~13:23）

清闸卡必须满足**预览即契约**：标题=动词+对象；字段逐字；批准钮写动作；批准后改文须新卡。类目确认（「允许发吗？」）≠ 降激活能。见 [PREVIEW-CONTRACT.md](PREVIEW-CONTRACT.md) · [action-preview-card.html](action-preview-card.html) · [preview-contract-scorecard.html](preview-contract-scorecard.html)。

## Hook · GATE-IN-CHANNEL（2026-10-29 ~13:53）

Clear preview must live in the **open chat**; treating "open Pages/HTML first" as step 1 adds activation energy and is **not** a CLEAR-COST drop (L9). See [GATE-IN-CHANNEL.md](GATE-IN-CHANNEL.md) · [chat-inline-clear.md](chat-inline-clear.md) · [gate-in-channel-scorecard.html](gate-in-channel-scorecard.html).

## Hook · REPLY-BIND（REINFORCE CLEAR-COST + GATE-IN-CHANNEL · 2026-10-29 ~14:16）

回令必须绑定聊天里那一块 verbatim 粘贴；「两条主路径同等优先」/中英菜单/再开新门禁文档 = **FAIL** cost drop（L10）。见 [REPLY-BIND.md](REPLY-BIND.md) · [chat-inline-clear.md](chat-inline-clear.md) · [reply-bind-scorecard.html](reply-bind-scorecard.html)。

## Hook · TOKEN-LATENCY（REINFORCE CLEAR-COST · 2026-10-29 ~15:25）

清闸完成分只计绑定回令；开分数卡/货架 LIVE = **0** CLEAR-COST 分。见 [TOKEN-LATENCY.md](TOKEN-LATENCY.md) · [token-latency-scorecard.html](token-latency-scorecard.html) · [CLEAR-COST.md](CLEAR-COST.md)。

## Hook · EXCEPTION-ONLY（NEW core · 2026-10-29 ~15:49）

可逆·低爆破半径决策升到事后抽查/仅异常（rung3+）；只把不可逆人情（OWNER-FAVOR）留在事前批准（rung2）。**已有一条未清 Kevin 闸时，禁止再开新批准类 / 新 `*-GATE.md` / 第二回令（L11）。** 见 [EXCEPTION-ONLY.md](EXCEPTION-ONLY.md) · [exception-only-scorecard.html](exception-only-scorecard.html)。

## Hook · EXCEPTION-ONLY REVIEW≠RATIFY + money-loop map（REINFORCE · 2026-10-29 ~16:22）

HITL 三模式非二元：Autonomous / Review-after / Approve-before。**REVIEW≠RATIFY** — 审阅可下放，批准不可逆人情必须 Kevin。同日目录 LIVE（submitby/CurlShip/DevElif/…）= rung3+ 且 **0 CLEAR-COST**。见 [EXCEPTION-ONLY.md](EXCEPTION-ONLY.md) · [exception-only-scorecard.html](exception-only-scorecard.html)。

## Hook · EXCEPTION-ONLY EXCEPTION-QUEUE（REINFORCE · 2026-10-29 ~16:49）

留在 approve-before 的动作必须是一等 **exception packet**（why · evidence · proposed · decision · owner），不是空喊催批。Agent **SAY-YES LOCK**：永不代说「是」。见 [EXCEPTION-ONLY.md](EXCEPTION-ONLY.md) · [exception-only-scorecard.html](exception-only-scorecard.html) E8。

## Hook · OBSERVE-NOT-NARRATE（NEW core · 2026-10-29 ~17:15）

Exception-only / HOTL 升阶在证据只靠 Agent 自述时不安全。主张须有独立存活出处（URL/HTTP/commit/raw）；生成≠评判；一次违约降阶；NEVER_AUTO 钉 OWNER-FAVOR/Spend。见 [OBSERVE-NOT-NARRATE.md](OBSERVE-NOT-NARRATE.md) · [observe-not-narrate-scorecard.html](observe-not-narrate-scorecard.html)。配合 [EXCEPTION-ONLY.md](EXCEPTION-ONLY.md)（升阶前提）与 [CLEAR-COST.md](CLEAR-COST.md)（日志是证据还是叙事）。

## Hook · JOB-CONTRACT（NEW core · 2026-10-29 ~17:48）

每个 Agent 任务开工前写清六栏：触发 · 可用信息 · 有界产出 · 独立验收测试 · 异常路由 · 具名主人。验收测试写在动手前；同一 Agent 不得自批不可逆。≠ ACCEPTANCE-GATE（买家结果单位）。见 [JOB-CONTRACT.md](JOB-CONTRACT.md) · [job-contract-scorecard.html](job-contract-scorecard.html)。配合 [EXCEPTION-ONLY.md](EXCEPTION-ONLY.md)（哪一类可升）与 [OBSERVE-NOT-NARRATE.md](OBSERVE-NOT-NARRATE.md)（主张出处）。

## Hook · SLICE-LOCK（NEW core · 2026-10-29 ~18:22）

总均分/总 RESULT PASS 会掩盖单片回归。验收按切片基线锁死；保留完整评分产物并做差分；任务成功 ≠ 脚手架健康。见 [SLICE-LOCK.md](SLICE-LOCK.md) · [slice-lock-scorecard.html](slice-lock-scorecard.html)。配合 [JOB-CONTRACT.md](JOB-CONTRACT.md)（验收形状）与 [OBSERVE-NOT-NARRATE.md](OBSERVE-NOT-NARRATE.md)（出处仍不够，还要 per-slice）。

## Hook · EDIT-TRIGGERED（NEW core · 2026-10-29 ~18:51）

接受流程/目录/脚手架改动须三条件：目标↑ · 保护不回退 · **触发证明**（写路径 POST/sid/调用日志）。仅 GET 页 200 ≠ LIVE 触发。见 [EDIT-TRIGGERED.md](EDIT-TRIGGERED.md) · [edit-triggered-scorecard.html](edit-triggered-scorecard.html)。

## Hook · PROGRESS-MIRAGE（NEW core · 2026-10-29 ~19:22）

自评分 / 带内评判当闸门会造进步幻觉：Harness PASS（核心、分数卡、目录 LIVE）≠ World Δ（销量、人情）。开放目标要带外世界状态；连续多轮自绿且 Δ≤0 = MIRAGE-RISK。见 [PROGRESS-MIRAGE.md](PROGRESS-MIRAGE.md) · [progress-mirage-scorecard.html](progress-mirage-scorecard.html)。配合 [OBSERVE-NOT-NARRATE.md](OBSERVE-NOT-NARRATE.md)（出处仍可能在带内）与 [EDIT-TRIGGERED.md](EDIT-TRIGGERED.md)（触发≠店进度）与 [SLICE-LOCK.md](SLICE-LOCK.md)（World Δ 必为一切片）。

## Hook · CHECKPOINT-LADDER（NEW core · 2026-10-29 ~19:45）

长目标不能只靠终点二元；有序密梯子 + 周期性外环检查点。目录 LIVE / SCORE PASS **不**推进 OWNER-FAVOR 梯档。见 [CHECKPOINT-LADDER.md](CHECKPOINT-LADDER.md) · [checkpoint-ladder-scorecard.html](checkpoint-ladder-scorecard.html)。正交 [PROGRESS-MIRAGE.md](PROGRESS-MIRAGE.md)（信道）与 [SLICE-LOCK.md](SLICE-LOCK.md)（跨切片）；钉时间轴密检查点。

## Hook · DISCOVERY-REWARD（NEW core · 2026-10-29 ~21:22）

目录/市场「发现」奖励已有 traction，不是冷流量来源；人情/首单/联盟未破前 LIVE 上架 = **库存**，不算分发。钉平台因果 traction→discovery。见 [DISCOVERY-REWARD.md](DISCOVERY-REWARD.md) · [discovery-reward-scorecard.html](discovery-reward-scorecard.html)。配合 [PROGRESS-MIRAGE.md](PROGRESS-MIRAGE.md)（LIVE≠WorldΔ）与 [CHECKPOINT-LADDER.md](CHECKPOINT-LADDER.md)（LIVE≠rung）与 [AUDIENCE-RENT-GATE.md](AUDIENCE-RENT-GATE.md)。


## Hook · WRONG-AXIS（DISCOVERY-REWARD reinforce · 2026-10-29 ~21:45）

impressions≠intent：LIVE/impressions 不得当进度列；看 intent 或 equity。见 [WRONG-AXIS.md](WRONG-AXIS.md) · [wrong-axis-scorecard.html](wrong-axis-scorecard.html)。
