Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
8772044
feat: update snapshot to be generic
chmill-zz Jul 15, 2026
d0519a7
test: cover live patching ConfigMap JSONPath
chmill-zz Jul 15, 2026
d27b056
addressing comment, adding live patch annotate
chmill-zz Jul 22, 2026
b36f5a7
ci: extend GPU E2E timeout to three hours (#9141)
sulixu Aug 5, 2026
1906165
fix: prevent ACL kubelet sysext from starting before CSE (#9088)
aadhar-agarwal Aug 6, 2026
faf6502
fix(gpu): pull the GPU driver image from the cloud's own MCR endpoint…
ganeshkumarashok Aug 6, 2026
429e126
fix: set containerd Windows service priority to ABOVE_NORMAL_PRIORITY…
timmy-wright Aug 6, 2026
fb9a920
fix: revert "feat: add erofs snapshotter configuration for new kata-p…
awesomenix Aug 6, 2026
9969884
fix: persist Azure Linux THP settings after reboot (#9136)
djsly Aug 6, 2026
4d58a06
fix: update pause to 3.10.2 (#9128)
timmy-wright Aug 6, 2026
3881174
chore(deps): bump github/codeql-action from 4.37.3 to 4.37.6 (#9154)
dependabot[bot] Aug 7, 2026
bbbdb53
fix: rename template file (#9155)
timmy-wright Aug 7, 2026
ecf33a9
fix: enable ip connect in bastion, something changed recently causing…
awesomenix Aug 7, 2026
832839a
fix: add renovate support for 2604 (#9158)
awesomenix Aug 7, 2026
4b141b3
chore: upgrade Azure Disk CSI driver versions (#9157)
andyzhangx Aug 7, 2026
ec99e53
test(e2e): add Kata Containers E2E scenario for AzureLinux V3 (#9142)
Bickor Aug 9, 2026
457167b
chore(deps): update acr-credential-provider (patch) (#9130)
renovate[bot] Aug 10, 2026
2a1092f
fix(windows): improve CSE error handling and consolidate function scr…
timmy-wright Aug 10, 2026
2686373
chore(deps): update azure-cloud-node-manager (patch) (#9168)
renovate[bot] Aug 10, 2026
ccbd214
test(e2e): use the default VM SKU for kata and build the kata VHD in …
Bickor Aug 10, 2026
ef0fecb
fix: add credential provider config for custom cloud network isolated…
fseldow Aug 10, 2026
9ec7ccf
chore: upgrade Azure File CSI driver versions (#9163)
andyzhangx Aug 10, 2026
d798536
chore(deps): update inspektor-gadget (patch) (#9139)
renovate[bot] Aug 10, 2026
57eaafc
chore(deps): update kubernetes-cri-tools (patch) (#9140)
renovate[bot] Aug 10, 2026
248b17a
chore(deps): update dependency moby-containerd to v2.3.3-ubuntu26.04u…
renovate[bot] Aug 10, 2026
1a16a14
chore(deps): update dependency node-exporter-kubernetes to v1.9.1-ubu…
renovate[bot] Aug 10, 2026
c6c1726
fix: bound live patching kubeconfig wait
chmill-zz Aug 10, 2026
8fc0fd7
Add LocalDNS LPS bootstrap patching support
saewoni Aug 18, 2026
42d67e2
Refresh PR after clean rebuild
saewoni Aug 18, 2026
f06f8d9
Preserve boothook launcher when injecting E2E files
saewoni Aug 21, 2026
0deaa14
Run local aks-node-controller for LocalDNS LPS E2E parity
saewoni Aug 21, 2026
6b55b61
Fix LPS E2E drop-in to overwrite localdns.sh at service path
saewoni Aug 22, 2026
d1495d6
Use locally-compiled aks-node-controller in LPS E2E fetcher wrapper
saewoni Aug 22, 2026
089dd0c
Enable bootstrap live-patch annotation in LocalDNS LPS E2E
saewoni Aug 22, 2026
230a526
fix: simplify localDNS apply outcome printf in ubuntu-snapshot-update
saewoni Aug 25, 2026
f5be611
fix: fail localDNS knead apply on unexpected notFound outcome
saewoni Aug 25, 2026
604bb6d
test: add E2E for LocalDNS LPS-unavailable fallback to baked Corefile
saewoni Aug 25, 2026
7a8bffd
feat: add LocalDNS forward health knobs
saewoni Sep 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ Windows VHD is configured through [VHD](./vhdbuilder/packer/windows/windows-vhd-

[apiserver](./apiserver/) is `go` based webserver. It receives request from external client and generates CSE and CustomData to be used on the VHD when a new node is created / provisioned.

windows generates its CSE package using [script](./parts/windows/kuberneteswindowssetup.ps1).
windows generates its CSE package using [script](./parts/windows/kuberneteswindowssetup.ps1.template).

Both CSE scripts run in two phases — Windows `BasePrep`/`NodePrep` (`kuberneteswindowssetup.ps1`) and Linux `basePrep`/`nodePrep` (`cse_main.sh`). `basePrep` is gated only by the `base_prep.complete` marker, so it is **skipped on a PIS-cached VHD** (the marker is baked in); `nodePrep` runs whenever `PreProvisionOnly` is false — every real node. So node-specific, secret, or expiring data (e.g. the TLS bootstrap token / kubeconfig) must be written in `nodePrep`, not `basePrep`, or the baked copy goes stale. On PIS the phases are separate VM runs — variables re-initialize from the real node's live CustomData, so `nodePrep` can't rely on `basePrep` state. (Non-PIS: both run sequentially in one execution, no reboot between phases.)
Both CSE scripts run in two phases — Windows `BasePrep`/`NodePrep` (`kuberneteswindowssetup.ps1.template`) and Linux `basePrep`/`nodePrep` (`cse_main.sh`). `basePrep` is gated only by the `base_prep.complete` marker, so it is **skipped on a PIS-cached VHD** (the marker is baked in); `nodePrep` runs whenever `PreProvisionOnly` is false — every real node. So node-specific, secret, or expiring data (e.g. the TLS bootstrap token / kubeconfig) must be written in `nodePrep`, not `basePrep`, or the baked copy goes stale. On PIS the phases are separate VM runs — variables re-initialize from the real node's live CustomData, so `nodePrep` can't rely on `basePrep` state. (Non-PIS: both run sequentially in one execution, no reboot between phases.)

The webserver is also used to determine the latest version of Linux VHDs available for provisioning within AKS clusters.

Expand Down Expand Up @@ -145,7 +145,7 @@ Analyze PRs for these compatibility scenarios:
- Hardcoded paths that differ between deployment modes

**4. PIS / VHD Caching — basePrep vs nodePrep split (Windows + Linux)**
- **Context**: PIS bakes a VHD from a temporary VM, then boots many real nodes from it. Same model in Windows `parts/windows/kuberneteswindowssetup.ps1` (`BasePrep`/`NodePrep`) and Linux `parts/linux/cloud-init/artifacts/cse_main.sh` (`basePrep`/`nodePrep`):
- **Context**: PIS bakes a VHD from a temporary VM, then boots many real nodes from it. Same model in Windows `parts/windows/kuberneteswindowssetup.ps1.template` (`BasePrep`/`NodePrep`) and Linux `parts/linux/cloud-init/artifacts/cse_main.sh` (`basePrep`/`nodePrep`):
- `basePrep` — gated only by the `base_prep.complete` marker (`C:\AzureData\` Windows, `/opt/azure/containers/` Linux). **Skipped on PIS real nodes** because the marker is baked into the VHD.
- `nodePrep` — runs whenever `PreProvisionOnly` is false (every real node); skipped only on the bake VM.
- The bake run sets `PreProvisionOnly=true` (`{{GetPreProvisionOnly}}`) and writes the marker after `basePrep` succeeds (Windows `finally`; Linux `cse_start.sh`).
Expand Down
24 changes: 23 additions & 1 deletion .github/renovate.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@
"custom.deb2004",
"custom.deb2204",
"custom.deb2404",
"custom.deb2404-test"
"custom.deb2404-test",
"custom.deb2604"
],
"matchUpdateTypes": [
"patch"
Expand Down Expand Up @@ -845,6 +846,20 @@
"versioningTemplate": "deb",
"autoReplaceStringTemplate": "\"renovateTag\": \"name={{{packageName}}}, repository=test, os=ubuntu, release=24.04\",\n \"latestVersion\": \"{{{newValue}}}\"{{#if depType}},\n \"previousLatestVersion\": \"{{{currentValue}}}\"{{/if}}"
},
{
"customType": "regex",
"description": "auto update packages for OS ubuntu 26.04 in components.json",
"managerFilePatterns": [
"/parts/common/components.json/"
],
"matchStringsStrategy": "any",
"matchStrings": [
"\"renovateTag\":\\s*\"name=(?<packageName>[^\"]+), repository=production, os=ubuntu, release=26\\.04\",\\s*\"latestVersion\":\\s*\"(?<currentValue>[^\"]+)\"(?:[^}]*\"previousLatestVersion\":\\s*\"(?<depType>[^\"]+)\")?"
],
"datasourceTemplate": "custom.deb2604",
"versioningTemplate": "deb",
"autoReplaceStringTemplate": "\"renovateTag\": \"name={{{packageName}}}, repository=production, os=ubuntu, release=26.04\",\n \"latestVersion\": \"{{{newValue}}}\"{{#if depType}},\n \"previousLatestVersion\": \"{{{currentValue}}}\"{{/if}}"
},
{
"customType": "regex",
"description": "auto update packages for OS Mariner 2.0 in components.json",
Expand Down Expand Up @@ -996,6 +1011,13 @@
"transformTemplates": [
"{\"releases\": $map(($index := releases#$i[version=\"Package: {{packageName}}\"].$i; $map($index, function($i) { $substringAfter(releases[$i + 1].version, \"Version: \") })), function($v) { {\"version\": $v} })[]}"
]
},
"deb2604": {
"defaultRegistryUrlTemplate": "https://packages.microsoft.com/ubuntu/26.04/prod/dists/resolute/main/binary-amd64/Packages",
"format": "plain",
"transformTemplates": [
"{\"releases\": $map(($index := releases#$i[version=\"Package: {{packageName}}\"].$i; $map($index, function($i) { $substringAfter(releases[$i + 1].version, \"Version: \") })), function($v) { {\"version\": $v} })[]}"
]
}
}
}
6 changes: 3 additions & 3 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4.37.3
uses: github/codeql-action/init@v4.37.6
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
Expand All @@ -62,7 +62,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v4.37.3
uses: github/codeql-action/autobuild@v4.37.6

# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
Expand All @@ -75,4 +75,4 @@ jobs:
# ./location_of_script_within_repo/buildscript.sh

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4.37.3
uses: github/codeql-action/analyze@v4.37.6
26 changes: 26 additions & 0 deletions .pipelines/.vsts-vhd-builder.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,32 @@ stages:
parameters:
artifactName: azurelinuxv3-gen2

# Kata VHDs are built here so that VHD-side Kata changes (kata packages, erofs tooling,
# kata configuration files) are covered by the E2E stage below. Without this job no Kata
# image carries this build's buildId tag, so Test_AzureLinuxV3Gen2Kata silently skips
# (the E2E stage sets IgnoreScenariosWithMissingVhd: true).
- job: buildAzureLinuxV3gen2kata
timeoutInMinutes: 360
steps:
- bash: |
echo '##vso[task.setvariable variable=OS_SKU]AzureLinux'
echo '##vso[task.setvariable variable=OS_VERSION]V3kata'
echo '##vso[task.setvariable variable=IMG_PUBLISHER]MicrosoftCBLMariner'
echo '##vso[task.setvariable variable=IMG_OFFER]azure-linux-3'
echo '##vso[task.setvariable variable=IMG_SKU]azure-linux-3-gen2'
echo '##vso[task.setvariable variable=IMG_VERSION]latest'
echo '##vso[task.setvariable variable=HYPERV_GENERATION]V2'
echo '##vso[task.setvariable variable=AZURE_VM_SIZE]Standard_D16ads_v5'
echo '##vso[task.setvariable variable=FEATURE_FLAGS]kata'
echo '##vso[task.setvariable variable=ARCHITECTURE]X86_64'
echo '##vso[task.setvariable variable=ENABLE_FIPS]false'
echo '##vso[task.setvariable variable=ENABLE_TRUSTED_LAUNCH]False'
echo '##vso[task.setvariable variable=ENABLE_CGROUPV2]True'
displayName: Setup Build Variables
- template: ./templates/.builder-release-template.yaml
parameters:
artifactName: azurelinuxv3-gen2-kata

- job: buildAzureLinuxV3ARM64gen2fips
timeoutInMinutes: 360
steps:
Expand Down
2 changes: 1 addition & 1 deletion .pipelines/e2e-gpu.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,5 @@ jobs:
parameters:
name: Ubuntu GPU Tests
IgnoreScenariosWithMissingVhd: false
jobTimeoutInMinutes: 120
jobTimeoutInMinutes: 180
failedTestsRetryCount: ${{ variables.E2E_FAILED_TESTS_RETRY_COUNT }}
30 changes: 23 additions & 7 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,16 @@ Windows VHD is configured through [VHD](./vhdbuilder/packer/windows/windows-vhd-

[apiserver](./apiserver/) is `go` based webserver. It receives request from external client and generates CSE and CustomData to be used on the VHD when a new node is created / provisioned.

windows generates its CSE package using [script](./parts/windows/kuberneteswindowssetup.ps1).
windows generates its CSE package using [script](./parts/windows/kuberneteswindowssetup.ps1.template).

Both CSE scripts run in two phases — Windows `BasePrep`/`NodePrep` (`kuberneteswindowssetup.ps1`) and Linux `basePrep`/`nodePrep` (`cse_main.sh`). `basePrep` is gated only by the `base_prep.complete` marker, so it is **skipped on a PIS-cached VHD** (the marker is baked in); `nodePrep` runs whenever `PreProvisionOnly` is false — every real node. So node-specific, secret, or expiring data (e.g. the TLS bootstrap token / kubeconfig) must be written in `nodePrep`, not `basePrep`, or the baked copy goes stale. On PIS the phases are separate VM runs — variables re-initialize from the real node's live CustomData, so `nodePrep` can't rely on `basePrep` state. (Non-PIS: both run sequentially in one execution, no reboot between phases.)
Both CSE scripts run in two phases — Windows `BasePrep`/`NodePrep` (`kuberneteswindowssetup.ps1.template`) and Linux `basePrep`/`nodePrep` (`cse_main.sh`). `basePrep` is gated only by the `base_prep.complete` marker, so it is **skipped on a PIS-cached VHD** (the marker is baked in); `nodePrep` runs whenever `PreProvisionOnly` is false — every real node. So node-specific, secret, or expiring data (e.g. the TLS bootstrap token / kubeconfig) must be written in `nodePrep`, not `basePrep`, or the baked copy goes stale. On PIS the phases are separate VM runs — variables re-initialize from the real node's live CustomData, so `nodePrep` can't rely on `basePrep` state. (Non-PIS: both run sequentially in one execution, no reboot between phases.)

The webserver is also used to determine the latest version of Linux VHDs available for provisioning within AKS clusters.

## Code Structure

[parts](./parts/) serves both AgentBaker Service and VHD build. AgentBaker service and VHDs are coupled because of this shared component. When building VHD, packer maps and renames scripts from [parts](./parts/) depending on the OS / versions. The mappings can be found at [packer](./vhdbuilder/packer/).

> **IMPORTANT**: When making changes to files in the `parts` or `pkg` directories, you must run `make generate` afterward to regenerate the snapshot test data. This ensures consistency between the code and tests and prevents regressions.

Windows uses a different folder [cse](./staging/cse/windows/) for almost the same purpose. There are subtle differences as windows CSEs can be downloaded as a zip file during provisioning time due to restrictions on the file size on Windows system, while for linux based systems the cse/custom data are dropped in during provisioning time.

## Deployment and Release
Expand Down Expand Up @@ -61,7 +59,7 @@ The operational goals of this project are:

When making changes, reason whether the file is used in VHD building stage, or provision stage, or both. Make sure the changes are valid in its life stage. as an example, [windows-vhd-configuration.ps1](./vhdbuilder/packer/windows/windows-vhd-configuration.ps1) defines container images to be cached in VHD, while [configure-windows-vhd.ps1](./vhdbuilder/packer/windows/configure-windows-vhd.ps1) executes commands at provision time.

One way to debug / explore / just for fun is to run [e2e](./e2e/) tests. To run locally, follow the readme file under that folder.
One way to debug / explore / just for fun is to run [e2e](./e2e/) tests. To run locally, follow the readme file under that folder.

The SRE guidelines ground other coding guidelines and practices.

Expand Down Expand Up @@ -94,6 +92,7 @@ When reviewing pull requests, perform breaking change analysis to prevent regres
Analyze PRs for these compatibility scenarios:

**1. Linux Provisioning Script Changes**

- **Context**: Scripts in `parts/linux/cloud-init/artifacts/` run during critical VM bootstrap and are used in both:
- VHD build (uploaded via packer configs in `vhdbuilder/packer/*.json`)
- VM provisioning (CSE - embedded in Go service via `pkg/agent/const.go`)
Expand All @@ -118,6 +117,7 @@ Analyze PRs for these compatibility scenarios:
- **ANC hotfix entry removal**: If a PR removes or modifies the `hotfix-scripts: auto-generated` block in `parts/linux/cloud-init/nodecustomdata.yml`, or resets `parts/linux/cloud-init/artifacts/aks-node-controller-hotfix.json` to `{}`, **always confirm with the PR owner** that all affected VHDs have been republished with the fix baked in or are out of the 6-month support window. Premature removal means nodes provisioned via scale-up on the old buggy VHD will no longer receive the hotfix. These files are auto-generated by `hotfix/hotfix_generate.py` (via the `hotfix-generate` GH Action) — see that script for how `version`/`scripts_version` are computed.

**2. Windows Bidirectional Compatibility**

- **Context**: Windows VHD and CSE scripts release on different cadences with no guaranteed order
- **What to check**: Changes to `staging/cse/windows/` (CSE scripts) or `vhdbuilder/packer/windows/` (VHD scripts)
- **Breaking signals**:
Expand All @@ -127,6 +127,7 @@ Analyze PRs for these compatibility scenarios:
- Removing PowerShell functions or cmdlets that the other component might call

**3. aks-node-controller Migration (Dual-Mode Support)**

- **Context**: Transitioning from uploading scripts during both VHD build and CSE to only uploading aks-node-controller during VHD build
- **What to check**: Any changes must work in BOTH deployment modes
- **Breaking signals**:
Expand All @@ -136,7 +137,8 @@ Analyze PRs for these compatibility scenarios:
- Hardcoded paths that differ between deployment modes

**4. PIS / VHD Caching — basePrep vs nodePrep split (Windows + Linux)**
- **Context**: PIS bakes a VHD from a temporary VM, then boots many real nodes from it. Same model in Windows `parts/windows/kuberneteswindowssetup.ps1` (`BasePrep`/`NodePrep`) and Linux `parts/linux/cloud-init/artifacts/cse_main.sh` (`basePrep`/`nodePrep`):

- **Context**: PIS bakes a VHD from a temporary VM, then boots many real nodes from it. Same model in Windows `parts/windows/kuberneteswindowssetup.ps1.template` (`BasePrep`/`NodePrep`) and Linux `parts/linux/cloud-init/artifacts/cse_main.sh` (`basePrep`/`nodePrep`):
- `basePrep` — gated only by the `base_prep.complete` marker (`C:\AzureData\` Windows, `/opt/azure/containers/` Linux). **Skipped on PIS real nodes** because the marker is baked into the VHD.
- `nodePrep` — runs whenever `PreProvisionOnly` is false (every real node); skipped only on the bake VM.
- The bake run sets `PreProvisionOnly=true` (`{{GetPreProvisionOnly}}`) and writes the marker after `basePrep` succeeds (Windows `finally`; Linux `cse_start.sh`).
Expand All @@ -150,6 +152,7 @@ Analyze PRs for these compatibility scenarios:
- **Don't flag**: plain variable reads (live on the real node from CustomData); cached binaries/packages/images; the `base_prep.complete` marker; cluster-wide non-secrets (CA cert, apiserver FQDN, service CIDR); pre-existing `basePrep` writes unless the PR newly depends on them.

**5. Cross-OS Compatibility**

- **What to check**: Changes work on Ubuntu, Azure Linux/Mariner, and Windows
- **Breaking signals**:
- Linux commands that don't work on both Ubuntu and Azure Linux/Mariner
Expand All @@ -158,6 +161,7 @@ Analyze PRs for these compatibility scenarios:
- Systemd differences between distributions

**6. Package/Dependency Update PRs (Renovate)**

- **Context**: Renovate bot automatically creates PRs to update component versions in `parts/common/components.json`. These components are cached on VHDs during build and directly affect node stability, GPU workloads, networking, and security. Updated packages are downloaded from `packages.aks.azure.com` or upstream registries during VHD build.
- **What to check**: Every version bump—even patch versions—can introduce regressions that affect production nodes.
- **Analysis steps for every package update PR**:
Expand All @@ -181,6 +185,7 @@ Analyze PRs for these compatibility scenarios:
- **Review output for package update PRs must include a detailed version diff analysis**:

**Header:**

```
## Package Update Analysis: <component-name>
**Version change**: X.Y.Z → A.B.C (<major|minor|patch> update)
Expand Down Expand Up @@ -215,13 +220,15 @@ Analyze PRs for these compatibility scenarios:
**If upstream changelog is unavailable**, explicitly state: _"Upstream changelog not found for this version range. Manual testing recommended before merge."_

**Overall risk assessment:**

```
### Overall Risk: 🟢 Low / 🟡 Medium / 🔴 High
**Justification**: <1-2 sentence summary of why this risk level was chosen>
**Recommendation**: Approve / Request more info / Flag for manual testing
```

**Example** (for a PR like dcgm-exporter 4.7.1 → 4.8.0):

```
## Package Update Analysis: dcgm-exporter
**Version change**: 4.7.1 → 4.8.0 (minor update)
Expand All @@ -244,6 +251,7 @@ Analyze PRs for these compatibility scenarios:
### Analysis Approach

**Dynamic Dependency Tracing**:

1. For each changed file, identify what depends on it
2. Follow `source` statements in bash scripts to trace dependency chains
3. Check for function calls, variable references across files
Expand All @@ -255,10 +263,12 @@ Analyze PRs for these compatibility scenarios:
- Flag downloads from unauthorized sources (only packages.aks.azure.com and sources in components.json allowed)

**Historical Context**:

- Look for related changes that previously caused issues
- Identify patterns of fragile areas that break frequently

**Test Coverage Assessment**:

- Note if changed code has e2e test coverage
- Flag changes to untested areas as higher risk
- Mention if new behavior lacks corresponding test additions
Expand All @@ -268,6 +278,7 @@ Analyze PRs for these compatibility scenarios:
Provide targeted inline comments on specific lines where you detect issues:

**For each breaking change or risk:**

- Comment directly on the problematic line or code block
- Explain why this is risky (e.g., "This removes function X which may be called by VHDs built in the last 6 months")
- Suggest specific mitigations or alternatives
Expand Down Expand Up @@ -296,9 +307,14 @@ Provide targeted inline comments on specific lines where you detect issues:
### Review Philosophy

Think like an experienced reviewer who "eyeballs" PRs for subtle risks. Look beyond pattern matching:

- Understand the architecture and how components interact
- Consider timing of releases and deployment sequences
- Reason about implicit dependencies and assumptions
- Flag changes that "feel risky" even without obvious red flags
- Balance thoroughness with actionable feedback
- Focus on high-impact issues that could break production VM provisioning
- Focus on high-impact issues that could break production VM provisioning
- Reason about implicit dependencies and assumptions
- Flag changes that "feel risky" even without obvious red flags
- Balance thoroughness with actionable feedback
- Focus on high-impact issues that could break production VM provisioning
Loading
Loading