Breaking changes
- New required config attribute
projects_index_name
. This is required even if Hermes projects are not enabled yet via the feature flag. (#447)algolia { ... projects_index_name = "projects" ... }
Enabling Hermes projects
Hermes projects (see below under "Notable features & enhancements") can be enabled via feature flag:
feature_flags {
flag "projects" {
enabled = true
}
}
Enabling v2 of the API
This release includes a new v2 of the Hermes API which uses the PostgreSQL database as the source of truth for all data instead of Algolia. v1 of the API is now considered deprecated and will be removed in the next release. First, to prepare for enabling v2 of the API, use the new hermes operator migrate-algolia-to-postgresql
command (use the -help
flag to see all available options) to migrate all data to PostgreSQL. Then, v2 of the API can be enabled via feature flag:
feature_flags {
flag "api_v2" {
enabled = true
}
}
Other notable configuration changes
- New
flight_icon
attribute under document types (using Helios icons):
document_types {
document_type "RFC" {
...
flight_icon = "discussion-circle"
...
}
}
- Jira can be optionally configured to enable linking Hermes projects with Jira issues. Create an API token for Jira and then enable Jira linking with the
jira
block in the config:
jira {
api_token = ""
enabled = true
url = ""
user = ""
}
- Hermes logs can now be emitted in JSON:
log_format = "json"
- Datadog tracing can be optionally enabled:
datadog {
enabled = true
env = "prod"
service = "hermes"
}
Notable features & enhancements
- (NEW) Custom document types: Users can now define their own document types in the Hermes configuration file.
- (NEW) Introducing Projects in Hermes: Projects provide a way to group documents (including documents from multiple products) and links around an effort. Hermes users can create a project in Hermes and link published documents to that project. Users can optionally also link the associated Jira issue to provide a richer understanding about the status of the project.
- Datadog tracing is now supported (new
datadog
config block). - "My Docs" and "My Drafts" routes are now combined.
- Improved keyboard support for editable fields.
- Numerous performance and design improvements for the Hermes UI.
- The document type is now included in the Google Doc header title (e.g., "[RFC] ABC-123: Title of my doc").
What's Changed
- Fix RecentlyViewedDocs draft hrefs by @jeffdaley in #300
- Improve UX for string-based EditableFields by @jeffdaley in #301
- ExternalResource: New icon and URL by @jeffdaley in #303
- Add version and revision in config response by @anubhavmishra in #297
- Add database updates to APIs by @jfreda in #302
- Fix recently viewed docs disappearing bug by @jfreda in #304
- Update filter button styles by @jeffdaley in #310
- Add version number and revision to footer by @jeffdaley in #309
- Tweak margins of DocsAwaitingReview by @jeffdaley in #311
- Move table sorting function to column header by @jeffdaley in #308
- Fix ProductBadge query value by @jeffdaley in #305
- Define global background color by @jeffdaley in #312
- Fix broken test import by @jeffdaley in #314
- Replace RelatedResource FlightIcons with Favicons by @jeffdaley in #313
- Remove unused references to
sortControlIsHidden
by @jeffdaley in #315 - Adds
matchAnchorWidth
to FloatingUI components by @jeffdaley in #317 - Change
/all
to/documents
by @jeffdaley in #306 - Improve RecentlyViewedDocs/Dashboard performance by @jeffdaley in #318
- Add ProductArea service by @jeffdaley in #316
- Remove unused property from Doc::Tile component by @jeffdaley in #319
- Update HDS/Flight Icon packages by @jeffdaley in #321
- Fix JS/TS collisions by @jeffdaley in #320
- Define SessionService exports by @jeffdaley in #322
- Log user for 'wrong number of people in search result' error by @jfreda in #326
- Support custom document types by @jfreda in #328
- Remove
docType
from NewDocForm submit button by @jeffdaley in #331 - Update Create Draft grammar by @jeffdaley in #332
- Remove "choose a template" subhead by @jeffdaley in #330
- Don't assume names of document types are all uppercase by @jfreda in #336
- Fix indexer bug saving doc object in wrong format by @jfreda in #338
- Remove unused Avatar styles by @jeffdaley in #329
- Fix PATCHing a draft's Product by @jfreda in #337
- Remove default margin from H1 by @jeffdaley in #339
- Replace
modifiedAgo
property with template helper by @jeffdaley in #323 - Convert "Create new" routes/controllers to TS by @jeffdaley in #334
- Autofocus PeopleSelects in the sidebar by @jeffdaley in #333
- Add support for single-file components by @jeffdaley in #299
- Add types to Document route; Document-related cleanup by @jeffdaley in #324
- Compare document data between Algolia and PostgreSQL by @jfreda in #341
- Add support for JSON log format by @jfreda in #344
- Improve CI GitHub Action status badge by @jfreda in #345
- Add tests for doc creation by @jeffdaley in #348
- Replace back button with Hermes button by @jeffdaley in #347
- Update notification width and
out
animation by @jeffdaley in #346 - Add PowerSelectMultiple Glint types by @jeffdaley in #343
- Add modified time to search results by @jeffdaley in #342
- Add
secondaryFilterAttribute
to DropdownList by @jeffdaley in #349 - Related Resources refactor and External Link
scope
by @jeffdaley in #327 - Enable removing custom fields by providing an empty value by @jfreda in #350
- Convert "highlight affordance"
test
totodo
by @jeffdaley in #351 - Add TailwindCSS plugin to Prettier config by @jeffdaley in #352
- Improve document route performance by @jeffdaley in #335
- Handle
null
inserializeUsers
task by @jeffdaley in #353 - EmptyStateText by @jeffdaley in #355
- Enable Datadog tracing by @jfreda in #354
- Revert HermesUser changes by @jeffdaley in #356
- Datadog: don't log startup by @jfreda in #357
- Datadog: don't log startup for indexer by @jfreda in #358
- Make shortlinks case-insensitive by @jfreda in #359
- EditableFields enhancements and bugfixes by @jeffdaley in #340
- Bump minimist from 0.2.2 to 0.2.4 in /web by @dependabot in #363
- Improve sidebar affordances by @jeffdaley in #360
- Update "New" button by @jeffdaley in #361
ToggleSelect
component by @jeffdaley in #362- Simplify application templating by @jeffdaley in #367
OverflowMenu
refactor by @jeffdaley in #368- Fix nav container bug by @jeffdaley in #369
- Add project routes to
development
andtest
environments by @jeffdaley in #364 - Update "Choose a template" screen by @jeffdaley in #366
- RelatedResources: Fix
documentType
bug by @jeffdaley in #370 - Add project creation in
development
andtest
environments by @jeffdaley in #365 - Add popover settings to ProductSelect by @jeffdaley in #372
- Add conditional ProductAreas fetch call to
new/doc
route by @jeffdaley in #373 - Improve EditableField error handling by @jeffdaley in #374
- Add HermesLogo to Glint registry by @jeffdaley in #375
- Switch DocThumbnail sizing interface from
isLarge
tosize
by @jeffdaley in #378 - Add
RelatedHermesDocument
model attributes by @jeffdaley in #371 - Add
eslintrc.js
by @jeffdaley in #376 - Add API v2 by @jfreda in #377
- Patch document status in v2 API by @jfreda in #382
- Add
Project::Tile
component by @jeffdaley in #379 - Update "Create New" forms by @jeffdaley in #384
- Fix
tsconfig
reference inestlintrc
by @jeffdaley in #383 - Lint
unnecessary-type-assertion
by @jeffdaley in #381 ProjectStatus
enum by @jeffdaley in #390- Make
OverflowMenu
a more generic component by @jeffdaley in #391 - Add
JiraObject
type by @jeffdaley in #386 - Expand HDS template types by @jeffdaley in #385
- Return
undefined
instead ofnull
inget-product-id
files by @jeffdaley in #387 - Add
checkmarkPosition
argument toCheckableItem
by @jeffdaley in #392 - Tweak Project factory by @jeffdaley in #395
- Add
EmptyStateAddButton
component by @jeffdaley in #389 - Add
...attributes
to DocState component by @jeffdaley in #396 - Bump @babel/traverse from 7.20.5 to 7.23.2 in /web by @dependabot in #393
- Create
Product::Avatar
component by @jeffdaley in #394 - Add 'operator migrate-algolia-to-postgresql' command by @jfreda in #400
- Add product to 'doc subscriber email sent' logs by @jfreda in #401
- Add
large
andxl
sizes to PersonAvatar by @jeffdaley in #397 - Make sure document_number is not NULL when getting latest product doc… by @jfreda in #405
- Backport API helper changes from v2 to v1 by @jfreda in #403
- Fix panic when document has no owners by @jfreda in #407
- Bump webpack from 5.75.0 to 5.76.0 in /web by @dependabot in #398
- Update request for project related resources; Cleanup to match back-end by @jeffdaley in #408
- Update HDS packages by @jeffdaley in #411
- Bump socket.io-parser from 4.2.1 to 4.2.4 in /web by @dependabot in #410
- Fetch products on login; add
getProductAbbreviation
function by @jeffdaley in #406 - Fix owner photo bug for v2 drafts API by @jfreda in #413
- Allow approving documents in Approved status by @jfreda in #415
- Add nil check for document summary in NewFromDatabaseModel by @jfreda in #416
- Add
medium
size to DocThumbnail; tweak shared types by @jeffdaley in #388 - Add "Me" label to
Person
component by @jeffdaley in #417 - Table and ProductLink design changes by @jeffdaley in #418
- Add project screen by @jeffdaley in #404
- Fix UserMenuDropdown z-index bug by @jeffdaley in #419
- Add
hasChevron
argument todd.ToggleAction
by @jeffdaley in #421 - Add
limitTo24Hours
option totimeAgo
functions by @jeffdaley in #422 - Fix a couple typos by @jeffdaley in #424
- Update
pagination.ts
types by @jeffdaley in #425 - Improve error redirect on Document route by @jeffdaley in #427
- Bugfix: Add
?draft=true
to draft links by @jeffdaley in #435 - Fix recently viewed docs by @jfreda in #436
- Standardize
FlashMessage
properties by @jeffdaley in #426 - Remove unused
Table
argument by @jeffdaley in #430 - Set default MockDate value by @jeffdaley in #429
- Fix gradient on 404 screen by @jeffdaley in #428
- Update ci.yml by @anubhavmishra in #439
- Change
product-link
routing by @jeffdaley in #431 - Add
projects
to FlagsService; add conditional Projects navLink by @jeffdaley in #434 - Replace test strings with shared variables by @jeffdaley in #440
- Move Dashboard from template to component by @jeffdaley in #432
- Add projects API by @jfreda in #437
- Update
isDraft
condition in document sidebar by @jeffdaley in #433 - Fix v1 API endpoints by @jfreda in #441
- Add
timeColumn
argument toTable::Row
by @jeffdaley in #423 - Fix project-flag routing bug by @jeffdaley in #442
- Add flag for the "start a project" button by @jeffdaley in #444
- Add projects to document GET response by @jfreda in #445
- Save projects in Algolia by @jfreda in #447
- Move Project
status
assignment to Mirage by @jeffdaley in #446 - Fix project patching by @jfreda in #448
- Switch
patchDocument
fromtask
toenqueueTask
by @jeffdaley in #454 - Fix approver checkmark by @jeffdaley in #453
- Fix visual bug on ProjectResource overflow button by @jeffdaley in #452
- Improve EditableFields on the Projects screen by @jeffdaley in #451
- Add fields to projects API responses by @jfreda in #455
- Add summary to Hermes document project related resource response by @jfreda in #457
- Improve locked doc state by @jeffdaley in #456
- Adds feature-flagged hash-based coloring to non-icon'd product avatars by @jeffdaley in #443
- Wire projects screens to back end by @jeffdaley in #450
- Add created and modified times to Hermes doc project related resources by @jfreda in #458
- Combine My Docs and My Drafts by @jeffdaley in #420
- Component-ize Project documents (
Doc::TileMedium
) by @jeffdaley in #459 - Add Project CopyURL function by @jeffdaley in #460
- Convert User menu to
X::DropdownList
by @jeffdaley in #461 - Rename
project-resource-list
→divided-list
by @jeffdaley in #465 - Expand
Doc::TileMedium
interface by @jeffdaley in #464 - Update active product icon by @jeffdaley in #467
- Component-ize
Product::SubscriptionToggle
by @jeffdaley in #463 - Update user avatar fallback by @jeffdaley in #472
- Add Jira proxy by @jfreda in #473
- Add ProductAvatars to ProjectTiles by @jeffdaley in #471
- Remove 1px margin on some ProductAvatars by @jeffdaley in #477
- Replace some colors in the
productAreas
array by @jeffdaley in #476 - Add more logging to projects write actions by @jfreda in #474
- Add flight icon to document types configuration by @jfreda in #479
- Add document type to Google Doc header title by @jfreda in #480
- Add ProductArea route by @jeffdaley in #462
- Fix Related Resources search index by @jeffdaley in #482
- Improve handling of DocType icons by @jeffdaley in #481
- Add
.gts
boilerplate toHds::Button
by @jeffdaley in #468 - Add status nav to Projects index by @jeffdaley in #475
- Add projects filtering by @jfreda in #486
- Add
draft
queryParam support toDocTileMedium
by @jeffdaley in #478 - Remove
product_colors
flag by @jeffdaley in #485 - Add
projects
attribute toHermesDocument
type by @jeffdaley in #489 - Rearrange nav items by @jeffdaley in #483
- Add last-modified time to Project footer by @jeffdaley in #492
- Add jira_url to web config response by @jfreda in #493
- Calculate if document is a draft when refreshing header by @jfreda in #494
- Add
isModal
argument to Form component by @jeffdaley in #491 - Add
waitUntilNextRunloop
toautofocus
by @jeffdaley in #490 - Add
updateRelatedResourcesSortOrder
utility by @jeffdaley in #488 - Add IssueTypeImage to Jira issue response by @jfreda in #497
- Add Jira to the front-end by @jeffdaley in #498
- Fix removeJiraIssue bug by @jeffdaley in #499
- Use Jira issues API if issue picker query contains an issue key by @jfreda in #501
- Fix Jira image URLs by @jeffdaley in #500
- Check for
dialog
s when using FloatingUI +renderOut
by @jeffdaley in #502 - Remove partial comment and a couple
console.logs
by @jeffdaley in #504 - Add
theme--neutral
to popover classes by @jeffdaley in #505 - Scrollable modal styles by @jeffdaley in #506
- Get doc again after inserting header table by @jfreda in #507
- Validate draft document status by @jfreda in #510
- Enable using PostgreSQL as source of truth for indexer document data by @jfreda in #509
- Enable creating documents as logged-in user by @jfreda in #508
- Remove redundant loading spinner by @jeffdaley in #511
- Tweak link color by @jeffdaley in #512
- Account for undefined status in
Tile::Medium
by @jeffdaley in #513 - Projects in the sidebar by @jeffdaley in #414
- Improve Projects navigation and tiles by @jeffdaley in #514
- Fix patching a draft's product by @jfreda in #517
- Remove TODO comment by @jeffdaley in #518
- Add Jira to Project Tiles by @jeffdaley in #515
- Add avatars to ProductSelect; replace Product Badge dropdown by @jeffdaley in #516
- Remove unnecessary gradient from Project tiles by @jeffdaley in #520
- Add
isSaving
state to project title and description by @jeffdaley in #519 - Set
isReadOnly
conditions on project title and description by @jeffdaley in #521 - Tweak project EditableField affordances by @jeffdaley in #524
- Add
isReadOnly
argument to project resources by @jeffdaley in #522 - Add
ProjectStatusIcon
component with color icons by @jeffdaley in #484 - Improve Jira widget design on Projects screen by @jeffdaley in #525
- Enable creating documents as logged-in user (take 2) by @jfreda in #526
- Add read-only styles to Jira by @jeffdaley in #528
- Configure
createDocsAsUser
in the front end by @jeffdaley in #529 - Fix Jira render logic by @jeffdaley in #531
- Add
scroll-into-view-if-needed
by @jeffdaley in #541 - Fix avatar loading on projects screen by @jeffdaley in #534
- Add
animateTransform
motion by @jeffdaley in #539 - Add "What's a project" tooltip to "New" screen by @jeffdaley in #546
- Turn off
require-yield
linter rule by @jeffdaley in #537 - Refactor buttons and improve project focus rings by @jeffdaley in #535
- Fix popover width and improve dropdown list truncation by @jeffdaley in #542
- Fix missing Project related resource attributes by @jeffdaley in #533
- Improve
closeDropdown
handling by @jeffdaley in #532 - Fix "isSaving" affordance on projects screen by @jeffdaley in #530
- Create
highlightElement
utility by @jeffdaley in #538 - Make sure project docs are excluded from search results by @jeffdaley in #536
- Conditionally hide the "add project resource" button by @jeffdaley in #523
- Change default Algolia index for Related Resources by @jeffdaley in #547
- Animated project resources; Improved projects empty state by @jeffdaley in #540
- Fix DropdownListItemCount CSS bug by @jeffdaley in #548
- Improve checkable item markup by @jeffdaley in #549
- Fix Product/Area select styles on New Document screen by @jeffdaley in #551
- Use the
modifiedTime
index for empty Algolia searches by @jeffdaley in #552 - Projects index redesign; New status icons by @jeffdaley in #550
- Remove unused
animateHighlight
code from project component by @jeffdaley in #553 - Return names with people API response by @jfreda in #554
- Add exponential backoff to Drive.Files.Get call by @jfreda in #555
- Prepare for 0.4.0 release by @jfreda in #556
New Contributors
- @dependabot made their first contribution in #363
Full Changelog: v0.3.0...v0.4.0