Skip to content

Phase 8: Add transactional content search - #23

Merged
owjs3901 merged 3 commits into
mainfrom
owjs3901/search
Aug 30, 2026
Merged

Phase 8: Add transactional content search#23
owjs3901 merged 3 commits into
mainfrom
owjs3901/search

Conversation

@owjs3901

Copy link
Copy Markdown
Contributor

Summary

  • add the search plugin with a SQLite FTS5 external-content index, startup backfill/rebuild, and stale-content cleanup
  • keep create, update, publish, unpublish, and delete projections in the originating content transaction through one Inline subscriber
  • expose administrator-only, title-weighted, paginated /api/search with bounded operator-safe prefix queries plus collection/status filters
  • ship the authenticated /search UI with loading, error, forbidden, empty, result, and pagination states
  • make the authenticated shell responsive after mobile QA exposed the fixed sidebar overflow
  • document the index model, authorization boundary, query contract, and write-synchronization invariant

Validation

  • cargo clippy --workspace --all-targets --all-features -- -D warnings
  • cargo test --workspace
  • $env:RUSTDOCFLAGS='-D warnings'; cargo doc --workspace --no-deps
  • bunx oxlint (passes; retains one pre-existing non-fatal plugins/auth hook advisory)
  • bun x tsc --noEmit in packages/app, apps/example-app, and every plugin with a tsconfig.json
  • cargo run -p yeollin-cli -- build --skip-backend from apps/example-app (20 routes prerendered, including /search)

Browser QA

  • signed in through the real UI and created two content entries
  • verified partial-prefix search, title-before-body ranking, draft/published badges, empty published filtering, immediate publish projection, and result navigation on desktop
  • repeated search on an emulated iPhone 12 and verified both result cards, the horizontally scrollable navigation, and zero document-level horizontal overflow
  • application console had no application-origin errors; Orca device emulation emitted only its URL-less webdriver injection diagnostic
  • restored the original example-app database byte-for-byte after QA

devfive added 3 commits August 31, 2026 08:33
Use SQLite FTS5 to preserve the single-binary deployment model. Keep the projection synchronized inside content write transactions so index failures cannot create source/index drift.
Switch the fixed sidebar to a scrollable top navigation on narrow screens. This keeps plugin pages readable without horizontal overflow on mobile viewports.
Explain the FTS5 projection, transactional synchronization, administrator boundary, query normalization, and result contract so plugin authors can rely on the same invariants.
@owjs3901
owjs3901 merged commit 69fb148 into main Aug 30, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant