agentleFS
Microsoft AzureKnown publisherAzure/local-csi-driver/.github/skills/code-review-backward-compatibility/SKILL.md

code-review-backward-compatibility

Skill34 starsChanged 25 days agoMITView on GitHub

Review pull requests for backward-incompatible behavior against the latest stable release, including rollback safety. Use during code review, upgrade and rollback risk assessment, and changes to configuration, admission, CSI operations, storage lifecycle, recovery, ownership, or persisted metadata. Find customer-visible behavior changes, including newly required dependencies and error propagation, not only API signature changes. Distinguish regressions from intentional safety fixes and pre-existing defects.

The file

Show its rules and text

We split this skill into the rules it gives an agent

22 rules. About 0 are common, 22 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈22

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Check ancestry and release-line applicability when history is available.

    line 34
  2. Distinctive:

    Read the changed entry points and their relevant callers, helpers, tests, defaults, and public documentation.

    line 40
  3. Distinctive:

    Use a compact transition table while reasoning:

    line 50
  4. Distinctive:

    Do not assume tests using newly generated resources establish upgrade safety.

    line 56
  5. Distinctive:

    Read the actual fields persisted by the released implementation and the metadata required by the proposed implementation.

    line 57
  6. Distinctive:

    Check not-found, permission-denied, transient service failure, and ambiguous results separately.

    line 70
  7. Distinctive:

    Before concluding, account for each changed dependency and error path in the reasoning, even if the happy path preserves data and all tests …

    line 77
  8. Distinctive:

    Check Helm values, flags, StorageClass parameters, defaults, omitted values, invalid-value handling, and existing user overrides.

    line 85
  9. Distinctive:

    Check aggregate behavior, processing order, and partially resolved inputs.

    line 88
  10. Distinctive:

    Do not assume a webhook failure policy ignores explicit denial responses.

    line 92
  11. Distinctive:

    Consider both dynamically provisioned resources and supported imports or static resources.

    line 96
  12. Distinctive:

    Follow the real resource identity and each supported ownership source.

    line 98
  13. Distinctive:

    Verify fallback precedence against the released resource format.

    line 99
  14. Distinctive:

    Check both healthy and missing backend state.

    line 100
  15. Distinctive:

    Check capacity accounting, pending resize, reclamation timing, background work, error codes, idempotency, and retries where the diff …

    line 103
  16. Distinctive:

    Do not assume new provisioning metadata is retroactively written to existing resources.

    line 105
  17. Distinctive:

    Check whether the released version can discover, mount, resize, recover, and clean up both pre-existing resources and resources created or …

    line 118
  18. Distinctive:

    Consider mixed-version node plugins, controllers, and webhooks during rollout and rollback.

    line 121
  19. Distinctive:

    Use the host's requested review format rather than requiring a separate report.

    line 149
  20. Distinctive:

    Prefer narrowly relevant regression tests using existing test infrastructure.

    line 157
  21. Distinctive:

    Do not create a cluster, touch host devices, or expand validation infrastructure without authorization.

    line 158
  22. Distinctive:

    Do not invent findings to satisfy a checklist, hardcode a historical release, or claim that a prompt guarantees exhaustive detection.

    line 162

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md
<!-- markdownlint-disable-next-line MD041 -->

Purpose

Identify what an existing installation experiences after an upgrade. A change can conform to an API and still break scheduling, recovery, or an operational workflow. Conversely, preserving unsafe behavior is not always the right fix.

Perform a read-only review. Return findings through the host's normal review output; do not independently publish additional comments, modify production source, change configuration, or run destructive storage operations.

Establish the comparisons

  1. Resolve the latest published stable GitHub release, excluding drafts and prereleases. Record its tag and resolved commit, plus the PR base and head commits. Use supplied pinned snapshots when the review environment provides them. Do not substitute the current checkout or highest local tag.
  2. Compare the PR base with its head to identify changes introduced by the PR. Compare the release with the head to identify upgrade-visible differences. Inspect release-to-base differences before attributing a finding to the PR.
  3. Check ancestry and release-line applicability when history is available. Report an inappropriate or unavailable baseline instead of claiming the review passed. Do not treat unreleased sibling PRs as already deployed.

Trace behavior, not just changed lines

Read the changed entry points and their relevant callers, helpers, tests, defaults, and public documentation. Trace the complete operation through admission, scheduling, provisioning, staging, recovery, and cleanup when those components participate in the changed behavior.

For each changed condition or helper, identify which existing inputs move between branches. Pay particular attention to new fallbacks, stricter checks, early returns, changes to success timing, and new dependencies. Determine whether a fallback merely supplies metadata or also enables new side effects.

Use a compact transition table while reasoning:

