Skip to content

feat(search): add RW docs search collator module - #41

Merged
yumike merged 1 commit into
mainfrom
feat/search-collator
Apr 10, 2026
Merged

feat(search): add RW docs search collator module#41
yumike merged 1 commit into
mainfrom
feat/search-collator

Conversation

@yumike

Copy link
Copy Markdown
Contributor

Summary

  • New @rwdocs/backstage-plugin-search-backend-module-rw package that indexes RW documentation pages for Backstage search
  • RwDocsCollatorFactory queries the catalog for entities with rwdocs.org/ref annotations, walks navigation trees, and calls renderSearchDocument() to produce indexable documents
  • Supports both local (projectDir) and S3 storage modes, configurable schedule, and custom location templates

Test Plan

  • 15 unit tests covering: document indexing, section ref scoping, entity filtering, error resilience (failed sites/pages skipped), custom location templates, catalog pagination
  • All 82 tests pass across all 3 workspaces (make test)
  • Typecheck passes (npx tsc --project tsconfig.json)
  • Lint and format clean
  • Integration test with a running Backstage instance and @rwdocs/core v0.1.22

🤖 Generated with Claude Code

@yumike
yumikeforce-pushed the feat/search-collator branch from 4c26874 to bbeb8beCompareApril 10, 2026 04:34
Add @rwdocs/backstage-plugin-search-backend-module-rw package that indexes
RW documentation sites for Backstage search. Discovers entities via the
catalog API, renders pages through @rwdocs/core, and emits search documents
with configurable result type and schedule.
Also extracts shared utilities (config reading, annotation parsing) into
@rwdocs/backstage-plugin-rw-common and wires search plugins into the test
instance.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@yumike
yumikeforce-pushed the feat/search-collator branch from bbeb8be to 6b51c46CompareApril 10, 2026 04:38
@yumike
yumike merged commit 1cb5d4a into mainApr 10, 2026
1 check passed
@yumike
yumike deleted the feat/search-collator branch April 10, 2026 04:44
yumike added a commit that referenced this pull request Aug 9, 2026
…161)
Alerts #121 (high, GHSA-mwp4-54f8-5fhr / CVE-2026-69192 — Address4 decodes
leading-zero octets as decimal while resolvers decode them as octal, allowing
SSRF and trust-boundary bypass) and #41 (medium) were both unreachable:
express-rate-limit 8.3.1 pins ip-address to exactly "10.1.0", and an exact pin
admits no upgrade.
express-rate-limit 8.5.1 relaxed that to "^10.2.0", and @backstage/backend-
defaults already declares "^8.2.2", which accepts 8.6.2. Re-resolving it therefore
lifts ip-address, and a second pass collapses the remaining socks copy
("^10.0.1", left at 10.1.0 by the first step) onto the same version:
express-rate-limit 8.3.1 -> 8.6.2
ip-address 10.1.0 -> 10.4.0 (single copy, was two mid-way)
express-rate-limit uses ip-address to parse client IPs for rate limiting, which
is itself a trust boundary — an octal/decimal parsing discrepancy there is a
rate-limit evasion primitive. It reaches us only through backend-defaults, a
devDependency of rw-backend and a dependency of the private demo backend, so it
is not in any published plugin's graph.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto 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

@yumike