== @ConfigurationProperties vs @Value, same application, same application.yaml ==

$ curl -s localhost:8080/diag/bound
{
    "mail": {
        "host": "smtp.example.com",
        "port": 587,
        "timeout": "PT45S",
        "retries": {
            "maxAttempts": 5,
            "backoff": "PT1.5S"
        },
        "recipients": [
            "ops@example.com",
            "oncall@example.com"
        ],
        "headers": {
            "X-Env": "demo",
            "X-Team": "platform"
        }
    },
    "validated": {
        "name": "demo-service",
        "port": 8443,
        "endpoint": "https://api.example.com",
        "pool": {
            "size": 25
        }
    },
    "fromValueAnnotation": {
        "host": "smtp.example.com",
        "port": 587,
        "timeout": "PT45S",
        "recipients": [],
        "poolSize": 25,
        "computedThreads": 4
    }
}

demo.mail.recipients is a YAML block list. The binder produced both elements.
@Value produced an empty list -- placeholder resolution has no concept of a YAML
sequence, so ${demo.mail.recipients:} fell through to its own empty default.

== the same list written as a comma-separated string, at higher precedence ==
$ ./scripts/run.sh "" --demo.mail.recipients=x@e.com,y@e.com,z@e.com
  binder : ['x@e.com', 'y@e.com', 'z@e.com']
  @Value : ['x@e.com', 'y@e.com', 'z@e.com']

Both see it. A comma-separated string is the one list shape @Value understands, and
the command-line source outranks the YAML file for the binder as well.

== where did that value come from? ==
$ curl -s 'localhost:8080/diag/origin?name=demo.mail.recipients'
{
    "property": "demo.mail.recipients",
    "effectiveValue": "x@e.com,y@e.com,z@e.com",
    "candidatesInPrecedenceOrder": [
        {
            "source": "SimpleCommandLinePropertySource {name='commandLineArgs'}",
            "value": "x@e.com,y@e.com,z@e.com",
            "origin": "\"demo.mail.recipients\" from property source \"commandLineArgs\""
        }
    ],
    "shadowedBy": null
}

$ curl -s 'localhost:8080/diag/origin?name=demo.mail.host'
{
    "property": "demo.mail.host",
    "effectiveValue": "smtp.example.com",
    "candidatesInPrecedenceOrder": [
        {
            "source": "OriginTrackedMapPropertySource {name='Config resource 'class path resource [application.yaml]' via location 'optional:classpath:/''}",
            "value": "smtp.example.com",
            "origin": "class path resource [application.yaml] from configuration-properties-1.0.0.jar - 15:11"
        }
    ],
    "shadowedBy": null
}
