-
tagsAppliedoutput evaluation order. InitialEksSubnetTaggerimplementation pushedAppliedTagentries onto a closure-captured array insidepulumi.output(...).apply(...)callbacks, then composed the output viapulumi.all(collected). The composition ran synchronously during construction, before the apply callbacks fired — so the output resolved to[]. Fix: build the per-list arrays inside theapply(which now returnsAppliedTag[]), then compose viapulumi.all([publicTags, privateTags]).apply(...). The lesson is broader: closure-captured collections that depend on PulumiOutputresolution must NEVER be assembled outside anapplyboundary. -
Parameters<typeof Class>doesn't work with class types. TypeScript'sParameters<>requires a function type; classes needConstructorParameters<>. Both test files initially used the wrong utility — typecheck caught it cleanly. Recorded so M2-M5 tests use the right shape from the start.
-
Package layout: separate
@hulumi/k8s-baselinepackage, NOT@hulumi/baseline/k8ssubpath. Per the design record. Implemented as a fourth workspace package alongsidebaseline,policies,drift. Workspace already includespackages/*so nopnpm-workspace.yamledit was needed. -
@pulumi/awsas peer dep.EksSubnetTaggeris by definition AWS-specific (usesaws.ec2.Tag). Adding@pulumi/awsas a peer dep is acceptable — consumers using this component are already declaring AWS use by importing it. Documented in the package.json comments. -
releaseNamedefaults to component instance name verbatim. The single most important M1 design call. Reverses Pulumi's "always add an 8-char random suffix" default. Two same-instance-name same-namespace components will collide loudly at preview time — this is a feature, not a bug. The migration cookbook for adopting the wrapper on existing suffixed releases lands in M5 (docs/cookbooks/k8s-helm-release-rename.md). -
daemonSet: trueis opt-in, not auto-detected. Per the design record's M1 commitment. Considered auto-detection via post-rendering Helm charts but rejected as fragile (charts that conditionally render DaemonSets on a values flag would mis-detect). Explicit opt-in is correct-by-construction. -
COMPATIBILITY.md+ typedTESTED_VERSIONSconst ship empty in M1. First entries land in M2 with the three Istio charts. The warn-not-throw machinery is wired and tested even though no entries exist yet.
- The runbook anticipated optionally adding
@pulumi/eksas a peer dep forEksSubnetTaggertyping. Decided NOT to add — the typed args don't need EKS-specific types (subnet IDs are plain strings; cluster name is a string). Keeps the install cost lower. - The runbook anticipated possibly extending
pnpm-workspace.yaml. The existing config already coveredpackages/*so no edit was needed. Recorded in Evidence Log. - The kind integration test (
hardened-helm-release.kind.test.ts) is deferred to M5. Rationale: writing it now requireskindavailable locally + a passing real Helm install round-trip, which adds a dev-environment dependency not currently expected of contributors. The mock-runtime BDD covers the wrapper's logic completely; the kind smoke test fits better as part of M5's CI integration sweep.
- The output-evaluation timing bug in
EksSubnetTaggerwould have been caught earlier by writing thetagsApplied-asserting test first (TDD discipline). Instead the initial implementation'spulumi.all(collected)shape looked plausible and shipped topnpm testbefore being caught. The TDD ordering goes back into the M2 step-by-step.
- The
chartClass: "istio"enum extension inHardenedHelmReleasealready lands here (mock-runtime test asserts the 480_000ms default). M2'sIstioFoundationconsumes it without needing a wrapper change. @hulumi/baselineand@hulumi/k8s-baselineare now two separate packages. The cross-package contract (K8s package may import types frombaselinebut not runtime resources) is preserved.