# 2026-04-29 TIPLLM Robot Learning Handoff

## Summary

Rene requested that TIP crawler/robot planning use TIPLLM only, no external AI layer, and that crawler/robot experience be written into a Gitea training pool so TIPLLM improves over time.

Implemented locally and synced to Erik:

- Verification robot controller with safe profiles:
  - `erik-safe`
  - `pi-fetch`
  - `proxmox-heavy`
- TIPLLM planning mode:
  - `--tipllm-plan --limit=N`
- Robot experience writer:
  - status snapshots
  - TIPLLM plans
  - queue dry-runs
  - queue enqueues
  - rejected queue plans
  - future crawler results
- Learning pool import:
  - `TIP_TRAINING_REPO/qa-pairs/**/*.jsonl` is imported into the `tip_llm` lane by `learning-pool:build`.

## Safety Choices

- Default robot profile is `erik-safe`.
- `erik-safe` is capped to 3 lightweight queues by default.
- Playwright and discovery queues are excluded from `erik-safe`.
- No crawler jobs were started during this work.
- No queue waves were enqueued during this work.

## Training Pool

The local Gitea training pool clone already existed at `/tmp/tip-training-data`.

A first robot experience was written and pushed:

```text
f1c83f8 crawl: add robot-status training records [2026-04-29T20:11:24.091Z]
```

## Erik

Synced code/docs to `/opt/tip` and ran the scraper TypeScript build.

The build initially failed because two stale misplaced remote-only duplicate files existed on Erik:

- `/opt/tip/packages/scraper/src/scrapers/scheduler.ts`
- `/opt/tip/packages/scraper/src/vendor-discovery-crawler.ts`

They were not present locally and had wrong relative imports. Removed only those duplicates. Build passed after that.

PM2 services were left running and were not restarted.

## Commands To Start Safely

```bash
npm run robots:verification -w packages/scraper -- --status
npm run robots:verification -w packages/scraper -- --tipllm-plan --limit=3
npm run robots:verification -w packages/scraper -- --enqueue=details-fast-lane --profile=erik-safe --dry-run
```

