본문으로 건너뛰기
cccskills
무료GitHub에 공개

devops

Use for pull-request, merge, version and release mechanics in the Syntropic137 repo, and for CI or release-pipeline failures. Trigger phrases include "open a PR", "submit my changes", "address the review comments", "Copilot left comments", "merge this PR", "push this nit straight to main", "CI is red", "the release gate failed", "smoke test broke", "why is this PR BLOCKED", "bump the version", "cut a release", "release v1.x", "write the release notes", "main -> release PR", "approve the release gate", "the release published a bad asset", "triage the open PRs", "PR backlog", "which PRs are ready to merge", "merge order", "DORA metrics", "deploy frequency", "lead time", "change failure rate", "time to restore", "why didn't the issue auto-close". Covers trunk-based `main`, the `release` branch, local gates (`just qa-ci`, `just preflight`), GitHub Actions gates, review and merge policy, and post-release verification. Do NOT use for deciding what to dispatch, running the orchestrator loop, or deciding when to deploy a beta or run a pit stop (see `orchestrating`); for whether a task belongs in a workspace or locally (see `dogfooding`); for using the `syn` CLI as an end user (see the syntropic137 plugin skills).

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구GitHub
설치 방법 보기

포함된 파일(9)

  • SKILL.md13.4 KB
  • agent_ci_triage.md3.7 KB
  • agent_dora_snapshot.md4.5 KB
  • agent_hotfix.md1.7 KB
  • agent_mutation_evidence.md5.5 KB
  • agent_pr_backlog.md3.4 KB
  • agent_pr.md4.6 KB
  • agent_release.md6.1 KB
  • agent_review_pass.md2.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

DevOps: Syntropic137 PR, merge and release

Overview

Trunk-based, two branches. Every PR targets main. release accepts PRs from main only, and the merge itself is the release trigger (release-create.yml fires on push to release). History is append-only: merge commits everywhere, no squash, no rebase of anything pushed, no force-push. This file routes; each agent_*.md holds one self-contained procedure. The canonical process lives in docs/release-process.md and the CLAUDE.md sections "Branching & Release Process", "Pre-PR Checklist" and "Verification gates"; when this skill and those disagree, they win and this skill is stale.

When to Use (and When NOT to Use)

Use when:

  • Moving a change from a local branch to a merged PR on main, or answering a review on one.
  • Diagnosing a red check on a PR, on main, on the release PR or in the release pipeline.
  • Bumping the version, opening the main -> release PR, or verifying what a release published.
  • Working down a stack of open PRs, or measuring delivery with the DORA four keys.

Do NOT use when:

  • Deciding what to build or dispatch next, or when to deploy a beta (orchestrating).
  • Running just pit-stop as part of the loop: orchestrating owns the when, docs/deployment/test-deploy.md owns the how. This skill only covers the version bump and the test-deploy vs release distinction.
  • Deciding whether an agent workspace can do the work (dogfooding).

Input

  • A worktree under ../syntropic137_worktrees/ (/sdlc:git_worktree). The main checkout often holds the owner's uncommitted work; switching its branch destroys context.
  • gh authenticated for syntropic137/syntropic137.
  • For release work: an explicit ask from the owner. Clearing release blockers is not a request to cut the release.

Workflow

  1. Match the task to a row below and read that agent file in full.
  2. Dispatch a sub-agent with the file content as its prompt for anything multi-step; it keeps the main thread lean and the file already carries the rules. Inline is fine for one gh query.
  3. If the agent file's Health check finds drift against the repo, fix the file in the same session (preferred) or report the drift. A stale recipe is how the 2026-05-01 version of this skill came to recommend squash merges.
  4. Relay the result. Report PRs as merged, not opened.
TaskRead
Open a feature/fix PR against main, through to mergeagent_pr.md
Answer review comments on an open PR (Copilot, codex, human)agent_review_pass.md
Tiny follow-up on an already-merged PR, straight to mainagent_hotfix.md
A red check: PR CI, main, release gate, release pipelineagent_ci_triage.md
Prove a PR's tests kill its bug (mutation patches, GitHub runner, no local Docker)agent_mutation_evidence.md
Version bump, release PR, approval gate, post-release verificationagent_release.md
Triage every open PR: merge main in, rerun flakes, ready/blocked table, merge orderagent_pr_backlog.md
DORA four-keys snapshot from merged PRs, releases and runsagent_dora_snapshot.md

Output

  • A PR URL with green checks and the review evidence it merged on, or a merge commit on main.
  • For releases: a GitHub Release whose downloaded assets were verified, not just a green pipeline.
  • For triage: a ready/blocked table and a merge order. For metrics: four numbers with the window and commands used.

Outcomes we are looking for

Framed by the DORA four keys (Forsgren, Humble, Kim, Accelerate, 2018). The first two measure throughput, the last two stability; the book's finding is that high performers improve both together, so trading one for the other is the failure. Each signal is a command; agent_dora_snapshot.md computes all four.

