Two roles of the same tiny charm drive the reproduction:
role=owner— creates an app-owned secret (token=rev1), grants it to thecredsrelation, and publishes the secret URI in the relation application data. Therotate-secretaction adds a new revision (Secret.set_content), exactly like the owner-side charm in the async-replication case.role=consumer— reads the secret once by the published URI (registering as a consumer) and logs everysecret-changedhook it receives.