pixellint

LemonPI events check creative library payloads.

Advisory checks for pinned LemonPI creative-library JSON carried in e on exact content.lemonpi.io/track/event. Recognized legacy/v2 click, impression and engagement profiles only. Unknown types, versions, engagement names and identifier types stay open; receiver acceptance remains external.

What this pack matches

Hosts
content.lemonpi.io
Paths
/track/event
Vendor docs
gitlab.com/greenhousecode/lemonpi/lemonpi-creative-libraries/-/raw/be7e13c5459bd899e545d5da8735ff965efede5b/packages/interaction-handler/src/interaction-handler.ts

Rules

Codes are stable. A finding in CI, MCP, or the playground lands on the same id.

Field Required What it checks Rule ids Source
e optional Pinned default URL builder carries event JSON in the e query value. No missing carrier rule is imposed on other profiles. Presence diagnostic severity: warning. docs
type optional Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Presence diagnostic severity: warning. Value diagnostic severity: warning. docs
version optional Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Presence diagnostic severity: warning. Value diagnostic severity: warning. docs
name optional Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Presence diagnostic severity: warning. Value diagnostic severity: warning. docs
schema recommended Recognized legacy/v2 click and impression producers emit adset-creative. Unknown types and versions remain outside this assertion. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click","impression"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: string. vendor.lemonpi-events.body.schema.missing
vendor.lemonpi-events.body.schema.empty
vendor.lemonpi-events.body.schema.invalid
docs
adsetId recommended Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click","impression"]},{"kind":"not","condition":{"kind":"exists","param":"version"}}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. vendor.lemonpi-events.body.adsetId.missing docs
creativeId recommended Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click","impression"]},{"kind":"not","condition":{"kind":"exists","param":"version"}}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. vendor.lemonpi-events.body.creativeId.missing docs
adset-id recommended Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"any","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. vendor.lemonpi-events.body.adset-id.missing docs
creative-id recommended Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"any","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]},{"kind":"not","condition":{"kind":"exists","param":"version"}}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. vendor.lemonpi-events.body.creative-id.missing docs
impression-id recommended Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"any","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. vendor.lemonpi-events.body.impression-id.missing docs
advertiser-id recommended Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"any","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. vendor.lemonpi-events.body.advertiser-id.missing docs
creative-revision-id recommended Pinned SDK profile advice only. Identifier values, native types, registry membership and receiver acceptance remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"any","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]},{"kind":"all","conditions":[{"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. vendor.lemonpi-events.body.creative-revision-id.missing docs
out recommended Recognized click producer emits an encodeURIComponent string. No URL grammar, nonempty requirement or extra decoding is inferred. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: string. vendor.lemonpi-events.body.out.missing
vendor.lemonpi-events.body.out.invalid
docs
tracker optional Optional click tracker is an encodeURIComponent string. Absence and empty strings remain allowed; no URL grammar is imposed. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: string. vendor.lemonpi-events.body.tracker.invalid docs
content optional Known content sources yield an object in v2 impressions. Unknown sources omit content, so presence is never required. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: object. vendor.lemonpi-events.body.content.invalid docs
content.source recommended When a v2 impression content object exists, normalizeContent emits one of these three producer source labels. Missing parent content remains allowed. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["impression"]},{"kind":"value_in","param":"version","values":["2"]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: string. vendor.lemonpi-events.body.content.source.missing
vendor.lemonpi-events.body.content.source.empty
vendor.lemonpi-events.body.content.source.invalid
docs
data recommended The four recognized engagement dispatch branches spread their caller payload into an object. Empty and arbitrary object members remain open. Decoded body source: e. Encoding: json. Decoding diagnostic severity: warning. Applies when {"kind":"not","condition":{"kind":"value_in","param":"e","values":["LEMONPI%EVENTDATA"]}}. Applies when {"kind":"all","conditions":[{"kind":"value_in","param":"type","values":["engagement"]},{"kind":"value_in","param":"name","values":["viewability","interaction","interaction-time","interaction-click"]},{"kind":"any","conditions":[{"kind":"not","condition":{"kind":"exists","param":"version"}},{"kind":"value_in","param":"version","values":["2"]}]}]}. Presence diagnostic severity: warning. Value diagnostic severity: warning. Native JSON type: object. vendor.lemonpi-events.body.data.missing
vendor.lemonpi-events.body.data.invalid
docs

Validate a payload

pixellint validate url "$ARTIFACT" --rulepack vendor/lemonpi-events

Try this failing payload in the playground. An example with a validation finding.

https://content.lemonpi.io/track/event?e=%7Bbad

cargo install pixellint · npm install pixellint