Rule Catalog

Every rule Hermes evaluates against a case. Each rule has a stable ID that remains valid across methodology versions, so any case you cite today can be replayed and verified by a third party later.

Methodology version 0.16.0. Count: 31 rules.

Weather

ID Name Purpose Inputs Source Since
WX-AVAIL-00 Weather data availability Records whether the weather fetch succeeded; no elimination runs if it didn't. lat, lon, datetime Visual Crossing historical v0.4.0
WX-CLOUD-01 Cloud cover eliminates reflection/refraction Clear sky rules out cloud-based optical artifacts; overcast flags them as possible. cloud_cover_pct Visual Crossing historical v0.4.0
WX-WIND-01 Low wind eliminates buoyancy drift Low wind weakens sky-lantern / balloon explanations; high wind flags debris. wind_mph Visual Crossing historical v0.4.0
WX-VIS-01 Low visibility degrades observation Flags cases where fog/haze undermines distance and shape estimates. visibility_mi Visual Crossing historical v0.4.0

Aircraft

ID Name Purpose Inputs Source Since
AC-AVAIL-00 Aircraft data availability Records whether the live ADS-B snapshot succeeded. lat, lon ADS-B live snapshot v0.4.0
AC-DENSITY-01 Local air-traffic density Many aircraft in a 50 nm radius flags conventional-traffic candidates; few reduce them. count ADS-B live snapshot v0.4.0

Satellites

ID Name Purpose Inputs Source Since
SAT-AVAIL-00 Satellite data availability Records whether the overhead-satellite snapshot succeeded. lat, lon N2YO /above endpoint v0.4.0
SAT-OVER-01 Satellites in wide overhead cone Availability count only; line-of-sight elimination needs TLE propagation (planned). lat, lon N2YO /above endpoint v0.4.0
SAT-LOS-01 Satellite line of sight (TLE-propagated) Eliminates a report when a catalogued satellite was geometrically consistent with the reported bearing AND sunlit while the observer was in darkness. lat, lon, when_utc, azimuth_deg, elevation_deg CelesTrak GP + sgp4 (daily cache) v0.6.0

Celestial bodies

ID Name Purpose Inputs Source Since
CEL-AVAIL-00 Celestial computation availability Records whether PyEphem could compute bodies for the reported time and location. timezone, datetime, lat, lon PyEphem local computation v0.4.0
CEL-MOON-01 Bright Moon check Flags bright Moon above horizon; eliminates when Moon is dim or below horizon. altitude, phase_pct PyEphem local computation v0.4.0
CEL-TWI-01 Twilight illumination Flags high-altitude-object sunlight-reflection windows (civil/nautical twilight). sun_altitude PyEphem local computation v0.4.0
CEL-PLANET-01 Bright planet candidate Flags Venus/Jupiter/Mars/Saturn when above 5 deg and brighter than mag +1.0. planet_altitude, magnitude PyEphem local computation v0.4.0

Corroboration

ID Name Purpose Inputs Source Since
CORR-01 Corroboration cluster (spatio-temporal) Flags reports near others in space and time; describes reporting behavior, never claims anomaly. lat, lon, when_utc Hermes native case store v0.6.0

Witness observation

ID Name Purpose Inputs Source Since
OBS-COLOR-01 Reported color vs. known signatures Maps reported colors to known conventional sources; rare colors are retained for review. color witness report v0.4.0
OBS-BEHAV-01 Hovering claim Hovering alone is not an anomaly; many conventional sources produce apparent hover. behavior_text witness report v0.4.0
OBS-BEHAV-02 High-acceleration kinematics claim Preserves kinematic claims as witness-reported, not instrumented measurement. behavior_text witness report v0.4.0

Geometry

ID Name Purpose Inputs Source Since
GEO-DIST-01 Apparent-altitude ladder Computes object altitude at candidate distances; shows what geometry admits. elevation_angle, observer_elev trigonometric calc v0.4.0
CAM-GEO-01 Camera calibration geometry Checks whether the attributed camera has a registered viewshed cone; a calibrated camera is a triangulation anchor. camera_id Hermes camera registry v0.9.0
GEO-WITNESS-01 Witness standpoint geometry Flags cases where no geometry anchor exists; applies quality penalty unless EXIF GPS, a corroborating witness, or a calibrated camera is present. witness_geometry, media_exif_gps, corroborated, camera_calibrated witness report + Hermes case data v0.9.0

File provenance

