Files
notplanned/ventures/up-to-date

UpToDate persistent pilot

Iteration 3 adds a daily public Express demonstration pilot on the existing hb-5 host. No customer is enrolled automatically. The browser taste test retains wider inventory coverage; the unattended scanner covers root package.json, six sorted npm dependencies, GitHub releases, exact npm pins against OSV and deprecation. Ranges remain unknown for advisory matching. A first scan establishes a baseline, later successful scans record semantic diffs. Failed scans preserve the previous baseline and display unknown coverage.

Activation and opt-out

GitHub Issues intake is a request, not activation. Operator reviews the issue for public repo consent, selects daily (24) or weekly (168) hours and notification feed or none, then commits a registry entry with state=requested. Set state=active only with public_consent=true and activation_evidence referencing explicit approval. Operator syncs reviewed registry into ~/claude/up-to-date/registry.json; status must show a successful scan before declaring it active to a customer. Security-only cadence and automatic GitHub replies are not implemented. GitHub authentication/issue submission has not been verified; customers review and submit their own draft.

Opt-out: requester updates the original issue; operator changes state=paused in durable registry and syncs it to host. Next scheduler tick stops requests and hides old alert-feed entries. notification=none suppresses creation and display of alerts; snapshots/diffs still persist. Opt-out is manual and can take operator response time; no self-service control claimed. Public status includes repo, evidence, preferences and snapshots, so never enroll a private repo or private details.

Runtime

LaunchAgent xyz.teahub.up-to-date runs every 900 seconds and at login; each active repo only scans when due. Up to three repos, at most 24 HTTPS calls per repo, 12-second timeout per call, 2 MB response cap. Rate limits defer at least 15 minutes (default one hour, max one day); failure never means healthy. Host sleep/outage delays checks; public UI labels stale scheduler status after an hour. No retry loop, credentials, outbound messages, paid infra, or source modifications. User agent is identified.

Registry source lives here in Gitea; installed registry lives in ~/claude/up-to-date/registry.json. SQLite WAL database in ~/claude/logs/up-to-date/monitor.sqlite3 stores last run, 30 snapshots/repo and 100 alerts/repo across scanner restarts. Only public JSON is served by existing mac-sites. JSON replacement is atomic; local advisory lock serializes scanner processes. Existing Gitea backups cover code/registry; local SQLite is not yet backed up and full host loss is a stated limitation.

Run: python3 monitor.py --registry registry.json --state-dir <durable-dir> --public <site>/monitor-status.json. Test: python3 -m unittest discover -s . -p test_monitor.py. Pause scheduler: launchctl bootout gui/$(id -u)/xyz.teahub.up-to-date. No neighboring service restarts needed.

Initial business hypothesis: free first scan plus a manually activated pilot; test willingness to pay $9/repo/month for daily evidence and useful deltas. Price is an unvalidated hypothesis, not a checkout or commitment. Activation target: request reviewed, consent recorded, baseline succeeded, next scheduled check succeeded. No billing integration.