<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>How-to guides on vshuraeff — Infrastructure. DevOps. Cloud.</title><link>https://vshuraeff.cloud/garden/how-to/</link><description>Recent content in How-to guides on vshuraeff — Infrastructure. DevOps. Cloud.</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://vshuraeff.cloud/garden/how-to/index.xml" rel="self" type="application/rss+xml"/><item><title>How to apply GARDEN to a new project</title><link>https://vshuraeff.cloud/garden/how-to/apply-to-new-project/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://vshuraeff.cloud/garden/how-to/apply-to-new-project/</guid><description>&lt;p&gt;This guide walks through setting up a greenfield project so that it follows the six
GARDEN principles from the first commit. It assumes you already understand what GARDEN
is; for the rationale behind each step, see
&lt;a href="https://vshuraeff.cloud/garden/reference/principles/"&gt;GARDEN principles&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="1-choose-a-slice-map-before-writing-code"&gt;1. Choose a slice map before writing code&lt;/h2&gt;
&lt;p&gt;List the capabilities your system must support (for example: &lt;code&gt;create-order&lt;/code&gt;,
&lt;code&gt;cancel-order&lt;/code&gt;, &lt;code&gt;list-orders&lt;/code&gt;). Each capability becomes one atomic vertical slice
(&lt;strong&gt;A&lt;/strong&gt;): it owns its entry point, logic, data access, and tests.&lt;/p&gt;</description></item><item><title>How to retrofit GARDEN onto a legacy codebase</title><link>https://vshuraeff.cloud/garden/how-to/retrofit-legacy-codebase/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://vshuraeff.cloud/garden/how-to/retrofit-legacy-codebase/</guid><description>&lt;p&gt;This guide covers incremental adoption of GARDEN in an existing codebase that was not
built with agent-first principles. Do not attempt a rewrite; retrofit through
measurement, strangler-style extraction, and ratcheted enforcement. For the principles
being applied, see &lt;a href="https://vshuraeff.cloud/garden/reference/principles/"&gt;GARDEN principles&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="1-measure-before-changing-anything"&gt;1. Measure before changing anything&lt;/h2&gt;
&lt;p&gt;Establish a baseline so you can tell whether the retrofit is working.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Action: measure the search-miss rate (how often an agent fails to find an existing
utility and reimplements it), the duplication level (copy-pasted and cloned code as a
share of changed lines), and current gate coverage (share of stated invariants that
are checked by a type, lint rule, test, or CI job rather than by prose).&lt;/li&gt;
&lt;li&gt;Acceptance signal: you have three baseline numbers recorded and dated, so later passes
can show delta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Gather the search-miss rate by sampling recent agent sessions or pull requests and
checking whether a new function duplicates an existing one that a grep for its purpose
would have surfaced. Gather duplication from a clone-detection tool run once over the
current tree. Gather gate coverage by listing the invariants stated in existing docs or
comments and checking, one by one, whether a type, lint rule, or test currently fails if
the invariant is violated.&lt;/p&gt;</description></item><item><title>How to set up verification gates</title><link>https://vshuraeff.cloud/garden/how-to/set-up-verification-gates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://vshuraeff.cloud/garden/how-to/set-up-verification-gates/</guid><description>&lt;p&gt;This guide covers building the deterministic verification pipeline (&lt;strong&gt;D&lt;/strong&gt;) that lets a
codebase avoid self-certification: an agent's own assessment is never sufficient, gates
decide. For the underlying rule set, see
&lt;a href="https://vshuraeff.cloud/garden/reference/principles/"&gt;GARDEN principles&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="1-encode-invariants-as-types-first"&gt;1. Encode invariants as types first&lt;/h2&gt;
&lt;p&gt;The cheapest and earliest gate is the type system. Push as many invariants as possible
into types before reaching for lint or tests.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Action: for every invariant currently stated only in prose or a comment, check whether
it can be expressed as a type (a named shape, an enum instead of a string, a
non-nullable field instead of a documented &amp;quot;must not be null&amp;quot;).&lt;/li&gt;
&lt;li&gt;Acceptance signal: a change that violates the invariant fails to type-check, without
running any test.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-add-lint-rules-for-what-types-cannot-express"&gt;2. Add lint rules for what types cannot express&lt;/h2&gt;
&lt;p&gt;Import boundaries, naming conventions, and banned constructs are architecture decisions
that types alone do not enforce. Treat lint configuration as executable architecture
specification.&lt;/p&gt;</description></item><item><title>How to review code as an agent</title><link>https://vshuraeff.cloud/garden/how-to/review-code-as-agent/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://vshuraeff.cloud/garden/how-to/review-code-as-agent/</guid><description>&lt;p&gt;This guide is written to be used directly as a review prompt for an agent conducting a
GARDEN-lens code review. It assumes the deterministic gates described in
&lt;a href="https://vshuraeff.cloud/garden/how-to/set-up-verification-gates/"&gt;How to set up verification gates&lt;/a&gt; already ran. For the rule
definitions referenced below, see
&lt;a href="https://vshuraeff.cloud/garden/reference/principles/"&gt;GARDEN principles&lt;/a&gt; and
&lt;a href="https://vshuraeff.cloud/garden/reference/checklist/"&gt;GARDEN compliance checklist&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="1-check-what-the-gates-already-covered"&gt;1. Check what the gates already covered&lt;/h2&gt;
&lt;p&gt;Before reading a single line for review, check the CI results for this change.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Action: read the type check, lint, test, and clone-detection results for the change
under review.&lt;/li&gt;
&lt;li&gt;Acceptance signal: you can state, for each of those four gates, whether it ran and
whether it passed, before writing any review finding.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do not re-litigate anything a passing gate already proved. If lint enforces an import
boundary and lint passed, do not raise a finding about that boundary; instead, look for
what the gates cannot see. If a gate did not run at all (for example, no contract test
exists for the slice being changed), treat that absence itself as a finding under the D
lens in step 5, rather than trying to manually verify what the missing gate would have
checked.&lt;/p&gt;</description></item><item><title>How to install and manage the GARDEN plugin</title><link>https://vshuraeff.cloud/garden/how-to/install-the-plugin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://vshuraeff.cloud/garden/how-to/install-the-plugin/</guid><description>&lt;p&gt;GARDEN supports Claude Code and Codex CLI. &lt;code&gt;uv&lt;/code&gt; must be on &lt;code&gt;PATH&lt;/code&gt; for either harness:
bundled Python entry points run through &lt;code&gt;uv run --no-project&lt;/code&gt;. See &lt;a href="https://vshuraeff.cloud/garden/reference/principles/"&gt;GARDEN principles&lt;/a&gt; for the methodology.&lt;/p&gt;
&lt;h2 id="1-confirm-the-prerequisite"&gt;1. Confirm the prerequisite&lt;/h2&gt;
&lt;p&gt;Install &lt;code&gt;uv&lt;/code&gt; and make it available on &lt;code&gt;PATH&lt;/code&gt; before adding the plugin in either harness.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Action: confirm that &lt;code&gt;uv&lt;/code&gt; is available in the shell used for Claude Code or Codex CLI.&lt;/li&gt;
&lt;li&gt;Acceptance signal: &lt;code&gt;uv&lt;/code&gt; resolves on &lt;code&gt;PATH&lt;/code&gt; before any bundled Python entry point runs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-add-the-marketplace"&gt;2. Add the marketplace&lt;/h2&gt;
&lt;h3 id="claude-code"&gt;Claude Code&lt;/h3&gt;
&lt;p&gt;Add the GARDEN marketplace. Pass &lt;code&gt;--scope user|project|local&lt;/code&gt; to choose where it is
registered; the default is &lt;code&gt;user&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>