{
  "schema": "kleidos.power/2",
  "doc_id": "tdeck/home_total/2026-10-29-32",
  "kind": "point",
  "recorded_by": "power_campaign",
  "recorded_utc": "2026-10-29T14:30:58Z",
  "captured_utc": "2026-10-29T14:30:38Z",
  "supersedes": [],
  "narrative": {
    "doc": "docs/testing/power-campaign-tdeck.md",
    "anchor": "#td-16-powerrun-plans-under-the-bench-meter-every-state-one-cut-per-plan"
  },
  "artifact": {
    "row_id": "td16",
    "verdict_status": "PASS",
    "path": "qa/.artifacts/power/td16/20261029-143332"
  },
  "campaign": null,
  "retracted": null,
  "quantity": {
    "name": "home_total",
    "kind": "absolute",
    "unit": "mA",
    "primary": "current_ma",
    "sense_point": "cell_positive",
    "knob": null,
    "element": null,
    "method": null,
    "comparable_across_sessions": true
  },
  "subject": {
    "board": "tdeck",
    "board_unit": null,
    "env": "tdeck_debug",
    "env_probe": "console_present",
    "firmware": {
      "version": "0.1.0",
      "git_head": "bf3fa4acea4869e2cd51d0f6eca90cb76c2bf2dd",
      "elf_sha256": "321b66c03e10894bdcff77fc7bc9dd05c9b270e69e92f4fddd85b8f43b0c0cf8",
      "provenance": "recorded",
      "notes": "elf_sha256 is the local build of tdeck_debug, confirmed by the board's VER? elf_sha=321b66c03e10894b; this row built and flashed it from that commit, firmware paths clean"
    }
  },
  "instrument": {
    "kind": "ina228_bench",
    "id": "kleidos-meter",
    "shunt_mohm": 100.0,
    "shunt_measured": true,
    "position": "A: the shunt in the battery pack's positive wire, VBUS on the source side (CAL VBUSSIDE SOURCE)",
    "profile": "SLEEP",
    "range": 0,
    "current_lsb_pa": 3125000,
    "channels": [
      "i_ua",
      "v_mv",
      "die_c"
    ],
    "pace": "timer",
    "osc_tol_ppm": 10000,
    "period_us": 67520,
    "quality": "cal",
    "null": {
      "offset_pa": null,
      "die_c": null,
      "dev_uv": null,
      "n": null
    },
    "gain_pct": 1.0,
    "offset_floor_ua": 0.5,
    "caveat": "The shunt is an R100 whose resistance has never been measured to better than its nominal: a 2-wire DMM read 0.10 ohm at 0.01 ohm resolution, which rules out a wrong part and cannot resolve 1 %. So every figure carries the part's 1 % tolerance as an assumed gain uncertainty, whether the meter reports q=uncal (nominal never declared) or q=cal (nominal declared with CAL SHUNT, accepted by the owner on 2026-10-28). It is 1 % of an absolute level and 1 % of a difference: a gain error never cancels in a subtraction, only the offset does. The offset's residual on an absolute reading is about +-0.5 uA, and range 0's 3.125 uA quantum adds up to +-1.56 uA of bias on a very quiet level.",
    "bias_vs_reference": null,
    "firmware": null,
    "wiring_rev": null
  },
  "conditions": {
    "state": {
      "fsm": "HOME",
      "screen": "vault list",
      "vault": "unlocked",
      "sleep_mode": "none",
      "requested_s": null,
      "confirmed_by": [
        "POWERRUN default phase 2 (home_user): held=1 complete=1 app=HOME"
      ]
    },
    "radios": {
      "ble": "off",
      "wifi": "off"
    },
    "peripherals": {},
    "attachments": {
      "sd_card": "no",
      "usb_cable": "yes",
      "hub_port": "no",
      "hub_power_state": "cut",
      "hub_label": null,
      "jtag_probe": "no",
      "charger_in_loop": "no",
      "extra": [
        "the bench hub's port was cut inside the first phase's settle, so the cell alone fed the board for every measured window"
      ]
    },
    "knobs": {
      "backlight_percent": 85,
      "brightness_setting": null,
      "kb_light_percent": 0,
      "kb_light_duty": 0,
      "totp_on": null,
      "auto_lock": "disabled"
    },
    "clock": {
      "cpu_mhz": 80,
      "asked_mhz": 80,
      "boot_mhz": 160,
      "apb_hz": 80000000,
      "xtal_mhz": 40,
      "idle_floor": true,
      "idle_mhz": 40,
      "light_sleep_built": true,
      "light_sleep_allowed": false,
      "frame_clock": "on",
      "frame_mhz": 160,
      "bl_clk": "RC_FAST",
      "bl_hz": 5000,
      "pre_mhz": null,
      "source": "CLOCK?",
      "note": "cpu_mhz and frame_clock are what the board reported for this phase (POWERRUN?'s cpu= and fclk=); the rest is CLOCK? read at HOME before the run, build facts of the same image"
    },
    "cell": {
      "cell_id": "tdeck-pack-2000",
      "nominal_mah": 2000,
      "charging": false,
      "rested": false
    },
    "environment": {
      "ambient_c": null,
      "die_c": null
    },
    "vault": {
      "fill": "demo",
      "creds": 12,
      "totp": 4,
      "content": "adddummy",
      "cap_creds": null,
      "cap_totp": null,
      "source": "qa/.artifacts/power/td16/20261029-143332/results.jsonl meta demo_vault: VAULT? unlocked=1 creds=12 totp=4 after WIPEVAULT, PIN and ADDDUMMY (the harness's demo vault); the image did not print its capacities"
    }
  },
  "baseline": null,
  "isolation": null,
  "points": [
    {
      "level": null,
      "applied": null,
      "applied_unit": null,
      "applied_source": null,
      "source": "measured",
      "model": null,
      "found": true,
      "current_ma": {
        "value": 85.36461725059736,
        "source": "measured",
        "sd": 0.40818530222190774,
        "mad": 0.3187499999999943,
        "min": 84.306535,
        "max": 86.16903500000001,
        "n": 3348,
        "median": 85.39716,
        "series": [
          85.3022,
          85.372,
          85.3699,
          85.3259,
          85.4088,
          85.3271,
          85.4088,
          85.3484,
          85.333,
          85.3661,
          85.3885,
          85.357,
          85.332,
          85.3534,
          85.3453,
          85.3733,
          85.3228,
          85.3465,
          85.3486,
          85.3263,
          85.3561,
          85.3356,
          85.3574,
          85.3597,
          85.3115,
          85.3836,
          85.3275,
          85.3555,
          85.3267,
          85.3961,
          85.3384,
          85.4052,
          85.3382,
          85.3749,
          85.3459,
          85.3451,
          85.3791,
          85.3403,
          85.3761,
          85.352,
          85.3622,
          85.3592,
          85.3577,
          85.3426,
          85.3382,
          85.4145,
          85.3132,
          85.3931,
          85.3407,
          85.3828,
          85.3453,
          85.3622,
          85.3869,
          85.4011,
          85.4065,
          85.3259,
          85.3622,
          85.377,
          85.3661,
          85.3397,
          85.3661,
          85.4182,
          85.3595,
          85.3742,
          85.348,
          85.3953,
          85.337,
          85.3395,
          85.3661,
          85.3282,
          85.3859,
          85.313,
          85.3628,
          85.3726,
          85.377,
          85.3534,
          85.323,
          85.4363,
          85.3503,
          85.4217,
          85.3417,
          85.4401,
          85.3895,
          85.3178,
          85.39,
          85.3474,
          85.3932,
          85.3188,
          85.4151,
          85.29,
          85.4538,
          85.3209,
          85.3363,
          85.3905,
          85.3655,
          85.3776,
          85.3334,
          85.3701,
          85.3401,
          85.3515,
          85.3478,
          85.3732,
          85.3753,
          85.3336,
          85.3892,
          85.3199,
          85.3986,
          85.3328,
          85.3599,
          85.3263,
          85.3661,
          85.3315,
          85.3309,
          85.3745,
          85.313,
          85.3697,
          85.3469,
          85.3753,
          85.3128,
          85.3395,
          85.3913,
          85.2907,
          85.3957,
          85.3317,
          85.3813,
          85.2986,
          85.428,
          85.3309,
          85.3986,
          85.3801,
          85.3528,
          85.3715,
          85.3505,
          85.3976,
          85.3409,
          85.3497,
          85.4105,
          85.328,
          85.3595,
          85.3234,
          85.3636,
          85.4105,
          85.3483,
          85.3667,
          85.3234,
          85.4434,
          85.2759,
          85.4273,
          85.3217,
          85.419,
          85.3415,
          85.3645,
          85.3351,
          85.3663,
          85.3853,
          85.3563,
          85.3367,
          85.4176,
          85.3436,
          85.3526,
          85.3024,
          85.4501,
          85.3357,
          85.3998,
          85.2978,
          85.4374,
          85.3457,
          85.3376,
          85.3804,
          85.4076,
          85.4122,
          85.3605,
          85.3453,
          85.4045,
          85.3617,
          85.3822,
          85.3247,
          85.428,
          85.3534,
          85.4164,
          85.3545,
          85.3832,
          85.384,
          85.3728,
          85.4177,
          85.3449,
          85.4403,
          85.3651,
          85.3428,
          85.3532,
          85.3842,
          85.2765,
          85.432,
          85.3476,
          85.3178,
          85.386,
          85.4024,
          85.392,
          85.3242,
          85.4142,
          85.3146,
          85.4234,
          85.3509,
          85.3742,
          85.4299,
          85.3943,
          85.3853,
          85.3401,
          85.4145,
          85.3595,
          85.3795,
          85.3813,
          85.4474,
          85.369,
          85.3401,
          85.4299,
          85.3447,
          85.4488,
          85.3813,
          85.3984,
          85.3563,
          85.409,
          85.3701,
          85.3111,
          85.4072,
          85.3563
        ]
      },
      "voltage_mv": {
        "value": 4054.3325459976104,
        "source": "measured",
        "sd": 2.670842953085547,
        "mad": 1.7630000000003747,
        "min": 4046.123,
        "max": 4063.167,
        "n": 3348,
        "median": 4054.512
      },
      "power_mw": {
        "value": 346.0965781710006,
        "source": "derived",
        "model": "mean of i x v over the window's 3348 paired samples"
      },
      "window": {
        "duration_s": 226.0,
        "n": 3348,
        "t0_s": 615.5106,
        "t1_s": 841.5106,
        "statistic": "mean",
        "series_bin_s": 1.0
      }
    }
  ],
  "axis": null,
  "shape": null,
  "checks": {
    "dropped": 0,
    "read_err": 0,
    "flags": "0x4003",
    "status": "PASS",
    "failures": [],
    "n_samples": 3348,
    "duration_s": 226.0
  },
  "uncertainty": {
    "gain_pct": 1.0,
    "gain_abs": 0.8536461725059736,
    "gain_source": "assumed_shunt_tolerance",
    "repeat_spread": null,
    "board_wander_ma": null,
    "offset_residual_ua": 0.5,
    "random_basis": "batch_means",
    "quotable": true,
    "gain_is_assumed": true,
    "qualified": true,
    "unqualified_reason": null,
    "random_abs": 0.002836087,
    "random_ci95_abs": 0.005601023,
    "random_n": 226.0,
    "random_sd": 0.03597312,
    "n_eff": 160.885601454,
    "tau_int_samples": 1.404724835,
    "batch_b": 15,
    "batch_m": 15,
    "systematic_abs": 0.493215903,
    "systematic_bound_abs": 0.886914173,
    "systematic_pct": 0.577775569,
    "systematic_terms": [
      {
        "name": "gain",
        "value": 0.853646173,
        "unit": "mA",
        "distribution": "rectangular",
        "divisor": 1.732051,
        "assumed": true,
        "note": "1 % of the figure, from assumed_shunt_tolerance. It rides on THIS number: on a difference that is 1 % of the difference, never 1 % of each level; the shunt is marked R100 with no tolerance and has never been measured, so this is an assumption and not a bound"
      },
      {
        "name": "inl",
        "value": 0.032768,
        "unit": "mA",
        "distribution": "rectangular",
        "divisor": 1.732051,
        "assumed": true,
        "note": "the datasheet prints INL as +-2 m% with no test condition and no reference quantity; read as a percentage of full scale \u2014 the usual ADC convention and the conservative one \u2014 it is this much, and read as a percentage of reading it is negligible"
      },
      {
        "name": "offset_drift",
        "value": 0.0005,
        "unit": "mA",
        "distribution": "rectangular",
        "divisor": 1.732051,
        "assumed": false,
        "note": "dVos/dT at +-10 nV/C max over the firmware's +-5 C staleness window. The null itself is subtracted; this is how far it may have moved since"
      }
    ],
    "offset_cancels": false,
    "sigma_inst_ua": 2.331712904,
    "sigma_inst_divisor": 6.6,
    "combined_abs": 0.493224057,
    "coverage_k": 2.0,
    "expanded_abs": 0.986448114,
    "interval": [
      84.378169137,
      86.351065364
    ],
    "dominant_term": "gain",
    "unresolved": [
      "inl_reference: full scale or reading, unanswered by the datasheet"
    ],
    "model": {
      "id": "kleidos.power.uncertainty/1",
      "computed_utc": "2026-10-29T14:30:58Z",
      "inputs": [],
      "code": "qa_lib.power.model:compute"
    }
  },
  "caveats": [
    {
      "class": "posture",
      "code": "debug_image_commanded",
      "text": "POWERRUN is a debug-console command, so the image measured is the _debug one, which also runs the console and its log task. A state's draw on the release image is not measured here.",
      "evidence": [
        "docs/testing/serial-debug-commands.md"
      ],
      "affects": "comparability",
      "blocks_quote": false
    },
    {
      "class": "method_limit",
      "code": "powerrun_phase_window",
      "text": "Each figure is the mean of one POWERRUN phase's window after its settle, placed from the plan's own dwell and settle on the stream's clock, one run.",
      "evidence": [
        "qa/tools/power_campaign.py:powerrun_windows"
      ],
      "affects": "value",
      "blocks_quote": false
    }
  ],
  "refusal": null
}
