Archive completed search consolidation sprints

This commit is contained in:
master
2026-03-08 08:06:06 +02:00
parent ff9de893d5
commit c9484c33ee
13 changed files with 44 additions and 39 deletions

View File

@@ -17,19 +17,19 @@
## Delivery Tracker ## Delivery Tracker
### FE-ZL-005 - Render primary and overflow result sections ### FE-ZL-005 - Render primary and overflow result sections
Status: TODO Status: DONE
Dependency: none Dependency: none
Owners: Developer (FE) Owners: Developer (FE)
Task description: Task description:
- Render primary in-scope cards first, then an overflow section only when the backend returns stronger outside-scope evidence. - Render primary in-scope cards first, then an overflow section only when the backend returns stronger outside-scope evidence.
Completion criteria: Completion criteria:
- [ ] Primary and overflow result sections are visually distinct. - [x] Primary and overflow result sections are visually distinct.
- [ ] Overflow is hidden when not returned. - [x] Overflow is hidden when not returned.
- [ ] No manual scope toggle is reintroduced. - [x] No manual scope toggle is reintroduced.
### FE-ZL-006 - Executable suggestion rendering ### FE-ZL-006 - Executable suggestion rendering
Status: TODO Status: DONE
Dependency: FE-ZL-005 Dependency: FE-ZL-005
Owners: Developer (FE) Owners: Developer (FE)
Task description: Task description:
@@ -37,38 +37,39 @@ Task description:
- Hide or downgrade suggestions when the backend signals missing corpus coverage. - Hide or downgrade suggestions when the backend signals missing corpus coverage.
Completion criteria: Completion criteria:
- [ ] Dead suggestions are not rendered as clickable chips. - [x] Dead suggestions are not rendered as clickable chips.
- [ ] Coverage-empty states do not advertise invalid queries. - [x] Coverage-empty states do not advertise invalid queries.
- [ ] Existing page-suggestion behavior is migrated to the new contract. - [x] Existing page-suggestion behavior is migrated to the new contract.
### FE-ZL-007 - Consolidated answer and chat deep-dive handoff ### FE-ZL-007 - Consolidated answer and chat deep-dive handoff
Status: TODO Status: DONE
Dependency: FE-ZL-005 Dependency: FE-ZL-005
Owners: Developer (FE) Owners: Developer (FE)
Task description: Task description:
- Keep answer summaries concise and keep chat as the detailed deep-dive path from the new launcher and answer surfaces. - Keep answer summaries concise and keep chat as the detailed deep-dive path from the new launcher and answer surfaces.
Completion criteria: Completion criteria:
- [ ] Search answers stay concise. - [x] Search answers stay concise.
- [ ] Chat handoff is available from the top bar and the answer surface. - [x] Chat handoff is available from the top bar and the answer surface.
- [ ] Handoff carries current query, page context, and top evidence. - [x] Handoff carries current query, page context, and top evidence.
### FE-ZL-008 - Focused FE verification ### FE-ZL-008 - Focused FE verification
Status: TODO Status: DONE
Dependency: FE-ZL-006 Dependency: FE-ZL-006
Owners: Test Automation Owners: Test Automation
Task description: Task description:
- Add or update Playwright and unit coverage for overflow results, executable suggestions, and chat handoff. - Add or update Playwright and unit coverage for overflow results, executable suggestions, and chat handoff.
Completion criteria: Completion criteria:
- [ ] Tests assert overflow rendering only when the backend returns it. - [x] Tests assert overflow rendering only when the backend returns it.
- [ ] Tests assert that every rendered suggestion is executable. - [x] Tests assert that every rendered suggestion is executable.
- [ ] Tests cover the new chat launcher path. - [x] Tests cover the new chat launcher path.
## Execution Log ## Execution Log
| Date (UTC) | Update | Owner | | Date (UTC) | Update | Owner |
| --- | --- | --- | | --- | --- | --- |
| 2026-03-07 | Sprint created from the zero-learning search strategy. | Project Manager | | 2026-03-07 | Sprint created from the zero-learning search strategy. | Project Manager |
| 2026-03-08 | Verified the shipped FE consolidation against fresh evidence: `npm test -- --include src/tests/global_search/global-search.component.spec.ts --include src/tests/layout/search-assistant-host.component.spec.ts --include src/tests/advisory_ai_chat/chat.component.spec.ts --include src/tests/advisory_ai_chat/chat-message.component.spec.ts` passed `38/38`; `npx playwright test tests/e2e/unified-search-contextual-suggestions.e2e.spec.ts tests/e2e/unified-search-self-serve-answer-panel.e2e.spec.ts tests/e2e/unified-search-experience-quality.e2e.spec.ts --config playwright.config.ts` remained covered inside the final consolidated pack. Primary/overflow rendering, executable starter suppression, and shell-drawer handoff are complete. | Developer / Test Automation |
## Decisions & Risks ## Decisions & Risks
- Decision: chat is a deep-dive path, not a parallel start experience. - Decision: chat is a deep-dive path, not a parallel start experience.

View File

@@ -20,7 +20,7 @@
## Delivery Tracker ## Delivery Tracker
### QA-ZL-001 - Live corpus preflight ### QA-ZL-001 - Live corpus preflight
Status: TODO Status: DONE
Dependency: none Dependency: none
Owners: Test Automation Owners: Test Automation
Task description: Task description:
@@ -28,22 +28,22 @@ Task description:
- Fail fast when the corpus is empty instead of allowing misleading suggestion passes/failures. - Fail fast when the corpus is empty instead of allowing misleading suggestion passes/failures.
Completion criteria: Completion criteria:
- [ ] Live tests verify corpus coverage before exercising knowledge suggestions. - [x] Live tests verify corpus coverage before exercising knowledge suggestions.
- [ ] Failure output explains whether the issue is corpus emptiness or UX execution. - [x] Failure output explains whether the issue is corpus emptiness or UX execution.
### QA-ZL-002 - Suggestion execution guarantee ### QA-ZL-002 - Suggestion execution guarantee
Status: TODO Status: DONE
Dependency: QA-ZL-001 Dependency: QA-ZL-001
Owners: Test Automation Owners: Test Automation
Task description: Task description:
- Assert that every rendered suggestion chip returns visible results or is suppressed. - Assert that every rendered suggestion chip returns visible results or is suppressed.
Completion criteria: Completion criteria:
- [ ] Live and mocked specs cover suggestion execution. - [x] Live and mocked specs cover suggestion execution.
- [ ] Surfaced suggestions have 100% visible-result success in the tested matrix. - [x] Surfaced suggestions have 100% visible-result success in the tested matrix.
### QA-ZL-003 - Zero-learning interaction matrix ### QA-ZL-003 - Zero-learning interaction matrix
Status: TODO Status: DONE
Dependency: QA-ZL-002 Dependency: QA-ZL-002
Owners: Test Automation Owners: Test Automation
Task description: Task description:
@@ -51,14 +51,15 @@ Task description:
- Assert no explicit mode/scope/recovery controls remain in the main search UX. - Assert no explicit mode/scope/recovery controls remain in the main search UX.
Completion criteria: Completion criteria:
- [ ] Route matrix covers the main pages that own contextual search. - [x] Route matrix covers the main pages that own contextual search.
- [ ] Tests assert the absence of deprecated controls. - [x] Tests assert the absence of deprecated controls.
- [ ] Tests assert `Did you mean` placement, history behavior, and chat launcher behavior. - [x] Tests assert `Did you mean` placement, history behavior, and chat launcher behavior.
## Execution Log ## Execution Log
| Date (UTC) | Update | Owner | | Date (UTC) | Update | Owner |
| --- | --- | --- | | --- | --- | --- |
| 2026-03-07 | Sprint created from the reproduced live suggestion failure and the zero-learning search strategy. | Project Manager | | 2026-03-07 | Sprint created from the reproduced live suggestion failure and the zero-learning search strategy. | Project Manager |
| 2026-03-08 | Re-verified the full live/mocked search matrix after rebuilding the live corpus. Commands: `dotnet run --project \"src/Cli/StellaOps.Cli/StellaOps.Cli.csproj\" -- advisoryai sources prepare --json`; `POST /v1/advisory-ai/index/rebuild`; `POST /v1/search/index/rebuild`; `npx playwright test tests/e2e/unified-search-contextual-suggestions.e2e.spec.ts tests/e2e/unified-search-contextual-suggestions.live.e2e.spec.ts tests/e2e/unified-search-self-serve-answer-panel.e2e.spec.ts tests/e2e/unified-search-experience-quality.e2e.spec.ts --config playwright.config.ts`. Result: `24 passed`, `3 skipped` where the explicit corpus-unready branches were skipped because triage, policy, and VEX are now ready and execute suggestions successfully. The final Playwright lane used a clean exported Web worktree because unrelated dirty quota files blocked `ng serve` in the main worktree. | Test Automation |
## Decisions & Risks ## Decisions & Risks
- Decision: live Playwright must distinguish ingestion emptiness from UX failure. - Decision: live Playwright must distinguish ingestion emptiness from UX failure.

View File

@@ -20,18 +20,18 @@
## Delivery Tracker ## Delivery Tracker
### QA-SC-001 - Expand deterministic Playwright coverage ### QA-SC-001 - Expand deterministic Playwright coverage
Status: TODO Status: DONE
Dependency: none Dependency: none
Owners: Test Automation Owners: Test Automation
Task description: Task description:
- Extend mock-backed Playwright coverage to the redesigned search/assistant flows so UI regressions are caught quickly. - Extend mock-backed Playwright coverage to the redesigned search/assistant flows so UI regressions are caught quickly.
Completion criteria: Completion criteria:
- [ ] Deterministic E2E covers top-bar assistant open, did-you-mean placement, history hygiene, overflow rendering, and no-dead-end suggestions. - [x] Deterministic E2E covers top-bar assistant open, did-you-mean placement, history hygiene, overflow rendering, and no-dead-end suggestions.
- [ ] No route-jump to `/security/triage` remains in the search-first flows. - [x] No route-jump to `/security/triage` remains in the search-first flows.
### QA-SC-002 - Expand live ingested search coverage ### QA-SC-002 - Expand live ingested search coverage
Status: TODO Status: DONE
Dependency: QA-SC-001 Dependency: QA-SC-001
Owners: Test Automation Owners: Test Automation
Task description: Task description:
@@ -39,26 +39,27 @@ Task description:
- Fail fast on empty corpus/setup errors before UI assertions begin. - Fail fast on empty corpus/setup errors before UI assertions begin.
Completion criteria: Completion criteria:
- [ ] Live E2E keeps corpus readiness preflight. - [x] Live E2E keeps corpus readiness preflight.
- [ ] Every surfaced live suggestion on covered pages resolves to a non-dead-end state. - [x] Every surfaced live suggestion on covered pages resolves to a non-dead-end state.
- [ ] Execution log records exact live commands and pass counts. - [x] Execution log records exact live commands and pass counts.
### QA-SC-003 - Verify telemetry-off behavior ### QA-SC-003 - Verify telemetry-off behavior
Status: TODO Status: DONE
Dependency: QA-SC-002 Dependency: QA-SC-002
Owners: Test Automation Owners: Test Automation
Task description: Task description:
- Add test coverage for telemetry-disabled search usage so optional analytics does not regress the operator flow. - Add test coverage for telemetry-disabled search usage so optional analytics does not regress the operator flow.
Completion criteria: Completion criteria:
- [ ] Search remains usable when telemetry endpoints/config are disabled. - [x] Search remains usable when telemetry endpoints/config are disabled.
- [ ] The assistant handoff still works with telemetry disabled. - [x] The assistant handoff still works with telemetry disabled.
- [ ] The sprint log records the telemetry-off evidence path. - [x] The sprint log records the telemetry-off evidence path.
## Execution Log ## Execution Log
| Date (UTC) | Update | Owner | | Date (UTC) | Update | Owner |
| --- | --- | --- | | --- | --- | --- |
| 2026-03-07 | Sprint created to prove the consolidated search experience from all relevant angles after the redesign phases land. | Project Manager | | 2026-03-07 | Sprint created to prove the consolidated search experience from all relevant angles after the redesign phases land. | Project Manager |
| 2026-03-08 | Completed the consolidated route matrix. Deterministic coverage now asserts top-bar assistant open, did-you-mean placement, history hygiene, overflow framing, and no-dead-end suggestions. Live coverage rebuilds and preflights the corpus, then executes surfaced suggestions on Doctor, Security triage, Policy governance, and Advisories/VEX when the route is ready. Telemetry-off behavior remains covered in `unified-search-experience-quality.e2e.spec.ts`. Evidence: `24 passed`, `3 skipped` in the consolidated Playwright pack after live rebuilds; the skips are the explicit suppression branches skipped because those routes are now ready. | Test Automation |
## Decisions & Risks ## Decisions & Risks
- Decision: live E2E remains mandatory because mocked suggestions cannot prove corpus viability. - Decision: live E2E remains mandatory because mocked suggestions cannot prove corpus viability.

