Simplify the primary search surface
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
## Delivery Tracker
|
||||
|
||||
### FE-ZL2-001 - Remove remaining FE mode dependencies
|
||||
Status: TODO
|
||||
Status: DONE
|
||||
Dependency: none
|
||||
Owners: Developer
|
||||
Task description:
|
||||
@@ -27,12 +27,12 @@ Task description:
|
||||
- Eliminate mode-driven prompt helpers and chip/question filtering from the shared search context contracts and FE composition paths.
|
||||
|
||||
Completion criteria:
|
||||
- [ ] Search and assistant FE code no longer depend on `SearchExperienceModeService`.
|
||||
- [ ] Page-owned search contracts do not use `preferredModes`.
|
||||
- [ ] Search-to-chat prompts derive from query, route, evidence, and last actions only.
|
||||
- [x] Search and assistant FE code no longer depend on `SearchExperienceModeService`.
|
||||
- [x] Page-owned search contracts do not use `preferredModes`.
|
||||
- [x] Search-to-chat prompts derive from query, route, evidence, and last actions only.
|
||||
|
||||
### FE-ZL2-002 - Tighten the primary search surface
|
||||
Status: TODO
|
||||
Status: DONE
|
||||
Dependency: FE-ZL2-001
|
||||
Owners: Developer
|
||||
Task description:
|
||||
@@ -40,12 +40,12 @@ Task description:
|
||||
- Remove residual explanatory clutter that teaches the system instead of helping the user search.
|
||||
|
||||
Completion criteria:
|
||||
- [ ] `Did you mean` renders as an input-adjacent correction cue.
|
||||
- [ ] Empty-state starters stay concise and executable with no ranking-mechanics copy.
|
||||
- [ ] Result labels use plain operator language for in-scope and spillover sections.
|
||||
- [x] `Did you mean` renders as an input-adjacent correction cue.
|
||||
- [x] Empty-state starters stay concise and executable with no ranking-mechanics copy.
|
||||
- [x] Result labels use plain operator language for in-scope and spillover sections.
|
||||
|
||||
### FE-ZL2-003 - Migrate recent history to a success-only contract
|
||||
Status: TODO
|
||||
Status: DONE
|
||||
Dependency: FE-ZL2-002
|
||||
Owners: Developer
|
||||
Task description:
|
||||
@@ -53,12 +53,12 @@ Task description:
|
||||
- Drop old failed or unknown legacy entries on load so history reflects only searches that actually worked.
|
||||
|
||||
Completion criteria:
|
||||
- [ ] Local recent history stores structured successful entries rather than bare strings.
|
||||
- [ ] Legacy entries are ignored unless they can be confirmed from server history as successful.
|
||||
- [ ] No-result searches never reappear after reload.
|
||||
- [x] Local recent history stores structured successful entries rather than bare strings.
|
||||
- [x] Legacy entries are ignored unless they can be confirmed from server history as successful.
|
||||
- [x] No-result searches never reappear after reload.
|
||||
|
||||
### FE-ZL2-004 - Verify the simplified search surface
|
||||
Status: TODO
|
||||
Status: DONE
|
||||
Dependency: FE-ZL2-003
|
||||
Owners: Developer, Test Automation
|
||||
Task description:
|
||||
@@ -66,14 +66,15 @@ Task description:
|
||||
- Tests must prove the removal of FE modes, input-adjacent correction cues, and success-only history behavior.
|
||||
|
||||
Completion criteria:
|
||||
- [ ] Angular tests cover history migration and no-mode FE composition.
|
||||
- [ ] Playwright covers input correction placement, success-only history, and assistant launch from the field.
|
||||
- [ ] No route-jump or visible scope/mode controls remain in covered flows.
|
||||
- [x] Angular tests cover history migration and no-mode FE composition.
|
||||
- [x] Playwright covers input correction placement, success-only history, and assistant launch from the field.
|
||||
- [x] No route-jump or visible scope/mode controls remain in covered flows.
|
||||
|
||||
## Execution Log
|
||||
| Date (UTC) | Update | Owner |
|
||||
| --- | --- | --- |
|
||||
| 2026-03-07 | Sprint created for the FE half of the operator correction pass on global search. | Project Manager |
|
||||
| 2026-03-07 | Removed the FE mode contract (`SearchExperienceModeService`, `preferredModes`), migrated successful history to `stella-successful-searches-v3`, simplified overflow/correction copy, and verified with targeted Angular tests plus deterministic and live Playwright suggestion suites. Commands: `npm test -- --include src/tests/context/ambient-context.service.spec.ts --include src/tests/global_search/global-search.component.spec.ts`; `npx playwright test tests/e2e/unified-search-contextual-suggestions.e2e.spec.ts tests/e2e/unified-search-experience-quality.e2e.spec.ts tests/e2e/unified-search-self-serve-answer-panel.e2e.spec.ts --config playwright.config.ts`; `LIVE_ADVISORYAI_SEARCH_BASE_URL=http://127.0.0.1:10451 npx playwright test tests/e2e/unified-search-contextual-suggestions.live.e2e.spec.ts --config playwright.config.ts`. Results: `32/32` Angular tests passed, `14/14` deterministic Playwright tests passed, and `5/5` live Doctor suggestion tests passed. | Developer / Test Automation |
|
||||
|
||||
## Decisions & Risks
|
||||
- Decision: search surface simplification is not cosmetic; it removes product concepts the operator should never need to learn.
|
||||
|
||||
@@ -21,13 +21,12 @@
|
||||
- `key` / `fallback` for the executable query text
|
||||
- `reasonKey` / `reasonFallback` for the visible "why this suggestion" line
|
||||
- optional `kind` (`page`, `recent`, `strategy`) when page teams need non-default styling/priority
|
||||
- optional `preferredModes` (`find`, `explain`, `act`) when a chip should rank higher for a specific operator intent
|
||||
- Suggestion arrays must stay deterministic and bounded:
|
||||
- at most 3 base chips per page context
|
||||
- short, action-oriented text
|
||||
- no tenant/user secrets in fallback text
|
||||
- keep the query label distinct from rationale text so suggestion clicks always submit the intended query only
|
||||
- fallback copy should still make sense after mode-aware reordering; do not encode mode-specific rationale into the raw query text
|
||||
- fallback copy should stand on its own; do not encode hidden ranking or workflow instructions into the raw query text
|
||||
|
||||
## Source of truth
|
||||
- Contract and registry:
|
||||
@@ -48,12 +47,11 @@
|
||||
- Generated chips must also expose rationale metadata:
|
||||
- `recent` chips explain they came from last-page actions
|
||||
- `strategy` chips explain they came from recent intent on the same page scope
|
||||
- Mode-aware ranking:
|
||||
- the shared `SearchExperienceModeService` owns the active operator mode
|
||||
- chips marked with `preferredModes` are ranked ahead of otherwise-equal chips for that mode
|
||||
- page teams should use this sparingly to express clear intent differences, not to create large per-mode chip forks
|
||||
- Ranking behavior:
|
||||
- chip order is driven by page context, recent scoped actions, deterministic rotation, and backend viability
|
||||
- page teams should not create hidden forks that assume the user chose an internal search mode
|
||||
- Search-surface control rule:
|
||||
- buttons inside the search surface (mode switch, scope toggle, rescue cards, filters) are part of the same command workspace
|
||||
- buttons inside the search surface (assistant launcher, correction suggestions, starter chips, answer follow-ups, card actions) are part of the same command workspace
|
||||
- focus transitions into those controls must not collapse the search panel
|
||||
- teams adding new controls inside the panel must preserve this containment rule in tests
|
||||
|
||||
@@ -61,7 +59,7 @@
|
||||
1. Add/adjust a context in `SEARCH_CONTEXT_DEFINITIONS`.
|
||||
2. Ensure page component exposes the same `searchContextId` (implements `SearchContextComponent`).
|
||||
3. Define or update `presentation` copy for the context rail.
|
||||
4. Add or update `reasonFallback` text and any `preferredModes` metadata for each base chip.
|
||||
4. Add or update `reasonFallback` text for each base chip.
|
||||
5. Add/adjust unit tests in `ambient-context.service.spec.ts`.
|
||||
6. Add/adjust Playwright tests for route chips + action-driven chips.
|
||||
7. If the page adds custom controls inside the search panel, add focus-containment coverage so those controls do not dismiss the panel.
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
- Question entries must provide:
|
||||
- `key` / `fallback` for the executable question text
|
||||
- optional `kind` (`page`, `clarify`, `recent`)
|
||||
- optional `preferredModes` (`find`, `explain`, `act`)
|
||||
- Question arrays must stay deterministic and bounded:
|
||||
- at most 3 base common questions per page
|
||||
- at most 2 base clarifying questions per page
|
||||
@@ -32,15 +31,14 @@
|
||||
|
||||
## Runtime behavior
|
||||
- Empty-state search uses `commonQuestions[]` for page-owned "Common questions".
|
||||
- The active mode (`Find`, `Explain`, `Act`) reorders questions via `preferredModes`.
|
||||
- A recent-action question may be prepended from the latest meaningful page action:
|
||||
- `Find` -> related discovery question
|
||||
- `Explain` -> why-it-matters question
|
||||
- `Act` -> what-to-do-next question
|
||||
- opened/used result -> why-it-matters question
|
||||
- search/chat expansion -> what-to-verify-next question
|
||||
- fallback -> related follow-up question
|
||||
- Result-state answer panels use:
|
||||
- `commonQuestions[]` as follow-up questions when grounded evidence exists
|
||||
- `clarifyingQuestions[]` when no grounded answer exists
|
||||
- "Search next" remains driven by contextual chip logic so pages do not need to define a second parallel action system.
|
||||
- "Related searches" remains driven by contextual chip logic so pages do not need to define a second parallel action system.
|
||||
|
||||
## Source of truth
|
||||
- Page registry and interfaces:
|
||||
|
||||
@@ -110,7 +110,8 @@
|
||||
- Implemented before and during the corrective phases: explicit scope/mode/recovery controls were removed from the main search flow, implicit current-scope weighting and overflow contracts were added, and suggestion viability preflight now suppresses dead chips before render.
|
||||
- Implemented before the corrective phases: the live Doctor suggestion suite now rebuilds the active corpus, fails on empty knowledge projections, iterates every surfaced suggestion, and verifies Ask-AdvisoryAI inherits the live search context.
|
||||
- Implemented from the corrective phases: backend overflow is now narrow enough that clear in-scope winners suppress out-of-scope spillover, blended summaries only appear for genuinely close evidence clusters, and `SearchTelemetryEnabled` cleanly disables analytics/feedback/sink emission without affecting retrieval or history.
|
||||
- Still pending from the corrective phases: removal of hidden FE mode dependencies, a structured success-only history contract that purges failed legacy entries on load, stricter suggestion/corpus readiness gating across more routes, and broader live-page matrices.
|
||||
- Implemented from the operator-correction pass: FE search contracts no longer depend on hidden `Find / Explain / Act` metadata, starter chips wait for backend viability before rendering, `Did you mean` is the first in-panel cue under the search field, and successful recent history now uses a structured `stella-successful-searches-v3` contract that ignores legacy bare-string entries on load.
|
||||
- Still pending from the corrective phases: stricter backend viability states across more domains, broader live-page matrices, and explicit client-side telemetry opt-out.
|
||||
|
||||
## Execution phases - operator correction pass
|
||||
### Phase 1 - Search-first primary surface cleanup
|
||||
|
||||
Reference in New Issue
Block a user