{"$defs":{"counted_query":{"additionalProperties":false,"properties":{"hits":{"minimum":0,"type":["integer","null"]},"query":{"type":"string"}},"required":["query","hits"],"type":"object"},"counted_ref":{"additionalProperties":false,"properties":{"hits":{"minimum":0,"type":["integer","null"]},"referrer":{"type":"string"}},"required":["referrer","hits"],"type":"object"},"path_entry":{"additionalProperties":false,"properties":{"hits":{"description":"Null when unattested — never fabricate a number.","minimum":0,"type":["integer","null"]},"path":{"type":"string"},"verified_http":{"description":"Last observed HTTP status for the path, or null.","type":["integer","null"]},"verified_on":{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":["string","null"]}},"required":["path","hits"],"type":"object"}},"$id":"https://cumulativewebinc.github.io/cwi-learn/streetlight/streetlight-schema.json","$schema":"https://json-schema.org/draft/2020-12/schema","description":"Authoring schema for a CWI Streetlight file (cwi-streetlight/v1). A site publishes streetlight.json at a standard path: its public traction vitals as plain JSON, readable by any agent with one fetch. No login, no JavaScript, no cookies, no sampling, zero PII — aggregates only.","format":"cwi-streetlight/v1","properties":{"as_of":{"description":"Date (YYYY-MM-DD) the vitals were attested or compiled.","pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},"format":{"const":"cwi-streetlight/v1","type":"string"},"methodology":{"additionalProperties":false,"description":"How the numbers were produced. Required so readers can judge trust.","properties":{"aggregation":{"type":"string"},"collection":{"type":"string"},"privacy":{"type":"string"},"sampling":{"type":"string"}},"required":["collection","aggregation","privacy","sampling"],"type":"object"},"property":{"additionalProperties":false,"properties":{"description":{"type":"string"},"name":{"type":"string"},"url":{"format":"uri","type":"string"}},"required":["name","url"],"type":"object"},"publisher":{"additionalProperties":false,"properties":{"contact":{"type":"string"},"name":{"type":"string"},"verification_note":{"type":"string"}},"required":["name","contact"],"type":"object"},"signals":{"description":"Optional publisher-attested traction facts about the property's subject (e.g. catalog metrics). Every signal must carry observed date and source.","items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"observed":{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},"source":{"type":"string"},"value":{"type":"string"}},"required":["label","value","observed","source"],"type":"object"},"type":"array"},"vitals":{"additionalProperties":false,"properties":{"attested":{"description":"True only when every non-null count is an exact publisher-attested figure. False means nulls are honest placeholders.","type":"boolean"},"referrers":{"items":{"$ref":"#/$defs/counted_ref"},"type":"array"},"top_paths":{"items":{"$ref":"#/$defs/path_entry"},"type":"array"},"top_queries":{"items":{"$ref":"#/$defs/counted_query"},"type":"array"},"unique_agents":{"description":"Distinct agents (not humans) observed in the window, per the publisher's counting method. Null when unattested.","minimum":0,"type":["integer","null"]},"visits":{"description":"Total visits in the window. Null when unattested — never fabricate a number.","minimum":0,"type":["integer","null"]}},"required":["attested","visits","unique_agents","top_paths","referrers","top_queries"],"type":"object"},"window":{"additionalProperties":false,"properties":{"end":{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},"note":{"type":"string"},"start":{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},"tz":{"type":"string"}},"required":["start","end"],"type":"object"}},"required":["format","property","as_of","window","vitals","methodology","publisher"],"title":"CWI Streetlight","type":"object"}