Skip to content

feat(core): port config, clip sources, and state probes#17

Merged
statik merged 1 commit into
claude/tauri-migration-self-update-74d57gfrom
claude/step-5-config-clips
Jun 21, 2026
Merged

feat(core): port config, clip sources, and state probes#17
statik merged 1 commit into
claude/tauri-migration-self-update-74d57gfrom
claude/step-5-config-clips

Conversation

@statik

@statik statik commented Jun 21, 2026

Copy link
Copy Markdown
Member

Step 5 of the Tauri/Rust migration

Ports the remaining pure driven adapters, completing the OS-independent core.

What's here

  • configStore (YAML loader via serde_norway + full validation logic), SelectionStore (pinned-profile JSON persistence), ensure_default (first-run seed; embeds examples/profiles.yaml via include_str! so example & seed can't drift).
  • clipsourcePositional, Mitti (positional fallback), Playlist (.m3u line parser + .xspf via quick-xml serde-de), and the clip_source.type factory.
  • stateprobeTitleRegex, NoneProbe, and Uia behind a pure ElementNamer trait (the Windows namer comes later from the OS crate) + the state.type factory.
  • port::ProfileStore; domain::KeyName::parse — unmodeled actions (e.g. Mitti's pause) are chord-validated then dropped, matching Go's open KeyName string.

New deps

serde, serde_json, serde_norway (maintained serde_yaml fork), quick-xml.

Tests

All Go config, clipsource, and stateprobe tests ported — including loading the testdata/ fixtures and parsing/validating the embedded default seed. 70 tests green; fmt/clippy -D warnings clean locally.

Milestone

The entire internal/core hexagon and all pure driven adapters are now ported to Rust and unit-tested. What remains is inherently OS/Tauri-specific (injection, UIA, tray, updater, CI) and is covered by the macOS/Windows testing handoffs (#10, #11).

Part of: #10, #11, #12.


Generated by Claude Code

Port the remaining pure driven adapters into hyperdeck-core:

- config::Store (serde_norway YAML loader + full validation), config::
  SelectionStore (serde_json pinned-profile persistence), config::
  ensure_default (embeds examples/profiles.yaml as the first-run seed)
- clipsource: Positional, Mitti (positional fallback), Playlist (.m3u +
  .xspf via quick-xml serde), and the type-driven factory
- stateprobe: TitleRegex, NoneProbe, and Uia behind a pure ElementNamer
  trait (Windows namer supplied later by the OS crate), plus the factory
- port::ProfileStore; domain::KeyName::parse (unmodeled actions like
  Mitti's "pause" are validated then dropped, matching Go's open KeyName)

New deps: serde, serde_json, serde_norway (maintained serde_yaml fork),
quick-xml. All Go config/clipsource/stateprobe tests ported, including
loading testdata fixtures and the embedded default seed. 70 tests green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R8X1NxFiaLGJzwUD5wgRTv
@statik
statik merged commit c6bd128 into claude/tauri-migration-self-update-74d57g Jun 21, 2026
2 checks passed
@statik
statik deleted the claude/step-5-config-clips branch June 21, 2026 13:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants