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
### FE-ZL-005 - Render primary and overflow result sections
Status: TODO
Status: DONE
Dependency: none
Owners: Developer (FE)
Task description:
- Render primary in-scope cards first, then an overflow section only when the backend returns stronger outside-scope evidence.
Completion criteria:
- [ ] Primary and overflow result sections are visually distinct.
- [ ] Overflow is hidden when not returned.
- [ ] No manual scope toggle is reintroduced.
- [x] Primary and overflow result sections are visually distinct.
- [x] Overflow is hidden when not returned.
- [x] No manual scope toggle is reintroduced.
### FE-ZL-006 - Executable suggestion rendering
Status: TODO
Status: DONE
Dependency: FE-ZL-005
Owners: Developer (FE)
Task description:
@@ -37,38 +37,39 @@ Task description:
- Hide or downgrade suggestions when the backend signals missing corpus coverage.
Completion criteria:
- [ ] Dead suggestions are not rendered as clickable chips.
- [ ] Coverage-empty states do not advertise invalid queries.
- [ ] Existing page-suggestion behavior is migrated to the new contract.
- [x] Dead suggestions are not rendered as clickable chips.
- [x] Coverage-empty states do not advertise invalid queries.
- [x] Existing page-suggestion behavior is migrated to the new contract.
### FE-ZL-007 - Consolidated answer and chat deep-dive handoff
Status: TODO
Status: DONE
Dependency: FE-ZL-005
Owners: Developer (FE)
Task description:
- Keep answer summaries concise and keep chat as the detailed deep-dive path from the new launcher and answer surfaces.
Completion criteria:
- [ ] Search answers stay concise.
- [ ] Chat handoff is available from the top bar and the answer surface.
- [ ] Handoff carries current query, page context, and top evidence.
- [x] Search answers stay concise.
- [x] Chat handoff is available from the top bar and the answer surface.
- [x] Handoff carries current query, page context, and top evidence.
### FE-ZL-008 - Focused FE verification
Status: TODO
Status: DONE
Dependency: FE-ZL-006
Owners: Test Automation
Task description:
- Add or update Playwright and unit coverage for overflow results, executable suggestions, and chat handoff.
Completion criteria:
- [ ] Tests assert overflow rendering only when the backend returns it.
- [ ] Tests assert that every rendered suggestion is executable.
- [ ] Tests cover the new chat launcher path.
- [x] Tests assert overflow rendering only when the backend returns it.
- [x] Tests assert that every rendered suggestion is executable.
- [x] Tests cover the new chat launcher path.
## Execution Log
| Date (UTC) | Update | Owner |
| --- | --- | --- |
| 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
- Decision: chat is a deep-dive path, not a parallel start experience.

View File

@@ -20,7 +20,7 @@
## Delivery Tracker
### QA-ZL-001 - Live corpus preflight
Status: TODO
Status: DONE
Dependency: none
Owners: Test Automation
Task description:
@@ -28,22 +28,22 @@ Task description:
- Fail fast when the corpus is empty instead of allowing misleading suggestion passes/failures.
Completion criteria:
- [ ] Live tests verify corpus coverage before exercising knowledge suggestions.
- [ ] Failure output explains whether the issue is corpus emptiness or UX execution.
- [x] Live tests verify corpus coverage before exercising knowledge suggestions.
- [x] Failure output explains whether the issue is corpus emptiness or UX execution.
### QA-ZL-002 - Suggestion execution guarantee
Status: TODO
Status: DONE
Dependency: QA-ZL-001
Owners: Test Automation
Task description:
- Assert that every rendered suggestion chip returns visible results or is suppressed.
Completion criteria:
- [ ] Live and mocked specs cover suggestion execution.
- [ ] Surfaced suggestions have 100% visible-result success in the tested matrix.
- [x] Live and mocked specs cover suggestion execution.
- [x] Surfaced suggestions have 100% visible-result success in the tested matrix.
### QA-ZL-003 - Zero-learning interaction matrix
Status: TODO
Status: DONE
Dependency: QA-ZL-002
Owners: Test Automation
Task description:
@@ -51,14 +51,15 @@ Task description:
- Assert no explicit mode/scope/recovery controls remain in the main search UX.
Completion criteria:
- [ ] Route matrix covers the main pages that own contextual search.
- [ ] Tests assert the absence of deprecated controls.
- [ ] Tests assert `Did you mean` placement, history behavior, and chat launcher behavior.
- [x] Route matrix covers the main pages that own contextual search.
- [x] Tests assert the absence of deprecated controls.
- [x] Tests assert `Did you mean` placement, history behavior, and chat launcher behavior.
## Execution Log
| 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-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
- Decision: live Playwright must distinguish ingestion emptiness from UX failure.

View File

@@ -20,18 +20,18 @@
## Delivery Tracker
### QA-SC-001 - Expand deterministic Playwright coverage
Status: TODO
Status: DONE
Dependency: none
Owners: Test Automation
Task description:
- Extend mock-backed Playwright coverage to the redesigned search/assistant flows so UI regressions are caught quickly.
Completion criteria:
- [ ] 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] Deterministic E2E covers top-bar assistant open, did-you-mean placement, history hygiene, overflow rendering, and no-dead-end suggestions.
- [x] No route-jump to `/security/triage` remains in the search-first flows.
### QA-SC-002 - Expand live ingested search coverage
Status: TODO
Status: DONE
Dependency: QA-SC-001
Owners: Test Automation
Task description:
@@ -39,26 +39,27 @@ Task description:
- Fail fast on empty corpus/setup errors before UI assertions begin.
Completion criteria:
- [ ] Live E2E keeps corpus readiness preflight.
- [ ] Every surfaced live suggestion on covered pages resolves to a non-dead-end state.
- [ ] Execution log records exact live commands and pass counts.
- [x] Live E2E keeps corpus readiness preflight.
- [x] Every surfaced live suggestion on covered pages resolves to a non-dead-end state.
- [x] Execution log records exact live commands and pass counts.
### QA-SC-003 - Verify telemetry-off behavior
Status: TODO
Status: DONE
Dependency: QA-SC-002
Owners: Test Automation
Task description:
- Add test coverage for telemetry-disabled search usage so optional analytics does not regress the operator flow.
Completion criteria:
- [ ] Search remains usable when telemetry endpoints/config are disabled.
- [ ] The assistant handoff still works with telemetry disabled.
- [ ] The sprint log records the telemetry-off evidence path.
- [x] Search remains usable when telemetry endpoints/config are disabled.
- [x] The assistant handoff still works with telemetry disabled.
- [x] The sprint log records the telemetry-off evidence path.
## Execution Log
| 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-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
- 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 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.
- 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
### Phase 1 - Search-first primary surface cleanup

View File

@@ -348,7 +348,7 @@ describe('GlobalSearchComponent', () => {
{
domain: 'vex',
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',
@@ -361,6 +361,7 @@ describe('GlobalSearchComponent', () => {
component.onQueryChange('test');
for (const testCase of cases) {
router.navigateByUrl.calls.reset();
const card = createCard(testCase.domain, testCase.route);
component.onCardAction(card, card.actions[0]);
expect(router.navigateByUrl).toHaveBeenCalledWith(testCase.expected);