autoresearch/results/ mixes three structurally distinct artefact families. Knowing which is which matters when scripting against the directory or comparing scores.
Type A — Single-shot experiment summary
Produced by autoresearch/experiment.ts. One file per --tag invocation, named <tag>.json. Shape (key fields):
{ "tag": "jsonld-v2", "timestamp": "2026-04-02T15:59:52.531Z",
"total_companies": 10, "companies_with_contacts": 9, "extraction_rate": 0.9,
"total_contacts": 52, "avg_contacts": 5.2, "valid_names": 41,
"false_positive_rate": 0.21, "contacts_with_email": 38, ... }Examples: jsonld-v2.json, google-places-v2.json, extraction-v7.json, stockholm-ab-v3.json, uppsala-ab-v2.json, final-clean.json, email-association.json, db-companies.json, active-companies.json. Most files in the directory are this type. The composite-score formula in Autoresearch Loop is computed from this shape.
Type B — Smoke / regression snapshot
Same shape as Type A but written by ad-hoc test runs (often n=1 or n=3) rather than a tagged experiment round. They look identical structurally but are not part of the 29-round progression.
Examples: current-test.json, current-test-3.json, fixed-test.json, quick-test.json, latest.json.
latest.json is a copy of the most recent run regardless of tag — do not treat it as a fixed reference point.
Type C — Append-only history log (*.jsonl)
JSON Lines, one record per line. Two files in this family.
history.jsonl
Written by experiment.ts. One line per completed tag, slim summary suitable for time-series analysis:
{"tag":"quick-test","timestamp":"2026-04-06T03:18:43.135Z","composite_score":93.8,"extraction_rate":1,"total_contacts":21,"false_positive_rate":0,"avg_time_seconds":26.637}continuous-history.jsonl (new, 2026-04-06)
Written by loop-continuous.ts. One line per company test rather than per tag — much higher cardinality. Schema is per-source rather than per-experiment:
{
"org_nr": "5562745926",
"name": "Ren Jämt i Uppsala AB",
"city": "Uppsala",
"domain": "renjamt.se",
"domain_time_ms": 0,
"crawlee": { "contacts": 9, "emails": 7, "phones": 8, "time_ms": 19386 },
"firecrawl": { "contacts": 0, "emails": 0, "phones": 0, "time_ms": 0 },
"maps": { "contacts": 1, "emails": 0, "phones": 1, "time_ms": 252 },
"best_source": "crawlee",
"total_contacts": 10,
"timestamp": "2026-04-06T03:47:31.080Z"
}Use this when you need to compare sources head-to-head or track per-company drift over time, not when you want a roll-up score.
How to tell them apart in scripts
- File extension
.jsonand contains"tag":"..."and"total_companies":N→ Type A or B. - File extension
.jsonl→ Type C, parse line by line. total_companies <= 3→ most likely Type B (smoke), excluded from aggregate stats.- Presence of nested
crawlee/firecrawl/mapskeys → onlycontinuous-history.jsonl.
See also
Autoresearch Loop, Experiment Results, Crawlee Scraper, Firecrawl, Google Places.