Skip to content

Experiment: Add meetings and wiki pages to global search - #25141

Draft
lindenthal wants to merge 6 commits into
devfrom
codex/search-meetings-wikis
Draft

lindenthal wants to merge 6 commits into
devfrom
codex/search-meetings-wikis

Conversation

@lindenthal

Copy link
Copy Markdown
Member

Summary

  • extend the global search overlay with separate Work packages, Meetings, and Wiki pages tabs
  • add API v3 collection/search support for wiki pages and full-text meeting search across titles, agenda items, and outcomes
  • preserve project permission filtering and link results to their existing HTML views
  • document the new endpoint and search filter in the API specification

Tests

  • 62 request specs covering the full meeting and wiki page API resource specs
  • ESLint for the changed frontend files
  • Angular application type-check with ngc
  • RuboCop for the changed Ruby files
  • YAML parsing for the changed API documentation

@github-actions

github-actions Bot commented Sep 5, 2026 •

Copy link
Copy Markdown

Deploying openproject with ⚡ PullPreview

Field Value
Latest commit 3b791d6
Job deploy
Status ✅ Deploy successful
Preview URL https://pr-25141-search-meetings-wik-ip-2-31-42-134.my.opf.run:443

View logs

@myabc
myabc requested a lite review from Copilot September 5, 2026 13:53
@lindenthal
lindenthal force-pushed the codex/search-meetings-wikis branch 3 times, most recently from 3f18160 to 269bfe4 Compare September 5, 2026 13:58

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The wiki pages query does not register the newly introduced UpdatedAtFilter, and the API docs omit the new updatedAt property despite it being exposed and used by the UI.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Extends OpenProject’s global search (UI + API v3) to include Meetings and Wiki pages alongside Work packages, adding collection endpoints and search/quick-filter support while keeping permission-based visibility constraints.

Changes:

  • Added API v3 collection endpoints and query/filter plumbing for wiki pages and meetings (incl. full-text search).
  • Updated global search overlay to fetch and display Work packages/Meetings/Wiki pages with tabs and quick filters.
  • Expanded API documentation (OpenAPI + tags/paths) and added request/unit specs for the new behaviors.
File summaries
File Description
spec/requests/api/v3/wiki_pages_resource_spec.rb Request specs for wiki pages collection search behavior.
modules/wikis/spec/models/queries/wikis/wiki_pages/filter/updated_at_filter_spec.rb Unit spec for wiki page updated-at query filter.
modules/wikis/lib/open_project/wikis/engine.rb Registers wiki page query filters.
modules/wikis/app/models/queries/wikis/wiki_pages/filter/updated_at_filter.rb Adds updated-at filter for wiki page queries.
modules/wikis/app/models/queries/wikis/wiki_pages/filter/search_filter.rb Adds full-text search filter for wiki pages (title + text).
modules/meeting/spec/requests/api/v3/meetings/meetings_resource_spec.rb Request specs for meetings collection search behavior (title/agenda/outcomes).
modules/meeting/spec/models/queries/meetings/filters/updated_at_filter_spec.rb Unit spec for meeting updated-at query filter.
modules/meeting/app/models/queries/meetings/filters/updated_at_filter.rb Adds updated-at filter for meeting queries.
modules/meeting/app/models/queries/meetings/filters/search_filter.rb Adds full-text search filter for meetings across related tables.
modules/meeting/app/models/queries/meetings.rb Registers new meeting filters (search + updatedAt).
lib/api/v3/wiki_pages/wiki_pages_api.rb Adds GET /api/v3/wiki_pages index endpoint mount.
lib/api/v3/wiki_pages/wiki_page_representer.rb Adds HTML link (showWikiPage) and updatedAt to wiki page representer.
lib/api/v3/wiki_pages/wiki_page_collection_representer.rb Introduces wiki page collection representer for index responses.
lib/api/v3/utilities/path_helper.rb Adds API path helper for wiki page index + HTML show link helper.
lib/api/v3/utilities/endpoints/index.rb Extends generic index endpoint to accept an explicit query class.
frontend/src/app/shared/helpers/api-v3/api-v3-filter-builder.ts Extends supported filter operators used by new quick filters.
frontend/src/app/shared/components/primer/dynamic-icon-map.ts Adds icons used for new result types in global search.
frontend/src/app/shared/components/autocompleter/op-autocompleter/op-autocompleter.component.ts Adds a method to update items programmatically.
frontend/src/app/features/hal/resources/wiki-page-resource.ts Extends wiki page HAL resource fields + adds HTML show path helper.
frontend/src/app/features/hal/resources/meeting-resource.ts Extends meeting HAL resource typing (project + updatedAt).
frontend/src/app/core/global_search/services/global-search.service.ts Adds filter param handling for different result types.
frontend/src/app/core/global_search/openproject-global-search.module.ts Wires dependencies needed for new global search UI (icons).
frontend/src/app/core/global_search/input/global-search-input.component.ts Implements multi-type fetching, tabs, and quick filters.
frontend/src/app/core/global_search/input/global-search-input.component.spec.ts Adds unit tests for new helper functions/behaviors.
frontend/src/app/core/global_search/input/global-search-input.component.sass Styles new tabs/toolbar/quick filters and result cards.
frontend/src/app/core/global_search/input/global-search-input.component.html Adds tabs, quick filters, and unified result rendering.
frontend/src/app/core/apiv3/endpoints/work_packages/api-v3-work-packages-paths.ts Allows passing additional filters into WP typeahead/id fetch.
frontend/src/app/core/apiv3/api-v3.service.ts Adds API v3 endpoint accessor for wiki_pages.
docs/api/apiv3/tags/wiki_pages.yml Updates wiki pages tag documentation (adds showWikiPage link).
docs/api/apiv3/paths/wiki_pages.yml Documents new GET /api/v3/wiki_pages endpoint (filters/search).
docs/api/apiv3/paths/meetings.yml Documents filters support for meetings index.
docs/api/apiv3/openapi-spec.yml Adds wiki pages collection path + schema to OpenAPI spec.
docs/api/apiv3/components/schemas/wiki_page_model.yml Updates wiki page schema links (adds showWikiPage).
docs/api/apiv3/components/schemas/wiki_page_collection_model.yml Adds wiki page collection schema.
config/locales/js-en.yml Adds strings for new global search UI and quick filters.
Review details
  • Files reviewed: 35/35 changed files
  • Comments generated: 3
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread modules/wikis/lib/open_project/wikis/engine.rb
Comment on lines 15 to +19
_links:
type: object
properties:
showWikiPage:
allOf:
Comment on lines 15 to 19
| self | This wiki page | WikiPage | not null | READ |
| attachments | The files attached to this wiki page | Collection | | READ |
| project | The project the wiki page belongs to | Project | not null | READ |
| showWikiPage | Open the wiki page in the web application | Link | not null | READ |

