ReviewOS

stacks/launchpad

Build a local year review with image export

#8
Open chris opened this 6 days ago ·
6 days ago

Collect launcher activity through the model-backed local API now, and build the end-of-year review later. Preserve UUID event IDs for deduplication, occurrence and receipt timestamps, the timezone offset at the event, action and tool categories, app names, session identity, app version and command latency. Exclude queries, file paths, quicklink URLs, snippet text and clipboard contents. Include pause and deletion controls. Aggregate daily and yearly command counts, top applications, tool usage and calendar-day streaks correctly across travel and daylight-saving changes. Future delivery: a branded review with local Copy as Image and export, sufficient-data states and no invented time-saved claims. Keep launcher activity separate from the framework billing UsageEvent model so a future AI subscription can use native billing meters. Reference: https://www.raycast.com/changelog/macos-v1/1-104-0

6 days ago

Local usage collection is implemented on main in fa65154 and 509c785. The usage contract defines each metric and its API behavior.

  • LauncherActivity retains idempotent events. LauncherUsageDay stores cumulative time by process, local day and timezone offset, with native model-driven schema upgrades that preserve existing events.
  • The local API aggregates app sessions, palette opens, running and visible time, successful application and link opens, command categories, top applications, active days and streaks.
  • Time checkpoints run every 15 seconds, on visibility changes, preference changes, summary reads and graceful shutdown. Long suspension gaps are excluded. Hidden time does not become visible time.
  • Successful native operations are recorded before later dismissal or ranking writes. Duplicate focus and dismissal callbacks do not inflate opening counts.
  • Pause and clear controls cover both event and timing records. Queries, URLs, file paths, clipboard contents and snippet text stay out of usage records. No hosted usage service is enabled.

Validation: all 20 app tests pass (104 assertions). bun run test:usage-native builds a relocated backend, authenticates through the real native transport, uses the Stacks model API and verifies counts, hidden-time exclusion and a persisted final checkpoint on shutdown. This fixture uses a separate temporary database.

The reusable shutdown lifecycle ships in stx 0.2.721 and Craft 0.0.370. Launchpad pins the immutable Craft source and consumes the published stx/desktop packages. The Launchpad patch release is in progress. This issue remains open for the year-review presentation and image export.

6 days ago

Pantry install collection is now implemented on main in f26087a and f661f7c, and the patch release v1.0.3 is building.

PantryInstallation stores one terminal receipt per job. UsageRecordingPeriod records enabled intervals, so jobs can be reconciled after an app restart while jobs spanning a pause stay excluded. Clearing usage also resets intervals, preventing old service jobs from recreating cleared counts.

The year summary now includes pantry.installed, failed, byKind (app, CLI, library, font), installMs, timedInstalls, daily and topPackages. Raw receipts have a generated read-only Models API. They retain package identifiers, kind, result and timestamps, without installer output, errors, file paths or connection credentials. This measures jobs requested through Launchpad's own Pantry connection.

Pantry 0.11.141 exposes kind, start time and completion timezone offset in its reusable typed desktop job API. Launchpad consumes the published SDK and Pantry action. Older v1 job metadata can use the package catalog's classification; unavailable execution timing stays unknown.

Validation: all 25 app tests pass (132 assertions), plus the packaged native qualification with authenticated loopback, a real isolated Pantry HTTP service, all four package kinds, success/failure, repeated receipts, generated model reads and final checkpoint persistence. The external installer is faked only in this fixture; the release will also receive a real UI install check.

The patch-only release rule is persisted in AGENTS.md until Chris explicitly changes it. This issue remains open for the year-review presentation and image export.

6 days ago

Verified the public v1.0.3 Build 22 on an Apple Silicon Mac after installation through Pantry. macOS accepted the app as Notarized Developer ID.

Installed four previously uninstalled packages through Launchpad's Pantry UI:

  • Hidden Bar 1.11.1 (app)
  • jless 0.9.0 (CLI, executable version also verified)
  • utf8proc 2.11.3 (library)
  • Fira Code 6.2 (font, installed font files verified)

All four appeared in All with their installed versions. The local Models API-backed Usage view showed four successes, one per kind, zero failures, and 20 seconds across four timed installs. After a graceful quit and relaunch, app sessions increased from 11 to 12, palette opens increased from 38 to 39, and the install totals remained four with no duplicate receipts. Existing app/link counters were retained. Checked Usage borders and text in Light and Dark, then restored Dark and left the app running.

The year-review rendering/export feature remains future work. No user history was cleared during this check.

Sign in to comment on this issue.