| Timestamp | SHA | Message | Author | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-11-01T05:35Z | 3ae9db2 | (v0.10.0) Automated packaging of release by Packagr | packagrio-bot | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 2026-10-31T15:56Z | 87682de | test(notify): expect GetDeviceDetails in irregular upload test (#1137)| Aram Akhavan
| 2026-10-24T22:51Z
| 5e71f6a
| feat(notify): name devices by friendly_name in notifications (#1136) Claude-Session: https://claude.ai/code/session_012Z7GCmjBAZyr57e2q2Yeg7 Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
| Aram Akhavan
| 2026-10-24T22:50Z
| fa47b44
| fix(notify): keep the estimated upload period while uploads settle (#1135) Claude-Session: https://claude.ai/code/session_012Z7GCmjBAZyr57e2q2Yeg7 Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
| Aram Akhavan
| 2026-10-24T02:54Z
| cc48b73
| feat(webapp): store friendly_name in the database and edit it from device settings (#1131) | Aram Akhavan
| 2026-10-23T18:50Z
| a253dae
| feat(config): add global notify.on_missed_upload and notify.upload_period (#1133) | notify, defaulting to true and 0devicesdevices[].notifications.upload_period a pointer so 0 can overridenotify.upload_periodGetDuration to the config interfaceAram Akhavan
| 2026-10-23T18:39Z
| b10e260
| feat(config): move per-device on_smartctl_error to scrutiny.yaml (#1128) | devices[].notifications.on_smartctl_error to scrutiny.yamlnotify.on_smartctl_error to scrutiny.yaml, defaulting to truedevices[].notify.on_smartctl_error from collector.yamlAram Akhavan
| 2026-10-23T17:34Z
| f51e7e6
| refactor(config): look up device config by scrutiny_uuid (#1130) | DeviceConfig.ScrutinyUUID as uuid.UUIDValidateConfigAram Akhavan
| 2026-10-22T05:43Z
| bb2f84c
| feat(notify): skip notifications for devices with notifications.disabled (#1127) | disabled to devices[].notificationsAram Akhavan
| 2026-10-22T04:46Z
| bd78fcd
| docs: add AGENTS.md (#1126) Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
| Aram Akhavan
| 2026-09-30T18:06Z
| c2ba6fb
| feat(webapp): title devices by host and friendly_name (#1100) | DeviceModel.friendly_namedeviceTitleForType returns friendly_name when set, for any title typehost_id - friendly_name; title sort uses it too Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Aram Akhavan
| 2026-09-30T18:06Z
| 04baa9c
| feat(api): return each device's friendly_name from scrutiny.yaml (#1100) | devices entries accept friendly_nameconfig.GetFriendlyNames: scrutiny UUID -> friendly_namemodels.Device.FriendlyName: JSON only, not storedfriendly_name in example.scrutiny.yaml Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Aram Akhavan
| 2026-09-30T17:53Z
| df420bf
| feat(notify): notify when a device misses an upload (#1099) | MissedUploadTracker: per-UUID circular buffer of the last 3 upload times, for every device except on_missed_upload: falseupload_period 0: period is the average of the 2 deltas once they're within 10%; warns and waits otherwiseMissedUpload notificationdevices.estimated_upload_period (migration) and reloaded on startupUploadDeviceMetrics records successful uploads; AppEngine.Setup shares one trackerdevices in example.scrutiny.yaml, README section, SCRUTINY_FAILURE_TYPE values Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Aram Akhavan
| 2026-09-30T17:45Z
| 6082b4f
| refactor(notify): share the device message body across notification types (#1099) | generateDeviceMessage: title, set device fields, details, dateGenerateCollectorErrorMessage uses it Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Aram Akhavan
| 2026-09-30T17:44Z
| 5b80316
| feat(config): accept a devices list in scrutiny.yaml (#1099) | config.DeviceConfig: scrutiny_uuid, notifications.on_missed_upload, notifications.upload_periodconfiguration.GetDevices decodes devices; added to config.Interface and its mockValidateConfig rejects invalid UUIDs and invalid or negative periods Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Aram Akhavan
| 2026-10-12T21:51Z
| ac2056d
| build(go): bump Go to 1.27.2 and golang.org/x/net to v0.61.0 (#1115) | Aram Akhavan
| 2026-10-12T19:31Z
| 73bd56d
| ci(docker): scan published images for vulnerabilities (#1114) Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
| Aram Akhavan
| 2026-10-12T18:30Z
| 9377054
| ci(dependabot): add dependabot.yml (#1113) Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
| Aram Akhavan
| 2026-10-04T22:57Z
| 9fc491c
| build(deps-dev): bump piscina from 5.3.0 to 5.3.2 in /webapp/frontend (#1106) Bumps piscina from 5.3.0 to 5.3.2. - Release notes - Changelog - Commits --- updated-dependencies: - dependency-name: piscina dependency-version: 5.3.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] support@github.com Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
| dependabot[bot]
| 2026-10-04T22:57Z
| aaae0d0
| build(deps): bump brace-expansion in /webapp/frontend (#1105) Bumps brace-expansion from 2.1.2 to 2.1.7. - Release notes - Commits --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 2.1.7 dependency-type: indirect ... Signed-off-by: dependabot[bot] support@github.com Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
| dependabot[bot]
| 2026-10-04T22:56Z
| aee58e9
| build(deps): bump moment from 2.30.1 to 2.31.0 in /webapp/frontend (#1104) Bumps moment from 2.30.1 to 2.31.0. - Release notes - Changelog - Commits --- updated-dependencies: - dependency-name: moment dependency-version: 2.31.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] support@github.com Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
| dependabot[bot]
| 2026-09-30T22:50Z
| 043758c
| feat(detail): show total bytes read/written on the device details card (#1097) | Aram Akhavan
| 2026-09-30T18:05Z
| 985907a
| chore(docker): bump omnibus InfluxDB to 2.8 (#1098) Claude-Session: https://claude.ai/code/session_01M32VXfytXy1EBddz3PKjEL Co-authored-by: Claude Opus 5.5 noreply@anthropic.com
| Aram Akhavan
| 2026-09-25T03:26Z
| 1dbdc34
| fix(collector): skip drives that -n left in a low power mode (#1032) Refs #942 Exit status 2 is shared: it means both "device open failed" and "device is in a low power mode and -n asked me to exit". When FAILDEV is the only bit set and the configured smart args contain -n/--nocheck, the drive is simply asleep, so the collector logs that at info level and moves on without publishing and without notifying. Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
| Aram Akhavan
| 2026-09-25T03:25Z
| 245055c
| fix(collector): stop publishing incomplete smartctl data (#1032) Closes #944 - don't publish collector results from failed smartctl runs to avoid polluting the db - treat killed smartctl as a smartctl failure - check the backend's return code on publish and report non-200 Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
| Aram Akhavan
| 2026-09-25T03:25Z
| a8ceac9
| feat(collector): report smartctl failures so the webapp can notify (#1032) Closes #945 - add POST /api/collector/error, so the collector can report failures that leave a device missing from the dashboard rather than merely stale - split Detect.Start() into Scan() and Info(); Info() returns a DeviceInfoError per device, so each failure is reported with its own cause - report | smartctl --scan failures and per-device smartctl --info failures, which were previously swallowed - a device that fails --info never gets a ScrutinyUUID, so it silently disappeared - new collector.yaml notify_on_smartctl_error (default true), and the same key per entry in devices:. The top level one covers --scan and any device without its own; a device's own setting takes priority The collector decides what is worth reporting, so there is no webapp setting and nothing to migrate. Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
Aram Akhavan
| 2026-09-25T20:27Z
| 05749d4
| refactor(collector): type smartctl's exit status as a bitmask (#1032) - add SmartctlExitStatus mirroring smartctl.h, used by SmartInfo and Scan - LogSmartctlExitCode becomes LogSmartctlExitStatus, logging every set bit - the old if/else chain reported only the lowest bit, so status 0x18 logged "failing disk" and swallowed the pre-fail bit Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com
| Aram Akhavan
| |