Existing input or stateReleased outcomeProposed outcomeImpact
Supported configuration or persisted resourceCode pathCode pathEffect

Do not assume tests using newly generated resources establish upgrade safety. Read the actual fields persisted by the released implementation and the metadata required by the proposed implementation.

Dependency and error-path review

For each added or changed external lookup, compare both success and failure paths. Unchanged business logic can still become unavailable when an optional metadata lookup becomes a prerequisite.

  • Enumerate changed reads, writes, and helper error returns. Trace each error through its caller to the admission response or CSI status, including staging and expansion. Compare released log-and-continue or fallback paths with proposed early returns.
  • Check not-found, permission-denied, transient service failure, and ambiguous results separately. Distinguish cache hits from cache misses requiring a live read. Check changes from direct reads to indexed lists against actual RBAC and cache setup; do not assume either compatibility or an outage.
  • Identify the previously working operation and concrete failure condition. Separate a dependency-availability regression from deliberate rejection of invalid ownership or missing storage.
  • Before concluding, account for each changed dependency and error path in the reasoning, even if the happy path preserves data and all tests pass. Report material changes with evidence, not speculative outage claims.

Compatibility checklist

Configuration and admission

  • Check Helm values, flags, StorageClass parameters, defaults, omitted values, invalid-value handling, and existing user overrides.
  • Evaluate combinations of application constraints and driver constraints. Check aggregate behavior, processing order, and partially resolved inputs.
  • Distinguish admission rejection from successful admission followed by an unschedulable Pod. Explain when the change first affects a running workload, such as restart, replacement, or restaging, rather than implying eviction.
  • Do not assume a webhook failure policy ignores explicit denial responses.

Persisted state and storage lifecycle

  • Consider both dynamically provisioned resources and supported imports or static resources. Include absent, empty, and populated optional metadata.
  • Follow the real resource identity and each supported ownership source. Verify fallback precedence against the released resource format.
  • Check both healthy and missing backend state. Determine whether an upgrade changes fail-closed behavior into allocation, recreation, formatting, deletion, quarantine, or broader cleanup authority.
  • Check capacity accounting, pending resize, reclamation timing, background work, error codes, idempotency, and retries where the diff affects them.
  • Do not assume new provisioning metadata is retroactively written to existing resources.

Rollback safety

Assess rollback in every review, independently of forward upgrade safety. Trace release -> proposed version -> release after the proposed version has performed real operations. Reverting binaries or manifests does not undo persisted state changes.

  • Identify metadata, annotations, labels, resource identities, configuration, on-disk formats, and backend state the proposed version can create or modify. Read the released code that would consume that state after rollback.
  • Check whether the released version can discover, mount, resize, recover, and clean up both pre-existing resources and resources created or changed by the proposed version. Include partial upgrades and failed operations.
  • Consider mixed-version node plugins, controllers, and webhooks during rollout and rollback. Trace differing interpretations of ownership, capabilities, defaults, and cleanup authority across those components.
  • Identify irreversible migrations, deletion or formatting, and safety guarantees that an older binary would stop enforcing. State whether rollback requires conversion, ordering, feature restrictions, or is unsafe; do not recommend restoring unsafe behavior merely to allow downgrade.
  • Explicitly report rollback as supported by the inspected paths, conditional, blocked, or unverified, with evidence and conditions. If the change has no rollback-relevant effect, explain why. Missing released source or runtime evidence is a limitation, not proof of rollback safety.

Classify and substantiate findings

Separate these outcomes:

  • Regression: a previously supported configuration or valid persisted state stops working, loses data, or changes semantics unintentionally.
  • Intentional breaking change: a correctness or safety improvement changes an observable contract. Explain migration or rollout requirements without automatically recommending restoration of unsafe behavior.
  • Pre-existing defect: present on the PR base or release and not worsened by this PR. Do not present it as a new regression. If changed control flow exposes the defect to previously unaffected inputs, describe that new exposure separately.
  • Uncertain risk: plausible but missing a verified precondition or trace. State what evidence is needed and avoid claiming reproduction.

Use the host's requested review format rather than requiring a separate report. For each material finding, give the affected existing configuration, released and proposed outcomes, concrete impact, classification, severity, confidence, and source locations for both paths. Verify that each cited file and line range exists in the exact snapshot being cited. State whether evidence is source-level, unit-tested, or reproduced on a cluster. A descriptive PR title, comment, or existing test assertion is not proof of compatibility.

Prefer narrowly relevant regression tests using existing test infrastructure. Do not create a cluster, touch host devices, or expand validation infrastructure without authorization. Record unavailable checks explicitly.

Report no material breaking change when that is what the evidence supports. Do not invent findings to satisfy a checklist, hardcode a historical release, or claim that a prompt guarantees exhaustive detection.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.