From ffd91a46b2b46c0488199da3d9d9ea9c9c8a8935 Mon Sep 17 00:00:00 2001 From: Brad Groux <3053586+BradGroux@users.noreply.github.com> Date: Thu, 3 Sep 2026 21:02:05 -0500 Subject: [PATCH] docs: record packaged Settings popout acceptance --- docs/audits/SETTINGS-POPOUTS-1436.md | 12 ++- docs/design/OVERLAY-CONTRACT.md | 126 +++++++++++++-------------- 2 files changed, 74 insertions(+), 64 deletions(-) diff --git a/docs/audits/SETTINGS-POPOUTS-1436.md b/docs/audits/SETTINGS-POPOUTS-1436.md index f6ca5f01..d87fc40d 100644 --- a/docs/audits/SETTINGS-POPOUTS-1436.md +++ b/docs/audits/SETTINGS-POPOUTS-1436.md @@ -12,4 +12,14 @@ Initial browser attempts corrected test setup errors: the shared variant/inert a Read-only host-preview POSTs have an explicit synthetic response fixture. All other non-read API requests remain blocked and the test observes zero mutations; no reset, deletion, save, cleanup, or launch is performed. -Rebuilt packaged macOS verification, installed-app replacement, final documentation images/GIFs, and release remain unfinished. +## Packaged macOS acceptance + +The unsigned arm64 Electron candidate at integration commit `4f747e6f14c3e90549644dabf46aff29b658620f` was rebuilt with `pnpm desktop:package:mac:dir`. Its packaged `app.asar` SHA-256 is `57e855b0ab4d3a107ada9d9fe5dcdb6aea31e69c6cb73453cd27e195cf4b9aaf`. The application reports version 6.1.6 and `app.isPackaged` was asserted; this is not a signed release. + +All eleven child openings passed in both themes at 1700×900 with 16px text and the native minimum 1180×760 with 20px text. Checks prove root and child containment, 1rem body inset, parent inertness, fully visible initial focus, footer bounds, Tab containment, Escape, exact opener restoration, and no document overflow. The five Tasks fields identified in the alignment report also share their left edge, width, and height within 2px, including unit-bearing fields and Default Priority. All mutations were blocked after isolated-profile onboarding, with zero unexpected write requests. + +Screenshot review of the first candidate exposed an offscreen cleanup confirmation focus target despite a passing focus assertion. Initial focus was moved to the fixed-footer Close action. Both browser cases and four Maintenance unit tests passed again; both review axes found no outstanding findings. The rebuilt final native run passed the stricter fully-visible-focus assertion and its cleanup capture shows the focus ring on Close. + +Diagnostic screenshots and the local native harness are under `/private/tmp/vk-native-ui-1389.8cJNtK/`; run with `NATIVE_SCOPE=settings-popouts pnpm --filter @veritas-kanban/server exec tsx /tmp/vk-native-ui-1389.8cJNtK/verify.mjs` from the integration worktree. The owned application was closed after verification. These captures are not final maintained documentation media. + +Source CI, installed-app replacement, final documentation images/GIFs, the remaining whole-app audit, and release remain separate unfinished gates. diff --git a/docs/design/OVERLAY-CONTRACT.md b/docs/design/OVERLAY-CONTRACT.md index efa76627..bca15f18 100644 --- a/docs/design/OVERLAY-CONTRACT.md +++ b/docs/design/OVERLAY-CONTRACT.md @@ -23,69 +23,69 @@ The shared provider registers only open overlays, removes unmounted entries, and Line numbers identify the audited opening and may move during migration. A shared primitive alone does not prove the feature's inner scroll, spacing, or keyboard behavior. Each row remains subject to rendered acceptance. -| Consumer | Opening line | Intended variant | Status | -| ------------------------------------------------------------------------------------------------- | -----------: | ---------------- | ----------------------------------------------------- | -| [TemplateEditorDialog.tsx](../../web/src/components/templates/TemplateEditorDialog.tsx) | 188 | authoring | Shared primitive adopted; runtime acceptance pending | -| [TemplatesPage.tsx](../../web/src/components/templates/TemplatesPage.tsx) | 274 | confirm | Shared primitive adopted; runtime acceptance pending | -| [TemplatesPage.tsx](../../web/src/components/templates/TemplatesPage.tsx) | 298 | form | Shared primitive adopted; runtime acceptance pending | -| [SearchDialog.tsx](../../web/src/components/search/SearchDialog.tsx) | 282 | authoring | Migration pending; migrate with nested consumers | -| [AdmissionQueuePanel.tsx](../../web/src/components/digest/AdmissionQueuePanel.tsx) | 315 | form | Migration pending | -| [WorkflowStartDialog.tsx](../../web/src/components/workflows/WorkflowStartDialog.tsx) | 71 | form | Migration pending; migrate with nested consumers | -| [CreateTaskDialog.tsx](../../web/src/components/task/CreateTaskDialog.tsx) | 267 | form | Migration pending; migrate with nested consumers | -| [PolicyManager.tsx](../../web/src/components/policies/PolicyManager.tsx) | 552 | authoring | Shared modal; runtime acceptance pending in #1423 | -| [PolicyManager.tsx](../../web/src/components/policies/PolicyManager.tsx) | 906 | form | Shared modal; runtime acceptance pending in #1423 | -| [TimeTrackingSection.tsx](../../web/src/components/task/TimeTrackingSection.tsx) | 243 | form | Migration pending | -| [BulkActionsBar.tsx](../../web/src/components/board/BulkActionsBar.tsx) | 366 | confirm | Migration pending | -| [ArchiveSuggestionBanner.tsx](../../web/src/components/board/ArchiveSuggestionBanner.tsx) | 92 | confirm | Migration pending | -| [ConflictResolver.tsx](../../web/src/components/task/ConflictResolver.tsx) | 124 | utility | Migration pending | -| [ConflictResolver.tsx](../../web/src/components/task/ConflictResolver.tsx) | 383 | confirm | Migration pending | -| [FilterBar.tsx](../../web/src/components/board/FilterBar.tsx) | 349 | form | Migration pending | -| [FilterBar.tsx](../../web/src/components/board/FilterBar.tsx) | 374 | confirm | Migration pending | -| [ChatPanel.tsx](../../web/src/components/chat/ChatPanel.tsx) | 279 | chat | Migration pending; migrate with nested consumers | -| [ChatPanel.tsx](../../web/src/components/chat/ChatPanel.tsx) | 297 | confirm | Migration pending; migrate with nested consumers | -| [TaskWorkView.tsx](../../web/src/components/task/TaskWorkView.tsx) | 1055 | confirm | Migration pending | -| [ObservationsSection.tsx](../../web/src/components/task/ObservationsSection.tsx) | 118 | confirm | Migration pending | -| [SquadChatPanel.tsx](../../web/src/components/chat/SquadChatPanel.tsx) | 522 | chat | Migration pending; migrate with nested consumers | -| [ReviewPanel.tsx](../../web/src/components/task/ReviewPanel.tsx) | 212 | form | Migration pending | -| [ArtifactPreviewModal.tsx](../../web/src/components/task/ArtifactPreviewModal.tsx) | 112 | authoring | Migration pending | -| [CommandPalette.tsx](../../web/src/components/layout/CommandPalette.tsx) | 293 | form | Migration pending; migrate with nested consumers | -| [SettingsDialog.tsx](../../web/src/components/settings/SettingsDialog.tsx) | 529 | authoring | Shared geometry; browser passed; native pending #1436 | -| [SettingsDialog.tsx](../../web/src/components/settings/SettingsDialog.tsx) | 739 | confirm | Shared geometry; browser passed; native pending #1436 | -| [PRDialog.tsx](../../web/src/components/task/git/PRDialog.tsx) | 36 | authoring | Migration pending | -| [ActivitySidebar.tsx](../../web/src/components/layout/ActivitySidebar.tsx) | 244 | utility | Migration pending | -| [SortableListItem.tsx](../../web/src/components/settings/SortableListItem.tsx) | 171 | confirm | Shared geometry; browser passed; native pending #1436 | -| [WorktreeStatus.tsx](../../web/src/components/task/git/WorktreeStatus.tsx) | 374 | form | Migration pending | -| [WorktreeStatus.tsx](../../web/src/components/task/git/WorktreeStatus.tsx) | 404 | confirm | Migration pending | -| [TaskDetailsTab.tsx](../../web/src/components/task/detail/TaskDetailsTab.tsx) | 254 | confirm | Migration pending | -| [KeyboardShortcutsDialog.tsx](../../web/src/components/layout/KeyboardShortcutsDialog.tsx) | 49 | form | Migration pending | -| [ArchiveSidebar.tsx](../../web/src/components/layout/ArchiveSidebar.tsx) | 240 | utility | Migration pending | -| [MobileShell.tsx](../../web/src/components/layout/MobileShell.tsx) | 129 | utility | Migration pending | -| [ApplyTemplateDialog.tsx](../../web/src/components/task/ApplyTemplateDialog.tsx) | 305 | authoring | Migration pending | -| [PreviewPanel.tsx](../../web/src/components/task/PreviewPanel.tsx) | 71 | utility | Migration pending; migrate with nested consumers | -| [AttachmentsSection.tsx](../../web/src/components/task/AttachmentsSection.tsx) | 172 | confirm | Migration pending | -| [SectionHeader.tsx](../../web/src/components/settings/shared/SectionHeader.tsx) | 66 | confirm | Shared geometry; browser passed; native pending #1436 | -| [DesktopOnboarding.tsx](../../web/src/components/auth/DesktopOnboarding.tsx) | 711 | authoring | Migration pending | -| [AgentRunTimelinePanel.tsx](../../web/src/components/task/AgentRunTimelinePanel.tsx) | 1373 | form | Migration pending | -| [DeliverablesSection.tsx](../../web/src/components/task/DeliverablesSection.tsx) | 272 | confirm | Migration pending | -| [DrillDownPanel.tsx](../../web/src/components/dashboard/DrillDownPanel.tsx) | 14 | utility | Migration pending | -| [WorkflowSection.tsx](../../web/src/components/task/WorkflowSection.tsx) | 266 | authoring | Migration pending | -| [CommentsSection.tsx](../../web/src/components/task/CommentsSection.tsx) | 190 | confirm | Migration pending | -| [TaskDetailPanel.tsx](../../web/src/components/task/TaskDetailPanel.tsx) | 271 | task | Migration pending | -| [sheet.tsx](../../web/src/components/ui/sheet.tsx) | 147 | utility | Migration pending | -| [alert-dialog.tsx](../../web/src/components/ui/alert-dialog.tsx) | 136 | form | Migration pending | -| [WorkProductsSection.tsx](../../web/src/components/task/WorkProductsSection.tsx) | 504 | authoring | Migration pending | -| [WorkProductsSection.tsx](../../web/src/components/task/WorkProductsSection.tsx) | 551 | authoring | Migration pending | -| [AgentPanel.tsx](../../web/src/components/task/AgentPanel.tsx) | 630 | confirm | Migration pending | -| [AgentPanel.tsx](../../web/src/components/task/AgentPanel.tsx) | 661 | form | Migration pending | -| [dialog.tsx](../../web/src/components/ui/dialog.tsx) | 157 | form | Migration pending | -| [ExportDialog.tsx](../../web/src/components/dashboard/ExportDialog.tsx) | 106 | form | Migration pending | -| [SkillRiskDashboardPanel.tsx](../../web/src/components/settings/tabs/SkillRiskDashboardPanel.tsx) | 339 | form | Shared geometry; browser passed; native pending #1436 | -| [ToolPoliciesTab.tsx](../../web/src/components/settings/tabs/ToolPoliciesTab.tsx) | 269 | authoring | Shared geometry; browser passed; native pending #1436 | -| [GeneralTab.tsx](../../web/src/components/settings/tabs/GeneralTab.tsx) | 404 | confirm | Shared geometry; browser passed; native pending #1436 | -| [TemplateComponents.tsx](../../web/src/components/settings/tabs/TemplateComponents.tsx) | 252 | confirm | Shared geometry; browser passed; native pending #1436 | -| [SecurityTab.tsx](../../web/src/components/settings/tabs/SecurityTab.tsx) | 174 | confirm | Shared geometry; browser passed; native pending #1436 | -| [AgentsTab.tsx](../../web/src/components/settings/tabs/AgentsTab.tsx) | 2331 | confirm | Shared geometry; browser passed; native pending #1436 | -| [MaintenanceTab.tsx](../../web/src/components/settings/tabs/MaintenanceTab.tsx) | 590 | form | Shared geometry; browser passed; native pending #1436 | +| Consumer | Opening line | Intended variant | Status | +| ------------------------------------------------------------------------------------------------- | -----------: | ---------------- | ---------------------------------------------------- | +| [TemplateEditorDialog.tsx](../../web/src/components/templates/TemplateEditorDialog.tsx) | 188 | authoring | Shared primitive adopted; runtime acceptance pending | +| [TemplatesPage.tsx](../../web/src/components/templates/TemplatesPage.tsx) | 274 | confirm | Shared primitive adopted; runtime acceptance pending | +| [TemplatesPage.tsx](../../web/src/components/templates/TemplatesPage.tsx) | 298 | form | Shared primitive adopted; runtime acceptance pending | +| [SearchDialog.tsx](../../web/src/components/search/SearchDialog.tsx) | 282 | authoring | Migration pending; migrate with nested consumers | +| [AdmissionQueuePanel.tsx](../../web/src/components/digest/AdmissionQueuePanel.tsx) | 315 | form | Migration pending | +| [WorkflowStartDialog.tsx](../../web/src/components/workflows/WorkflowStartDialog.tsx) | 71 | form | Migration pending; migrate with nested consumers | +| [CreateTaskDialog.tsx](../../web/src/components/task/CreateTaskDialog.tsx) | 267 | form | Migration pending; migrate with nested consumers | +| [PolicyManager.tsx](../../web/src/components/policies/PolicyManager.tsx) | 552 | authoring | Shared modal; runtime acceptance pending in #1423 | +| [PolicyManager.tsx](../../web/src/components/policies/PolicyManager.tsx) | 906 | form | Shared modal; runtime acceptance pending in #1423 | +| [TimeTrackingSection.tsx](../../web/src/components/task/TimeTrackingSection.tsx) | 243 | form | Migration pending | +| [BulkActionsBar.tsx](../../web/src/components/board/BulkActionsBar.tsx) | 366 | confirm | Migration pending | +| [ArchiveSuggestionBanner.tsx](../../web/src/components/board/ArchiveSuggestionBanner.tsx) | 92 | confirm | Migration pending | +| [ConflictResolver.tsx](../../web/src/components/task/ConflictResolver.tsx) | 124 | utility | Migration pending | +| [ConflictResolver.tsx](../../web/src/components/task/ConflictResolver.tsx) | 383 | confirm | Migration pending | +| [FilterBar.tsx](../../web/src/components/board/FilterBar.tsx) | 349 | form | Migration pending | +| [FilterBar.tsx](../../web/src/components/board/FilterBar.tsx) | 374 | confirm | Migration pending | +| [ChatPanel.tsx](../../web/src/components/chat/ChatPanel.tsx) | 279 | chat | Migration pending; migrate with nested consumers | +| [ChatPanel.tsx](../../web/src/components/chat/ChatPanel.tsx) | 297 | confirm | Migration pending; migrate with nested consumers | +| [TaskWorkView.tsx](../../web/src/components/task/TaskWorkView.tsx) | 1055 | confirm | Migration pending | +| [ObservationsSection.tsx](../../web/src/components/task/ObservationsSection.tsx) | 118 | confirm | Migration pending | +| [SquadChatPanel.tsx](../../web/src/components/chat/SquadChatPanel.tsx) | 522 | chat | Migration pending; migrate with nested consumers | +| [ReviewPanel.tsx](../../web/src/components/task/ReviewPanel.tsx) | 212 | form | Migration pending | +| [ArtifactPreviewModal.tsx](../../web/src/components/task/ArtifactPreviewModal.tsx) | 112 | authoring | Migration pending | +| [CommandPalette.tsx](../../web/src/components/layout/CommandPalette.tsx) | 293 | form | Migration pending; migrate with nested consumers | +| [SettingsDialog.tsx](../../web/src/components/settings/SettingsDialog.tsx) | 529 | authoring | Shared geometry; browser/native passed #1436 | +| [SettingsDialog.tsx](../../web/src/components/settings/SettingsDialog.tsx) | 739 | confirm | Shared geometry; browser/native passed #1436 | +| [PRDialog.tsx](../../web/src/components/task/git/PRDialog.tsx) | 36 | authoring | Migration pending | +| [ActivitySidebar.tsx](../../web/src/components/layout/ActivitySidebar.tsx) | 244 | utility | Migration pending | +| [SortableListItem.tsx](../../web/src/components/settings/SortableListItem.tsx) | 171 | confirm | Shared geometry; browser/native passed #1436 | +| [WorktreeStatus.tsx](../../web/src/components/task/git/WorktreeStatus.tsx) | 374 | form | Migration pending | +| [WorktreeStatus.tsx](../../web/src/components/task/git/WorktreeStatus.tsx) | 404 | confirm | Migration pending | +| [TaskDetailsTab.tsx](../../web/src/components/task/detail/TaskDetailsTab.tsx) | 254 | confirm | Migration pending | +| [KeyboardShortcutsDialog.tsx](../../web/src/components/layout/KeyboardShortcutsDialog.tsx) | 49 | form | Migration pending | +| [ArchiveSidebar.tsx](../../web/src/components/layout/ArchiveSidebar.tsx) | 240 | utility | Migration pending | +| [MobileShell.tsx](../../web/src/components/layout/MobileShell.tsx) | 129 | utility | Migration pending | +| [ApplyTemplateDialog.tsx](../../web/src/components/task/ApplyTemplateDialog.tsx) | 305 | authoring | Migration pending | +| [PreviewPanel.tsx](../../web/src/components/task/PreviewPanel.tsx) | 71 | utility | Migration pending; migrate with nested consumers | +| [AttachmentsSection.tsx](../../web/src/components/task/AttachmentsSection.tsx) | 172 | confirm | Migration pending | +| [SectionHeader.tsx](../../web/src/components/settings/shared/SectionHeader.tsx) | 66 | confirm | Shared geometry; browser/native passed #1436 | +| [DesktopOnboarding.tsx](../../web/src/components/auth/DesktopOnboarding.tsx) | 711 | authoring | Migration pending | +| [AgentRunTimelinePanel.tsx](../../web/src/components/task/AgentRunTimelinePanel.tsx) | 1373 | form | Migration pending | +| [DeliverablesSection.tsx](../../web/src/components/task/DeliverablesSection.tsx) | 272 | confirm | Migration pending | +| [DrillDownPanel.tsx](../../web/src/components/dashboard/DrillDownPanel.tsx) | 14 | utility | Migration pending | +| [WorkflowSection.tsx](../../web/src/components/task/WorkflowSection.tsx) | 266 | authoring | Migration pending | +| [CommentsSection.tsx](../../web/src/components/task/CommentsSection.tsx) | 190 | confirm | Migration pending | +| [TaskDetailPanel.tsx](../../web/src/components/task/TaskDetailPanel.tsx) | 271 | task | Migration pending | +| [sheet.tsx](../../web/src/components/ui/sheet.tsx) | 147 | utility | Migration pending | +| [alert-dialog.tsx](../../web/src/components/ui/alert-dialog.tsx) | 136 | form | Migration pending | +| [WorkProductsSection.tsx](../../web/src/components/task/WorkProductsSection.tsx) | 504 | authoring | Migration pending | +| [WorkProductsSection.tsx](../../web/src/components/task/WorkProductsSection.tsx) | 551 | authoring | Migration pending | +| [AgentPanel.tsx](../../web/src/components/task/AgentPanel.tsx) | 630 | confirm | Migration pending | +| [AgentPanel.tsx](../../web/src/components/task/AgentPanel.tsx) | 661 | form | Migration pending | +| [dialog.tsx](../../web/src/components/ui/dialog.tsx) | 157 | form | Migration pending | +| [ExportDialog.tsx](../../web/src/components/dashboard/ExportDialog.tsx) | 106 | form | Migration pending | +| [SkillRiskDashboardPanel.tsx](../../web/src/components/settings/tabs/SkillRiskDashboardPanel.tsx) | 339 | form | Shared geometry; browser/native passed #1436 | +| [ToolPoliciesTab.tsx](../../web/src/components/settings/tabs/ToolPoliciesTab.tsx) | 269 | authoring | Shared geometry; browser/native passed #1436 | +| [GeneralTab.tsx](../../web/src/components/settings/tabs/GeneralTab.tsx) | 404 | confirm | Shared geometry; browser/native passed #1436 | +| [TemplateComponents.tsx](../../web/src/components/settings/tabs/TemplateComponents.tsx) | 252 | confirm | Shared geometry; browser/native passed #1436 | +| [SecurityTab.tsx](../../web/src/components/settings/tabs/SecurityTab.tsx) | 174 | confirm | Shared geometry; browser/native passed #1436 | +| [AgentsTab.tsx](../../web/src/components/settings/tabs/AgentsTab.tsx) | 2331 | confirm | Shared geometry; browser/native passed #1436 | +| [MaintenanceTab.tsx](../../web/src/components/settings/tabs/MaintenanceTab.tsx) | 590 | form | Shared geometry; browser/native passed #1436 | The mobile notification drawer is a deliberate bottom-sheet exception; it still needs matching spacing and keyboard checks. Compatibility wrappers in `ui/dialog.tsx`, `ui/alert-dialog.tsx`, and `ui/sheet.tsx` remain inventoried above where they instantiate roots; their public call sites must not be silently treated as migrated. Docked Workbench chat is not a modal and must keep its non-modal focus model while adopting the same header/composer spacing.