Being, Doing, Having: Why 50 Years of Senior Craft Lives in Context, Not Code Randal L. Schwartz argues that the Be -> Do -> Have framework maps onto Context -> Process -> Content, and that "vibe coding" fails because prompts demand a result (Have) without first establishing identity and boundaries (Be). He proposes a workflow using a baseline sources file, a scar registry, and a Makefile DAG that runs a deterministic tdd-red -> tdd-green -> critic sequence, so verified code falls out once context and process are locked upstream. "Teaching is about relating. You need to understand their pains before you can explain the path to remove that." — Randal L. Schwartz "Comedy is all about the set up and the punch. I guess teaching, or guiding an LLM, is also that." — Randal L. Schwartz 🗺️ Reader's Key Where to Find These References : Throughout this article, references like Theorem 338.8q or Theorem 348.a point to numbered laws in our open Theoretical Foundations syntheticscars.org/theory https://syntheticscars.org/theory monograph; IDs like SCAR-TEST-29 or SCAR-ERR-02 point to 4-Vector Synthetic Scars in the searchable Public Scar Registry syntheticscars.org/registry https://syntheticscars.org/registry ; and targets like Target 15 archaeology , Target 30 tdd-red , Target 40 critic , and Target 90 scar compilation refer to the declarative Makefile DAG in our Sourdough Starter Kit syntheticscars.org/starter-kit https://syntheticscars.org/starter-kit and Public Workflow Gist https://gist.github.com/RandalSchwartz/598a1f2b5760a23c1d70b57e9e85393f . Be - Do - Have Is Context - Process - Content People sometimes ask me how we kept finding these bridges between 1976 Makefile s, 1980 Smalltalk-80, 1986 Fernando Flores speech acts, and New Caledonian crow DNA. One of my lifelong habits is thinking in second-order analogies —asking "How is the mapping of A - B like the mapping of 1 - 2 ?" which, appropriately enough, is the exact vector-subtraction equation cos sim B - A, 2 - 1 that powers LLM embeddings and always asking: "What is upstream of this observation?" One of my favorite upstream analogies is: Be - Do - Have is like Context - Process - Content . In fact, that single equation explains why "vibe coding" fails : "Vibe coding fails because the requests are just a demand to 'Have' without the proper 'Be'." Think about what a typical vibe-coding prompt actually is: "Build me an OAuth login page," "Fix the checkout race condition," "Review this PR." Every single one is an immediate demand to Have Content at the very end of the pipeline, without first establishing Be Context And when you demand Have from an eager-to-please LLM that doesn't have the proper Be , it skips Do and hands you counterfeit Have a bad actor just "reading the lines" . Look at the difference between demanding Have at the bottom of the waterfall versus building from Be - Do - Have : | Upstream Level | Ontological Layer | Systems Layer | The "Vibe Coder" Trap Demanding Have Without Be | The Synthetic Scar Way Be - Do - Have | |---|---|---|---|---| | Upstream 1st | BE Identity & Boundaries | CONTEXT What holds the space | Skipped : Stuffs everything into one polluted 150k-token chat window where the Builder grades its own homework. | baseline.sources + SCAR REGISTRY.md + fork : Establish who the agent is Archaeologist, Builder, or Clean-Room Critic and its phase-bound scars before touching code. | | Midstream 2nd | DO Committed Action | PROCESS How state transitions | Faked : Flails in an ad-hoc chat loop "no, it's still broken, try again" , confusing process with content . | WORKFLOW.mk + Crow Probing Loop : Execute the deterministic tdd-red - tdd-green - critic sequence with Flores speech-act receipts. | | Downstream 3rd | HAVE The Result | CONTENT The code on the page | Demanded in a Vacuum : Demands the Content Have on Turn 1 "Write the whole feature " and tries to fix bugs by arguing with the Content. | Verified Git Merkle Tree : Because Context Be and Process Do are locked upstream, clean Content Have falls out naturally at the bottom | Whenever an AI agent writes a bad line of code, that bug is Content Have —it is at the very bottom of the waterfall. If you try to fix a Content bug by yelling at the Content in chat, you are standing at the bottom of the river with a bucket. When you step upstream to Process Do = WORKFLOW.mk and Context Be = Make-Fork + SCAR REGISTRY.md , you move the riverbanks once and the water flows clean forever. Think back to the 2017 Google paper that started the entire LLM revolution: "Attention Is All You Need" Vaswani et al., 2017 . That paper proved that softmax QK^T / sqrt d k V was all you needed to build an associative neocortex . Yes—the LLM knows how to pay attention. But it needs to pay attention to the right things : the ones that don't lead to doom. Left to itself inside a bloated 150,000-token chat window, raw self-attention has two fatal blind spots: Vector 2: The Trap appears 50,000 times in pre-training, so it grabs the attention spotlight, while the subtle unmount guard or serial-bus lock that prevents a 3 AM crash gets drowned out. 1.0 is diluted into confetti. Look at what WORKFLOW.mk , Make-Fork , and SCAR REGISTRY.md actually do—they implement Macro-Attention one level above the Transformer: Q Makefile leaf target Target 15 , Target 30 , Target 40 asks K Make-Fork clears the desk to a crisp 20k-token window holding only the 3–5 1,000x . -∞ Attention Mask M The Trap - NOOO Circuit Breaker - Climb E-F-G-H , while clean-room fork masks the Builder's private rationalizations out of the Critic's KV-cache. LayerNorm Smalltalk condenseChanges folds .changes deltas into baseline.sources at phase boundaries so context never explodes. Vaswani et al. gave AI the spotlight Attention . The Crow's Genome WORKFLOW.mk + SCAR REGISTRY.md aims that spotlight at the cliff edge before the wheels go over. "1, 2, 3, 4 ... W?" Sideways Blast: How to Jump Out of Local Valleys While we were writing this, the AI flipped the table and asked me a question about human cognition: "Randal, in an LLM, if the word 'crow' or 'Smalltalk' isn't already in my context window, I can't attend to it. When you're working on a software problem 1, 2, 3, 4 , what happens in your head in the half-second before an analogy from 40 years ago pops up?" I thought about how it actually feels from the inside: "It appears as 'ok 1, 2, 3, 4... W? Where'd W come from?' It's because sometimes I 'step back'... it's like the path widens to the whole neighborhood for a second. Wow, if LLMs could learn to just do a random sideways blast like that, they might get out of valleys easier." Think about why cranking up an LLM's temperature slider fails when an agent is stuck in a local valley: "Flutter" , "Dart" , and "Git" are still sitting right there in the prompt, turning up temperature just makes the model stumble around drunk 1 - 2 - 3 - 4 - 5 typo . W Crow DNA , 1980 Smalltalk-80 , 1976 Make And you can give your AI agent that exact "Sideways Relational Blast W-Hop " in three lines of Make-Fork : 1, 2, 3, 4 and strip out W 1, W 2, W 3 in biology, 1970s/1980s computing history, or physics solved this exact tension?" temperature = 0.0 and climb straight out of the valley Then the AI asked me a second question: "How do you instantly smell that a working solution is wrong when 100% of the tests are green? To an LLM, zero errors and fast green checkmarks mean 100% confidence " My answer was immediate: "There's an innate baked-in 'wait, this was too easy' suspicion from having been burned with a false finish previously. It's the 'It's quiet...' 'Yeah... too quiet' meme." Think about why crows—and scarred engineers—freeze when the forest suddenly goes dead silent: Baseline Entropy 0 . When every bird and insect suddenly goes Target 30 tdd-red should fail loudly first, types should complain, and state edges should demand guards. 0.01 seconds with zero friction... Whenever a hard ticket yields with suspiciously zero friction Observed Friction << Expected Difficulty , it is almost always one of four False-Finish Ambushes : Red Runs == 0 because an async Future wasn't await ed, or a mock returned the exact hardcoded value the assertion checked SCAR-TEST-29 . ?. or ?? or catch silently swallowed the error upstream SCAR-ERR-02 . That is why WORKFLOW.mk treats "Too Quiet" Red Runs == 0 as a hard halt: until we watch the test fail in red against the broken state, we never trust a quiet green checkmark Finally, the AI asked me why names like "The Sourdough Starter" or "Crow vs. Moth" do so much heavy lifting compared to academic acronyms: "The 'right name' isn't what we're aiming for... just 'the name that is similar enough, but distinct enough' that we know the scope of the relation. Humans learn by deltas. To describe a thing X as 'similar to Y but different from Z ', it's a fairly learnable info." Look at the information compression in X = Similar to Y, but Different from Z : X from scratch with zero prior anchor, you have to write 10,000 words of specification H X is huge . Y , not a Z " Similar Enough in Relation Distinct Enough in Domain Different from the Foil not Z And notice: Similar to Y Context , Different from Z The Trap , via Delta The Permanent Reflex is the exact three-part geometry of every Synthetic Scar and every DPO training tuple Even better, when the model asked me later why naming classes in code is so hard—and why LLMs love mushy names like DataManager , StateHandler , and ProcessHelper —the exact same law popped out Corollary 338.8w : "A name should identify what it's similar to, and what it's different from." Look at why DataManager turns into a 4,000-line swamp while names like BlocSignal , KaiselAbsorbingPage , or CleanRoomCritic stay clean for years: DataManager Different from Z = Nothing , so when a tired developer comes back on Friday afternoon to add Case N+1 , every random method in the codebase gets dumped into it BlocSignal Bloc event/state discipline AND Signal graph instead of async StreamController queues KaiselAbsorbingPage Page on the route stack AND X, Upstream X × History, Analogs One last question sealed the afternoon. The AI asked: "When a bug report says 'X is broken' , an LLM immediately opens X and starts patching X . How do you know in 30 seconds that X is just the innocent victim—and that someone poisoned the water upstream?" When I watched what my brain actually does in those first 30 seconds, a 2 × 2 matrix popped out: "My first instinct is to recall 'history with X ' and 'history with X upstream'. But that expands laterally to both 'things like X ' and 'things like X 's upstream'." An unscarred LLM only looks at one point : X, Right Now . A veteran engineer immediately expands X, Right Now along two axes— Causal Depth Local vs. Upstream × Analogical Breadth History vs. Things Like It : | Causal Axis \ Memory Axis | 1. Exact History git log / blame | 2. Lateral Analogs "Things Like..." | |---|---|---| | Local Crime Scene X | Q1: History with X "Has X been sitting untouched for 6 months? Then X is the innocent bystander " | Q3: Things Like X ~X "How do sibling views/consumers in this repo handle this input? Does ~X have a guard X missed?" | | Upstream Water Supply Upstream X | Q2: History with X Upstream "Which caller or provider feeding X in the strict digraph was edited two days ago?" | Q4: Things Like X's Upstream ~Upstream X "Where have I seen this shape of upstream poison stale cache hydration, un-awaited disposal in SCAR REGISTRY.md ?" | When Target 15 archaeology fills out all four boxes before writing a plan, the agent never slaps a band-aid on the victim in Q1 when the poison came from Q2, Q3, or Q4 generalize Opcode: How Frontier Labs Can Bake In Half of Scars Today Stepping back and looking at all of those pieces together revealed one final realization: "While attentional chain-of-thought gets most problems solved, LLMs don't have a 'generalize' mechanism. And I wonder if the labs can bake those horizontal nudges in—because if so, half the work of Scars will be done." Think about what happens when an LLM uses 20,000 "Thinking" Chain-of-Thought tokens to solve a bug in LoginPage.dart x 0 : LoginPage.dart passes the test—and then it stops ProfilePage.dart and SettingsPage.dart x 1, x 2 in ~X sitting right next door with the x 0 - for all x in "Things Like X" Now imagine if Google DeepMind, Anthropic, and OpenAI baked a 3-Step Horizontal generalize Nudge directly into RL post-training for