terradart_codegen 0.12.1
terradart_codegen: ^0.12.1 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.12.1 #
No user-facing changes. Lockstep version bump alongside the terradart_agent v0.12.1 fix. terradart_core constraint bumped to ^0.12.1.
0.12.0 #
Adds static-catalog emission so the curated terradart_google surface can be introspected without loading or analyzing the wrapper source. Powers the new terradart-mcp server (terradart_agent).
- Bumped
terradart_coreconstraint to^0.12.0. - New
CatalogMetadataEmitter— emitsterradart_google/lib/src/_catalog.g.dart, a generatedconst List<CatalogEntry> terradartCatalogwith one entry per curated resource and data source (tfType, Dart class name, per-service barrel, kind, summary, constructor params, nested types, sensitive fields, doc comment). - New
catalog_entry_builder.dart— builds the per-resourceCatalogEntrymetadata from the same parsed IR + YAML overrides the wrapper emitters consume, so the catalog never drifts from the emitted wrappers. terradart wrapnow emits the catalog. The catalog file is regenerated as part of the normal wrap cycle (and verified underwrap --check) alongside the wrapper files — no separate command, and zero drift against the emitted source.- No new CLI surface in this release.
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.