Description
Give a newcomer one deliberately small blueprint selection and deployment path instead of loading every bundled blueprint. The default image currently bakes and activates 26 examples, while the quickstart names no concrete workload for verifying traces and logs.
Acceptance Criteria
- #1 The recommended first run selects one known low-cost blueprint rather than all bundled examples
- #2 The selected blueprint contains at least one fake workload and the guide names its exact runtime blueprint, workload, and service identities
- #3 The selection mechanism works for both source and published-container execution and shows selected names/count before live push
- #4 Quick Start gives concrete Prometheus, Loki, and Tempo checks for that workload with expected non-empty behavior
- #5 A forward test proves the container used the authored/selected blueprint rather than a cached image-bundled catalog
Definition of Done
- #1 make gate (build vet test race rw-proto-check spdx-check forbidden-words)
- #2 make blueprint-schema (only if a blueprint field or construct/workload config struct changed)
- #3 DRY_RUN=true go run ./cmd/synthkit -once -dump — inventory diffed against signals/
Implementation Plan
-
Add one explicit pre-load blueprint-name selection mechanism shared by source and container execution, with strict unknown-name failure and config/env coverage.
-
Make otlp-native the documented focused first workload and name its exact runtime identities and Grafana checks.
-
Prove source and locally built container selection in isolated dry-run mode, including selected count and cached-image false-pass protection.
Implementation Notes
Implemented exact BLUEPRINT_NAMES selection before full blueprint resolution for source and Compose execution, with strict unknown-name failure and selected-name logging. Quick Start now uses the bundled otlp-native blueprint, names its cluster and workload/service identities, gives concrete Prometheus/Loki/TraceQL checks, and documents a locally built Compose proof that avoids cached-image false positives. Focused Go tests, env alignment, source dry run, and locally built container dry run passed. Full gate, inventory gate, and live Grafana push remain root integration checks.
Integrated CodeRabbit review raised one minor early-return profiler cleanup issue; fixed by installing the bounded shutdown defer immediately after profiler start and added a focused run-level selector test. Wave integration make gate passed. Default dry run loaded 26 blueprints with 2,788 inventory lines; focused otlp-native dry run loaded one blueprint with 694 lines and no hard errors. No blueprint schema regeneration was needed because no blueprint or construct/workload config field changed.
Post-review published-image proof completed against ghcr.io/rknightion/synthkit:main. Pulled digest sha256:327ea7bf8d5fbea507029f8e2ff14c594c3d04797afe3fb33aa86dcacbc22b20; OCI revision was exact pushed SHA 1569d344ccab04addf301c43753c945b3a7f1892. docker run with DRY_RUN=true and BLUEPRINT_NAMES=otlp-native emitted 694 inventory lines and logged selected blueprints: 1 [otlp-native] plus mode DRY_RUN, closing the published-container acceptance evidence gap.
Final Summary
Landed in e98411b: first-run exact blueprint selection, focused otlp-native source/container path, named Grafana verification queries, and profiler-safe selector failure. Verified with local-source Compose, focused tests, CodeRabbit, make gate, and full/focused dry-run inventories.