Skip to content

docs: fix configuration reference discrepancies#976

Open
robsyme wants to merge 12 commits intomasterfrom
fix-wave-docs-config-discrepancies
Open

docs: fix configuration reference discrepancies#976
robsyme wants to merge 12 commits intomasterfrom
fix-wave-docs-config-discrepancies

Conversation

@robsyme
Copy link
Member

@robsyme robsyme commented Feb 6, 2026

Summary

Systematic audit of Wave documentation against source code, triggered by customer crash when enabling blob cache without static credentials. Fixes 10 categories of discrepancies across 5 doc files.

Crash-inducing fixes

  • Remove blobCache.enabled: false from K8s install example — causes crash loop due to Micronaut eager-loading (install/kubernetes.md)
  • Mark blobCache.storage.accessKey/secretKey as required — code unconditionally passes to AwsBasicCredentials.create(), NPE if null (configuration.md)
  • Fix build.cache from nested object to flat stringBuildConfig.groovy binds as @Value('${wave.build.cache}') String, not a map (configure-wave.md)

Silent misconfiguration fixes

  • Fix blobCache.requestsCpu/Memory property paths — docs said flat blobCache.requestsCpu, code uses blobCache.k8s.resources.requests.cpu; also adds undocumented limits properties
  • Fix urlSignatureDuration path — docs nested under cloudflare, code binds at blobCache.url-signature-duration
  • Fix wave.build.cleanup — property renamed to wave.cleanup.strategy in Sep 2024

Default value corrections

  • blobCache: status.delay 5s→2s, status.duration 5d→1h, timeout 5m→10m
  • scan.enabled: true→false
  • Container images: updated to Seqera-hosted images (public.cr.seqera.io/wave/...)
  • Rate limits: all 4 defaults wrong (e.g. build.anonymous 25/1d→10/1h)
  • httpclient retry.multiplier: 1.0→1.75

Phantom property removal

  • wave.build.logs.bucket — removed from code in May 2025; updated across configuration.md, db-migration.md, migrations/1-21-0.md
  • wave.build.logs.prefix — auto-computed, never configurable
  • wave.build.singularity-image-arm64 — removed from codebase

Other

  • Document node-selector value format (key=value)

All discrepancies verified on both master and v1.32.2.

Files changed

  • docs/configuration.md — bulk of fixes
  • docs/configure-wave.md — build cache YAML structure
  • docs/install/kubernetes.md — remove crash-inducing example
  • docs/db-migration.md — remove phantom logs.bucket reference
  • docs/migrations/1-21-0.md — remove phantom logs.bucket reference

Test plan

  • Verify docs render correctly in Docusaurus
  • Spot-check 3-4 property names against source code
  • Confirm blobCache stanza is absent from K8s install ConfigMap example

🤖 Generated with Claude Code

… example

The blobCache stanza with enabled: false causes a crash loop due to
Micronaut eager-loading related beans. The stanza must be omitted
entirely when blob cache is not desired.

Ref: FD-7221

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
Source: application.yml overrides the @value annotation default of 2.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
…64, update image defaults

- wave.build.cleanup -> wave.cleanup.strategy (CleanupConfig.groovy:40)
- wave.build.singularity-image-arm64 removed (no longer exists in source)
- buildkit image: moby/buildkit -> public.cr.seqera.io/wave/buildkit
- singularity image: quay.io v3.11.4 -> public.cr.seqera.io/wave v4.2.1-r4

Source: application.yml, CleanupConfig.groovy

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
wave.build.logs.bucket does not exist in source code. wave.build.logs.prefix
is auto-computed from wave.build.logs.path. Updated all references to
clarify that logs.path and locks.path take full paths (S3 URIs or local).

Source: BuildConfig.groovy lines 138, 146, 206

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
Source: K8sHelper.groovy line 96

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
scan.enabled defaults to false per ScanEnabled.groovy.
Scanner image is wave/scanner, not aquasec/trivy.

Source: ScanEnabled.groovy:34, application.yml

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
build.anonymous: 25/1d -> 10/1h, build.authenticated: 100/1h -> 10/1m,
pull.anonymous: 250/1h -> 100/1h, pull.authenticated: 2000/1m -> 100/1m

Source: RateLimiterConfig.groovy lines 44-59

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
Property is bound as wave.blobCache.url-signature-duration, not nested
under wave.blobCache.cloudflare.

Source: BlobCacheConfig.groovy line 102

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
Property paths were flat (blobCache.requestsCpu) but the actual bindings
are nested (blobCache.k8s.resources.requests.cpu). Also adds the
undocumented limits.cpu and limits.memory properties.

Source: BlobCacheConfig.groovy lines 86-99

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
status.delay: 5s -> 2s, status.duration: 5d -> 1h, timeout: 5m -> 10m

Source: BlobCacheConfig.groovy lines 43, 54, 57

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
These credentials are unconditionally passed to AwsBasicCredentials.create()
in S3ClientFactory, causing NPE if null. IAM-based auth is not yet
supported for blob cache.

Ref: FD-7221

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
wave.build.cache is bound as a simple String in BuildConfig.groovy,
not a nested object with enabled/repository sub-properties.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Signed-off-by: Rob Syme <rob.syme@gmail.com>
@robsyme robsyme marked this pull request as ready for review February 6, 2026 22:05
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.

1 participant