Initial commit -- did OMO do a good job?
Check / check (push) Failing after 1m27s
Check / guardrails (push) Failing after 39s
Check / bundle (push) Successful in 1m4s

This commit is contained in:
2026-09-01 18:29:46 -04:00
commit 20a6c26f7c
179 changed files with 21704 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
# Task 8 — ItemRepo with deduping insert + FTS5 BM25 search
## Verification
### cargo test -p news-store
```text
$ cargo test -p news-store
Compiling news-store v0.1.0 (/home/connor/docs/projects/news/crates/news-store)
Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 06s
Running unittests src/lib.rs (target/debug/deps/news_store-c92024802100563b)
running 10 tests
test items::tests::insert_if_new_dedupes_on_source_and_link ... ok
test sources::tests::seed_default_sources_is_idempotent ... ok
test sources::tests::list_enabled_returns_the_three_seeded_sources ... ok
test items::tests::search_fts_no_match_returns_empty_vec ... ok
test tests::init_db_runs_migrations ... ok
test tests::raw_items_insert_is_reflected_in_fts_index ... ok
test tests::migrating_an_already_migrated_pool_is_a_no_op ... ok
test tests::raw_items_delete_removes_row_from_fts_index ... ok
test sources::tests::set_enabled_false_excludes_source_from_list_enabled ... ok
test items::tests::search_fts_returns_matching_items_ranked ... ok
test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
Doc-tests news_store
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
```
### cargo fmt --all --check
```text
$ cargo fmt --all --check
(no output)
```
### cargo clippy --workspace --all-targets -- -D warnings
```text
$ cargo clippy --workspace --all-targets -- -D warnings
Checking news-store v0.1.0 (/home/connor/docs/projects/news/crates/news-store)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 14.36s
```
## Files changed
- `crates/news-store/Cargo.toml` — added `chrono = { workspace = true }` for RFC3339 timestamp handling.
- `crates/news-store/src/lib.rs` — added `pub mod items` and re-exported `ItemRepo` + `InsertOutcome`.
- `crates/news-store/src/items.rs` — new file containing `ItemRepo`, `InsertOutcome`, `insert_if_new`, `search_fts`, and tests.
## Test coverage
- `items::insert_if_new_dedupes_on_source_and_link`: inserts the same `(source_id, link)` twice; first returns `Inserted`, second returns `AlreadyExists`; `raw_items` holds exactly 1 row.
- `items::tests::search_fts_returns_matching_items_ranked`: 3 distinct items, search for "election" returns the matching title.
- `items::tests::search_fts_no_match_returns_empty_vec`: search for "zzz_no_match" returns an empty `Vec` (not an error).