Skip to content

fix: override Bottlerocket autoscaling should-wait to false - #9464

Open
konippi wants to merge 1 commit into
aws:mainfrom
konippi:fix-bottlerocket-should-wait
Open

fix: override Bottlerocket autoscaling should-wait to false#9464
konippi wants to merge 1 commit into
aws:mainfrom
konippi:fix-bottlerocket-should-wait

Conversation

@konippi

@konippi konippi commented Jul 31, 2026

Copy link
Copy Markdown

Fixes #5552

Description

Bottlerocket's settings.autoscaling.should-wait = true makes a node wait for its EC2 Auto Scaling group to reach InService before starting kubelet. Karpenter launches instances through EC2 Fleet and never joins an Auto Scaling group, so the node waits forever and never joins the cluster. Karpenter now overrides an explicitly configured should-wait to false when generating Bottlerocket UserData, preserving other settings.autoscaling.* fields and emitting nothing when the setting is not specified to stay compatible with Bottlerocket images that predate it.

How was this change tested?

  • Added unit tests: explicit true is overridden to false, sibling-only autoscaling tables are left untouched, no settings.autoscaling is emitted when unspecified, and non-boolean values are rejected
  • go test -race ./pkg/providers/amifamily/bootstrap/... and go vet pass

Does this change impact docs?

  • Yes, PR includes docs updates
  • Yes, issue opened: #
  • No

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@konippi
konippi requested a review from a team as a code owner July 31, 2026 04:44
@konippi
konippi requested a review from ryan-mist July 31, 2026 04:44
vdemkiv pushed a commit to vdemkiv/taskPlane that referenced this pull request Aug 12, 2026
…ops paying six times

v2.9.0 was run end-to-end against aws/karpenter-provider-aws#9464 in a
separate session. The harness held — not one write reached reviewed source
— and nine defects surfaced that only appear at somebody else's scale.

B6  the headline said `0 high · 3 med · 13 low` over a finding whose
    `class: regression` the engine's own gate blocks; the reviewer read the
    headline, reported "0 confirmed regressions", and recommended approve.
    It now reads the blocking set off loop.classify_findings — never a
    second implementation — and prints `1 BLOCK (1R·0H·1P·0O)`.
B1  six sibling lens contracts intersected to the EMPTY set, so 4 of 6
    lenses wrote nothing and the wave board read 2/6 for a finished review.
    Sibling waves (all read-only, all write-allow under one common root)
    now merge write-allows and SUM budgets; genuinely competing contracts
    still intersect to nothing.
B5  a root go.mod was skipped, so every pkg/** import landed as ext: and
    graph impact reported 2 modules on a 256-module repo. The root module
    path is consumed as a PREFIX, never as a module id.
B7  tp version was broken on every Claude-side install — it read only the
    Codex manifest, which the Claude package does not ship.
B8  a review dashboard is a standalone document when it leaves the session.
B9  six lens agents each burned actions rediscovering that `go test` could
    not run. lens dispatch now probes runnability ONCE with a bounded cheap
    subcommand (never the suite), states it in every brief with an explicit
    do-not-re-probe instruction, shows it on the wave board, and caches it
    per tree state + PATH. Information, never a gate — pinned by a test
    that no screener, contract or gate reads it. TASKPLANE_RUNNABILITY=off.

Refused: exempting `tp clear` from metering. Clearing leaves the workspace
ungoverned, where the screener abstains — a deadlock traded for a bypass.
Only pure reads are exempt; recovery happens from outside.

1,899 tests, both CI legs plus the C-locale leg. 13 mutations observed
failing, one of which found a position bug in this wave's own code
(`echo tp clear` was read as a release command).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SQDTFvvooeVoKMfCfJD1Yh
vdemkiv pushed a commit to vdemkiv/taskPlane that referenced this pull request Aug 12, 2026
…ncies

Two field reviews of aws/karpenter-provider-aws#9464 both cloned the
repository and neither could PROVE it. `tp new` took the target as free
text; the contract recorded task, read_only, write_allow, budget — no
origin, no base, no head, no record of how the code arrived. Both reports
stated the workspace and the diff base in prose, by hand, and a review
conducted entirely from a rendered web diff would have produced identical
artifacts and an identical gate.

  tp target fetch <pr>   acquires a pull request with the same two git
                         commands every time, and records them
  tp target pin --base   reads what the checkout IS — origin, head, base,
                         merge-base, dirty paths — and reduces it to one
                         comparable fingerprint
  tp target tools        is git present, is gh present and authenticated
  tp new --target …      does the pin (and optionally the fetch) at
                         activation and writes it into the contract

Findings cite the fingerprint in `meta.target`. `tp findings` prints
UNBOUND when they cite nothing or a different tree — reported, never
withheld, because a human is better served by the findings plus a warning
than by a refusal. The SIGN-OFF is what is gated: the PreToolUse screener
refuses dod / loop submit / loop approve / loop retro on a read-only
contract until the workspace is pinned. Same conversion as v2.9.0's
obligations, and just as narrow — doing the review is never blocked, only
declaring it finished, and a build contract (which already carries its
snapshot) is untouched.

GH AS A DEPENDENCY. A clone carries the code and none of the intent: a
PR's title, body, linked issues and review conversation are not in the git
objects at all. In the field gh was absent and that context arrived over
unauthenticated web reads nothing recorded. `tp onboard` and `tp target
tools` now report git and gh with versions and auth state; `--install`
installs gh through the host's own package manager; a remote-PR review
without gh fails loudly instead of degrading quietly.

taskplane deliberately does NOT download and execute a release tarball.
A hardcoded checksum nobody maintains is a worse guarantee than the
package source the user already trusts, and a test pins that target.py
never reaches for curl, urlopen, requests or tarfile.

Also: the release-tag gate's C4 exemption covered exactly one unreleased
version, which broke the moment two release commits stacked up locally
(v2.11.0 committed, v2.12.0 in the tree). It now exempts any version some
commit reachable from HEAD declares — prepared, not merely claimed.

2,013 tests, three legs. 9 mutations observed failing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SQDTFvvooeVoKMfCfJD1Yh
@konippi
konippi force-pushed the fix-bottlerocket-should-wait branch from 8b187b8 to 210bdf4 Compare August 13, 2026 02:37
@konippi

konippi commented Aug 13, 2026

Copy link
Copy Markdown
Author

Hi @ryan-mist, gentle ping on this PR when you have a chance. This fixes the Bottlerocket node registration issue described in #5552.

@konippi
konippi force-pushed the fix-bottlerocket-should-wait branch from 210bdf4 to 3691a61 Compare August 26, 2026 06:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Should not set 'shoud-wait' in 'settings.autoscaling' to true in Bottlerocket userdata

1 participant