View File

@@ -123,7 +123,8 @@
- 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. - 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.
- 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. - 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.
- Implemented from the final correction pass: the primary surface now uses secondary "deeper help/details" assistant language instead of presenting a separate AdvisoryAI product, overflow results read as supporting context, and starter chips that execute to no useful result are suppressed from the current page until context changes. - Implemented from the final correction pass: the primary surface now uses secondary "deeper help/details" assistant language instead of presenting a separate AdvisoryAI product, overflow results read as supporting context, and starter chips that execute to no useful result are suppressed from the current page until context changes.
- Still pending from the corrective phases: stricter backend viability states across more domains, broader live-page matrices, and explicit client-side telemetry opt-out. - Implemented from the final live verification pass: the supported live route matrix now covers Doctor, Security triage, Policy governance, and Advisories/VEX with corpus rebuild preflight plus end-to-end suggestion execution on ready routes.
- Still pending from the corrective phases: an explicit client-side telemetry opt-out control if product needs a visible switch. Current behavior is already failure-tolerant when analytics endpoints or sinks are unavailable.
## Execution phases - operator correction pass ## Execution phases - operator correction pass
### Phase 1 - Search-first primary surface cleanup ### Phase 1 - Search-first primary surface cleanup

View File

@@ -348,7 +348,7 @@ describe('GlobalSearchComponent', () => {
{ {
domain: 'vex', domain: 'vex',
route: '/vex-hub/CVE-2024-21626', route: '/vex-hub/CVE-2024-21626',
expected: '/security/advisories-vex?q=CVE-2024-21626', expected: '/ops/policy/vex/search?cveId=CVE-2024-21626',
}, },
{ {
domain: 'platform', domain: 'platform',
@@ -361,6 +361,7 @@ describe('GlobalSearchComponent', () => {
component.onQueryChange('test'); component.onQueryChange('test');
for (const testCase of cases) { for (const testCase of cases) {
router.navigateByUrl.calls.reset();
const card = createCard(testCase.domain, testCase.route); const card = createCard(testCase.domain, testCase.route);
component.onCardAction(card, card.actions[0]); component.onCardAction(card, card.actions[0]);
expect(router.navigateByUrl).toHaveBeenCalledWith(testCase.expected); expect(router.navigateByUrl).toHaveBeenCalledWith(testCase.expected);