Przejdź do treści
Biblioteka skilli
DevOps i chmura · Planowanie

deploy-strategy

/deploy-strategy

Dobiera z właścicielem strategię wdrożenia w kategoriach kosztu i konsekwencji, a następnie zamienia ją w powtarzalny runbook, po wcześniejszym sprawdzeniu przypiętej wersji wydania.

Licencja
MIT
Ostatnia zmiana repozytorium
18.07.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
4
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 18.07.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Dobiera z właścicielem strategię wdrożenia w kategoriach kosztu i konsekwencji, a następnie zamienia ją w powtarzalny runbook, po wcześniejszym sprawdzeniu przypiętej wersji wydania.

Oryginalny opis (EN)

Use when a product is ready to ship, OR when the user directly asks how or where to deploy or to write a deploy runbook - chooses a deploy strategy with the owner in cost-and-consequence terms, then executes it into a repeatable runbook. Self-checks on disk for a fixed release version first — it warns and offers to fix it, it does not block.

Jak działa

  1. Overview
  2. Process
  3. Red Flags
  4. Next step
Sekcje z nagłówków SKILL.md, w oryginale · 148 linii, 2 809 słów
Podgląd SKILL.md
---
name: deploy-strategy
description: Use when a product is ready to ship, OR when the user directly asks how or where to deploy or to write a deploy runbook - chooses a deploy strategy with the owner in cost-and-consequence terms, then executes it into a repeatable runbook. Self-checks on disk for a fixed release version first — it warns and offers to fix it, it does not block.
---

## Overview

This is phase 8 of the SPP pipeline, but it can also be invoked standalone whenever a product is ready to ship or the owner directly asks how or where to deploy. The release is versioned, tagged, and described — now it has to actually go somewhere the owner's users can reach it. This is the one phase where SPP touches production, and the two steps are not equally weighted: choosing *how* to deploy this specific product is the real work; executing the choice is following a playbook.

Step 1 is deliberately not "pick a hosting provider." It's a decision about ongoing money and ongoing effort that the owner has to live with for the life of the product — same shape as `stack-selection` in phase 3, but now the stakes are real: this isn't a plan on paper, it's what happens when someone actually uses the thing. Options get framed the way `stack-selection` frames them — dollars, update effort, what breaks — never as infrastructure jargon on its own. Step 2 then executes against a reference playbook keyed to `product_type`, but "playbook" means reference material to draw on, not a rigid recipe to follow blind; the specific product still dictates specific choices within it.

Three invariants govern step 2 regardless of which playbook applies, and violating any of them is a defect, not a style preference: secrets never enter git, the deploy has to be repeatable from what's in the repo, and the must-scenarios get smoke-tested on production with evidence before the gate. That last one is the same verification discipline that has run through the whole pipeline — it doesn't stop at the branch boundary just because the target is now a live server instead of a laptop.

The phase's closing gate has two modes, and which one applies is a real decision, not a formality. **`executed`** is the mode described above: a real deploy, a production smoke test, evidence shown at the gate. **`deferred`** exists for exactly the case where the owner wants the strategy locked in and the runbook ready, but isn't deploying yet — a real, legitimate outcome, not a lesser one. Deferred does not require live evidence, because there is no live deployment yet to gather evidence from; what it does require is the same rigor in choosing and documenting the strategy as executed does. Whichever mode closes the gate gets written to `deploy_status` in state, and `post-release` (phase 9) reads it before deciding whether to treat the product as live.

## Process

### 0. Confirm the trigger and read state

This skill runs standalone: when a product is ready to ship, or when the owner directly asks how or where to deploy, or asks for a deploy runbook. No pipeline phase gate is required to start. If `docs/spp/pipeline-state.md` exists, read it for context and inputs:

- `product_type` and `stack` from the state file — what's being deployed and what it's built with.
- `docs/spp/00-idea-brief.md` — budget.
- The `jurisdiction` fields (`jurisdiction.users`, `jurisdiction.author`) from `pipeline-state.md`, filled by `product-discovery`, for data-residency constraints.

If the pipeline-state journal exists, write `current_phase: 8`, `phase_status: in_progress` on starting work. If it doesn't exist, skip the state update — this skill still runs standalone without it.

