<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Skills on Ocarina — manual</title>
    <link>https://mojo-molotov.github.io/from-ocarina-to-igor/series/skills/</link>
    <description>Recent content in Skills on Ocarina — manual</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <lastBuildDate>Tue, 02 Jun 2026 15:45:15 +0200</lastBuildDate>
    <atom:link href="https://mojo-molotov.github.io/from-ocarina-to-igor/series/skills/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>09.03.01 — Review skills</title>
      <link>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/01-review/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/01-review/</guid>
      <description>&lt;h1 id=&#34;090301review-skills&#34;&gt;09.03.01 — Review skills&lt;a class=&#34;anchor&#34; href=&#34;#090301review-skills&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;&lt;strong&gt;Static&lt;/strong&gt; reads, surface findings. A large family. Lets the AI &lt;em&gt;review&lt;/em&gt; its project systematically.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;listing-potentially-non-exhaustive&#34;&gt;Listing (potentially non-exhaustive)&lt;a class=&#34;anchor&#34; href=&#34;#listing-potentially-non-exhaustive&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Skill&lt;/th&gt;&#xA;          &lt;th&gt;Target&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-spec-gaps&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Clarification questions on the FRDs&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-watcher-misuse&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Verifies the &amp;ldquo;&lt;em&gt;negative-only&lt;/em&gt;&amp;rdquo; principle of &lt;code&gt;watcher.report(...)&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-compartmentalisation-leaks&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Detects URLs, selectors, magic numbers in wrong places&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-dead-code&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Detects unused connectors / POMs / scenarios / suites / fragments / constants&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-report&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Classifies each FAIL / SKIP of an execution&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-type-ignore&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Audits &lt;code&gt;# type: ignore&lt;/code&gt;s (are they justified?)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-match-candidates&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Spots places where a &lt;code&gt;match&lt;/code&gt; (Python, &lt;em&gt;pattern matching&lt;/em&gt;) could be used instead of &lt;code&gt;if&lt;/code&gt; &lt;code&gt;elif&lt;/code&gt; &lt;code&gt;elif&lt;/code&gt; &lt;code&gt;if&lt;/code&gt; &lt;code&gt;if&lt;/code&gt; &lt;code&gt;elif&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-unverified-transitions&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Verifies that every &lt;em&gt;page transition&lt;/em&gt; has a &lt;code&gt;verify&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-submit-dispatchers&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Audits input-confirmation methods (click vs enter key&amp;hellip;)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-comment-drift&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Detects comments that have drifted from the code&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-suite-stability&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Evaluates a suite&amp;rsquo;s stability (proportion of retries, transient_errors hits)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-intent-collisions&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Detects tests that overwrite each other (conflicting intents) and asks/proposes clarifications&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-watcher-emissions&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Audits watcher emissions (volume, dedup, relevance)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;review-hierarchy-naming&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Audits the test-hierarchy naming (&lt;code&gt;TestCycle&lt;/code&gt; / &lt;code&gt;TestCampaign&lt;/code&gt; / &lt;code&gt;TestSuite&lt;/code&gt; / &lt;code&gt;Test&lt;/code&gt;) for the lazy-naming antipattern where a child carries the parent&amp;rsquo;s name&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;review-dead-code&#34;&gt;&lt;code&gt;review-dead-code&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#review-dead-code&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : test base&#xA;output : list of unused elements (connectors / POMs / scenarios / fragments / constants)&#xA;         + per-element recommendation:&#xA;            - delete&#xA;            - move to incubator (&amp;lt;root-source&amp;gt;/incubator/, dependency tree preserved)&#xA;            - keep (justify)&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;review-report&#34;&gt;&lt;code&gt;review-report&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#review-report&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : a recent execution (logs + reports)&#xA;output : per-test classification:&#xA;            - PASS                  (nothing to do)&#xA;            - SKIP                  (why?)&#xA;            - intentional gap FAIL  (G-DATA-*, G-SEC-*, ...)&#xA;            - cross-browser FAIL    (B-BROWSER-*)&#xA;            - transient FAIL        (A-ENV-*)&#xA;            - regression            ⚠️ ALERT&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;review-watcher-misuse&#34;&gt;&lt;code&gt;review-watcher-misuse&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#review-watcher-misuse&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : all watcher.report(...) calls&#xA;output : list of reports that look positive (&amp;#34;success&amp;#34;, &amp;#34;completed&amp;#34;, &amp;#34;ok&amp;#34;, ...)&#xA;         → recommendation: remove or rephrase as negative&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;review-comment-drift&#34;&gt;&lt;code&gt;review-comment-drift&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#review-comment-drift&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : every code comment&#xA;output : list of comments that no longer match the adjacent code&#xA;         (typical: comment mentions foo, code mentions bar)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Helps remove stale comments.&lt;br&gt;&#xA;&amp;ldquo;&lt;em&gt;Teach the pattern, not the symptom&lt;/em&gt;.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>09.03.02 — Analyse skills</title>
      <link>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/02-analyse/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/02-analyse/</guid>
      <description>&lt;h1 id=&#34;090302analyse-skills&#34;&gt;09.03.02 — Analyse skills&lt;a class=&#34;anchor&#34; href=&#34;#090302analyse-skills&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;&lt;strong&gt;Dynamic&lt;/strong&gt; analyses: use the logs / reports of a recent execution to diagnose a failure. Two root-cause skills sit in front of the family — &lt;code&gt;diagnose-root-cause&lt;/code&gt; for a deterministic red, &lt;code&gt;diagnose-flake-root-cause&lt;/code&gt; for an intermittent one — and route to the controlled &lt;code&gt;analyse-*&lt;/code&gt; experiments.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;listing-potentially-non-exhaustive&#34;&gt;Listing (potentially non-exhaustive)&lt;a class=&#34;anchor&#34; href=&#34;#listing-potentially-non-exhaustive&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Skill&lt;/th&gt;&#xA;          &lt;th&gt;Target&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;diagnose-root-cause&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Structured RCA for a &lt;strong&gt;deterministic&lt;/strong&gt; red: re-derive, the synthetic-to-real ladder, root cause sorted into five buckets&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;diagnose-flake-root-cause&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Structured RCA for an &lt;strong&gt;intermittent&lt;/strong&gt; failure (a flake): failure rate, signature, correlation; orchestrates the &lt;code&gt;analyse-*&lt;/code&gt; experiments&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;analyse-flakiness&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Widens the &lt;code&gt;transient_errors&lt;/code&gt; net; chronic deaths are real flakes&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;analyse-fixture-flakiness&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Instruments setup/teardown; surfaces cross-test contaminations&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;analyse-watcher-flakiness&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Analyzes watcher reliability (volume, dedup, false positives)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;analyse-screenshot-flakiness&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Groups screenshots by &lt;code&gt;(test, step, browser)&lt;/code&gt;, detects differences&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;diagnose-root-cause&#34;&gt;&lt;code&gt;diagnose-root-cause&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#diagnose-root-cause&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : a deterministic red (fails every run)&#xA;output : structured root-cause analysis:&#xA;            - re-derive the failure, don&amp;#39;t inherit prior assumptions&#xA;            - climb the synthetic-to-real ladder (fake driver → real browser)&#xA;            - read the source, confirm with a probe&#xA;            - root cause sorted into five buckets&#xA;         hands off to diagnose-flake-root-cause if the failure proves intermittent&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;diagnose-flake-root-cause&#34;&gt;&lt;code&gt;diagnose-flake-root-cause&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#diagnose-flake-root-cause&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : an intermittent failure (a flake)&#xA;output : distribution-based root-cause analysis:&#xA;            - establish a failure rate (the distribution is the evidence)&#xA;            - pin the signature, correlate&#xA;            - route to the right analyse-* experiment, raise the rate to confirm&#xA;            - classify into five flake buckets&#xA;         the orchestrator of the analyse-* family&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;analyse-flakiness&#34;&gt;&lt;code&gt;analyse-flakiness&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#analyse-flakiness&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : logs of the last N runs&#xA;output : list of tests that retry often (by % of retries)&#xA;         + recommendation:&#xA;            - add an exception to the transient_errors tuple&#xA;            - investigate a particular test (the issue might come from the test itself)&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;analyse-fixture-flakiness&#34;&gt;&lt;code&gt;analyse-fixture-flakiness&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#analyse-fixture-flakiness&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : tests with setup/teardown&#xA;output : tests whose setup fails often&#xA;         + recommendation:&#xA;            - verify setup idempotency&#xA;            - check teardown is clean (otherwise cross-test contamination)&#xA;            - move the seed out of setup into a manual init if too fragile&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;analyse-watcher-flakiness&#34;&gt;&lt;code&gt;analyse-watcher-flakiness&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#analyse-watcher-flakiness&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : watcher.report(...) logs over N runs&#xA;output : watchers with abnormal reporting:&#xA;            - too many emissions (dedup issue)&#xA;            - no emissions (the watcher is useless)&#xA;            - false positives (expected element reported as intruder)&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;analyse-screenshot-flakiness&#34;&gt;&lt;code&gt;analyse-screenshot-flakiness&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#analyse-screenshot-flakiness&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : screenshots from N runs, grouped by (test, step, browser)&#xA;output : visual flakiness:&#xA;            - tests whose screenshots vary abnormally between runs&#xA;            - tests that pass but whose look changes&#xA;            - identify whether the variation is semantic (real diff) or cosmetic&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Uses heuristics (hash, dimensions, dominant palette). Not a real image diff.&lt;/p&gt;</description>
    </item>
    <item>
      <title>09.03.03 — Black-hat skills</title>
      <link>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/03-black-hat/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/03-black-hat/</guid>
      <description>&lt;h1 id=&#34;090303black-hat-skills-6&#34;&gt;09.03.03 — Black-hat skills (6)&lt;a class=&#34;anchor&#34; href=&#34;#090303black-hat-skills-6&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;&lt;strong&gt;Ideations&lt;/strong&gt; of business logic vulnerabilities — no execution: &amp;ldquo;&lt;em&gt;security testing is functional and static, never active&lt;/em&gt;&amp;rdquo;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;listing-potentially-non-exhaustive&#34;&gt;Listing (potentially non-exhaustive)&lt;a class=&#34;anchor&#34; href=&#34;#listing-potentially-non-exhaustive&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Skill&lt;/th&gt;&#xA;          &lt;th&gt;Target&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;business-logic-vulnerability-ideation&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Break the product through legitimate-looking but malicious usage paths&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;incoherence-attack-ideation&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Each step taken alone looks innocent; but combinations of these steps can cause an inconsistency in the system&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;persistence-attack-ideation&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Repeated attempts at a blocked action&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;permission-appropriateness-audit&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Is the access model itself appropriate?&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;bfcache-exposure-ideation&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;BFCache attacks&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;lateral-resource-ideation&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;IDOR via the address bar only&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;perimeter&#34;&gt;Perimeter&lt;a class=&#34;anchor&#34; href=&#34;#perimeter&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;All these skills &lt;em&gt;imagine&lt;/em&gt; attacks &lt;strong&gt;the AI&lt;/strong&gt; could phrase.&lt;/p&gt;</description>
    </item>
    <item>
      <title>09.03.04 — Comprehend skills</title>
      <link>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/04-comprehend/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/04-comprehend/</guid>
      <description>&lt;h1 id=&#34;090304comprehend-skills&#34;&gt;09.03.04 — Comprehend skills&lt;a class=&#34;anchor&#34; href=&#34;#090304comprehend-skills&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;Skills that help the AI &lt;strong&gt;understand&lt;/strong&gt; a project or ecosystem before acting.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;listing-potentially-non-exhaustive&#34;&gt;Listing (potentially non-exhaustive)&lt;a class=&#34;anchor&#34; href=&#34;#listing-potentially-non-exhaustive&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Skill&lt;/th&gt;&#xA;          &lt;th&gt;Target&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;assess-test-base&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Catalogs the existing test base&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;assess-ecosystem&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Bounded public research, capped by a token budget&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;assess-impact&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Forward impact analysis: a change&amp;rsquo;s blast radius through the dependency graph&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;understand-sut-constraints&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Understands the SUT&amp;rsquo;s &amp;ldquo;boundaries&amp;rdquo; so as not to exceed them&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;understand-ocarina&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Routes by question class: Holy Book for reference, the from-ocarina-to-igor book for intent; then Ocarina source + the adapter-matched worked example&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;understand-ocarina&#34;&gt;&lt;code&gt;understand-ocarina&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#understand-ocarina&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : user question — routed by class:&#xA;            - &amp;#34;how do I do a match_page?&amp;#34;        (reference: what a primitive is) → Holy Book&#xA;            - &amp;#34;why is the suite built on Railway?&amp;#34; (intent / cartography / why)    → the from-ocarina-to-igor book&#xA;output : Claude loads, by question class:&#xA;            - reference  → relevant Holy Book pages (https://mojo-molotov.github.io/ocarina-holy-book)&#xA;            - intent     → relevant chapters of the from-ocarina-to-igor book (https://mojo-molotov.github.io/from-ocarina-to-igor/)&#xA;            - behaviour  → Ocarina source clone, if the docs don&amp;#39;t cover it&#xA;            - shape      → the worked example matching the project&amp;#39;s driver adapter:&#xA;                              Selenium   → ocarina-example, ocarina-with-ai-example&#xA;                              Playwright → ocarina-with-playwright-example&#xA;         then answers with citations (tier + page/chapter URL or file:line)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;SKILL.md&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>09.03.05 — Pick skills</title>
      <link>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/05-pick/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/05-pick/</guid>
      <description>&lt;h1 id=&#34;090305pick-skills&#34;&gt;09.03.05 — Pick skills&lt;a class=&#34;anchor&#34; href=&#34;#090305pick-skills&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;Picking artifacts (screenshots, logs, reports). &lt;strong&gt;Always by mtime, never by filename.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;listing-potentially-non-exhaustive&#34;&gt;Listing (potentially non-exhaustive)&lt;a class=&#34;anchor&#34; href=&#34;#listing-potentially-non-exhaustive&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Skill&lt;/th&gt;&#xA;          &lt;th&gt;Target&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;pick-screenshots&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Picks the most recent screenshots (by mtime), contextualizing them with logs where possible&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;pick-logs&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Picks the most recent logs (by mtime)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;pick-reports&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Picks the most recent DOCX/JSON reports (by mtime)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;mtime&#34;&gt;&amp;ldquo;&lt;em&gt;mtime&lt;/em&gt;&amp;rdquo;&lt;a class=&#34;anchor&#34; href=&#34;#mtime&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Holy Book quote:&lt;/p&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;&lt;strong&gt;Mtime, not filename.&lt;/strong&gt; UUID suffixes are random; &lt;code&gt;pick-*&lt;/code&gt; sorts by mtime.&lt;/p&gt;</description>
    </item>
    <item>
      <title>09.03.06 — Author skills</title>
      <link>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/06-author/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/06-author/</guid>
      <description>&lt;h1 id=&#34;090306author-skills&#34;&gt;09.03.06 — Author skills&lt;a class=&#34;anchor&#34; href=&#34;#090306author-skills&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;Skills that &lt;strong&gt;produce a deliverable&lt;/strong&gt;. Tests, probes, docs, reports.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;listing-potentially-non-exhaustive&#34;&gt;Listing (potentially non-exhaustive)&lt;a class=&#34;anchor&#34; href=&#34;#listing-potentially-non-exhaustive&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Skill&lt;/th&gt;&#xA;          &lt;th&gt;Target&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;empiricism&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Verify before encoding; don&amp;rsquo;t crush an intentionally failing gap test&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;write-a-probe&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Throwaway &amp;ldquo;probe&amp;rdquo; script, gitignored&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;write-test-strategy&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Generates the test strategy document from the suite&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;extend-coverage&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Extends coverage from existing heritage&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;update-frd-and-tests&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Propagates a spec update&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;manual-reproduction-guide&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Writes a step-by-step reproduction scenario executable by a human&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;manage-backlog&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;BACKLOG.md&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;pr-report&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;PR report adapted to context&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;plan-test-effort&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;First-pass test-effort plan: graded requirements, lightweight risk register, relative effort weights (S / M / L), open questions&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;empiricism&#34;&gt;&lt;code&gt;empiricism&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#empiricism&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : user intent (&amp;#34;write a test that asserts X&amp;#34;)&#xA;output : before encoding X:&#xA;            1. empirically verify that X is true&#xA;                - probe&#xA;                - gh api on the source code&#xA;                - curl -v to inspect HTTP responses&#xA;                - ...&#xA;            2. if X confirmed → encode&#xA;            3. if X false → correct intent&#xA;            4. if X ambiguous → ask the human&lt;/code&gt;&lt;/pre&gt;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;&amp;ldquo;&lt;em&gt;Fair point, I&amp;rsquo;m assuming. Let me verify empirically.&lt;/em&gt;&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>09.03.07 — Refactor skills</title>
      <link>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/07-refactor/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/07-refactor/</guid>
      <description>&lt;h1 id=&#34;090307refactor-skills&#34;&gt;09.03.07 — Refactor skills&lt;a class=&#34;anchor&#34; href=&#34;#090307refactor-skills&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;Skills that &lt;strong&gt;refactor&lt;/strong&gt; the existing automated-test base.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;listing-potentially-non-exhaustive&#34;&gt;Listing (potentially non-exhaustive)&lt;a class=&#34;anchor&#34; href=&#34;#listing-potentially-non-exhaustive&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Skill&lt;/th&gt;&#xA;          &lt;th&gt;Target&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;refactor-fragmentation&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;DRY based on user preference&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;introduce-pom-retries&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;POM-internal retries, with split (first-try + with-retries)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;refactor-fragmentation&#34;&gt;&lt;code&gt;refactor-fragmentation&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#refactor-fragmentation&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : the test base&#xA;output : DRY refactor suggestions:&#xA;            - blocks repeated in 3+ scenarios → extract into a fragment&#xA;            - near-identical connectors → extract a parameterized connector&#xA;            - repeated log+screenshot sequences → extract a helper&#xA;         + per-case recommendation&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>09.03.08 — State skill</title>
      <link>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/08-state/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/08-state/</guid>
      <description>&lt;h1 id=&#34;090308state-skill&#34;&gt;09.03.08 — State skill&lt;a class=&#34;anchor&#34; href=&#34;#090308state-skill&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;A single skill: &lt;code&gt;question-state&lt;/code&gt;. Interrogates the environment before believing a result.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;the-skill&#34;&gt;The skill&lt;a class=&#34;anchor&#34; href=&#34;#the-skill&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : a surprising result (&amp;#34;the test fails&amp;#34;)&#xA;output : a series of questions about state:&#xA;            - which browser are we running on?&#xA;            - which commit?&#xA;            - is the SUT warm or cold?&#xA;            - is Redis available?&#xA;            - what&amp;#39;s the configured wait-timeout?&#xA;            - what&amp;#39;s the driver version?&#xA;            - does ChromeDriver have its password-manager-off fix?&#xA;            - is this an isolated run or a parallel run?&#xA;            - are other tests touching the same SUT resources?&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;approach&#34;&gt;Approach&lt;a class=&#34;anchor&#34; href=&#34;#approach&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>09.03.09 — Setup skills</title>
      <link>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/09-setup/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/09-setup/</guid>
      <description>&lt;h1 id=&#34;090309setup-skills&#34;&gt;09.03.09 — Setup skills&lt;a class=&#34;anchor&#34; href=&#34;#090309setup-skills&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;Two skills: &lt;code&gt;setup-environment&lt;/code&gt; (onboarding a new contributor, human or AI) and &lt;code&gt;profile-environment&lt;/code&gt; (governing how much latitude the engagement grants the LLM). Both feed the suite&amp;rsquo;s assembled &lt;code&gt;CLAUDE.md&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;the-skill&#34;&gt;The skill&lt;a class=&#34;anchor&#34; href=&#34;#the-skill&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : a fresh repo&#xA;output : onboarding steps:&#xA;            1. venv&#xA;            2. pip install (dev deps + ocarina)&#xA;            3. ruff / mypy / pre-commit installed&#xA;            4. CLAUDE.local.md created (paths requested from user)&#xA;            5. runner smoke-check (minimal test that validates everything works)&#xA;            6. pre-commit loop tested&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;step-1-venv&#34;&gt;Step 1: venv&lt;a class=&#34;anchor&#34; href=&#34;#step-1-venv&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python -m venv .venv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8be9fd;font-style:italic&#34;&gt;source&lt;/span&gt; .venv/bin/activate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;step-2-pip-install&#34;&gt;Step 2: pip install&lt;a class=&#34;anchor&#34; href=&#34;#step-2-pip-install&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pip install . ruff mypy mypy-extensions typing-extensions pre-commit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;step-3-dev-tooling&#34;&gt;Step 3: dev tooling&lt;a class=&#34;anchor&#34; href=&#34;#step-3-dev-tooling&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pre-commit install --config .pre-commit-config.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;step-4-claudelocalmd&#34;&gt;Step 4: &lt;code&gt;CLAUDE.local.md&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#step-4-claudelocalmd&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;CLAUDE.local.md&lt;/code&gt; is &lt;strong&gt;gitignored&lt;/strong&gt; and contains machine-specific paths.&lt;/p&gt;</description>
    </item>
    <item>
      <title>09.03.10 — Run skills</title>
      <link>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/10-run/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mojo-molotov.github.io/from-ocarina-to-igor/09-holy-book/03-skills/10-run/</guid>
      <description>&lt;h1 id=&#34;090310run-skills&#34;&gt;09.03.10 — Run skills&lt;a class=&#34;anchor&#34; href=&#34;#090310run-skills&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;Surface the choices to make &lt;em&gt;before&lt;/em&gt; a local dispatch, compose the command, and hand it back. The skill never launches the run itself.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;listing-potentially-non-exhaustive&#34;&gt;Listing (potentially non-exhaustive)&lt;a class=&#34;anchor&#34; href=&#34;#listing-potentially-non-exhaustive&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Skill&lt;/th&gt;&#xA;          &lt;th&gt;Target&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;propose-visual-review&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Offer headed (&lt;code&gt;--not-headless&lt;/code&gt;) vs headless (CI-shaped) before a run, then compose the command&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;propose-visual-review&#34;&gt;&lt;code&gt;propose-visual-review&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#propose-visual-review&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;input  : an upcoming local run&#xA;output : the headed vs headless choice:&#xA;            - --not-headless: watch the browser, useful when debugging a flaky flow&#xA;            - headless (CI-shaped): faster, matches what CI does&#xA;         + the trade-off and what to watch for during a headed run&#xA;         + the composed command, handed back for the user to launch&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;role&#34;&gt;Role&lt;a class=&#34;anchor&#34; href=&#34;#role&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Surface&lt;/strong&gt; the pre-run choice; explain the trade-off.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Compose&lt;/strong&gt; the command.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Don&amp;rsquo;t launch&lt;/strong&gt; it — the user runs it.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
