[pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:14.721369864-05:00 Installing ruff==0.8.6 mypy==1.14.1 (+ lib runtime deps for mypy import resolution)… [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:22.981266177-05:00 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning. [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.086829712-05:00 == ruff check . == [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105807748-05:00 analytics/src/storeminder/agents/synthesis_agent.py:1329:121: E501 Line too long (121 > 120) [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105826097-05:00 | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105831797-05:00 1327 | t_str = f"{prefix}{t:{fmt_str}}" if isinstance(t, int | float) else str(t) [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105836677-05:00 1328 | b_str = f"{prefix}{b:{fmt_str}}" if isinstance(b, int | float) else "N/A" [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105841787-05:00 1329 | delta = f"{((t-b)/b*100):+.1f}%" if isinstance(t, int | float) and isinstance(b, int | float) and b else "—" [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105847477-05:00 | ^ E501 [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105852457-05:00 1330 | # Priority: use flag severity if exists, else spec default [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105857247-05:00 1331 | flag = next((f for f in flags if f['metric'] == key), None) [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105861727-05:00 | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105866007-05:00 [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105870647-05:00 analytics/src/storeminder/agents/synthesis_agent.py:1582:121: E501 Line too long (154 > 120) [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105875217-05:00 | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105879947-05:00 1580 | f"REPORTING PERIOD: {_w_start} → {_w_end} ({len(weekly_days)} days)\n" [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105885117-05:00 1581 | f"WEEK TOTALS (use these EXACT numbers in Section 1 KPI table and narrative):\n" [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105890307-05:00 1582 | f" This Week: ${_w_rev:,.0f} total | {_w_fuel:,.0f} gal | ${_w_ins:,.0f} inside | {_w_tx:,} tx | Inside/100gal: ${_w_per100:,.0f}\n" [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105895217-05:00 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E501 [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105900767-05:00 1583 | f" 4-Wk Benchmark: {_wb_fuel:,.0f} gal | ${_wb_ins:,.0f} inside | Inside/100gal: ${_wb_per100:,.0f}\n" [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105905607-05:00 1584 | f"NOTE: KPI table must show week TOTALS in 'This Week' column — " [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105910217-05:00 | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105914707-05:00 [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105941347-05:00 app/fleet/reconcile.py:22:1: I001 [*] Import block is un-sorted or un-formatted [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105948117-05:00 | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105952997-05:00 20 | Everything here is idempotent and safe to re-run. [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105957567-05:00 21 | """ [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105962447-05:00 22 | / from __future__ import annotations [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105967006-05:00 23 | | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105971476-05:00 24 | | from dataclasses import dataclass, field [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105976116-05:00 25 | | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105980506-05:00 26 | | from django.db import transaction [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105985216-05:00 27 | | from django.utils import timezone [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.105989646-05:00 28 | | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106000276-05:00 29 | | from stores.models import ( [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106005366-05:00 30 | | OPT_IN_ACTIVE, [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106009806-05:00 31 | | OPT_IN_PENDING, [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106024496-05:00 32 | | OPT_IN_STOPPED, [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106027776-05:00 33 | | PhoneStoreMap, [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106031266-05:00 34 | | Store, [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106034366-05:00 35 | | ) [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106037236-05:00 36 | | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106040416-05:00 37 | | from .models import CommunicationConsent, ConsentChannel, ConsentStatus [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106043436-05:00 38 | | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106046466-05:00 39 | | # The seam only carries the SMS program; email/other channels are ledger-native. [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106049566-05:00 | |_^ I001 [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106052496-05:00 40 | SEAM_CHANNEL = ConsentChannel.SMS [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106055636-05:00 41 | # `store_line` rows are the store's own outbound number, never a recipient. [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106058546-05:00 | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106061416-05:00 = help: Organize imports [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106064246-05:00 [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106067166-05:00 app/fleet/tests_consent_event.py:9:1: I001 [*] Import block is un-sorted or un-formatted [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106070136-05:00 | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106073106-05:00 7 | disagree with the push. Runs on sqlite and WS9 Postgres. [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106076176-05:00 8 | """ [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106079086-05:00 9 | / import json [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106082286-05:00 10 | | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106085306-05:00 11 | | from django.test import TestCase, override_settings [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106088346-05:00 12 | | from django.urls import reverse [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106091356-05:00 13 | | from django.utils import timezone [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106094456-05:00 14 | | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106097406-05:00 15 | | from stores.models import ( [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106100376-05:00 16 | | OPT_IN_ACTIVE, [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106103286-05:00 17 | | OPT_IN_PENDING, [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106106366-05:00 18 | | OPT_IN_STOPPED, [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106109406-05:00 19 | | PhoneStoreMap, [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106112486-05:00 20 | | Store, [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106115626-05:00 21 | | ) [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106118795-05:00 22 | | from fleet import reconcile [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106121865-05:00 23 | | from fleet.models import CommunicationConsent, ConsentChannel, ConsentStatus [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106124815-05:00 24 | | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106127725-05:00 25 | | TOKEN = "s3cr3t-consent-token" [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106130745-05:00 | |_^ I001 [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106133605-05:00 | [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106137325-05:00 = help: Organize imports [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106140265-05:00 [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106143095-05:00 Found 4 errors. [pod/pr-validator-8vn9h-lint-pod/step-ruff-mypy] 2026-07-13T12:01:23.106146215-05:00 [*] 2 fixable with the `--fix` option. [pod/pr-validator-8vn9h-lint-pod/prepare] 2026-07-13T12:01:08.177950000-05:00 2026/07/13 17:01:08 Entrypoint initialization [pod/pr-validator-8vn9h-lint-pod/place-scripts] 2026-07-13T12:01:09.486457389-05:00 2026/07/13 17:01:09 Decoded script /tekton/scripts/script-0-ttzht