بنقرة واحدة
drift
Triage and act on the weekly drift-guard rolling issue (transitive dependency drift)
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Triage and act on the weekly drift-guard rolling issue (transitive dependency drift)
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Multi-agent orchestration — delegates to domain experts for complex tasks
Version bump and release checklist for remote-store
Triage and act on the weekly [mutation] rolling issue (mutation-testing run health)
Read review comments from a PR, fix each issue, resolve threads, validate
Create a pull request for the current branch
Post inline review comments on a GitHub PR. Find real issues only.
| name | drift |
| description | Triage and act on the weekly drift-guard rolling issue (transitive dependency drift) |
| disable-model-invocation | true |
| argument-hint | [issue number] |
Act on the [drift-guard] rolling issue: decide which extras are safe to
re-baseline, refresh those locks, and prepare a pushed branch for the user to
open the PR via /pr.
Authority (do not duplicate — read these):
sdd/CI-OPERATIONS.md — the cross-guard handbook: where this guard sits in
the scheduled/automated family and the durable-TODO principle it follows..github/workflows/drift-guard.yml header — refresh procedure + the three
hard non-goals (the workflow never edits pyproject.toml, never auto-merges
a floor/pin, never auto-remediates).infra/drift-locks/README.md § Refreshing — the canonical command pair.scripts/drift_check.py module docstring — subcommand semantics.The core rule this skill exists to enforce: the issue body reports version drift only. Whether drift is safe to accept is decided per-extra by that extra's smoke job conclusion in the linked run — not by the body. A red smoke means either a real regression or a smoke-harness gap; never refresh an extra whose smoke is red until you have explained why.
A green smoke means the committed pins were the ones exercised: the smoke is pinned to the candidate resolution with a pip constraints file, so it cannot quietly run against a mixed set. A plugin that cannot coexist with that set fails the smoke instead — which is why a red smoke is a real regression or a harness gap, never a silent mixed-set pass.
GitHub reads via gh CLI; writes (PR) via the configured GitHub MCP server,
falling back to gh for GraphQL-only flows. Repo: haalfi/remote-store.
Locate the issue. If $ARGUMENTS is an issue number, use it. Otherwise
find the single open rolling issue by title prefix (it carries no label):
gh issue list --repo haalfi/remote-store --state open --search '[drift-guard] in:title'.
None open → drift has cleared, nothing to do; stop and say so.
Parse the body. Extract: the drifted extras and their per-package
baseline → resolved rows, the Clear list, and the Last run URL.
The body is regenerated every run and auto-closes on clear — never edit it.
Pull the run's per-extra smoke verdict (load-bearing). From the run URL's
id: gh run view <id> --repo haalfi/remote-store --json jobs. Each extra has
a check-<extra> job. The drift workflow runs the smoke targets
(scripts/drift_smoke_map.py) only when that extra drifted, so for every
drifted extra the job conclusion is the smoke verdict:
gh run view --repo haalfi/remote-store --job <jobId> --log-failed) and
classify:
ModuleNotFoundError regardless of the bump). Fix the
harness (drift_smoke_map.py target or the workflow's smoke-install
list), not the lock. Refresh only after the smoke is genuinely green.workflow_dispatch before trusting it.Triage the version bumps for the green extras. Classify each
baseline → resolved by semver: patch/minor and rc → stable are routine;
call out any major bump or yank explicitly for sign-off before refreshing.
Decision gate. Summarise per extra: smoke verdict · bump severity · refresh? (y/n). Before any local resolve (it builds throwaway venvs and hits
PyPI — treat it like a test run), ask the user to confirm the refresh set.
Default recommendation: refresh every extra that is green-smoke + non-major;
hold the rest with the reason.
Branch hygiene. Never on master; never piggyback unrelated work. Create
a dedicated branch off origin/master, e.g. drift-refresh-<YYYY-MM-DD>.
Refresh — match the resolution host, not just the Python version. A lock
is both Python- and OS-specific: the workflow resolves on Linux 3.13,
and a resolve on another platform pulls platform-conditional deps the CI
re-resolve never sees (colorama via click/tqdm and pywin32 on Windows,
etc.). Commit a non-Linux resolve and the next CI run diffs its Linux
resolution against your lock, flags those packages as "removed" drift, and the
rolling issue never clears. So choose the source by host:
gh run download <run-id> --repo haalfi/remote-store --pattern 'candidate-baseline-*' --dir <tmp>
(the <run-id> is the issue's Last run). For each approved extra, write
infra/drift-locks/<extra>.txt as the lock header
(# extra: / # python: 3.13 / # captured: <today> / regenerate line, a
blank line) followed by the artifact's freeze sorted by package name
(the part before ==, so dagster precedes dagster-pipes) — matching
scripts/drift_check.py::write_lock exactly.python --version is 3.13, then per approved extra:
hatch run drift-check refresh-baseline <extra>.Either way, once the locks are written run hatch run drift-check render-docs.
Verify the diff. git diff infra/drift-locks docs-src/reference/tested-versions.md:
refresh-baseline
re-resolves with --pre and may show newer stable/pre-release than the
snapshot — expect the latest at refresh time, not the frozen versions;# captured: advanced.
Then hatch run drift-check render-docs --check (also a preflight gate) to
confirm the docs page is in sync.CHANGELOG / trace. A pure baseline + tested-versions refresh is
infra-and-generated-docs only: no CHANGELOG entry, and a routine refresh
neither implements nor closes the drift-guard item, so no trace. Add a
CHANGELOG entry only if this refresh accompanies a deliberate
pyproject.toml floor bump.
Commit the locks + regenerated docs together. Prefix the subject with
the drift-guard backlog item ID (named in the drift-guard.yml header and
infra/drift-locks/README.md), per CLAUDE.md § Backlog:
<id>: refresh drift baselines (<extras>).
Stop for the user to open the PR. Push the branch, then stop — do not
run /pr automatically. PR creation is user-initiated in this repo. Report
the prepared state so the user can review and invoke /pr themselves:
Flag for the eventual PR body: list the accepted bumps per extra and
reference the rolling issue with Refs #<n> — never Closes. The
workflow owns the issue lifecycle and auto-closes it on the next run that
resolves clean. To close promptly after merge, the user can re-resolve via
gh workflow run drift-guard.yml --repo haalfi/remote-store (the workflow is
on master, so dispatch resolves fine).
/pr. It never edits
pyproject.toml floors, never merges, and never closes the rolling issue by hand.