Steps 1-3 below are **Step 1 — choose the strategy** (the phase's main value); steps 4-8 are **Step 2 — execute**.

### 0.5. Pre-deploy self-check

Run this before choosing a strategy. Check ON DISK:

- Is there a fixed release version? (`docs/spp/07-release-notes.md` exists with a
  semver version recorded.)
- If NO: warn the user — deploying without a fixed version means not knowing what
  exactly is being shipped. Offer to fix the version first via `release-fixation`.
  Proceed only on the user's explicit choice.
- If YES: proceed.

This reads the file directly, not pipeline-state.md.

### 1. Gather inputs

Collect what the decision depends on:

- `product_type` and `stack` — already in state, read them, don't re-ask.
- Budget — already in the brief, read it, don't re-ask.
- **The owner's existing accounts and infrastructure.** Ask this directly — do they already have a hosting account, a domain, a server, a cloud subscription they're paying for and want to reuse? **Assume nothing here.** Defaulting to "they probably have nothing" or "they probably already have a VPS" are both guesses that can send the whole recommendation sideways; ask instead of picking one.
- **Jurisdiction's data-residency requirements** — from `jurisdiction.users` and `jurisdiction.author` in `pipeline-state.md` (filled by `product-discovery`). Some jurisdictions require user data to stay hosted within the users' region; check before proposing options, not after the owner has already picked one that turns out to be non-compliant.

### 2. Propose 2-3 options in owner language

Draft two or three concrete deploy options for this `product_type` and `stack`. For each, and for the comparison between them, state the trade-off the way the owner experiences it, not the way an engineer would describe it:

- **$/month now, and $/month at scale** — what it costs at MVP-sized traffic, and what happens to the bill if usage grows.
- **Update complexity** — is shipping a change one command, or a multi-step ritual the owner has to remember or pay someone to do?
- **Vendor lock-in** — how hard is it to leave this option later if it stops working out?
- **What breaks under a traffic spike** — does it fall over, get expensive, or just work?

Technical terms are allowed, but exactly as in `stack-selection`: every one needs a consequence attached. "A managed platform with autoscaling" is not an option description; "handles a traffic spike automatically, costs more per request when it does" is.

### 3. Gate

Present the options and ask the owner to pick one. This is a decision about money and ongoing maintenance, not a technical one — no infrastructure jargon without a consequence attached, no diff, nothing that requires the owner to already know what the words mean. Alongside the strategy pick, ask the second question this gate actually decides: deploy it now, or lock in the plan and runbook and hold off on going live? Both are legitimate answers — don't frame deferring as the lesser or incomplete option. While the question is outstanding, `phase_status: gate_pending`.

- **On a pick:** write the chosen strategy to `deploy_target` in the state file, log the decision in the Decisions log (date, phase 8, the chosen deploy target, who picked it, and whether the owner wants to deploy now or defer).
- **On requested changes:** if the owner wants a trade-off explained differently, or their answer to step 1 (existing accounts, budget) changes, revise the options and re-ask.

Steps 4-5 below apply either way — the playbook and the invariants shape the runbook regardless of whether the deploy happens now. Step 6 and the gate in step 7 branch on the owner's answer: executed if deploying now, deferred if not.

### 4. Follow the reference playbook for this product_type

Use the playbook matching `product_type` as reference material — a set of options and considerations to draw on, not a script to execute verbatim. The specific product, stack, and owner's existing infrastructure from step 1 still shape the actual choices made within it.

- `web` → `references/web-apps.md`
- `package` → `references/packages-and-plugins.md`
- `tg-bot` → `references/telegram-bots.md`
- `mixed` → consult whichever playbooks match the components actually being deployed; a mixed product might need more than one.

### 5. Hold the invariants

These are non-negotiable regardless of which playbook applies. Violating any one of them is a defect:

- **Secrets never go in git.** Not in a config file, not in a comment, not in a "temporary" commit meant to be reverted later. Use the mechanism the chosen platform provides for secrets (environment variables, a secrets manager, platform-level config) and reference it in the runbook by description, never by value.
- **The deploy is repeatable.** A script or a config file in the repo has to be able to reproduce this deploy from scratch. A deploy that only exists as a sequence of manual clicks the agent remembers is not repeatable, and the owner can't reproduce it either.
- **After deploy, a mandatory smoke test of the must-scenarios on production, with evidence.** This is the same verification discipline that governs the rest of the pipeline, applied to the live product. Pull the must-scenario list from `docs/spp/02-mvp-scope.md` and confirm each one against the actual production deployment — not the dev environment, not a recollection of the acceptance demo. Capture what you observed (output, screenshot, response) as evidence; "I deployed it, it should work" does not satisfy this step.

**When an invariant genuinely doesn't apply, mark it N/A with a stated reason — never silently skip it.** A secretless static product (no backend, no API keys, no user data at rest) has nothing for the secrets invariant to protect; write "secrets: N/A, this product has no secrets" in the runbook rather than leaving the section blank or, worse, inventing a secrets story to fill it. The same applies to any invariant that assumes state this specific product doesn't have. N/A is a documented judgment call, not a loophole — it requires the actual justification, not just the label. **Under `deploy_status: deferred`, the production smoke test does not run now** — there's no live deployment yet to test against — it moves to the moment the deploy actually happens; the runbook says so explicitly rather than pretending the invariant was satisfied early.

### 6. Write the artifact

Write `docs/spp/08-deploy-runbook.md`. What it contains depends on which mode step 3 landed on:

**If `executed`** (deploying now):

- How the product is deployed — the mechanism, not a jargon dump.
- How to update it — the actual steps or command for shipping a future change.
- How to roll back — what to do if a deploy goes wrong.
- $/month — the actual figure at current scale, from the chosen option in step 2.
- Where secrets live — a description of the mechanism and location (a named environment variable in the hosting platform's config panel, for example), never the secret values themselves — or the N/A justification from step 5 if this product has none.

**If `deferred`** (strategy chosen, deploy postponed):

- The chosen strategy and why, same content as the `executed` runbook's deployment-mechanism section, but written as instructions to follow **when** the deploy happens, not a record of what already happened.
- The exact steps to execute at deploy time — this is the runbook the owner or agent follows later; it has to be complete enough to act on without re-deriving the decision.
- $/month, expected — the figure from step 2, labeled as an estimate for when the deploy happens, not a bill already being paid.
- Where secrets will live — the mechanism and location, same as `executed`, described in advance of there being any actual secret value yet — or the N/A justification from step 5.
- **An explicit note that the production smoke test has not run and moves to actual-deploy time.** State this plainly; do not let the absence of a smoke test read as an oversight rather than a deliberate consequence of deferring.

### 7. Gate

The question and what it accepts depend on the mode from step 3:

**If `executed`:** ask the owner **"Product is live at [address/command] — production scenarios verified, here's the evidence — accept?"** Show the smoke-test evidence from step 5, not just the claim that it was done. On acceptance, write `deploy_status: executed` to state.

**If `deferred`:** ask the owner **"Strategy chosen, runbook ready — deploy is postponed for now. Accept the plan as-is?"** This gate requires no live evidence — there is nothing live yet to show evidence of — but it does require the runbook to be genuinely complete and actionable, not a placeholder for future work. On acceptance, write `deploy_status: deferred` to state.

<HARD-GATE>Do not present a `deferred` runbook as if it were `executed`, and do not ask the `executed` gate question ("product is live") when no deploy has actually happened. The gate question and the state written must match the actual mode chosen in step 3 — conflating them means the owner accepts a claim about production that isn't true.</HARD-GATE>

While either question is outstanding, `phase_status: gate_pending`.

- **On acceptance (either mode):** set `phase_status: approved`, log the decision in the Decisions log (date, phase 8, the mode, deploy accepted or deferred, the live address if executed, who accepted it).
- **On requested changes:** if `executed` and a must-scenario failed the smoke test, or the owner spots something wrong once they look at the live product — fix it, redeploy, re-run the smoke test, and re-ask. Do not soften the gate to "should be fine now" — re-verify with fresh evidence. If `deferred` and the owner wants the runbook adjusted, or actually wants to deploy now after all, revise accordingly (a `deferred` gate can flip to `executed` mid-conversation if the owner changes their mind — go back to step 4's playbook and step 5's live smoke-test requirement in that case) and re-ask.

### 8. Hand off

This skill's job ends at a release that's either deployed-and-verified (`executed`) or strategy-locked-and-documented (`deferred`). Do not start monitoring or feedback-loop setup yourself. Hand off `deploy_status` along with everything else — `post-release` reads it to decide whether the product is actually live. The explicit next-step transition for the owner is in the closing **Next step** section of this file.

## Red Flags

| Thought | Reality |
|---|---|
| "They're probably a solo hobbyist with nothing set up, I'll just recommend the free tier" | Existing accounts and infrastructure must be asked about, never assumed. Guessing wrong here means recommending a redundant new account, missing a compliance-relevant constraint the owner's current setup already handles, or ignoring money they're already spending. |
| "I'll drop the API key straight into the config file, it's just for now" | Secrets never go in git, full stop — there is no "just for now" exception. Use the platform's secrets mechanism and reference it in the runbook by description, not by value. |
| "I clicked through the hosting dashboard to set this up, it's live, good enough" | The deploy has to be repeatable from a script or config in the repo. A sequence of manual clicks that only exists in the agent's memory can't be reproduced by the owner or by the agent itself next time — that's a defect, not a shortcut. |
| "The acceptance demo already showed this works, I don't need to re-test on prod" | The smoke test after deploy is mandatory and separate from the acceptance demo — a working branch and a working production deployment are different claims. Verify the actual must-scenarios against the actual live deployment, with evidence, before the gate. |
| "I'll describe the options as 'serverless vs a VPS with a reverse proxy'" | Every option must be phrased in $/month, update effort, lock-in, and spike behavior — the same owner-consequence discipline as `stack-selection`. Infrastructure jargon without an attached consequence tells a non-developer nothing they can decide on. |
| "The playbook says to use provider X, so that's what we're using" | The reference playbooks are material to draw on, not a rigid recipe — the actual choice still depends on this product's stack, budget, and the owner's existing infrastructure from step 1. Following a playbook blindly can contradict what step 1 already established. |
| "We're deferring, but I'll phrase the gate as 'product is live' so the owner feels progress" | The gate question must match `deploy_status`. Asking "is it live" when nothing is deployed makes the owner accept a false claim about production — that's the exact dishonesty the verification discipline elsewhere in this pipeline exists to prevent. |
| "This product has secrets somewhere probably, I'll just write something plausible for the runbook's secrets section" | N/A requires a real, stated reason ("this product has no secrets") — never a filled-in placeholder to make the section look complete. If you're not sure whether the product has secrets, that's a reason to check, not a reason to guess and write it down. |
| "Deferred means we skip the smoke test entirely, no need to mention it again" | Deferred moves the smoke test to actual-deploy time — it doesn't cancel it. The runbook has to say so explicitly, so a future reader (owner or agent) knows the test is still owed, not silently waived. |

## Next step

When this stage is complete, tell the user in their own language that:
- this stage is done;
- the next logical step is the `post-release` skill;
- they should start it in a fresh chat so that skill gets clean context.

Do not auto-invoke the next skill. The user drives the transition — offer, do not proceed.
Pliki w paczce (4)
  • SKILL.md 17 KB
  • references/packages-and-plugins.md 7 KB
  • references/telegram-bots.md 7 KB
  • references/web-apps.md 7 KB

Wersje

W bazie nie ma innych skilli o nazwie deploy-strategy.

Migawka bazy z 28.10.2026 · wersja paczki 1c118d8f5cbd (skrót SHA-256 całej paczki)

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 90runbook-generator
    Utrwala operacyjny przepływ pracy, procedurę wydania, wzorzec incydentu lub proces wsparcia jako powtarzalny runbook.
  • 90runbook-generator
    Utrwala operacyjny przepływ pracy, procedurę wydania, wzorzec incydentu lub proces wsparcia jako powtarzalny runbook.
  • 100release-fixation
    Sprawdza gotowość gałęzi do wydania, ustala wersję semver i pisze notatki zrozumiałe dla właściciela produktu.
  • 84runbook-assistant
    Prowadzi pisanie, utrzymanie i ćwiczenie runbooków oraz audyt ich pokrycia po incydentach.
  • 100runbook-assistant
    Prowadzi pisanie, utrzymanie i ćwiczenie runbooków: planowanie ćwiczeń, audyt pokrycia i aktualizacje po incydentach.
  • 90author-the-runbook
    Pisze runbook do wdrażania, obsługi i odzyskiwania usługi, tak by kompetentna osoba spoza zespołu poradziła sobie sama.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.