{
  "schema_version": 1,
  "description": "Hanging Context public data snapshots. Each window JSON provides top-level context for agents: visual panels have JSON twins, claims are sourced to primary primitives, and rolling-window fields are built for reasoning systems. Fields may be added at the same schema_version; renames or semantic changes bump the version.",
  "fields": {
    "window": "Window name, e.g. '24h' | '7d'",
    "rebuild_trigger": "Present on data/index.json when known: 'scheduled' for the 00:00/12:00 UTC refresh path, 'off_cycle' for manual/all-panel refreshes.",
    "window_label": "Human-readable label",
    "window_days": "Integer day count",
    "window_hours": "Exact rolling window length in hours, e.g. 24 or 168",
    "window_coverage": "Window coverage mode; rolling windows use 'rolling'",
    "snapshot_kind": "Optional payload kind. windows/<window>.home.json uses 'homepage_render', windows/<window>.temporal-context-snapshots.json uses 'temporal_context_snapshots_render', windows/<window>.tags.json uses 'public_tag_terrain_render', and windows/<window>.entities.json uses 'primitive_leaderboard_render'. Render payloads keep page-specific public arrays while omitting unrelated heavyweight fields.",
    "full_snapshot": "Present on some render payloads; points to the complete public window JSON.",
    "omitted_fields": "Present on homepage render payloads; names fields available only in full_snapshot.",
    "temporal_context_snapshots_file": "Present on data/index.json window entries; points to the lightweight temporal context snapshots render payload for that window.",
    "tag_terrain_file": "Present on data/index.json window entries; points to the public-safe narrative terrain payload for that window.",
    "entities_file": "Present on data/index.json window entries; points to the lightweight primitive leaderboard and stream-relationship render payload for that window.",
    "manifest_bundle_file": "Present on data/index.json window entries; points to the public-safe manifest bundle index for that window.",
    "render_spec": "Present on public panel JSON payloads. Stable rendering contract with visualization_kind, title, summary, eyebrow, date, data_dependencies, dimensions/aspect, source_trail, media references, and export_payload for agents recreating the visual panel.",
    "manifest_bundle": "Hot-window public manifest bundle metadata. Index lives at data/manifests/<window>/index.json and chunks at data/manifests/<window>/part-0001.json, ordered by source_published_date_desc_manifest_id_desc. Chunks include public-safe manifest/story ids, record/source identifiers, source URL/title/date, stream ids/names, signal/brief summaries, public body excerpts, public tags/entities, claims, and source citations.",
    "range": "{start, end} ISO-8601 UTC timestamps",
    "as_of": "Bundle publish timestamp (ISO-8601 UTC). Windows, panels, share metadata, and index from the same rebuild use the same value.",
    "published_at": "Alias for as_of on timestamp-coherent rebuild bundles.",
    "refresh_analysis": "Deterministic comparison against the previous on-disk refresh: {kind, comparison_basis, previous_as_of, elapsed_hours, summary, panel_changes}. Comparison basis is rolling_window_vs_previous_build, not disjoint cadence slices.",
    "claims_by_day_analysis": "Deterministic rebuild note for the volume chart: {kind, comparison_basis, generated_at, range, summary, paragraphs, metrics}. Regenerated with every 12-hour build and written as a short monitoring note about context graph movement, active domains, leading streams, source channels, source formats, and primitive activity.",
    "totals": "Counts of claims, manifests, records, entities, sources, domains",
    "claims_by_day": "Array of {day, claims}. Entries are aligned to claim.published_date, a DATE column; 7d uses seven observed source dates and 24h uses the latest source-published date.",
    "top_entities": "Ranked entities by claim count: complete for rolling windows unless an explicit build limit is configured; capped at the monthly primitive limit when monthly snapshots are built with --monthly-primitives. Shape: {tag_id, name, type, claim_count, slug=<kebab(name)>-<type>}",
    "top_sources": "Ranked sources by claim count, complete for the rolling window unless an explicit build limit is configured: {source_name, source_display, claim_count, record_count, manifest_count}. source_name is the raw source key; source_display is the cleaned/public label.",
    "top_streams": "Ranked streams by claim count, complete for the rolling window unless an explicit build limit is configured. Stream inclusion comes from stream_story signal routes so claim-route backfill lag cannot hide active streams. Shape: {stream_id, stream_slug, stream_display, home_domain, manifest_count, claim_count, channels: [{channel_slug, channel_display, claim_count}]}. Claims matching >1 stream count in each.",
    "stream_trend": "Per-bucket claim counts for every ranked stream, joined from stream_story signal routes to claims. Keyed by str(stream_id): [{day, claims}]. Powers the stream panel trend direction labels.",
    "stream_filter_shapes": "{dimensions: [{key, label}], streams: [{stream_id, stream_slug, stream_display, home_domain, claim_count, manifest_count, breakdowns: {confidence: [{value, label, claim_count}], evidence: [...], featured: [...]}, filters: {source_channel: [{value, label, manifest_count, claim_count, breakdowns: {...}, examples: [{claim_id, text, source, source_url, source_channel_display, published_date, confidence, evidence_type, featured, media_type, claim_type}]}], media_type: [...], claim_type: [...]}}]}. Homepage stream-filter explorer: click a stream, then click a filter bucket to inspect breakdowns and example claims.",
    "primitive_scope": "Monthly snapshots only: documents whether top_entities, tag_terrain, and stream_tag_graph were built for the file. The 12-hour current-month hot rebuild skips monthly primitives; closed-month finalizers/backfills can include top_entities with --monthly-primitives while graph-like relationship fields remain rolling-window only.",
    "stream_tag_graph": "{streams: [{stream_id, stream_slug, stream_display, home_domain, manifest_count}], tags: [{tag_id, name, type, slug=<kebab(name)>-<type>, manifest_count}], edges: [{stream_id, tag_id, manifest_count}]}. Homepage network: home domains and streams on one side, canonical org/person/place/topic tags on the other.",
    "temporal_context_snapshots": "{window_label, generated_at, lenses:[{id, slug, kicker, title, card_title, card_sub, hero_kind, summary, domains:[home_domain], topic_pack:[{slug,name}], metrics:{claims,manifests,streams,synorb_streams,sources,live_sources,source_channels,organizations}, claims_by_day:[{day,claims}], source_cohorts:[{key,label,claim_count,manifest_count,source_count}], cohort_mix:{label:claim_count}, cohort_topic_matrix:{cohort_label:{topic_name:claim_count}}, top_sources:[{source_name,source_display,cohort,cohort_label,claim_count,record_count,manifest_count,source_channel_count,source_channels:[{id,name,display,media_format,source_url}]}], top_organizations:[{tag_id,slug,name,claim_count,manifest_count}], top_topics:[{tag_id,slug,name,claim_count,manifest_count,is_seed}], org_topic_graph:{stream_label,streams:[source/delivery streams with source_channels],tags:[organization|person|place|topic primitives],edges:[stream-to-primitive manifest counts]}, sample_claims:[{claim_id,text,source,source_display,source_channel_name,media_format,source_url,published_date,confidence,evidence_type,domain,cohort,cohort_label,topics:[name],organizations:[name]}]}]}. Temporal context snapshots built from domain + canonical topic packs + stream-level source cohorts. metrics.streams/synorb_streams count the configured visible stream inventory for scoped delivery-stream lenses; metrics.sources/live_sources count streams or source buckets with snapshot-window evidence. Ranked arrays and org_topic_graph are complete for the matched snapshot window unless an explicit snapshot-level limit is configured; sample_claims remains sampled. Legacy JSON count aliases are retained for backward compatibility.",
    "temporal_context_snapshots.lenses[].narrative": "Deterministic text layer generated from computed snapshot metrics: top-4 download narrative plus narrative.cumulative for the full live relationship graph; includes selected stream basis, loudest streams, topics discussed, same-lens changes from the previous saved rebuild, and velocity rows. Math is computed before prose is assembled.",
    "temporal_context_snapshots.lenses[].render_data": "Chart/table/graph-ready data for agents that want to rebuild the panel in another visual, table, or downstream workflow: metrics, claims_by_day, selected_streams, topics_discussed, source_cohorts, changes, velocity, and org_topic_graph.",
    "claim_types": "Dict of claim_type -> count",
    "evidence_types": "Dict of evidence_type -> count",
    "confidence_levels": "Dict of confidence -> count",
    "sentiment_levels": "Dict of manifest sentiment -> claim count (claim-weighted via signal manifests)",
    "domains": "Dict of home_domain -> count for every observed domain",
    "tag_terrain": "Public-safe narrative terrain for primitive relationships: {inventory:{primitive_band, edge_band, public_terrain_count, public_bridge_count}, scope, terrains:[{id,label,kicker,description,why_agents_care,activity,primitive_band,anchors:[{name,type,activity}],type_mix}], bridges:[{source,target,label,strength,connection_band}]}. Exhaustive tags, raw edge weights, rare-tail nodes, and full co-occurrence inventory are deliberately omitted from public payloads.",
    "highlights": "Curated high-confidence claims with source URLs + entities",
    "verified_samples": "Homepage featured-claim cards: 10 claims verified in the last 12h via record.synorb_ingested_at. Fields: {claim_id, text, source, source_display, source_url, source_channel_display, published_date, verified_at, sentiment, confidence, evidence_type, media_type, claim_type}.",
    "samples": "Recent claims (any confidence) for the /explore view",
    "agents.json": "Root no-auth discovery contract. Mirrors data/agent.json and links schema, window JSON twins, panel JSON, stream catalog/sample URLs, and public manifest bundles."
  },
  "notes": [
    "Agents should start at /agents.json or /data/agent.json for one-shot discovery",
    "Every visual panel has a JSON twin at windows/<window>.json",
    "Homepage pages may load windows/<window>.home.json first so browsers do not block on unrelated fields",
    "Temporal Context Snapshot pages may load windows/<window>.temporal-context-snapshots.json first so browsers do not block on the complete public window JSON",
    "Tag and entity detail pages may load windows/<window>.tags.json and windows/<window>.entities.json first so browsers do not block on unrelated fields",
    "Public-safe manifest bundles expose metadata, summaries, claims, tags/entities, and source citations without raw record content, account data, prompts, or model traces",
    "Hanging Context provides top-level context for agents and reasoning systems; sources are primary primitives and direct-source channels",
    "Schema is stable within schema_version=1; agents should branch on it",
    "Generated on a regular refresh cadence; use as_of, published_at, refresh_id, and range fields to confirm freshness"
  ]
}