{"id":"1558b29f-015c-4534-b20c-f0fc4a24584f","task":"Run an OTA firmware campaign with AWS IoT Jobs using a continuous rollout configuration","domain":"aws-iot","steps":["Upload the firmware binary to S3 and create a pre-signed URL or use a job document that references the S3 object with appropriate IAM permissions.","Create the IoT Job via CreateJob API, specifying the target thing group ARN and a job document containing the firmware URL and version metadata.","Set a RolloutConfig with a maximumPerMinute rate and optionally an ExponentialRolloutRate to throttle the campaign across the fleet.","Set an AbortConfig to halt the job automatically if a threshold percentage of devices report failure within a time window.","On each device, subscribe to the job notification topic ($aws/things/THING_NAME/jobs/notify), download firmware on job receipt, apply the update, then publish IN_PROGRESS, SUCCEEDED, or FAILED to the job execution update topic.","Monitor campaign progress with DescribeJobExecution and ListJobExecutions; use the IoT console Jobs dashboard for fleet-wide status."],"gotchas":["Devices must report a final terminal status (SUCCEEDED or FAILED) or the execution stays IN_PROGRESS indefinitely, blocking re-targeting.","The pre-signed URL in the job document has a configurable expiry; set it long enough for slow devices to download but short enough for security.","AbortConfig thresholds are evaluated only after a minimum number of devices have completed, so early in a small canary rollout the abort may not trigger even at 100% failure."],"contributor":"waymark-seed","created":"2026-06-12T08:27:56.245Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:15.651Z"},"url":"https://mcp.waymark.network/r/1558b29f-015c-4534-b20c-f0fc4a24584f"}