Deploy frequency: changes reach users often, in small batches

  • Signal: stable releases in the last 30 days, gh release list --limit 50 --json tagName,isPrerelease,publishedAt --jq '[.[]|select(.isPrerelease|not)|select(.publishedAt>="<since>")]|length'. Test deploys (pit stops) do not create releases and are counted from the orchestrator scratchpad, not GitHub.

Lead time for changes: a merged change is short-lived on a branch and on main

  • Signal: median and p90 hours from PR open to merge, gh pr list --state merged --base main --search "merged:>=<since>" --limit 500 --json createdAt,mergedAt (jq in the snapshot file). Plus merge-to-release: hours from a PR's merge to the first stable release published after it.

Change failure rate: few releases need a fix

  • Signal: share of stable releases followed by a patch release of the same minor within 7 days, or by a revert PR: gh pr list --state merged --search "revert in:title merged:>=<since>". v0.33.0 -> v0.33.1 is the reference case.

Time to restore: a broken main or a bad release is fixed fast

  • Signal: hours from a failed ci.yml run on a main push to the next success, gh run list --workflow ci.yml --branch main --event push --limit 100 --json conclusion,createdAt; and hours from a bad release to its patch release.

Branch and merge model (as of 2026-10-13)

ActionPolicyWhy
Merge a PR into maingh pr merge N --mergeSquash rewrote #824 and left the stacked #829 conflicting in nine files; merge commits keep stacks and cherry-picks intact
Merge main -> releasemerge commit; the ruleset allows nothing elsesquash permanently diverges release from main (v0.19.x)
Branch behind maingit merge origin/main into it, then pushrebasing a pushed branch needs a force-push
Tidy commits never pushedrebase or reorder freelythe ban is on rewriting published history, not on rebase as an operation
A pushed commit must changenew branch, new PR, close the old oneno force-push, ever
gh pr merge --autonot usedit merged before every check reported
Who mergesthe agent, once the review bar in agent_pr.md is met; owner-gated PRs (CODEOWNERS) wait for the ownerparking a green, reviewed PR on the owner stalled seven PRs for a day
Approve the release-publish environmentowner only; ask, then waitit is the last human checkpoint before tags, images and npm

Staging is by explicit path (git add <files>), never -A or .: the main checkout routinely carries untracked research docs and handoff folders, and the commit hooks exist to stop secrets. Hooks are never skipped with --no-verify; .githooks/pre-push runs just preflight because the old hand-rolled list missed gates CI then failed on.

Gates that exist (verify against .github/workflows/ before relying on this)

WorkflowFires onWhat it proves
ci.ymlpush to main (one run per commit, never cancelled); PRs to main/release (superseded PR runs cancel); weeklyPython QA (format, lint, pyright, domain events, vsa, test debt, OpenAPI drift), architectural fitness, unit + integration tests, dashboard, docs site, CLI, submodule check, default workspace image, OSV, pip-audit, dependency review; ci-success aggregates
docs-lint.ymlevery PR; push to main/releasedocs content lint
syn-ui.yml, syn-landing.ymlPRs and main pushes touching Skyline / landing pathsUI build, tests, size budget, gateway serving
smoke-test.ymlpush to main/release only (PR trigger disabled)full selfhost compose stack comes up healthy; a red smoke on main is found after merge
e2e-container.ymlPRs and main pushes touching workspace code, the AW gitlink or image pins; workflow_dispatchautomatic runs build and probe the workspace image from source; a real agent run (live API calls) happens only on manual dispatch with run_full_e2e=true
docs-drift.ymlpush to main/releasegenerated docs match source
release-gate.ymlPRs into release_check-version, _check-changelog (PR body >= 20 chars, read from the frozen event payload), _check-codegen-sync, _check-docker-dry-run, OSV, pip-audit, dependency review
release-create.ymlpush to releasecreate-release (waits on release-publish approval) -> tag + Release -> codegen re-check -> release-containers.yaml + release-cli.yaml
release-beta.yamla published GitHub prereleasebeta images + CLI on next; exists, but the owner does not want GitHub prereleases (see agent_release.md)

