Skip to content
Novus Examples
yaml915 B

YAML Merge Keys and Precedence

Merge keys with their full precedence rules: local keys beat merged ones, and in a merge sequence the earlier alias wins. The file publishes the expected merged values, and a strict YAML 1.2 loader produces none of them because 1.2 dropped << from the core schema.

Preview — first 38 linesyaml
# Merge keys. `<<` is a YAML 1.1 type (tag:yaml.org,2002:merge) that YAML 1.2 dropped from the
# core schema. A 1.1 loader merges the aliased mapping into the current one; a strict 1.2 loader
# treats `<<` as an ordinary key whose value happens to be an alias, so the merge never happens
# and every job silently loses its inherited settings.
#
# Precedence: keys written in the mapping itself WIN over merged keys, and in a merge sequence
# the EARLIER alias wins over later ones.
.defaults: &defaults
  image: registry.example.invalid/ci/runner:1.4
  retries: 2
  timeout: 30

.linux: &linux
  os: linux
  arch: amd64
  timeout: 600

build:
  <<: *defaults
  script: make build

test:
  <<: [*defaults, *linux]
  retries: 5
  script: make test

deploy:
  <<: *defaults
  timeout: 900
  script: make deploy

expected:
  build_timeout: 30
  test_timeout: 30
  test_retries: 5
  test_os: linux
  deploy_timeout: 900

Specifications

Merge Keys
3
Merge Sequences
1
Yaml11 Feature
true
Yaml12 Core Schema
<< is an ordinary key
Expected Test Timeout
30
Expected Test Retries
5

Testing contract

Expected to pass
Scenario
Apply YAML merge-key semantics, including a merge sequence with conflicting keys
Expected result
test.timeout resolves to 30 (the earlier alias wins over *linux's 600) and test.retries to 5 (the local key wins over the merged 2)

What is a .yaml file?

YAML (YAML Ain't Markup Language) is a human-readable data-serialization format using indentation, key-value pairs, and lists, and is a superset of JSON. It supports comments, anchors, and multiple documents per file, favoring readability for configuration. Its indentation sensitivity makes it error-prone to hand-edit.

How to use this file

Use an example YAML file to test config parsers, indentation and anchor handling, multi-document streams, and safe-loading to avoid arbitrary object construction.

How to use this file for testing

“YAML Merge Keys and Precedence” is a deterministic Novus Examples fixture for Config parsing, Encoding detection, Editor testing. TOML and INI configuration files with nested sections and typed values — for testing config parsers and loaders.

Documented properties for this file: YAML · 915 bytes. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.

Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.

Pipeline and infrastructure fixtures are inert configuration: steps reference fictional images and scripts, and nothing here executes. Run your linter, schema validator, migrator, or policy engine against them, and expect the deprecated-syntax and intentionally invalid variants to be rejected.

Point your config loader at the file and assert it reads the documented sections and typed values, including any deliberately-tricky nesting or comments.

Code examples

import yaml  # pip install pyyaml

with open("merge-keys.yaml") as f:
    data = yaml.safe_load(f)
print(data)

Generated by generation/pipelines.py. Free for any use, no attribution required — license.