skills/golem-powers/deploy-verify/SKILL.md
Use after any infra PR merges or any claim that a daemon, app, CLI, or MCP server is now deployed. Enforces a 4-step post-merge verification sequence: process replacement, `launchctl print`, build-stamp match, and an end-to-end live probe before declaring the deploy done. Triggers on: PR merged, deployed, shipped, launch agent, daemon restart, MCP server deploy, post-merge check.
npx skillsauth add etanhey/golems deploy-verifyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A merged PR is not a deployed system. Verify the runtime, or do not claim the deploy is done.
Infra PRs include:
This skill composes directly with:
/never-fabricate/post-merge-deploy-check/post-merge-deploy-check proves merged-PR metadata, registry state, bundle provenance, and canonical-path/process drift. This skill is the agent-side workflow that decides when to run that script, what additional runtime checks must be collected, and when "done" is still unverified.
After an infra PR merges, do not claim deployed until all four verification steps pass.
Required sequence:
launchctl print statusIf any step fails, the verdict is NOT DEPLOYED. Fix the deploy or open a fix PR. Do not narrate success.
Before running the sequence, classify the PR:
no_deploy_required: docs, skill-only, or other artifact-free changesdeploy_bearing: LaunchAgent, daemon, CLI, MCP server, app bundle, socket service, or anything that changes live runtime behaviorIf the PR is no_deploy_required, say so explicitly and stop.
If it is deploy_bearing, continue through all four steps.
Goal: prove the old runtime exited and a fresh runtime is now the one serving requests.
Required evidence:
Acceptable checks:
pgrep -alf <process-pattern>ps -p <pid> -o pid=,ppid=,etime=,command=Failure examples:
*-DEV-* app bundleGoal: prove launchd knows about the correct service state.
Required evidence:
launchctl print gui/$(id -u)/<service-label> or equivalent for the relevant domainProgram or ProgramArguments point at the canonical artifact, not stale pathsFailure examples:
Could not find serviceGoal: prove the artifact serving requests was built from the merged mainline commit.
Required evidence:
Info.plist provenance fields such as GitCommit, BuildTimeUTC, and expected bundle metadata--version, version.json, or equivalent commit/build stampRequired action:
/post-merge-deploy-check when the component is in the canonical deploy registryWhat /post-merge-deploy-check covers:
GitCommit matches the registryFailure examples:
Goal: prove the runtime actually serves post-merge behavior, not just the right metadata.
Use the narrowest real probe that exercises the changed path:
The probe must hit the changed behavior, not just process liveness.
Failure examples:
Example inputs:
Action:
deploy_bearingTASK_DONEDo not treat this as deployment proof.
Action:
launchctl printUntil those exist, the status is UNVERIFIED DEPLOY CLAIM.
/post-merge-deploy-check passes but the live probe failsVerdict:
NOT DEPLOYEDReason:
Verdict:
DRIFTED OR NON-CANONICAL DEPLOYReason:
When reporting verification, use this structure:
Deploy verification for <repo>#<pr>:
- Step 1 Process replacement: PASS|FAIL — <evidence>
- Step 2 LaunchAgent status: PASS|FAIL — <evidence>
- Step 3 Build-stamp match: PASS|FAIL — <evidence>
- Step 4 End-to-end probe: PASS|FAIL — <evidence>
- Verdict: DEPLOYED | NOT DEPLOYED | NO DEPLOY REQUIRED
If any evidence is missing, say UNVERIFIED and keep the verdict negative.
Never answer "done" or "deployed" from GitHub merge state alone.
TASK_DONE, collab notes, and "restarted locally" claims are not verification. /never-fabricate applies in full.
Passing /post-merge-deploy-check is not enough without the end-to-end probe.
A running PID or loaded LaunchAgent is not enough without build-stamp evidence.
Do not close the pane, remove the worktree, or report success until all required steps pass.
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| "PR merged, so deploy is done" | GitHub state is not runtime state | Run all four verification steps |
| "worker said restarted" | Worker self-report is not proof | Collect process, launchctl, stamp, and probe evidence |
| "PID exists, looks good" | Liveness does not prove the right build or behavior | Check stamp and probe |
| "build stamp matches, so done" | Provenance does not prove serving behavior | Run the live probe |
| "probe works, close pane" | Probe without canonical provenance can hide drift | Run /post-merge-deploy-check and record the receipt |
Recommended commands include:
pgrep -alf '<pattern>'
launchctl print gui/$(id -u)/<service-label>
python3 ~/Gits/orchestrator/scripts/post-merge-deploy-check.py <repo> <pr-number>
<canonical-binary> --version
<real socket, MCP, or endpoint probe>
Use the canonical deploy registry when available. If the component is not registered yet, say so explicitly and still complete the process, launchctl, build-stamp, and live-probe checks with whatever local evidence is available.
development
Create, edit, and verify golem-powers skills using the standard SKILL.md structure, workflow files, adapters, templates, and eval fixtures. Use for new skills, structural edits, workflows/adapters, and pre-deploy validation. NOT for invoking existing skills, superpowers skills, or skill-creator agent workflows.
testing
Extract structured knowledge from any video source — YouTube URLs or local screen recordings. YouTube → gems workflow (yt-dlp transcript → keyword hotspots → frame extract → brain_digest → structured gems). Screen recordings → QA workflow (reuses /qa-video stalker pipeline). Use when user shares a YouTube link wanting deep extraction with frames, shares a .mov/.mp4 for QA processing, says "extract from video", "video gems", "process this recording", or mentions gem extraction from video content.
testing
Use when running or reviewing any recurring monitor loop for merge queues, worker queues, collab tails, or agent completion. Enforces drive-to-completion ticks: every tick must query live state with `!`, classify whether real progress happened, and then dispatch, verify-and-decrement, or escalate-park. Triggers on: monitor loop, /loop, recurring tick, keep monitoring, silent autonomous, merge gate, blocked review, no-progress loop.
tools
MeHayom freelance client management — daily updates, decision tracking, time logging. Use when drafting Yuval updates, logging scope changes, tracking hours, or any MeHayom client communication. Triggers: 'draft Yuval update', 'client update', 'daily update', 'log decision', 'track time', 'mehayom'.