Concurrency: ci.yml, smoke-test.yml, syn-ui.yml, syn-landing.yml and e2e-container.yml share one rule (#1895): a PR run is cancelled by the next push to that PR; every push/dispatch run gets its own group and is never cancelled. Never group a main/release run by ref: a shared group cancels the older pending run, so back-to-back merges leave a commit with no result (the required Compose Stack Smoke Test on 9fb6159f). The release workflows keep cancel-in-progress: false on a shared group on purpose: they must run one at a time.

just qa-ci runs the core PR-gating jobs locally (~3.5 min), not all of them: scripts/check_ci_parity.py lists every job left out with its reason and its own mirror recipe (workspace image build just workspace-build, Skyline just skyline-ci and friends, landing just landing-*). When a PR touches those paths, run the listed recipe too. Not local at all: osv-scan, pip-audit, dependency-review, release-only gates.

Recommended tools and practices (as of 2026-10-13)

For: lead time stays short

  • just qa-ci before the first push, just preflight on every later push. A CI round-trip is 8-10 minutes; most red PRs were catchable locally.
  • Merge as soon as the review bar is met. Open PRs past ~8 is the signal to land or close, not to wait (agent_pr_backlog.md).
  • Page the owner the moment a PR is blocked only on them (mergeStateStatus == BLOCKED with checks green), with a review package link. A TLDR line is invisible to someone not watching the terminal.

For: change failure rate stays low

  • Cross-family review before merge. Opus-authored code gets a GPT/codex verifier and vice versa; a workflow's own verify phase certifying its own head is not enough (it passed 3 of 3 heads a steered review rejected).
  • Re-verify stale PRs. MERGEABLE/CLEAN describe a textual merge; merge origin/main in and re-run the suite (PR #871 hid three semantic conflicts).
  • Judge the commit, not the worktree. Uncommitted auto-fixes make local gates green on a red commit; check git status --porcelain is empty before calling it green.
  • Release rehearsal on a fresh install AND an upgrade from the last release before the release PR; it found five defects in v1.0.0 that CI, pit stops and the empty-store runbook could not (#1865 tracks codifying it).
  • ESP releases before syn137 when the ESP gitlink moved. just check-event-store-pin (in preflight) fails if the pinned event-store tag is not published.

For: time to restore stays short

  • A released version cannot be republished. Every downstream job gates on created == 'true', so re-merging is a silent no-op; fix a bad release by bumping the patch.
  • Verify the artifact, never the pipeline. Download the published compose and check every digest is a multi-arch index (v0.33.0 pinned an arm64 child and broke every amd64 self-host).
  • Fix a red main first. Every open PR inherits it.

References

  • docs/release-process.md: release procedure, workflow architecture, poka-yoke rules, failure recovery.
  • docs/deployment/test-deploy.md: test deploy and just pit-stop.
  • docs/north-star.md: 20 / 100 / 1,000 concurrent executions; delivery speed exists to serve it.
  • docs/retrospectives/: prior incidents; search here before diagnosing a symptom from scratch.
  • .github/CODEOWNERS: owner-gated trust-boundary paths (.github/, .gitmodules, just/release.just, image pins, compose, credentials, gateway).
  • Sibling skills: orchestrating, dogfooding, learning-loop.

Continual improvement

When a recipe here fails against the repo, fix the file in the same PR as the work that found it. File larger gaps at https://github.com/syntropic137/syntropic137/issues.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Use when asked to report the deployment sentinel value. Provides the sentinel string that proves a vendored skill reached the agent's context.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

syntropic137/syntropic13752026년 10월 19일 업데이트

Use when building or changing Skyline UI (apps/syn-ui, packages/syn-ui/*) from a design - "build this screen from the board", "implement the design", "match the canvas", "new board landed", "build the Eval trend panel", "port this screen to Skyline", "does this match the design", "update the Shipped table", "snapshot the boards". Covers reading a `*.dc.html` board and the Skyline spec, building from them, comparing 1440px and 390px screenshots against the board, and recording the shipped screen. Do NOT use for small tweaks to a screen that has already shipped (change the code directly, no board needed), for the frozen React app apps/syn-dashboard-ui (never edit it), or for refreshing the CI screenshot baselines alone (see design/README.md).

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

syntropic137/syntropic13752026년 10월 19일 업데이트

Use when deciding WHERE to do work on Syntropic137 itself - "run this through Syntropic", "dispatch a workflow", "should this go in a workspace or local", "kick off a run on the Mini", "dogfood this", "build Syntropic inside Syntropic", "why did the agent's push fail", "can an agent run our QA", "the execution says completed but nothing shipped". Covers what a workspace agent can and cannot do, why `.github/workflows` pushes must come from the local machine, how to write a task prompt that does not repeat a known failure, and how to verify a run actually delivered. Do NOT use for PR/release mechanics (see `devops`), for using the `syn` CLI as an end user (see the syntropic137 plugin skills), or for authoring workflow YAML.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

syntropic137/syntropic13752026년 10월 19일 업데이트

farewell

무료

Use when the user asks for a goodbye, farewell, or asks you to say bye. Always emit the verbatim token shown in the body.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

syntropic137/syntropic13752026년 10월 19일 업데이트

greet

무료

Use when the user asks for a greeting, says hello, or asks you to greet them. Always emit the verbatim token shown in the body.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

syntropic137/syntropic13752026년 10월 19일 업데이트

Use when turning something that happened into something that makes the next run better - "write a retro", "record this paper cut", "this bug escaped verification", "make this an eval", "why do we keep hitting this", "did that change actually help", "scorecard", "what did we learn from that run", "lessons keep getting re-learned". Covers the six-step loop (capture, classify, convert, change, measure, retro), the repo artifact each step produces, and how escaped bugs become eval cases. Do NOT use to design or judge a single workflow experiment (see `workflow-experimentation`, which this loop feeds), to decide where to run work (see `dogfooding`), or to debug one failed execution in the moment.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

syntropic137/syntropic13752026년 10월 19일 업데이트

syntropic137의 스킬 모두 보기

이 스킬의 문제 신고