{
  "format": "bridgit-public-applet-library/1",
  "applets": [
    {
      "key": "dog-monitor",
      "revision": 2,
      "version": "1.1.0",
      "name": "Pet monitor",
      "summary": "See observed activity, sleep, meals and drinks on one device. The current vision classifier recognizes dogs.",
      "url": "/applets/pet-monitor/",
      "capabilities": [
        {
          "title": "Activity and mood",
          "description": "See the latest observed activity, mood and confidence, with the model and observation time.",
          "metrics": [
            "current"
          ]
        },
        {
          "title": "Sleep and naps",
          "description": "Follow observed sleep, nap counts and the current sleep session.",
          "metrics": [
            "sleep_ms",
            "naps",
            "asleep_since",
            "asleep_for_ms"
          ]
        },
        {
          "title": "Meals and drinks",
          "description": "Count observed eating and drinking episodes, see the latest sightings, and compare observed gaps.",
          "metrics": [
            "meals",
            "drinks",
            "last_meal",
            "last_drink",
            "median_meal",
            "median_drink"
          ]
        },
        {
          "title": "Daily patterns",
          "description": "Understand monitoring coverage, sampled photos and activity distribution. Unchanged frames are labeled as reused.",
          "metrics": [
            "watched_ms",
            "photos",
            "views",
            "free",
            "model_calls"
          ]
        },
        {
          "title": "A private photo diary",
          "description": "With explicit personal-backend and photo consent, browse date-grouped photos and their observations. Up to 100 photos are retained for seven days.",
          "metrics": []
        },
        {
          "title": "Invite someone you trust",
          "description": "Explicitly invite a viewer to this applet on this device. They can view its images and metrics; you can revoke access.",
          "metrics": []
        }
      ],
      "metrics": [
        {
          "id": "current",
          "label": "Current observation",
          "unit": "observation",
          "definition": "Latest capture: dog, confidence, activity, mood, model and timestamp. Unknown confidence remains null.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "sleep_ms",
          "label": "Observed sleep",
          "unit": "ms",
          "definition": "Sum classified sleep intervals during coverage today; sleep episode gap 120000 ms. Never imply continuous observation through a coverage gap.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "naps",
          "label": "Naps",
          "unit": "episodes",
          "definition": "Observed sleep episodes today; first-to-last observation plus one sampling interval.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "asleep_since",
          "label": "Current sleep start",
          "unit": "timestamp",
          "definition": "Start of ongoing observed sleep episode; null when unavailable.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "asleep_for_ms",
          "label": "Current sleep duration",
          "unit": "ms",
          "definition": "Current episode span, may include brief gaps; separate from classified sleep total.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "meals",
          "label": "Observed meals",
          "unit": "episodes",
          "definition": "Observed eating episodes today, merged within 60000 ms.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "drinks",
          "label": "Observed drinks",
          "unit": "episodes",
          "definition": "Observed drinking episodes today, merged within 60000 ms.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "last_meal",
          "label": "Last observed meal",
          "unit": "timestamp",
          "definition": "Latest observed eating timestamp; missing is not zero.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "last_drink",
          "label": "Last observed drink",
          "unit": "timestamp",
          "definition": "Latest observed drinking timestamp; missing is not zero.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "watched_ms",
          "label": "Monitoring coverage",
          "unit": "ms",
          "definition": "Sum camera monitoring spans, no credit across gaps longer than the runtime coverage threshold.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "photos",
          "label": "Sampled photos",
          "unit": "photos",
          "definition": "Number of sampled captures today, including reused classifications.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "views",
          "label": "Activity distribution",
          "unit": "photo_counts",
          "definition": "Counts of photos by activity including no_dog and unsure. Counts are not inferred durations.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "median_meal",
          "label": "Meal gap median",
          "unit": "ms_and_gaps",
          "definition": "Seven-day median of qualifying observed episode gaps within coverage, accompanied by gap count. Null if insufficient data.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "median_drink",
          "label": "Drink gap median",
          "unit": "ms_and_gaps",
          "definition": "Seven-day median of qualifying observed drinking gaps within coverage, accompanied by gap count.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "free",
          "label": "Reused frames",
          "unit": "photos",
          "definition": "Unchanged captures reusing a prior classification, labeled reused; never count as model calls.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        },
        {
          "id": "model_calls",
          "label": "Model calls",
          "unit": "calls",
          "definition": "Actual processing calls, distinct from sampled photos and reused frames. Do not infer a monetary price.",
          "missing": "Not available",
          "window": "device-local day unless seven-day gap metric",
          "source": "DogLogic.kt / DogTracker"
        }
      ],
      "data_policy": {
        "backend_default": "device_only",
        "scope": [
          "device_id",
          "applet_instance_id"
        ],
        "device_only": {
          "server_registration": false,
          "uploads": false,
          "remote_models": false,
          "derived_telemetry": false,
          "queue": false
        },
        "enable": "Explicit per-instance owner consent; start with new captures only. Backfill requires separate consent. Sign-in failure preserves local operation.",
        "disable": "Stop before serialization/enqueue; discard queued uploads; delete server content/config/grants and confirm deletion or show pending retry; preserve local records.",
        "sharing": {
          "creation": "explicit_owner_invitation",
          "scope": [
            "device_id",
            "applet_instance_id"
          ],
          "role": "viewer",
          "acceptance": "matching verified Google identity and explicit acceptance",
          "revocation": "every request rechecks active membership; private no-store images; resend invalidates prior token",
          "expires_days": 7
        },
        "retention": {
          "days": 7,
          "image_count": 100,
          "image_max_bytes": 102400,
          "image_max_edge_px": 640,
          "image_min_interval_ms": 30000,
          "max_image_bytes_per_instance": 10240000
        },
        "execution": "Declarative contract only. Registry never starts capture, calls models, grants device permission or creates a backend."
      }
    }
  ]
}
