Skip to content

feat(config): parse, validate, and resolve the components model under schema_version 1 - #507

Merged
joshua-temple merged 1 commit into
mainfrom
feat/components-model
Jul 8, 2026
Merged

joshua-temple merged 1 commit into
mainfrom
feat/components-model

Conversation

@joshua-temple

Copy link
Copy Markdown
Collaborator

Problem

The components: manifest block exists only as a reserved, inert shape. Multi-component (monorepo) support is folding into v1 as the native schema_version 1 model, so the config layer must accept and resolve components.

Fix

Activate components: as a live config surface:

  • Parse named components, each with a required path and tag_prefix, valid when schema_version is omitted or 1 (the too-new guard for >= 2 is unchanged).
  • Resolve effective per-component config by inheriting shared top-level defaults and overriding them per field. Global-only fields are not per-component and an override is rejected.
  • Validate that per-component tag namespaces are pairwise distinct.
  • A manifest with no components: block is unchanged: the single-component path stays byte-identical (no component dimension exists).

Scope is the config layer only. Per-component workflow generation and the scoped state serializer land in follow-on increments; the behavioral e2e scenario arrives with generation.

Verification

go build ./..., go test ./... (2543 pass), go test ./... -race (2543 pass), and golangci-lint run ./... all clean. The three embedded schema copies are re-synced and byte-identical (TestSchema_OnDiskCopiesAreByteIdentical), and every e2e scenario config still validates against the schema (TestSchema_ValidatesE2EScenarioConfigs).

Refs #280, #281.

… schema_version 1

Activate the reserved components block as a live config surface. A manifest may declare named components with a per-component path and tag_prefix, inheriting shared top-level defaults and overriding them per field. Validate that per-component tag namespaces are distinct and reject per-component overrides of global-only fields. A manifest with no components block is unchanged: the single-component path stays byte-identical.

Refs #280, #281.

Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
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