ID Name Purpose Inputs Source Since
PROV-01 Provenance record present Informational (score weight 0). Records whether a cryptographic provenance record was extracted at upload; lists non-null fields. case.provenance Hermes media pipeline v0.10.0

Perceptual fingerprinting

ID Name Purpose Inputs Source Since
FP-01 Fingerprint recorded Informational (score weight 0). Records whether a perceptual fingerprint was computed at upload; lists frame count and algorithm version. case.provenance.fingerprint Hermes fingerprint pipeline v0.11.0
FP-02 Reused-footage candidate Surfaces near-matches against existing corpus and operator camera references. Does not penalise — analyst review required. Same-witness same-event matches within ±2h are excluded as legitimate corroboration. case.provenance.fingerprint.match_candidates Hermes fingerprint index v0.11.0

Known-object exclusion

ID Name Purpose Inputs Source Since
EXC-01 Exclusion engine ran Informational (score weight 0). Records whether the exclusion engine ran, why or why not (preconditions report), and the catalog query summary. case.exclusion_results Hermes exclusion engine v0.12.0
EXC-02 Known-object candidate match Surfaces candidate matches from external catalogs (ADS-B, satellites, astronomical, weather context). Does not exclude — analyst review required to confirm or reject any specific candidate. The presence of a match does not invalidate a sighting; the absence does not validate it. case.exclusion_results.catalogs Hermes exclusion engine v0.12.0
EXC-03 Clean of known objects All four exclusion catalogs were queried and found no candidate matches within the sighting envelope. This does not prove anomaly; it documents an honest absence of mundane explanation. case.exclusion_results.summary.total_matches Hermes exclusion engine v0.12.0

AI-provenance signals

ID Name Purpose Inputs Source Since
AI-01 AI-provenance signal panel ran Informational (score weight 0). Records whether the AI-provenance signal panel ran and which sub-signals returned data. No signal in this panel claims a verdict on authenticity — each surfaces one independently-scored measurement for analyst review. case.provenance.ai_signals Hermes AI-provenance pipeline v0.13.0
AI-02 C2PA result Mirrors the C2PA Content Credentials result from provenance extraction. Verdict: passed if a valid manifest was verified, flagged if present but invalid (possible tampering or re-encode), no_data if absent. Absence is not evidence of AI generation — most consumer devices do not yet sign with C2PA. case.provenance.ai_signals.c2pa c2pa-python / Content Credentials v0.13.0
AI-03 Codec forensics findings Four codec and container sub-signals, each with its own analyst note and failure-mode disclosure: software_tag_suspicious (EXIF Software field matches known AI-generation tool list), bitrate_suspicious (exact round-thousand kbps CBR), container_codec_mismatch (pairing not produced by real cameras), gop_anomaly (intra-only, atypically tight, or closed-GOP synthetic pattern). Triggers flagged when any sub-signal fires. Score weight 0. case.provenance.ai_signals.codec_forensics Hermes codec forensics (pure provenance) v0.13.0
AI-04 Sun-shadow geometry available Computes the expected sun azimuth and elevation at the witness location and sighting time using Skyfield + DE421 ephemeris. Hermes computes where the sun was; the analyst confirms whether shadows in the frame agree. Automatic shadow-direction extraction from imagery is deferred to a future version. case.provenance.ai_signals.shadow_check Skyfield + DE421 ephemeris v0.13.0
AI-05 PRNU sensor-noise match Compares the sensor noise fingerprint (Gaussian residual of the green channel, 256×256) from this upload against the calibrated reference fingerprint stored for the registered camera. Match threshold: ≥ 0.05 normalized cross-correlation. Real same-sensor matches typically score 0.05–0.20; different-sensor or AI-generated content scores near zero. Only runs when the case comes from a registered camera with a reference-media fingerprint on file. Score weight 0. case.provenance.ai_signals.prnu_check, cameras[].prnu_fingerprint Hermes PRNU pipeline (numpy/Pillow) v0.13.0

How rules work

Every rule carries five pieces of state: inputs it received, the data source it queried, the result it got, a verdict (eliminated, flagged, indeterminate, no_data, or passed), and a plain-language explanation of what that verdict means for this case.

A rule marked eliminated means Hermes found positive evidence that a conventional explanation is ruled out in this case. A rule marked flagged means a conventional explanation remains plausible and should be investigated further. Indeterminate means the rule ran but the evidence is not strong in either direction. No data means the rule could not run because an input source was unavailable, and the case is treated as less-audited for that category.

Rules never describe the underlying phenomenon. They describe the signal and the audit. This is intentional: Hermes is an analysis platform, not an interpretation engine.

Planned additions