<feed xmlns='http://www.w3.org/2005/Atom'>
<title>luke/mattertimectl/README.md, branch v0.1.0</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>https://src.nth.io/luke/mattertimectl/atom?h=v0.1.0</id>
<link rel='self' href='https://src.nth.io/luke/mattertimectl/atom?h=v0.1.0'/>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/mattertimectl/'/>
<updated>2026-07-29T01:13:03+00:00</updated>
<entry>
<title>Rename project to mattertimectl; default fabric label to Matter Time Controller</title>
<updated>2026-07-29T01:13:03+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-29T01:13:03+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/mattertimectl/commit/?id=3a535a57c1b5fa48d5495c31d308b42943f92583'/>
<id>urn:sha1:3a535a57c1b5fa48d5495c31d308b42943f92583</id>
<content type='text'>
- Rename crate, binary, and repo from mattertimesync to mattertimectl
- Change default fabricLabel to "Matter Time Controller"
- Point README at src.nth.io as the main repo, GitHub as the mirror
</content>
</entry>
<entry>
<title>Merge the two device state files and reduce mutation</title>
<updated>2026-07-28T23:09:57+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-28T23:09:57+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/mattertimectl/commit/?id=cf5eabb9647e6d53ec29a3f7de599a38dbfd5490'/>
<id>urn:sha1:cf5eabb9647e6d53ec29a3f7de599a38dbfd5490</id>
<content type='text'>
The registry (device names) and service-state (sync results) were two
JSON files keyed the same way, split only for a TypeScript-compatibility
that is moot now that the fabric identity cannot migrate between
implementations. Merge them into one devices.json with a DeviceRecord per
node, which also removes the parallel-map join in status and collapses the
per-command load/store pairs. identity.json stays separate as a write-once
secret.

Also, from a reduction/immutability review:
- Fix with_timeout passing a literal "{what}" instead of the error context
- Drop needless mut: CompactDuration and parse_wall_clock become immutable
  expressions; run_status filters with a predicate instead of a mutator;
  sync_one extracts write_zone_and_dst; InspectOutcome gains Default plus a
  failed() constructor
- Share a join_ids helper and a devices_path helper; add IdentityReport
  From; minor combinator tidy-ups

35 unit tests, clippy clean.
</content>
</entry>
<entry>
<title>Harden against untrusted input and reduce controller boilerplate</title>
<updated>2026-07-28T22:18:43+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-28T22:18:43+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/mattertimectl/commit/?id=28a660e8bacac84523601f67547b2671058d9b20'/>
<id>urn:sha1:28a660e8bacac84523601f67547b2671058d9b20</id>
<content type='text'>
Security:
- Epoch conversions no longer panic on out-of-range values: a device may
  report any u64 as its clock, so to_timestamp is fallible (rendered
  labeled-raw), from_timestamp clamps a pre-epoch host clock to zero (a
  Pi with no RTC reads 1970 early after boot), and delta arithmetic
  saturates. Fixes crashes in inspect and status
- Identity Debug redacts the root CA private key so no stray {:?} leaks it
- fsync the temp file before rename, so a power loss cannot surface an
  empty identity.json
- Document in the README that device attestation is not verified, the NTP
  servers contacted, and the at-rest key

Cleanup:
- A MatterCtx extension trait replaces the repeated map_err/anyhow closure
  at every rs-matter call site with .ctx("what")
- SyncOutcome::failed/skipped constructors collapse two large literals
- read_our_fabric_entry shares the fabric-filtered read across the label,
  decommission, and inspect paths

36 unit tests, clippy clean.
</content>
</entry>
<entry>
<title>Implement mattertimesync: one-shot Matter time synchronization CLI</title>
<updated>2026-07-28T21:58:20+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-07-28T21:58:20+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/mattertimectl/commit/?id=07d4713f554b2ae2ccf4871f6be0590c129342b0'/>
<id>urn:sha1:07d4713f554b2ae2ccf4871f6be0590c129342b0</id>
<content type='text'>
A standalone CLI Matter controller that joins Matter devices as a
secondary administrator (multi-admin) and sets their clocks via the
standard Time Synchronization cluster. Built on rs-matter 0.2.0, the
official CSA Rust Matter stack: its PASE/CASE initiators, Commissioner
flow, builtin mDNS, and generated cluster clients. One-shot runs from a
systemd timer; there is no daemon.

Hardware-validated end to end (commission, inspect, sync, decommission)
against an IKEA ALPSTUGA air quality monitor over Thread, commissioned
alongside Apple Home. Design and operation are documented in the
README. 34 unit tests, clippy clean.
</content>
</entry>
</feed>
