Files
muratcankoylan 0d7595d0ac Release v2.2.0: researcher operating system + continuous loop
Ships a file-based research-to-skill operating system on top of the v2.1
skill corpus. The corpus now compounds across runs: mechanisms have a
gated promotion path, claims have explicit provenance, runs have an
enforceable state machine, skill activation is regression-tested, and the
harness is benchmarked against adversarial scenarios. A continuous loop
runs the whole thing unattended from launchd, retrieving sources over
stdlib HTTP and parking anything that needs human review.

Highlights
- Mechanism registry + accepted/rejected ledgers (5 seeded mechanisms)
- Claim provenance for 6 volatile claims across 6 skills
- Corpus index mapping skills to scenarios, mechanisms, and claims
- Activation regression fixtures (8 cases, all passing)
- Adversarial benchmark harness (7 scenarios) with append-only history
- Run state machine: initialized -> retrieved -> evaluated -> proposed ->
  novelty_checked -> validated -> pr_ready -> closed
- Continuous loop (loop_discover, loop_step, loop_daily, loop_status)
  with atomic JSONL writes and fcntl locks
- launchd service definitions and operator runbook
- CI workflow runs validate_repo --strict, run_benchmarks, and
  check_activation_cases on every PR
- AGENTS.md, CHANGELOG.md, researcher/runs/README.md,
  researcher/insights/auto-research-experiment.md

Skill changes
- All 14 published skills migrated from keyword triggers to
  activation-scenario descriptions
- Hardened evaluation/advanced-evaluation and project-development/
  harness-engineering boundaries

Repository policy
- Active research runs (researcher/runs/*/) are runtime state and
  gitignored. Seed run kept as a worked example, closed reference-only.
- Runtime queue, logs, snapshots, status, and loop event files are
  gitignored.

Verification
- validate_repo --strict: 0 errors, 0 warnings, 14 skills
- run_benchmarks: 3 checks, 0 failures, 7 scenarios
- check_activation_cases: 8 cases, 0 failures
- Python compile: clean (12 researcher scripts)
- Lint: clean
- Live loop: 13 iterations executed across init/retrieve/park/reap paths

No paid LLM judges, no automated source discovery beyond the manual seed,
and no log rotation. See researcher/insights/auto-research-experiment.md
for the full lessons-learned writeup.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-15 01:29:21 -04:00
..

Researcher Queue

The queue files are the persistent ledger that lets the autonomous loop run for days without losing state. Every change is append-only or replaces the entire file with a new sorted snapshot.

Files

  • inbox.jsonl - candidate sources discovered but not yet initialized as runs.
  • parked.jsonl - run IDs that hit a human-review gate and are waiting for a reviewer.
  • done.jsonl - run IDs that have been closed (accepted, rejected, reference-only, abandoned).
  • quarantine.jsonl - sources removed from rotation because retrieval failed or the source registry rejects them.

Source Record Shape

Each line in inbox.jsonl and quarantine.jsonl is a JSON object:

{
  "source_id": "deterministic-hash",
  "url": "https://example.com/post",
  "title": "Short title",
  "author_or_org": "Org",
  "source_type": "paper | engineering_blog | documentation | benchmark | code | talk | other",
  "candidate_reason": "Why this source matters",
  "feed": "manual-seed | parallel-research | rss | other",
  "discovered_at": "ISO-8601",
  "attempts": 0,
  "last_status": "queued | initialized | failed"
}

Active runs live under researcher/runs/<run-id>/ and have their own run-state.json. The loop scripts read those state files directly rather than duplicating active-run state here, so there is one source of truth per run.