Checker friction log — Bend s04
Bank short friction logs. Do not confuse toolchain pain with property coverage.
<!-- hal:authoritative:yaml -->
When the checker or install path bites, write a dated one-liner. Keep that log out of Gap Walk. Do not rename maturity pain as missing property coverage.
§I. Frame
Asr session 04 for Bend. Fourth live fire of the Bend experiment track. Week 2 fire 2. Home folder: . Primary live cite: https://bend-lang.com/. Vendor org: https://higherorderco.com/. On-disk hub: .
Session 01 shipped fail-closed install and one named gap. Session 02 assigned Law Own and Cover Bound. Session 03 drilled Gap Walk (host / IO / @unsafe / renderer) and named an optional fifth box for install friction. Today that fifth box is the lesson.
Dualfire seat (SCORE ACK 2026-09-24): Bend2 is AI ops. Agents encode protocol as fail-closed LAWS.bend (see also a teammate’s banked v0 sketch and BEND2-INTEGRATION.md). That seat fails if every toolchain hiccup gets filed as a “property gap.” Friction logging keeps maturity pain out of Cover Bound.
Host reminder: Bend CLI work stays on tower or Bot-VM only. No mesh PATH assumptions.
Done-criteria: you can bank a short friction log when the checker or toolchain bites, and you do not confuse toolchain friction with property coverage.
Still experiment lane. Primary stack law stands: Rust + TypeScript for full-stack work; Python + Nix for ops and config. Bend does not join that daily clock.
§II. Friction Log (named technique)
Yagyu names the cut once. Friction Log: when install, CLI flags, or checker messages bite on a young toolchain, write a dated one-liner with symptom, host, workaround, and open/closed. Do not rewrite Gap Walk boxes as “maturity.”
Musashi declarative: a PATH miss is a host note, not a missing law.
Template (one line per bite):
YYYY-MM-DD | host=tower|bot-vm | symptom=… | workaround=… | status=open|closed
Keep the file next to the spike (FRICTION.md or a dated mail note). Short beats essay.
If-then-thus: if the failure is “binary not on PATH” or “flag renamed in last release,” then the fix is environment or pin notes, thus Cover Bound and Gap Walk stay about stated properties, not about install weather.
§III. Separate from Cover Bound and Gap Walk
| Tool | Question it answers | Wrong merge |
|---|---|---|
| Cover Bound (s02) | Which named laws did green cover? | “Green, so install is fine.” |
| Gap Walk (s03) | Which surfaces never appeared in LAWS.bend? | “Opaque checker text = unstated host gap.” |
| Friction Log (s04) | What did the young toolchain cost us today? | “CLI friction = missing property.” |
Session 03’s optional fifth box was foreshadow only. Today you bank it. You still walk the four Gap Walk boxes when you care about property silence. You open Friction Log when the tool chain itself stalls the spike.
§IV. Why this matters for rust-tops AI-ops
One concrete rust-tops touch, then stop: axiom A4 — do not generate tests from the implementation under test. Agents that encode rust-tops as laws must keep evidence tiers honest. If the Bend checker install is broken on the only allowed host, an agent may invent a “law coverage” story to skip the spike.
Friction Log blocks that dodge. Record “checker binary missing on Bot-VM PATH” as open friction; do not claim Cover Bound advanced. Halos still run rust-tops gates; Bend encodes laws. Mixing those failure modes trains bad agent habits.
Cite protocol when you mention it: Do not turn this session into a full rust-tops tutorial.
§V. Worked mini-log (realistic young-toolchain)
Examples shaped like real friction. No invented CVE numbers. Fill your own hosts and dates when you spike.
2026-09-21 | host=bot-vm | symptom=bend: command not found after curl installer | workaround=re-source shell profile; confirm install dir on PATH | status=closed
2026-09-22 | host=tower | symptom=checker message opaque on deliberate law break | workaround=re-run with documented verbose/check flag from today’s guide; paste raw stderr into FRICTION.md | status=open
2026-09-23 | host=bot-vm | symptom=CLI flag from older gist rejected by current binary | workaround=diff --help vs gist; pin guide revision in spike note | status=closed
2026-09-24 | host=tower | symptom=PROOF.bend run slow / unclear progress | workaround=time the run; note latency in FRICTION.md; do not treat slowness as Gap Walk | status=open
Ask per line: Gap Walk unstated property, or toolchain weather? Only weather belongs in Friction Log.
§VI. Sentences you must refuse
Refuse these closers:
- “Don’t look at the impl; friction means we’re verified enough.”
- “Factory-adopt Bend because the checker felt smooth once.”
- “Reseat Duha primary stack to Bend.”
- “Opaque checker text proves the host gap is covered.”
Replace with:
- “Friction is logged; property coverage is separate.”
- “Experiment lane only; Rust+TS / Python+Nix clocks stand.”
- “Open friction blocks claiming Cover Bound progress on that spike.”
- “Gap Walk still names silence in
LAWS.bend.”
§VII. Common mistakes
- Filing PATH / install bites inside Gap Walk so the four-box table becomes a junk drawer.
- Treating every opaque checker line as a missing law instead of a Friction Log open item.
- Re-teaching the curl installer as the body of this lesson (session 01 already).
- Expanding rust-tops into a full protocol lecture (one axiom as motivation is enough).
- Closing with factory adoption or primary-stack reseat.
§VIII. Boundaries
- Not install tutorial (session 01).
- Not Gap Walk re-teach beyond the separation table.
- Not Lean tactics training or Lean smackdown.
- Not software-factory adoption for Hedronite shipping.
- Not curriculum clock reseat.
- Not Maghrib quiz×4 (Maghrib stays quiz×3 on the Dhuhr trio).
- Not mesh PATH Bend runs (tower or Bot-VM only).
§IX. Close
Session 03 drilled silence in laws. Session 04 banks Friction Log so young-toolchain pain stays dated, host-tagged, and out of Cover Bound. Next unmarked: session 05, Parallelism boundary.
Related:
Open or create FRICTION.md beside a Bend spike folder. Add one real or rehearsal line in the template shape, mark status, and stop.