terradart_codegen 0.11.0
terradart_codegen: ^0.11.0 copied to clipboard
terradart Stage 1 codegen — parses Terraform provider schema JSON and Magic Modules YAML and emits annotated abstract Dart classes. Ships the terradart CLI.
Changelog #
0.11.0 2026-MM-DD #
BREAKING — template-side rename pass that pairs with the terradart_core 0.11.0 public-surface change (ADR-0016). v0.x permits breaking changes; emitted wrappers in terradart_google 0.11.0 follow the new shape. See MIGRATING.md for before / after snippets.
- Bumped
terradart_coreconstraint to^0.11.0. wrapper_emitter.dart/data_source_wrapper_emitter.dartemitstatic const String tfTypeandSet<String> get sensitiveFields(andbool get supportsDeletionProtectionwhen the schema opts in) without the dollar prefix. The accompanying// ignore: constant_identifier_namesand// ignore: non_constant_identifier_namesdirectives are dropped.enum_emitter.dartappendsimplements TerraformEnumon every emitted enum declaration. The wrapper file already importspackage:terradart_core/terradart_core.dart, which re-exports the interface — no additional import at the enum-emit site.valid_values_emitter.dart(wrap-promote scaffold) emits the sameimplements TerraformEnumclause plus@overrideon the generatedString get terraformValuebody.universal_invariants/enum_extractor.dartregex now tolerates the optionalimplements TerraformEnumclause so the extractor stays backwards-compatible with wrap-promote scaffolds that haven't been fleshed out yet.- YAML prelude bodies (62 files, 233 enums) updated:
implements TerraformEnumadded to everyenum X {declaration plus@overrideon the matchingfinal String terraformValue;field. Doc-comment / inline-comment references to the dollar-prefixed identifiers are renamed in sync so the regen output and the override YAML stay aligned. wrapper_override.dart/sensitive_set_emitter.dartdartdoc strings referencesensitiveFields/tfTypewithout the dollar prefix.- No new CLI surface in this release.
0.10.0 2026-MM-DD #
- Bumped
terradart_coreconstraint to^0.10.0. - New YAML override
wrapper_overrides/yaml/google_firestore_document.yamlenabling theterradart_googlev0.10.0 Firestore document curation.
0.9.0 - 2026-05-21 #
BREAKING — pre-1.0 polish wave. Codegen template changes that propagate to terradart_google's emitted wrappers (0.9.x staging for the 1.0 surface; breaking changes still permitted within 0.9.x → 1.0):
- Bumped
terradart_coreconstraint to^0.9.0. - Wrapper emitter emits
@override bool get $supportsDeletionProtection => true;on wrappers whose schema includes adeletion_protectionattribute. - Abstract-class emitter emits service-prefixed nested helper class names (
SqlDatabaseInstanceSettings,BigqueryDatasetAccess,SecretManagerSecretReplication,LoggingProjectSinkBigqueryOptions, etc.) — no more bareSettings/Access/Replication/BigqueryOptionsWave 4-era shapes. - Abstract-class emitter emits
TfArg<T>-wrapped nested-helper fields uniformly. Plain Dart-type fields on helpers (Wave 7-era Monitoring uptime check shapes) are eliminated. - Wrapper emitter emits
.iamMembergetter (was.member) for IAM-binding refs. - Wrapper emitter emits
.locationRefmirror getter ongoogle_cloud_run_v2_service+google_cloud_run_v2_job(cookbook-evidence allow list; v1.x may extend). - Added Gates 6 (nested-helper prefix), 7 (TfArg-wrap uniformity), 8 (enum value identifier length ≥ 4 with industry-acronym allow-list) to
universal_invariants_test. - YAML override format extended for per-resource class renames.
See MIGRATING.md for the full migration guide.
0.8.0-dev - 2026-05-19 #
- Plan 5.H Wave 7: 23 new curated GA resources added to the registry (Data ops + observability + CI/CD).
- Constraint bump:
terradart_core: ^0.8.0-dev(lockstep withterradart_coreandterradart_google). - Discovered + corrected a manifest naming bug in
tool/mm_yaml_sources.yaml: the Wave 7 Batch 0 seed usedgoogle_logging_log_metric(a non-existent Terraform resource); the actual provider resource isgoogle_logging_metric(renamed in Batch 2, see pitfall #12 in wave-commit-pitfalls memory). - No CLI / codegen / wrap-promote changes.
0.7.0-dev - 2026-05-19 #
- Plan 5.G Wave 6: 25 new curated GA resources added to the registry (Compute LB stack — L7 Application LB Global + Regional/Internal cores + Health checks + MIG/Autoscaler + NEG + Cloud Armor + SSL Policy).
- Constraint bump:
terradart_core: ^0.7.0-dev(lockstep withterradart_coreandterradart_google). - No CLI / codegen / wrap-promote changes.
0.6.0-dev - 2026-05-18 #
Plan 5.E: Schema-bump automation. Adds a weekly GitHub Actions workflow
(.github/workflows/schema-bump.yml) that detects terraform-provider-google
v7 bumps + magic-modules MM YAML overlay updates, runs drift detection
(terradart wrap --check + 6 universal QA gates), and opens a PR with a
structured drift report. v8+ majors are surfaced as a banner but never
auto-bumped. New google_* resources are appended to
tool/curation_backlog.yaml.
- New:
tool/fetch_schema.dart,tool/sync_mm_yaml.dart,tool/generate_drift_report.dart,tool/mm_yaml_sources.yaml,tool/curation_backlog.yaml. - New:
dev_dependenciesaddhttp: ^1.0.0andpub_semver: ^2.1.0. - See ADR-aligned spec at
docs/superpowers/specs/2026-05-17-plan5e-schema-bump-automation-design.md.
WrapperOverride YAML registry expands from 49 to 71 resources (Wave 5 additions; see terradart_google 0.6.0-dev for the resource list). All 6 universal QA gates continue to hold over the expanded registry. Workspace consistency bump alongside terradart_google 0.6.0-dev.
0.5.0-dev #
Plan 5.X: schemantic codegen path removed.
file_emitterno longer emitspart 'X.schema.g.dart';.abstract_class_emitter+data_source_class_emitterdeactivated (Layer 1 schema-carrier classes no longer emitted).wrapper_emitter+data_source_wrapper_emitter: stop emitting_<R>SchemaInstancestub block, stop emittingschema:arg, drop generic fromextends Resource, emit file-private_<resource>Sensitiveconst at the top of the wrapper file.sensitive_set_emitterretargeted to wrapper-file inline (no longer writes into.schema.dart).wrap_command: Layer 1 emit step + Layer 2 build_runner invocation removed.WrapperOverride.schemaStubCommentaxis dropped fromwrapper_override.dart+yaml_loader.dart+ 14 YAML override files.- Dropped
terradart_annotationsruntime dep. - See ADR-0013 for full rationale.
0.4.0-dev - 2026-05-17 #
Plan 5.D — codegen correctness improvements (4 PRs).
Added #
- Gate 6: sealed-class
encode()round-trip (structural) — new universal QA gate (joining the existing 5 from Plan 5.A) that, for every shipped sealed-class member, constructs a synthetic instance, callsencode()(ortoArgMap()fallback), and asserts the result is a non-emptyMap<String, Object?>(or single-elementList<Map<...>>fornesting_mode: list, max_items: 1), every required ctor param's snake_case schema key is present (recursively — discriminator-block wire formats nest required keys inside), no rawTfArg<T>values leak, and noUnimplementedErroris thrown. Currently covers 34 sealed-class members across 11 sealed classes. SealedClassExtractor+SyntheticInstanceBuildermodules underlib/src/codegen/universal_invariants/— building blocks for Gate 6 (regex-based prelude parsing).MinItemsAssertEmitter— wrap-promote now emits curator-facing commentedassert(list.length >= N)hint snippets for top-level list-shape nested blocks withmin_items >= 1 && max_items != 1. Curator copies the snippet into their helper-class constructor on next regen. Scalar attribute constraints (min_length/max_length/min/max/regex) stay at the schemantic layer.tool/measure_param_order.dart— standalone measurement script that quantifies how well a candidate paramOrder heuristic predicts the curator-curated orders across the 49-yaml corpus. Output (gitignored, regenerable) drives a Wave 5-close decision matrix on whether to ship the heuristic.
Fixed #
MmYamlParsernow readsdeprecation_message:from MM YAML field overrides intoConstraints.deprecationMessage.IrMerger._mergeAttrpropagates the field with the MM-wins precedence used forregex/minLength/ etc. Closes a Plan 4.2-era dead-code path inwrap_init_generator._buildDeprecatedParamsAxisthat read a perpetually-null field. Skeleton emission ofdeprecatedParams:(the now-populated downstream consumer) stays deferred to Plan 5.E (Renovate-driven schema-bump automation).exactly_one_of_emitter.dartskeleton: replaced misleadingString encode()signature withMap<String, Object?> encode(). The previous shape mismatched all 12 production sealed-class instances and pointed curators at the wrong wire format.
0.3.0-dev - 2026-05-16 #
No user-facing CLI changes. WrapperOverride YAML registry expands from 30 to 49 resources (Wave 4 additions: see terradart_google 0.3.0-dev for the resource list). Plan 5.A's 5 universal QA gates continue to hold over the expanded registry. Workspace consistency bump alongside terradart_google 0.3.0-dev.
0.2.1-dev - 2026-05-16 #
No API change since 0.2.0-dev. Re-published after the 0.2.0-dev tag's publish run failed at the parallel matrix validation step — terradart_codegen was uploaded before pub.dev's index had terradart_core 0.2.0-dev, causing the ^0.2.0-dev constraint to fail version solving. 0.2.1-dev ships through a re-ordered publish pipeline (publish-codegen now waits for publish-no-deps to complete + pub.dev index propagation before uploading).
0.2.0-dev - 2026-05-16 #
Added #
extraSensitiveFields:yaml override axis — curators can declare per-resource sensitive paths beyond what the Terraform schema flags. Each entry is a dotted path (e.g.metadata_startup_script); the resulting<Resource>Sensitiveconst ships the union of schema-declared and curator-declared paths.terradart wrap --only=<resource>— regenerates a single wrapper file even when sibling yaml overrides have validation errors. Designed for the case where unrelated breakage in another resource blocks the whole-packagewrapcycle.wrap-promotenow extracts enum candidates from prose descriptions matchingPossible values: A, B, Cin addition to schemaenum_valuesblocks. Falls back to the prose set when the schema declares no enum, with MM yaml taking priority when both are present.- 5 universal QA gates (CI-only invariants over
terradart_google/lib/src/**):paramOrdercovers every required schema attribute, emitted enumterraformValuematches schemaenum_values, noUnimplementedError('TODO(wrap-promote)')ships in the curated source, every emitted enum member is lowerCamelCase, and sensitive path masking round-trips to"".
0.1.0-dev - 2026-05-14 #
Added #
- New
terradart wrap-promotesubcommand. Scans a curated override yaml against the parsed provider schema and appends a# === wrap-promote additions ===marker block proposingenum_valuesblocks anddartTypeOverridesentries for fields whose schema declares a fixed value set. Authors review, integrate into the mainprelude:/dartTypeOverrides:blocks, then strip the marker. Naming choices stay with the human. dartTypeOverridesnow correctly handles ALL_CAPS leaf field names (ADD_COST_TO_MED→addCostToMed), Dart reserved words via aCasesuffix (default→defaultCase), and aggregates all generated enums into a singleprelude: |block per resource.- Schema descriptions containing literal
$(e.g. BigQuery'ssample_table$20190123partition-decorator example) and over-escaped apostrophes (e.g.compute_instance.advanced_machine_features.visible_core_count'sinstance\'s nominal CPU) are now sanitized at the parser layer ($→$,\'→') so the generated.schema.g.dartremains parseable Dart. ProviderRulesabstraction lets non-hashicorp/googleproviders ship their own resource allow/deny lists, output-dir aliases, and slot-resolution rules.GoogleProviderRulesis the built-in implementation for the google provider; existing behaviour is unchanged.- WrapperOverride YAML registry expanded from 13 to 27 resources + 1 data source.
0.0.4-dev - 2026-05-11 #
- feat: new
terradart wrapsubcommand regenerates the curated factory wrapper files from the package's production YAML overrides. Flags:--provider,--source,--output,--check(CI-gate mode, exit 65 on divergence),--force(overwrite non-generated files). - feat:
DataSourceWrapperEmitterproduces data source Layer 2 factories (final class X extends Data<$X>).DataSourceClassEmitterproduces Layer 1 schema carriers (data_<resource>.schema.dart). - feat: WrapperOverride YAML schema extended from 11 to 15 axes (
kind,outputDir,schemaStubBodyMode,fileLeadingComment); kind dispatches resource vs data source overrides. - feat:
LoaderErrorReportaggregates YAML override validation failures into a single report with stable error codes (E101unknownKind, E102outputDirRequired, E103outputDirInvalid, E104outputDirMismatchForDataSource, E201axisNotAllowedForDataSource, E301checkMismatch, E401refuseOverwriteNonGenerated). - feat:
generatedFileHeaderconstant prepended to all wrap-emitted files (3 lines: GENERATED FILE marker + regen hint +ignore_for_file: prefer_relative_imports). - chore: production YAML registry covers 12 resources + 1 data source (google_project).
0.0.3-dev - 2026-05-09 #
- Fix: rename terradart_core main library file to match package name.
0.0.2-dev - 2026-05-09 #
- CI automated publishing via OIDC trusted publisher.
- Fix: prepare_publish.sh now syncs version from tag name.
0.0.1-dev - 2026-05-09 #
Added #
- Initial pre-alpha release of
terradart_codegen. terradart codegenCLI — consumesterraform providers schema -jsonoutput (+ optional Magic Modules YAML overlay) and emits annotated abstract Dart classes forschemantic.- Pipelines together with
terradart_annotationsto feedpackage:schemantic/build_runnercodegen.
Notes #
- Pre-alpha — emitted symbol names and CLI flags may change between 0.0.x releases.