feat(uat-batch): Groups F + G + H — DocsHub/signing + admin consolidation + email
F27–F29, G30, G31, H32, H33 from the 2026-05-21 plan.
Shipped now:
F28 Past-milestones expandable history. The Past strip on the
Interest overview becomes an <Accordion> — each row collapses
to the same one-line summary as before, expands to render the
full <MilestoneSection> (steps list, sub-status, inline doc
actions). Reuses the existing MilestoneSection so no new
per-milestone rendering needs to be maintained.
F29 Watchers configurable at document creation time. The unified
create-document wizard gets a Watchers section with a
multi-select checkbox list backed by /api/v1/admin/users/picker.
Selected user ids are sent in the `watchers` array on the POST
(replacing the prior hardcoded `[]`). UI matches the
post-creation WatchersCard so reps see the same identity rows
regardless of entry point.
G30 /admin/invitations merged into /admin/users. The Users page
now wraps the existing UserList + InvitationsManager in a
Tabs control (Active users / Invitations). The standalone
/admin/invitations route returns a redirect to the merged page
for bookmark back-compat. Removed nav catalog entry +
admin-sections-browser tile; extended the Users catalog
keywords with "invitations / pending invites / onboarding"
so command-K search still lands on the right surface.
G31 /admin/ai picks up the berth-PDF-parser section + a "planned
AI surfaces" placeholder. Berth PDF parser remains
env-configured today; the page now documents it so admins
don't hunt for the controls. Closes the "where do I configure
AI?" loop.
H32 Email settings explainer panel above the SMTP cards. Spells
out why noreply + sales have separate credentials and which
workflows ship from each mailbox. Existing field titles
gained the "(noreply)" suffix so the model maps cleanly.
H33 Supplemental-info-request email rebuilt to use the shared
branded shell (logo + blurred overhead background + max-
width 600 table layout) instead of the prior plain-HTML
page. Per-port branding (logo / primary color / background /
header / footer) flows from getPortBrandingConfig. CTA
button picks up the port's primary color.
Already shipped (verified pre-shipped):
F27 DocumentsHub root view already hides the breadcrumb via
`selectedFolderId !== undefined` conditional.
Verified: tsc clean, vitest 1454/1454.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -167,7 +167,17 @@ export const NAV_CATALOG: NavCatalogEntry[] = [
|
||||
href: '/:portSlug/admin/users',
|
||||
label: 'Users & roles',
|
||||
category: 'admin',
|
||||
keywords: ['accounts', 'permissions', 'invites', 'team', 'staff', 'roles'],
|
||||
keywords: [
|
||||
'accounts',
|
||||
'permissions',
|
||||
'invites',
|
||||
'invitations',
|
||||
'pending invites',
|
||||
'onboarding',
|
||||
'team',
|
||||
'staff',
|
||||
'roles',
|
||||
],
|
||||
requires: 'admin.manage_users',
|
||||
},
|
||||
{
|
||||
@@ -395,13 +405,10 @@ export const NAV_CATALOG: NavCatalogEntry[] = [
|
||||
keywords: ['roles', 'permissions', 'access control', 'rbac'],
|
||||
requires: 'admin.manage_users',
|
||||
},
|
||||
{
|
||||
href: '/:portSlug/admin/invitations',
|
||||
label: 'Invitations',
|
||||
category: 'admin',
|
||||
keywords: ['invite', 'pending invites', 'onboarding'],
|
||||
requires: 'admin.manage_users',
|
||||
},
|
||||
// /admin/invitations was merged into /admin/users on 2026-05-21 — the
|
||||
// standalone catalog entry would route to the redirect stub. Reps
|
||||
// searching for "invite" still land on the right surface via the
|
||||
// /admin/users keyword list (extended below).
|
||||
];
|
||||
|
||||
/** Substitute `:portSlug` placeholder for the current port. */
|
||||
|
||||
Reference in New Issue
Block a user