Skip to content

CAP-PFM-QRY-016Find people and organizations while typing

Markdown

CAP-PFM-QRY-016

Find people and organizations while typing

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationObserved

KindCapabilityProduct areaPlatformModuleQuestions, record exploration and data deliveryRevision1

Read atservices-platform ad3f6a65react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Typed indexed values help identify records.Search credentials confine results to the workspace.Ordinary discovery keeps inactive and archived records aside.
Surfaces
consoleapi
Intent sources
services-platform:docs/proposals/quick-search.md#5.2 (Andrew, 2026-10-09)services-platform:docs/quick-search.md#2. The shared index and the document (D-29, Andrew 2026-10-19)

Controls

35 controls apply, from the corpus control catalogue.

TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-005 TC-CRY-001 TC-CRY-002 TC-CRY-003 TC-CRY-004 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-IAM-001 TC-IAM-002 TC-IAM-003 TC-IAM-004 TC-IAM-005 TC-LOG-001 TC-LOG-004 TC-LOG-005 TC-MON-001 TC-PI-001 TC-PI-005 TC-PRV-001 TC-PRV-002 TC-SEC-001 TC-SEC-002 TC-SEC-003 TC-SEC-004 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
platform.quick-search.readapitenant
crm.contacts.read (the record type's own permission, for contacts and organizations alike)servicetenant

Business Rules

12 rules, 11 to be proved before approval. A rule's product intent is derived from its origin: 0 confirmed by a product decision, the rest inheriting this capability's proposed.

IdRuleKindEnforced atProvenance
01must prove
Proposed
Search access requires the lookup permission and each requested type’s read permission, refusing the entire request and provisioning nothing when any type is unauthorized.
origin: services-platform:docs/proposals/quick-search.md#5.2 (Andrew, 2026-10-09)
permissionapi, servicetest
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#refuses the whole request rather than granting what it can
02must prove
Proposed
Organization search currently uses contact-read access rather than organization-read access, granting contact readers and refusing holders of organization read alone.
origin: services-platform:docs/proposals/quick-search.md#5.2 (Andrew, 2026-10-09)
permissionservicetest
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#refuses a caller holding organizations read, which is not what organizations are gated by
03must prove
Proposed
Search credentials are request-specific signed keys confined to one index, workspace, live documents and permitted record types, rate-limited per person for fifteen minutes with renewal at eighty percent of their life.
invariantservicetest
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#holds the tenant, the live state and the one record type asked for, as one filter the browser can only narrow
04must prove
Proposed
Credential filters cannot be widened by the browser, but leave discovery filtering to the browser so including inactive records changes status visibility only.
invariantservicetest
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#bakes in no discoverability at all, which is what leaves the browser able to widen status and nothing else
05
Proposed
Permission changes apply on the next credential, leaving at most fifteen minutes of stale search access without individual-key revocation.
policyservicedocumented
06must prove
Proposed
A record type’s first workspace search creates default indexing configuration and requests initial population, while repeated access requests do not reprovision it.
lifecycleservicetest
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#provisions nothing a second time: searching again spends no version
07must prove
Proposed
Search requests require a nonempty bounded list of distinct registered record types and reject invalid entries with the available types identified.
validationapitest
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#refuses a record type the registry does not declare, naming the ones there are
08must prove
Proposed
An environment without a search provider returns unavailable without secret details, allowing the console to hide its search entry.
policyservicetest
services-platform:modules/quick-search/tests/e2e/quick-search-access.e2e.spec.js#answers 409, so the console hides the search box rather than showing an error
09must prove
Proposed
Index discovery markers exclude archived or disallowed-status records from ordinary search until Include inactive records is enabled, and the option resets whenever search opens.
policyservice, consoletest
10must prove
Proposed
Phone indexing includes stored text and digits, adding the national ten-digit form for North American numbers.
calculationservicetest
services-platform:modules/quick-search/tests/unit/services/indexing/build-documents.spec.ts#searches a phone number as it is stored and by its digits, so a typed run of digits finds it
11must prove
Proposed
Wildcard-only Rhythm staff access is refused by the search route even when the workspace administrator can use it.
permissionservicetest
services-platform:modules/quick-search/tests/e2e/quick-search-route-grants.e2e.spec.js#is refused the access endpoint, where the tenant’s own administrator is served
12must prove
Proposed
The lookup accepts a single non-space character, waits for a brief typing pause, prevents older answers from replacing newer ones, and retains current results while a new search runs; changing a filter searches immediately.
validationconsoletest
react-console:lib/quick-search/__tests__/controller.test.ts#searches once for a word typed in one go

Scenarios

IdGivenWhenThenProvenance
01A phone field contains a formatted number.The indexer builds its searchable values.The document includes the original text and a digits-only alternative.test
services-platform:modules/quick-search/tests/unit/services/indexing/build-documents.spec.ts#searches a phone number as it is stored and by its digits, so a typed run of digits finds it

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.