Expose permission-aware API v3 search filters for meetings and wiki pages, add the missing wiki page collection, and show all three resource types in the global search dropdown.
Register the updated-at filter used by global search and cover its combination with search and visibility in the wiki collection API. Document updatedAt and regenerate the new filter component copyright header.
Include the date property decorator required by updatedAt so eager loading succeeds. Cover timestamp serialization in the wiki page API request specs.
Preserve the selected project scope and resource type when submitting searches. Register the quick-filter icons so oversized empty SVGs cannot intercept tab clicks. Update feature helpers to use the new scope selector and resource tabs, and cover search state in unit tests.
@github-actions

Copy link
Copy Markdown

Warning

Flaky specs

  • rspec ./spec/features/work_packages/table/delete_work_packages_with_descendants_spec.rb[1:1:1]
🤖 Ask Copilot to investigate

Copy the prompt below into a new comment on this PR to delegate the investigation to GitHub Copilot. It will look into the flakiness and open a separate pull request with you as reviewer.

@copilot The following spec(s) are flaky in CI (first seen on PR #25141, linked for reference only):

- `rspec ./spec/features/work_packages/table/delete_work_packages_with_descendants_spec.rb[1:1:1]`

Treat this as a standalone task, unrelated to PR #25141. Create a new branch from origin/dev and open a new pull request targeting dev — do not stack it on PR #25141 or reuse that branch.

Follow the playbook in docs/development/testing/handling-flaky-tests/README.md to find the root cause and fix the underlying race — do not skip, delete, or weaken the spec to make it pass; disabling is a last resort per the playbook, and only with a bug ticket. Verify the fix by running the spec(s) repeatedly (e.g. `script/bulk_run_rspec --run-count 10`).

If you cannot reproduce the flake or are not confident in a fix after reasonable investigation, do not fabricate a change or skip the spec to force CI green. Instead, leave the pull request in draft and document what you tried, the suspected cause, and any leads in its description, then assign @lindenthal to take over.

Once the fix is verified, title the PR after the spec(s) it fixes, and use the PR description to explain the root cause, how the change resolves it, and the before/after results. Label the PR `flaky-spec`, assign @lindenthal, and request a review from @lindenthal.
On every commit, set @lindenthal as the sole co-author with a `Co-authored-by:` trailer (use their GitHub no-reply email so it links to their account), so it is traceable who dispatched the fix.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Development

Successfully merging this pull request may close these issues.

2 participants