Repository navigation
3 - FEAT: Registry Consistency - #3651
Richard Lundeen (richlundeen) merged 24 commits into
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Move history into feature routes, add stored ID lookup, and retain the current chat draft. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve discard blocking before resetting the composer and use shared encoded continuation and scenario routes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Keep an explicit not-found page and Home recovery link at unknown URLs. Preserve the last valid chat and dataset views without changing legacy aliases or Registry index behavior. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
97ebdf2 to
d2010de
Compare
Prefer the existing retained draft when entering Chat from another view. Keep an already open chat in place so live work is not replaced by an older snapshot. Cover the workflow with the real History table, Chat tabs, composer and reset controls. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
d2010de to
9fc4c51
Compare
Use shared readiness and completion watchdogs instead of a short scheduling deadline while preserving the concurrent settings edit assertions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Behnam (behnam-o)
left a comment
There was a problem hiding this comment.
[GHCP]: Verdict: APPROVE.
PR 3/10 - Registry Consistency. Please address and resolve both numbered inline comments in this review: the MEDIUM implementation finding labelled [GHCP]: and the LOW UX-consistency recommendation labelled [Behnam]:. Approval does not waive either comment.
Scope: the PR-3 increment, 9bd986a01e03a868d2594e815afc96ee0f0f4b36 -> 9fc4c51b4c5a34c832092a7c9d1882376e6264d0. Static review only; tests and browser validation were not run.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Keep result details within the viewport after resizing, preserve editor assertions across modal restoration, and align unit and mock callers with feature-owned new attacks and exact ID forwarding. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Reply to #3651 (review) Both requested findings are fixed in commit 176ffd4: converter filters now reconcile only after a successful complete catalog load, and targets expose their complete identity JSON through the shared expandable row without coupling it to defaults, visibility, or composite expansion. The focused frontend tests, type-check, and scoped lint pass. The inline threads remain open. |
Richard Lundeen (richlundeen)
left a comment
There was a problem hiding this comment.
Automated review completed. No blocking concerns remain. This review records source coverage; it does not authorize merge.
There was a problem hiding this comment.
🟡 Changes recommended
Conversation-ID search misses scenario runs for pruned or branched conversations in upgraded databases because it omits the JSON-array membership check for pruned_conversation_ids.
1 open issue
What changed in this PR
Standardizes inline identity inspection across PyRIT’s registries. This cumulative diff also includes the preceding navigation and history changes.
Changes:
- Introduces shared expandable identity rows and exposes canonical technique identities through the API.
- Adds converter filter/removal styling and retains target configuration controls alongside identity inspection.
- Consolidates feature history navigation, adds exact-ID scan lookup, and updates preferences, tests, and documentation.
| File | Description |
|---|---|
| tests/unit/memory/test_scenario_history.py | Tests reference-ID forwarding. |
| tests/unit/memory/memory_interface/test_interface_scenario_history.py | Tests stored-history ID lookup and pagination. |
| tests/unit/backend/test_technique_service.py | Verifies canonical technique identity responses. |
| tests/unit/backend/test_scenario_run_service.py | Tests ID-bound history cursors. |
| tests/unit/backend/test_scenario_run_routes.py | Tests reference-ID validation and forwarding. |
| tests/unit/backend/test_finding_export.py | Updates exported-link expectations. |
| pyrit/memory/memory_interface.py | Threads reference IDs through history APIs. |
| pyrit/memory/_scenario_history.py | Adds reference-ID history filtering. |
| pyrit/backend/services/scenario_run_service.py | Binds history queries and cursors to IDs. |
| pyrit/backend/services/finding_export.py | Updates exported chat URLs. |
| pyrit/backend/routes/scenarios.py | Accepts history reference IDs. |
| pyrit/backend/README.md | Documents canonical technique identity exposure. |
| pyrit/backend/models/techniques.py | Adds technique identity response field. |
| pyrit/backend/mappers/technique_mappers.py | Maps factory identity into responses. |
| frontend/src/utils/userPreferences.ts | Validates and restores sidebar preferences. |
| frontend/src/utils/routeParams.ts | Updates feature route builders. |
| frontend/src/utils/routeParams.test.ts | Updates route expectations. |
| frontend/src/utils/chatDraft.ts | Recognizes additional retained draft settings. |
| frontend/src/utils/attackConversationRoute.cases.json | Updates shared evidence-link cases. |
| frontend/src/types/index.ts | Extends identity, draft, and preference types. |
| frontend/src/styles/touchTargets.ts | Exports reusable narrow-screen query. |
| frontend/src/services/api.ts | Adds scan-history reference-ID parameter. |
| frontend/src/hooks/useUserPreferences.test.tsx | Tests sidebar preference persistence. |
| frontend/src/hooks/useTour.ts | Updates route examples in comments. |
| frontend/src/hooks/useTour.test.ts | Updates tour anchors and copy expectations. |
| frontend/src/hooks/useMediaQuery.ts | Adds reactive media-query hook. |
| frontend/src/hooks/useMediaQuery.test.ts | Tests media-query subscriptions and cleanup. |
| frontend/src/hooks/useChatDraftHandoff.tsx | Rejects stale draft snapshots. |
| frontend/src/hooks/useChatDraftHandoff.test.tsx | Updates draft-origin routes. |
| frontend/src/components/Tour/tourSteps.ts | Aligns tour with feature navigation. |
| frontend/src/components/Sidebar/Navigation.tsx | Adds expandable, labeled navigation. |
| frontend/src/components/Sidebar/Navigation.styles.ts | Styles expanded navigation and active states. |
| frontend/src/components/ScenarioSuites/suiteRoutes.ts | Moves suite progress under scanner history. |
| frontend/src/components/ScenarioSuites/suiteRoutes.test.ts | Tests updated suite routes. |
| frontend/src/components/ScenarioSuites/ScenarioSuiteExecutionPage.tsx | Updates launch links and heading levels. |
| frontend/src/components/ScenarioSuites/ScenarioSuiteExecutionPage.test.tsx | Updates suite-page navigation expectations. |
| frontend/src/components/ScenarioSuites/LaunchSuiteDialog.test.tsx | Updates post-launch destination expectation. |
| frontend/src/components/Scenarios/ScenarioRunPage.tsx | Updates return destinations and headings. |
| frontend/src/components/Scenarios/ScenarioQueue.tsx | Uses shared run-route builder. |
| frontend/src/components/Scenarios/ScenarioQueue.test.tsx | Tests updated, encoded run links. |
| frontend/src/components/Scenarios/ScenarioFlow.test.tsx | Updates catalog-to-run navigation coverage. |
| frontend/src/components/Scenarios/ScenarioDetail.tsx | Updates launch links and heading hierarchy. |
| frontend/src/components/Scenarios/ScenarioCatalog.tsx | Updates launch destinations and introductory copy. |
| frontend/src/components/Scenarios/ScenarioCatalog.test.tsx | Updates catalog copy and route expectations. |
| frontend/src/components/ScenarioPresets/presetRoutes.ts | Updates preset launch URLs. |
| frontend/src/components/ScenarioPresets/presetRoutes.test.ts | Tests updated preset URLs. |
| frontend/src/components/Registry/TechniqueRegistry.tsx | Replaces detail dialogs with inline identity. |
| frontend/src/components/Registry/TechniqueRegistry.test.tsx | Tests inline technique identity inspection. |
| frontend/src/components/Registry/TechniqueRegistry.styles.ts | Removes obsolete dialog styles. |
| frontend/src/components/Registry/ScorerRegistry.tsx | Uses shared canonical identity rows. |
| frontend/src/components/Registry/ScorerRegistry.test.tsx | Tests canonical scorer identity display. |
| frontend/src/components/Registry/ScorerRegistry.styles.ts | Removes superseded identity styles. |
| frontend/src/components/Registry/ScenarioPresetRegistry.tsx | Updates scanner launch link. |
| frontend/src/components/Registry/ScenarioPresetRegistry.test.tsx | Updates scanner-link expectation. |
| frontend/src/components/Registry/RegistryIdentityRow.tsx | Adds reusable expandable JSON row. |
| frontend/src/components/Registry/RegistryIdentityRow.test.tsx | Tests keyboard interaction and independent expansion. |
| frontend/src/components/Registry/RegistryIdentityRow.styles.ts | Standardizes identity typography and spacing. |
| frontend/src/components/Registry/Registry.styles.ts | Removes obsolete converter styles. |
| frontend/src/components/Registry/ConverterRegistry.styles.ts | Adds filter, column, and removal-control styles. |
| frontend/src/components/Operations/OperationDetailPage.tsx | Adds separate operation-scoped history links. |
| frontend/src/components/Operations/OperationDetailPage.test.tsx | Tests both scoped history destinations. |
| frontend/src/components/Operations/FindingEvidenceList.test.tsx | Updates evidence conversation-link expectation. |
| frontend/src/components/Layout/PageNotFound.tsx | Adds unmatched-route screen. |
| frontend/src/components/Layout/PageNotFound.styles.ts | Styles unmatched-route screen. |
| frontend/src/components/Layout/MainLayout.tsx | Adds responsive sidebar and feature-navigation slot. |
| frontend/src/components/Layout/MainLayout.test.tsx | Tests sidebar persistence without workspace remount. |
| frontend/src/components/Layout/MainLayout.styles.ts | Adds drawer sizing and dynamic viewport layout. |
| frontend/src/components/Layout/FeatureNavigation.tsx | Adds feature tabs and New attack action. |
| frontend/src/components/Layout/FeatureNavigation.styles.ts | Styles feature navigation. |
| frontend/src/components/Home/Home.tsx | Adds explicit history-navigation callback. |
| frontend/src/components/Home/Home.test.tsx | Tests history callback. |
| frontend/src/components/History/scenarioHistoryFilters.ts | Serializes ID search in URLs. |
| frontend/src/components/History/scenarioHistoryFilters.test.ts | Tests ID-filter round trips. |
| frontend/src/components/History/ScenarioHistory.tsx | Adds exact-ID search and cursor reset. |
| frontend/src/components/History/ScenarioHistory.test.tsx | Tests ID validation, clearing, and pagination. |
| frontend/src/components/History/ScenarioHistory.styles.ts | Adjusts ID field and history layout. |
| frontend/src/components/History/HistoryPage.tsx | Removes standalone history wrapper. |
| frontend/src/components/History/HistoryPage.test.tsx | Removes obsolete wrapper tests. |
| frontend/src/components/History/HistoryPage.styles.ts | Removes obsolete history-page styles. |
| frontend/src/components/Configuration/Configuration.test.tsx | Updates scanner navigation fixture. |
| frontend/src/components/Configuration/Configuration.reload-guard.test.tsx | Updates reload-guard navigation fixture. |
| frontend/src/components/Config/TargetTable.tsx | Adds independent target identity expansion. |
| frontend/src/components/Config/TargetTable.test.tsx | Tests identity alongside existing target controls. |
| frontend/src/components/Chat/ObjectiveHeader.tsx | Keeps result popover within viewport. |
| frontend/src/components/Chat/ChatWindow.test.tsx | Updates chat navigation and action coverage. |
| frontend/src/components/Chat/ChatWindow.styles.ts | Reuses shared narrow-screen query. |
| frontend/src/auth/AuthProvider.tsx | Updates safe-path example in comments. |
| frontend/src/auth/AuthProvider.test.tsx | Updates login-return route cases. |
| frontend/src/App.targets.test.tsx | Tests retained drafts versus new-attack defaults. |
| frontend/src/App.labels.test.tsx | Updates navigation and shared-control expectations. |
| frontend/e2e/touch-targets.spec.ts | Updates mobile navigation routes. |
| frontend/e2e/themes.spec.ts | Updates themed route coverage. |
| frontend/e2e/sidebar.spec.ts | Tests sidebar persistence and mobile drawer. |
| frontend/e2e/scenario-hierarchy.spec.ts | Updates saved-chat and scan-return navigation. |
| frontend/e2e/routing.spec.ts | Updates routing and preference scenarios. |
| frontend/e2e/registry.spec.ts | Tests canonical technique identity with backend. |
| frontend/e2e/operations.spec.ts | Updates history navigation and exported links. |
| frontend/e2e/operations-acceptance.spec.ts | Updates operation-scoped feature flows. |
| frontend/e2e/onboarding-tour.spec.ts | Updates tour route expectations. |
| frontend/e2e/numeric-controls.spec.ts | Updates scanner launch destinations. |
| frontend/e2e/history.spec.ts | Updates attack-history entry flow. |
| frontend/e2e/flows.spec.ts | Updates shared navigation helpers. |
| frontend/e2e/errors.spec.ts | Updates navigation selectors. |
| frontend/e2e/converters.spec.ts | Updates converter-flow navigation. |
| frontend/e2e/config.spec.ts | Tests retained drafts and new defaults. |
| frontend/e2e/compatibility.spec.ts | Updates navigation visibility selectors. |
| frontend/e2e/chat.spec.ts | Updates chat and New attack selectors. |
| frontend/e2e/chat-scoring.spec.ts | Updates scoring-chat destination. |
| frontend/e2e/chat-recovery.spec.ts | Updates recovery-flow navigation. |
| frontend/e2e/api.spec.ts | Updates responsiveness assertion selector. |
| frontend/e2e/analytics.spec.ts | Updates result drill-down routes. |
| frontend/e2e/accessibility.spec.ts | Updates navigation and heading assertions. |
| doc/gui/0_gui.md | Documents registries, feature history, and sidebar preferences. |
Review effort: Balanced
Integrate main 0ffa2fc, preserving legacy pruned-conversation history lookup and current chat navigation. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
The pruned-conversation lookup concern from this review is fixed in merge commit |
Preserve both integration branches and remove the obsolete App mock binding exposed by merging. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Uses the same inline identity JSON view for scorers, techniques, and converters. Keeps converter input/output columns and replaces Remove with a small red corner control.
Changes:
Layer 3/10 | Previous: #3650 | Final: #3648 | Blocked by: #3650
Diff is cumulative until preceding layers merge.
Before (original GUI)
Converter parameters appear in the table, with a separate labeled Remove action.
After
all three registry tabs use the same inline identity JSON.
converter identity expands below the row; input/output columns and the red corner x stay visible.
Video
registry-production-interaction.webm