From 032adf152555d371814bd016c1b1e7355eff2b15 Mon Sep 17 00:00:00 2001 From: sjat Date: Wed, 10 Jun 2026 08:54:37 +0200 Subject: [PATCH] docs(friction): log execution-mode recurrence; fix list de-indents Complete the 2026-06-09 entry (third recurrence of presenting the execution-mode menu despite the standing subagent-driven preference) and restore two continuation-line indents a markdown formatter had stripped. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/FRICTION.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/FRICTION.md b/docs/FRICTION.md index b883ec7..c9b2616 100644 --- a/docs/FRICTION.md +++ b/docs/FRICTION.md @@ -63,14 +63,14 @@ earning its keep. - `[recurring]` When a **deferred** decision later resolves, docs that referenced the deferral go stale and a plan's file-map can miss them (e.g. resolving the mesh-VPN choice left `new-host.md` still saying "mesh VPN (choice deferred)"; the ubongo work - similarly left a contradiction in CLAUDE.md). A *broadened* final grep sweep caught + similarly left a contradiction in CLAUDE.md). A _broadened_ final grep sweep caught both. → On resolving a deferred decision, grep all canonical docs for the deferral language ("choice deferred", "pending", "TBD", the placeholder's name) and reconcile every hit — don't rely on the plan's file-map alone. Worth a `/review-repo` check for lingering "deferred/pending/TBD" references whose ADR has since resolved. - **Recurred a 3rd time (same day):** ADR-017 resolved the browser-E2E harness but left ADR-015's own "Deferred" list item #2 still reading as open — not caught by the - ADR-017 plan's sweep (which only checked for *its own* placeholder language), only + ADR-017 plan's sweep (which only checked for _its own_ placeholder language), only by a later STATUS pass. Lesson sharpened: the stale reference often lives in the **originating ADR's Deferred section**, which the resolving ADR's plan won't think to grep. → When an ADR resolves another ADR's deferred item, edit that **source @@ -82,7 +82,7 @@ earning its keep. - `[recurring]` **Asked the execution-mode question AGAIN** ("subagent-driven vs inline — which approach?") at the end of `writing-plans`, despite the 2026-06-05 standing - preference *and* the `always-subagent-driven-execution` memory both saying don't ask. + preference _and_ the `always-subagent-driven-execution` memory both saying don't ask. Root cause: the `writing-plans` skill's "Execution Handoff" step scripts the menu, and I followed the skill text over the user's standing override. Second occurrence → escalate from "skip the prompt" to a **hard rule**: never present the execution-mode @@ -98,12 +98,12 @@ earning its keep. ### Host nftables firewall build (`base` role) - `[gotcha]` **`nft -c` rejects `iif ""` when the interface is absent** (it resolves - to an interface *index* at load time). The render+syntax-check Molecule step caught + to an interface _index_ at load time). The render+syntax-check Molecule step caught `iif "wt0"` failing in the container — and it would fail identically on any real host before NetBird brings up `wt0`. Use **`iifname ""`** (string match, no existence requirement, survives the interface coming/going) for any interface that may be absent. - `[gotcha]` **Molecule's `community.docker` connection uses `ansible_host` as the - container name** (`remote_addr`). Setting `ansible_host` as *data* in a scenario's + container name** (`remote_addr`). Setting `ansible_host` as _data_ in a scenario's `host_vars` (e.g. to give a resolver a fake IP) breaks the connection → `UNREACHABLE`, "Failed to create temporary directory". Don't override `ansible_host` in molecule; feed fixture IPs another way (or keep fixtures to zone sources and unit-test IP resolution). @@ -124,3 +124,15 @@ earning its keep. - `[note]` The render-and-`nft -c` (no-apply) Molecule approach **earned its keep** — caught the `iif`/`iifname` bug deterministically without touching the host kernel. Good pattern to reuse for other config-rendering roles. + +## 2026-06-09 + +- `[recurring]` **Asked the execution-mode question AGAIN** — presented the + "subagent-driven vs inline" menu at the `writing-plans` → execution handoff, even + though the standing 2026-06-05 preference and the `always-subagent-driven-execution` + memory both say to default to subagent-driven without asking. Third occurrence; the + earlier "hard rule" escalation didn't hold because both `writing-plans` and + `subagent-driven-development` script the menu and I followed the skill text over the + user's standing override. → The standing preference outranks skill scripts: when a + skill's handoff offers the execution-mode menu, skip it and proceed subagent-driven; + only ask if the user signals otherwise this session.