Add CI/CD, README, and a case study for deep_research #9

Merged
schaefera merged 5 commits from worktree-deep-research-max-turns-report into master 2026-08-18 12:12:33 +00:00
Collaborator

Follow-up to #8 (already merged), which fixed the max-turns recovery, the DuckDuckGo rate-limiting root cause (swapped to local SearXNG), and split core.rs for separation of concerns.

This adds:

  • .forgejo/workflows/deep_research-ci.yml — build, test, clippy (-D warnings), fmt --check on push/PR, scoped to deep_research (not workspace-wide — swear_cleanup has an unrelated pre-existing clippy warning that would otherwise break CI on an unrelated project)
  • deep_research/README.md — what the project does, the four-agent architecture, why it's local-first (Ollama + self-hosted SearXNG, no cloud API key, no query leaves the host), project layout, how to run/test it
  • deep_research/docs/case-study.md — narrative walkthrough of the max-turns recovery path, the rate-limiting root cause and fix, and the SoC refactor, each verified against a live run of the actual failing case rather than just unit tests. Uses a neutral "AI customer-support chatbot trends" research run as the illustrative clean-pipeline example.

Test plan

  • cargo build/test/clippy/fmt all clean for deep_research
  • CI workflow reviewed for correctness (not yet observed running on the actual runner — first push to this branch/PR will be the live test)
Follow-up to #8 (already merged), which fixed the max-turns recovery, the DuckDuckGo rate-limiting root cause (swapped to local SearXNG), and split `core.rs` for separation of concerns. This adds: - `.forgejo/workflows/deep_research-ci.yml` — build, test, clippy (`-D warnings`), fmt --check on push/PR, scoped to `deep_research` (not workspace-wide — `swear_cleanup` has an unrelated pre-existing clippy warning that would otherwise break CI on an unrelated project) - `deep_research/README.md` — what the project does, the four-agent architecture, why it's local-first (Ollama + self-hosted SearXNG, no cloud API key, no query leaves the host), project layout, how to run/test it - `deep_research/docs/case-study.md` — narrative walkthrough of the max-turns recovery path, the rate-limiting root cause and fix, and the SoC refactor, each verified against a live run of the actual failing case rather than just unit tests. Uses a neutral "AI customer-support chatbot trends" research run as the illustrative clean-pipeline example. ## Test plan - [x] `cargo build/test/clippy/fmt` all clean for `deep_research` - [x] CI workflow reviewed for correctness (not yet observed running on the actual runner — first push to this branch/PR will be the live test)
claude-bot added 1 commit 2026-08-18 11:29:03 +00:00
Add CI/CD, README, and a case study documenting this session's work
Some checks failed
deep_research CI / test (pull_request) Failing after 2m23s
deep_research CI / test (push) Failing after 2m27s
9fa91b3da7
- .forgejo/workflows/deep_research-ci.yml: build, test, clippy (-D
  warnings), and fmt --check on push/PR, scoped to deep_research (not
  workspace-wide — swear_cleanup has an unrelated pre-existing clippy
  warning that would otherwise break CI on an unrelated project)
- README.md: what the project does, the four-agent architecture, why
  it's local-first (Ollama + self-hosted SearXNG, no cloud API key, no
  query leaves the host), project layout, and how to run/test it
- docs/case-study.md: narrative walkthrough of the max-turns recovery
  path, the DuckDuckGo-rate-limiting root cause and SearXNG fix, and the
  separation-of-concerns refactor — each step verified against a live
  run of the actual failing case, not just unit tests. Uses a neutral
  "AI customer-support chatbot trends" research run as the illustrative
  clean-pipeline example rather than the personal topic used during
  actual debugging.
schaefera added 1 commit 2026-08-18 11:43:35 +00:00
Extract swear_cleanup to its own repo, flatten deep_research to root
Some checks failed
CI / test (push) Failing after 6s
CI / test (pull_request) Failing after 7s
f2c10783db
deep_research is the only project this repo is meant to showcase, so the
Cargo workspace wrapping it and an unrelated side project no longer earns
its keep:

- swear_cleanup moved to a new standalone local repo (~/dev/swear_cleanup,
  not pushed anywhere) via `git subtree split`, with its pre-workspace-
  split history (when it lived at src/swear_cleanup/ in a single shared
  crate) spliced onto its post-split history rather than starting from a
  single flattened snapshot. FINDINGS.md, which was sitting at this repo's
  root but was actually swear_cleanup's own build log, went with it.
- deep_research/{src,Cargo.toml,README.md,docs} moved to the repo root;
  the [workspace] table collapsed into a plain [package] manifest with
  dependency versions inlined from the old [workspace.dependencies].
- Cargo.toml keeps an explicit empty [workspace] table (not just omitted)
  so that checking this repo out as a nested git worktree — this
  project's own normal workflow — can't accidentally inherit a stale
  ancestor directory's workspace manifest, which is exactly what broke
  the build while testing this change from a worktree.
- .forgejo/workflows/deep_research-ci.yml -> ci.yml, dropping the now-
  meaningless -p deep_research scoping and path filters (redundant when
  it's the only thing in the repo).
- README.md and docs/case-study.md updated for the flattened commands
  (cargo run/test with no -p flag); their relative links to each other
  and to src/ were already correct since both moved together.

Verified: cargo build/test/clippy/fmt all clean from the new repo root.
schaefera added 1 commit 2026-08-18 11:54:13 +00:00
Fix CI: use the rust-ci runner instead of overriding the docker-labeled runner's container
Some checks failed
CI / test (push) Has been cancelled
CI / test (pull_request) Has been cancelled
26e9624c23
The docker-labeled runner's image is node:20-bookworm, needed for the
checkout/cache actions (both Node-based). Overriding it with
container: rust:1-bookworm dropped Node from the image entirely, so
checkout failed with "node: executable file not found in $PATH". The
rust-ci label (see sporah's workflow) points at a custom image with
both Rust and Node preinstalled, avoiding the conflict.
schaefera added 1 commit 2026-08-18 11:55:04 +00:00
Fix CI running twice per PR commit
All checks were successful
CI / test (pull_request) Successful in 14m6s
296ab860c7
push and pull_request both fired for commits on a branch with an open
PR. Scope push to master only, matching sporah's workflow, so branch
commits trigger just the pull_request run.
schaefera added 1 commit 2026-08-18 12:10:06 +00:00
Merge branch 'master' into worktree-deep-research-max-turns-report
All checks were successful
CI / test (pull_request) Successful in 1m52s
04aa2f12c7
schaefera merged commit 85d0902e9f into master 2026-08-18 12:12:33 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: schaefera/doubleo7#9
No description provided.