From 85ee1e64ab197f8dfdecdb2e1e22a8a490db0969 Mon Sep 17 00:00:00 2001 From: Alexander Brandon Coles Date: Thu, 22 Oct 2026 12:44:19 +0100 Subject: [PATCH 01/11] [OP-20545] Enforce US English spelling with typos Sets the typos locale to en-us, since the documentation style guide asks for US English and the dictionary otherwise accepts both variants. Public names that now get flagged, such as the PMflex artefact export code, AuthorisationService and server_flavour, are allow-listed with a follow-up note; names fixed by other specs, such as aria-labelledby and axe-core, are allow-listed without one. https://community.openproject.org/wp/OP-20545 --- typos.toml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/typos.toml b/typos.toml index ad1803da421d..6b24b8631f88 100644 --- a/typos.toml +++ b/typos.toml @@ -17,6 +17,7 @@ extend-exclude = [ ] [default] +locale = "en-us" extend-ignore-re = [ "code=[A-Za-z0-9]{20,}", # OAuth code in an example request "filemane with spaces", # file in the SCM test repository @@ -56,6 +57,20 @@ extend-ignore-re = [ "cachable-apiv3-(resource|collection)", # file names; follow-up "fourty minutes", # commented-out parser input "\\.highlight \\.nd", # Rouge token class + "op-header-project-select--no-favourites", # CSS class; follow-up + "(::|module |class )Artefact\\b|\\bArtefact::", # PMflex artefact export constants; follow-up + "[\"']artefact[\"']|%w\\[[^\\]]*\\bartefact\\b[^\\]]*\\]", # PDF export template id stored in type settings; follow-up + "\\bartefact(_spec)?\\.rb|/artefact/", # PMflex artefact export file names; follow-up + "", # Nextcloud user query payload + "\\), labelled AS \\(|FROM labelled\\b", # CTE alias in a shipped migration + "Centre of [Ee]xcellence\\s+in\\s+PM", # name of the EU PM² body + "\"Aluminium \\(0\\.4\\)\"", # value shown in the release notes screenshot + "(?m)^\\s+favoured:|help_texts\\.views\\.favoured", # i18n key + "\\btrialling\\?", # public EnterpriseToken.trialling?; follow-up + "\\btrialling\\(", # public BannersService#trialling; follow-up + "\\bsignalled(<|\\()", # public APIv3 resource method; follow-up + "aria-labelledby", # HTML attribute + "4-project-organisation-and-roles", # docs directory, part of public URLs ] extend-ignore-identifiers-re = [ "^(with|without)_trailling_slash$", # public SCM adapter API; follow-up @@ -98,11 +113,25 @@ extend-ignore-identifiers-re = [ "^wait_thr$", # Open3 convention "^wheres$", # Arel API "^wil_", # weighted item list + "^\\w*(_artefact|artefact_)\\w*$", # PMflex artefact export code, i18n keys and routes; follow-up + "^\\w*[a-z]Artefact\\w*$|^Artefact[A-Z]\\w*$", # PMflex artefact export classes; follow-up + "^(a|A)uthorisationService$", # public frontend service; follow-up + "^labelled_tabular_form_(for|with)$", # public form helpers; follow-up + "^server_flavour$", # key in stored LLM connection options; follow-up + "^group__bim_modellers$|^(finishing_)?modelling_\\w+$", # BIM seed data keys; follow-up + "^(non_)?trialling_features$|^triallingFeatures$", # public enterprise token API; follow-up + "^set_favoured$", # page object helper shared by calendar and team planner specs; follow-up + "^labour_query\\?*$", # public reporting table method; follow-up + "^getEnterPriseEditionUrl$", # public banners service method; follow-up + "^localised_(other_)?name$", # methods in a shipped migration + "^marshalling_format_version$", # Rails configuration option + "(?i)^aria_?labelledby$", # aria-labelledby attribute "^will_remove_all_(group|user)_access_priveleges$", # i18n keys ] [default.extend-words] anc = "anc" # SQL alias and index names for ancestor +axe = "axe" # axe-core accessibility engine lod = "lod" # level of detail / BIM level of development tweek = "tweek" # time_entries column; follow-up HELO = "HELO" # SMTP command From 9f9bd6fac3bcf9071034de125181394dd2c3f4b9 Mon Sep 17 00:00:00 2001 From: Alexander Brandon Coles Date: Thu, 22 Oct 2026 12:57:31 +0100 Subject: [PATCH 02/11] [OP-20545] Use US spelling in core application code Converts British spellings in comments, log and error messages, development seed data, private methods and locals, such as honouring_negation and normalised_window. Public names and the PMflex artefact export code keep their spelling and are allow-listed. https://community.openproject.org/wp/OP-20545 --- app/components/filters/filter_form_component.rb | 2 +- .../my/time_management/_fullcalendar_frame.sass | 4 ++-- .../my/time_management/_time_entry_card.sass | 2 +- .../my/time_management/calendar_component.sass | 2 +- .../op_primer/border_box_table_component.rb | 2 +- .../common/border_box_list_component.sass | 6 +++--- app/components/statuses/table_component.rb | 2 +- ...lk_delete_descendants_dialog_component.html.erb | 2 +- .../date_picker/date_form_component.rb | 2 +- .../date_picker/dialog_content_component.sass | 2 +- .../delete_descendants_dialog_component.html.erb | 2 +- .../work_packages/status_badge_component.rb | 2 +- .../settings/custom_fields_base_controller.rb | 2 +- app/controllers/application_controller.rb | 2 +- .../work_packages/auto_completes_controller.rb | 2 +- app/forms/projects/life_cycle/form.rb | 2 +- app/helpers/work_packages_helper.rb | 2 +- app/models/attachment.rb | 4 ++-- app/models/capabilities/scopes/default.rb | 2 +- app/models/custom_field/sectionable.rb | 2 +- app/models/exports/pdf/common/attachments.rb | 4 ++-- app/models/group.rb | 2 +- app/models/project_custom_field_section.rb | 2 +- app/models/projects/custom_fields.rb | 6 +++--- app/models/projects/identifier.rb | 2 +- .../named_references/filters/member_exists.rb | 4 ++-- .../named_references/filters/project_filter.rb | 2 +- app/models/repository.rb | 2 +- app/models/user_custom_field_section.rb | 2 +- app/models/work_package/semantic_identifier.rb | 2 +- app/models/work_packages/journal_timeline.rb | 2 +- app/models/workflows/matrix_context.rb | 2 +- app/seeders/development_data/forums.yml | 2 +- .../development_data/user_custom_fields_seeder.rb | 2 +- app/services/base_services/set_attributes.rb | 2 +- app/services/grids/copy_service.rb | 2 +- .../import/jira_custom_field/context_signature.rb | 2 +- app/services/import/jira_import_journals.rb | 2 +- app/services/import/jira_wiki_markup/renderer.rb | 2 +- app/services/incoming_emails/dispatch_service.rb | 2 +- .../classic_identifier_suggestion_generator.rb | 2 +- .../creation_wizard/upload_artifact_service.rb | 2 +- .../excluded_elements/base_service.rb | 4 ++-- .../activities_tab/comment_service.rb | 2 +- .../work_packages/activities_tab/filters.rb | 2 +- .../work_packages/activities_tab/paginator.rb | 2 +- .../work_packages/import/csv/file_problem.rb | 2 +- .../work_packages/import/csv/header_sniffer.rb | 2 +- .../work_packages/import/csv/import_service.rb | 4 ++-- .../export_on_status_change_service.rb | 10 +++++----- app/views/ldap_auth_sources/_form.html.erb | 2 +- .../jira_import_custom_fields.rb | 2 +- app/workers/work_packages/workflow_job.rb | 2 +- config/application.rb | 2 +- config/initializers/new_framework_defaults_7_1.rb | 2 +- config/initializers/user_invitation.rb | 2 +- ...21100000_add_linked_aspects_to_type_variants.rb | 2 +- docker/dev/xwiki/README.md | 2 +- docker/prod/migrate | 2 +- .../CreateWorkPackage/CreateWorkPackageModal.tsx | 10 +++++----- .../lib/components/CreateWorkPackage/atoms.ts | 4 ++-- .../CreateWorkPackage/useCreateWorkPackageForm.ts | 6 +++--- .../InlineWorkPackage/UnavailableChip.tsx | 2 +- .../blocknote-extensions/lib/utils/device.ts | 2 +- .../lib/utils/tapActivation.ts | 2 +- .../blockWorkPackageCopyPaste.browser.test.tsx | 2 +- .../createWorkPackagePicker.browser.test.tsx | 6 +++--- .../integration/externalHtmlPaste.browser.test.tsx | 6 +++--- .../inlineWorkPackagePreview.browser.test.tsx | 2 +- .../workPackageSurfaceColor.browser.test.tsx | 2 +- lib/api/v3/principals/not_builtin_elements.rb | 2 +- lib/api/v3/projects/projects_api.rb | 2 +- .../custom_field_injector/link_value_getter.rb | 2 +- .../schema/work_package_schema_representer.rb | 2 +- .../v3/work_packages/work_package_representer.rb | 2 +- .../environment_variables_documentation.rb | 2 +- lib/open_project/scm/local_path_validator.rb | 4 ++-- lib/tasks/docs.rake | 2 +- lib/tasks/email.rake | 2 +- lib_static/open_project/notifications.rb | 2 +- .../lib/acts_as_customizable.rb | 4 ++-- .../llm_connections/feature_binding_component.rb | 2 +- .../llm_connections/models_row_component.rb | 2 +- .../llm_connections/environment_update_contract.rb | 2 +- modules/llm/app/models/llm_connection.rb | 2 +- modules/llm/app/services/llm/adapters/openai.rb | 2 +- .../app/services/llm/adapters/registry_backed.rb | 2 +- modules/llm/app/services/llm/structured_output.rb | 2 +- .../app/services/llm/validators/model_validator.rb | 2 +- .../llm_connections/detect_capabilities_service.rb | 2 +- .../llm_connections/sync_models_service.rb | 4 ++-- .../llm/app/workers/llm/detect_capabilities_job.rb | 2 +- script/ci/ai_involvement_check.sh | 2 +- script/jira/gen_jira_projects.rb | 2 +- script/order_yaml | 2 +- .../export_on_status_change_service_spec.rb | 14 +++++++------- 96 files changed, 130 insertions(+), 130 deletions(-) diff --git a/app/components/filters/filter_form_component.rb b/app/components/filters/filter_form_component.rb index af091527bf5f..aca7b152f8fc 100644 --- a/app/components/filters/filter_form_component.rb +++ b/app/components/filters/filter_form_component.rb @@ -42,7 +42,7 @@ # <%= render(Filters::FilterFormComponent.new(builder: f, query: @query)) %> # <% end %> # -# Customise the set of advertised filters by passing `allowed_filters:` (used +# Customize the set of advertised filters by passing `allowed_filters:` (used # by `Filter::FilterComponent` subclasses that restrict or reorder the list). # To keep the default set but drop a few entries, pass `excluded_filters:` a # list of filter names (e.g. `%i[project_id]`); they are removed from the diff --git a/app/components/my/time_management/_fullcalendar_frame.sass b/app/components/my/time_management/_fullcalendar_frame.sass index 1446435c8e1b..907582811451 100644 --- a/app/components/my/time_management/_fullcalendar_frame.sass +++ b/app/components/my/time_management/_fullcalendar_frame.sass @@ -1,7 +1,7 @@ // Shared frame for the FullCalendar based my work views. // // FullCalendar draws a border on the scrollgrid table and on every cell, so a frame around -// the grid lands next to those and reads as a thicker, differently coloured edge. The +// the grid lands next to those and reads as a thicker, differently colored edge. The // container owns the frame and the cells on the outer edges give theirs up. // Goes on the view root, for what renderDayTotal puts in a column footer. @@ -31,7 +31,7 @@ // Goes on the view root, above the container. =fc-frame-grid - // FullCalendar defaults to its own grey, a different colour from the container border. + // FullCalendar defaults to its own grey, a different color from the container border. --fc-border-color: var(--borderColor-default) // FullCalendar shades a focused event, and a card keeps focus once its context menu diff --git a/app/components/my/time_management/_time_entry_card.sass b/app/components/my/time_management/_time_entry_card.sass index 244ebeaa1c58..0e71dd86e7b4 100644 --- a/app/components/my/time_management/_time_entry_card.sass +++ b/app/components/my/time_management/_time_entry_card.sass @@ -2,7 +2,7 @@ // views own the height, since that follows from how they size a bar. // For the event element of a time entry, which each view names for itself. The work -// package type colour arrives as the top border, through __hl_border_top. +// package type color arrives as the top border, through __hl_border_top. =te-time-entry-event background: var(--bgColor-default) border: 0 diff --git a/app/components/my/time_management/calendar_component.sass b/app/components/my/time_management/calendar_component.sass index 33075dcba354..e7be937a4b74 100644 --- a/app/components/my/time_management/calendar_component.sass +++ b/app/components/my/time_management/calendar_component.sass @@ -29,7 +29,7 @@ &.fc-daygrid-block-event +te-entry-card-condensed - // The global FullCalendar styles colour every all-day event through #content-wrapper. + // The global FullCalendar styles color every all-day event through #content-wrapper. &.fc-daygrid-event background: var(--bgColor-muted) !important border-color: var(--allocation-border-color) !important diff --git a/app/components/op_primer/border_box_table_component.rb b/app/components/op_primer/border_box_table_component.rb index 866af614e574..d2c09859ce42 100644 --- a/app/components/op_primer/border_box_table_component.rb +++ b/app/components/op_primer/border_box_table_component.rb @@ -84,7 +84,7 @@ def row_class_for(_row) end # Data attributes for the box element wrapping the whole table, for - # subclasses that need to attach behaviour to it. + # subclasses that need to attach behavior to it. def container_data {} end diff --git a/app/components/open_project/common/border_box_list_component.sass b/app/components/open_project/common/border_box_list_component.sass index 194acae537ee..c5b31964eab3 100644 --- a/app/components/open_project/common/border_box_list_component.sass +++ b/app/components/open_project/common/border_box_list_component.sass @@ -103,9 +103,9 @@ border-bottom-right-radius: 0 // Drop container: the whole list outlines while a sortable item hovers it, - // signalling the item will land inside this list. A refused container (a + // signaling the item will land inside this list. A refused container (a // confined item hovering a foreign list) mutes the outline to a danger tone - // instead, signalling the item will not land here. + // instead, signaling the item will not land here. &[data-drop-container] outline: var(--borderWidth-thick) solid var(--fgColor-accent) outline-offset: calc(var(--borderWidth-thick) * -1) @@ -278,7 +278,7 @@ bottom: calc(var(--op-border-box-list-drop-gap-height) / -2) // Empty-state wrapper. With a drop target label, an overlay covers the -// blankslate while a sortable item hovers the list, labelling it as a drop +// blankslate while a sortable item hovers the list, labeling it as a drop // zone. Hidden via visibility so it is unreachable while inactive; the // visibility delay keeps the overlay shown until the fade-out finishes. .op-border-box-list-empty-state diff --git a/app/components/statuses/table_component.rb b/app/components/statuses/table_component.rb index 7c0a8f5aca69..e9f07cbdd534 100644 --- a/app/components/statuses/table_component.rb +++ b/app/components/statuses/table_component.rb @@ -58,7 +58,7 @@ def container_id = "statuses-table" def container_class = "op-statuses-table" # Positions are global while a filtered list shows a non-contiguous subset, so a - # drop would resolve against neighbours the list does not display. + # drop would resolve against neighbors the list does not display. def reorderable? query.filters.empty? end diff --git a/app/components/work_packages/bulk_delete_descendants_dialog_component.html.erb b/app/components/work_packages/bulk_delete_descendants_dialog_component.html.erb index 407210391949..619a33fbf949 100644 --- a/app/components/work_packages/bulk_delete_descendants_dialog_component.html.erb +++ b/app/components/work_packages/bulk_delete_descendants_dialog_component.html.erb @@ -58,7 +58,7 @@ See COPYRIGHT and LICENSE files for more details. <% end %> <% if variant == :undeletable %> <%= render(Primer::Alpha::Banner.new(mb: 2, scheme: :warning, icon: :alert)) do %> - <%# helpers.t, not I18n.t: only the Rails helper honours the _html suffix %> + <%# helpers.t, not I18n.t: only the Rails helper honors the _html suffix %> <%= helpers.t( "work_packages.bulk_delete_dialog.#{undeletable_warning_key}", count: undeletable_count, diff --git a/app/components/work_packages/date_picker/date_form_component.rb b/app/components/work_packages/date_picker/date_form_component.rb index 6dd16fb8e474..d16868446f84 100644 --- a/app/components/work_packages/date_picker/date_form_component.rb +++ b/app/components/work_packages/date_picker/date_form_component.rb @@ -265,7 +265,7 @@ def readonly? # behaves totally different than all other browsers and destroys the behavior of the datepicker # Given a date field with no value: When Safari opens its native datepicker, the first thing it does is to # set the date to Today. And not only in the datepicker but directly in the field. - # This behaviour has however consequences: + # This behavior has however consequences: # * The "reset" button in the datepicker does not clear the input (as the other browsers do it) but it resets # it to the original value it had when you opened it. So if the value was empty, it sets it back to empty. # If the value was set before, you cannot clear it, but only set it back to that value. diff --git a/app/components/work_packages/date_picker/dialog_content_component.sass b/app/components/work_packages/date_picker/dialog_content_component.sass index 54e0f41abc33..1a92131676be 100644 --- a/app/components/work_packages/date_picker/dialog_content_component.sass +++ b/app/components/work_packages/date_picker/dialog_content_component.sass @@ -35,7 +35,7 @@ $body-height: 460px align-items: flex-start !important row-gap: 1rem - // re-implement the scrolling behaviour. Due to the turbo-frame element in between the default Dialog body scrolling does not work + // re-implement the scrolling behavior. Due to the turbo-frame element in between the default Dialog body scrolling does not work .wp-datepicker-dialog--content display: flex flex-direction: column diff --git a/app/components/work_packages/delete_descendants_dialog_component.html.erb b/app/components/work_packages/delete_descendants_dialog_component.html.erb index 67b75dcea49f..43a28e3b757c 100644 --- a/app/components/work_packages/delete_descendants_dialog_component.html.erb +++ b/app/components/work_packages/delete_descendants_dialog_component.html.erb @@ -58,7 +58,7 @@ See COPYRIGHT and LICENSE files for more details. <% end %> <% if variant == :undeletable %> <%= render(Primer::Alpha::Banner.new(mb: 2, scheme: :warning, icon: :alert)) do %> - <%# helpers.t, not I18n.t: only the Rails helper honours the _html suffix %> + <%# helpers.t, not I18n.t: only the Rails helper honors the _html suffix %> <%= helpers.t( "work_packages.delete_dialog.#{undeletable_warning_key}", count: undeletable_count, diff --git a/app/components/work_packages/status_badge_component.rb b/app/components/work_packages/status_badge_component.rb index e06af72cd55d..c6b53ddcdd49 100644 --- a/app/components/work_packages/status_badge_component.rb +++ b/app/components/work_packages/status_badge_component.rb @@ -55,7 +55,7 @@ def before_render # A read-only status forbids every attribute write except the status itself # ({WorkPackages::BaseContract#readonly_attributes_unchanged}), which is not - # something the badge's colour and name convey on their own. The lock says so, + # something the badge's color and name convey on their own. The lock says so, # matching the leading visual {WorkPackages::StatusButtonComponent} already # gives read-only options in the status dropdown. # diff --git a/app/controllers/admin/settings/custom_fields_base_controller.rb b/app/controllers/admin/settings/custom_fields_base_controller.rb index d85d4e8f483d..7e771feba8f9 100644 --- a/app/controllers/admin/settings/custom_fields_base_controller.rb +++ b/app/controllers/admin/settings/custom_fields_base_controller.rb @@ -29,7 +29,7 @@ module Admin module Settings - # Shared behaviour for the dedicated per-type custom field admin pages + # Shared behavior for the dedicated per-type custom field admin pages class CustomFieldsBaseController < ::Admin::SettingsController include ::CustomFields::SharedActions include ::CustomFields::AttributeHelpTextActions diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 48ba0a655852..9767d76e1dcb 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -396,7 +396,7 @@ def default_template(action_name = self.action_name) return view_paths.find_template(default_template_name(action_name), "api") rescue ::ActionView::MissingTemplate # the api template was not found - # fallback to the default behaviour + # fallback to the default behavior end end super diff --git a/app/controllers/work_packages/auto_completes_controller.rb b/app/controllers/work_packages/auto_completes_controller.rb index 9ca922cbeed0..e87edbd42318 100644 --- a/app/controllers/work_packages/auto_completes_controller.rb +++ b/app/controllers/work_packages/auto_completes_controller.rb @@ -59,7 +59,7 @@ def wp_hashes_with_string(work_packages) # `displayId` collapses to the numeric id in classic mode and to the # semantic identifier in semantic mode. The CKEditor mention plugin # reads it to insert `#PROJ-7` (or `#1234`) into the markdown source. - # Stringified for parity with APIv3 (`WorkPackageRepresenter` serialises + # Stringified for parity with APIv3 (`WorkPackageRepresenter` serializes # `displayId` as a string). work_package.attributes.merge( "to_s" => work_package.to_s, diff --git a/app/forms/projects/life_cycle/form.rb b/app/forms/projects/life_cycle/form.rb index 235c1eeb9e59..18b391fa486b 100644 --- a/app/forms/projects/life_cycle/form.rb +++ b/app/forms/projects/life_cycle/form.rb @@ -138,7 +138,7 @@ def field_type # behaves totally different than all other browsers and destroys the behavior of the datepicker # Given a date field with no value: When Safari opens its native datepicker, the first thing it does is to # set the date to Today. And not only in the datepicker but directly in the field. - # This behaviour has however consequences: + # This behavior has however consequences: # * The "reset" button in the datepicker does not clear the input (as the other browsers do it) but it resets # it to the original value it had when you opened it. So if the value was empty, it sets it back to empty. # If the value was set before, you cannot clear it, but only set it back to that value. diff --git a/app/helpers/work_packages_helper.rb b/app/helpers/work_packages_helper.rb index f3514463256a..62203cc030f3 100644 --- a/app/helpers/work_packages_helper.rb +++ b/app/helpers/work_packages_helper.rb @@ -143,7 +143,7 @@ def work_package_versions_label end # Presented value for the version(s) attribute, read from target_versions. - # Legacy behaviour surfaces the single associated version; with the feature on + # Legacy behavior surfaces the single associated version; with the feature on # it lists all target versions, ordered by name for a stable rendering. def work_package_versions_value(work_package) if Setting::WorkPackageMultipleVersions.active? diff --git a/app/models/attachment.rb b/app/models/attachment.rb index e2fdfbed54b0..443cd12e98d3 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -120,7 +120,7 @@ def content_disposition(include_filename: true) end # Returns the Content-Type to use when serving this file inline in a browser. - # Text files are normalised to text/plain (prevents script execution) with an + # Text files are normalized to text/plain (prevents script execution) with an # explicit charset. Non-inlineable files get application/octet-stream so the # browser is forced to download them. def served_content_type @@ -136,7 +136,7 @@ def served_content_type # Returns the content type to use when serving the file to a browser. # For text files, ensures a charset is always present so browsers don't # fall back to ISO-8859-1. Preserves the real MIME subtype (e.g. text/x-ruby) - # unlike served_content_type which normalises to text/plain for security. + # unlike served_content_type which normalizes to text/plain for security. def serving_content_type return content_type unless is_text? diff --git a/app/models/capabilities/scopes/default.rb b/app/models/capabilities/scopes/default.rb index df18e45d44ef..6f746d70a88f 100644 --- a/app/models/capabilities/scopes/default.rb +++ b/app/models/capabilities/scopes/default.rb @@ -32,7 +32,7 @@ module Default extend ActiveSupport::Concern class_methods do - # Currently, this does not reflect the behaviour present in the backend that every permission in at least one project + # Currently, this does not reflect the behavior present in the backend that every permission in at least one project # leads to having that permission in the global context as well. Hopefully, this is not necessary to be added. def default capabilities_sql = <<~SQL.squish diff --git a/app/models/custom_field/sectionable.rb b/app/models/custom_field/sectionable.rb index a6314166e9aa..46c739623ee4 100644 --- a/app/models/custom_field/sectionable.rb +++ b/app/models/custom_field/sectionable.rb @@ -27,7 +27,7 @@ # See COPYRIGHT and LICENSE files for more details. #++ -# Shared behaviour for custom fields that belong to a CustomFieldSection and +# Shared behavior for custom fields that belong to a CustomFieldSection and # maintain their position within that section via attribute_order. # Include in UserCustomField and ProjectCustomField. module CustomField::Sectionable diff --git a/app/models/exports/pdf/common/attachments.rb b/app/models/exports/pdf/common/attachments.rb index a133c8df4492..69a786c5348f 100644 --- a/app/models/exports/pdf/common/attachments.rb +++ b/app/models/exports/pdf/common/attachments.rb @@ -31,7 +31,7 @@ module Exports::PDF::Common::Attachments # Deliberately not MiniMagick::Image#resize: that shells out to `mogrify`, which - # since ImageMagick 7.1.2-32 writes to a randomised temp name (`-~`). + # since ImageMagick 7.1.2-32 writes to a randomized temp name (`-~`). # ImageMagick derives the coder from that name's extension, so the module policy in # config/imagemagick/policy.xml denies it. # https://github.com/ImageMagick/ImageMagick/issues/8995 @@ -128,7 +128,7 @@ def extract_first_webp_frame(filename) # rubocop:disable Metrics/AbcSize, Metric # followed by the frame image data as a VP8 / VP8L / VP8X chunk. # Wrap it in a minimal RIFF/WEBP container to create a single-frame WebP. frame_chunk = data[pos + 8 + 16, chunk_size - 16] - # Reject frames whose payload isn't a recognised WebP bitstream type + # Reject frames whose payload isn't a recognized WebP bitstream type next unless webp_type.map(&:b).include?(frame_chunk[0, 4]) riff_size = 4 + frame_chunk.bytesize # "WEBP" + frame data diff --git a/app/models/group.rb b/app/models/group.rb index 464fbc96ac34..f4b4a1f81462 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -164,7 +164,7 @@ def self.scim_attributes_map # For now raises exception in case of group as a member arrival. raise Scimitar::InvalidSyntaxError.new("Unsupported type #{type.inspect}") else - raise Scimitar::InvalidSyntaxError.new("Unrecognised type #{type.inspect}") + raise Scimitar::InvalidSyntaxError.new("Unrecognized type #{type.inspect}") end } } diff --git a/app/models/project_custom_field_section.rb b/app/models/project_custom_field_section.rb index d873fec06658..ee7b196caa26 100644 --- a/app/models/project_custom_field_section.rb +++ b/app/models/project_custom_field_section.rb @@ -45,7 +45,7 @@ def self.with_available_fields_for(project) # position and the fields within each section ordered by attribute_order. # Sections that end up with no ordered field are dropped. # Returns [[section, [ordered_cfs]], ...]. Two SQL queries: the given relation - # is materialised once, then the relevant sections are loaded. + # is materialized once, then the relevant sections are loaded. def self.grouped_in_order(custom_fields) cfs_by_section_id = custom_fields.group_by(&:custom_field_section_id) diff --git a/app/models/projects/custom_fields.rb b/app/models/projects/custom_fields.rb index 61c0720a8d01..8e5a2a478ce7 100644 --- a/app/models/projects/custom_fields.rb +++ b/app/models/projects/custom_fields.rb @@ -65,9 +65,9 @@ def available_custom_fields_for_variant(variant_id) # Note: # # The UI allows the enabled attributes only via the project_custom_field_project_mappings. - # The API still provides the old behaviour where all the custom fields are available regardless - # of the enabled mapping. Once the api behaviour is aligned to the UI behaviour, this method - # can be removed in favour of the available_custom_fields. + # The API still provides the old behavior where all the custom fields are available regardless + # of the enabled mapping. Once the api behavior is aligned to the UI behavior, this method + # can be removed in favor of the available_custom_fields. # As a future improvement a flag `via_api=true` can be set on the project when the # modification happens via the api, then set the available_custom_fields accordingly. This allows # the extension to be completely removed from the acts_as_customizable plugin. diff --git a/app/models/projects/identifier.rb b/app/models/projects/identifier.rb index ff7a0fecc25f..8783216398f8 100644 --- a/app/models/projects/identifier.rb +++ b/app/models/projects/identifier.rb @@ -71,7 +71,7 @@ module Projects::Identifier # slug column to its previous value when validation fails. With slug_column: :identifier, # this would reset a manually-set identifier back to nil on new records. Since the # identifier is managed by our own callbacks and user input (not FriendlyId's slug generator), - # we disable this behaviour entirely. + # we disable this behavior entirely. # Must be inside `included` to override FriendlyId::Slugged in the MRO. def unset_slug_if_invalid; end end diff --git a/app/models/queries/named_references/filters/member_exists.rb b/app/models/queries/named_references/filters/member_exists.rb index b61f48193dc7..2870a09d1600 100644 --- a/app/models/queries/named_references/filters/member_exists.rb +++ b/app/models/queries/named_references/filters/member_exists.rb @@ -31,7 +31,7 @@ module Queries::NamedReferences::Filters::MemberExists private def member_exists(condition, binds, extra_joins: nil) - honouring_negation(member_exists_sql(condition, extra_joins:), binds) + honoring_negation(member_exists_sql(condition, extra_joins:), binds) end def member_exists_sql(condition, extra_joins: nil) @@ -46,7 +46,7 @@ def member_exists_sql(condition, extra_joins: nil) SQL end - def honouring_negation(sql, binds) + def honoring_negation(sql, binds) [negated? ? "NOT (#{sql})" : "(#{sql})", binds] end diff --git a/app/models/queries/named_references/filters/project_filter.rb b/app/models/queries/named_references/filters/project_filter.rb index d000e680a674..1759a736ac3b 100644 --- a/app/models/queries/named_references/filters/project_filter.rb +++ b/app/models/queries/named_references/filters/project_filter.rb @@ -39,7 +39,7 @@ def where used_in = member_exists_sql("applications.project_id IN (:project_ids)", extra_joins: "JOIN project_types applications ON applications.variant_id = members.id") - honouring_negation(conditions(used_in).join(" OR "), { project_ids: integer_values }) + honoring_negation(conditions(used_in).join(" OR "), { project_ids: integer_values }) end private diff --git a/app/models/repository.rb b/app/models/repository.rb index 2fd925752ae5..366389f83f10 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -213,7 +213,7 @@ def latest_changeset end # Returns the latest changesets for +path+ - # Default behaviour is to search in cached changesets + # Default behavior is to search in cached changesets def latest_changesets(path, _rev, limit = 10) if path.blank? changesets.includes(:user) diff --git a/app/models/user_custom_field_section.rb b/app/models/user_custom_field_section.rb index 5ae5c84ee29e..c9f6bc0b329b 100644 --- a/app/models/user_custom_field_section.rb +++ b/app/models/user_custom_field_section.rb @@ -49,7 +49,7 @@ class UserCustomFieldSection < CustomFieldSection # Returns [[section, [ordered_cfs]], ...] for the given user's filled, visible # custom fields. Pass visible_on_user_card: true to restrict to hover-card fields. # Two SQL queries: one for sections, one for the relevant CFs (both use filled_cf_ids - # as a subquery so no values are materialised into Ruby memory). + # as a subquery so no values are materialized into Ruby memory). def self.with_filled_fields_for(user, visible_on_user_card: nil) # rubocop:disable Metrics/AbcSize cf_scope = UserCustomField.visible(User.current) cf_scope = cf_scope.where(visible_on_user_card: true) if visible_on_user_card diff --git a/app/models/work_package/semantic_identifier.rb b/app/models/work_package/semantic_identifier.rb index 23691673531b..609c7823167b 100644 --- a/app/models/work_package/semantic_identifier.rb +++ b/app/models/work_package/semantic_identifier.rb @@ -214,7 +214,7 @@ def restore_identifier_after_failed_move # Override ActiveRecord's default `to_param` so Rails URL helpers # (work_package_path, polymorphic_path, form_for, etc.) automatically # produce semantic-id URLs in semantic mode. In classic mode display_id - # returns the integer primary key, so this is behaviourally identical + # returns the integer primary key, so this is behaviorally identical # to the inherited `id&.to_s`. # # API v3 deliberately bypasses this by passing `id:` kwargs explicitly diff --git a/app/models/work_packages/journal_timeline.rb b/app/models/work_packages/journal_timeline.rb index c7081a1438ac..9e28a60b95bf 100644 --- a/app/models/work_packages/journal_timeline.rb +++ b/app/models/work_packages/journal_timeline.rb @@ -41,7 +41,7 @@ # .group(:tick) # .sum(:story_points) # => { Time(UTC) => Float } # -# Entries are read-only and carry no work package behaviour; see Entry. +# Entries are read-only and carry no work package behavior; see Entry. # # A single tick is the frozen-snapshot case and needs no separate code path. # diff --git a/app/models/workflows/matrix_context.rb b/app/models/workflows/matrix_context.rb index 049bf4ba9102..58afb57d3c29 100644 --- a/app/models/workflows/matrix_context.rb +++ b/app/models/workflows/matrix_context.rb @@ -49,7 +49,7 @@ def initialize(workflow:, variant: nil, scope_project: nil, tab: nil, role_ids: @displayed_status_ids = status_ids_from(displayed_status_ids) end - # Normalised, so that rendering, the status query and persistence cannot disagree + # Normalized, so that rendering, the status query and persistence cannot disagree # about which tab is being edited. The raw value is absent whenever the matrix is # opened without one. def tab diff --git a/app/seeders/development_data/forums.yml b/app/seeders/development_data/forums.yml index 141d9fd58832..f6712cc0ee9c 100644 --- a/app/seeders/development_data/forums.yml +++ b/app/seeders/development_data/forums.yml @@ -211,7 +211,7 @@ forums: Let's agree on **scope** and dates for 17.0: - Feature freeze at the end of the month - - Two weeks of stabilisation + - Two weeks of stabilization - Release on the first Tuesday after that Anything blocking? diff --git a/app/seeders/development_data/user_custom_fields_seeder.rb b/app/seeders/development_data/user_custom_fields_seeder.rb index 2908f1fc4d7f..858a4efac16f 100644 --- a/app/seeders/development_data/user_custom_fields_seeder.rb +++ b/app/seeders/development_data/user_custom_fields_seeder.rb @@ -29,7 +29,7 @@ module DevelopmentData # Seeds a handful of user attributes that fit the demo project's mix of - # conference organisation and software delivery work. The values are assigned + # conference organization and software delivery work. The values are assigned # to the users created by the DepartmentSeeder. class UserCustomFieldsSeeder < Seeder JOB_TITLES = [ diff --git a/app/services/base_services/set_attributes.rb b/app/services/base_services/set_attributes.rb index a5e8542fb6f3..765a3305f363 100644 --- a/app/services/base_services/set_attributes.rb +++ b/app/services/base_services/set_attributes.rb @@ -98,7 +98,7 @@ def prepare_model(model) def custom_field_ids_to_validate(params) # Leave custom_field_ids_to_validate empty when the model is not persisted, - # allowing the default behaviour to set the id's to be validated in the + # allowing the default behavior to set the id's to be validated in the # model.custom_values_to_validate method. model.persisted? ? custom_field_ids_from(params) : [] end diff --git a/app/services/grids/copy_service.rb b/app/services/grids/copy_service.rb index 111a34744dcb..ddb60a4709a2 100644 --- a/app/services/grids/copy_service.rb +++ b/app/services/grids/copy_service.rb @@ -32,7 +32,7 @@ module Grids # Base class for any grid-based model's copy service. class CopyService < ::BaseServices::Copy ## - # DependentServices can be specialised through a class in the + # DependentServices can be specialized through a class in the # concrete model's namespace, e.g. Boards::Copy::WidgetsDependentService. def self.copy_dependencies [ diff --git a/app/services/import/jira_custom_field/context_signature.rb b/app/services/import/jira_custom_field/context_signature.rb index 88aabff538a6..b98e54232595 100644 --- a/app/services/import/jira_custom_field/context_signature.rb +++ b/app/services/import/jira_custom_field/context_signature.rb @@ -29,7 +29,7 @@ module Import module JiraCustomField - # Identifies a Jira field context by the option set it allows, so that a context group can be recognised across rebuilds + # Identifies a Jira field context by the option set it allows, so that a context group can be recognized across rebuilds module ContextSignature module_function diff --git a/app/services/import/jira_import_journals.rb b/app/services/import/jira_import_journals.rb index ac0474a30423..50328023e113 100644 --- a/app/services/import/jira_import_journals.rb +++ b/app/services/import/jira_import_journals.rb @@ -112,7 +112,7 @@ def recorded_attachable_pairs(journal_ids) end # Journals::CreateService keeps the journals of a journable strictly ordered in time: a - # timestamp that is not newer than the preceding journal's is discarded in favour of the + # timestamp that is not newer than the preceding journal's is discarded in favor of the # current time. Entries sharing a Jira timestamp, with each other or with the creation # journal, would therefore be stamped with the import date, so they are spaced out by the # smallest step a timestamp column can represent. diff --git a/app/services/import/jira_wiki_markup/renderer.rb b/app/services/import/jira_wiki_markup/renderer.rb index 8a2b44aa9ca9..3edc3df88921 100644 --- a/app/services/import/jira_wiki_markup/renderer.rb +++ b/app/services/import/jira_wiki_markup/renderer.rb @@ -160,7 +160,7 @@ def cell_renderer end # Markdown has no panel, so it becomes its title above its content. Jira does - # not parse the title as wiki markup, so it is emphasised as a plain label. + # not parse the title as wiki markup, so it is emphasized as a plain label. def render_panel(node) content = render_inline(node.children) title = node.params["title"] diff --git a/app/services/incoming_emails/dispatch_service.rb b/app/services/incoming_emails/dispatch_service.rb index 62ab5315a67e..30f85a0aa86c 100644 --- a/app/services/incoming_emails/dispatch_service.rb +++ b/app/services/incoming_emails/dispatch_service.rb @@ -173,7 +173,7 @@ def handle_unknown_user log "could not create account for [#{sender_email}]", :error end else - # Default behaviour, emails from unknown users are ignored + # Default behavior, emails from unknown users are ignored log "ignoring email from unknown user [#{sender_email}]", report: false end end diff --git a/app/services/project_identifiers/classic_identifier_suggestion_generator.rb b/app/services/project_identifiers/classic_identifier_suggestion_generator.rb index 5e72eeaae247..f8cc9d87ea26 100644 --- a/app/services/project_identifiers/classic_identifier_suggestion_generator.rb +++ b/app/services/project_identifiers/classic_identifier_suggestion_generator.rb @@ -51,7 +51,7 @@ def restore_identifier(project) # Generates a unique classic-format identifier from +name+. # Appends -1, -2, … until a slug not in the taken set is found. - # Falls back to a randomised +FALLBACK_BASE+ slug when +name+ produces no valid slug. + # Falls back to a randomized +FALLBACK_BASE+ slug when +name+ produces no valid slug. def suggest_identifier(name) base = slugify(name) || fallback_base diff --git a/app/services/projects/creation_wizard/upload_artifact_service.rb b/app/services/projects/creation_wizard/upload_artifact_service.rb index 2c548d2069a2..2036ce95913a 100644 --- a/app/services/projects/creation_wizard/upload_artifact_service.rb +++ b/app/services/projects/creation_wizard/upload_artifact_service.rb @@ -76,7 +76,7 @@ def add_attachment_locally end # Creating the attachment does not create a work package - # journal on its own, so the artefact would only surface in the Activity tab after + # journal on its own, so the artifact would only surface in the Activity tab after # the next unrelated change. Create the journal explicitly so it shows up right away. def journalize_attachment(author) OpenProject::Mutex.with_advisory_lock_transaction(artifact_work_package) do diff --git a/app/services/work_package_types/excluded_elements/base_service.rb b/app/services/work_package_types/excluded_elements/base_service.rb index c874d53ef8a3..dd2db5df5e2e 100644 --- a/app/services/work_package_types/excluded_elements/base_service.rb +++ b/app/services/work_package_types/excluded_elements/base_service.rb @@ -58,7 +58,7 @@ def updated_elements(_current, _requested) private # The exclusions are an array column, so the read-modify-write needs a lock. The lock is - # taken on the variant rather than per aspect, which serialises concurrent edits to + # taken on the variant rather than per aspect, which serializes concurrent edits to # unrelated aspects of the same variant. def narrow(aspect) column = :"#{TypeVariant.validated_excludable_aspect(aspect)}_excluded_elements" @@ -78,7 +78,7 @@ def next_elements(column) end # Element keys are aspect-specific strings (see TypeVariant::ConfigurationLinkable), so - # they are only normalised here — an unknown key is inert rather than invalid, and the + # they are only normalized here — an unknown key is inert rather than invalid, and the # aspect's reader is what interprets them. def elements_param Array(params[:elements]).map { |element| element.to_s.strip }.compact_blank diff --git a/app/services/work_packages/activities_tab/comment_service.rb b/app/services/work_packages/activities_tab/comment_service.rb index 28377f1c2a1a..d4a55a6525f1 100644 --- a/app/services/work_packages/activities_tab/comment_service.rb +++ b/app/services/work_packages/activities_tab/comment_service.rb @@ -30,7 +30,7 @@ module WorkPackages module ActivitiesTab # Builds and runs the service behind a comment write, resolving the note body - # (mentions are sanitised only for internal comments) and coercing the request + # (mentions are sanitized only for internal comments) and coercing the request # flags. Callers handle the returned ServiceResult; this owns how a comment is # written. class CommentService diff --git a/app/services/work_packages/activities_tab/filters.rb b/app/services/work_packages/activities_tab/filters.rb index 58353b7fbf14..9502b8b4a25d 100644 --- a/app/services/work_packages/activities_tab/filters.rb +++ b/app/services/work_packages/activities_tab/filters.rb @@ -38,7 +38,7 @@ module Filters VALUES = [ALL, ONLY_COMMENTS, ONLY_CHANGES, HIDE_MEETINGS].freeze # Coerces an incoming filter param (string or symbol) to a known mode, - # falling back to ALL for anything unrecognised. + # falling back to ALL for anything unrecognized. def self.cast(value) VALUES.find { it.to_s == value.to_s } || ALL end diff --git a/app/services/work_packages/activities_tab/paginator.rb b/app/services/work_packages/activities_tab/paginator.rb index d116ebdedf91..6abf6d4627ab 100644 --- a/app/services/work_packages/activities_tab/paginator.rb +++ b/app/services/work_packages/activities_tab/paginator.rb @@ -45,7 +45,7 @@ # that wouldn't match the filter still resolves. # # Internally, the activities feed is a single Journal relation paginated by -# pagy at the database level. Only the page slice is materialised — eager-loaded +# pagy at the database level. Only the page slice is materialized — eager-loaded # and wrapped — keeping per-request cost independent of total history size. # # @param work_package [WorkPackage] The work package to paginate activities for diff --git a/app/services/work_packages/import/csv/file_problem.rb b/app/services/work_packages/import/csv/file_problem.rb index 863e61dd2c62..25e13b52c5af 100644 --- a/app/services/work_packages/import/csv/file_problem.rb +++ b/app/services/work_packages/import/csv/file_problem.rb @@ -32,7 +32,7 @@ module Import module CSV # Something about the file as a whole that stops it being imported, rather than a column or a # row. It has no column and no header, which is what tells it apart from a HeaderMap::Problem - # once both have been serialised into the job status payload. + # once both have been serialized into the job status payload. FileProblem = Data.define(:message) end end diff --git a/app/services/work_packages/import/csv/header_sniffer.rb b/app/services/work_packages/import/csv/header_sniffer.rb index 6bf085512a44..89def055cdd2 100644 --- a/app/services/work_packages/import/csv/header_sniffer.rb +++ b/app/services/work_packages/import/csv/header_sniffer.rb @@ -31,7 +31,7 @@ module WorkPackages module Import module CSV # Finds the header row of a CSV and the separator it was written with, by reading the first - # populated row with each candidate and counting the headers a HeaderMap recognises. + # populated row with each candidate and counting the headers a HeaderMap recognizes. class HeaderSniffer # Excel writes ; on a German locale and \t when saving as "Unicode text". SEPARATORS = %W[, ; \t].freeze diff --git a/app/services/work_packages/import/csv/import_service.rb b/app/services/work_packages/import/csv/import_service.rb index 71b4e55f3280..2de2604afcf0 100644 --- a/app/services/work_packages/import/csv/import_service.rb +++ b/app/services/work_packages/import/csv/import_service.rb @@ -141,7 +141,7 @@ def record(created, row, columns, progress) progress.created_ids << created.result.id write_columns(created.result, columns) mark_as_imported(created.result, columns) - summarise(progress, created.result, columns) + summarize(progress, created.result, columns) else progress.problems.concat(problems_for(row, created.errors)) end @@ -216,7 +216,7 @@ def saved_view(ids) def view_name = I18n.t("work_packages.import.csv.view_name", datetime: format_time(Time.current)) - def summarise(progress, work_package, columns) + def summarize(progress, work_package, columns) count_values(progress.counts_by_attribute, work_package) progress.account_ids.merge(account_ids(work_package, columns)) progress.dated_count += 1 if work_package.start_date || work_package.due_date diff --git a/app/services/work_packages/type_artefact_export/export_on_status_change_service.rb b/app/services/work_packages/type_artefact_export/export_on_status_change_service.rb index 8ccaa0fcc45d..de6eb16845e1 100644 --- a/app/services/work_packages/type_artefact_export/export_on_status_change_service.rb +++ b/app/services/work_packages/type_artefact_export/export_on_status_change_service.rb @@ -57,7 +57,7 @@ def call!(changes:) export_and_store! rescue ::Exports::ExportError => e - Rails.logger.error("Artefact export failed for work package ##{work_package.id}: #{e.message}") + Rails.logger.error("Artifact export failed for work package ##{work_package.id}: #{e.message}") end private @@ -82,7 +82,7 @@ def store_as_attachment(export) journalize_attachment(attachment.author) else Rails.logger.error( - "Failed to attach artefact to work package ##{work_package.id}: " \ + "Failed to attach artifact to work package ##{work_package.id}: " \ "#{attachment.errors.full_messages.join(', ')}" ) end @@ -98,7 +98,7 @@ def uploaded_file(export) end # Creating the attachment through the association does not create a work package - # journal on its own, so the artefact would only surface in the Activity tab after + # journal on its own, so the artifact would only surface in the Activity tab after # the next unrelated change. Create the journal explicitly so it shows up right away. def journalize_attachment(author) OpenProject::Mutex.with_advisory_lock_transaction(work_package) do @@ -117,7 +117,7 @@ def upload_to_storage(export) result = upload(export, project_storage) return if result.success? - Rails.logger.error("Artefact upload failed for work package ##{work_package.id}: #{result.message}") + Rails.logger.error("Artifact upload failed for work package ##{work_package.id}: #{result.message}") end def upload(export, project_storage) @@ -133,7 +133,7 @@ def upload(export, project_storage) def log_missing_storage Rails.logger.info( "No automatically-managed Nextcloud storage for project ##{project.id}; " \ - "skipping artefact upload for work package ##{work_package.id}" + "skipping artifact upload for work package ##{work_package.id}" ) end diff --git a/app/views/ldap_auth_sources/_form.html.erb b/app/views/ldap_auth_sources/_form.html.erb index b1e12445e5ff..cc859b8acf5a 100644 --- a/app/views/ldap_auth_sources/_form.html.erb +++ b/app/views/ldap_auth_sources/_form.html.erb @@ -28,7 +28,7 @@ See COPYRIGHT and LICENSE files for more details. <%# needs locals: - f: labelled form builder + f: labeled form builder %> <%= error_messages_for :ldap_auth_source %> diff --git a/app/workers/import/jira_create_project_job/jira_import_custom_fields.rb b/app/workers/import/jira_create_project_job/jira_import_custom_fields.rb index 7b21cd623c19..52f8ef3eece4 100644 --- a/app/workers/import/jira_create_project_job/jira_import_custom_fields.rb +++ b/app/workers/import/jira_create_project_job/jira_import_custom_fields.rb @@ -314,7 +314,7 @@ def mapped_custom_field(jira_field, context_group) # Custom fields are created once per run by JiraCreateCustomFieldsJob, which records the # mapping the per-project jobs read instead of creating anything themselves. A per-project # job only gets here when that mapping is missing, eg. Jira < 9.3, and those jobs run concurrently, - # so creation still has to be serialised. + # so creation still has to be serialized. def locked_find_or_create_custom_field(jira_field, builder) jira_import = jira_field.jira_import OpenProject::Mutex.with_advisory_lock(jira_import, lock_key) do diff --git a/app/workers/work_packages/workflow_job.rb b/app/workers/work_packages/workflow_job.rb index 03a00b57f0b7..ca8c138fb781 100644 --- a/app/workers/work_packages/workflow_job.rb +++ b/app/workers/work_packages/workflow_job.rb @@ -38,7 +38,7 @@ def perform(journal, changes) # The job runs with a clean request store, so User.current would be # Anonymous here. Act as the user who caused the journalized change so the - # generated artefacts (attachment and its journal entry) are attributed to them. + # generated artifacts (attachment and its journal entry) are attributed to them. User.execute_as(journal.user) do services.each do |service| service.new(current_user: journal.user, work_package:).call!(changes:) diff --git a/config/application.rb b/config/application.rb index 819239a7ad17..1fd1415a1603 100644 --- a/config/application.rb +++ b/config/application.rb @@ -82,7 +82,7 @@ class Application < Rails::Application # Enable raising on assignment to attr_readonly attributes. The previous # behavior would allow assignment but silently not persist changes to the # database. - # This is a rails 7.1 behaviour. + # This is a rails 7.1 behavior. # Ideally this should be defined in the `config/initializers/new_framework_defaults_7_1.rb` # file, but since there is a bug, that file is not loaded correctly in the production environment. # Once [the issue](https://community.openproject.org/wp/59474) is solved, this configuration can diff --git a/config/initializers/new_framework_defaults_7_1.rb b/config/initializers/new_framework_defaults_7_1.rb index bbf134f9c45f..31f9a5422de2 100644 --- a/config/initializers/new_framework_defaults_7_1.rb +++ b/config/initializers/new_framework_defaults_7_1.rb @@ -239,7 +239,7 @@ ### # Run `after_commit` and `after_*_commit` callbacks in the order they are defined in a model. -# This matches the behaviour of all other callbacks. +# This matches the behavior of all other callbacks. # In previous versions of Rails, they ran in the inverse order. #++ # Rails.application.config.active_record.run_after_transaction_callbacks_in_order_defined = true diff --git a/config/initializers/user_invitation.rb b/config/initializers/user_invitation.rb index 9299b7aba4d9..126776a9d929 100644 --- a/config/initializers/user_invitation.rb +++ b/config/initializers/user_invitation.rb @@ -29,7 +29,7 @@ Rails.application.config.after_initialize do ## - # The default behaviour is to send the user a sign-up mail + # The default behavior is to send the user a sign-up mail # when they were invited. OpenProject::Notifications.subscribe UserInvitation::Events.user_invited do |token| Mails::InvitationJob.perform_later(token) diff --git a/db/migrate/20260921100000_add_linked_aspects_to_type_variants.rb b/db/migrate/20260921100000_add_linked_aspects_to_type_variants.rb index 417efbf0da63..0f043198df77 100644 --- a/db/migrate/20260921100000_add_linked_aspects_to_type_variants.rb +++ b/db/migrate/20260921100000_add_linked_aspects_to_type_variants.rb @@ -29,7 +29,7 @@ # A variant that owned an aspect (no '_source_id') stays independent. A variant that # inherited one - from any source, base or otherwise - is linked to its own base instead, dropping -# the old model's arbitrary inheritance in favour of parent-only links. +# the old model's arbitrary inheritance in favor of parent-only links. class AddLinkedAspectsToTypeVariants < ActiveRecord::Migration[8.1] ASPECTS = %w[pdf_export defaults form_configuration project_attributes].freeze diff --git a/docker/dev/xwiki/README.md b/docker/dev/xwiki/README.md index 7832c8e3e635..a37dc3e39e4c 100644 --- a/docker/dev/xwiki/README.md +++ b/docker/dev/xwiki/README.md @@ -6,7 +6,7 @@ A minimal setup guide for using a local XWiki inside a docker stack. The example - Up the docker stack with `docker compose --project-directory docker/dev/xwiki/ up -d` - Go to https://xwiki.local -- Wait for initialisation to succeed +- Wait for initialization to succeed - Create admin user - Select XWiki standard flavor and install it — **this is highly recommended** as many XWiki features and the OpenProject plugin depend on it diff --git a/docker/prod/migrate b/docker/prod/migrate index 4b1e07e2262d..47c0e89ebba4 100755 --- a/docker/prod/migrate +++ b/docker/prod/migrate @@ -6,7 +6,7 @@ SCHEMA_LOADED=$(psql -qtAX -v ON_ERROR_STOP=1 "$DB_URL" -c \ "SELECT to_regclass('schema_migrations') IS NOT NULL") if [[ "$SCHEMA_LOADED" = "f" ]]; then - echo "Initialising database" + echo "Initializing database" DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:schema:load else echo "Executing database migrations..." diff --git a/extensions/blocknote-extensions/lib/components/CreateWorkPackage/CreateWorkPackageModal.tsx b/extensions/blocknote-extensions/lib/components/CreateWorkPackage/CreateWorkPackageModal.tsx index f105e1d97697..578e57568fb2 100644 --- a/extensions/blocknote-extensions/lib/components/CreateWorkPackage/CreateWorkPackageModal.tsx +++ b/extensions/blocknote-extensions/lib/components/CreateWorkPackage/CreateWorkPackageModal.tsx @@ -143,7 +143,7 @@ export const CreateWorkPackageModal = ({ anchorEl, initialSubject, onCreated, on isDirty, subjectClipped, loading, - initialising, + initializing, loadError, notAllowed, submitting, @@ -240,14 +240,14 @@ export const CreateWorkPackageModal = ({ anchorEl, initialSubject, onCreated, on {formError && {formError}} {primaryFields - .filter((field) => !initialising || !dependencyOf(field.key)) + .filter((field) => !initializing || !dependencyOf(field.key)) .map(renderField)} - {!initialising && extraFields.length > 0 && } + {!initializing && extraFields.length > 0 && } - {!initialising && extraFields.map(renderField)} + {!initializing && extraFields.map(renderField)} - {!initialising && unsupportedFields.length > 0 && ( + {!initializing && unsupportedFields.length > 0 && ( diff --git a/extensions/blocknote-extensions/lib/components/CreateWorkPackage/atoms.ts b/extensions/blocknote-extensions/lib/components/CreateWorkPackage/atoms.ts index a7c8381defb3..eceaaee87cb4 100644 --- a/extensions/blocknote-extensions/lib/components/CreateWorkPackage/atoms.ts +++ b/extensions/blocknote-extensions/lib/components/CreateWorkPackage/atoms.ts @@ -633,7 +633,7 @@ export const SuggestionItem = styled.div<{ $focused:boolean; $selected?:boolean background: ${({ $selected }) => ($selected ? 'var(--op-create-wp-selected-bg)' : 'var(--op-item-hover-bg)')}; } - // Forced colours drop the background, so the mark has to be an outline. + // Forced colors drop the background, so the mark has to be an outline. @media (forced-colors: active) { outline-offset: -2px; outline: ${({ $focused, $selected }) => { @@ -711,7 +711,7 @@ export const FilterMode = styled.button.attrs({ type: 'button' })<{ $active:bool /* One per level the row sits in, as OpenProject draws them: an indent as wide as the fold marker, closed by the line that ties a subtree together. Stretched - past the row's own padding so the lines of neighbouring rows meet. */ + past the row's own padding so the lines of neighboring rows meet. */ export const LevelLine = styled.span` position: relative; flex-shrink: 0; diff --git a/extensions/blocknote-extensions/lib/components/CreateWorkPackage/useCreateWorkPackageForm.ts b/extensions/blocknote-extensions/lib/components/CreateWorkPackage/useCreateWorkPackageForm.ts index 6843485d3463..b0375a9a42cf 100644 --- a/extensions/blocknote-extensions/lib/components/CreateWorkPackage/useCreateWorkPackageForm.ts +++ b/extensions/blocknote-extensions/lib/components/CreateWorkPackage/useCreateWorkPackageForm.ts @@ -34,7 +34,7 @@ export interface CreateWorkPackageFormState { isDirty:boolean; subjectClipped:boolean; loading:boolean; - initialising:boolean; + initializing:boolean; loadError:string | null; notAllowed:boolean; submitting:boolean; @@ -80,7 +80,7 @@ export function useCreateWorkPackageForm( const loading = loaded === null || loaded.project !== projectHref || loaded.type !== typeHref; - const initialising = loading && !touched; + const initializing = loading && !touched; useEffect(() => { let active = true; @@ -246,7 +246,7 @@ export function useCreateWorkPackageForm( isDirty, subjectClipped, loading, - initialising, + initializing, loadError: loading ? null : loadError, notAllowed: loading ? false : notAllowed, submitting, diff --git a/extensions/blocknote-extensions/lib/components/InlineWorkPackage/UnavailableChip.tsx b/extensions/blocknote-extensions/lib/components/InlineWorkPackage/UnavailableChip.tsx index 9d83ab81c823..5d8e98ebdb68 100644 --- a/extensions/blocknote-extensions/lib/components/InlineWorkPackage/UnavailableChip.tsx +++ b/extensions/blocknote-extensions/lib/components/InlineWorkPackage/UnavailableChip.tsx @@ -63,7 +63,7 @@ export const UnavailableChip = ({ { + it('marks every type in the list with the color of that type', async () => { await openModalOnTypeField(); await userEvent.click(page.getByLabelText('Type *')); @@ -302,7 +302,7 @@ describe('Create work package - the list a fixed set of values is picked from', expect(colorChannelsOf(dotOf('Bug'))).toEqual(['39', '174', '96']); }); - it('lines the colour of an option up with the colour of the pick', async () => { + it('lines the color of an option up with the color of the pick', async () => { await openModalOnTypeField(); await selectOptionNamed('Type *', 'Task'); @@ -319,7 +319,7 @@ describe('Create work package - the list a fixed set of values is picked from', expect(Math.round(listed.width)).toBe(Math.round(picked.width)); }); - it('leaves the lists of every other field uncoloured', async () => { + it('leaves the lists of every other field uncolored', async () => { renderEditor(); await openCreateModal(); await fillRequiredFields('Fix the header alignment'); diff --git a/extensions/blocknote-extensions/test/lib/components/integration/externalHtmlPaste.browser.test.tsx b/extensions/blocknote-extensions/test/lib/components/integration/externalHtmlPaste.browser.test.tsx index 6562eba9766e..949f0793f81b 100644 --- a/extensions/blocknote-extensions/test/lib/components/integration/externalHtmlPaste.browser.test.tsx +++ b/extensions/blocknote-extensions/test/lib/components/integration/externalHtmlPaste.browser.test.tsx @@ -11,7 +11,7 @@ import { } from '../../../../lib/components/InlineWorkPackage/externalHtml'; // Simulate a paste from an external source (e.g. Hocuspocus markdown export or -// another editor) by dispatching a ClipboardEvent carrying the serialised HTML. +// another editor) by dispatching a ClipboardEvent carrying the serialized HTML. function pasteHtml(html:string, plain:string) { const el = document.querySelector('[contenteditable]'); if (!(el instanceof HTMLElement)) { @@ -24,7 +24,7 @@ function pasteHtml(html:string, plain:string) { } describe('Paste external HTML — block work package', () => { - it('recreates a block card from serialised HTML', async () => { + it('recreates a block card from serialized HTML', async () => { renderEditor(); await userEvent.click(page.getByRole('textbox')); @@ -37,7 +37,7 @@ describe('Paste external HTML — block work package', () => { }); describe('Paste external HTML — inline work package', () => { - it('recreates an inline chip from serialised HTML', async () => { + it('recreates an inline chip from serialized HTML', async () => { renderEditor(); await userEvent.click(page.getByRole('textbox')); diff --git a/extensions/blocknote-extensions/test/lib/components/integration/inlineWorkPackagePreview.browser.test.tsx b/extensions/blocknote-extensions/test/lib/components/integration/inlineWorkPackagePreview.browser.test.tsx index 581691f2d7b5..74bc625d2770 100644 --- a/extensions/blocknote-extensions/test/lib/components/integration/inlineWorkPackagePreview.browser.test.tsx +++ b/extensions/blocknote-extensions/test/lib/components/integration/inlineWorkPackagePreview.browser.test.tsx @@ -225,7 +225,7 @@ describe('Inline chip - XXS preview indicator (touch)', () => { await expect.element(page.getByTestId('wp-preview')).not.toBeInTheDocument(); }); - it("centres the icon on the identifier's capital letters", async () => { + it("centers the icon on the identifier's capital letters", async () => { await renderChip(); const id = chipElement().querySelector('.op-bn-work-package--id')!; diff --git a/extensions/blocknote-extensions/test/lib/components/integration/workPackageSurfaceColor.browser.test.tsx b/extensions/blocknote-extensions/test/lib/components/integration/workPackageSurfaceColor.browser.test.tsx index 578463f4bb7d..7d3fba9f54f7 100644 --- a/extensions/blocknote-extensions/test/lib/components/integration/workPackageSurfaceColor.browser.test.tsx +++ b/extensions/blocknote-extensions/test/lib/components/integration/workPackageSurfaceColor.browser.test.tsx @@ -18,7 +18,7 @@ function switchToDarkScheme() { .setAttribute('data-color-scheme', 'dark'); } -describe('Work package surface colour', () => { +describe('Work package surface color', () => { afterEach(() => { document.documentElement.style.removeProperty('--bgColor-muted'); }); diff --git a/lib/api/v3/principals/not_builtin_elements.rb b/lib/api/v3/principals/not_builtin_elements.rb index 167c5381fb9b..0375afd1ab41 100644 --- a/lib/api/v3/principals/not_builtin_elements.rb +++ b/lib/api/v3/principals/not_builtin_elements.rb @@ -32,7 +32,7 @@ module NotBuiltinElements extend ::ActiveSupport::Concern included do - # There is no common representer class for all elements, we thus override the default behaviour + # There is no common representer class for all elements, we thus override the default behavior # of forwarding eager_loading preferences to the element representer self.to_eager_load = [] self.to_preload = [] diff --git a/lib/api/v3/projects/projects_api.rb b/lib/api/v3/projects/projects_api.rb index 6ebbf9ad4e81..c589a1728843 100644 --- a/lib/api/v3/projects/projects_api.rb +++ b/lib/api/v3/projects/projects_api.rb @@ -61,7 +61,7 @@ class ProjectsAPI < ::API::OpenProjectAPI # TODO: This should be scoped to only allow actual projects. # But since it and especially the NestedAPIs are established routes, # we keep it intact for all kinds of workspaces for 17.0. - # This behaviour is not documented in the API docs to nudge users to switch. + # This behavior is not documented in the API docs to nudge users to switch. @project = if current_user.admin? Project else diff --git a/lib/api/v3/utilities/custom_field_injector/link_value_getter.rb b/lib/api/v3/utilities/custom_field_injector/link_value_getter.rb index 66834d9c0e2e..db46e12986df 100644 --- a/lib/api/v3/utilities/custom_field_injector/link_value_getter.rb +++ b/lib/api/v3/utilities/custom_field_injector/link_value_getter.rb @@ -36,7 +36,7 @@ def self.link_for(custom_field) # we can't use the generated accessor (e.g. represented.send :custom_field_1) here, # because we need to generate a link even if the id does not belong to an existing - # object (that behaviour is only required for form payloads) + # object (that behavior is only required for form payloads) values = Methods.link_value_getter_values represented, custom_field if custom_field.multi_value? diff --git a/lib/api/v3/work_packages/schema/work_package_schema_representer.rb b/lib/api/v3/work_packages/schema/work_package_schema_representer.rb index b5c274a17bac..fe6690ed16e4 100644 --- a/lib/api/v3/work_packages/schema/work_package_schema_representer.rb +++ b/lib/api/v3/work_packages/schema/work_package_schema_representer.rb @@ -316,7 +316,7 @@ def initialize(schema, self_link:, **context) }, required: false - # Deprecated in favour of `targetVersions` + # Deprecated in favor of `targetVersions` # Removed from the API if multiple_versions is enabled on the instance schema_with_allowed_collection :version, value_representer: Versions::VersionRepresenter, diff --git a/lib/api/v3/work_packages/work_package_representer.rb b/lib/api/v3/work_packages/work_package_representer.rb index 159e33da2004..1b58566f3a41 100644 --- a/lib/api/v3/work_packages/work_package_representer.rb +++ b/lib/api/v3/work_packages/work_package_representer.rb @@ -549,7 +549,7 @@ def self_v3_path(*) link: ::API::V3::Principals::PrincipalRepresenterFactory .create_link_lambda(:assigned_to) - # Deprecated in favour of `targetVersions` + # Deprecated in favor of `targetVersions` # Removed from the API if multiple_versions is enabled on the instance associated_resource :version, v3_path: :version, diff --git a/lib/open_project/environment_variables_documentation.rb b/lib/open_project/environment_variables_documentation.rb index 8ccd67757b32..a5a8bc6da5c2 100644 --- a/lib/open_project/environment_variables_documentation.rb +++ b/lib/open_project/environment_variables_documentation.rb @@ -56,7 +56,7 @@ module EnvironmentVariablesDocumentation # `real_time_text_collaboration_enabled` derives its default from the two # hocuspocus settings, `default_projects_modules` from that one - as values, so - # a configured instance documents itself. Mapped to the override neutralising + # a configured instance documents itself. Mapped to the override neutralizing # each; `docs:env_vars` refuses to run while any is set. DERIVED_DEFAULT_INPUTS = { collaborative_editing_hocuspocus_url: "OPENPROJECT_COLLABORATIVE__EDITING__HOCUSPOCUS__URL=", diff --git a/lib/open_project/scm/local_path_validator.rb b/lib/open_project/scm/local_path_validator.rb index 754313217901..1e3fb8a8a74b 100644 --- a/lib/open_project/scm/local_path_validator.rb +++ b/lib/open_project/scm/local_path_validator.rb @@ -47,7 +47,7 @@ def local_path(value) case parsed.scheme&.downcase when "file" # Use the path component extracted by the URI library. - # file:////path gives parsed.path = "//path"; we normalise below. + # file:////path gives parsed.path = "//path"; we normalize below. parsed.path when nil # Bare absolute path or an authority-relative reference such as @@ -70,7 +70,7 @@ def local_path(value) # implementation-defined meaning, and three or more leading slashes # are equivalent to one. In practice File.expand_path preserves "//", # so "//path" would not match against the "/path"-rooted forbidden - # roots. Normalising here closes the remaining bypass vectors: + # roots. Normalizing here closes the remaining bypass vectors: # # ///app/repos/foo (URI::Error rescue path) # file:////app/repos/foo (parsed.path == "//app/repos/foo") diff --git a/lib/tasks/docs.rake b/lib/tasks/docs.rake index cd280113cd67..42faa7faa334 100644 --- a/lib/tasks/docs.rake +++ b/lib/tasks/docs.rake @@ -50,7 +50,7 @@ namespace :docs do Refusing to write #{documentation::DOC_PATH}: this instance has #{configured.keys.to_sentence} configured, and the defaults of default_projects_modules and real_time_text_collaboration_enabled are derived from - them. Generate on an installation that has none of them set, or neutralise them + them. Generate on an installation that has none of them set, or neutralize them for the run: RAILS_ENV=production SECRET_KEY_BASE=unused_for_docs_generation \\ diff --git a/lib/tasks/email.rake b/lib/tasks/email.rake index 12473a0527bb..748559ce3c6e 100644 --- a/lib/tasks/email.rake +++ b/lib/tasks/email.rake @@ -162,7 +162,7 @@ namespace :redmine do apop=1 use APOP authentication (default: false) delete_unprocessed=1 delete messages that could not be processed successfully from the server (default - behaviour is to leave them on the server) + behavior is to leave them on the server) #{' '} See redmine:email:receive_imap for more options and examples. END_DESC diff --git a/lib_static/open_project/notifications.rb b/lib_static/open_project/notifications.rb index c1f5c8bbab50..24cbcaf96a6c 100644 --- a/lib_static/open_project/notifications.rb +++ b/lib_static/open_project/notifications.rb @@ -75,7 +75,7 @@ def unsubscribe(name, id) end # Send a notification. - # Payload should be a Hash and might be marshalled and unmarshalled before being + # Payload should be a Hash and might be marshaled and unmarshalled before being # delivered (although it is not at the moment), so don't count on object equality # for the payload. def send(name, payload) diff --git a/lib_static/plugins/acts_as_customizable/lib/acts_as_customizable.rb b/lib_static/plugins/acts_as_customizable/lib/acts_as_customizable.rb index a989295b65ff..3f6c9beaaa4c 100644 --- a/lib_static/plugins/acts_as_customizable/lib/acts_as_customizable.rb +++ b/lib_static/plugins/acts_as_customizable/lib/acts_as_customizable.rb @@ -110,8 +110,8 @@ def available_custom_fields # The role of this method is to provide flexibility on enabling just a subset of # available_custom_fields on the UI while enabling all_available_custom_fields via the api. # A good example is the Project's attributes, the UI allows the enabled attributes only, - # and the Projects API still provides the old behaviour where all the custom fields are available. - # Once the api behaviour is aligned to the UI behaviour, this method can be removed in favor of + # and the Projects API still provides the old behavior where all the custom fields are available. + # Once the api behavior is aligned to the UI behavior, this method can be removed in favor of # the available_custom_fields method. def all_available_custom_fields @all_available_custom_fields ||= available_custom_fields diff --git a/modules/llm/app/components/llm_connections/feature_binding_component.rb b/modules/llm/app/components/llm_connections/feature_binding_component.rb index a68e6356fe52..aa41c593b3ab 100644 --- a/modules/llm/app/components/llm_connections/feature_binding_component.rb +++ b/modules/llm/app/components/llm_connections/feature_binding_component.rb @@ -47,7 +47,7 @@ def form_model end # Not named +options+: ApplicationComponent already owns that name and - # initialises it to an empty hash, which silently swallowed the memoisation. + # initializes it to an empty hash, which silently swallowed the memoisation. def model_options @model_options ||= selectable_models.call end diff --git a/modules/llm/app/components/llm_connections/models_row_component.rb b/modules/llm/app/components/llm_connections/models_row_component.rb index 389646d65399..1baabbdbe861 100644 --- a/modules/llm/app/components/llm_connections/models_row_component.rb +++ b/modules/llm/app/components/llm_connections/models_row_component.rb @@ -90,7 +90,7 @@ def deletable? end # The classes belong on the anchor, not on an inner : ".icon:before" - # carries the padding and colour, and "a.icon:hover" is what suppresses the + # carries the padding and color, and "a.icon:hover" is what suppresses the # underline. Split across two elements the row gets neither. def edit_link icon_link_to(url_helpers.edit_llm_model_path(llm_model), diff --git a/modules/llm/app/contracts/llm_connections/environment_update_contract.rb b/modules/llm/app/contracts/llm_connections/environment_update_contract.rb index 072513b3cf63..c2f4e24db120 100644 --- a/modules/llm/app/contracts/llm_connections/environment_update_contract.rb +++ b/modules/llm/app/contracts/llm_connections/environment_update_contract.rb @@ -41,7 +41,7 @@ class EnvironmentUpdateContract < BaseContract def not_configured_from_env = nil - # On a fresh installation the seed runs before any model synchronisation, so + # On a fresh installation the seed runs before any model synchronization, so # there is no catalogue to validate a default model against. A wrong id is # surfaced afterwards, the same way as a model that vanished: the binding # shows as no longer offered. diff --git a/modules/llm/app/models/llm_connection.rb b/modules/llm/app/models/llm_connection.rb index 9ae97adcbd4c..6a0f490f236b 100644 --- a/modules/llm/app/models/llm_connection.rb +++ b/modules/llm/app/models/llm_connection.rb @@ -240,7 +240,7 @@ def single_active_connection errors.add(:base, :singleton) end - # The value goes into Faraday's header serialisation unchanged, where a nested + # The value goes into Faraday's header serialization unchanged, where a nested # hash or a non-string fails at request time rather than at save time. def custom_headers_are_flat_strings return if custom_headers.blank? diff --git a/modules/llm/app/services/llm/adapters/openai.rb b/modules/llm/app/services/llm/adapters/openai.rb index 286bfe8af217..9fcdb5094112 100644 --- a/modules/llm/app/services/llm/adapters/openai.rb +++ b/modules/llm/app/services/llm/adapters/openai.rb @@ -36,7 +36,7 @@ def initialize(connection) @connection = connection end - # Normalised model cards. + # Normalized model cards. # # The raw card is kept alongside, because the fields worth having are the # non-standard ones: the OpenAI schema itself carries only id, object, diff --git a/modules/llm/app/services/llm/adapters/registry_backed.rb b/modules/llm/app/services/llm/adapters/registry_backed.rb index 541e43a0c6b7..da13ff270022 100644 --- a/modules/llm/app/services/llm/adapters/registry_backed.rb +++ b/modules/llm/app/services/llm/adapters/registry_backed.rb @@ -63,7 +63,7 @@ def models raise Llm::Errors.translate(e) end - # Nothing is queried, so there is no server to characterise. + # Nothing is queried, so there is no server to characterize. def server_flavour = connection.api_format private diff --git a/modules/llm/app/services/llm/structured_output.rb b/modules/llm/app/services/llm/structured_output.rb index 6870fd61cad0..22da5cc6c6ce 100644 --- a/modules/llm/app/services/llm/structured_output.rb +++ b/modules/llm/app/services/llm/structured_output.rb @@ -41,7 +41,7 @@ module StructuredOutput module_function # @param message [RubyLLM::Message] the answer from Chat#ask - # @raise [Llm::Errors::ParseError] when the model did not honour the schema + # @raise [Llm::Errors::ParseError] when the model did not honor the schema # @return [Hash] def parse!(message) content = message.respond_to?(:content) ? message.content : message diff --git a/modules/llm/app/services/llm/validators/model_validator.rb b/modules/llm/app/services/llm/validators/model_validator.rb index 0daeffb121ac..ee9202b248ff 100644 --- a/modules/llm/app/services/llm/validators/model_validator.rb +++ b/modules/llm/app/services/llm/validators/model_validator.rb @@ -62,7 +62,7 @@ def catalogue_fresh elsif subject.models_stale? warn_check(:catalogue_fresh, :catalogue_stale_settings) elsif fetched_at < STALE_AFTER.ago - # Context is serialised to jsonb, so a Time has to be formatted here. + # Context is serialized to jsonb, so a Time has to be formatted here. warn_check(:catalogue_fresh, :catalogue_stale, context: { fetched_at: I18n.l(fetched_at.to_date) }) else pass_check(:catalogue_fresh) diff --git a/modules/llm/app/services/llm_connections/detect_capabilities_service.rb b/modules/llm/app/services/llm_connections/detect_capabilities_service.rb index 26cc2e696bbe..6fc373041067 100644 --- a/modules/llm/app/services/llm_connections/detect_capabilities_service.rb +++ b/modules/llm/app/services/llm_connections/detect_capabilities_service.rb @@ -56,7 +56,7 @@ def detect(model_id) ServiceResult.success(result: record(model_id, result)) end - # Pre-colours the model list after a connect, without spending a request per + # Pre-colors the model list after a connect, without spending a request per # model. Everything not probed stays unknown, which never blocks. # # @return [ServiceResult] carrying the verdicts that were recorded diff --git a/modules/llm/app/services/llm_connections/sync_models_service.rb b/modules/llm/app/services/llm_connections/sync_models_service.rb index cb050b6fe45b..36be6baf1d07 100644 --- a/modules/llm/app/services/llm_connections/sync_models_service.rb +++ b/modules/llm/app/services/llm_connections/sync_models_service.rb @@ -195,7 +195,7 @@ def discard_discovered_models(discarded) # server sending "admin_context_window" of its own would have it stored # verbatim and reported as an administrator's. def merged_metadata(model, card) - raw = normalised_window(card.fetch(:raw, {})).except("admin_context_window") + raw = normalized_window(card.fetch(:raw, {})).except("admin_context_window") admin_window = model.raw_metadata["admin_context_window"] admin_window ? raw.merge("admin_context_window" => admin_window) : raw @@ -204,7 +204,7 @@ def merged_metadata(model, card) # OpenRouter and gateways following it publish the window as # +context_length+, where vLLM and SGLang report +max_model_len+, the # operator's actual limit and therefore the better figure of the two. - def normalised_window(raw) + def normalized_window(raw) return raw if raw["context_length"].blank? || raw["max_model_len"].present? raw.merge("context_window" => raw["context_length"]) diff --git a/modules/llm/app/workers/llm/detect_capabilities_job.rb b/modules/llm/app/workers/llm/detect_capabilities_job.rb index 7e1de3a13eea..65ce91c7a8d8 100644 --- a/modules/llm/app/workers/llm/detect_capabilities_job.rb +++ b/modules/llm/app/workers/llm/detect_capabilities_job.rb @@ -28,7 +28,7 @@ #++ module Llm - # Pre-colours the model list after a refresh, out of band so that fetching the + # Pre-colors the model list after a refresh, out of band so that fetching the # catalogue does not wait on one request per candidate model. class DetectCapabilitiesJob < ApplicationJob include GoodJob::ActiveJobExtensions::Concurrency diff --git a/script/ci/ai_involvement_check.sh b/script/ci/ai_involvement_check.sh index c69e727b8d0e..bdbc1a936d3a 100755 --- a/script/ci/ai_involvement_check.sh +++ b/script/ci/ai_involvement_check.sh @@ -40,7 +40,7 @@ set -e PR_BODY=$(cat) # "None/Assisted" is listed first so that it is matched as a single level; a bare -# "None" or "Assisted" is accepted as well and normalised to it. +# "None" or "Assisted" is accepted as well and normalized to it. LEVELS='None/Assisted|None|Assisted|Collaborative|Directed|Autonomous' # The template lists every level inside an HTML comment; contributors pick one diff --git a/script/jira/gen_jira_projects.rb b/script/jira/gen_jira_projects.rb index bea79361e54f..5e1599f1c32e 100755 --- a/script/jira/gen_jira_projects.rb +++ b/script/jira/gen_jira_projects.rb @@ -323,7 +323,7 @@ class JiraProjectCreator upload validation webhook workflow analytics dashboard metrics monitoring backup integration migration scheduling templating versioning filtering routing session token encryption hashing compression serialization - deserialization marshalling unmarshalling encoding decoding parsing + deserialization marshaling unmarshalling encoding decoding parsing formatting rendering templating caching queuing messaging streaming batching throttling limiting retrying timeout connection pooling transaction locking concurrency threading parallelism asynchronous diff --git a/script/order_yaml b/script/order_yaml index 30682248a8f0..f86c2137757d 100755 --- a/script/order_yaml +++ b/script/order_yaml @@ -43,7 +43,7 @@ end Pair = Data.define(:key, :value) # Text of a node's content, with block mappings recursively sorted. A blank run -# between pairs belongs to both neighbours (bottom of one, top of the next) and +# between pairs belongs to both neighbors (bottom of one, top of the next) and # is re-inserted at the new boundaries, each gap at most once; comment lines # above a key move with it def sorted(node, lines) # rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity diff --git a/spec/services/work_packages/type_artefact_export/export_on_status_change_service_spec.rb b/spec/services/work_packages/type_artefact_export/export_on_status_change_service_spec.rb index b4732205501f..dfab861f61dc 100644 --- a/spec/services/work_packages/type_artefact_export/export_on_status_change_service_spec.rb +++ b/spec/services/work_packages/type_artefact_export/export_on_status_change_service_spec.rb @@ -49,7 +49,7 @@ end describe "#call!" do - context "when the type has artefact export disabled (default off)" do + context "when the type has artifact export disabled (default off)" do it "does not export" do allow(User).to receive(:execute_as_admin) @@ -160,7 +160,7 @@ allow(Rails.logger).to receive(:error) expect { instance.call!(changes:) }.not_to raise_error - expect(Rails.logger).to have_received(:error).with(/Artefact upload failed/) + expect(Rails.logger).to have_received(:error).with(/Artifact upload failed/) end end @@ -173,12 +173,12 @@ instance.call!(changes:) expect(Storages::UploadFileService).not_to have_received(:call) - expect(Rails.logger).to have_received(:info).with(/skipping artefact upload/) + expect(Rails.logger).to have_received(:info).with(/skipping artifact upload/) end end end - context "when the type has stored artefact export settings" do + context "when the type has stored artifact export settings" do before do type.default_variant.update!(artefact_export_mode: Type::ArtefactExport::ATTACHMENT) type.default_variant.pdf_export_templates.update_settings( @@ -198,7 +198,7 @@ end end - context "when the type has no stored artefact export settings" do + context "when the type has no stored artifact export settings" do before { type.default_variant.update!(artefact_export_mode: Type::ArtefactExport::ATTACHMENT) } it "passes an empty options hash, behaving exactly as before this feature" do @@ -223,7 +223,7 @@ allow(Rails.logger).to receive(:error) expect { instance.call!(changes:) }.not_to raise_error - expect(Rails.logger).to have_received(:error).with(/Artefact export failed/) + expect(Rails.logger).to have_received(:error).with(/Artifact export failed/) end end @@ -267,7 +267,7 @@ end end - context "when the variant has stored artefact export settings and the root does not" do + context "when the variant has stored artifact export settings and the root does not" do before do type.default_variant.update!(artefact_export_mode: Type::ArtefactExport::OFF) variant.update!(artefact_export_mode: Type::ArtefactExport::ATTACHMENT) From 0e8f39b36c731b7cb6187b57a87fa727b5a2fbb2 Mon Sep 17 00:00:00 2001 From: Alexander Brandon Coles Date: Thu, 22 Oct 2026 13:02:11 +0100 Subject: [PATCH 03/11] [OP-20545] Use US spelling in frontend code Converts British spellings in comments, spec descriptions, test data, lookbook documentation and module-internal names such as neighbourItem and recognisedMobilities. Public service methods keep their spelling and are allow-listed for a follow-up rename. https://community.openproject.org/wp/OP-20545 --- frontend/doc/README.md | 2 +- frontend/doc/TESTING.md | 4 ++-- .../app/core/apiv3/paths/apiv3-resource.ts | 2 +- .../src/app/core/days/weekday.service.spec.ts | 2 +- .../global-search-input.component.spec.ts | 2 +- .../main-menu-toggle.service.spec.ts | 2 +- .../model-auth/model-auth.service.spec.ts | 2 +- .../attachments/attachments.service.spec.ts | 2 +- .../state/effects/effect-handler.decorator.ts | 2 +- .../in-app-notifications.service.spec.ts | 2 +- .../principals/principals.service.spec.ts | 2 +- .../core/state/views/views.service.spec.ts | 2 +- .../backlogs/burndown-chart.component.ts | 2 +- .../op-work-packages-calendar.service.ts | 4 ++-- .../hal-resource-notification.service.spec.ts | 2 +- .../calendar-drag-drop.service.ts | 4 ++-- .../modes/grouped/grouped-render-pass.ts | 2 +- .../wp-inline-create.service.spec.ts | 2 +- .../wp-relation-inline-create.service.spec.ts | 2 +- .../view-services/wp-view-order.service.ts | 2 +- .../work-package-single-view.base.ts | 2 +- .../anchored-popover/caret-placement.spec.ts | 2 +- .../anchored-popover/caret-placement.ts | 2 +- .../anchored-popover/live-rect.spec.ts | 6 ++--- .../popover-placement.spec.ts | 6 ++--- .../budget-graphs/chart.config.spec.ts | 8 +++---- .../components/budget-graphs/chart.config.ts | 2 +- .../overview/actual-costs.component.spec.ts | 14 ++++++------ .../budget-by-cost-type.component.spec.ts | 6 ++--- .../charts/plugin.non-working-days.ts | 2 +- .../storage-file-list-item.component.ts | 2 +- .../plugin.primer-colors.ts | 6 ++--- .../api-v3/api-v3-filter-builder.spec.ts | 2 +- .../sortable-lists-engine.preview.spec.ts | 2 +- .../sortable-lists-engine.spec.ts | 2 +- .../src/global_styles/content/_table.sass | 2 +- .../content/modules/_resource_management.sass | 6 ++--- .../content/user-content/_figure.sass | 2 +- .../global_styles/vendor/_full_calendar.sass | 2 +- frontend/src/main.ts | 2 +- .../react/extensions/external-link-a11y.ts | 2 +- .../workflow-checkbox-state.controller.ts | 2 +- .../chronic-duration.controller.spec.ts | 2 +- .../contextual-action-menu.controller.spec.ts | 4 ++-- .../contextual-action-menu.controller.ts | 2 +- .../dynamic/filter/filters-form.controller.ts | 2 +- .../resource-timeline.controller.ts | 12 +++++----- .../dynamic/sortable-lists/README.md | 2 +- .../sortable-lists/item.controller.spec.ts | 6 ++--- .../dynamic/sortable-lists/item.controller.ts | 6 ++--- .../dynamic/sortable-lists/list-dom.spec.ts | 16 +++++++------- .../dynamic/sortable-lists/list-dom.ts | 10 ++++----- .../dynamic/sortable-lists/preview.spec.ts | 2 +- .../dynamic/sortable-lists/preview.ts | 4 ++-- .../scrollable.controller.spec.ts | 2 +- .../sortable-lists/selection-orchestrator.ts | 4 ++-- .../dynamic/sortable-lists/selection.spec.ts | 12 +++++----- .../dynamic/sortable-lists/selection.ts | 2 +- .../controllers/pattern-input.controller.ts | 2 +- frontend/src/stimulus/helpers/flip-helper.ts | 2 +- .../src/turbo/turbo-navigation-patch.spec.ts | 2 +- frontend/src/turbo/turbo-navigation-patch.ts | 2 +- lookbook/docs/01-how-to-use.md.erb | 8 +++---- .../10-components/collapsible-section.md.erb | 2 +- .../dialogs/danger-dialog.md.erb | 4 ++-- ...eedback-dialog-and-feedback-message.md.erb | 2 +- .../docs/10-components/expandable-text.md.erb | 2 +- .../10-components/headers/page-header.md.erb | 6 ++--- .../10-components/headers/sub-header.md.erb | 2 +- .../docs/10-components/status_button.md.erb | 22 +++++++++---------- .../tables/border-box-table.md.erb | 2 +- .../02-forms/03-interactivity.md.erb | 2 +- lookbook/docs/20-patterns/04-links.md.erb | 2 +- lookbook/docs/20-patterns/05-dialogs.md.erb | 6 ++--- .../20-patterns/06-inplace-edit-fields.md.erb | 4 ++-- .../20-patterns/07-menu-and-navigation.md.erb | 2 +- .../10-contextual-action-menu.md.erb | 2 +- .../docs/20-patterns/17-settings-pages.md.erb | 2 +- lookbook/docs/40-styles/03-colors.md.erb | 4 ++-- .../40-styles/10-box-list-item-states.md.erb | 2 +- .../back_button_link_component_preview.rb | 2 +- .../dialog.html.erb | 2 +- .../multi_line.html.erb | 2 +- .../common/advanced_form_inputs_preview.rb | 2 +- .../open_project/common/datepicker_preview.rb | 4 ++-- .../common/submenu_preview/default.html.erb | 2 +- .../with_hidden_input.html.erb | 2 +- 87 files changed, 158 insertions(+), 158 deletions(-) diff --git a/frontend/doc/README.md b/frontend/doc/README.md index be29d8d0aad9..30cd31d02258 100644 --- a/frontend/doc/README.md +++ b/frontend/doc/README.md @@ -6,7 +6,7 @@ The OpenProject frontend is located at `frontend/src` and uses the Angular CLI ( - `src/app/` — the legacy Angular application. New work does not go here. - `src/common/` — framework-agnostic modules, reachable through the `core-common` alias and importable from both Angular and Stimulus. Code belongs here when it depends on neither framework and both sides need it; a helper only Stimulus controllers use belongs in `src/stimulus/helpers/` instead. -- `src/stimulus/` — Stimulus controllers, the current approach for new behaviour. +- `src/stimulus/` — Stimulus controllers, the current approach for new behavior. - `src/turbo/` — Turbo integration: stream actions, custom elements and helpers. ## Angular frontend diff --git a/frontend/doc/TESTING.md b/frontend/doc/TESTING.md index 937ab2666d71..4e229dd3f35c 100644 --- a/frontend/doc/TESTING.md +++ b/frontend/doc/TESTING.md @@ -16,7 +16,7 @@ code**, so a Stimulus or Turbo spec still needs the Angular build to succeed — Angular tree fails specs that have nothing to do with it. Specs run in real browsers driven by [Playwright](https://playwright.dev/), not in a DOM shim. That -means layout, focus and event behaviour are real, and an engine-specific bug surfaces in CI rather +means layout, focus and event behavior are real, and an engine-specific bug surfaces in CI rather than in review. ## Writing assertions @@ -79,7 +79,7 @@ expect(inputs.every((input) => input.checked)).toBe(true); Target properties are declared `readonly`, so they are supplied with `Object.defineProperty` rather than assigned. Do not reach for an `any` cast to get around it — that discards exactly the type checking that makes the isolated test worth writing. Reach for this only when the -behaviour is worth testing apart from its markup — a controller tested solely this way can pass while +behavior is worth testing apart from its markup — a controller tested solely this way can pass while being unusable from HTML. ## Angular components diff --git a/frontend/src/app/core/apiv3/paths/apiv3-resource.ts b/frontend/src/app/core/apiv3/paths/apiv3-resource.ts index 53e965e97261..7da80732cd86 100644 --- a/frontend/src/app/core/apiv3/paths/apiv3-resource.ts +++ b/frontend/src/app/core/apiv3/paths/apiv3-resource.ts @@ -170,7 +170,7 @@ export class ApiV3ResourceCollection> exte * Returns an observable response. * * @param filters filter object to filter with - * @param select The signalling parameters to request + * @param select The signaling parameters to request * @param params additional URL params to append */ public signalled(filters:ApiV3FilterBuilder, select:string[], params:Record = {}):Observable { diff --git a/frontend/src/app/core/days/weekday.service.spec.ts b/frontend/src/app/core/days/weekday.service.spec.ts index b5e0c2b28975..9cd736bbcb30 100644 --- a/frontend/src/app/core/days/weekday.service.spec.ts +++ b/frontend/src/app/core/days/weekday.service.spec.ts @@ -46,7 +46,7 @@ describe('WeekdayService', () => { }); }); - it('initialises via dependency injection', () => { + it('initializes via dependency injection', () => { expect(TestBed.inject(WeekdayService)).toBeTruthy(); }); }); diff --git a/frontend/src/app/core/global_search/input/global-search-input.component.spec.ts b/frontend/src/app/core/global_search/input/global-search-input.component.spec.ts index 68692d86180c..5d8525cee405 100644 --- a/frontend/src/app/core/global_search/input/global-search-input.component.spec.ts +++ b/frontend/src/app/core/global_search/input/global-search-input.component.spec.ts @@ -66,7 +66,7 @@ describe('GlobalSearchInputComponent#followItem', () => { return item; } - it('is recognised as a HalResource', () => { + it('is recognized as a HalResource', () => { expect(buildWorkPackage({ id: 42 }) instanceof HalResource).toBe(true); }); diff --git a/frontend/src/app/core/main-menu/main-menu-toggle.service.spec.ts b/frontend/src/app/core/main-menu/main-menu-toggle.service.spec.ts index 2be8a959433a..2bdac9a14eef 100644 --- a/frontend/src/app/core/main-menu/main-menu-toggle.service.spec.ts +++ b/frontend/src/app/core/main-menu/main-menu-toggle.service.spec.ts @@ -111,7 +111,7 @@ describe('MainMenuToggleService', () => { window.OpenProject = originalOpenProject; }); - it('initialises via dependency injection', () => { + it('initializes via dependency injection', () => { expect(TestBed.inject(MainMenuToggleService)).toBeTruthy(); }); diff --git a/frontend/src/app/core/model-auth/model-auth.service.spec.ts b/frontend/src/app/core/model-auth/model-auth.service.spec.ts index 71f7910ad804..9747e56a322c 100644 --- a/frontend/src/app/core/model-auth/model-auth.service.spec.ts +++ b/frontend/src/app/core/model-auth/model-auth.service.spec.ts @@ -30,7 +30,7 @@ import { AuthorisationService } from './model-auth.service'; describe('authorisationService', () => { const authorisationService:AuthorisationService = new AuthorisationService(); - describe('model action authorisation', () => { + describe('model action authorization', () => { beforeEach(() => { authorisationService.initModelAuth('query', { create: '/queries', diff --git a/frontend/src/app/core/state/attachments/attachments.service.spec.ts b/frontend/src/app/core/state/attachments/attachments.service.spec.ts index 0b00342d0a09..617397f7ac85 100644 --- a/frontend/src/app/core/state/attachments/attachments.service.spec.ts +++ b/frontend/src/app/core/state/attachments/attachments.service.spec.ts @@ -75,7 +75,7 @@ describe('AttachmentsResourceService', () => { service = TestBed.inject(AttachmentsResourceService); }); - it('initialises via dependency injection', () => { + it('initializes via dependency injection', () => { expect(service).toBeTruthy(); }); diff --git a/frontend/src/app/core/state/effects/effect-handler.decorator.ts b/frontend/src/app/core/state/effects/effect-handler.decorator.ts index 3be28344ed14..6208ab25aac8 100644 --- a/frontend/src/app/core/state/effects/effect-handler.decorator.ts +++ b/frontend/src/app/core/state/effects/effect-handler.decorator.ts @@ -105,7 +105,7 @@ export function EffectHandler EffectClass>(const // Registered from a field initializer, not a constructor, on purpose: an // explicit constructor on this @Injectable() subclass of a generic base // (`extends constructor`) breaks the ngtsc AOT compiler, which cannot - // analyse the `super(...args)` injection parameters. With + // analyze the `super(...args)` injection parameters. With // useDefineForClassFields:false this initializer still runs in the // constructor body after super(), so the wrapped service (and its actions$) // is fully constructed before effect callbacks bind to it. diff --git a/frontend/src/app/core/state/in-app-notifications/in-app-notifications.service.spec.ts b/frontend/src/app/core/state/in-app-notifications/in-app-notifications.service.spec.ts index 8351ce0a6749..ab53f715663f 100644 --- a/frontend/src/app/core/state/in-app-notifications/in-app-notifications.service.spec.ts +++ b/frontend/src/app/core/state/in-app-notifications/in-app-notifications.service.spec.ts @@ -45,7 +45,7 @@ describe('InAppNotificationsResourceService', () => { }); }); - it('initialises via dependency injection', () => { + it('initializes via dependency injection', () => { expect(TestBed.inject(InAppNotificationsResourceService)).toBeTruthy(); }); }); diff --git a/frontend/src/app/core/state/principals/principals.service.spec.ts b/frontend/src/app/core/state/principals/principals.service.spec.ts index 60a63e05118f..45cc561f9da0 100644 --- a/frontend/src/app/core/state/principals/principals.service.spec.ts +++ b/frontend/src/app/core/state/principals/principals.service.spec.ts @@ -45,7 +45,7 @@ describe('PrincipalsResourceService', () => { }); }); - it('initialises via dependency injection', () => { + it('initializes via dependency injection', () => { expect(TestBed.inject(PrincipalsResourceService)).toBeTruthy(); }); }); diff --git a/frontend/src/app/core/state/views/views.service.spec.ts b/frontend/src/app/core/state/views/views.service.spec.ts index 2f1a8eb30dd9..9222b7a9135c 100644 --- a/frontend/src/app/core/state/views/views.service.spec.ts +++ b/frontend/src/app/core/state/views/views.service.spec.ts @@ -45,7 +45,7 @@ describe('ViewsResourceService', () => { }); }); - it('initialises via dependency injection', () => { + it('initializes via dependency injection', () => { expect(TestBed.inject(ViewsResourceService)).toBeTruthy(); }); }); diff --git a/frontend/src/app/features/backlogs/burndown-chart.component.ts b/frontend/src/app/features/backlogs/burndown-chart.component.ts index 105fb67a70a7..38501117a257 100644 --- a/frontend/src/app/features/backlogs/burndown-chart.component.ts +++ b/frontend/src/app/features/backlogs/burndown-chart.component.ts @@ -73,7 +73,7 @@ const Y_AXIS_HEADROOM = 1.1; const MINUTE_IN_MS = 60 * 1000; -// Chart.js takes a swatch shape per legend item but the decision to honour it at all is global, +// Chart.js takes a swatch shape per legend item but the decision to honor it at all is global, // hence usePointStyle on the labels. const SWATCH_WIDTH = 24; diff --git a/frontend/src/app/features/calendar/op-work-packages-calendar.service.ts b/frontend/src/app/features/calendar/op-work-packages-calendar.service.ts index c2896f4f0719..89bd6f305a69 100644 --- a/frontend/src/app/features/calendar/op-work-packages-calendar.service.ts +++ b/frontend/src/app/features/calendar/op-work-packages-calendar.service.ts @@ -414,8 +414,8 @@ export class OpWorkPackagesCalendarService extends UntilDestroyedMixin { } private get initializingWithQueryProps():boolean { - // Initialise with current query props - // If the filters are empty, they still need to be initialised (with empty props) + // Initialize with current query props + // If the filters are empty, they still need to be initialized (with empty props) return (this.areFiltersEmpty || this.urlParams.query_props) as boolean; } diff --git a/frontend/src/app/features/hal/services/hal-resource-notification.service.spec.ts b/frontend/src/app/features/hal/services/hal-resource-notification.service.spec.ts index cf298bd21c17..44d013c7e4b3 100644 --- a/frontend/src/app/features/hal/services/hal-resource-notification.service.spec.ts +++ b/frontend/src/app/features/hal/services/hal-resource-notification.service.spec.ts @@ -45,7 +45,7 @@ describe('HalResourceNotificationService', () => { }); }); - it('initialises via dependency injection', () => { + it('initializes via dependency injection', () => { expect(TestBed.inject(HalResourceNotificationService)).toBeTruthy(); }); }); diff --git a/frontend/src/app/features/team-planner/team-planner/calendar-drag-drop.service.ts b/frontend/src/app/features/team-planner/team-planner/calendar-drag-drop.service.ts index e36c75a11323..26cc585b388b 100644 --- a/frontend/src/app/features/team-planner/team-planner/calendar-drag-drop.service.ts +++ b/frontend/src/app/features/team-planner/team-planner/calendar-drag-drop.service.ts @@ -38,7 +38,7 @@ import moment from 'moment-timezone'; @Injectable() export class CalendarDragDropService { - readonly authorisation = inject(AuthorisationService); + readonly authorization = inject(AuthorisationService); readonly schemaCache = inject(SchemaCacheService); readonly workPackagesCalendarService = inject(OpWorkPackagesCalendarService); readonly I18n = inject(I18nService); @@ -119,7 +119,7 @@ export class CalendarDragDropService { } private workPackageDisabled(workPackage:WorkPackageResource):{ disabled:boolean, reason?:string } { - if (!this.authorisation.can('work_packages', 'editWorkPackage')) { + if (!this.authorization.can('work_packages', 'editWorkPackage')) { return { disabled: true, reason: this.text.draggingDisabled.permissionDenied }; } diff --git a/frontend/src/app/features/work-packages/components/wp-fast-table/builders/modes/grouped/grouped-render-pass.ts b/frontend/src/app/features/work-packages/components/wp-fast-table/builders/modes/grouped/grouped-render-pass.ts index 7c0111f9328c..a8feb8070ddf 100644 --- a/frontend/src/app/features/work-packages/components/wp-fast-table/builders/modes/grouped/grouped-render-pass.ts +++ b/frontend/src/app/features/work-packages/components/wp-fast-table/builders/modes/grouped/grouped-render-pass.ts @@ -141,7 +141,7 @@ export class GroupedRenderPass extends PlainRenderPass { private matchesMultiValue(property:HalResource[], group:GroupObject) { // The API returns `group.href` as an object keyed by index rather than a - // plain array, so normalise it via `Object.values` before comparing. + // plain array, so normalize it via `Object.values` before comparing. const groupHrefs = Object.values(group.href); if (property.length !== groupHrefs.length) { diff --git a/frontend/src/app/features/work-packages/components/wp-inline-create/wp-inline-create.service.spec.ts b/frontend/src/app/features/work-packages/components/wp-inline-create/wp-inline-create.service.spec.ts index 36a24b216942..9a35fbc011a7 100644 --- a/frontend/src/app/features/work-packages/components/wp-inline-create/wp-inline-create.service.spec.ts +++ b/frontend/src/app/features/work-packages/components/wp-inline-create/wp-inline-create.service.spec.ts @@ -41,7 +41,7 @@ describe('WorkPackageInlineCreateService', () => { }); }); - it('initialises via dependency injection', () => { + it('initializes via dependency injection', () => { expect(TestBed.inject(WorkPackageInlineCreateService)).toBeTruthy(); }); }); diff --git a/frontend/src/app/features/work-packages/components/wp-relations/embedded/relations/wp-relation-inline-create.service.spec.ts b/frontend/src/app/features/work-packages/components/wp-relations/embedded/relations/wp-relation-inline-create.service.spec.ts index 7f17c4e37c4a..fdc766f380ea 100644 --- a/frontend/src/app/features/work-packages/components/wp-relations/embedded/relations/wp-relation-inline-create.service.spec.ts +++ b/frontend/src/app/features/work-packages/components/wp-relations/embedded/relations/wp-relation-inline-create.service.spec.ts @@ -45,7 +45,7 @@ describe('WpRelationInlineCreateService', () => { }); }); - it('initialises via dependency injection', () => { + it('initializes via dependency injection', () => { expect(TestBed.inject(WpRelationInlineCreateService)).toBeTruthy(); }); }); diff --git a/frontend/src/app/features/work-packages/routing/wp-view-base/view-services/wp-view-order.service.ts b/frontend/src/app/features/work-packages/routing/wp-view-base/view-services/wp-view-order.service.ts index 9d9dbea290b1..08bf7f1450cc 100644 --- a/frontend/src/app/features/work-packages/routing/wp-view-base/view-services/wp-view-order.service.ts +++ b/frontend/src/app/features/work-packages/routing/wp-view-base/view-services/wp-view-order.service.ts @@ -70,7 +70,7 @@ export class WorkPackageViewOrderService extends WorkPackageQueryStateService { const rect = (left:number, top:number, width:number, height:number) => new DOMRect(left, top, width, height); const anchor = rect(100, 100, 10, 10); - it('puts the caret on the bottom edge, centred on the anchor, when the popover is above', () => { + it('puts the caret on the bottom edge, centered on the anchor, when the popover is above', () => { expect(caretPlacement(rect(55, 20, 100, 60), anchor)).toEqual({ side: 'bottom', offset: 50 }); }); diff --git a/frontend/src/app/shared/components/anchored-popover/caret-placement.ts b/frontend/src/app/shared/components/anchored-popover/caret-placement.ts index bf46a095b93f..ab9e46f917fc 100644 --- a/frontend/src/app/shared/components/anchored-popover/caret-placement.ts +++ b/frontend/src/app/shared/components/anchored-popover/caret-placement.ts @@ -34,7 +34,7 @@ export interface CaretPlacement { const CARET_INSET_IN_PX = 12; -// The caret sits on the popover edge that faces the anchor, centred on the +// The caret sits on the popover edge that faces the anchor, centered on the // anchor along that edge and kept clear of the popover's rounded corners. export function caretPlacement(popover:DOMRect, anchor:DOMRect):CaretPlacement { const side = caretSide(popover, anchor); diff --git a/frontend/src/app/shared/components/anchored-popover/live-rect.spec.ts b/frontend/src/app/shared/components/anchored-popover/live-rect.spec.ts index 73e86d53c69e..99d71e2f43ba 100644 --- a/frontend/src/app/shared/components/anchored-popover/live-rect.spec.ts +++ b/frontend/src/app/shared/components/anchored-popover/live-rect.spec.ts @@ -73,18 +73,18 @@ describe('liveRect', () => { popover.anchorElement = rect as unknown as HTMLElement; popover.togglePopover(true); - const centre = () => { + const center = () => { const box = popover.getBoundingClientRect(); return box.left + box.width / 2; }; placePopover(popover, rect); - expect(centre()).toBeCloseTo(205, 0); + expect(center()).toBeCloseTo(205, 0); anchor = new DOMRect(300, 200, 10, 10); await Promise.resolve(); placePopover(popover, rect); - expect(centre()).toBeCloseTo(305, 0); + expect(center()).toBeCloseTo(305, 0); popover.remove(); }); diff --git a/frontend/src/app/shared/components/anchored-popover/popover-placement.spec.ts b/frontend/src/app/shared/components/anchored-popover/popover-placement.spec.ts index 3bffc6a03c5b..cfce78be9ef9 100644 --- a/frontend/src/app/shared/components/anchored-popover/popover-placement.spec.ts +++ b/frontend/src/app/shared/components/anchored-popover/popover-placement.spec.ts @@ -55,10 +55,10 @@ describe('placePopover', () => { window.scrollTo(0, 0); }); - const centred = () => popover.getBoundingClientRect().width / 2; + const centered = () => popover.getBoundingClientRect().width / 2; it('places the caret on the edge facing the anchor as soon as the popover is open', () => { - expect(placePopover(popover, anchor)).toEqual({ side: 'bottom', offset: centred() }); + expect(placePopover(popover, anchor)).toEqual({ side: 'bottom', offset: centered() }); }); it('moves the popover into place without waiting for a frame', () => { @@ -76,7 +76,7 @@ describe('placePopover', () => { }); it('accepts a rectangle as the anchor', () => { - expect(placePopover(popover, new DOMRect(200, 200, 10, 10))).toEqual({ side: 'bottom', offset: centred() }); + expect(placePopover(popover, new DOMRect(200, 200, 10, 10))).toEqual({ side: 'bottom', offset: centered() }); }); it('agrees with where anchored-position puts the popover', async () => { diff --git a/frontend/src/app/shared/components/budget-graphs/chart.config.spec.ts b/frontend/src/app/shared/components/budget-graphs/chart.config.spec.ts index 6ec2605f6cbc..90e09984c551 100644 --- a/frontend/src/app/shared/components/budget-graphs/chart.config.spec.ts +++ b/frontend/src/app/shared/components/budget-graphs/chart.config.spec.ts @@ -66,7 +66,7 @@ describe('chart tooltip renderer', () => { opacity, caretX, caretY: 40, - dataPoints: [{ label: 'Labour', parsed: 1234 }], + dataPoints: [{ label: 'Labor', parsed: 1234 }], labelColors: [{ backgroundColor: '#123456' }], }, }) as unknown as Parameters>[0]; @@ -79,7 +79,7 @@ describe('chart tooltip renderer', () => { renderTooltip(context(1)); expect(popover().matches(':popover-open')).toBe(true); - expect(within(host).getByText('Labour')).toBeInTheDocument(); + expect(within(host).getByText('Labor')).toBeInTheDocument(); expect(within(host).getByText('€1234')).toBeInTheDocument(); await nextFrame(); @@ -131,7 +131,7 @@ describe('chart tooltip renderer', () => { expect(popover().matches(':popover-open')).toBe(false); }); - it('centres a bar tooltip on the hovered segment', () => { + it('centers a bar tooltip on the hovered segment', () => { const renderTooltip = createBarTooltipRenderer(host, (v) => `${v}`); renderers.push(renderTooltip); renderTooltip({ @@ -142,7 +142,7 @@ describe('chart tooltip renderer', () => { caretY: 20, dataPoints: [{ parsed: { x: 0, y: 10 }, - dataset: { label: 'Labour' }, + dataset: { label: 'Labor' }, element: { getProps: () => ({ x: 50, y: 20, base: 120, width: 30 }) }, }], labelColors: [{ backgroundColor: '#123456' }], diff --git a/frontend/src/app/shared/components/budget-graphs/chart.config.ts b/frontend/src/app/shared/components/budget-graphs/chart.config.ts index 0cef7eb66f4f..fe2855085f03 100644 --- a/frontend/src/app/shared/components/budget-graphs/chart.config.ts +++ b/frontend/src/app/shared/components/budget-graphs/chart.config.ts @@ -133,7 +133,7 @@ function caretPoint(context:TooltipContext):DO } // Chart.js anchors a bar tooltip on the top edge of the hovered segment; the -// segment's box lets anchored-position centre the popover on it instead. +// segment's box lets anchored-position center the popover on it instead. function barBox(context:TooltipContext<'bar'>):DOMRect { const bar = context.tooltip.dataPoints[0]?.element as BarElement|undefined; const { x, y, base, width } = bar?.getProps(['x', 'y', 'base', 'width']) ?? {}; diff --git a/frontend/src/app/shared/components/budget-graphs/overview/actual-costs.component.spec.ts b/frontend/src/app/shared/components/budget-graphs/overview/actual-costs.component.spec.ts index b733b7d4683a..70f4e185637a 100644 --- a/frontend/src/app/shared/components/budget-graphs/overview/actual-costs.component.spec.ts +++ b/frontend/src/app/shared/components/budget-graphs/overview/actual-costs.component.spec.ts @@ -52,7 +52,7 @@ describe('ActualCostsComponent', () => { }); const renderWith = (datasets:unknown[]) => { - fixture.componentRef.setInput('chartData', JSON.stringify({ labels: ['Labour'], datasets })); + fixture.componentRef.setInput('chartData', JSON.stringify({ labels: ['Labor'], datasets })); fixture.detectChanges(); }; @@ -62,13 +62,13 @@ describe('ActualCostsComponent', () => { opacity, caretX: 50, caretY: 40, - dataPoints: [{ parsed: { x: 0, y: 10 }, dataset: { label: 'Labour' }, element: { getProps: () => ({ x: 50, y: 20, base: 120, width: 30 }) } }], + dataPoints: [{ parsed: { x: 0, y: 10 }, dataset: { label: 'Labor' }, element: { getProps: () => ({ x: 50, y: 20, base: 120, width: 30 }) } }], labelColors: [{ backgroundColor: '#123456' }], }, } as unknown as BarTooltipContext); it('renders the chart with a tooltip host beside the canvas', () => { - renderWith([{ label: 'Labour', data: [10] }]); + renderWith([{ label: 'Labor', data: [10] }]); const canvas = element.querySelector('canvas')!; expect(canvas).not.toBeNull(); @@ -81,27 +81,27 @@ describe('ActualCostsComponent', () => { }); it('drops the tooltip renderer together with its host', () => { - renderWith([{ label: 'Labour', data: [10] }]); + renderWith([{ label: 'Labor', data: [10] }]); const removeListener = vi.spyOn(document, 'removeEventListener'); renderWith([]); expect(removeListener).toHaveBeenCalledWith('scroll', expect.any(Function), expect.anything()); removeListener.mockClear(); - renderWith([{ label: 'Labour', data: [10] }]); + renderWith([{ label: 'Labor', data: [10] }]); fixture.destroy(); expect(removeListener).toHaveBeenCalledWith('scroll', expect.any(Function), expect.anything()); }); it('opens the tooltip inside its host from the Chart.js callback', () => { - renderWith([{ label: 'Labour', data: [10] }]); + renderWith([{ label: 'Labor', data: [10] }]); const external = fixture.componentInstance.barChartOptions()!.plugins!.tooltip!.external as (context:BarTooltipContext) => void; external(tooltipContext(1)); const popover = element.querySelector('anchored-position')!; expect(popover.matches(':popover-open')).toBe(true); - expect(within(popover).getByText('Labour')).toBeInTheDocument(); + expect(within(popover).getByText('Labor')).toBeInTheDocument(); expect(document.body.querySelector(':scope > anchored-position')).toBeNull(); }); }); diff --git a/frontend/src/app/shared/components/budget-graphs/overview/budget-by-cost-type.component.spec.ts b/frontend/src/app/shared/components/budget-graphs/overview/budget-by-cost-type.component.spec.ts index 5bbdedc583b5..6927f02b7cac 100644 --- a/frontend/src/app/shared/components/budget-graphs/overview/budget-by-cost-type.component.spec.ts +++ b/frontend/src/app/shared/components/budget-graphs/overview/budget-by-cost-type.component.spec.ts @@ -52,7 +52,7 @@ describe('BudgetByCostTypeComponent', () => { }); const renderWith = (datasets:unknown[]) => { - fixture.componentRef.setInput('chartData', JSON.stringify({ labels: ['Labour'], datasets })); + fixture.componentRef.setInput('chartData', JSON.stringify({ labels: ['Labor'], datasets })); fixture.detectChanges(); }; @@ -62,7 +62,7 @@ describe('BudgetByCostTypeComponent', () => { opacity, caretX: 50, caretY: 40, - dataPoints: [{ label: 'Labour', parsed: 10 }], + dataPoints: [{ label: 'Labor', parsed: 10 }], labelColors: [{ backgroundColor: '#123456' }], }, } as unknown as PieTooltipContext); @@ -101,7 +101,7 @@ describe('BudgetByCostTypeComponent', () => { const popover = element.querySelector('anchored-position')!; expect(popover.matches(':popover-open')).toBe(true); - expect(within(popover).getByText('Labour')).toBeInTheDocument(); + expect(within(popover).getByText('Labor')).toBeInTheDocument(); expect(document.body.querySelector(':scope > anchored-position')).toBeNull(); }); }); diff --git a/frontend/src/app/shared/components/charts/plugin.non-working-days.ts b/frontend/src/app/shared/components/charts/plugin.non-working-days.ts index 17d052bf9162..4a22302bc9c7 100644 --- a/frontend/src/app/shared/components/charts/plugin.non-working-days.ts +++ b/frontend/src/app/shared/components/charts/plugin.non-working-days.ts @@ -96,7 +96,7 @@ export function bandFor(interval:NonWorkingInterval, scale:Scale, zone:string):B return { left, width: right - left }; } -// Exported so that the dataset standing in for the bands can wear their colour in the legend. +// Exported so that the dataset standing in for the bands can wear their color in the legend. export function nonWorkingDaysColor():string { return getCSSVariable('--bgColor-neutral-muted', '#818b981f'); } diff --git a/frontend/src/app/shared/components/storages/storage-file-list-item/storage-file-list-item.component.ts b/frontend/src/app/shared/components/storages/storage-file-list-item/storage-file-list-item.component.ts index c8ccf704cf2c..a9bda685f53f 100644 --- a/frontend/src/app/shared/components/storages/storage-file-list-item/storage-file-list-item.component.ts +++ b/frontend/src/app/shared/components/storages/storage-file-list-item/storage-file-list-item.component.ts @@ -70,7 +70,7 @@ export class StorageFileListItemComponent { /** * This function enables an override of the click on the label for the storage file list items. * - * Normal behaviour is, that the label click is associated with the first interactive element, + * Normal behavior is, that the label click is associated with the first interactive element, * which usually should be the checkbox if available, or the "enterDirectory" icon button, * if no checkbox is available. * diff --git a/frontend/src/app/shared/components/work-package-graphs/plugin.primer-colors.ts b/frontend/src/app/shared/components/work-package-graphs/plugin.primer-colors.ts index 72a6a11c07c1..f8a0b722dfe9 100644 --- a/frontend/src/app/shared/components/work-package-graphs/plugin.primer-colors.ts +++ b/frontend/src/app/shared/components/work-package-graphs/plugin.primer-colors.ts @@ -61,7 +61,7 @@ const PRIMER_COLORS = [ 'pine', // (deep green, darker balance) 'auburn', // (earthy tone) 'brown', // (neutral balance) - 'cyan', // (slight highlight between neutral colours) + 'cyan', // (slight highlight between neutral colors) 'gray', // (neutral, mid-series filler) 'lemon', // (darker yellow, less eye-catching) 'olive', // (subdued green, background tone) @@ -109,8 +109,8 @@ function colorizeMultiDataset(dataset:ChartDataset, i:number) { const backgroundColors:string[] = []; const borderColors:string[] = []; - // Instead of directly counting the index up, all elements of that dataset will get the same colour - // Only at the end, we increase so that the next dataset is in a different colour + // Instead of directly counting the index up, all elements of that dataset will get the same color + // Only at the end, we increase so that the next dataset is in a different color // See https://community.openproject.org/wp/68364 for (const _ of dataset.data) { backgroundColors.push(getMutedColor(i)); diff --git a/frontend/src/app/shared/helpers/api-v3/api-v3-filter-builder.spec.ts b/frontend/src/app/shared/helpers/api-v3/api-v3-filter-builder.spec.ts index 4ad80bcda7e3..3bb34b791f70 100644 --- a/frontend/src/app/shared/helpers/api-v3/api-v3-filter-builder.spec.ts +++ b/frontend/src/app/shared/helpers/api-v3/api-v3-filter-builder.spec.ts @@ -36,7 +36,7 @@ import { // over the filter map): the `filters` getter and `toFilterObject`. describe('ApiV3FilterBuilder', () => { describe('add() and the filters getter', () => { - it('serialises each entry of the filter map to a single-key object', () => { + it('serializes each entry of the filter map to a single-key object', () => { const builder = new ApiV3FilterBuilder() .add('status', '=', ['1']) .add('subject', '~', ['foo']); diff --git a/frontend/src/common/drag-and-drop/sortable-lists-engine.preview.spec.ts b/frontend/src/common/drag-and-drop/sortable-lists-engine.preview.spec.ts index a630f7e0e67e..b300b19db8dc 100644 --- a/frontend/src/common/drag-and-drop/sortable-lists-engine.preview.spec.ts +++ b/frontend/src/common/drag-and-drop/sortable-lists-engine.preview.spec.ts @@ -36,7 +36,7 @@ import { vi } from 'vitest'; import { NativeDragSimulation } from 'core-common/drag-and-drop/testing/native-drag-simulation'; import type { createSortableRoot as createSortableRootFn } from './sortable-lists-engine'; -// `doMock` is not hoisted, so this initialises before the factory below runs +// `doMock` is not hoisted, so this initializes before the factory below runs // and a plain const does the job `vi.hoisted()` used to. const previewCalls:{ getOffset?:(args:{ container:HTMLElement }) => { x:number; y:number }; diff --git a/frontend/src/common/drag-and-drop/sortable-lists-engine.spec.ts b/frontend/src/common/drag-and-drop/sortable-lists-engine.spec.ts index 1570ffa55c8f..f27f11ac102e 100644 --- a/frontend/src/common/drag-and-drop/sortable-lists-engine.spec.ts +++ b/frontend/src/common/drag-and-drop/sortable-lists-engine.spec.ts @@ -38,7 +38,7 @@ import type { SortableSource, } from './sortable-lists-engine'; -// `doMock` is not hoisted, so this initialises before the factory below runs +// `doMock` is not hoisted, so this initializes before the factory below runs // and a plain const does the job `vi.hoisted()` used to. const autoScrollRegistrations:{ element:Element; diff --git a/frontend/src/global_styles/content/_table.sass b/frontend/src/global_styles/content/_table.sass index 24b583a2f7ef..d462ab7e3f3d 100644 --- a/frontend/src/global_styles/content/_table.sass +++ b/frontend/src/global_styles/content/_table.sass @@ -196,7 +196,7 @@ table.generic-table input[type="radio"]:not(.FormControl-radio) margin-top: -0.25rem - // In the interactive table the behaviour is like this: + // In the interactive table the behavior is like this: // * if there is more space available than is required to render // all columns, the container width is set to 100%. // Then, td.-max will take up all space available and it will cause all other diff --git a/frontend/src/global_styles/content/modules/_resource_management.sass b/frontend/src/global_styles/content/modules/_resource_management.sass index bbaf462e530c..cd8db6485227 100644 --- a/frontend/src/global_styles/content/modules/_resource_management.sass +++ b/frontend/src/global_styles/content/modules/_resource_management.sass @@ -106,7 +106,7 @@ // Header columns mirror the body shading: grey when no work package is active in // the column, white otherwise, today's highlight kept for inactive columns. The // active class is toggled by the controller from the loaded bands, since - // FullCalendar does not colour the header from event data. The active rule comes + // FullCalendar does not color the header from event data. The active rule comes // last so it outranks the equal-specificity today rule. .fc-timeline-header .fc-timeline-slot-label background: rgb(205 205 205 / 20%) !important @@ -136,9 +136,9 @@ box-shadow: 1px 1px 5px rgb(0 0 0 / 15%) color: var(--fgColor-default, #1f2328) - // The user-timeline bar carries its work package's status colour on the top + // The user-timeline bar carries its work package's status color on the top // edge (`--rm-status-color` set inline per bar; muted when the status has no - // colour). Overbooking overrides this with the danger border below. + // color). Overbooking overrides this with the danger border below. &_status border-top: 1px solid var(--rm-status-color, var(--borderColor-muted, #d8dee4)) diff --git a/frontend/src/global_styles/content/user-content/_figure.sass b/frontend/src/global_styles/content/user-content/_figure.sass index ebe1812212ca..e7a2007f193a 100644 --- a/frontend/src/global_styles/content/user-content/_figure.sass +++ b/frontend/src/global_styles/content/user-content/_figure.sass @@ -25,7 +25,7 @@ float: left width: auto &_align-center - // This is the current default behaviour, as ckeditor-augmented-textarea has no "don't align" option + // This is the current default behavior, as ckeditor-augmented-textarea has no "don't align" option &--content flex-basis: auto diff --git a/frontend/src/global_styles/vendor/_full_calendar.sass b/frontend/src/global_styles/vendor/_full_calendar.sass index 4876e7190174..72a05f874f82 100644 --- a/frontend/src/global_styles/vendor/_full_calendar.sass +++ b/frontend/src/global_styles/vendor/_full_calendar.sass @@ -18,7 +18,7 @@ .fc-scrollgrid-section-sticky > * background: none - // Note the greater specificity than the standard background colours + // Note the greater specificity than the standard background colors table .fc-day-today background: rgb(255 255 120 / 20%) diff --git a/frontend/src/main.ts b/frontend/src/main.ts index 798db072b778..52d170ee8a69 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -67,6 +67,6 @@ void initializeLocale() .then(() => { initializeGlobalListeners(); - // Due to the behaviour of the Edge browser we need to wait for 'DOM ready' + // Due to the behavior of the Edge browser we need to wait for 'DOM ready' void platformBrowser().bootstrapModule(OpenProjectModule, { applicationProviders: [provideZonelessChangeDetection()], }); }); diff --git a/frontend/src/react/extensions/external-link-a11y.ts b/frontend/src/react/extensions/external-link-a11y.ts index a9272e9be805..95b9a76b31a4 100644 --- a/frontend/src/react/extensions/external-link-a11y.ts +++ b/frontend/src/react/extensions/external-link-a11y.ts @@ -106,7 +106,7 @@ function buildWidget():HTMLElement { // region, so users cannot place their caret inside it or delete it. span.setAttribute('contenteditable', 'false'); // Reuse the same translated string the body-level ExternalLinksController - // references via aria-describedby, keeping i18n centralised in Rails. + // references via aria-describedby, keeping i18n centralized in Rails. // Captured at decoration-creation time, so a mid-session locale change // keeps stale text until the next rebuild. Leading NBSP is a separator // for the link's computed accessible name — without it, AT can announce diff --git a/frontend/src/stimulus/controllers/dynamic/admin/workflow-checkbox-state.controller.ts b/frontend/src/stimulus/controllers/dynamic/admin/workflow-checkbox-state.controller.ts index 0f6141d12ef3..8155fe575caa 100644 --- a/frontend/src/stimulus/controllers/dynamic/admin/workflow-checkbox-state.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/admin/workflow-checkbox-state.controller.ts @@ -233,7 +233,7 @@ export default class WorkflowCheckboxStateController extends Controller { expect(await reformat(input, '1w')).toEqual('40h'); }); - it('honours a non default working day length', async () => { + it('honors a non default working day length', async () => { const input = await mountInput('data-chronic-duration-hours-per-day-value="6"'); expect(await reformat(input, '1d')).toEqual('6h'); diff --git a/frontend/src/stimulus/controllers/dynamic/contextual-action-menu.controller.spec.ts b/frontend/src/stimulus/controllers/dynamic/contextual-action-menu.controller.spec.ts index ba7ab740b7c3..3c930e5bff30 100644 --- a/frontend/src/stimulus/controllers/dynamic/contextual-action-menu.controller.spec.ts +++ b/frontend/src/stimulus/controllers/dynamic/contextual-action-menu.controller.spec.ts @@ -258,7 +258,7 @@ describe('Contextual action menu controller', () => { // and then opening a popover mid-gesture leaves a tablet user with nothing // at all — the trailing pointerup light-dismisses the popover, and the // native menu has already been prevented. AGILE-348 covers mouse and - // keyboard; touch keeps today's behaviour untouched. + // keyboard; touch keeps today's behavior untouched. it('leaves the native long-press menu alone for touch', async () => { const { card, overlay } = renderCard(); await nextFrame(); @@ -671,7 +671,7 @@ describe('Contextual action menu controller', () => { expectAnchoredAtInvoker(overlay); }); - // Not every release is reported as a pointer event: a gesture synthesised + // Not every release is reported as a pointer event: a gesture synthesized // by a driver or by other page code may only produce the mouse one, and // the menu still has to open from it. it('opens on a mouseup when the release brings no pointerup', async () => { diff --git a/frontend/src/stimulus/controllers/dynamic/contextual-action-menu.controller.ts b/frontend/src/stimulus/controllers/dynamic/contextual-action-menu.controller.ts index f63d801d58f4..b11be85f46ba 100644 --- a/frontend/src/stimulus/controllers/dynamic/contextual-action-menu.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/contextual-action-menu.controller.ts @@ -111,7 +111,7 @@ export default class ContextualActionMenuController extends Controller { this.expectKeyboardEcho = false; diff --git a/frontend/src/stimulus/controllers/dynamic/filter/filters-form.controller.ts b/frontend/src/stimulus/controllers/dynamic/filter/filters-form.controller.ts index b4df9d53e55c..2a0553a9ceb4 100644 --- a/frontend/src/stimulus/controllers/dynamic/filter/filters-form.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/filter/filters-form.controller.ts @@ -238,7 +238,7 @@ export default class FiltersFormController extends Controller { this.registerAngularPickerWithMultiInput(target, 'opce-basic-single-datetime-picker'); } - // angular_component_tag serialises @Input() bindings as JSON in data-* attributes, so the + // angular_component_tag serializes @Input() bindings as JSON in data-* attributes, so the // Angular date picker wrapper's data-name holds a JSON-encoded value that primer-multi-input // cannot use to identify its child fields. date_picker.html.erb therefore also sets // data-multi-input-name as a plain string with the intended field name. diff --git a/frontend/src/stimulus/controllers/dynamic/resource-management/resource-timeline.controller.ts b/frontend/src/stimulus/controllers/dynamic/resource-management/resource-timeline.controller.ts index 1145a8dc9029..842007edf951 100644 --- a/frontend/src/stimulus/controllers/dynamic/resource-management/resource-timeline.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/resource-management/resource-timeline.controller.ts @@ -59,7 +59,7 @@ const DEFAULT_GRANULARITY_VIEW = GRANULARITY_VIEWS.resourceTimelineDays; // The resource (row) axis differs per view: the work-package timeline has one // row per work package, the user timeline one row per user. Everything else — // feeds, navigation, granularity, background spans — is identical, so a single -// controller drives both. The only behavioural difference is which query param +// controller drives both. The only behavioral difference is which query param // a date-range selection pre-fills on the new-allocation dialog, which each view // passes explicitly through the `selectionParam` value. export default class ResourceTimelineController extends Controller { @@ -76,7 +76,7 @@ export default class ResourceTimelineController extends Controller { reloadEventName: String, selectionParam: String, // The planner's date range (ISO dates, blank when it has none). Drives where - // the first render is centred — see `initialFocusDate`. + // the first render is centered — see `initialFocusDate`. rangeStart: String, rangeEnd: String, }; @@ -256,10 +256,10 @@ export default class ResourceTimelineController extends Controller { this.calendar.gotoDate(this.startCentered(this.initialDateValue, this.calendar.view.type)); } - // Where the first render is centred: today when it falls within the planner's + // Where the first render is centered: today when it falls within the planner's // range (or there is no range), otherwise the range start nudged in by - // COLUMNS_BEFORE_TODAY so that — once centred — the range begins at the left - // edge. Navigating ("today", granularity) always re-centres on today instead. + // COLUMNS_BEFORE_TODAY so that — once centered — the range begins at the left + // edge. Navigating ("today", granularity) always re-centers on today instead. private initialFocusDate():string { if (!this.rangeStartValue || !this.rangeEndValue) { return this.initialDateValue; } @@ -280,7 +280,7 @@ export default class ResourceTimelineController extends Controller { } // Mark each header column active when an active-span band covers it. - // FullCalendar offers no header-colouring input, so we toggle the class + // FullCalendar offers no header-coloring input, so we toggle the class // on the rendered header cells, depending on the union of active columns. private markActiveColumns():void { if (!this.calendar) { return; } diff --git a/frontend/src/stimulus/controllers/dynamic/sortable-lists/README.md b/frontend/src/stimulus/controllers/dynamic/sortable-lists/README.md index d5170938528a..f15055c073b3 100644 --- a/frontend/src/stimulus/controllers/dynamic/sortable-lists/README.md +++ b/frontend/src/stimulus/controllers/dynamic/sortable-lists/README.md @@ -9,7 +9,7 @@ reference that description through `aria-describedby` on their focus host. Items declare `mobility`: `fixed`, `confined`, or `free`. Mobility gates dragging, selection eligibility, and positional moves. A missing value defaults to `free`; -an unrecognised value resolves to `fixed`. Structural rows such as “Show more” +an unrecognized value resolves to `fixed`. Structural rows such as “Show more” are not sortable items and do not participate in selection. ## Model and ownership diff --git a/frontend/src/stimulus/controllers/dynamic/sortable-lists/item.controller.spec.ts b/frontend/src/stimulus/controllers/dynamic/sortable-lists/item.controller.spec.ts index 94f11ac8db61..99fab482fe2c 100644 --- a/frontend/src/stimulus/controllers/dynamic/sortable-lists/item.controller.spec.ts +++ b/frontend/src/stimulus/controllers/dynamic/sortable-lists/item.controller.spec.ts @@ -694,7 +694,7 @@ describe('Sortable lists item controller', () => { }); }); - it('adds a text/html link flavour when the item has a label', () => { + it('adds a text/html link flavor when the item has a label', () => { const element = document.createElement('article'); connectedControllerFor(element, { @@ -728,7 +728,7 @@ describe('Sortable lists item controller', () => { ); }); - it('keeps a non-web URL out of the text/html flavour', () => { + it('keeps a non-web URL out of the text/html flavor', () => { const element = document.createElement('article'); connectedControllerFor(element, { @@ -1615,7 +1615,7 @@ describe('Sortable lists item controller', () => { }); // A fixed row is still an ordered participant: it anchors drops for its - // orderable neighbours, so its drop target must stay registered. + // orderable neighbors, so its drop target must stay registered. it('still registers a drop target when the item is fixed', async () => { const item = await renderItem({ mobility: 'fixed' }); diff --git a/frontend/src/stimulus/controllers/dynamic/sortable-lists/item.controller.ts b/frontend/src/stimulus/controllers/dynamic/sortable-lists/item.controller.ts index ca13b3d1eb5c..68514d7eb06a 100644 --- a/frontend/src/stimulus/controllers/dynamic/sortable-lists/item.controller.ts +++ b/frontend/src/stimulus/controllers/dynamic/sortable-lists/item.controller.ts @@ -98,7 +98,7 @@ export default class ItemController extends Controller implements R // Provided by the stimulus-elements blessing; absent when the item is not // inside a Primer action-menu (a drag-only consumer), in which case the move - // menu simply does nothing — drag behaviour is unaffected. + // menu simply does nothing — drag behavior is unaffected. declare readonly menuElement:ActionMenuElement; declare readonly hasMenuElement:boolean; @@ -189,7 +189,7 @@ export default class ItemController extends Controller implements R private register():void { this.cleanupFn = combine( // A non-movable item registers no draggable but stays a drop target: - // its movable neighbours still anchor on it. + // its movable neighbors still anchor on it. isOrderableItem(this.element) ? this.registerDraggable() : () => undefined, this.registerDropTarget(), ); @@ -362,7 +362,7 @@ export default class ItemController extends Controller implements R } // Every member of the prospective batch, so an external drop receives the - // whole block; text/html joins in as one link per labelled member. + // whole block; text/html joins in as one link per labeled member. private externalDragData():Record { const members = this.root?.externalDragItems(this.element) ?? [this.element]; const entries = members diff --git a/frontend/src/stimulus/controllers/dynamic/sortable-lists/list-dom.spec.ts b/frontend/src/stimulus/controllers/dynamic/sortable-lists/list-dom.spec.ts index 718fef44075a..dec1a0abcd33 100644 --- a/frontend/src/stimulus/controllers/dynamic/sortable-lists/list-dom.spec.ts +++ b/frontend/src/stimulus/controllers/dynamic/sortable-lists/list-dom.spec.ts @@ -476,17 +476,17 @@ describe('itemMobility', () => { expect(itemMobility(itemWith())).toBe('free'); }); - it.each(['fixed', 'confined', 'free'])('reads the recognised value %s', (value) => { + it.each(['fixed', 'confined', 'free'])('reads the recognized value %s', (value) => { expect(itemMobility(itemWith(value))).toBe(value); }); // A typo must not hand the user a draggable, selectable card that only // fails once the request comes back. - it('falls back to fixed for an unrecognised value', () => { + it('falls back to fixed for an unrecognized value', () => { expect(itemMobility(itemWith('movable'))).toBe('fixed'); }); - it('treats an empty attribute as unrecognised', () => { + it('treats an empty attribute as unrecognized', () => { expect(itemMobility(itemWith(''))).toBe('fixed'); }); @@ -631,7 +631,7 @@ describe('directional move helpers', () => { ul.querySelector(`[data-sortable-lists--item-id-value="${id}"]`)!; const at = (ul:HTMLElement, id:string) => ({ itemElement: byId(ul, id), rowsContainer: ul }); - it('disables one-step moves whose neighbouring row is the divider', () => { + it('disables one-step moves whose neighboring row is the divider', () => { const ul = dividedContainer(); expect(resolveDirectionalPreviousItemId({ ...at(ul, 'b'), direction: 'down' })).toBeUndefined(); expect(resolveDirectionalPreviousItemId({ ...at(ul, 'c'), direction: 'up' })).toBeUndefined(); @@ -720,13 +720,13 @@ describe('resolveItemPosition', () => { describe('resolveItemLabel', () => { it('reads the label from the row item element and returns null without one', () => { - const labelled = document.createElement('li'); - labelled.setAttribute('data-sortable-lists--item-id-value', '1'); - labelled.setAttribute('data-sortable-lists--item-label-value', 'Story one'); + const labeled = document.createElement('li'); + labeled.setAttribute('data-sortable-lists--item-id-value', '1'); + labeled.setAttribute('data-sortable-lists--item-label-value', 'Story one'); const bare = document.createElement('li'); bare.setAttribute('data-sortable-lists--item-id-value', '2'); - expect(resolveItemLabel(labelled)).toEqual('Story one'); + expect(resolveItemLabel(labeled)).toEqual('Story one'); expect(resolveItemLabel(bare)).toBeNull(); }); }); diff --git a/frontend/src/stimulus/controllers/dynamic/sortable-lists/list-dom.ts b/frontend/src/stimulus/controllers/dynamic/sortable-lists/list-dom.ts index c0f82c45e05e..44a36afdda0f 100644 --- a/frontend/src/stimulus/controllers/dynamic/sortable-lists/list-dom.ts +++ b/frontend/src/stimulus/controllers/dynamic/sortable-lists/list-dom.ts @@ -56,7 +56,7 @@ export const sortableItemMobilityAttribute = 'data-sortable-lists--item-mobility */ export type ItemMobility = 'fixed'|'confined'|'free'; -const recognisedMobilities = new Set(['fixed', 'confined', 'free']); +const recognizedMobilities = new Set(['fixed', 'confined', 'free']); // Rows are the direct children of the list's resolved rows container. The // rows container itself (a nested
    , the list element, ...) is decided by the list @@ -91,7 +91,7 @@ export const sortableItemTypeAttribute = 'data-sortable-lists--item-type-value'; * The item's mobility. * * An absent attribute means `free`, so a consumer that renders no mobility - * keeps working. A present but unrecognised value fails closed to `fixed`: a + * keeps working. A present but unrecognized value fails closed to `fixed`: a * typo must not hand the user a draggable card, live move actions and a * selectable row that only fail once the request comes back. */ @@ -102,8 +102,8 @@ export function itemMobility(itemElement:Element):ItemMobility { return 'free'; } - if (!recognisedMobilities.has(value)) { - debugLog(`sortable-lists: unrecognised mobility "${value}", treating the item as fixed`); + if (!recognizedMobilities.has(value)) { + debugLog(`sortable-lists: unrecognized mobility "${value}", treating the item as fixed`); return 'fixed'; } @@ -468,7 +468,7 @@ export function resolveMoveAvailability({ }; } -// The item's row neighbourhood, scanned once and shared by the per-direction +// The item's row neighborhood, scanned once and shared by the per-direction // resolutions above. interface RowContext { rows:Element[]; diff --git a/frontend/src/stimulus/controllers/dynamic/sortable-lists/preview.spec.ts b/frontend/src/stimulus/controllers/dynamic/sortable-lists/preview.spec.ts index bfb290bd0ac6..68886a140530 100644 --- a/frontend/src/stimulus/controllers/dynamic/sortable-lists/preview.spec.ts +++ b/frontend/src/stimulus/controllers/dynamic/sortable-lists/preview.spec.ts @@ -52,7 +52,7 @@ describe('sortable lists drag preview', () => { } describe('sanitizePreview', () => { - it('strips behaviour and interaction-state attributes from the clone', () => { + it('strips behavior and interaction-state attributes from the clone', () => { const element = previewTarget(); sanitizePreview(element); diff --git a/frontend/src/stimulus/controllers/dynamic/sortable-lists/preview.ts b/frontend/src/stimulus/controllers/dynamic/sortable-lists/preview.ts index 5c07724aab6c..ab2c8aff34c2 100644 --- a/frontend/src/stimulus/controllers/dynamic/sortable-lists/preview.ts +++ b/frontend/src/stimulus/controllers/dynamic/sortable-lists/preview.ts @@ -27,11 +27,11 @@ import { html, render } from 'lit-html'; -// Builds the custom native drag preview for a sortable item: a sanitised clone +// Builds the custom native drag preview for a sortable item: a sanitized clone // of the item's preview target, sized to match and carrying the originating // Box's density so its card styling survives being mounted outside the Box. -// Attributes stripped from the cloned drag preview so it carries no behaviour or +// Attributes stripped from the cloned drag preview so it carries no behavior or // stale interaction state. The dynamic `data-*--*-target` attributes are removed // separately in sanitizePreview. // `data-batch-selected` is deliberately absent: it lives on the sortable diff --git a/frontend/src/stimulus/controllers/dynamic/sortable-lists/scrollable.controller.spec.ts b/frontend/src/stimulus/controllers/dynamic/sortable-lists/scrollable.controller.spec.ts index a8da5a5a69c2..3489ca644bfe 100644 --- a/frontend/src/stimulus/controllers/dynamic/sortable-lists/scrollable.controller.spec.ts +++ b/frontend/src/stimulus/controllers/dynamic/sortable-lists/scrollable.controller.spec.ts @@ -122,7 +122,7 @@ describe('Sortable lists scrollable controller', () => { expect(options?.getConfiguration?.(scrollArgs(element, { type: 'x' }))).toEqual({ maxScrollSpeed: 'standard' }); }); - it('honours valid overrides and falls back on invalid ones', async () => { + it('honors valid overrides and falls back on invalid ones', async () => { const valid = await mount('data-sortable-lists--scrollable-allowed-axis-value="horizontal" data-sortable-lists--scrollable-max-scroll-speed-value="fast"'); let options = vi.mocked(autoScrollForElements).mock.lastCall?.[0]; expect(options?.getAllowedAxis?.(scrollArgs(valid.element, { type: 'x' }))).toEqual('horizontal'); diff --git a/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection-orchestrator.ts b/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection-orchestrator.ts index bbbad54011b1..0d00a0ff6ca5 100644 --- a/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection-orchestrator.ts +++ b/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection-orchestrator.ts @@ -33,7 +33,7 @@ import { listBoundaryItem, liveOrderableKeys, liveOrderableListItems, - neighbourItem, + neighborItem, orderedItemElements, orderedSelectedItemElements, resolveCandidate, @@ -283,7 +283,7 @@ export class SelectionOrchestrator { private handleArrow(event:KeyboardEvent, candidate:SelectionCandidate, offset:1|-1):void { event.preventDefault(); - const next = neighbourItem(this.host.rootElement, candidate.itemElement, offset); + const next = neighborItem(this.host.rootElement, candidate.itemElement, offset); if (!next) { return; } diff --git a/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection.spec.ts b/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection.spec.ts index ea17c88256b5..f0f81f33e046 100644 --- a/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection.spec.ts +++ b/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection.spec.ts @@ -32,7 +32,7 @@ import { listBoundaryItem, liveOrderableItems, liveOrderableListItems, - neighbourItem, + neighborItem, orderedItemElements, orderedSelectedItemElements, resolveCandidate, @@ -428,17 +428,17 @@ describe('sortable-lists selection adapter', () => { }); it('finds the next and previous item within one list', () => { - expect(neighbourItem(root, itemFor('1'), 1)).toBe(itemFor('2')); - expect(neighbourItem(root, itemFor('2'), -1)).toBe(itemFor('1')); + expect(neighborItem(root, itemFor('1'), 1)).toBe(itemFor('2')); + expect(neighborItem(root, itemFor('2'), -1)).toBe(itemFor('1')); }); it('does not step across a list boundary', () => { - expect(neighbourItem(root, itemFor('3'), 1)).toBeNull(); + expect(neighborItem(root, itemFor('3'), 1)).toBeNull(); }); // Not filtered by movability, unlike listBoundaryItem below. it('steps onto a non-movable card with the arrow', () => { - expect(neighbourItem(root, itemFor('4'), 1)).toBe(itemFor('5')); + expect(neighborItem(root, itemFor('4'), 1)).toBe(itemFor('5')); }); it('finds the first and last item of the containing list', () => { @@ -456,7 +456,7 @@ describe('sortable-lists selection adapter', () => { it('does not step into a list nested inside the list', () => { appendNestedList(); - expect(neighbourItem(root, itemFor('6'), 1)).toBeNull(); + expect(neighborItem(root, itemFor('6'), 1)).toBeNull(); }); it('confines list-scoped select-all to the items the list itself owns', () => { diff --git a/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection.ts b/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection.ts index 4d04301131c5..cef7445eacf7 100644 --- a/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection.ts +++ b/frontend/src/stimulus/controllers/dynamic/sortable-lists/selection.ts @@ -316,7 +316,7 @@ function listItems(root:HTMLElement, from:HTMLElement):HTMLElement[] { // Arrows step through the list as rendered, fixed cards included. Not // symmetric with listBoundaryItem below, which does filter. -export function neighbourItem(root:HTMLElement, from:HTMLElement, offset:1|-1):HTMLElement|null { +export function neighborItem(root:HTMLElement, from:HTMLElement, offset:1|-1):HTMLElement|null { const items = listItems(root, from); const index = items.indexOf(from); diff --git a/frontend/src/stimulus/controllers/pattern-input.controller.ts b/frontend/src/stimulus/controllers/pattern-input.controller.ts index 209a3946efcd..a40c6ab6c8b5 100644 --- a/frontend/src/stimulus/controllers/pattern-input.controller.ts +++ b/frontend/src/stimulus/controllers/pattern-input.controller.ts @@ -162,7 +162,7 @@ export default class PatternInputController extends Controller { // This resets the cursor position without changing it. // It is necessary because chromium based browsers try to // retain styling and adds an unwanted tag, - // breaking the behaviour of this component + // breaking the behavior of this component const selection = document.getSelection(); if (selection?.rangeCount) { const range = selection.getRangeAt(0); diff --git a/frontend/src/stimulus/helpers/flip-helper.ts b/frontend/src/stimulus/helpers/flip-helper.ts index 09d8e64822aa..33aab42ef2cc 100644 --- a/frontend/src/stimulus/helpers/flip-helper.ts +++ b/frontend/src/stimulus/helpers/flip-helper.ts @@ -26,7 +26,7 @@ //++ // FLIP: run a DOM mutation, then slide each affected element from where it was -// to where it landed. Honours prefers-reduced-motion by applying the mutation +// to where it landed. Honors prefers-reduced-motion by applying the mutation // without animation. export function flipMove(elements:HTMLElement[], mutate:() => void, durationMs = 200):void { if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) { diff --git a/frontend/src/turbo/turbo-navigation-patch.spec.ts b/frontend/src/turbo/turbo-navigation-patch.spec.ts index 50216cbc0eaa..619d253f6d0d 100644 --- a/frontend/src/turbo/turbo-navigation-patch.spec.ts +++ b/frontend/src/turbo/turbo-navigation-patch.spec.ts @@ -46,7 +46,7 @@ describe('turbo-navigation-patch (tripwire for hotwired/turbo#1300)', () => { it('upstream still sources the snapshot from the fetch response (#1300 unfixed)', () => { // When Turbo stops reading `responseHTML` off the fetch response, #1300 // may be fixed upstream and this whole patch can be deleted. This guard - // turns that upgrade into a red test instead of a silent behaviour change. + // turns that upgrade into a red test instead of a silent behavior change. const upstream = String(original); expect(upstream).toContain('responseHTML'); expect(upstream).toContain('fetchResponse'); diff --git a/frontend/src/turbo/turbo-navigation-patch.ts b/frontend/src/turbo/turbo-navigation-patch.ts index 617df14b2a6f..d8e80b5ac461 100644 --- a/frontend/src/turbo/turbo-navigation-patch.ts +++ b/frontend/src/turbo/turbo-navigation-patch.ts @@ -38,7 +38,7 @@ import * as Turbo from '@hotwired/turbo'; * there is no upstream frontend regression test — see the Rails system spec. * * Upstream fix in flight: https://github.com/hotwired/turbo/pull/1549. Once it - * ships in a release we depend on, drop this patch in favour of it. + * ships in a release we depend on, drop this patch in favor of it. * * This is a verbatim fork of `FrameController.proposeVisitIfNavigatedWithAction` * with a single divergence: the history snapshot is built from the live diff --git a/lookbook/docs/01-how-to-use.md.erb b/lookbook/docs/01-how-to-use.md.erb index 3cfc7b554556..b01e77c22d2c 100644 --- a/lookbook/docs/01-how-to-use.md.erb +++ b/lookbook/docs/01-how-to-use.md.erb @@ -19,7 +19,7 @@ If you are looking for a specific object you know by name, you can also use the In the lower left, there is a section called "Patterns". In here, we will document specific decisions and patterns concerning how we approach the use of certain components, or how certain things (like dialogs or flash banners) work in OpenProject. -This includes behaviour and patterns that explicitly do not follow the Primer approach, as well as specific UX patterns that are unique to OpenProject. +This includes behavior and patterns that explicitly do not follow the Primer approach, as well as specific UX patterns that are unique to OpenProject. Some patterns also include implementation guidance and live previews. The [Drag and drop](./patterns/drag_and_drop) page has tabs for design guidance, @@ -35,7 +35,7 @@ OpenProject is a complex, powerful tool. One of its key strengths is its customi Nevertheless, it is very important that OpenProject be intuitive for new users who might not necessarily need that complexity, or indeed be overwhelmed by it. -Our design approach aims to strike the right balance between powerful and accessible with a two-tiered approach: apply sane defaults and present the most common options, and allow advanced users the option (via an additional click) to customise and fine-tune. +Our design approach aims to strike the right balance between powerful and accessible with a two-tiered approach: apply sane defaults and present the most common options, and allow advanced users the option (via an additional click) to customize and fine-tune. ## The UX of Open Source @@ -43,6 +43,6 @@ As an open source project with a considerably long history and a large number of This is quite normal for a large open-source project that has not had a dedicated design team for most of its conception. -One of the goals of the design system is to introduce more coherence and introduce a more modern design language. Whilst we would naturally prefer to be able to update everything at the same time and push the new design system to the entire software, we recognise the need for a more pragmatic approach. The design system will be rolled out in phases, with a careful study of the consequences of updating each component or pattern, and the potential dependencies that will be affected. +One of the goals of the design system is to introduce more coherence and introduce a more modern design language. Whilst we would naturally prefer to be able to update everything at the same time and push the new design system to the entire software, we recognize the need for a more pragmatic approach. The design system will be rolled out in phases, with a careful study of the consequences of updating each component or pattern, and the potential dependencies that will be affected. -_We recognise that UI/UX has not always been the highest priority for open-source projects. This is somewhat understandable given how open source projects have relatively fewer design resources dedicated to it than commercial products. Our goal is to do our part to improve that situation as much as we can and document our process._ +_We recognize that UI/UX has not always been the highest priority for open-source projects. This is somewhat understandable given how open source projects have relatively fewer design resources dedicated to it than commercial products. Our goal is to do our part to improve that situation as much as we can and document our process._ diff --git a/lookbook/docs/10-components/collapsible-section.md.erb b/lookbook/docs/10-components/collapsible-section.md.erb index 21c6144c7e8f..d77ea7fed942 100644 --- a/lookbook/docs/10-components/collapsible-section.md.erb +++ b/lookbook/docs/10-components/collapsible-section.md.erb @@ -7,7 +7,7 @@ The CollapsibleSection allows you to make section headers of a The CollapsibleSection consists of two basic parts: the title and the content below it that will be collapsed. The title offers some additional options. - The title - - A caption (optional): Text, shown next to the title in a subtle colour + - A caption (optional): Text, shown next to the title in a subtle color - Additional information (optional): Free content, shown at the end of the title row - The collapsible content area diff --git a/lookbook/docs/10-components/dialogs/danger-dialog.md.erb b/lookbook/docs/10-components/dialogs/danger-dialog.md.erb index 5f330fb38e77..12e92e5b9658 100644 --- a/lookbook/docs/10-components/dialogs/danger-dialog.md.erb +++ b/lookbook/docs/10-components/dialogs/danger-dialog.md.erb @@ -37,7 +37,7 @@ The additional content area can be replaced with other options, such as differen ### Options -Some elements can be customised: +Some elements can be customized: - The heading text - The contents of the content slot @@ -51,7 +51,7 @@ If you need a variant with a different structure, please contact the UX and Fron #### Do: - Do give the user relevant detail possible. For example, when bulk deleting, list the work packages that will be deleted. If the relevant details are too detailed (for example, there are over 10 work packages to be deleted), provide a summary instead of listing all individual items. -- Do use the simplest variant that will do the job, usually the default with customised text tailored to the specific context. Only choose variations or add additional elements if absolutely required. +- Do use the simplest variant that will do the job, usually the default with customized text tailored to the specific context. Only choose variations or add additional elements if absolutely required. #### Don't: diff --git a/lookbook/docs/10-components/dialogs/feedback-dialog-and-feedback-message.md.erb b/lookbook/docs/10-components/dialogs/feedback-dialog-and-feedback-message.md.erb index 7d92d4dc6dc8..b9ff23d65535 100644 --- a/lookbook/docs/10-components/dialogs/feedback-dialog-and-feedback-message.md.erb +++ b/lookbook/docs/10-components/dialogs/feedback-dialog-and-feedback-message.md.erb @@ -21,7 +21,7 @@ In its default form, the FeedbackDialog contains a message with a green success Whilst all options available to the `Dialog` component are available to the FeedbackMessage, we recommend limiting our use to the following variations: -- **With custom icon**: you can change the icon and the colour of the icon. This simple variation can be used for example to inform the user that a feature is Enterprise-only or to indicate an error. +- **With custom icon**: you can change the icon and the color of the icon. This simple variation can be used for example to inform the user that a feature is Enterprise-only or to indicate an error. - **With additional content**: This is usually just additional text but can be almost any Primer component. The most common components that can be used here are text, a checkbox, a banner and a select panel. - **Footer buttons**: Usually, this is just a close action but it is possible to include custom footer with different actions. - **With loading spinner**: It's possible to display the animated SVG loading spinner instead of an icon. diff --git a/lookbook/docs/10-components/expandable-text.md.erb b/lookbook/docs/10-components/expandable-text.md.erb index 5600a1760c32..6b14fabc7895 100644 --- a/lookbook/docs/10-components/expandable-text.md.erb +++ b/lookbook/docs/10-components/expandable-text.md.erb @@ -24,7 +24,7 @@ versus `multi_line` only decides how much shows while collapsed. ## Choosing an expansion mode -| Mode | Behaviour | Reach for it when | +| Mode | Behavior | Reach for it when | |------|-----------|-------------------| | `inline` (default) | Clicking the expander toggles the full text in place | Short content that reads fine expanded inline | | `dialog` | The expander opens a dialog showing the full content | Long-form or formatted content better shown in a focused dialog | diff --git a/lookbook/docs/10-components/headers/page-header.md.erb b/lookbook/docs/10-components/headers/page-header.md.erb index 24e9aa9290a5..0fc93f07429d 100644 --- a/lookbook/docs/10-components/headers/page-header.md.erb +++ b/lookbook/docs/10-components/headers/page-header.md.erb @@ -23,9 +23,9 @@ There are minor adjustments on how the composition of this component is defined **Divider**: The divider bellow the PageHeader will be always present with the exception of displaying a [Tav nav](https://primer.style/components/tab-nav) as navigation element bellow. -## **Exceptional behaviours** +## **Exceptional behaviors** -- A special behaviour occurs when the page can be saved (or saved as) as one of the PageHeader actions will be used to display an informational text and a link to perform the action. +- A special behavior occurs when the page can be saved (or saved as) as one of the PageHeader actions will be used to display an informational text and a link to perform the action. - Work packages details are the only exceptional case, where the breadcrumb will be used to display the parent work package instead of the navigational hierarchy. ## **Breadcrumb usage** @@ -59,7 +59,7 @@ If you are unsure whether breadcrumbs should be omitted on a particular page, pl **Do** -- Limit the actions of the PageHeader to the global actions of the page (e. for a work package list: favourite, share, full-screen, …). +- Limit the actions of the PageHeader to the global actions of the page (e. for a work package list: favorite, share, full-screen, …). - Use the H1 tag always for the PageHeader. - All actions require their own icon. - Use Icon buttons instead of buttons for actions only when the icon is clear enough to describe the action. diff --git a/lookbook/docs/10-components/headers/sub-header.md.erb b/lookbook/docs/10-components/headers/sub-header.md.erb index 978fdc7ff4c7..78939be415d5 100644 --- a/lookbook/docs/10-components/headers/sub-header.md.erb +++ b/lookbook/docs/10-components/headers/sub-header.md.erb @@ -143,7 +143,7 @@ The sort and group actions are always displayed after the search but before the ### QuickFilters -The `with_quick_filter` slot only offers a generic slot for a quick filter taking care of placement, responsiveness and mobile behaviour. The logic is part of the actual [QuickFilter components](../quick_filters). +The `with_quick_filter` slot only offers a generic slot for a quick filter taking care of placement, responsiveness and mobile behavior. The logic is part of the actual [QuickFilter components](../quick_filters). ```html <%%= diff --git a/lookbook/docs/10-components/status_button.md.erb b/lookbook/docs/10-components/status_button.md.erb index 2f3a750ebbff..e42fe1f4bf45 100644 --- a/lookbook/docs/10-components/status_button.md.erb +++ b/lookbook/docs/10-components/status_button.md.erb @@ -1,6 +1,6 @@ -The Status button communicates the current status of something (like a meeting or a work package) using a label and a colour. Optionally, it allows the user to change the status to something else. The button triggers an action menu with alternate statuses. In read-only mode, the status button does not offer any interaction. +The Status button communicates the current status of something (like a meeting or a work package) using a label and a color. Optionally, it allows the user to change the status to something else. The button triggers an action menu with alternate statuses. In read-only mode, the status button does not offer any interaction. -The colours adapt automatically to the currently active mode (light/dark/light high contrast). +The colors adapt automatically to the currently active mode (light/dark/light high contrast). ## Overview @@ -10,15 +10,15 @@ The colours adapt automatically to the currently active mode (light/dark/light h The component provides two variants: -**1. With colour markers** +**1. With color markers** -For any selectable status item, a small colour marker will be displayed. The colour of this marker is determined by our internal colour helpers. +For any selectable status item, a small color marker will be displayed. The color of this marker is determined by our internal color helpers. <%= embed OpPrimer::StatusButtonComponentPreview, :playground %> -**2. With icons and colours** +**2. With icons and colors** -The button will be coloured, along with a leading icon in the foreground colour (the same as the text). The action dropdown menu will also show icons; the dropdown will not, however, show colours. +The button will be colored, along with a leading icon in the foreground color (the same as the text). The action dropdown menu will also show icons; the dropdown will not, however, show colors. <%= embed OpPrimer::StatusButtonComponentPreview, :with_icon %> @@ -26,12 +26,12 @@ The button will be coloured, along with a leading icon in the foreground colour **Do** -- Use the component when each status needs a colour. (Eg. meeting or work package status) -- Specify the colour for each status; these colours are not automatically set via Primer and must be manually entered. However, using named Primer colour variables is encouraged (although a hex code will also work, thanks to the internal colour helpers who will translate it to other colour modes). +- Use the component when each status needs a color. (Eg. meeting or work package status) +- Specify the color for each status; these colors are not automatically set via Primer and must be manually entered. However, using named Primer color variables is encouraged (although a hex code will also work, thanks to the internal color helpers who will translate it to other color modes). **Don't** -- Don't use the component if the status is not coloured. You can simply use an ActionMenu for this case. +- Don't use the component if the status is not colored. You can simply use an ActionMenu for this case. ## Used in @@ -54,8 +54,8 @@ The StatusButton component is a composition of a Primer Button and Primer Action * `name`: (required) the name of the option * `icon`: (optional) the leading icon -* `color_ref`: (optional) The reference of the object to be coloured (for persisted items (like WorkPackage status or type), this is the ID, otherwise some other unique identifier) -* `color_namespace`: (optional, although it is required when setting `color_ref`) The namespace is usually the name of the coloured objects (e.g "status", "type", "meeting_status". +* `color_ref`: (optional) The reference of the object to be colored (for persisted items (like WorkPackage status or type), this is the ID, otherwise some other unique identifier) +* `color_namespace`: (optional, although it is required when setting `color_ref`) The namespace is usually the name of the colored objects (e.g "status", "type", "meeting_status". The `color_ref` and `color_namespace` are used together to build internally the highlighting classes for the options (e.g `__hl_inline_status_1`) diff --git a/lookbook/docs/10-components/tables/border-box-table.md.erb b/lookbook/docs/10-components/tables/border-box-table.md.erb index 32a013e21753..b5d65f23cbd4 100644 --- a/lookbook/docs/10-components/tables/border-box-table.md.erb +++ b/lookbook/docs/10-components/tables/border-box-table.md.erb @@ -59,7 +59,7 @@ mobile_labels :users On mobile, the usual table headers are replaced with a single `mobile_title` property that you have to set on the table. -### Text wrapping behaviour +### Text wrapping behavior By default, text longer than the column width will truncate with ellipsis. Only the main column has text that wraps around to display the full string. diff --git a/lookbook/docs/20-patterns/02-forms/03-interactivity.md.erb b/lookbook/docs/20-patterns/02-forms/03-interactivity.md.erb index c548b60eb87c..419e32613f7c 100644 --- a/lookbook/docs/20-patterns/02-forms/03-interactivity.md.erb +++ b/lookbook/docs/20-patterns/02-forms/03-interactivity.md.erb @@ -96,7 +96,7 @@ The form preview mechanism can be applied to any form by binding the `form-previ ### Customizing the triggering mechanism: -In some cases we might want to further customize the triggering behaviour, for example when using a date range picker input field. For date range pickers we want to trigger the form preview only when the both the start and end dates are chosen and the datepicker is closed. The solution is to create a form specific controller that will inherit from the `FormPreviewController` controller, and it decides if the `submit` action needs to be called. +In some cases we might want to further customize the triggering behavior, for example when using a date range picker input field. For date range pickers we want to trigger the form preview only when the both the start and end dates are chosen and the datepicker is closed. The solution is to create a form specific controller that will inherit from the `FormPreviewController` controller, and it decides if the `submit` action needs to be called. 1. The form specific controller handles the input changes on the form. It also calls the `submit()` function from the parent controller when the date range picker is not visible anymore. diff --git a/lookbook/docs/20-patterns/04-links.md.erb b/lookbook/docs/20-patterns/04-links.md.erb index 39c2389649f9..157a39cd6333 100644 --- a/lookbook/docs/20-patterns/04-links.md.erb +++ b/lookbook/docs/20-patterns/04-links.md.erb @@ -17,7 +17,7 @@ When a link opens in a new tab, the following must be implemented: # Inline Link Styling -Links that are part of a paragraph or continuous text must be **underlined**. This ensures they are clearly distinguishable from surrounding text, which is especially important for users with colour vision deficiencies. +Links that are part of a paragraph or continuous text must be **underlined**. This ensures they are clearly distinguishable from surrounding text, which is especially important for users with color vision deficiencies. For links in form captions and PageHeader descriptions, this is done automatically. Otherwise, it has to be done [manually](https://primer.style/view-components/lookbook/inspect/primer/beta/link/default) by setting `underline: true`. diff --git a/lookbook/docs/20-patterns/05-dialogs.md.erb b/lookbook/docs/20-patterns/05-dialogs.md.erb index f04fb52d08b6..41f72c641df5 100644 --- a/lookbook/docs/20-patterns/05-dialogs.md.erb +++ b/lookbook/docs/20-patterns/05-dialogs.md.erb @@ -23,7 +23,7 @@ end %> ``` -By default, the trigger element is disabled (via `aria-disabled`) while the request is in flight, preventing double-clicks from opening the dialog twice. This is especially useful when the dialog content is expensive to render. To opt out of this behaviour, set the `data-async-dialog-disable-during-load-value` attribute to `false`: +By default, the trigger element is disabled (via `aria-disabled`) while the request is in flight, preventing double-clicks from opening the dialog twice. This is especially useful when the dialog content is expensive to render. To opt out of this behavior, set the `data-async-dialog-disable-during-load-value` attribute to `false`: ```erb <%%= render(Primer::Beta::Button.new( @@ -174,7 +174,7 @@ end ### Dialogs that should stay open on form submission -Because we normally want to close the dialog when a form is submitted successfully, we have implemented this as the default behaviour. As described in the last section, +Because we normally want to close the dialog when a form is submitted successfully, we have implemented this as the default behavior. As described in the last section, when the submission returns a 4xx or 5xx status code, the dialog will stay open and display the validation errors and will be closed when the form is submitted successfully. If you want to keep a dialog open even after a successful form submission, you can use the `data-keep-open-on-submit="true"` attribute on the dialog. This will prevent the dialog @@ -244,7 +244,7 @@ or cancel the action. The primer specification [suggests a pattern](/lookbook/inspect/primer/alpha/dialog/with_form) for rendering such dialogs. It consists of a form spanning both the body as well as the footer of the dialog. This has the drawback of the footer -potentially being rendered outside of the dialog. That behaviour is undesirable. Primer defines to cope with longer +potentially being rendered outside of the dialog. That behavior is undesirable. Primer defines to cope with longer content by scrolling the body. In order for this to happen, the form should only be rendered inside the body. The submit button can be logically put inside diff --git a/lookbook/docs/20-patterns/06-inplace-edit-fields.md.erb b/lookbook/docs/20-patterns/06-inplace-edit-fields.md.erb index 2ed096d27e01..af2c90bb1f7b 100644 --- a/lookbook/docs/20-patterns/06-inplace-edit-fields.md.erb +++ b/lookbook/docs/20-patterns/06-inplace-edit-fields.md.erb @@ -175,7 +175,7 @@ They may render only the field itself or also include submit and reset buttons. Edit field components define a `display_class`. This class is used to render the read-only display state. -All field components should inherit from `BaseFieldComponent` to get access to the comment field helper and other shared behaviour. +All field components should inherit from `BaseFieldComponent` to get access to the comment field helper and other shared behavior. **Simplified example of an `EditFieldComponent`:** ```ruby @@ -357,7 +357,7 @@ Each `InplaceEditFieldComponent` generates a UUID and stores it in `@system_argu When building the dialog URL, the component passes this UUID as `page_component_id` inside `system_arguments_json` (while excluding its own `:id` key to avoid a clash with the dialog's UUID). On a successful `update`, the controller restores `page_component_id` as `:id` before constructing the response component, so the `wrapper_key` matches the original element on the page and the Turbo Stream replacement lands in the right place. The controller also closes the dialog via `close_dialog_via_turbo_stream` on success, and strips dialog-specific arguments (`wrapper_id`, `form_id`) so they do not bleed into the display component. -### Update behaviour +### Update behavior #### InplaceEditFieldsController diff --git a/lookbook/docs/20-patterns/07-menu-and-navigation.md.erb b/lookbook/docs/20-patterns/07-menu-and-navigation.md.erb index be134ab0472f..805b184f85bc 100644 --- a/lookbook/docs/20-patterns/07-menu-and-navigation.md.erb +++ b/lookbook/docs/20-patterns/07-menu-and-navigation.md.erb @@ -43,7 +43,7 @@ There is a generic `Submenu` class that provides a basic setup of how to collect * Highlight the currently selected query * Create params for the links of each item * Group the queries into collapsible sections - * Favourite + * Favorite * Default * Public * Private diff --git a/lookbook/docs/20-patterns/10-contextual-action-menu.md.erb b/lookbook/docs/20-patterns/10-contextual-action-menu.md.erb index 8a40c5feb207..d4ad54cdf2a6 100644 --- a/lookbook/docs/20-patterns/10-contextual-action-menu.md.erb +++ b/lookbook/docs/20-patterns/10-contextual-action-menu.md.erb @@ -14,7 +14,7 @@ Put the controller on a wrapper you own rather than on the `action-menu` element <%% end %> ``` -Attach it alongside whatever controller already owns the element's ordinary behaviour — the two do not interact. +Attach it alongside whatever controller already owns the element's ordinary behavior — the two do not interact. ## What it does diff --git a/lookbook/docs/20-patterns/17-settings-pages.md.erb b/lookbook/docs/20-patterns/17-settings-pages.md.erb index 315b65a720d5..0c5385580fad 100644 --- a/lookbook/docs/20-patterns/17-settings-pages.md.erb +++ b/lookbook/docs/20-patterns/17-settings-pages.md.erb @@ -2,7 +2,7 @@ Settings pages usually stretch to the full width of the viewport as they tend no ## Settings page form helper -As specified in the documentation for [forms](./forms), we prefer limiting the width of a form for legibility. Because the default behaviour of form elements to fill the full width of the container, we wrap forms in a container that limits its available width. +As specified in the documentation for [forms](./forms), we prefer limiting the width of a form for legibility. Because the default behavior of form elements to fill the full width of the container, we wrap forms in a container that limits its available width. Any view component rendering a form should use the `settings_primer_form_with` form helper instead of the standard `primer_form_with`. The form itself stays unchanged. This way, the rendered form is wrapped into a container with `680px` max-width. diff --git a/lookbook/docs/40-styles/03-colors.md.erb b/lookbook/docs/40-styles/03-colors.md.erb index 0b7b8916b7ae..eddfcf469d14 100644 --- a/lookbook/docs/40-styles/03-colors.md.erb +++ b/lookbook/docs/40-styles/03-colors.md.erb @@ -10,7 +10,7 @@ Primer already offers a wide palette of color variables as well as a [clear guid ## Customization within OpenProject -OpenProject offers the possibility to customize the color palette. For that to work, we unfortunately have to overwrite some of the Primer variables so that every component matches the desired colours. Please note, that we do not adapt these colors depending on the current mode. It is in the users responsibility to select colors that work with all modes. +OpenProject offers the possibility to customize the color palette. For that to work, we unfortunately have to overwrite some of the Primer variables so that every component matches the desired colors. Please note, that we do not adapt these colors depending on the current mode. It is in the users responsibility to select colors that work with all modes. ### Primary button color @@ -103,7 +103,7 @@ The dark mode should be activated in My account/Settings by changing Mode to 'Da #### Technical notes Since we respect the user-theming, in Administration/Design -> ADVANCED SETTINGS, the values for **accent** and **primary button** colors are kept but brightened, so that they work well on dark backgrounds. -However, we enforce the header and the main menu colors to use Primer css variables. Otherwise we have no reliable way to ensure that these elements are also dark enough to fit with the dark mode. So any changes made to the colours of the header and the main menu **will be ignored** in the dark mode. +However, we enforce the header and the main menu colors to use Primer css variables. Otherwise we have no reliable way to ensure that these elements are also dark enough to fit with the dark mode. So any changes made to the colors of the header and the main menu **will be ignored** in the dark mode. ```css.erb --accent-color--dark-mode: design_color.lighten 0.4; diff --git a/lookbook/docs/40-styles/10-box-list-item-states.md.erb b/lookbook/docs/40-styles/10-box-list-item-states.md.erb index 985bf8e2b6d7..7cad930cabab 100644 --- a/lookbook/docs/40-styles/10-box-list-item-states.md.erb +++ b/lookbook/docs/40-styles/10-box-list-item-states.md.erb @@ -14,7 +14,7 @@ Applied when an item is part of the active **(multi-)selection** - e.g. for bulk ### Pressed -Applied to the item that is currently **open in the split-screen**. A stronger blue border is added at the top and bottom (`--box-list-item-pressed-border-color`) to indicate the active detail context. The background colour remains unchanged. +Applied to the item that is currently **open in the split-screen**. A stronger blue border is added at the top and bottom (`--box-list-item-pressed-border-color`) to indicate the active detail context. The background color remains unchanged. An item can carry both states simultaneously when it is selected *and* currently shown in the detail panel. diff --git a/lookbook/previews/op_primer/back_button_link_component_preview.rb b/lookbook/previews/op_primer/back_button_link_component_preview.rb index 3e5b7ae9dffa..aef4f4a111c2 100644 --- a/lookbook/previews/op_primer/back_button_link_component_preview.rb +++ b/lookbook/previews/op_primer/back_button_link_component_preview.rb @@ -32,7 +32,7 @@ module OpPrimer # @display min_height 250px class BackButtonLinkComponentPreview < Lookbook::Preview # Use [`link_to :back`](https://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to) - # special behaviour with Primer styling. + # special behavior with Primer styling. # # `Primer::Beta::Button.new(tag: :a, href: :back)` links to `/back` unfortunately, # hence this tiny component… diff --git a/lookbook/previews/op_primer/expandable_text_component_preview/dialog.html.erb b/lookbook/previews/op_primer/expandable_text_component_preview/dialog.html.erb index cd508f6916b5..c10643ebead6 100644 --- a/lookbook/previews/op_primer/expandable_text_component_preview/dialog.html.erb +++ b/lookbook/previews/op_primer/expandable_text_component_preview/dialog.html.erb @@ -11,7 +11,7 @@ a wide range of project management methodologies, including classic, agile, and hybrid approaches. It provides features for project planning, scheduling, task management, time and cost reporting, and team - collaboration. With its modular architecture, teams can customise their + collaboration. With its modular architecture, teams can customize their workflows to match their specific needs. <% end %> diff --git a/lookbook/previews/op_primer/expandable_text_component_preview/multi_line.html.erb b/lookbook/previews/op_primer/expandable_text_component_preview/multi_line.html.erb index e2ccf2ee198a..a0de06ccc98c 100644 --- a/lookbook/previews/op_primer/expandable_text_component_preview/multi_line.html.erb +++ b/lookbook/previews/op_primer/expandable_text_component_preview/multi_line.html.erb @@ -4,7 +4,7 @@ a wide range of project management methodologies, including classic, agile, and hybrid approaches. It provides features for project planning, scheduling, task management, time and cost reporting, and team - collaboration. With its modular architecture, teams can customise their + collaboration. With its modular architecture, teams can customize their workflows to match their specific needs. <% end %> diff --git a/lookbook/previews/open_project/common/advanced_form_inputs_preview.rb b/lookbook/previews/open_project/common/advanced_form_inputs_preview.rb index b39725bf8fe3..9dc653cfbaa7 100644 --- a/lookbook/previews/open_project/common/advanced_form_inputs_preview.rb +++ b/lookbook/previews/open_project/common/advanced_form_inputs_preview.rb @@ -48,7 +48,7 @@ def advanced_check_box_group # and the previous value is silently preserved. # # Pass `include_hidden: true` to emit a hidden sentinel field before the - # checkboxes. This mirrors the behaviour of Rails' own `check_box` helper + # checkboxes. This mirrors the behavior of Rails' own `check_box` helper # and ensures the key is always present in params — as an empty array when # nothing is checked — so the server can save the empty selection correctly. def check_box_group_with_include_hidden diff --git a/lookbook/previews/open_project/common/datepicker_preview.rb b/lookbook/previews/open_project/common/datepicker_preview.rb index 2463dcc81f89..1776ce046182 100644 --- a/lookbook/previews/open_project/common/datepicker_preview.rb +++ b/lookbook/previews/open_project/common/datepicker_preview.rb @@ -50,7 +50,7 @@ class DatepickerPreview < Lookbook::Preview # For more complex implementations involving date pickers (the work package date field or the baseline modal), # please refer to documentation concerning those specific features for notes on mobile-specific rendering. # - # The library gives us certain functionality out of the box with a fairly high degree of customisation, + # The library gives us certain functionality out of the box with a fairly high degree of customization, # but also introduces limits (which will be mentioned below when relevant). # # Please read the [Flatpickr documentation](https://flatpickr.js.org/instance-methods-properties-elements/) @@ -72,7 +72,7 @@ def single(value: Time.zone.today, in_dialog: false, icon: :calendar) # All date picker are built on the [Flatpickr javascript library](https://flatpickr.js.org/). # On mobile devices, the component will automatically degrade to two inputs with the device's native date picker. # - # The library gives us certain functionality out of the box with a fairly high degree of customisation, + # The library gives us certain functionality out of the box with a fairly high degree of customization, # but also introduces limits (which will be mentioned below when relevant). # # Please read the [Flatpickr documentation](https://flatpickr.js.org/instance-methods-properties-elements/) diff --git a/lookbook/previews/open_project/common/submenu_preview/default.html.erb b/lookbook/previews/open_project/common/submenu_preview/default.html.erb index eebae924b49a..8688f42db724 100644 --- a/lookbook/previews/open_project/common/submenu_preview/default.html.erb +++ b/lookbook/previews/open_project/common/submenu_preview/default.html.erb @@ -8,7 +8,7 @@ ] ), OpenProject::Menu::MenuGroup.new( - header: "Favourite", + header: "Favorite", children: [ OpenProject::Menu::MenuItem.new(title: "Very important version", href: "", selected: false), OpenProject::Menu::MenuItem.new(title: "A baseline view", href: "", selected: true) diff --git a/lookbook/previews/open_project/filter/filter_form_preview/with_hidden_input.html.erb b/lookbook/previews/open_project/filter/filter_form_preview/with_hidden_input.html.erb index 15d0e45880f7..e3b7618c71f4 100644 --- a/lookbook/previews/open_project/filter/filter_form_preview/with_hidden_input.html.erb +++ b/lookbook/previews/open_project/filter/filter_form_preview/with_hidden_input.html.erb @@ -4,7 +4,7 @@ <%# — no `sendForm` redirect needed. %> <%# `output_format:` toggles between JSON (one entry per filter, easier to %> <%# parse server-side) and the URL-style `params` string. Flip the param %> -<%# in the Lookbook sidebar and see the hidden value re-serialise live. %> +<%# in the Lookbook sidebar and see the hidden value re-serialize live. %>
    <%= primer_form_with(url: "/foo", method: :post) do |f| %> <%= From 7255a846cab58cd3e96d1ff38e224b1e46d4e7f2 Mon Sep 17 00:00:00 2001 From: Alexander Brandon Coles Date: Thu, 22 Oct 2026 13:08:11 +0100 Subject: [PATCH 04/11] [OP-20545] Use US spelling in documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Converts British spellings across the docs, release notes included, and updates the in-page anchors of headings whose spelling changed, such as PMflex Artifact. Docs directory names stay as they are, since they are public URLs, and so do quoted names such as the EU Centre of Excellence in PM². https://community.openproject.org/wp/OP-20545 --- CONTRIBUTING.md | 2 +- .../schemas/day_collection_model.yml | 4 +- .../schemas/membership_write_model.yml | 2 +- .../non_working_day_collection_model.yml | 2 +- .../schemas/relation_read_model.yml | 2 +- .../components/schemas/work_package_model.yml | 2 +- .../schemas/work_package_schema_model.yml | 2 +- .../schemas/work_package_write_model.yml | 2 +- docs/api/apiv3/example/README.md | 2 +- docs/api/apiv3/tags/configuration.yml | 2 +- docs/api/apiv3/tags/portfolios.yml | 2 +- docs/api/apiv3/tags/programs.yml | 2 +- docs/api/apiv3/tags/projects.yml | 2 +- .../tags/query_filter_instance_schema.yml | 2 +- docs/api/apiv3/tags/work_packages.yml | 2 +- .../application-architecture/README.md | 2 +- .../product-development-handbook/README.md | 4 +- .../style-guide/frontend/README.md | 2 +- .../gdpr-compliance/README.md | 2 +- .../configuration/README.md | 2 +- .../pre-migration-checklist/README.md | 2 +- .../notification-center/README.md | 2 +- .../1-introduction/README.md | 16 +- .../2-project-management/README.md | 78 +++--- .../3-overview-pm2/README.md | 74 ++--- .../README.md | 70 ++--- .../5-initiating-phase/README.md | 40 +-- .../6-planning-phase/README.md | 82 +++--- .../7-executing-phase/README.md | 16 +- .../8-closing-phase/README.md | 34 +-- .../9-monitor-and-control/README.md | 74 ++--- docs/project-management-guide/README.md | 8 +- .../appendices/README.md | 256 +++++++++--------- docs/release-notes/12/12-0-0/README.md | 2 +- docs/release-notes/12/12-1-0/README.md | 2 +- docs/release-notes/12/12-5-0/README.md | 2 +- docs/release-notes/15/15-1-0/README.md | 2 +- docs/release-notes/15/15-3-1/README.md | 2 +- docs/release-notes/15/15-4-2/README.md | 2 +- docs/release-notes/16/16-1-0/README.md | 2 +- docs/release-notes/16/16-5-0/README.md | 2 +- docs/release-notes/17-0-0/README.md | 4 +- docs/release-notes/17-2-0/README.md | 2 +- docs/release-notes/17-2-4/README.md | 4 +- docs/release-notes/17-3-0/README.md | 2 +- docs/release-notes/17-3-2/README.md | 4 +- docs/release-notes/17-4-0/README.md | 4 +- docs/release-notes/17-6-0/README.md | 2 +- docs/release-notes/17-7-0/README.md | 16 +- docs/release-notes/17-9-0/README.md | 10 +- docs/release-notes/18-0-0/README.md | 2 +- .../ldap-department-synchronization/README.md | 2 +- .../authentication/openid-providers/README.md | 2 +- .../health-status/README.md | 2 +- .../work-package-types/pdf-export/README.md | 14 +- .../projects/project-attributes/README.md | 2 +- .../wiki-providers/health-status/README.md | 2 +- .../project-management-pm2-pmflex/README.md | 40 +-- .../projects/project-home/README.md | 2 +- .../work-packages/exporting/csv/README.md | 2 +- .../exporting/work-package-pdf/README.md | 12 +- .../exporting/xls-excel/README.md | 2 +- .../work-packages/importing/README.md | 2 +- 63 files changed, 473 insertions(+), 473 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cb9ad130e7a1..11b8fe925932 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -103,7 +103,7 @@ but if that is a non-trivial task, we might ask you to create another PR for tha We want to keep the Pull request list as tidy as possible - we will aim close pull requests after an **inactivity period of 30 days** (no comments, no further pushes) -which are not labelled as `work in progress` by us. +which are not labeled as `work in progress` by us. ## Security diff --git a/docs/api/apiv3/components/schemas/day_collection_model.yml b/docs/api/apiv3/components/schemas/day_collection_model.yml index 889ebe7d42a3..f10ae3e8800e 100644 --- a/docs/api/apiv3/components/schemas/day_collection_model.yml +++ b/docs/api/apiv3/components/schemas/day_collection_model.yml @@ -66,7 +66,7 @@ example: title: Saturday - _type: Day date: '2022-05-01' - name: Sunday (Labour day) + name: Sunday (Labor day) working: false _links: self: @@ -75,7 +75,7 @@ example: - href: /api/v3/days/week/7 title: Sunday - href: /api/v3/days/non_working/2022-05-01 - title: Labour day + title: Labor day weekday: href: /api/v3/days/week/7 title: Sunday diff --git a/docs/api/apiv3/components/schemas/membership_write_model.yml b/docs/api/apiv3/components/schemas/membership_write_model.yml index d2035a652da1..e5477641b0b7 100644 --- a/docs/api/apiv3/components/schemas/membership_write_model.yml +++ b/docs/api/apiv3/components/schemas/membership_write_model.yml @@ -37,7 +37,7 @@ properties: notificationMessage: allOf: - $ref: './formattable.yml' - - description: A customised notification message, which will overwrite the standard notification. + - description: A customized notification message, which will overwrite the standard notification. sendNotification: type: boolean description: Set to false, if no notification should get sent. diff --git a/docs/api/apiv3/components/schemas/non_working_day_collection_model.yml b/docs/api/apiv3/components/schemas/non_working_day_collection_model.yml index 4bb6d51d2dab..ed56824fd36d 100644 --- a/docs/api/apiv3/components/schemas/non_working_day_collection_model.yml +++ b/docs/api/apiv3/components/schemas/non_working_day_collection_model.yml @@ -51,7 +51,7 @@ example: title: Saturday - _type: NonWorkingDay date: '2022-05-01' - name: 'Labour day' + name: 'Labor day' _links: self: href: /api/v3/days/non_working/2022-05-01 diff --git a/docs/api/apiv3/components/schemas/relation_read_model.yml b/docs/api/apiv3/components/schemas/relation_read_model.yml index a31fd117f2b1..8699c4f0c465 100644 --- a/docs/api/apiv3/components/schemas/relation_read_model.yml +++ b/docs/api/apiv3/components/schemas/relation_read_model.yml @@ -11,7 +11,7 @@ properties: description: Relation ID name: type: string - description: The internationalised name of this type of relation + description: The internationalized name of this type of relation type: type: string description: The relation type. diff --git a/docs/api/apiv3/components/schemas/work_package_model.yml b/docs/api/apiv3/components/schemas/work_package_model.yml index aaea43b10684..83d13e645d3a 100644 --- a/docs/api/apiv3/components/schemas/work_package_model.yml +++ b/docs/api/apiv3/components/schemas/work_package_model.yml @@ -605,7 +605,7 @@ allOf: items: $ref: "./link.yml" description: |- - List of versions in which the behaviour described by the work package was observed + List of versions in which the behavior described by the work package was observed **Resource**: Collection of Version watchers: diff --git a/docs/api/apiv3/components/schemas/work_package_schema_model.yml b/docs/api/apiv3/components/schemas/work_package_schema_model.yml index 1353fb92aa4c..7c4669ef8670 100644 --- a/docs/api/apiv3/components/schemas/work_package_schema_model.yml +++ b/docs/api/apiv3/components/schemas/work_package_schema_model.yml @@ -4,7 +4,7 @@ type: object description: |- A schema for a work package. This schema defines the attributes of a work package. - TODO: Incomplete, needs to be updated with the real behaviour of schemas (when does which attribute appear?). + TODO: Incomplete, needs to be updated with the real behavior of schemas (when does which attribute appear?). properties: _type: type: string diff --git a/docs/api/apiv3/components/schemas/work_package_write_model.yml b/docs/api/apiv3/components/schemas/work_package_write_model.yml index 1cb99bc74e3b..09dd6c8b885b 100644 --- a/docs/api/apiv3/components/schemas/work_package_write_model.yml +++ b/docs/api/apiv3/components/schemas/work_package_write_model.yml @@ -131,7 +131,7 @@ properties: items: $ref: './link.yml' description: |- - List of versions in which the behaviour described by the work package was observed + List of versions in which the behavior described by the work package was observed **Resource**: Collection of Version labels: diff --git a/docs/api/apiv3/example/README.md b/docs/api/apiv3/example/README.md index 82317c3565c9..64b0ba94ab29 100644 --- a/docs/api/apiv3/example/README.md +++ b/docs/api/apiv3/example/README.md @@ -287,7 +287,7 @@ it can guide other potential clients to correctly communicate with the OpenProje ## Updating a work package -Once the correct work package is found, it can also be updated. Once again, a form can support the client in that endeavour. +Once the correct work package is found, it can also be updated. Once again, a form can support the client in that endeavor. ### Fetching the update form diff --git a/docs/api/apiv3/tags/configuration.yml b/docs/api/apiv3/tags/configuration.yml index 545d101bdcd2..7fb382011df6 100644 --- a/docs/api/apiv3/tags/configuration.yml +++ b/docs/api/apiv3/tags/configuration.yml @@ -1,7 +1,7 @@ --- description: |- The configuration endpoint allows to read certain configuration parameters of the OpenProject instance. - Note that there is no 1:1 relationship between this endpoint and the settings an administrator has at hand to modify the behaviour + Note that there is no 1:1 relationship between this endpoint and the settings an administrator has at hand to modify the behavior of the application via configuration.yml or ENV variables. For now this endpoint will only allow access to settings deemed useful for a client to know in general. diff --git a/docs/api/apiv3/tags/portfolios.yml b/docs/api/apiv3/tags/portfolios.yml index bb8492858989..45121de107a7 100644 --- a/docs/api/apiv3/tags/portfolios.yml +++ b/docs/api/apiv3/tags/portfolios.yml @@ -3,7 +3,7 @@ description: |- Portfolios are one of the types of [workspaces](https://www.openproject.org/docs/api/endpoints/workspaces) in OpenProject structuring the information (e.g. work packages, wikis) into smaller sets. They are typically used to group, structure and manage sub-portfolios, programs and projects that target similar strategic goals of the organization. - As containers, they also control behaviour of the elements within them. One of the most important aspects of this is that portfolios limit permissions by having members with a certain permission set (roles) assigned to them. + As containers, they also control behavior of the elements within them. One of the most important aspects of this is that portfolios limit permissions by having members with a certain permission set (roles) assigned to them. ## Actions diff --git a/docs/api/apiv3/tags/programs.yml b/docs/api/apiv3/tags/programs.yml index 25c6fde708da..8ed37eb457c1 100644 --- a/docs/api/apiv3/tags/programs.yml +++ b/docs/api/apiv3/tags/programs.yml @@ -4,7 +4,7 @@ description: |- (e.g. work packages, wikis) into smaller sets. They are typically used to group, structure and manage projects that target similar strategic goals of the organization and belong to a portfolio. - As containers, they also control behaviour of the elements within them. One of the most important aspects of this is that programs limit permissions by having members with a certain permission set (roles) assigned to them. + As containers, they also control behavior of the elements within them. One of the most important aspects of this is that programs limit permissions by having members with a certain permission set (roles) assigned to them. ## Actions diff --git a/docs/api/apiv3/tags/projects.yml b/docs/api/apiv3/tags/projects.yml index d819038bd54d..3dbedc523183 100644 --- a/docs/api/apiv3/tags/projects.yml +++ b/docs/api/apiv3/tags/projects.yml @@ -2,7 +2,7 @@ description: |- Projects are one of the types of [workspaces](https://www.openproject.org/docs/api/endpoints/workspaces) in OpenProject structuring the information (e.g. work packages, wikis) into smaller sets. They can be used in a classic project management approach but also when structuring work by departments. - As containers, they also control behaviour of the elements within them. One of the most important aspects of this is that projects limit permissions by having members with a certain permission set (roles) assigned to them. + As containers, they also control behavior of the elements within them. One of the most important aspects of this is that projects limit permissions by having members with a certain permission set (roles) assigned to them. Prior to OpenProject 17.0, only projects existed and the concept of workspaces wasn't implemented in the API. With 17.0 the other workspace types (program and portfolio) exist and might be returned in places where before, only projects were. diff --git a/docs/api/apiv3/tags/query_filter_instance_schema.yml b/docs/api/apiv3/tags/query_filter_instance_schema.yml index a08b2cf5010f..019923024d07 100644 --- a/docs/api/apiv3/tags/query_filter_instance_schema.yml +++ b/docs/api/apiv3/tags/query_filter_instance_schema.yml @@ -1,6 +1,6 @@ --- description: |- - A QueryFilterInstanceSchema is a Schema specifically for describing QueryFilterInstances. Because the behaviour of FilterInstances, with regards to the `values` property, differs from one another depending on the chosen Filter, the QueryFilterInstanceSchema explicitly lists the dependencies in its `_dependencies` property. As the property causing the difference is the selected Filter, that property is linked. Apart from that, a QueryFilterInstanceSchema has the same structure a Schema does. + A QueryFilterInstanceSchema is a Schema specifically for describing QueryFilterInstances. Because the behavior of FilterInstances, with regards to the `values` property, differs from one another depending on the chosen Filter, the QueryFilterInstanceSchema explicitly lists the dependencies in its `_dependencies` property. As the property causing the difference is the selected Filter, that property is linked. Apart from that, a QueryFilterInstanceSchema has the same structure a Schema does. ## Linked Properties diff --git a/docs/api/apiv3/tags/work_packages.yml b/docs/api/apiv3/tags/work_packages.yml index 57368b8f7c32..594b3ff46811 100644 --- a/docs/api/apiv3/tags/work_packages.yml +++ b/docs/api/apiv3/tags/work_packages.yml @@ -54,7 +54,7 @@ description: |- | type | The type of the work package | Type | not null | READ / WRITE | | | version | The version associated to the work package | Version | | READ / WRITE | | | targetVersions | List of versions associated to the work package | []Version | | READ / WRITE | | - | observedInVersions | List of versions in which the behaviour described by the work package was observed | []Version | | READ / WRITE | | + | observedInVersions | List of versions in which the behavior described by the work package was observed | []Version | | READ / WRITE | | | watchers | All users that are currently watching this work package | Collection | | READ | **Permission** view work package watchers | ## Local Properties diff --git a/docs/development/application-architecture/README.md b/docs/development/application-architecture/README.md index a92095ff0c5a..360d48d4a7e9 100644 --- a/docs/development/application-architecture/README.md +++ b/docs/development/application-architecture/README.md @@ -96,7 +96,7 @@ OpenProject is continuously tested, developed, and distributed using the followi | Production
    (Docker images) | [Official public OpenProject docker images](https://hub.docker.com/r/openproject/openproject/)
    Continuous delivery for development versions using `dev-*`tags.
    Stable releases through major, minor, or patch level tags. | Development (`dev`, `dev-slim` tag)
    Stable releases (`X`, `X.Y`, `X.Y.Z`, `X-slim`, `X.Y-slim`, `X.Y.Z-slim`) | Automatically on new releases of the OpenProject application | | Production
    (Packages) | [Official public OpenProject Linux packages](../../installation-and-operations/installation/packaged/)

    Stable releases for supported distributions | Stable releases | Automatically on new releases of the OpenProject application | | Production
    (Helm chart) | [Official public OpenProject Helm charts](../../installation-and-operations/installation/helm-chart/)
    Stable releases | Stable releases (configurable through container tags) | Updates to Helm chart are manual, underlying deployment uses OpenProject docker images | -| PullPreview | Temporary instances for development of features scope to a pull request. | Feature branches | Automatically deployed when developers/QA request a pull preview instance by labelling pull requests with the `PullPreview` tag. | +| PullPreview | Temporary instances for development of features scope to a pull request. | Feature branches | Automatically deployed when developers/QA request a pull preview instance by labeling pull requests with the `PullPreview` tag. | ## Patch and change management diff --git a/docs/development/product-development-handbook/README.md b/docs/development/product-development-handbook/README.md index 1533534befc1..983830f66bd6 100644 --- a/docs/development/product-development-handbook/README.md +++ b/docs/development/product-development-handbook/README.md @@ -153,7 +153,7 @@ For internal or customer requirements requirements may directly be created, eval |----------------------------------------------------------------------------|:---------------------------------------------------------------------| | - Product Manager
    - UX Researcher
    - Developer
    - Designer | Specified feature (status “Specified”) in Product Backlog or version | -Based on the Product Managers judgement (taking among other things the RICE score and customer backing into account) validated and prioritized features (status: “In specification”) are specified in more detail: +Based on the Product Managers judgment (taking among other things the RICE score and customer backing into account) validated and prioritized features (status: “In specification”) are specified in more detail: 1. PM specifies the solution and creates mockups (e.g. PowerPoint, Google Docs, …). @@ -161,7 +161,7 @@ Based on the Product Managers judgement (taking among other things the RICE scor 3. PM and Developer validate solution (technical feasibility / solution). - _If this solution touches security relevant components of the application, a Security Engineer is involved to identity and model the associated risks and impacts (thread modelling) according to the documented risks in the [Secure Coding Guidelines](../../development/concepts/secure-coding/#secure-coding-guidelines)._ + _If this solution touches security relevant components of the application, a Security Engineer is involved to identity and model the associated risks and impacts (thread modeling) according to the documented risks in the [Secure Coding Guidelines](../../development/concepts/secure-coding/#secure-coding-guidelines)._ 4. PM / UX Researcher validates the solution through user interviews. (optional) diff --git a/docs/development/style-guide/frontend/README.md b/docs/development/style-guide/frontend/README.md index 485e1d94c71a..3d241ae64df8 100644 --- a/docs/development/style-guide/frontend/README.md +++ b/docs/development/style-guide/frontend/README.md @@ -58,7 +58,7 @@ An example in OpenProject would be the APIV3Service that encapsulates all the lo #### Why - Code is easier to understand and reason about. -- Favours reusability. +- Favors reusability. - Simplifies refactoring. - The state management becomes predictable, easy to trace, and under control. - Aligns with unidirectional data flow (Stores) and the Components Architecture. diff --git a/docs/enterprise-guide/enterprise-cloud-guide/gdpr-compliance/README.md b/docs/enterprise-guide/enterprise-cloud-guide/gdpr-compliance/README.md index 31078cfe26ee..8561b2427f80 100644 --- a/docs/enterprise-guide/enterprise-cloud-guide/gdpr-compliance/README.md +++ b/docs/enterprise-guide/enterprise-cloud-guide/gdpr-compliance/README.md @@ -38,7 +38,7 @@ All OpenProject GmbH employees employ industry standard data security measures t The GDPR grants the right to access, modify, receive, and delete their own data to every data subject. -OpenProject customers with admin accounts on their instance act as data controllers for their team members and have comprehensive tools to fulfil these requests on behalf of the data subjects they are responsible for. +OpenProject customers with admin accounts on their instance act as data controllers for their team members and have comprehensive tools to fulfill these requests on behalf of the data subjects they are responsible for. Below, we outline some of these key data rights. diff --git a/docs/installation-and-operations/configuration/README.md b/docs/installation-and-operations/configuration/README.md index bf6013beb495..9e7e1616ae8d 100644 --- a/docs/installation-and-operations/configuration/README.md +++ b/docs/installation-and-operations/configuration/README.md @@ -780,7 +780,7 @@ OPENPROJECT_RATE_LIMITING_LOGIN_BAN__PERIOD="3600" > application-level setting counts only **failed** attempts and operates over a longer rolling window. > If you lower `brute_force_block_after_failed_logins` below `BURST_LIMIT` (default 20), the > application-level lockout will fire before this rule does. Keep the two thresholds consistent to -> avoid surprising behaviour. For example, set `BURST_LIMIT` to match or be lower than +> avoid surprising behavior. For example, set `BURST_LIMIT` to match or be lower than > `brute_force_block_after_failed_logins`. ##### Lost password rate limiting (disabled by default) diff --git a/docs/installation-and-operations/jira-migration/pre-migration-checklist/README.md b/docs/installation-and-operations/jira-migration/pre-migration-checklist/README.md index cfdbe0cc3efc..21c60451a844 100644 --- a/docs/installation-and-operations/jira-migration/pre-migration-checklist/README.md +++ b/docs/installation-and-operations/jira-migration/pre-migration-checklist/README.md @@ -65,7 +65,7 @@ For anything on this list your teams actually rely on, decide now how you'll han - [ ] For anything you decided to keep from the "what doesn't migrate" review above, export it separately now (e.g. via CSV) before you lose easy access to it. - [ ] **Note your Jira priority order (severity ranking) before migrating.** The migrator doesn't preserve priority order, colors, or icons — only the name. Since OpenProject falls back to whichever priority is first in the list when an issue has none set, you'll likely need to manually reorder priorities in OpenProject afterward to match your actual severity ranking. - [ ] **Note which issue type is the default per project, if that matters to you.** No migrated type is marked as default, regardless of what was default in Jira — you'll need to set this manually in OpenProject after migration. -- [ ] **Decide whether to import Jira's resolution fields.** By default, the resolution is appended to the status name (e.g. "Done - Fixed"), which creates an additional status per status/resolution combination and the resulution date is imported as a custom field. If you don't need this, select **Exclude resolution fields for this configuration** in the import configuration to keep your status list lean. +- [ ] **Decide whether to import Jira's resolution fields.** By default, the resolution is appended to the status name (e.g. "Done - Fixed"), which creates an additional status per status/resolution combination and the resolution date is imported as a custom field. If you don't need this, select **Exclude resolution fields for this configuration** in the import configuration to keep your status list lean. ## OpenProject-side prerequisites diff --git a/docs/mobile-app-guide/core-features/notification-center/README.md b/docs/mobile-app-guide/core-features/notification-center/README.md index 48e98737df4b..1235da963035 100644 --- a/docs/mobile-app-guide/core-features/notification-center/README.md +++ b/docs/mobile-app-guide/core-features/notification-center/README.md @@ -59,7 +59,7 @@ To keep your inbox tidy, mark notifications as read after reviewing them. You ca - Using the more menu (three dots) in the notification list to mark all notifications from a single work package as read. - Swipe the entire card to the right or left to mark all notifications from a single work package as read. -- Mark all notifications as read in the notification centre using the mark all as read action on the top right corner of the notification list. This action is also available on the header of the work package details view when it has notifications. +- Mark all notifications as read in the notification center using the mark all as read action on the top right corner of the notification list. This action is also available on the header of the work package details view when it has notifications. - Additionally, you can mark single activities as read without marking the rest inside the work packages activities by using the more menu (three dots) for each activity. ![Different ways of marking notifications as read](notifications-mark_as_read.png) diff --git a/docs/project-management-guide/1-introduction/README.md b/docs/project-management-guide/1-introduction/README.md index f28a9400be53..723825670696 100644 --- a/docs/project-management-guide/1-introduction/README.md +++ b/docs/project-management-guide/1-introduction/README.md @@ -22,14 +22,14 @@ This guide sets out to provide an introduction to the PM² Project Management Me - a common vocabulary (glossary) which makes it easier for project teams to communicate and apply project management concepts - best practices-it is up to the Project Managers (PMs) and project teams to choose the PM² practices that will bring most value to their projects -- links to PM² resources (online resources, Artefact templates and examples) +- links to PM² resources (online resources, Artifact templates and examples) - an introduction to other PM² models, such as PM²-Agile, PM²-PgM (for Programme Management) and PM²-PfM (for Portfolio Management). This guide can be read from beginning to end, to learn about the methodology, or it can be used as a reference, to help you as you practise PM². ## 1.3 About the PM² methodology -PM² is a Project Management Methodology developed by the European Commission. Its purpose is to enable Project Managers (PMs) to deliver solutions and benefits to their organisations by effectively managing the entire lifecycle of their project. PM² has been created with the needs of European Union Institutions and projects in mind, however, the best practices described in PM² are applicable to projects in any organisation. +PM² is a Project Management Methodology developed by the European Commission. Its purpose is to enable Project Managers (PMs) to deliver solutions and benefits to their organizations by effectively managing the entire lifecycle of their project. PM² has been created with the needs of European Union Institutions and projects in mind, however, the best practices described in PM² are applicable to projects in any organization. PM² is a light and easy-to-implement methodology which project teams can tailor to their specific needs. PM² is fully supported by a comprehensive training programme (including workshops and coaching sessions), online documentation and an active Community of Practice (currently only available within the European Commission and to a number of affiliate European Institutions). PM² incorporates elements from a wide range of globally accepted project management best practices, captured in standards and methodologies. Its development has also been influenced by operational experience on various projects both within European Union Institutions and external bodies. @@ -37,8 +37,8 @@ PM² incorporates elements from a wide range of globally accepted project manage - a project governance structure - process guidelines -- artefact templates -- guidelines for using the artefacts +- artifact templates +- guidelines for using the artifacts - a set of effective mindsets. **PM² improves the effectiveness of project management by:** @@ -70,10 +70,10 @@ By opening PM², the Initiative aims to enhance project management competency wi Opening PM² does this by: -- rationalising project management approaches across European Union Institutions and beyond +- rationalizing project management approaches across European Union Institutions and beyond - establishing a common language and processes, resulting in effective project communication - providing a common set of productive mindsets -- enabling transparency and visibility for cross-organisational project collaborations +- enabling transparency and visibility for cross-organizational project collaborations - enabling better project management, leading to improved cost/effort efficiency - enabling the improved monitor and control of European Union-funded projects and grants - applying the European Commission decision of 12 December 2011 (2011/833/EU) on the reuse of Commission documents to promote accessibility and reuse. @@ -89,11 +89,11 @@ You can also download directly all PM² Guides from the Publications Office of t ### 1.5.2 Project Support Network -The PM² Project Support Network is an EU Institutions wide network of Local Project Support Offices (LPSOs) which are coordinated and supported by the Centre of Excellence in PM² (CoEPM²). The PM² Project Support Network (PSN) aims to become a decentralised project management support network which provides guidance and support to PM² users on both the PM² Methodology and the effective use of project management tools \& techniques more broadly. +The PM² Project Support Network is an EU Institutions wide network of Local Project Support Offices (LPSOs) which are coordinated and supported by the Centre of Excellence in PM² (CoEPM²). The PM² Project Support Network (PSN) aims to become a decentralized project management support network which provides guidance and support to PM² users on both the PM² Methodology and the effective use of project management tools \& techniques more broadly. The Project Support Network: - promotes the exchange and sharing of knowledge, experiences and best practices - makes it possible to collect feedback to continuously improve and build on the PM² Methodology - enables the Local Project Support Offices (LPSOs) to support each other as a community -- depends on the contributions of PM² champions (individuals and organisations). +- depends on the contributions of PM² champions (individuals and organizations). diff --git a/docs/project-management-guide/2-project-management/README.md b/docs/project-management-guide/2-project-management/README.md index 003577c45c9a..8e3633fa7da9 100644 --- a/docs/project-management-guide/2-project-management/README.md +++ b/docs/project-management-guide/2-project-management/README.md @@ -14,21 +14,21 @@ This section introduces basic project management concepts and provides the conte ### 2.1.1 What is a project? -A project is a temporary organisational structure set up to create a unique product or service (output) within certain constraints such as time, cost, and quality. +A project is a temporary organizational structure set up to create a unique product or service (output) within certain constraints such as time, cost, and quality. - Temporary means that the project has a well-defined start and end. - Unique output means that the project's product or service has not been created before. It may be similar to another product, but there will always be a degree of uniqueness. - A project's output may be a product (e.g. a new application) or a service (e.g. a consulting service, a conference or a training programme). -The project is defined, planned, and executed under certain external (or self-imposed) constraints. These can relate to scheduling, budgeting, quality, but also to the project's organisational environment (e.g. risk attitude, capabilities, available capacity, etc.). +The project is defined, planned, and executed under certain external (or self-imposed) constraints. These can relate to scheduling, budgeting, quality, but also to the project's organizational environment (e.g. risk attitude, capabilities, available capacity, etc.). ![Fig 2.1 Key project characteristics](02.01.png) -A successful project ends when its scope objective has been achieved and all deliverables have been produced and accepted by the organisation or person that requested the project (the client). The deliverables are then handed over to the client and the project team is disbanded. +A successful project ends when its scope objective has been achieved and all deliverables have been produced and accepted by the organization or person that requested the project (the client). The deliverables are then handed over to the client and the project team is disbanded. -Projects are different from normal day-to-day work (operations) and are best managed with a special temporary organisational structure in order to: +Projects are different from normal day-to-day work (operations) and are best managed with a special temporary organizational structure in order to: - define the project scope and its deliverables (products or services) -- create a business justification for the investment (by defining the project's value for the organisation, outlining the business context, listing alternative solutions, etc.) +- create a business justification for the investment (by defining the project's value for the organization, outlining the business context, listing alternative solutions, etc.) - identify project stakeholders and define a project core team - create the project plans to help guide and manage the project - assign and coordinate project work to teams @@ -38,19 +38,19 @@ Projects are different from normal day-to-day work (operations) and are best man ### 2.1.2 Why we do projects -Every project aims to introduce a new product/service or to improve an existing one. Achieving the goal is expected to bring about benefits to the organisation (e.g. a new organisation-wide document management system can increase productivity by introducing a new way of searching, reading and filing documents). A project can also be seen as a transformational process, which turns ideas into reality. +Every project aims to introduce a new product/service or to improve an existing one. Achieving the goal is expected to bring about benefits to the organization (e.g. a new organization-wide document management system can increase productivity by introducing a new way of searching, reading and filing documents). A project can also be seen as a transformational process, which turns ideas into reality. -Projects may be carried out to maintain current business operations (e.g. sustain the current level of service), to transform business operations, or to improve the way of working so the organisation can be more efficient in the future. +Projects may be carried out to maintain current business operations (e.g. sustain the current level of service), to transform business operations, or to improve the way of working so the organization can be more efficient in the future. Projects start for many different reasons: - In response to a client request for a new product or service. - In response to a market demand or opportunity for a new product or service. -- In response to a change in legislation or organisational needs. +- In response to a change in legislation or organizational needs. - In response to an audit which outlines improvements that should be made. - In response to a new product or service from a competitor. - To make use of a new technology. -- To integrate processes in the light of the merger of two or more departments or organisations. +- To integrate processes in the light of the merger of two or more departments or organizations. - To update an existing process. - To relocate to new premises. - To raise awareness on a topic. @@ -62,7 +62,7 @@ Projects start for many different reasons: Although project teams tend to focus their efforts on producing deliverables, it should be remembered that project deliverables are merely a means to an end. The real purpose of a project is to achieve given outcomes that will yield measurable benefits. -Therefore, it is important for everyone involved in managing and executing a project (managers and team members) to understand the relationship between project outputs, outcomes and benefits. They must be able to identify the outputs, outcomes and benefits of their projects. Without this understanding, the project participants can lose sight of the project's original purpose and produce deliverables, which are of little (or no) value to the organisation. Thus: +Therefore, it is important for everyone involved in managing and executing a project (managers and team members) to understand the relationship between project outputs, outcomes and benefits. They must be able to identify the outputs, outcomes and benefits of their projects. Without this understanding, the project participants can lose sight of the project's original purpose and produce deliverables, which are of little (or no) value to the organization. Thus: - Project outputs (deliverables) are products/services, which introduce something new (a change). - The change results in an outcome. @@ -70,12 +70,12 @@ Therefore, it is important for everyone involved in managing and executing a pro ![Fig 2.3 Project outputs, outcomes and benefits](02.03.png) -Note that project outcomes and benefits are often realised only after the project has closed. +Note that project outcomes and benefits are often realized only after the project has closed. The table below illustrates this with a simple example: | Example of outputs, outcomes and benefits. | | | :-- | :-- | -| Project Output | Adoption of the PM² Methodology within an organisation. | +| Project Output | Adoption of the PM² Methodology within an organization. | | Project Outcomes | - Increased project quality.
    - Improved visibility of project objectives, status and forecasts.
    - Capability to have better control over contractor work and deliverables. | | Project Benefits | - Project cost overruns decreased by 30\%
    - Productivity increased by 30\%. | @@ -83,7 +83,7 @@ The table below illustrates this with a simple example: ### 2.2.1 What is project management? -Project management can be described as the activities of planning, organising, securing, monitoring and managing the resources and work necessary to deliver specific project goals and objectives in an effective and efficient way. +Project management can be described as the activities of planning, organizing, securing, monitoring and managing the resources and work necessary to deliver specific project goals and objectives in an effective and efficient way. The project management approach used should always be tailored to the needs of the project. When using PM², a Project Manager (PM) should use (and if needed after tailoring) only those parts that contribute to the effective management of their project. @@ -92,27 +92,27 @@ The project management approach used should always be tailored to the needs of t Project documentation is a key activity in project management. It carries through from the start of a project to its completion. Project documentation: - sharpens thinking by forcing people to put vague thoughts and plans into words -- crystallises planning +- crystallizes planning - defines the project scope for approval, ensuring that all project stakeholders and project team members share the same expectations on what is to be delivered and when - provides all stakeholders with a clear picture of the project requirements - facilitates communication with internal and external groups - provides a baseline for monitoring and controlling a project's progress - provides a record of important decisions - provides the information required by official audits -- supports organisational memory and acts as a historical reference, which can be used to increase the chances of success of future projects. +- supports organizational memory and acts as a historical reference, which can be used to increase the chances of success of future projects. -Project documentation should of course, adhere to the quality standards of the organisation and the project regarding format, style, etc. However, above all, it should add value fulfilling its purpose and be clear and easy to understand. +Project documentation should of course, adhere to the quality standards of the organization and the project regarding format, style, etc. However, above all, it should add value fulfilling its purpose and be clear and easy to understand. ### 2.2.3 The Project Support Office (PSO) -A Project Support Office (PSO) is an organisational body (or entity) that provides services, which support project management. These can range from providing simple support functions to helping link projects to strategic goals. Not all organisations have a Project Support Office (PSO).A Project Support Office (PSO) can: +A Project Support Office (PSO) is an organizational body (or entity) that provides services, which support project management. These can range from providing simple support functions to helping link projects to strategic goals. Not all organizations have a Project Support Office (PSO).A Project Support Office (PSO) can: - offer administrative support, assistance and training to Project Managers (PMs) and other staff -- collect, analyse and report on project progress data and information +- collect, analyze and report on project progress data and information - assist with project scheduling, resource planning, coordination and Project Management Information System (PMIS) use - maintain a central project repository (of Project Documents, Risks, Lessons Learned) - coordinate configuration management and quality assurance activities -- monitor adherence to methodology guidelines and other organisational standards +- monitor adherence to methodology guidelines and other organizational standards - tailor the project management methodology to new best practices and help project teams implement the updated methodology effectively. ### 2.2.4 Programme management @@ -127,20 +127,20 @@ A project portfolio is a collection of projects, programmes and other activities in terms of meeting strategic objectives. The projects or programmes in a portfolio are not necessarily inter-dependent on inter-related. From a strategic point of view, portfolios are higher-level components than programmes and projects. It is at the portfolio level that investment decisions are made, resources allocated, and priorities identified. -It is very important for people involved in project definition and management to understand the differences between-and specific management requirements of-projects, programmes and portfolios. They should also be able to define or position their work at the right level (i.e. know if their work would be better managed as a programme or a network of projects), while always being aware of the management and organisational context of their work (see Appendix D). +It is very important for people involved in project definition and management to understand the differences between-and specific management requirements of-projects, programmes and portfolios. They should also be able to define or position their work at the right level (i.e. know if their work would be better managed as a programme or a network of projects), while always being aware of the management and organizational context of their work (see Appendix D). ![Fig 2.4 Relationships between strategy, project, programme, portfolio and operations](02.04.png) ### 2.2.6 Projects vs operations Projects are temporary and should therefore have a definite start and end. A project should be considered complete when it is determined that its goals and objectives have been accomplished. Once this happens, the project team should be disbanded. -Operations, on the other hand, comprises the ongoing day-to-day activities undertaken by a permanent organisation to deliver services or products. +Operations, on the other hand, comprises the ongoing day-to-day activities undertaken by a permanent organization to deliver services or products. However, people often find themselves involved in so-called projects that have been going on for years, working with moving targets or a continuously expanded scope, which sometimes includes activities that should be classified as maintenance or operations. These are situations where the projects have been allowed to either become uncontrollable, or to move into operations (maintenance) mode. In most projects, the operations period begins after the project's main products have been produced and accepted by the client. -How do you recognise that a project has slipped into operations mode? +How do you recognize that a project has slipped into operations mode? - The main project deliverables have been produced and the client has accepted them. - The main project output (deliverable) is in use. @@ -150,33 +150,33 @@ How do you recognise that a project has slipped into operations mode? ## 2.3 Project environment -### 2.3.1 Project organisation +### 2.3.1 Project organization -It would be convenient to assume that all PM² Project Managers (PMs) operate within their organisations in a homogenous environment and with consistent levels of authority and responsibility. This is generally not the case, however. +It would be convenient to assume that all PM² Project Managers (PMs) operate within their organizations in a homogenous environment and with consistent levels of authority and responsibility. This is generally not the case, however. -There are typically several ways of organising projects within an organisation, which utilise one of the following structures or a combination of them. +There are typically several ways of organizing projects within an organization, which utilize one of the following structures or a combination of them. **The functional structure** -In a functional organisational structure, project work is integrated into the work performed by the permanent organisation. Project members and other resources are borrowed from multiple sections of the functional organisation. The Project Manager (PM) tends to have limited authority and needs to involve senior management in the management of important project issues. Project work is often viewed as having lower priority than everyday work. +In a functional organizational structure, project work is integrated into the work performed by the permanent organization. Project members and other resources are borrowed from multiple sections of the functional organization. The Project Manager (PM) tends to have limited authority and needs to involve senior management in the management of important project issues. Project work is often viewed as having lower priority than everyday work. **The projectized structure** -On the other end of the spectrum, in a projectized organisation, there is only a basic permanent (functional) hierarchy, and all work is organised and performed within temporary project organisations. Project resources are brought together specifically for the purpose of a project and work more or less exclusively for the project. At the end of the project, resources are either reassigned to another project or returned to a resource pool. +On the other end of the spectrum, in a projectized organization, there is only a basic permanent (functional) hierarchy, and all work is organized and performed within temporary project organizations. Project resources are brought together specifically for the purpose of a project and work more or less exclusively for the project. At the end of the project, resources are either reassigned to another project or returned to a resource pool. **The matrix structure** -A matrix organisation is a blended organisational structure. Additional temporary project organisations are created alongside the functional hierarchy to achieve specific project goals and work. The role of the Project Manager (PM) is recognised as central and key to the project's success, and the Project Steering Committee (PSC) typically delegates enough authority and responsibility to the Project Manager (PM) and the Business Manager (BM) for them to manage the project and its resources. Matrix organisations can be further categorised as weak, balanced and strong matrix organisations, the difference being the level of authority and autonomy given to the project organisation. +A matrix organization is a blended organizational structure. Additional temporary project organizations are created alongside the functional hierarchy to achieve specific project goals and work. The role of the Project Manager (PM) is recognized as central and key to the project's success, and the Project Steering Committee (PSC) typically delegates enough authority and responsibility to the Project Manager (PM) and the Business Manager (BM) for them to manage the project and its resources. Matrix organizations can be further categorized as weak, balanced and strong matrix organizations, the difference being the level of authority and autonomy given to the project organization. ### 2.3.2 Developing project management competences -Project management involves much more than creating schedules and budgets, and Project Managers (PMs) must have a wide range of technical and behavioural skills at their disposal. +Project management involves much more than creating schedules and budgets, and Project Managers (PMs) must have a wide range of technical and behavioral skills at their disposal. To develop the competences required to manage projects effectively. Project Managers (PMs) need to: -- understand how projects are handled within the organisation (talk to colleagues) -- review any project methodologies, standards and frameworks that exist in the organisation -- follow a project management course (e.g. a course offered by a recognised PM² training provider) +- understand how projects are handled within the organization (talk to colleagues) +- review any project methodologies, standards and frameworks that exist in the organization +- follow a project management course (e.g. a course offered by a recognized PM² training provider) - reflect on their project management-what is successful, what could be improved? - become an active member of the PM² Community-participate in forum discussions and learn from questions asked by other Project Managers (PMs) - talk to more experienced Project Managers (PMs) about how they run their projects. @@ -189,16 +189,16 @@ It is up to the Project Manager (PM) to acquire these skills and invest in their Project Managers (PMs) need to: -- understand the project management methodology used in their organisation (e.g. PM²) +- understand the project management methodology used in their organization (e.g. PM²) - have the technical competences required to effectively manage the initiation, planning, execution, monitoring, controlling, and closing of a project. -On top of this, the role requires skills to work effectively with people and within the broader organisational context. These include the contextual and behavioural skills necessary to manage complex projects with diverse teams and stakeholder groups that have pluralistic and conflicting priorities. +On top of this, the role requires skills to work effectively with people and within the broader organizational context. These include the contextual and behavioral skills necessary to manage complex projects with diverse teams and stakeholder groups that have pluralistic and conflicting priorities. Project Managers (PMs) thus also need to know/understand: - how to communicate, lead, motivate, negotiate, solve problems and deal with issues, conduct meetings and workshops, report project status, etc. - the business context and the general project environment (i.e. sociocultural, political, physical, etc.) -- organisational policies and standards (e.g. security, organisational architecture, audits, etc.) +- organizational policies and standards (e.g. security, organizational architecture, audits, etc.) - how the end-product or service will be maintained after it is delivered. Additionally, subject-specific knowledge (e.g. IT, policy, etc.) is often relevant and useful to a Project Manager's (PM) role. @@ -223,18 +223,18 @@ Source: IPMA-ICB (adapted) The above competences may not necessarily be independent and each can have an impact on others. However, the filter that determines what is more important (e.g. self or common interest, time or quality, results or balance, etc.) lies in our values and ethics. Therefore, competences related to the appreciation of values and ethics have a prominent position compared to the rest because it is our ethical profile that guides us on how we should apply our competencies, and determines what we consider good or bad, right or wrong, in any given situation, decision and action. -Note that Project Managers (PMs) and Business Managers (BMs) should demonstrate these competencies effectively, consistently and appropriately to the given situation, while remaining aligned with organisational and professional values and ethics. The aim is to achieve the project goals by making (and acting on) the right decisions, at the right time, in the right way and for the right reasons. This can be a challenge for Project Managers (PMs), who often face tensions between making decisions based on goals and values, and meeting the needs of various stakeholders. +Note that Project Managers (PMs) and Business Managers (BMs) should demonstrate these competencies effectively, consistently and appropriately to the given situation, while remaining aligned with organizational and professional values and ethics. The aim is to achieve the project goals by making (and acting on) the right decisions, at the right time, in the right way and for the right reasons. This can be a challenge for Project Managers (PMs), who often face tensions between making decisions based on goals and values, and meeting the needs of various stakeholders. Such decisions and tensions become easier to manage when Project Managers (PMs) have developed an ethical disposition, which involves the balancing of goals and skills, personal integrity and moral virtue. -Although all virtues (logical and moral) affect all competences, the virtues of judgment, prudence and insightfulness are (comparatively) more related to demonstrating the perspective competencies, while the moral virtues of honesty, fairness, friendliness, generosity, temperance, courage, humour, and magnanimity and magnificence, are (comparatively) more related to demonstrating people competences (see Appendix F). +Although all virtues (logical and moral) affect all competences, the virtues of judgment, prudence and insightfulness are (comparatively) more related to demonstrating the perspective competencies, while the moral virtues of honesty, fairness, friendliness, generosity, temperance, courage, humor, and magnanimity and magnificence, are (comparatively) more related to demonstrating people competences (see Appendix F). ## Disclaimer -Reproduction and reuse is authorised provided the source is acknowledged. +Reproduction and reuse is authorized provided the source is acknowledged. Document licensed under CC BY 4.0 license (https://creativecommons.org/licenses/by/4.0/). The Commission's reuse policy is implemented by Commission Decision 2011/833/EU of 12 December 2011 on the reuse of Commission documents (OJ L 330, 14.12.2011, p. 39 - https://eur-lex.europa.eu/eli/dec/2011/833/oj). The PM² logo is the property of the European Union and may not be registered as a trademark or otherwise, nor used separately from these documents. -Neither the publication nor the logo can be used in a way which suggests endorsement of an external organisation by the European Union. +Neither the publication nor the logo can be used in a way which suggests endorsement of an external organization by the European Union. diff --git a/docs/project-management-guide/3-overview-pm2/README.md b/docs/project-management-guide/3-overview-pm2/README.md index 67c31bb29757..ff6f507a1d2f 100644 --- a/docs/project-management-guide/3-overview-pm2/README.md +++ b/docs/project-management-guide/3-overview-pm2/README.md @@ -2,7 +2,7 @@ sidebar_navigation: title: 3 PM² methodology overview priority: 850 -description: "Presents the House of PM² framework and explains its four pillars: Governance, Lifecycle, Processes, and Artefacts, all supported by PM² Mindsets. It introduces the four project lifecycle phases (Initiating, Planning, Executing, Closing) and explains tailoring to different project contexts." +description: "Presents the House of PM² framework and explains its four pillars: Governance, Lifecycle, Processes, and Artifacts, all supported by PM² Mindsets. It introduces the four project lifecycle phases (Initiating, Planning, Executing, Closing) and explains tailoring to different project contexts." --- # 3 Overview of the PM² methodology @@ -14,7 +14,7 @@ The PM² Methodology is built on Project Management best practices and is suppor 1. a project governance model (i.e. Roles \& Responsibilities) 2. a project lifecycle (i.e. Project Phases) 3. a set of processes (i.e. project management activities) -4. a set of project Artefacts (i.e. documentation templates and guidelines). +4. a set of project Artifacts (i.e. documentation templates and guidelines). ![Fig 3.1 The House of PM²](03.01.png) @@ -22,14 +22,14 @@ The spirit of the PM² Methodology is further defined by the PM² Mindsets, whic ## 3.2 The PM² lifecycle -The PM² project lifecycle has four sequential and non-overlapping phases with a different type of activity predominant in each phase (i.e. initiating activities are predominant in the Initiating Phase, etc.). However, while phase-related activities peak in terms of effort during a specific phase, activities of this type can also be executed during neighbouring phase(s) (e.g. planning activities are also repeated in the Executing Phase). +The PM² project lifecycle has four sequential and non-overlapping phases with a different type of activity predominant in each phase (i.e. initiating activities are predominant in the Initiating Phase, etc.). However, while phase-related activities peak in terms of effort during a specific phase, activities of this type can also be executed during neighboring phase(s) (e.g. planning activities are also repeated in the Executing Phase). A project moves on to the next phase when the goals of its current phase have been deemed achieved as the results of a formal (or less formal) phase-exit review. ![Fig 3.2 The PM² project lifecycle: indicative overlap of phase activities and cumulative effort](03.02.png) The focus of a project shifts from initiating and planning activities in the beginning to executing, monitoring and controlling activities in the middle and acceptance, transitioning and closing activities at the end. -Inexperienced project teams sometimes underestimate the importance of the work done in the initial project phases and start working on deliverables that are inadequately defined or planned. This results in the delivery of outputs, which are of poor quality and of little value to end-users. This is a common and costly mistake, which is often the root cause of overall project failure and the failure to realise the project's intended benefits. It is therefore important to invest adequate time during the Initiating Phase to define the desired outcomes by engaging a broad spectrum of stakeholders. +Inexperienced project teams sometimes underestimate the importance of the work done in the initial project phases and start working on deliverables that are inadequately defined or planned. This results in the delivery of outputs, which are of poor quality and of little value to end-users. This is a common and costly mistake, which is often the root cause of overall project failure and the failure to realize the project's intended benefits. It is therefore important to invest adequate time during the Initiating Phase to define the desired outcomes by engaging a broad spectrum of stakeholders. | Project Phase | Description | | --- | --- | @@ -43,13 +43,13 @@ Inexperienced project teams sometimes underestimate the importance of the work d ![Initiating Phase](03.02.01.png) -The first phase of a PM² project is the Initiating Phase. During this phase, the people involved formulate the project's objective(s), ensure the project's alignment to the organisation's strategic objectives, undertake some initial planning to get the project off to a good start, and put together the information required to gain approval to continue to the Planning Phase. The main input of this phase is a (client) request to address a need, problem or opportunity. +The first phase of a PM² project is the Initiating Phase. During this phase, the people involved formulate the project's objective(s), ensure the project's alignment to the organization's strategic objectives, undertake some initial planning to get the project off to a good start, and put together the information required to gain approval to continue to the Planning Phase. The main input of this phase is a (client) request to address a need, problem or opportunity. The following activities are part of the Initiating Phase: - Creation of the Project Initiation Request which contains information about the requestor, business needs and the desired project outcomes. - Creation of the Business Case, which provides a business justification, defines the project's budgetary requirements, and outlines the business context, problem and project descriptions, alternative solutions, and a high-level roadmap. -- Creation of the Project Charter, which provides more details on the project definition in terms of scope, cost, time and risk. It also defines milestones, deliverables, project organisation, etc. +- Creation of the Project Charter, which provides more details on the project definition in terms of scope, cost, time and risk. It also defines milestones, deliverables, project organization, etc. ![Fig 3.3 Overview of the Initiating Phase](03.03.png) @@ -61,7 +61,7 @@ At the end of the Initiating Phase, the Project Steering Committee (PSC) or othe ![Planning Phase](03.02.02.png) -The second phase of a PM² project is the Planning Phase. During the Planning Phase, the project's objective is developed into a specific and workable plan ready to be executed. The Project Work Plan specifies the project scope and appropriate approach, decides on a schedule for the tasks involved, estimates the necessary resources and develops the detail of the project plans. Several times during the Planning Phase, the Project Work Plan can be updated. Once agreed and finalised it is baselined and signed off. +The second phase of a PM² project is the Planning Phase. During the Planning Phase, the project's objective is developed into a specific and workable plan ready to be executed. The Project Work Plan specifies the project scope and appropriate approach, decides on a schedule for the tasks involved, estimates the necessary resources and develops the detail of the project plans. Several times during the Planning Phase, the Project Work Plan can be updated. Once agreed and finalized it is baselined and signed off. The following activities are part of the Planning Phase: @@ -103,7 +103,7 @@ During a project's Closing Phase, the finished deliverables are officially trans The following activities are part of the Closing Phase: -- Finalising all activities in order to formally close the project. +- Finalizing all activities in order to formally close the project. - Discussing the overall project experience and Lessons Learned with the project team. - Documenting Lessons Learned and best practices for future projects. - Closing the project administratively and archiving all project documents. @@ -128,7 +128,7 @@ At the end of each phase, the project passes through a review and approval gate. - RfE (Ready for Executing): at the end of the Planning Phase - RfC (Ready for Closing): at the end of the Executing Phase. -## 3.3 PM² Phase Drivers and Key Artefacts +## 3.3 PM² Phase Drivers and Key Artifacts Projects depend on people to define, plan and execute them. These project drivers change from phase to phase in a PM² project. @@ -144,13 +144,13 @@ Finally, the Closing Phase is driven by the stakeholders who evaluate the projec | Key Phase Input/Output | Description | | :-- | :-- | -| Project Initiation Request | Formalises the commitment to explore a problem, need or
    opportunity further and captures the context. | +| Project Initiation Request | Formalizes the commitment to explore a problem, need or
    opportunity further and captures the context. | | Business Case | Captures the reasoning behind the project, provides justification and
    establishes the budgetary constraints. | | Project Charter | Builds on the Business Case and defines the project scope, high-level
    requirements and deliverables. | | Project Handbook | Presents the project management objectives and overall management
    approach. Documents the roles \& responsibilities. | | Project Work Plan | Includes a breakdown of the work to be carried out, estimates of the
    effort and costs involved, and the project schedule. | | Project Deliverables | Lists the complete set of project deliverables as defined in the Project
    Charter and Project Work Plan. | -| Project-End Report | Summarises the project experience, project performance and Lessons
    Learned (successful project practices and potential pitfalls). | +| Project-End Report | Summarizes the project experience, project performance and Lessons
    Learned (successful project practices and potential pitfalls). | ## 3.4 What is a PM² Project @@ -160,7 +160,7 @@ Thus, a PM² project: - is (above all) a project (i.e. not operations, not a work activity, not a programme, etc.) - has a duration of more than 4-5 weeks and involves more than 2-3 people -- runs within an organisation and can be subject to internal or external audits +- runs within an organization and can be subject to internal or external audits - requires a clearly defined governance structure and clearly assigned roles and responsibilities - requires approval of its budget and scope - includes more than just construction/delivery activities @@ -168,16 +168,16 @@ Thus, a PM² project: - requires a certain level of documentation, transparency and reporting - requires a certain level of control and traceability - has a broad base of internal (and external) stakeholders -- may require the collaboration of several organisations or organisational units -- contributes to raising the organisation's project management maturity. +- may require the collaboration of several organizations or organizational units +- contributes to raising the organization's project management maturity. The number of the above characteristics, apparent in a project, drive the tailoring and customization that will have to be applied to the PM² methodology. ## 3.5 PM² Mindsets -The PM² processes, artefacts, tools and techniques help project teams make decisions on trade-offs between a project's time, cost, scope and quality dimensions. +The PM² processes, artifacts, tools and techniques help project teams make decisions on trade-offs between a project's time, cost, scope and quality dimensions. -The PM² Mindsets are the attitudes and behaviours that help project teams focus on what is crucial to achieving their project's goals. They help project teams navigate the complexities of managing projects in organisations and make the PM² Methodology both more effective and complete. +The PM² Mindsets are the attitudes and behaviors that help project teams focus on what is crucial to achieving their project's goals. They help project teams navigate the complexities of managing projects in organizations and make the PM² Methodology both more effective and complete. Thus, Project Managers (PMs) and project teams that practise PM² : @@ -188,23 +188,23 @@ Thus, Project Managers (PMs) and project teams that practise PM² : 5. Foster a project culture of collaboration, clear communication and accountability. 6. Assign project roles to the most appropriate people for the benefit of the project. 7. Balance in the most productive way the often-conflicting project management "Ps" of product, purpose, process, plan, planet, people, pleasure/pain, participation, perception and politics. -8. Invest in developing technical and behavioural competences to become better project contributors. -9. Involve project stakeholders in the organisational change needed to maximise project benefits. -10. Share knowledge, actively manage Lessons Learned, and contribute to the improvement of project management within their organisations. +8. Invest in developing technical and behavioral competences to become better project contributors. +9. Involve project stakeholders in the organizational change needed to maximize project benefits. +10. Share knowledge, actively manage Lessons Learned, and contribute to the improvement of project management within their organizations. 11. Draw inspiration from the PM² Guidelines on Ethics and Professional Virtues (see Appendix F). To remain mindful of the PM² Mindsets, Project Managers (PMs) and project teams that practise PM² should ask themselves the following important Infrequently Asked Questions (IAQs): -- Do we know what we are doing? Tip: Develop a clear and shared project vision. Manage the project using a holistic approach and optimise the whole project, not just parts of it. Follow a process but stay Agile and try to regularly remind yourself why you are doing something. -- Do we know why we are doing it? Does anyone really care? Tip: Make sure your project matters. Understand its goals, value and impact, and how it relates to the organisational strategy. Define upfront what project success is and deliver maximum value and real benefits, not just outputs. +- Do we know what we are doing? Tip: Develop a clear and shared project vision. Manage the project using a holistic approach and optimize the whole project, not just parts of it. Follow a process but stay Agile and try to regularly remind yourself why you are doing something. +- Do we know why we are doing it? Does anyone really care? Tip: Make sure your project matters. Understand its goals, value and impact, and how it relates to the organizational strategy. Define upfront what project success is and deliver maximum value and real benefits, not just outputs. - Are the right people involved? Tip: People make projects work. The primary criterion for involving people and assigning project roles should be to serve the needs and objectives of the project, and not politics, friendship, functional hierarchy, proximity or convenience. - Do we know who is doing what? Tip: Know what you should be doing, and make sure others know what they should be doing. Is it clear to everyone? Clearly define and understand roles, responsibilities and accountabilities. -- Deliver at any cost or risk? Tip: Show respect for people's work and organisational funds and avoid high-risk behaviour and tactics. Always keep in mind that it is not just about the end result - how you get there also matters. Manage your projects based on positive values and principles. +- Deliver at any cost or risk? Tip: Show respect for people's work and organizational funds and avoid high-risk behavior and tactics. Always keep in mind that it is not just about the end result - how you get there also matters. Manage your projects based on positive values and principles. - Is this important? Tip: Everything is NOT equally important. Identify, and agree on, the project's Critical Success Criteria (CSC), Minimum Viable Product (MVP), and Critical Success Factors (CSFs), and allocate effort and attention both tactically and strategically for the benefit of both the project and project management goals. - Is this a task for "them" or for "us"? Tip: Make sure that client and provider groups work as one team towards a common goal. Real teamwork really works; so foster clear, effective and frequent communication. - Should I be involved? Tip: Contribute from any position. Be proud of the skills, value and positive attitude you bring to the project. Help everyone who needs to be involved get involved. Promote and facilitate the contributions of all stakeholders. -- Have we improved? Tip: Commit to ongoing self- and organisational improvement by gathering and sharing knowledge. Project teams should reflect on how they can become more effective and adjust their behaviour accordingly. +- Have we improved? Tip: Commit to ongoing self- and organizational improvement by gathering and sharing knowledge. Project teams should reflect on how they can become more effective and adjust their behavior accordingly. - Is there life after the project? Tip: The product (or service) lifecycle has just begun! Make sure you have contributed to its success. The PM² Mindsets are the glue that holds the PM² processes and practices together. They provide a common set of beliefs and values for all PM² practitioners. @@ -212,38 +212,38 @@ The PM² Mindsets are the glue that holds the PM² processes and practices toget The PM² Mindsets: - help project teams navigate through the complexities of project realities. -- help project teams (re)position project management goals in a wider organisational context. +- help project teams (re)position project management goals in a wider organizational context. - remind project teams what is important for project success. -- are useful reminders of effective attitudes and behaviours. +- are useful reminders of effective attitudes and behaviors. -## 3.6 Tailoring and Customisation +## 3.6 Tailoring and Customization -To ensure that the PM² Methodology effectively serves an organisation's and a project's needs, some level of tailoring or/and customisation may be required. +To ensure that the PM² Methodology effectively serves an organization's and a project's needs, some level of tailoring or/and customization may be required. -Tailoring refers to changing specific parts of the methodology, such as process steps, the content of artefacts, the distribution of responsibilities amongst the various roles, etc. Organisations do this to adapt the methodology to the specific needs of their structure and culture, and to align the methodology to organisational processes, policies, etc. +Tailoring refers to changing specific parts of the methodology, such as process steps, the content of artifacts, the distribution of responsibilities amongst the various roles, etc. Organizations do this to adapt the methodology to the specific needs of their structure and culture, and to align the methodology to organizational processes, policies, etc. -Tailoring makes more sense at the organisation/departmental level, but some tailoring can also take place at the project level, based, for instance, on the complexity, size or type of a project. In addition to any tailoring, further customisation may also be required at the project level to reflect the project's specific management needs. Examples of such customisations are the definition of decision thresholds for escalation, risk tolerances based on the risk appetite of the stakeholders, etc. +Tailoring makes more sense at the organisation/departmental level, but some tailoring can also take place at the project level, based, for instance, on the complexity, size or type of a project. In addition to any tailoring, further customization may also be required at the project level to reflect the project's specific management needs. Examples of such customizations are the definition of decision thresholds for escalation, risk tolerances based on the risk appetite of the stakeholders, etc. -All tailoring and customisations should be documented in the Project Handbook. -The following guidelines should be considered when tailoring or customising the PM² Methodology: +All tailoring and customizations should be documented in the Project Handbook. +The following guidelines should be considered when tailoring or customizing the PM² Methodology: - First, understand the purpose and value of the methodology element to be tailored, and then proceed with its tailoring. -- Avoid simplifying the methodology by eliminating whole chunks (e.g. a phase, a role, an activity or an artefact), but rather scale down (or up) the scope of that element. +- Avoid simplifying the methodology by eliminating whole chunks (e.g. a phase, a role, an activity or an artifact), but rather scale down (or up) the scope of that element. - Balance the level of control a project needs against the extra effort such control requires. - Eliminate waste (lean approach) but remain aligned with the spirit of the PM² Methodology as this is reflected by its four pillars and mindsets. - Remember that the methodology was designed as an integrated whole, so avoid unnecessary deviations. ## 3.7 PM² and Agile Management -PM² recognises the complex and uncertain nature of many types of project and the positive contribution of the Agile way of thinking to their effective management. +PM² recognizes the complex and uncertain nature of many types of project and the positive contribution of the Agile way of thinking to their effective management. -Agile approaches meet various challenges, which often grow with the size of the organisations in which they are applied. These challenges may include coordination between Agile and non-Agile teams, compliance with various organisational governance and audit requirements, and organisational architecture and interoperability constraints. +Agile approaches meet various challenges, which often grow with the size of the organizations in which they are applied. These challenges may include coordination between Agile and non-Agile teams, compliance with various organizational governance and audit requirements, and organizational architecture and interoperability constraints. **What is Agile?** Agile is an approach to managing projects based on a specific set of principles and practices, which promote adaptive planning, evolutionary development, early incremental delivery and continuous improvement. It encourages rapid and flexible responses to change. -Agile takes into account the inherent uncertainty of the project environment and creates an organisation that is highly adaptive. It uses short feedback loops to allow for rapid responses to changes in product requirements and for ongoing improvements to processes. +Agile takes into account the inherent uncertainty of the project environment and creates an organization that is highly adaptive. It uses short feedback loops to allow for rapid responses to changes in product requirements and for ongoing improvements to processes. Agile's key characteristics are: @@ -253,8 +253,8 @@ Agile's key characteristics are: - continuous stakeholder involvement at all levels - involving team members in planning - incremental development with short cycles -- scope management through the continuous (re)prioritisation of tasks +- scope management through the continuous (re)prioritization of tasks - embracing change, continuous learning and improvement - just enough documentation and control. -PM² provides a structure that helps Agile teams achieve the desired agility while still accommodating tight procurement and audit requirements, good coordination with programme and portfolio levels, and collaboration with other projects, contractors, other organisational units and external organisations (see Appendix D). +PM² provides a structure that helps Agile teams achieve the desired agility while still accommodating tight procurement and audit requirements, good coordination with programme and portfolio levels, and collaboration with other projects, contractors, other organizational units and external organizations (see Appendix D). diff --git a/docs/project-management-guide/4-project-organisation-and-roles/README.md b/docs/project-management-guide/4-project-organisation-and-roles/README.md index ed28112503c3..7f73e8287e61 100644 --- a/docs/project-management-guide/4-project-organisation-and-roles/README.md +++ b/docs/project-management-guide/4-project-organisation-and-roles/README.md @@ -1,29 +1,29 @@ --- sidebar_navigation: - title: 4 Project organisation and roles + title: 4 Project organization and roles priority: 800 description: Describes the PM² governance model in detail, including the main project roles and responsibilities for example the Project Steering Committee, Project Owner, Business Manager, Project Manager, and Project Core Team. It explains reporting lines, decision-making, and escalation mechanisms. -keywords: project stakeholders, project organisations, appropriate governance body, project steering committee, PSC, project owner, business manager, project manager, business implementation group, project core team, project support team, ram +keywords: project stakeholders, project organizations, appropriate governance body, project steering committee, PSC, project owner, business manager, project manager, business implementation group, project core team, project support team, ram --- -# 4 Project Organisation and Roles +# 4 Project Organization and Roles ## 4.1 Project Stakeholders -Project stakeholders are people (or groups) who can affect, be affected by, or believe to be affected by the activities carried out during a project's lifecycle and/or by its output(s) and outcome(s). Stakeholders can be directly involved in a project's work, members of other internal organisations or external to the organisation (e.g. contractors, suppliers, users or the general public). +Project stakeholders are people (or groups) who can affect, be affected by, or believe to be affected by the activities carried out during a project's lifecycle and/or by its output(s) and outcome(s). Stakeholders can be directly involved in a project's work, members of other internal organizations or external to the organization (e.g. contractors, suppliers, users or the general public). The number of stakeholders depends on the complexity and scope of a project. However, the more people the project has an impact on, the more likely it is that it will affect people who have some power or influence over the project. Given that stakeholders can be useful supporters of the project or may choose to block it, the effective management and involvement of them is crucial for its success. -## 4.2 Project Organisation: Layers and Roles +## 4.2 Project Organization: Layers and Roles -The diagram below provides an overview of the layers and main roles in project organisation from a project management point of view. -![Fig 4.1 Project organisation](04.01.png) +The diagram below provides an overview of the layers and main roles in project organization from a project management point of view. +![Fig 4.1 Project organization](04.01.png) Note that there is only one project team, which is composed of the people assuming the roles defined in the Performing, Managing and Directing layers. For the project to succeed, these people need to work together as a team. **Business Governing Layer** -The Business Governing Layer determines the vision and strategy for the organisation as a whole. It consists of one or more management committees operating at a high or the highest management level. It is here that priorities are defined, investment decisions are made, and resources are allocated. +The Business Governing Layer determines the vision and strategy for the organization as a whole. It consists of one or more management committees operating at a high or the highest management level. It is here that priorities are defined, investment decisions are made, and resources are allocated. **Steering Layer** @@ -31,15 +31,15 @@ The Steering Layer provides general project direction and guidance. It keeps the **Directing Layer** -The Directing Layer champions the project and owns its Business Case. It mobilises the necessary resources and monitors the project's performance in order to realise the project's objectives. The Directing Layer comprises the roles of Project Owner (PO) and Solution Provider (SP). +The Directing Layer champions the project and owns its Business Case. It mobilizes the necessary resources and monitors the project's performance in order to realize the project's objectives. The Directing Layer comprises the roles of Project Owner (PO) and Solution Provider (SP). **Managing Layer** -The Managing Layer focuses on day-to-day project management. It organises, monitors and controls work to produce the intended deliverables and implement them in the business organisation. Members of the Managing Layer report to the Directing Layer. The Managing Layer comprises the roles of Business Manager (BM) and Project Manager (PM). It is of utmost importance for the success of the project that there is close collaboration and good communication between these two roles. +The Managing Layer focuses on day-to-day project management. It organizes, monitors and controls work to produce the intended deliverables and implement them in the business organization. Members of the Managing Layer report to the Directing Layer. The Managing Layer comprises the roles of Business Manager (BM) and Project Manager (PM). It is of utmost importance for the success of the project that there is close collaboration and good communication between these two roles. **Performing Layer** -The Performing Layer carries out the project work. It produces the deliverables and implements them in the business organisation. Members of the Performing Layer report to the Managing Layer. The Performing Layer comprises the roles of the Business Implementation Group (BIG) and the Project Core Team (PCT). +The Performing Layer carries out the project work. It produces the deliverables and implements them in the business organization. Members of the Performing Layer report to the Managing Layer. The Performing Layer comprises the roles of the Business Implementation Group (BIG) and the Project Core Team (PCT). ## 4.3 Appropriate Governance Body (AGB) @@ -49,9 +49,9 @@ The Appropriate Governance Body (AGB) is the entity responsible for the strategi - Defines the corporate and business domain strategy. - Agrees to and implements a portfolio management framework to achieve the strategic objectives. -- Identifies, evaluates and authorises programmes and projects for implementation. +- Identifies, evaluates and authorizes programmes and projects for implementation. - Monitors and controls portfolio delivery performance. -- Optimises and manages portfolio resources and benefits. +- Optimizes and manages portfolio resources and benefits. ## 4.4 Project Steering Committee (PSC) @@ -64,12 +64,12 @@ The Project Steering Committee (PSC) is chaired by the Project Owner (PO) and is - Champions the project and raises awareness of it at a senior level. - Guides and promotes the successful execution of the project at a strategic level, keeping the project focused on its objectives. -- Ensures adherence to the organisation's policies and rules (e.g. IT governance, data protection, information security, document management, etc.). +- Ensures adherence to the organization's policies and rules (e.g. IT governance, data protection, information security, document management, etc.). - Provides high-level monitoring and control of the project. -- Authorises transition between Phases unless this is performed by the Appropriate Governance Body (AGB). -- Authorises deviations and scope changes with a high project impact and has the final say on decisions. +- Authorizes transition between Phases unless this is performed by the Appropriate Governance Body (AGB). +- Authorizes deviations and scope changes with a high project impact and has the final say on decisions. - Deals with escalated issues and conflicts. -- Approves key project artefacts (e.g. Project Charter, Project Work Plan). +- Approves key project artifacts (e.g. Project Charter, Project Work Plan). **Optional Project Steering Committee (PSC) members:** @@ -97,36 +97,36 @@ The Project Owner (PO) is the client of the project, and as such sets the busine - Provides leadership and strategic direction to the Business Manager (BM) and Project Manager (PM). - Sets the business objectives and accepts the Business Case for the project. - Owns the business risks and ensures that project outcomes are in line with business objectives and priorities. -- Mobilises the resources necessary for the project, in accordance with the agreed budget. +- Mobilizes the resources necessary for the project, in accordance with the agreed budget. - Regularly monitors project progress. - Coordinates the resolution of escalated issues and conflicts. -- Drives organisational change and monitors proper evolution and change implementation. -- Approves key project artefacts (Business Case, Project Charter, Project Handbook, Work Plan, Deliverables Acceptance Plan, Transition Plan, Business Implementation Plan). +- Drives organizational change and monitors proper evolution and change implementation. +- Approves key project artifacts (Business Case, Project Charter, Project Handbook, Work Plan, Deliverables Acceptance Plan, Transition Plan, Business Implementation Plan). 4.6 Solution Provider (SP) The Solution Provider (SP) assumes overall accountability for project deliverables and represents the interests of those who design, manage and implement (or outsource) the project's deliverables. -As the key Directing Layer role from the provider side, the Solution Provider (SP) usually has a management position in the functional hierarchy of the organisation undertaking the project, and therefore often works with the Project Owner (PO) in defining the project's business objectives. +As the key Directing Layer role from the provider side, the Solution Provider (SP) usually has a management position in the functional hierarchy of the organization undertaking the project, and therefore often works with the Project Owner (PO) in defining the project's business objectives. **Responsibilities:** - Assumes overall accountability for the project deliverables and services requested by the Project Owner (PO). -- Mobilises the required resources from the provider side and appoints the Project Manager (PM). +- Mobilizes the required resources from the provider side and appoints the Project Manager (PM). - Approves the objectives of any outsourced activities and deliverables and becomes accountable for the contractor's performance. ## 4.7 Business Manager (BM) -The Business Manager (BM) represents the Project Owner (PO) on a daily basis within the project and helps in defining the project's business objectives via the Project Initiation Request, Business Case and Business Implementation Plan. The Business Manager (BM) collaborates closely with the Project Manager (PM) and coordinates client-side activities and roles (e.g. user and business representatives), ensuring that the project's deliverables fulfil the business and user needs. +The Business Manager (BM) represents the Project Owner (PO) on a daily basis within the project and helps in defining the project's business objectives via the Project Initiation Request, Business Case and Business Implementation Plan. The Business Manager (BM) collaborates closely with the Project Manager (PM) and coordinates client-side activities and roles (e.g. user and business representatives), ensuring that the project's deliverables fulfill the business and user needs. **Responsibilities**: - Guarantees cooperation and an efficient communication channel with the Project Manager (PM). -- Coordinates the Business Implementation Group (BIG) and acts as a liaison between the User Representatives (URs) and the provider organisation. -- Ensures that the products delivered by the project fulfil the user's needs. +- Coordinates the Business Implementation Group (BIG) and acts as a liaison between the User Representatives (URs) and the provider organization. +- Ensures that the products delivered by the project fulfill the user's needs. - Manages the activities on the business side of the project and ensures that the required business resources are made available. - Decides on the best way to introduce business change or re-engineering actions, when needed. -- Ensures that the business organisation is ready to accommodate the project's deliverables when they are made available by the Solution Provider (SP). +- Ensures that the business organization is ready to accommodate the project's deliverables when they are made available by the Solution Provider (SP). - Leads the implementation of the business changes within the user community. - Coordinates the schedule and delivery of any user training (and production of related material). @@ -140,7 +140,7 @@ The Project Manager (PM) oversees the project on a daily basis and is responsibl - Coordinates the Project Core Team (PCT), ensuring the effective use of the allocated resources. - Ensures that project objectives are achieved within the identified constraints, taking preventive or corrective measures where necessary. - Manages stakeholder expectations. -- Oversees the creation of all management artefacts (except the Project Initiation Request, Business Case and Business Implementation Plan) and secures approval from the Project Owner (PO) or the Project Steering Committee (PSC). +- Oversees the creation of all management artifacts (except the Project Initiation Request, Business Case and Business Implementation Plan) and secures approval from the Project Owner (PO) or the Project Steering Committee (PSC). - Ensures the controlled evolution, of products delivered, through proper change management. - Performs risk management activities for project-related risks. - Monitors project status and reports to the Project Steering Committee (PSC) on project progress at regular predefined intervals. @@ -149,15 +149,15 @@ The Project Manager (PM) oversees the project on a daily basis and is responsibl ## 4.9 Business Implementation Group (BIG) -The Business Implementation Group (BIG) sits on the requestor side and consists of representatives of business and user groups. Coordinated by the Business Manager (BM), it is responsible for planning and implementing the business changes that need to be made for the organisation to effectively integrate the project deliverables into its everyday work. +The Business Implementation Group (BIG) sits on the requestor side and consists of representatives of business and user groups. Coordinated by the Business Manager (BM), it is responsible for planning and implementing the business changes that need to be made for the organization to effectively integrate the project deliverables into its everyday work. **Responsibilities**: -- Analyses the impact of the project's implementation on ongoing operations, existing business processes, staff and organisational culture. +- Analyses the impact of the project's implementation on ongoing operations, existing business processes, staff and organizational culture. - Participates in the design and updating of affected business processes. - Prepares the affected business area for the upcoming change. -- Advises the Business Manager (BM) on the organisation's readiness for change. -- Embeds the project deliverables into business operations and implements the organisational change activities that fall within the project's scope. +- Advises the Business Manager (BM) on the organization's readiness for change. +- Embeds the project deliverables into business operations and implements the organizational change activities that fall within the project's scope. **User Representatives (URs)** @@ -168,7 +168,7 @@ User Representatives (URs) represent the interests of the project's end-users an - Help define the business needs and requirements. - Ensure that the project specifications and deliverables meet the needs of all users. - Review the project specification and acceptance criteria on behalf of the users. -- Communicate and prioritise user opinions in the Project Steering Committee (PSC) and ensure that these opinions are taken into consideration when decisions are made whether or not to implement a proposed change. +- Communicate and prioritize user opinions in the Project Steering Committee (PSC) and ensure that these opinions are taken into consideration when decisions are made whether or not to implement a proposed change. - Participate in demonstrations and pilot phases as needed. - Perform user acceptance tests. - Sign off on user-related documents (requirements document, deliverable acceptance testing, etc.). @@ -214,11 +214,11 @@ The Project Support Team (PST) is an optional role that consists of the people r **Project Support Office (PSO)** -The Project Support Office (PSO), also called Project Management Office or Project Office, is an optional structure that can provide services to project teams such as the application of the methodology and use of the artefacts, information systems, governance, logistics and various support. +The Project Support Office (PSO), also called Project Management Office or Project Office, is an optional structure that can provide services to project teams such as the application of the methodology and use of the artifacts, information systems, governance, logistics and various support. **Project Quality Assurance (PQA)** -Assigned by the Project Steering Committee (PSC) and working independently of the Project Manager (PM), the Project Quality Assurance (PQA) ensures the high quality of the project and its deliverables, by reviewing processes and artefacts, identifying non-conformities with the set quality standards and recommending corrective actions. This is an optional role in an organisation, reporting directly to the Project Steering Committee (PSC), and may take the form of either a group or individual staff member. +Assigned by the Project Steering Committee (PSC) and working independently of the Project Manager (PM), the Project Quality Assurance (PQA) ensures the high quality of the project and its deliverables, by reviewing processes and artifacts, identifying non-conformities with the set quality standards and recommending corrective actions. This is an optional role in an organization, reporting directly to the Project Steering Committee (PSC), and may take the form of either a group or individual staff member. **Other** @@ -236,7 +236,7 @@ The Responsibility Assignment Matrix (RAM) is a way of representing and clarifyi | **C** | Consulted | Those whose opinions are requested and with whom there is two-way
    communication. The consulted role does not help complete the task. | | **I** | Informed | Those who are kept informed of progress. | -Stakeholders should be reminded of their roles and responsibilities during the project. This Open PM² guide includes a RAM (RASCI) table for each artefact in the Initiating, Planning and Closing Phases and for each of the activities in the Executing Phase and in Monitor \& Control (see Appendix E). +Stakeholders should be reminded of their roles and responsibilities during the project. This Open PM² guide includes a RAM (RASCI) table for each artifact in the Initiating, Planning and Closing Phases and for each of the activities in the Executing Phase and in Monitor \& Control (see Appendix E). Example: The RAM for the Standard PM² roles involved in creating the Business Case document. diff --git a/docs/project-management-guide/5-initiating-phase/README.md b/docs/project-management-guide/5-initiating-phase/README.md index 32409fd9fc88..84f4b06a1e5f 100644 --- a/docs/project-management-guide/5-initiating-phase/README.md +++ b/docs/project-management-guide/5-initiating-phase/README.md @@ -8,11 +8,11 @@ keywords: initiating meeting, project initiation request, business case, project # 5 Initiating Phase -The first phase of a PM² project is the Initiating Phase. It begins with the identification of a need, problem or opportunity, and ends with the establishment of the plans and processes needed to take the project forward. Proper project initiation is critical for successful project planning and execution. It involves defining project objectives and constraints, and receiving formal organisational sponsorship for the project. +The first phase of a PM² project is the Initiating Phase. It begins with the identification of a need, problem or opportunity, and ends with the establishment of the plans and processes needed to take the project forward. Proper project initiation is critical for successful project planning and execution. It involves defining project objectives and constraints, and receiving formal organizational sponsorship for the project. ![Fig 5.1 Initiating Phase activities and main outputs](05.01.png) -Three key project artefacts are created during the Initiating Phase: the Project Initiation Request, the Business Case and the Project Charter. Some of the Project Logs are also set up (i.e. Risk Log, Issue Log, Decision Log) while the Change Log is typically set up during the Planning Phase. -![Fig 5.2 Initiating Phase artefacts](05.02.png) +Three key project artifacts are created during the Initiating Phase: the Project Initiation Request, the Business Case and the Project Charter. Some of the Project Logs are also set up (i.e. Risk Log, Issue Log, Decision Log) while the Change Log is typically set up during the Planning Phase. +![Fig 5.2 Initiating Phase artifacts](05.02.png) ## 5.1 Initiating Meeting @@ -22,16 +22,16 @@ The result of this meeting is a better understanding of the context of the (futu ## 5.2 Project Initiation Request -The Project Initiation Request is a project's starting point and formalises its initiation. By creating a Project Initiation Request, the project initiator ensures that the current context/situation (i.e. problem, need or opportunity) and the project's desired outcomes are formally captured and can be used as a basis for further exploration and elaboration. +The Project Initiation Request is a project's starting point and formalizes its initiation. By creating a Project Initiation Request, the project initiator ensures that the current context/situation (i.e. problem, need or opportunity) and the project's desired outcomes are formally captured and can be used as a basis for further exploration and elaboration. -The Project Initiation Request contains basic information about the estimated effort and cost of undertaking the project as well as the timeframe for its completion and the type of delivery. Specifically, the document describes the impact the project is expected to bring and summarises the success criteria against which it will be evaluated. Additionally, the Project Initiation Request outlines the project's relevance to the organisation's strategic direction and highlights the key assumptions, constraints and risks as assessed at this stage. +The Project Initiation Request contains basic information about the estimated effort and cost of undertaking the project as well as the timeframe for its completion and the type of delivery. Specifically, the document describes the impact the project is expected to bring and summarizes the success criteria against which it will be evaluated. Additionally, the Project Initiation Request outlines the project's relevance to the organization's strategic direction and highlights the key assumptions, constraints and risks as assessed at this stage. | Key Participants | Description | |------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Initiator | Anyone can introduce a Project Initiation Request. | | Project Owner (PO) | The main beneficiary of the project's outputs usually nominates a Project Owner (PO). | -| Solution Provider (SP) | The organisational unit that will carry out the project work nominates a Solution Provider (SP). | -| Approver | Depending on the project, the Project Owner (PO) or a higher-level Appropriate Governance Body (AGB) can accept the Project Initiation Request and authorise work on a more elaborate Business Case. | +| Solution Provider (SP) | The organizational unit that will carry out the project work nominates a Solution Provider (SP). | +| Approver | Depending on the project, the Project Owner (PO) or a higher-level Appropriate Governance Body (AGB) can accept the Project Initiation Request and authorize work on a more elaborate Business Case. | **Input** @@ -40,8 +40,8 @@ The Project Initiation Request contains basic information about the estimated ef **Guidelines** - Note that though anyone can initiate a Project Initiation Request, in many cases the Project Owner (PO) delegates its creation to the Business Manager (BM). -- Know your audience: Depending on the project size and the organisation's approval process, approval can be informal (i.e. the Project Owner (PO) accepts it), or formal (i.e. an Appropriate Governance Body (AGB) reviews and approves it). -- Ensure all the relevant information is included, but at this point limit details to high-level information-finer points will be added in the form of the Business Case and other Project artefacts. +- Know your audience: Depending on the project size and the organization's approval process, approval can be informal (i.e. the Project Owner (PO) accepts it), or formal (i.e. an Appropriate Governance Body (AGB) reviews and approves it). +- Ensure all the relevant information is included, but at this point limit details to high-level information-finer points will be added in the form of the Business Case and other Project artifacts. **Steps (for a project's initiation)** @@ -52,7 +52,7 @@ The Project Initiation Request contains basic information about the estimated ef The lifecycle of the Project Initiating Request ends with the creation of the Business Case and Project Charter. All the information included in the Project Initiation Request is copied over, updated and further elaborated in these two documents, which remain "live" until the end of the project. -![Fig 5.3 Relationship between the artefacts created during the Initiating Phase](05.03.png) +![Fig 5.3 Relationship between the artifacts created during the Initiating Phase](05.03.png) | RAM (RASCI) | AGB | PSC | PO | BM | BIG | SP | PM | PCT | | :-- | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | @@ -68,12 +68,12 @@ The lifecycle of the Project Initiating Request ends with the creation of the Bu > [!TIP] > -> Currently we recommend to have a task to create the Business Case. It is currently modelled as a work package. This will then be replaced by the new documents module which allow to automatically create the artefact based on the single source of truth. +> Currently we recommend to have a task to create the Business Case. It is currently modeled as a work package. This will then be replaced by the new documents module which allow to automatically create the artifact based on the single source of truth. > [Example](https://pm2.openproject.com/wp/450) -The purpose of the Business Case is to capture the reasoning behind the project, to describe the project's alignment with the organisation's strategic objectives, to provide a justification for the investment in time and effort, and to set out the budgetary needs. For larger strategic projects, the Business Case may also include an assessment of impact and risks along with a more detailed cost-benefit analysis. +The purpose of the Business Case is to capture the reasoning behind the project, to describe the project's alignment with the organization's strategic objectives, to provide a justification for the investment in time and effort, and to set out the budgetary needs. For larger strategic projects, the Business Case may also include an assessment of impact and risks along with a more detailed cost-benefit analysis. -The Business Case provides decision-makers with the information they need to determine whether the project is worth doing. The Business Case is a living document and therefore should be re-examined at critical project milestones to check that the expected benefits are still achievable, the costs/schedule fall within the budget/timeline, and the project is still relevant to the organisation and should be continued. +The Business Case provides decision-makers with the information they need to determine whether the project is worth doing. The Business Case is a living document and therefore should be re-examined at critical project milestones to check that the expected benefits are still achievable, the costs/schedule fall within the budget/timeline, and the project is still relevant to the organization and should be continued. | Key Participants | Description | | :-- | :-- | @@ -88,18 +88,18 @@ The Business Case provides decision-makers with the information they need to det **Guidelines** -- Note that the form and depth of analysis required for this artefact depends on the level of investment required for the project. -- Consider several solutions that fulfil this business need and recommend one of these. +- Note that the form and depth of analysis required for this artifact depends on the level of investment required for the project. +- Consider several solutions that fulfill this business need and recommend one of these. - Describe the overall approach to how the project will be executed (project strategy). - Identify measurable criteria that will be used to determine the success of the project. - For projects carried out under contract (e.g. as a result of a bid award), create the Business Case based on the Request for Proposal, the response to this request, and the contract itself. **Steps** -1. The Business Manager (BM) drafts the Business Case based on the information captured in the Project Initiation Request. The main project aspects to be analysed and presented are: +1. The Business Manager (BM) drafts the Business Case based on the information captured in the Project Initiation Request. The main project aspects to be analyzed and presented are: - the project's justification and impact -- the project's positioning in the overall organisational strategy +- the project's positioning in the overall organizational strategy - an assessment of Strengths, Weaknesses, Opportunities and Threats (SWOT Analysis) of several solutions, one of which is proposed for implementation - a cost benefit analysis, per identified solution, detailed to the extend required - synergies and interdependencies with other projects and initiatives @@ -114,7 +114,7 @@ The Business Case provides decision-makers with the information they need to det ![Fig 5.5 Business Case inputs and main roles](05.05.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :-- | :--: | :--: | :--: | :--: | :--: | | Benefits Management | Business Case | Business Implementation Plan | Project Reports | Business Implementation Checklist | Project-End Report | @@ -143,7 +143,7 @@ The charter is a key element of the project approval process (along with the Bus - The Project Charter should be brief so that it can be sent to project stakeholders as soon as possible, and so that it is easy for them to review and understand. - Avoid presenting detailed requirements. Instead present high-level needs and features. -- Detailed requirements may be captured in other artefacts (e.g. in a Requirements Document), or in an appendix to the Project Charter to be elaborated during the planning phase. +- Detailed requirements may be captured in other artifacts (e.g. in a Requirements Document), or in an appendix to the Project Charter to be elaborated during the planning phase. - Ensure that input from all concerned project stakeholders is considered. - Ensure that once created, the Project Charter is updated and distributed as required. @@ -161,7 +161,7 @@ The charter is a key element of the project approval process (along with the Bus ![Fig 5.6 Project Charter inputs and main roles](05.06.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :-- | :--: | :--: | :--: | :--: | :--: | | Scope Management | Business Case | Project Work Plan | Change Requests Project Reports | Project Logs | Project-End Report | diff --git a/docs/project-management-guide/6-planning-phase/README.md b/docs/project-management-guide/6-planning-phase/README.md index 23899ec71224..d97b161ba2e8 100644 --- a/docs/project-management-guide/6-planning-phase/README.md +++ b/docs/project-management-guide/6-planning-phase/README.md @@ -8,17 +8,17 @@ keywords: project handbook, project stakeholder matrix, project work plan, outso # 6 Planning Phase -The second phase of a PM² project is the Planning Phase. It begins with the Planning Kick-off Meeting and ends once all project plans have been developed and baselined, and an appropriate management and implementation approach has been established. Most of a project's artefacts are created during the Planning Phase. +The second phase of a PM² project is the Planning Phase. It begins with the Planning Kick-off Meeting and ends once all project plans have been developed and baselined, and an appropriate management and implementation approach has been established. Most of a project's artifacts are created during the Planning Phase. ![Fig 6.1 Planning Phase activities and main outputs](06.01.png) -| Artefact Type | Description | +| Artifact Type | Description | | :--: | :--: | -| Management Plans (standard) | These plans define the various processes to be used (e.g. for Risk Management). PM² provides Management Plan templates along with guidelines on how to tailor and customise them to the project's context and needs. | +| Management Plans (standard) | These plans define the various processes to be used (e.g. for Risk Management). PM² provides Management Plan templates along with guidelines on how to tailor and customize them to the project's context and needs. | | Project Plans (specific) | These plans are specific to the project (e.g. the Project Work Plan) and are built according to the project needs and the team's analysis and experience. PM² provides templates and guidelines for these plans. | -| Other
    (domain specific) | These artefacts are specific to the project domain (e.g. system models for IT projects). PM² does not provide templates for these artefacts. | +| Other
    (domain specific) | These artifacts are specific to the project domain (e.g. system models for IT projects). PM² does not provide templates for these artifacts. | -![Fig 6.2 Planning Phase artefacts](06.02.png) +![Fig 6.2 Planning Phase artifacts](06.02.png) ## 6.1 Planning Kick-off Meeting @@ -35,7 +35,7 @@ This Planning Kick-off Meeting should be planned and run effectively as it is cr | Key Participants | Description | | :-- | :-- | -| Project Manager (PM) | Organises the meeting. | +| Project Manager (PM) | Organizes the meeting. | | Project Core Team (PCT)
    Business Implementation Group (BIG)
    User Representatives (URs)
    Solution Provider (SP)
    Project Owner (PO)
    Business Manager (BM) | Required participants. | | Project Manager Assistant (PMA)
    Project Support Office (PSO) | Required to attend (if part of the project). | | Other project roles or stakeholders | Optional participation (as per the project's needs). | @@ -68,7 +68,7 @@ During the Planning Kick-off Meeting: 9. Discuss risks, constraints and assumptions. 10. Discuss or present any project supporting tools (with input from the Project Support Office, PSO). 11. Allow time for any other business (questions \& answers). -12. Summarise the discussion (decisions, actions and risks). +12. Summarize the discussion (decisions, actions and risks). 13. Communicate the next steps. After the Planning Kick-off Meeting: @@ -89,9 +89,9 @@ After the Planning Kick-off Meeting: ## 6.2 Project Handbook -The Project Handbook summarises the project objectives and documents the selected approach for achieving the project goals. It documents the Critical Success Factors (CSFs), defines the key controlling processes, the conflict resolution and escalation procedure, policies and rules, and the project mindsets. +The Project Handbook summarizes the project objectives and documents the selected approach for achieving the project goals. It documents the Critical Success Factors (CSFs), defines the key controlling processes, the conflict resolution and escalation procedure, policies and rules, and the project mindsets. -The Project Handbook also documents the project governance roles and their responsibilities, and defines the plans necessary for managing the project as well as any methodology-tailoring decisions. The project goals and scope (found in the Initiating Phase documents) are key inputs to this artefact. +The Project Handbook also documents the project governance roles and their responsibilities, and defines the plans necessary for managing the project as well as any methodology-tailoring decisions. The project goals and scope (found in the Initiating Phase documents) are key inputs to this artifact. The Project Handbook is an important reference document for all project members and stakeholders, and along with the Project Work Plan, is the basis on which the project is managed and executed. @@ -117,15 +117,15 @@ The Project Handbook is an important reference document for all project members **Steps** 1. Find documentation from similar projects and identify possible reusable components-this could reduce the effort, cost and time required. -2. Summarise the project objectives, dependencies, constraints, assumptions and list stakeholders. +2. Summarize the project objectives, dependencies, constraints, assumptions and list stakeholders. 3. Identify Critical Success Factors (CSFs) and define important project management objectives. -4. Discuss possible/necessary customisations and/or tailoring of the PM² Methodology. +4. Discuss possible/necessary customizations and/or tailoring of the PM² Methodology. 5. Outline the selected delivery approach and its lifecycle (including project-specific stages). 6. Define the specific project management rules that will be applied to the project (agree on the rules of conduct that will facilitate the better management and execution of the project). 7. Define a conflict resolution and escalation procedure for the project. 8. Highlight the main project controlling processes, such as change/risk/quality management. 9. Define the selected progress tracking and reporting approach. -10. Determine which artefacts (i.e. plans, reports or other documents) are necessary for the project. +10. Determine which artifacts (i.e. plans, reports or other documents) are necessary for the project. 11. Document the roles involved in the project along with their respective responsibilities. | RAM (RASCI) | AGB | PSC | PO | BM | BIG | SP | PM | PCT | @@ -144,7 +144,7 @@ The main purpose of the Project Roles \& Responsibilities section of the Project ### 6.2.2 Project Management Plans -PM² suggests several Project Management Plans (artefacts) which outline the various project management processes. These plans identify how an organisation manages relatively standard processes. These plans are the: +PM² suggests several Project Management Plans (artifacts) which outline the various project management processes. These plans identify how an organization manages relatively standard processes. These plans are the: 1. Requirements Management Plan 2. Project Change Management Plan @@ -153,21 +153,21 @@ PM² suggests several Project Management Plans (artefacts) which outline the var 5. Issue Management Plan 6. Communications Management Plan -Depending on the organisation and the project, different levels of documentation detail may be required. When sufficient, a brief definition of each management process or plan can be provided in the Project Handbook. When a more extensive and detailed description is needed, separate management plans can be instituted based on the PM² templates and guidelines provided. +Depending on the organization and the project, different levels of documentation detail may be required. When sufficient, a brief definition of each management process or plan can be provided in the Project Handbook. When a more extensive and detailed description is needed, separate management plans can be instituted based on the PM² templates and guidelines provided. ### 6.2.3 Project-Specific Plans -PM² defines a set of recommended project plans, which can be used for any type of project and provides templates and guidelines for each. However, in contrast to the standard Management Plans, which only require light customisation and tailoring, the Project-Specific Plans usually require more effort because their content is specific to the project. +PM² defines a set of recommended project plans, which can be used for any type of project and provides templates and guidelines for each. However, in contrast to the standard Management Plans, which only require light customization and tailoring, the Project-Specific Plans usually require more effort because their content is specific to the project. The optimal level of detail included in Project-Specific Plans depends on the type, size and complexity of the project, the project management context and environment, and the experience and competences of the project team. All Project-Specific Plans to be used in a project should be listed in the Project Handbook. -### 6.2.4 Domain-Specific Artefacts +### 6.2.4 Domain-Specific Artifacts These plans are specific to the project domain (i.e. the project type) and are very often an integral part of the project planning and the overall project documentation. No templates are provided by PM². -However, the artefacts should still be identified and listed in the Project Handbook, as they are part of the project's planning-phase outputs. Examples of domain-specific artefacts include system designs (for IT projects), architectural layouts (for renovation/moving projects) and laws/policies (for policy projects). +However, the artifacts should still be identified and listed in the Project Handbook, as they are part of the project's planning-phase outputs. Examples of domain-specific artifacts include system designs (for IT projects), architectural layouts (for renovation/moving projects) and laws/policies (for policy projects). 6.2.5 Other @@ -177,11 +177,11 @@ The purpose of the escalation procedure is to provide an agreed and effective wa Resource Needs: The Project Handbook must also define how the resources (people and equipment) allocated to the project will be used to serve the project's best interests. -As the work to be done becomes clearer, the skills needed to perform the work will also have to be recorded in the Project Handbook. A Training Plan can be annexed to the Project Handbook if personnel need to be trained in missing skills. If more people with these skills need to be hired, the hiring process must be described in the same section of the Handbook. Finally, the way resources will be released at the end of the project (or when their work is complete) must also be formalised here. +As the work to be done becomes clearer, the skills needed to perform the work will also have to be recorded in the Project Handbook. A Training Plan can be annexed to the Project Handbook if personnel need to be trained in missing skills. If more people with these skills need to be hired, the hiring process must be described in the same section of the Handbook. Finally, the way resources will be released at the end of the project (or when their work is complete) must also be formalized here. ## 6.3 Project Stakeholder Matrix -The Project Stakeholder Matrix lists all (key) project stakeholders and their contact details and clearly states their role(s) in the project. It may also include a classification or categorisation of each stakeholder. The information captured in the Project Stakeholder Matrix should be tailored to the project's needs. +The Project Stakeholder Matrix lists all (key) project stakeholders and their contact details and clearly states their role(s) in the project. It may also include a classification or categorization of each stakeholder. The information captured in the Project Stakeholder Matrix should be tailored to the project's needs. | Key Participants | Description | | :-- | :-- | @@ -196,7 +196,7 @@ The Project Stakeholder Matrix lists all (key) project stakeholders and their co **Guidelines** -PM² provides a Project Stakeholder Matrix template. The template includes the standard project roles organised into the following groups: +PM² provides a Project Stakeholder Matrix template. The template includes the standard project roles organized into the following groups: - Teams-e.g. Project Steering Committee (PSC). - Roles-e.g. Project Owner (PO), Solution Provider (SP), User Representatives (URs). @@ -208,7 +208,7 @@ Note: Be careful to respect all applicable regulations on privacy and personal d **Steps** -1. Using the project's organisational structure, identify everyone who will have a role in the project. +1. Using the project's organizational structure, identify everyone who will have a role in the project. 2. Assign each person a specific role for the duration of the project, based on the PM² standard Roles \& Responsibilities. | RAM (RASCI) | AGB | PSC | PO | BM | BIG | SP | PM | PCT | @@ -217,7 +217,7 @@ Note: Be careful to respect all applicable regulations on privacy and personal d ![Fig 6.5 Project Stakeholder Matrix inputs and main roles](06.05.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Stakeholder
    Management | Business Case
    Project Charter | Project Handbook
    Outsourcing Plan
    Communications
    Management Plan | Project
    Reports | Project Logs
    Stakeholders
    Checklist | Project-End
    Report | @@ -227,7 +227,7 @@ Note: Be careful to respect all applicable regulations on privacy and personal d ## 6.4 Project Work Plan -The Project Work Plan further elaborates the project scope and identifies and organises the project work and deliverables needed to achieve the project goals. It establishes a basis on which to estimate the project's duration, calculate the required resources, and schedule the work. Once the tasks are scheduled, the Project Work Plan is used as a basis for monitoring progress and controlling the project. The Project Work Plan should be baselined but also kept up-to-date during the life of the project and capture all project related work as identified during planning phase or emerged during the executing phase (e.g. risks, issues, corrective actions etc.) +The Project Work Plan further elaborates the project scope and identifies and organizes the project work and deliverables needed to achieve the project goals. It establishes a basis on which to estimate the project's duration, calculate the required resources, and schedule the work. Once the tasks are scheduled, the Project Work Plan is used as a basis for monitoring progress and controlling the project. The Project Work Plan should be baselined but also kept up-to-date during the life of the project and capture all project related work as identified during planning phase or emerged during the executing phase (e.g. risks, issues, corrective actions etc.) | Key Participants | Description | | :-- | :-- | @@ -253,7 +253,7 @@ The Project Work Plan is composed of three parts: ![Fig 6.6 Project Work Plan inputs and main roles](06.06.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Schedule and Cost
    Management | Business Case \&
    Project Charter | Project Work Plan.
    (Work Breakdown, Effor
    \& Costs, Schedule) | Project
    Reports | Project Work Plan
    Project Logs | Project-End
    Report | @@ -288,7 +288,7 @@ The objective of this section of the Project Work Plan is to estimate the effort 6.4.3 Project Schedule -The objective of this section of the Project Work Plan is to document the dependencies between tasks, pinpoint their start and end dates, and work out the overall project duration. Detailed scheduling can be done for the entire project upfront, or alternatively, worked out (in adequate detail) only for some early parts of the Executing Phase, and then progressively developed in full detail. The Project Manager (PM) uses the schedule to authorise, coordinate and accept project work, and to monitor overall progress (see Appendix C). +The objective of this section of the Project Work Plan is to document the dependencies between tasks, pinpoint their start and end dates, and work out the overall project duration. Detailed scheduling can be done for the entire project upfront, or alternatively, worked out (in adequate detail) only for some early parts of the Executing Phase, and then progressively developed in full detail. The Project Manager (PM) uses the schedule to authorize, coordinate and accept project work, and to monitor overall progress (see Appendix C). **Inputs** @@ -301,7 +301,7 @@ The objective of this section of the Project Work Plan is to document the depend ## 6.5 Outsourcing Plan -The Outsourcing Plan defines the what and how for any outsourced products or services. It outlines the scope of products and/or services to be purchased or contracted, identifies the outsourcing strategies that will be used, and defines the relevant responsibilities for the full outsourcing lifecycle. Note that the present plan should be compliant with the relevant organisational rules and procedures. +The Outsourcing Plan defines the what and how for any outsourced products or services. It outlines the scope of products and/or services to be purchased or contracted, identifies the outsourcing strategies that will be used, and defines the relevant responsibilities for the full outsourcing lifecycle. Note that the present plan should be compliant with the relevant organizational rules and procedures. | Participants | Description | | :-- | :-- | @@ -313,16 +313,16 @@ The Outsourcing Plan defines the what and how for any outsourced products or ser - Business Case and Project Charter - Project Work Plan - Project Handbook -- Relevant organisational procurement rules and procedures +- Relevant organizational procurement rules and procedures **Steps** 1. Identify the deliverables and activities that need to be outsourced, along with the timeframe within which the outsourcing should take place. -2. Decide who can interface with the contractors and who is responsible for signing the contract. Note that there might be organisation-level rules on contracting to be followed. +2. Decide who can interface with the contractors and who is responsible for signing the contract. Note that there might be organization-level rules on contracting to be followed. 3. List the evaluation criteria for contractors. This ensures that a contractor is selected on the basis of pre-set criteria and that no single person or group influences the decision. The criteria could include the following: capability, previous experience in similar projects, anything else of relevance. -4. Identify any constraints that may affect the outsourcing process (an organisation's pre-existing agreements or preferred suppliers may require the project team to work with specific suppliers or contractors). +4. Identify any constraints that may affect the outsourcing process (an organization's pre-existing agreements or preferred suppliers may require the project team to work with specific suppliers or contractors). 5. Identify the method(s) by which new products may be obtained (i.e. lease/purchase, tendering process). Factors like time/capacity constraints may also influence the choice of method. -6. Identify the people within the organisation who must approve purchases. +6. Identify the people within the organization who must approve purchases. 7. Provide a timeline for all the contracted activities and deliverables. This will ensure that the contractor is committed to having resources available to meet the pre-agreed timeline. 8. Identify any documentation deliverables expected from the contractors (e.g. manuals, etc.). @@ -332,7 +332,7 @@ The Outsourcing Plan defines the what and how for any outsourced products or ser ![Fig 6.7 Outsourcing Plan inputs and main roles](06.07.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Outsourcing Management | Project
    Charter | Project Handbook
    Outsourcing Plan | Project Reports | Project Logs | Project-End
    Report | @@ -391,7 +391,7 @@ The Deliverables Acceptance Plan documents the agreed criteria and approach for ![Fig 6.8: Deliverables Acceptance Plan inputs and main roles](06.08.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Acceptance Management | Project
    Charter | Deliverables
    Acceptance Plan | Deliverables
    Acceptance
    Note | Deliverables
    Acceptance Checklist
    Decision Log | Project-
    End
    Report | @@ -402,7 +402,7 @@ The Deliverables Acceptance Plan documents the agreed criteria and approach for ## 6.7 Transition Plan -The Transition Plan defines the goals, prerequisites, activities and responsibilities associated with transitioning from the old (pre-project) to the new (post-project) state. It seeks to minimise the impact of any disruptions on the business during the transition period, and to facilitate the roll-out of project outputs in a smooth and timely fashion, allowing them to be used efficiently and with no serious transition issues. +The Transition Plan defines the goals, prerequisites, activities and responsibilities associated with transitioning from the old (pre-project) to the new (post-project) state. It seeks to minimize the impact of any disruptions on the business during the transition period, and to facilitate the roll-out of project outputs in a smooth and timely fashion, allowing them to be used efficiently and with no serious transition issues. A successful transition is an important prerequisite for achieving the planned project benefits. All transition activities become part of the Project Work Plan and are scheduled and controlled as part of the overall project. @@ -439,7 +439,7 @@ A successful transition is an important prerequisite for achieving the planned p ![Fig 6.9 Transition Plan inputs and main roles](06.09.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Implementation
    Management | Project
    Charter | Business Implementation Plan
    Transition Plan Project Work Plan | Project
    Reports | Transition Checklist
    Business Implementation Checklist | Project-End Report | @@ -450,9 +450,9 @@ A successful transition is an important prerequisite for achieving the planned p ## 6.8 Business Implementation Plan -The Business Implementation Plan aims to increase the likelihood of achieving the project's desired outcomes and benefits. It documents an assessment of the project's impact on the organisation's processes, culture and people and outlines the change-management and communications activities that need to take place to ensure that the project outputs are effectively integrated into the organisation's environment. +The Business Implementation Plan aims to increase the likelihood of achieving the project's desired outcomes and benefits. It documents an assessment of the project's impact on the organization's processes, culture and people and outlines the change-management and communications activities that need to take place to ensure that the project outputs are effectively integrated into the organization's environment. -Depending on the organisation, the business implementation activities can be performed as part of the same project or as a separate one. These activities become part of the Project Work Plan and are scheduled and controlled as part of the overall project. +Depending on the organization, the business implementation activities can be performed as part of the same project or as a separate one. These activities become part of the Project Work Plan and are scheduled and controlled as part of the overall project. | Key Participants | Description | | :-- | :-- | @@ -470,13 +470,13 @@ Depending on the organisation, the business implementation activities can be per **Steps** -1. Understand the pre- and post-project states and analyse the project's impact on the organisation's processes, people and culture. +1. Understand the pre- and post-project states and analyze the project's impact on the organization's processes, people and culture. 2. Plan any redesigning or updating of affected business processes. 3. Develop a communication strategy and define the necessary change-management activities. -4. Identify possible sources of resistance to the desired change(s), analyse the attitude of key stakeholders and plan their involvement in change-management activities. -5. Determine the training needs of the people in the organisation. +4. Identify possible sources of resistance to the desired change(s), analyze the attitude of key stakeholders and plan their involvement in change-management activities. +5. Determine the training needs of the people in the organization. 6. Include all project-related business implementation activities in the overall Project Work Plan -7. Identify the change implementation (and change sustaining) activities to be carried out by the organisation after the project ends, possibly as future/follow-up projects. +7. Identify the change implementation (and change sustaining) activities to be carried out by the organization after the project ends, possibly as future/follow-up projects. | RAM (RASCI) | AGB | PSC | PO | BM | BIG | SP | PM | PCT | | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | @@ -484,7 +484,7 @@ Depending on the organisation, the business implementation activities can be per ![Fig 6.10 Business Implementation Plan inputs and main roles](06.10.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Implementation
    Management | Project
    Charter | Business
    Implementation Plan
    Transition Plan
    Project Work Plan | Project
    Reports | Transition Checklist
    Business Implementation
    Checklist | Project-End Report
    (Post-Project
    Recommendations) | diff --git a/docs/project-management-guide/7-executing-phase/README.md b/docs/project-management-guide/7-executing-phase/README.md index e99e4e210031..c95213cc06d8 100644 --- a/docs/project-management-guide/7-executing-phase/README.md +++ b/docs/project-management-guide/7-executing-phase/README.md @@ -8,10 +8,10 @@ keywords: executing kick-off meeting, project coordination, quality assurance, p # 7 Executing phase -The third phase of a PM² project is the Executing Phase. During this phase, the project deliverables are produced and the requestor organisation prepares for their introduction. The Executing Phase begins with a Kick-off Meeting and ends with the acceptance (final or provisional-as per the Deliverables Acceptance Plan) by the requestor side. +The third phase of a PM² project is the Executing Phase. During this phase, the project deliverables are produced and the requestor organization prepares for their introduction. The Executing Phase begins with a Kick-off Meeting and ends with the acceptance (final or provisional-as per the Deliverables Acceptance Plan) by the requestor side. ![Fig 7.1 Executing Phase activities and main outputs](07.01.png) -![Fig 7.2 Executing Phase artefacts](07.02.png) +![Fig 7.2 Executing Phase artifacts](07.02.png) ## 7.1 Executing Kick-off Meeting @@ -19,7 +19,7 @@ The Executing Phase starts with the Executing Kick-off Meeting. This meeting ens | Key Participants | Description | | :-- | :-- | -| Project Manager (PM) | Organises the meeting. | +| Project Manager (PM) | Organizes the meeting. | | Project Core Team (PCT) | Required participants. | | Project Manager Assistant (PMA) \& Project
    Support Office (PSO) | Required to attend (if they are part of the project). | | Other project roles or stakeholders | Optional participation (as per the project's needs). | @@ -135,7 +135,7 @@ Quality Assurance activities are documented in the Quality Management Plan. Thes ![Fig 7.5 Quality Assurance inputs/outputs and main roles](07.05.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Quality Management | Project Charter | Quality Management Plan | Quality Review Reports
    Audit Reports | Quality Review Checklist
    Project Logs
    Phase-Exit Review Checklist | Project-End Report
    Project Acceptance Note | @@ -205,7 +205,7 @@ If a project is a multi-annual project and its overall vision/scope has not chan **Quality Review Report** -The Project Manager (PM) produces a Quality Review Report after evaluating the results of qualityassurance activities and the effectiveness of the project's quality-management process for all aspects of the project (scope, time, cost, quality, project organisation, communication, risks, contracts, client satisfaction, etc.). +The Project Manager (PM) produces a Quality Review Report after evaluating the results of qualityassurance activities and the effectiveness of the project's quality-management process for all aspects of the project (scope, time, cost, quality, project organization, communication, risks, contracts, client satisfaction, etc.). The Quality Review Report should give an overview of the status of all project quality-management activities and present the main quality assurance and control results, non-conformities, opportunities for improvement, recommendations and remediation/improvement actions, and their impact and status. It should also report on the status of important project configuration activities (assurance and control). The main input to the Quality Review Report is the Quality Review Checklist. @@ -215,7 +215,7 @@ The Contractor Status Report is filled out by the contractor (if there is one) a **Custom or Ad Hoc Reports** -Reports should serve the project's needs. If it is decided that a custom report is needed, this should be defined during the Planning Phase and documented in the Project Handbook. Custom reports can be domain-specific (e.g. IT-related) or project-specific (i.e. related to the particularities of the project organisation or the project management approach). +Reports should serve the project's needs. If it is decided that a custom report is needed, this should be defined during the Planning Phase and documented in the Project Handbook. Custom reports can be domain-specific (e.g. IT-related) or project-specific (i.e. related to the particularities of the project organization or the project management approach). Similarly, if a specific communication/reporting need arises during the project, an Ad-Hoc Report can be produced to address this need. **Outputs** @@ -264,7 +264,7 @@ Information distribution refers to the methods used to keep project stakeholders ## 7.6 Phase Gate: RfC (Ready for Closing) -This is the third and final phase gate. A review and approval are recommended before the project can move to the next phase. The Project Manager (PM) assesses whether all the goals of the Executing Phase have been achieved, verifies that all planned activities have been carried out, that all requirements have been met, and that the project's outputs have been fully delivered. The Project Manager (PM) is also responsible for ensuring that the Project Owner (PO) accepts the deliverables (at least provisionally), finalises the transition and makes the outputs available to the end-users. +This is the third and final phase gate. A review and approval are recommended before the project can move to the next phase. The Project Manager (PM) assesses whether all the goals of the Executing Phase have been achieved, verifies that all planned activities have been carried out, that all requirements have been met, and that the project's outputs have been fully delivered. The Project Manager (PM) is also responsible for ensuring that the Project Owner (PO) accepts the deliverables (at least provisionally), finalizes the transition and makes the outputs available to the end-users. -Once all the above conditions have been met, the Project Steering Committee (PSC) can authorise the Project Manager (PM) to move the project to the Closing Phase. +Once all the above conditions have been met, the Project Steering Committee (PSC) can authorize the Project Manager (PM) to move the project to the Closing Phase. PM² provides a template Phase Exit Review Checklist for each phase that can be used by the Project Manager (PM) to guide the assessment, alongside a review of the phase's specific goals. diff --git a/docs/project-management-guide/8-closing-phase/README.md b/docs/project-management-guide/8-closing-phase/README.md index f593f3db43e7..55464628df54 100644 --- a/docs/project-management-guide/8-closing-phase/README.md +++ b/docs/project-management-guide/8-closing-phase/README.md @@ -11,7 +11,7 @@ keywords: project-end review meeting, lessons learned and post-project recommend The final phase of a PM² project is the Closing Phase. The Closing Phase starts with the Project-End Review Meeting and ends with the Project Owner's (PO) final approval, which marks the project's administrative closure. During the Closing Phase, the project's activities are completed, the project's final state is documented, and the finished deliverables are officially transferred to the Project Owner (PO). ![Fig 8.1 Closing Phase activities and main outputs](08.01.png) -![Fig 8.2 Closing Phase artefacts](08.02.png) +![Fig 8.2 Closing Phase artifacts](08.02.png) **Project-End Review Meeting** @@ -25,8 +25,8 @@ The final phase of a PM² project is the Closing Phase. The Closing Phase starts **Administrative Closure** -- The Project Manager (PM) ensures that the project is approved and accepted by the relevant stakeholders. The finished deliverables are transferred into the care, custody and control of the Project Owner (PO) and the requestor/client organisation. -- All documentation and records are reviewed, organised and securely archived with the help of the Project Support Office (PSO). Resources are released and the project is closed. +- The Project Manager (PM) ensures that the project is approved and accepted by the relevant stakeholders. The finished deliverables are transferred into the care, custody and control of the Project Owner (PO) and the requestor/client organization. +- All documentation and records are reviewed, organized and securely archived with the help of the Project Support Office (PSO). Resources are released and the project is closed. ## 8.1 Project-End Review Meeting @@ -34,7 +34,7 @@ The Project-End Review Meeting launches the Closing Phase of the project after t | Key Participants | Description | | :-- | :-- | -| Project Manager (PM) | Organises the meeting. | +| Project Manager (PM) | Organizes the meeting. | | Project Core Team (PCT) | Attendance is required. | | Project Owner (PO) | Attendance is required. | | Project Quality Assurance (PQA) | Should attend. | @@ -59,7 +59,7 @@ Before the Project-End Review Meeting: During the Project-End Review Meeting: -1. The Project Owner (PO) will normally express the organisation's appreciation to the whole project team and key project stakeholders. +1. The Project Owner (PO) will normally express the organization's appreciation to the whole project team and key project stakeholders. 2. Ensure someone is designated to take the Minutes of Meeting (MoM). 3. Present project statistics and data on performance and achievements. 4. Discuss the overall project experience. @@ -84,15 +84,15 @@ After the Project-End Review Meeting: ## 8.2 Lessons Learned and Post-Project Recommendations -The purpose of formal Lessons Learned and Post-Project Recommendations is to make it possible for project teams and the permanent organisation at large to benefit from the experience acquired during the project. It is also important to capture ideas and recommendations for post-project work relating to the operation of the product/service delivered, such as extensions, maintenance and ideas for follow-up projects. +The purpose of formal Lessons Learned and Post-Project Recommendations is to make it possible for project teams and the permanent organization at large to benefit from the experience acquired during the project. It is also important to capture ideas and recommendations for post-project work relating to the operation of the product/service delivered, such as extensions, maintenance and ideas for follow-up projects. Note: Improvement opportunities and Post-Project Recommendations should be captured in some form as they come up during the project. Otherwise, particularly in longer projects, the ideas might get lost by the time the project reaches the Closing Phase. -There are many benefits to formalising Lessons Learned and Post-Project Recommendations. When project team members share their perspectives and provide feedback it provides useful insights that, the requestor/client side can use to manage post-project activities more effectively. +There are many benefits to formalizing Lessons Learned and Post-Project Recommendations. When project team members share their perspectives and provide feedback it provides useful insights that, the requestor/client side can use to manage post-project activities more effectively. | Key Participants | Description | | :-- | :-- | -| Project Manager (PM) | Organises the gathering of Lessons Learned. | +| Project Manager (PM) | Organizes the gathering of Lessons Learned. | | Project Core Team (PCT) | Contributes experiences and perspectives. | | Business Manager (BM) | Represents the requestor's point of view. | | Other project stakeholders | As required. | @@ -101,11 +101,11 @@ Because all projects are different, the Lessons Learned process cannot be generi **Guidelines**: -- The Lessons Learned session should be a part of the Project-End Review Meeting (though separate sessions could be organised at the end of project phases or major milestones). +- The Lessons Learned session should be a part of the Project-End Review Meeting (though separate sessions could be organized at the end of project phases or major milestones). - It may be preferable to have the Lessons Learned session facilitated by someone who has not been intimately involved in the project, allowing the Project Manager (PM) to contribute as a participant. -- The discussion should be structured (using project phases, categories of activities, etc. as the organisational principle) to cover every aspect of the project. +- The discussion should be structured (using project phases, categories of activities, etc. as the organizational principle) to cover every aspect of the project. - Use a structured approach to collecting lessons learned from a broader group of stakeholders via questionnaires, or structured interviews. -- Improvement ideas should be organised into groups to help the team better visualise the appropriate next steps required to implement them. +- Improvement ideas should be organized into groups to help the team better visualize the appropriate next steps required to implement them. - In some cases, it could make sense to address the Lessons Learned over multiple sessions, each devoted to a different topic (technical issues, business implementation, etc.). - The Project Steering Committee (PSC) should be invited to the Lessons Learned session(s) as this will allow its members to transfer the Lessons Learned to other projects. @@ -119,7 +119,7 @@ Because all projects are different, the Lessons Learned process cannot be generi ## 8.3 Project-End Report -Following the Project-End Review Meeting, the overall experience of the project is summarised in a report that documents best practices, Lessons Learned, pitfalls and solutions to problems. The report should be used as a knowledge base for future projects. +Following the Project-End Review Meeting, the overall experience of the project is summarized in a report that documents best practices, Lessons Learned, pitfalls and solutions to problems. The report should be used as a knowledge base for future projects. | Key Participants | Description | | :-- | :-- | @@ -148,7 +148,7 @@ Following the Project-End Review Meeting, the overall experience of the project - Human resources and stakeholder management. - Deliverables Acceptance. - Business Implementation and Project Transition. -- The performance of the Project Core Team (PCT) and participating organisation. +- The performance of the Project Core Team (PCT) and participating organization. - Best Practices and Lessons Learned. - Post-Project Recommendations. - This document should be part of a central project repository or knowledge database describing project experiences, best practices and common pitfalls. @@ -159,7 +159,7 @@ Following the Project-End Review Meeting, the overall experience of the project ![Fig 8.4 Project-End Report inputs and main roles](08.04.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Communications
    Management | | Communications \& Quality Management Plan | Project
    Reports | Project Checklists
    Project Logs | Project-End Report | @@ -169,7 +169,7 @@ Following the Project-End Review Meeting, the overall experience of the project ## 8.4 Administrative Closure -The Project Manager (PM) ensures that all project deliverables have been accepted by the relevant stakeholders and, with the help of the Project Support Office (PSO), that all project documentation and records are up-to-date, reviewed, organised and securely archived. The Project Team is now officially dissolved and all resources are released. +The Project Manager (PM) ensures that all project deliverables have been accepted by the relevant stakeholders and, with the help of the Project Support Office (PSO), that all project documentation and records are up-to-date, reviewed, organized and securely archived. The Project Team is now officially dissolved and all resources are released. The project is officially closed once all Closing Phase activities are completed and the Project Owner (PO) has approved the project. Formal project closure brings project mode to an end and allows operations mode to commence. @@ -177,7 +177,7 @@ The project is officially closed once all Closing Phase activities are completed | :-- | :-- | | Project Manager (PM) | Oversees all closure activities and the release of project resources. | | Other project stakeholders | Approve and accept the project. | -| Project Support Office (PSO) | Assists in reviewing, organising and archiving all project
    documentation. | +| Project Support Office (PSO) | Assists in reviewing, organizing and archiving all project
    documentation. | | Project Owner (PO) | Has final approval of the project. | **Inputs** @@ -189,7 +189,7 @@ The project is officially closed once all Closing Phase activities are completed **Steps** -1. Ensure that all documentation and records are reviewed, organised and archived. +1. Ensure that all documentation and records are reviewed, organized and archived. 2. Release all resources. 3. Ensure that the project is approved and accepted by the project stakeholders. 4. Ensure that the Project Owner (PO) gives final project approval and closes the project. diff --git a/docs/project-management-guide/9-monitor-and-control/README.md b/docs/project-management-guide/9-monitor-and-control/README.md index ad5d20b72cd6..b02232fe7317 100644 --- a/docs/project-management-guide/9-monitor-and-control/README.md +++ b/docs/project-management-guide/9-monitor-and-control/README.md @@ -25,9 +25,9 @@ The Monitor \& Control activities are carried out based on the processes describ - Devise, plan, propose and implement corrective actions to address existing or potential performance risks or issues, while updating the relevant project plans and logs. -![Fig 9.1 Monitor & Control activities and main artefacts](09.01.png) +![Fig 9.1 Monitor & Control activities and main artifacts](09.01.png) -Monitor \& Control artefacts comprise the Project Work Plan as well as a range of Project Logs and Checklists. +Monitor \& Control artifacts comprise the Project Work Plan as well as a range of Project Logs and Checklists. The Project Logs are regularly updated as new information becomes available (e.g. new issues can arise and new information can be added to the Issue Log). @@ -70,7 +70,7 @@ This information is then distributed to relevant stakeholders as per the Communi - Tasks-i.e. the status of critical and next critical path tasks. - Key outputs-i.e. completed and verified deliverables, and milestones achieved as planned. -- Resource utilisation-i.e. resources used as planned and costs as budgeted. +- Resource utilization-i.e. resources used as planned and costs as budgeted. - Logs-i.e. the status and evolution of risks and issues, changes and decisions. - People-i.e. team morale, stakeholder engagement, overall project dynamics and productivity. @@ -117,7 +117,7 @@ Approved project changes (e.g. addition of new tasks or changes to the required ![Fig 9.3 Control Schedule inputs/outputs and main roles](09.03.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Schedule Management | Project Charter | Project Handbook Project Work Plan | Project Reports | Project Work Plan | Project-End Report | @@ -161,7 +161,7 @@ Note: The project budget must have been approved by the Project Owner (PO) at th ![Fig 9.4 Control Cost inputs/outputs and main roles](09.04.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Cost Management | Business Case
    Project Charter | Project Handbook
    Project Work Plan | Project Reports | Project Work Plan
    Project Logs | Project-End
    Report | @@ -191,7 +191,7 @@ Responsibility for this activity belongs to the Project Manager (PM). However, a **Steps** -1. Analyse the expectations, attitudes, level of interest and influence of key project stakeholders. Beware of stakeholders who are less than enthusiastic or opposed to the project. +1. Analyze the expectations, attitudes, level of interest and influence of key project stakeholders. Beware of stakeholders who are less than enthusiastic or opposed to the project. 2. Devise communication and management strategies that encourage stakeholders to get involved and contribute. 3. Continually monitor stakeholder reactions or changing attitudes and manage accordingly. A oneoff analysis exercise is not enough, especially for longer-term and/or complex projects. Use the Stakeholders Checklist to identify specific actions to be taken at specific moments in the project. 4. Ensure that any planned stakeholder management activities are time-bound and focused. Keep in mind that the contribution/involvement of various stakeholders may be different in each project phase. @@ -203,7 +203,7 @@ Responsibility for this activity belongs to the Project Manager (PM). However, a ![Fig 9.5 Manage Stakeholders inputs/outputs and main roles](09.05.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Stakeholder
    Management | Business Case
    Project Charter | Project Stakeholder
    Matrix
    Communications
    Management Plan | Project
    Reports | Project Logs
    Stakeholders Checklist | Project-End
    Report | @@ -217,7 +217,7 @@ Outputs Requirements management is the process of gathering, documenting and validating requirements and managing their implementation and change. It is a process that runs throughout the project lifecycle and relates to other project management processes, such as quality and change management. -The Requirements Management Process can be tailored and customised to a project's needs. It can be documented either in a Requirements Management Plan or in the Project Handbook. Separate requirements documents are used to specify, categorise and prioritise the requirements. These can be standalone documents or an annex to the Project Charter. +The Requirements Management Process can be tailored and customized to a project's needs. It can be documented either in a Requirements Management Plan or in the Project Handbook. Separate requirements documents are used to specify, categorize and prioritize the requirements. These can be standalone documents or an annex to the Project Charter. | Key Participants | Description | |--------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------| @@ -236,7 +236,7 @@ The Requirements Management Process can be tailored and customised to a project' - A requirement is a capability that a product or service must have in order to satisfy a stakeholder's need(s). - High-level requirements may also be referred to as business requirements, and are usually initially specified in the Project Initiation Request, the Business Case and the Project Charter. -- Adding further detail to the requirements produces lower-level requirements. These can be described in a variety of formats (e.g. text, use cases or user stories, models, business processes, sketches or graphics, etc.) and are documented in various requirements artefacts. +- Adding further detail to the requirements produces lower-level requirements. These can be described in a variety of formats (e.g. text, use cases or user stories, models, business processes, sketches or graphics, etc.) and are documented in various requirements artifacts. - The agreed and approved requirements of all stakeholders constitute the project's baseline scope. - Any change to the baselined requirements should be made in accordance with the change management process described in the Change Management Plan. - For each identified requirement, there should be a corresponding test to validate its acceptance. The test should be documented in the appropriate document (Deliverable Acceptance Plan, Deliverable Acceptance Checklist or Quality Review Checklist). @@ -245,7 +245,7 @@ The Requirements Management Process can be tailored and customised to a project' **Steps** -1. Specify the requirements: Together with the project stakeholders, gather the project requirements and document them clearly in the Requirements Artefacts. Structure them by adding relevant metadata. +1. Specify the requirements: Together with the project stakeholders, gather the project requirements and document them clearly in the Requirements Artifacts. Structure them by adding relevant metadata. 2. Evaluate the requirements: The project team assesses the feasibility, consistency and completeness of the requirements, and estimates the effort/costs needed to implement them. The Project Manager (PM) balances the list of requirements against project constraints (budget, time, etc.) and makes a proposal to the project stakeholders. 3. Approve the requirements: The Project Manager (PM) and key stakeholders-such as the Project Owner (PO) or Business Manager (BM)—negotiate and agree on the requirements for the project. 4. Monitor the implementation of requirements: The Project Manager (PM) continuously monitors the Project Core Team's (PCT) implementation of the requirements, adds new requirements and changes existing ones when needed. @@ -257,7 +257,7 @@ The Requirements Management Process can be tailored and customised to a project' ![Fig 9.6 Manage Requirements inputs/outputs and main roles](09.06.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Requirements
    Management | Project Initiation
    Request
    Project Charter | Requirements
    Management Plan
    Deliverables Acceptance
    Plan
    Project Stakeholder
    Matrix | Change
    Requests | Requirements
    Document
    Project Work Plan
    Project Logs | Project-End
    Report | @@ -269,15 +269,15 @@ The Requirements Management Process can be tailored and customised to a project' ## 9.6 Manage Project Change -Project change management defines the activities related to identifying, documenting, assessing, prioritising, approving, planning and controlling project changes, as well as communicating them to all relevant stakeholders. Changes can be requested (or identified and raised) throughout the project lifecycle by any project stakeholder. +Project change management defines the activities related to identifying, documenting, assessing, prioritizing, approving, planning and controlling project changes, as well as communicating them to all relevant stakeholders. Changes can be requested (or identified and raised) throughout the project lifecycle by any project stakeholder. -The Project Change Management Process can be tailored and customised to a project's needs and can be documented either in a Project Change Management Plan or in the Project Handbook. A Change Log is used to document, monitor and control all project changes (see Appendix B). This makes it easier to track the changes and communicate them to the Project Owner (PO) and/or the Project Steering Committee (PSC) for approval. +The Project Change Management Process can be tailored and customized to a project's needs and can be documented either in a Project Change Management Plan or in the Project Handbook. A Change Log is used to document, monitor and control all project changes (see Appendix B). This makes it easier to track the changes and communicate them to the Project Owner (PO) and/or the Project Steering Committee (PSC) for approval. | Key Participants | Description | |------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------| | Project Manager (PM) | Monitors and controls the project changes. | | Project Owner (PO) and/or Project Steering Committee (PSC) | Approves or rejects the project changes. | -| Project Core Team (PCT) | Involved in analysing the requested project changes (estimating the effort required to implement the changes). | +| Project Core Team (PCT) | Involved in analyzing the requested project changes (estimating the effort required to implement the changes). | | Stakeholders | Informed about the approved project changes. May introduce new project changes. | **Inputs** @@ -291,7 +291,7 @@ The Project Change Management Process can be tailored and customised to a projec **Steps** 1. Identify the change: The purpose of this step is to identify and document change requests. The Project Manager (PM) ensures that a Change Request is appropriately documented (i.e. via a Change Request Form and in the Change Log). -2. Assess the change and recommend action: The purpose of this step is to a) assess whether this request is indeed a project change, b) consider the impact of not implementing the proposed change, c) estimate the size of the identified change based on its impact on the project objectives, schedule, cost and effort, and d) prioritise the implementation of the change request in relation to other change requests. +2. Assess the change and recommend action: The purpose of this step is to a) assess whether this request is indeed a project change, b) consider the impact of not implementing the proposed change, c) estimate the size of the identified change based on its impact on the project objectives, schedule, cost and effort, and d) prioritize the implementation of the change request in relation to other change requests. 3. Approve the change: The purpose of this step is to reach a decision regarding the approval of the change based on the project's escalation procedure (i.e. the change must be reviewed by the appropriate decision-makers within the Managing/Directing/Steering Layers as defined by the project's Governance Model). There are four possible decisions: approve, reject, postpone or merge the change request. The decision details are documented in the Change Log and communicated to the requestor. 4. Implement the change: For approved or merged changes, the Project Manager (PM) should incorporate all related actions into the Project Work Plan and update the related documentation and logs (i.e. Risk, Issue, Change and Decision Logs and other plans). 5. Control the change: The purpose of this step is to monitor and control project changes so they can be easily communicated to the various project layers for approval or status updates. The Project Manager (PM) collects information on any project changes and related actions and controls the status of each change management activity. @@ -304,7 +304,7 @@ All stakeholders affected by the project changes should be informed and the Chan ![Fig 9.7 Manage Project Change inputs/outputs and main roles](09.07.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :-- | :--: | :--: | :--: | :--: | :--: | | Project Change Management | Project Charter | Project Change Management Plan | Change Request Project Reports | Change Log
    Project Work Plan | Project-End Report | @@ -316,9 +316,9 @@ All stakeholders affected by the project changes should be informed and the Chan ## 9.7 Manage Risk -Risk management is a systematic ongoing process for identifying, assessing and managing risks so that they conform to the organisation's accepted risk attitude. Risk management improves the project team's confidence by proactively managing any potential event that might have a positive or negative impact on project objectives. +Risk management is a systematic ongoing process for identifying, assessing and managing risks so that they conform to the organization's accepted risk attitude. Risk management improves the project team's confidence by proactively managing any potential event that might have a positive or negative impact on project objectives. -The Risk Management Process can be tailored and customised to a project's needs and can be documented either in a Risk Management Plan or in the Project Handbook. A Risk Log is used to document and communicate the risks and relevant risk-response actions and responsibilities (see Appendix B). +The Risk Management Process can be tailored and customized to a project's needs and can be documented either in a Risk Management Plan or in the Project Handbook. A Risk Log is used to document and communicate the risks and relevant risk-response actions and responsibilities (see Appendix B). | Key Participants | Description | | :-- | :-- | @@ -349,7 +349,7 @@ The Risk Management Process can be tailored and customised to a project's needs ![Fig 9.8: Manage Risk inputs/outputs and main roles](09.08.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Risk
    Management | Project
    Charter | Risk Management Plan | Project Reports | Project Logs
    Project Work Plan | Project-End Report | @@ -395,7 +395,7 @@ The Project Manager (PM) manages project issues and decisions. Issues are identi ![Fig 9.9 Manage Issues and Decisions inputs/outputs and main roles](09.09.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Issue Management | | Issue Management Plan | Project Reports | Project Logs
    Project Work Plan | Project-End Report | @@ -406,7 +406,7 @@ The Project Manager (PM) manages project issues and decisions. Issues are identi ## 9.9 Manage Quality -Project quality management aims to ensure that the project will achieve the expected results in the most efficient way and that deliverables will be accepted by the relevant stakeholders. It involves overseeing all the activities needed to maintain a desired level of excellence. This includes performing quality planning, quality assurance, quality control and quality improvement throughout the project until the Closing Phase and the final acceptance of the project. Configuration management helps project stakeholders manage project artefacts and deliverables effectively by providing a single reliable reference to these artefacts and deliverables, thereby ensuring that the correct versions are delivered to the project requestor/client. +Project quality management aims to ensure that the project will achieve the expected results in the most efficient way and that deliverables will be accepted by the relevant stakeholders. It involves overseeing all the activities needed to maintain a desired level of excellence. This includes performing quality planning, quality assurance, quality control and quality improvement throughout the project until the Closing Phase and the final acceptance of the project. Configuration management helps project stakeholders manage project artifacts and deliverables effectively by providing a single reliable reference to these artifacts and deliverables, thereby ensuring that the correct versions are delivered to the project requestor/client. The Project Manager (PM) must ensure that the objectives, approach, requirements, activities, metrics and responsibilities of the quality management process are clearly defined and documented in the Quality Management Plan. @@ -429,7 +429,7 @@ The Project Manager (PM) must ensure that the objectives, approach, requirements 2. Plan and perform quality assurance and control activities. 3. Verify that the configuration management procedure is being followed. 4. Actively involve the whole project team and relevant stakeholders. -5. Identify any non-conformity, analyse the root cause, and implement corrective actions. +5. Identify any non-conformity, analyze the root cause, and implement corrective actions. 6. Identify opportunities to improve the quality of both the process and the deliverables. 7. Ensure deliverables are accepted by the relevant stakeholders in line with predefined and documented deliverables acceptance criteria and the agreed acceptance process. @@ -439,7 +439,7 @@ The Project Manager (PM) must ensure that the objectives, approach, requirements ![Fig. 9.10 Manage Quality inputs/outputs and main roles](09.10.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Quality Management | Project
    Charter | Quality
    Management
    Plan | Quality Review
    Reports
    Audit Reports | Quality Review Checklist
    Phase-exit Review
    Checklist
    Project Logs | Project-End Report
    Project Acceptance
    Note | @@ -483,10 +483,10 @@ Note: When domain-specific (e.g. technical) documentation is delivered for accep For example: -- A stakeholder with business knowledge representing the business organisation-e.g. a User Representative (UR)-should review a User Manual. -- A stakeholder from the support and maintenance organisation should review an Operations Manual. -- A stakeholder from the organisation responsible for training should review training materials. -- A stakeholder from the service operations organisation should review release notes. +- A stakeholder with business knowledge representing the business organization-e.g. a User Representative (UR)-should review a User Manual. +- A stakeholder from the support and maintenance organization should review an Operations Manual. +- A stakeholder from the organization responsible for training should review training materials. +- A stakeholder from the service operations organization should review release notes. | RAM (RASCI) | AGB | PSC | PO | BM | BIG | SP | PM | PCT | | :-- | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | @@ -494,7 +494,7 @@ For example: ![Fig 9.11 Manage Deliverables Acceptance inputs/outputs and main roles](09.11.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Acceptance Management | Project Charter | Deliverables Acceptance Plan | Deliverables Acceptance Note | Deliverables Acceptance Checklist Decision Log | Project-End Report | @@ -506,7 +506,7 @@ For example: ## 9.11 Manage Transition -Transition management ensures a controlled and smooth transition from the old state to the new state in which the new product/service developed by the project is put in place. It includes the management of any relevant communication activities and requires close cooperation between the Project Manager (PM) and the Business Manager (BM) to ensure the correct transfer of project deliverables to the client organisation. +Transition management ensures a controlled and smooth transition from the old state to the new state in which the new product/service developed by the project is put in place. It includes the management of any relevant communication activities and requires close cooperation between the Project Manager (PM) and the Business Manager (BM) to ensure the correct transfer of project deliverables to the client organization. | Key Participants | Description | | :-- | :-- | @@ -546,7 +546,7 @@ Transition management ensures a controlled and smooth transition from the old st ![Fig 9.12 Manage Transition inputs/outputs and main roles](09.12.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Implementation
    Management | Project
    Charter | Transition Plan | Project Reports | Transition Checklist Sign-off Documents | Project-End Report | @@ -560,7 +560,7 @@ Transition management ensures a controlled and smooth transition from the old st The effective execution of all business implementation activities is critical for smooth operations, even after the project's outputs have been delivered to the stakeholder/user community. Business implementation activities are thus complementary to transition activities. -Note that business implementation activities will almost always be required long after the project has ended, so it is good practice to also define post-project change activities. The implementation of these activities is the responsibility of the permanent organisation and they are usually carried out as part of ongoing operations or future projects. +Note that business implementation activities will almost always be required long after the project has ended, so it is good practice to also define post-project change activities. The implementation of these activities is the responsibility of the permanent organization and they are usually carried out as part of ongoing operations or future projects. | Key Participants | Description | | :-- | :-- | @@ -583,7 +583,7 @@ Note that business implementation activities will almost always be required long - Redesign, adapt or update any affected business processes. - Implement the communication activities defined in the Business Implementation Plan. -- Implement the planned organisational change management activities. +- Implement the planned organizational change management activities. - Ensure that all training activities are completed. - Manage business continuity plans for business-critical systems. @@ -595,7 +595,7 @@ Note that business implementation activities will almost always be required long ![Fig 9.13 Manage Business Implementation inputs/outputs and main roles](09.13.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Implementation
    Management | | Business
    Implementation Plan
    Transition Plan | Project
    Reports | Project Work Plan
    Business Implementation
    Checklist | Project-End Report
    (Post-project
    Recommendations) | @@ -622,14 +622,14 @@ The Project Manager (PM) manages the delivery of all products and/or services th **Steps** -1. The Project Steering Committee (PSC) ensures that the contractor is chosen according to the organisation's processes and standards and to the criteria defined for the project. +1. The Project Steering Committee (PSC) ensures that the contractor is chosen according to the organization's processes and standards and to the criteria defined for the project. 2. The Project Steering Committee (PSC) ensures that all contracts clearly define the expectations of both parties. 3. The Project Manager (PM) ensures that the working methods detailed in the project's Outsourcing Plan are applied. 4. The Project Manager (PM) monitors costs and schedules. 5. The Contractor's Project Manager (CPM) reports on the project's status and progress to the Project Manager (PM) and, if necessary, the Project Steering Committee (PSC). 6. The Project Manager (PM) manages changes to the outsourced work. 7. The Project Manager (PM) and/or Project Steering Committee (PSC) validate interim and final deliverables and/or milestones based on agreed criteria and as defined in the Outsourcing Plan. -8. The Project Manager (PM) ensures that the required formal approval is received on time and in accordance with organisational standards. +8. The Project Manager (PM) ensures that the required formal approval is received on time and in accordance with organizational standards. | RAM (RASCI) | AGB | PSC | PO | BM | BIG | SP | PM | PCT | | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | @@ -637,9 +637,9 @@ The Project Manager (PM) manages the delivery of all products and/or services th ![Fig 9.14 Manage Outsourcing inputs/outputs and main roles](09.14.png) -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | -| Outsourcing Management | | Project Handbook
    Outsourcing Plan
    Deliverables
    Acceptance Plan | Project
    Reports | Outsourcing
    Management artefacts | Project-End
    Report | +| Outsourcing Management | | Project Handbook
    Outsourcing Plan
    Deliverables
    Acceptance Plan | Project
    Reports | Outsourcing
    Management artifacts | Project-End
    Report | **Outputs** diff --git a/docs/project-management-guide/README.md b/docs/project-management-guide/README.md index baec1318733c..171fb283b3ea 100644 --- a/docs/project-management-guide/README.md +++ b/docs/project-management-guide/README.md @@ -22,8 +22,8 @@ Additional information and hands-on application guidelines for using OpenProject | ------------------------------------------------------------ | ------------------------------------------------------------ | | [1 An introduction to the PM² guide](1-introduction) | Explains the purpose and audience of the methodology. It introduces PM² as a light, practical, and adaptable approach suitable for various project types, developed by the European Commission. It outlines the structure of the guide and how to use it. | | [2 Project management](2-project-management) | Provides the general project management concepts on which PM² is built. It covers the definition of projects, their environment, key success factors, and essential project management competencies (knowledge, skills, and mindsets). | -| [3 Overview of the PM² methodology](3-overview-pm2) | Presents the House of PM² framework and explains its four pillars: Governance, Lifecycle, Processes, and Artefacts, all supported by PM² Mindsets. It introduces the four project lifecycle phases (Initiating, Planning, Executing, Closing) and explains tailoring to different project contexts. | -| [4 Project organisation and roles](4-project-organisation-and-roles) | Describes the PM² governance model in detail, including the main project roles and responsibilities: e.g., the Project Steering Committee, Project Owner, Business Manager, Project Manager, and Project Core Team. It explains reporting lines, decision-making, and escalation mechanisms. | +| [3 Overview of the PM² methodology](3-overview-pm2) | Presents the House of PM² framework and explains its four pillars: Governance, Lifecycle, Processes, and Artifacts, all supported by PM² Mindsets. It introduces the four project lifecycle phases (Initiating, Planning, Executing, Closing) and explains tailoring to different project contexts. | +| [4 Project organization and roles](4-project-organisation-and-roles) | Describes the PM² governance model in detail, including the main project roles and responsibilities: e.g., the Project Steering Committee, Project Owner, Business Manager, Project Manager, and Project Core Team. It explains reporting lines, decision-making, and escalation mechanisms. | | [5 Initiating phase](5-initiating-phase) | Defines the activities needed to start a project. This includes preparing the Project Initiation Request (PIR), developing the Business Case, drafting the Project Charter, and obtaining formal approval through the Request for Planning (RfP) phase gate. | | [6 Planning phase](6-planning-phase) | Focuses on defining how the project will be executed and controlled. It covers developing the Project Handbook and detailed management plans (scope, schedule, cost, risk, stakeholder, etc.), creating the Work Breakdown Structure (WBS), scheduling, resource planning, and getting approval through the Request for Execution (RfE) gate. | | [7 Executing phase](7-executing-phase) | Covers carrying out the project work according to the plan. It includes team coordination, quality assurance, stakeholder communication, performance monitoring, and progress reporting. Formal approval to move forward is given through the Request for Closing (RfC) gate once work is complete. | @@ -32,10 +32,10 @@ Additional information and hands-on application guidelines for using OpenProject **Disclaimer** -Reproduction and reuse is authorised provided the source is acknowledged. +Reproduction and reuse is authorized provided the source is acknowledged. Document licensed under CC BY 4.0 license (https://creativecommons.org/licenses/by/4.0/). The Commission's reuse policy is implemented by Commission Decision 2011/833/EU of 12 December 2011 on the reuse of Commission documents (OJ L 330, 14.12.2011, p. 39 - https://eur-lex.europa.eu/eli/dec/2011/833/oj). The PM² logo is the property of the European Union and may not be registered as a trademark or otherwise, nor used separately from these documents. -Neither the publication nor the logo can be used in a way which suggests endorsement of an external organisation by the European Union. +Neither the publication nor the logo can be used in a way which suggests endorsement of an external organization by the European Union. diff --git a/docs/project-management-guide/appendices/README.md b/docs/project-management-guide/appendices/README.md index 72b46a973528..75df26004dff 100644 --- a/docs/project-management-guide/appendices/README.md +++ b/docs/project-management-guide/appendices/README.md @@ -122,18 +122,18 @@ Former CoEPM² members who recently moved on to other assignments: ### B. 1 Requirements management plan -The Requirements Management Plan defines and documents the requirements management approach, process steps and responsibilities, as well as tools, techniques and artefacts that will be used. Note that requirements themselves are documented and managed in separate artefact(s) (e.g. requirements matrix). +The Requirements Management Plan defines and documents the requirements management approach, process steps and responsibilities, as well as tools, techniques and artifacts that will be used. Note that requirements themselves are documented and managed in separate artifact(s) (e.g. requirements matrix). Effective requirements management is a critical success factor for projects, as requirements are the starting point for all project work, and principally affect the project risk, duration and budget. Requirements are traditionally defined in detail early in the project lifecycle. However, depending on the type, scope and chosen project strategy, the requirements management process may need to accommodate a more agile definition and elaboration of requirements, thereby allowing for frequent and less formal requirements management cycles. -The Requirements Management Plan can be tailored and customised to the project's needs. In the absence of a more specialised role, the Project Manager (PM) is responsible for executing the process from project initiation until all requirements have been implemented and validated. +The Requirements Management Plan can be tailored and customized to the project's needs. In the absence of a more specialized role, the Project Manager (PM) is responsible for executing the process from project initiation until all requirements have been implemented and validated. | Key participants | Description | | :-- | :-- | -| Project Manager (PM) | Prepares this artefact. | -| Business Manager (BM) | Consulted for the tailoring and elaboration of this artefact. | +| Project Manager (PM) | Prepares this artifact. | +| Business Manager (BM) | Consulted for the tailoring and elaboration of this artifact. | **Inputs** @@ -143,14 +143,14 @@ The Requirements Management Plan can be tailored and customised to the project's **Steps** -1. Check if a requirements management process already exists at the organisational level. +1. Check if a requirements management process already exists at the organizational level. 2. Tailor the Requirements Management Plan to the project's needs. Create it as a standalone document or as a section within the Project Handbook. 3. Define what a requirement is, and what the possible states of its lifecycle are. 4. Ensure that the requirements management process is aligned with the change management process, and that requirement changes are traced to the project's deliverables and activities. 5. Define the roles and responsibilities for each process step. Define clearly who is responsible for approving and validating the implementation of new requirements. -6. Define the tools and techniques that will be used to identify, evaluate, prioritise and manage requirements (e.g. brainstorming sessions, prototyping, MoSCoW, etc.). +6. Define the tools and techniques that will be used to identify, evaluate, prioritize and manage requirements (e.g. brainstorming sessions, prototyping, MoSCoW, etc.). 7. Define the possible formats of representation of requirements for the project (e.g. text, use cases, diagrams, user stories, etc.) -8. Define the artefacts and repositories used for the documentation and management of the requirements (e.g. specification document or requirements traceability matrix). +8. Define the artifacts and repositories used for the documentation and management of the requirements (e.g. specification document or requirements traceability matrix). 9. Define the requirements validation process and make sure it is aligned with the overall deliverables acceptance process. 10. Ensure that the requirements management process is communicated to the project stakeholders. @@ -158,17 +158,17 @@ The Requirements Management Plan can be tailored and customised to the project's | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | | Requirements Management Plan | | I | I | A | C | C | I | R | S | -| Related Artefacts | Initiating | Planning | | Executing | | Monitor \& Control | | Closing | +| Related Artifacts | Initiating | Planning | | Executing | | Monitor \& Control | | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | | Requirements
    Management | Project Charter | Project Handbook
    Requirements
    Management Plan
    Deliverables
    Acceptance Plan | | Change
    Requests | Requirements Document(s)
    Project Work Plan
    Project Logs | | Project-End Report | | -**Artefact** +**Artifact** - Requirements Management Plan ### B. 2 Project change management plan -The Project Change Management Plan defines and documents the change process for a project. It defines the activities, roles and responsibilities related to identifying, documenting, assessing, approving, prioritising, implementing, controlling, and communicating requested project changes. +The Project Change Management Plan defines and documents the change process for a project. It defines the activities, roles and responsibilities related to identifying, documenting, assessing, approving, prioritizing, implementing, controlling, and communicating requested project changes. Project change management brings transparency, accountability and traceability to all project changes implemented after the project scope and project plans have been baselined. The escalation procedure ensures that changes with a significant impact on project performance are properly assessed and approved by the appropriate level of authority. The Project Change Log is used to document requested changes and trace all related decisions and planned actions. @@ -176,7 +176,7 @@ Project change management brings transparency, accountability and traceability t | :-- | :-- | | Project Manager (PM) | Prepares the Project Change Management Plan. | | Project Owner (PO) | Approves the Project Change Management Plan. | -| Business Manager (BM) | Consulted for the elaboration of this artefact. | +| Business Manager (BM) | Consulted for the elaboration of this artifact. | **Inputs** @@ -186,13 +186,13 @@ Project change management brings transparency, accountability and traceability t **Steps** -1. Check if there is a pre-existing project change management process at the organisational level. +1. Check if there is a pre-existing project change management process at the organizational level. 2. Tailor the Project Change Management Plan to the project's needs (e.g. define different steps depending on the type of change, its urgency or impact). Create it as a standalone document or as a section within the Project Handbook. 3. Ensure that there is no duplication of information contained in other management plans or the Project Handbook (e.g. the escalation procedure). 4. Define what is considered to be a change for the project, as well as the possible types of changes. -5. Define the artefacts and the tools and techniques that will be used to identify and assess changes (e.g. the Change Request Form or the Project Change Log). +5. Define the artifacts and the tools and techniques that will be used to identify and assess changes (e.g. the Change Request Form or the Project Change Log). 6. Define who is responsible for approving changes at the various impact levels, and how this decision is communicated to the rest of the team. -7. Tailor the Change Log (if needed) and customise it to reflect any customisations of the Project Change Management Plan (e.g. scales of urgency, change impact and priority). +7. Tailor the Change Log (if needed) and customize it to reflect any customizations of the Project Change Management Plan (e.g. scales of urgency, change impact and priority). 8. Describe the change monitoring and control activities, their frequency and supporting tools and techniques, e.g. review of changes at a predefined frequency based on the Change Log. 9. Ensure that the change management process is communicated to the project team and stakeholders. @@ -200,11 +200,11 @@ Project change management brings transparency, accountability and traceability t | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | | Project Change Management Plan | | I | I | A | C | I | I | R | I | -| Related artefacts | Initiating | Planning | Executing | Monitor \& control | Closing | +| Related artifacts | Initiating | Planning | Executing | Monitor \& control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Project Change Management | Project
    Charter | Project Handbook Project Change Management Plan | Project Reports Change Requests | Change Log
    Project Logs
    Project Work Plan | Project-End Report | -**Artefact** +**Artifact** - Project Change Management Plan - Change Log (setup) @@ -218,7 +218,7 @@ Risk management brings visibility to risks and accountability as to how they are | Key Participants | Description | | :-- | :-- | | Project Manager (PM) | Prepares the Risk Management Plan. | -| Business Manager (BM) | Consulted for the elaboration of this artefact. | +| Business Manager (BM) | Consulted for the elaboration of this artifact. | | Project Owner (PO) | Approves the Risk Management Plan. | **Inputs** @@ -229,13 +229,13 @@ Risk management brings visibility to risks and accountability as to how they are **Steps** -1. Check if there is a pre-existing risk management process at the organisational level. +1. Check if there is a pre-existing risk management process at the organizational level. 2. Tailor the Risk Management Plan to the project's needs (e.g. delete/add steps or activities, expand on or change the activities' description or related responsibilities, etc.). Create it as a standalone document or as a section within the Project Handbook. 3. Ensure that there is no duplication of information contained in other management plans or the Project Handbook (e.g. the escalation procedure). 4. Define the tools and techniques that will be used to identify, assess and monitor risks (e.g. brainstorming, Risks Database, Risk Breakdown Structure, Likelihood-Impact Matrix, Decision Tree Analysis, the Risk Log, etc.). -5. Customise the scales used for assessing risks (i.e. likelihood, impact and overall risk level). +5. Customize the scales used for assessing risks (i.e. likelihood, impact and overall risk level). 6. Determine (with the involvement of key stakeholders) the project's risk appetite (the amount of risk that stakeholders are prepared to accept). -7. Decide on how frequently the Risk Log should be reassessed, considering both project and organisational conditions and policies. +7. Decide on how frequently the Risk Log should be reassessed, considering both project and organizational conditions and policies. 8. Specify the escalation and communication procedures for risks that need special attention (i.e. which project stakeholders need to be informed if critical risks are triggered). 9. Identify the applicable risk response strategies both for identified threats and opportunities (i.e. avoid, transfer/share, reduce, accept or exploit, enhance, share and accept respectively). 10. Determine the level of detail with which risk response actions should be described in the Risk Log (e.g. action description, action owner, planned effort, etc.). Note that activities that need considerable effort should be included in the Project Work Plan. @@ -245,11 +245,11 @@ Risk management brings visibility to risks and accountability as to how they are | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | | Risk Management Plan | I | C | A | C | I | I | R | I | -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Risk Management | Project
    Charter | Project Handbook Risk Management Plan | Project
    Reports | Risk Log
    Project Logs | Project-End Report | -**Artefact** +**Artifact** - Risk Management Plan - Risk Log @@ -265,7 +265,7 @@ An Issue Log is used to document the identification, evaluation and assignment o | Key participants | Description | | :-- | :-- | | Project Manager (PM) | Prepares the Issue Management Plan. | -| Business Manager (BM) | Consulted for the elaboration of this artefact. | +| Business Manager (BM) | Consulted for the elaboration of this artifact. | **Inputs** @@ -275,13 +275,13 @@ An Issue Log is used to document the identification, evaluation and assignment o **Steps** -1. Check if there is a pre-existing issue management process at the organisational level. +1. Check if there is a pre-existing issue management process at the organizational level. 2. Tailor the Issue Management Plan to the project's needs. Create it as a standalone document or as a section within the Project Handbook. 3. Ensure that there is no duplication of information contained in other management plans or the Project Handbook (e.g. the escalation procedure). -4. Define what will be considered an issue for the project and customise the possible issue categories relevant to the project. -5. Define all artefacts, tools and techniques that will be used to identify, assess, assign, resolve and monitor issues (e.g. the Issue Log, root cause analysis, etc.). +4. Define what will be considered an issue for the project and customize the possible issue categories relevant to the project. +5. Define all artifacts, tools and techniques that will be used to identify, assess, assign, resolve and monitor issues (e.g. the Issue Log, root cause analysis, etc.). 6. Specify how new issues can be identified and their status communicated, and when new and open issues (and pending decisions) can be discussed (e.g. in project Status Meetings). -7. Customise the Issue Log to reflect any changes to the scales of urgency, impact and priority. +7. Customize the Issue Log to reflect any changes to the scales of urgency, impact and priority. 8. Define which issues (depending on their category, urgency and impact) can be handled at the (Project) Management Layer and which ones need to be escalated. 9. Describe the issue control activities, their frequency, and supporting tools and techniques (e.g. a review of issues in project Status Meetings based on the Issue Log or Project Status Reports). 10. Define how issues will be linked to their source, to related decisions, actions, risks and changes. @@ -292,11 +292,11 @@ An Issue Log is used to document the identification, evaluation and assignment o | :-- | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | | Issue Management Plan | I | I | A | C | C | I | R | C | -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Issue Management | Project
    Charter | Project Handbook
    Issue Management Plan | Project
    Reports | Issue Log
    Decision Log | Project-End Report | -**Artefact** +**Artifact** - Issue Management Plan - Issue Log @@ -308,7 +308,7 @@ The Quality Management Plan defines and documents the project's quality requirem Planning and executing quality assurance and control activities may be seen as a significant investment of time and effort, and therefore the desired balance between the planned quality, cost, time and risk should be carefully evaluated and considered. Appropriate quality metrics should be defined and later used to evaluate the project management quality. All quality-related activities should be well designed and planned. -A configuration management procedure is also documented in the Quality Management Plan. Configuration management helps project teams handle project artefacts and deliverables effectively (i.e. to ensure that the correct versions are delivered, to prevent unauthorised changes and to provide artefact traceability). +A configuration management procedure is also documented in the Quality Management Plan. Configuration management helps project teams handle project artifacts and deliverables effectively (i.e. to ensure that the correct versions are delivered, to prevent unauthorized changes and to provide artifact traceability). | Key Participants | Description | | :-- | :-- | @@ -323,12 +323,12 @@ A configuration management procedure is also documented in the Quality Managemen **Steps** -1. Check if there is a pre-existing quality management process at the organisational level. +1. Check if there is a pre-existing quality management process at the organizational level. 2. Tailor the Quality Management Plan to the project's needs. Create it as a standalone document or as a section within the Project Handbook. 3. Determine the quality management objectives and characteristics by reviewing project deliverables, success criteria, approach and other specific requirements (e.g. security requirements) as described in the Project Charter and Project Handbook. 4. Ensure that there is no duplication of information contained in other management plans or the Project Handbook (e.g. the escalation procedure). 5. Define approval criteria for phase exit reviews or for other key project management milestones. -6. Define all artefacts, and the tools and techniques that will be used for quality planning and quality assurance and control (e.g. the Quality Review Checklist). +6. Define all artifacts, and the tools and techniques that will be used for quality planning and quality assurance and control (e.g. the Quality Review Checklist). 7. Determine the quality assurance and control activities and define their frequency and timetable. Additionally, design metrics and acceptance tolerances for evaluating these activities. 8. Determine if a Project Quality Assurance (PQA) role (or other independent entity) is required to carry out quality assurance activities. 9. Define the roles and responsibilities for the quality process and ensure that these roles are agreed by and communicated to all stakeholders involved. @@ -343,25 +343,25 @@ A configuration management procedure is also documented in the Quality Managemen **Guidelines (specific for configuration management)** - Review the configuration management process set out in the Quality Management Plan and tailor it to the project's needs (e.g. delete or add steps or activities, expand on or change the activities' description, related responsibilities, etc.). -- Define what will be considered to be a configuration item based on project deliverables and artefacts, and identify the attributes of such items. +- Define what will be considered to be a configuration item based on project deliverables and artifacts, and identify the attributes of such items. - Identify who is responsible for changes to the configuration items and for maintaining and controlling their versions and releases. -- Define the artefacts and the tools and techniques that will be used to manage the configuration items. +- Define the artifacts and the tools and techniques that will be used to manage the configuration items. - Depending on the project's complexity, a configuration management log can be used to control changes to the configuration items. - Describe the naming conventions to be used in project documentation, folders and emails. -- Define the structure of project folders and the procedures and rights related to reviewing, changing or updating any project artefacts. Ensure that restricted access and confidentiality rules are correctly implemented. +- Define the structure of project folders and the procedures and rights related to reviewing, changing or updating any project artifacts. Ensure that restricted access and confidentiality rules are correctly implemented. - Define any procedures related to creating copies of project data, retention periods, storage devices and sanitisation/deletion of data (if required). - Ensure that the configuration management procedure is communicated to the project team. -- Key information on configuration management may also be summarised in the Project Handbook. +- Key information on configuration management may also be summarized in the Project Handbook. | RAM (RASCI) | | AGB | PSC | PO | BM | BIG | SP | PM | PCT | | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | | Quality Management Plan | | I | A | C | C | C | C | R | C | -| Related Artefacts | Initiating | Planning | Executing | Monitor \& Control | Closing | +| Related Artifacts | Initiating | Planning | Executing | Monitor \& Control | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | | Quality Management | Project
    Charter | Project Handbook
    Quality
    Management Plan | Quality Review
    Reports
    Audit Reports | Quality Review Checklist Project Logs Phase-exit Review Checklist | Project-End Report
    Project Acceptance
    Note | -**Artefact** +**Artifact** - Quality Management Plan - Quality Review Checklist @@ -387,13 +387,13 @@ The Communications Management Plan defines and documents communication activitie **Steps** -1. Review the guidelines set out in the Communications Management Plan template to get a better understanding of how to tailor and customise it . +1. Review the guidelines set out in the Communications Management Plan template to get a better understanding of how to tailor and customize it . 2. Ensure that there is no duplication of communication activities described in other management plans such as the Quality Management Plan, the Risk Management Plan, etc. 3. If certain processes are already described in the Project Handbook (e.g. the escalation process), reference them to avoid duplication and simply document any changes. 4. Identify project stakeholder groups based on the Project Stakeholder Matrix. -5. When determining the strategy for each communication activity, consider the interests and influence of both internal and external organisations to the project. +5. When determining the strategy for each communication activity, consider the interests and influence of both internal and external organizations to the project. 6. For each target group, determine what information needs to be communicated, and the purpose of the communication. -7. Define all artefacts (e.g. Project Reports) and other means to collect, analyse and distribute project information and manage stakeholders' expectations. +7. Define all artifacts (e.g. Project Reports) and other means to collect, analyze and distribute project information and manage stakeholders' expectations. 8. Determine the frequency of the communication activities, their format and the media to be used for the communications (e.g. reports, presentations, meetings, emails, calls). 9. Determine who will be responsible for each communication activity and describe the expected results. 10. Ensure that the communication management plan is communicated to the project stakeholders. @@ -402,11 +402,11 @@ The Communications Management Plan defines and documents communication activitie | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | | Communications Management Plan | | I | I | A | S | C | I | R | C | -| Related artefacts | Initiating | Planning | | Executing | | Monitor \& control | | Closing | +| Related artifacts | Initiating | Planning | | Executing | | Monitor \& control | | Closing | | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | | Communications
    Management | Project
    Charter | Project Stakeholder
    Matrix
    Communications
    Management Plan | | Project
    Reports | | Project Logs | | Project-End
    Report | -**Artefact** +**Artifact** - Communications Management Plan @@ -415,7 +415,7 @@ The Communications Management Plan defines and documents communication activitie | Change Identification and Description | | | :--: | :--: | | ID | The change identifier. | -| Category | Categorises the change. | +| Category | Categorizes the change. | | Title | A short title for the requested change. | | Description | A more detailed description of the requested change and the impact of not implementing the change. | | Status | The status of the change can be any of the following:
    Submitted: This is the initial status. Use this while the requested change is still being specified.
    Assessing: Use this status to initiate an assessment.
    Waiting for approval: Use this to initiate approval. Before applying this status, ensure that the investigation is complete, and the estimates shown are correct.
    Approved: This status is set once the change has been approved, as proposed, or modified
    Rejected: This status is set if the change was rejected.
    Postponed: This status is set if the change is postponed indefinitely.
    Merged: This status indicates that the change has been merged into some other change, so it is no longer being actively handled. Merging is common when there are many changes.
    Implemented: This status indicates that the work implementing this change has been incorporated into the Project Work Plan. | @@ -440,7 +440,7 @@ The Communications Management Plan defines and documents communication activitie | Risk Identification and Description | | | :--: | :--: | | ID | The risk identifier. | -| Category | Risk category related to the area affected by the risk (e.g. business, IT, people \& organisation, external or legal). | +| Category | Risk category related to the area affected by the risk (e.g. business, IT, people \& organization, external or legal). | | Title | A short title for the risk. | | Description | A structured formulation of the opportunity or threat in the form of (route) Cause - Risk -Effect, along with potential risk inter-dependencies. | | Status | The risk status can be any of the following:
    Proposed: This is the initial status. Use this while the risk is still being specified.
    Assessing: Use this status to initiate an assessment.
    Waiting for Approval: Use this to request approval. Before applying this status, make sure the assessment is complete and the estimates are reliable.
    Approved: This status is set once the risk possibility has been accepted.
    Rejected: This status is set if the risk was rejected as not relevant.
    Closed: This status is set once the risk has been managed (e.g. mitigation | @@ -463,7 +463,7 @@ The Communications Management Plan defines and documents communication activitie | Issue Identification and Description | | | :--: | :--: | | ID | The issue identifier. | -| Category | Issue category related to the area affected by the issue (e.g. business, IT, people \& organisation, external or legal). | +| Category | Issue category related to the area affected by the issue (e.g. business, IT, people \& organization, external or legal). | | Title | Short title for the issue. | | Description | A description of the issue and its impact. | | Status | The issue status can be any of the following:
    Open: The issue has been identified and requires attention and, if possible, a resolution.
    Postponed: This status is set if resolving the issue is postponed due to other priorities.
    Resolved: This status indicates that all necessary actions are completed, and the issue is resolved.
    Closed: This status indicates that all work is completed and verified. The issue can then be marked as closed. | @@ -484,7 +484,7 @@ The Communications Management Plan defines and documents communication activitie | Decision Identification and Description | | | :-- | :-- | | ID | The decision identifier. | -| Category | Decision category related to the area affected by the decision (e.g. business,
    IT, people \& organisation, external or legal). | +| Category | Decision category related to the area affected by the decision (e.g. business,
    IT, people \& organization, external or legal). | | Title | Short title for the decision. | | Description | A description of the decision's details and impact, if applicable. | | Identified by | The name of the person who identified the need for a decision. | @@ -500,19 +500,19 @@ The Communications Management Plan defines and documents communication activitie ## Appendix C: Project management tools \& techniques -This section introduces a number of commonly used Project Management Tools \& Techniques useful for dealing with various project management challenges. Each Tool \& Technique is summarised in a few paragraphs providing a simple and high-level overview of that tool or technique. +This section introduces a number of commonly used Project Management Tools \& Techniques useful for dealing with various project management challenges. Each Tool \& Technique is summarized in a few paragraphs providing a simple and high-level overview of that tool or technique. Note that the set of tools presented is not an exhaustive list of Project Management Tools \& Techniques available. Relevant sources for further reading and exploration are also presented at the end of this section. ### C. 1 PESTEL Analysis -The PESTEL Analysis is used to understand how the environment might impact a project or an objective. PESTEL stands for: Political, Economic, Social, Technological, Environmental and Legal. A PESTEL analysis helps identify the external factors that influence an organisation, and therefore, could have an impact on the objectives, planning or execution of projects. +The PESTEL Analysis is used to understand how the environment might impact a project or an objective. PESTEL stands for: Political, Economic, Social, Technological, Environmental and Legal. A PESTEL analysis helps identify the external factors that influence an organization, and therefore, could have an impact on the objectives, planning or execution of projects. -This type of analysis is particularly important in the context of business justification and risk management and will feed the process of designing a plan comprehensive enough to identify and tackle potential risk scenarios (threats/opportunities) arising from outside the organisation or project. +This type of analysis is particularly important in the context of business justification and risk management and will feed the process of designing a plan comprehensive enough to identify and tackle potential risk scenarios (threats/opportunities) arising from outside the organization or project. ### C. 2 Make or Buy Analysis -A Make or Buy Analysis helps the organisation to take an informed decision about what to outsource and what not to outsource. Portfolio managers and project sponsors are often faced with the dilemma to make or buy, considering the availability and skills of resources at hand. +A Make or Buy Analysis helps the organization to take an informed decision about what to outsource and what not to outsource. Portfolio managers and project sponsors are often faced with the dilemma to make or buy, considering the availability and skills of resources at hand. The various factors to be considered for a Make or Buy Analysis include cost comparison, technology and business processes, supplier-related information and support systems. @@ -520,7 +520,7 @@ Potential reasons for a make decision include cost effectiveness, intellectual p ### C. 3 Stakeholder Interest/Influence Matrix (SIIM) -This technique is used to facilitate and document the analysis of the interest and influence of each stakeholder in the project. It is of utmost importance to know the stakeholders and their relevance for the project in order to identify project champions and possible detractors. As the document makes reference to people within your organisation, care should be used to keep the information confidential. +This technique is used to facilitate and document the analysis of the interest and influence of each stakeholder in the project. It is of utmost importance to know the stakeholders and their relevance for the project in order to identify project champions and possible detractors. As the document makes reference to people within your organization, care should be used to keep the information confidential. Interest indicates the level of interest a stakeholder has for the project. Interest is measured as the degree of enthusiasm displayed by the stakeholder in support of the project. Stakeholders can be positive, neutral or negative towards the project. @@ -530,19 +530,19 @@ Influence indicates the power the stakeholder has over the planning and implemen The Risk Likelihood/Impact Matrix (sometimes called the Likelihood-Impact Matrix or Risk Matrix) is used in the qualitative assessment of risks, after the project risks have been identified. The matrix is designed as a tool to supplement the risk log or risk register. -The Risk Likelihood/Impact Matrix is based on two criteria: the likelihood that a risk will materialise and the potential impact caused by the risk event. Most commonly five bands are used for each of the dimensions of the matrix: 1=Very low, 2=Low, 3=Medium, 4=High, 5=Very high. +The Risk Likelihood/Impact Matrix is based on two criteria: the likelihood that a risk will materialize and the potential impact caused by the risk event. Most commonly five bands are used for each of the dimensions of the matrix: 1=Very low, 2=Low, 3=Medium, 4=High, 5=Very high. The two factors are then combined by multiplying their values, resulting in the Risk Level. Measured on a relative scale from 1 to 25 , the Risk Level will trigger different risk response strategies. -The cells of the matrix are painted in different colours to indicate the criticality of the risk, typically Green for low-level risks (risk level \<=2), Yellow for medium-level risks (risk level between 3 and 16), and Red for high-level risks (risk level >=20). +The cells of the matrix are painted in different colors to indicate the criticality of the risk, typically Green for low-level risks (risk level \<=2), Yellow for medium-level risks (risk level between 3 and 16), and Red for high-level risks (risk level >=20). -Based on the risk appetite of the organisation, adequate risk-response strategies can be developed for each identified risk. +Based on the risk appetite of the organization, adequate risk-response strategies can be developed for each identified risk. ### C. 5 Work Breakdown Structure (WBS) -A Work Breakdown Structure (WBS) is a hierarchical division of the project into smaller work components that can be used to assign work or to estimate effort and cost. A well-made Work Breakdown Structure (WBS) should be easy to understand, be complete, and should facilitate progress monitoring during execution. Commonly used techniques include breaking down the project by phases or stages, deliverables or outputs, by work packages, or based on the organisation, its departments and business units. +A Work Breakdown Structure (WBS) is a hierarchical division of the project into smaller work components that can be used to assign work or to estimate effort and cost. A well-made Work Breakdown Structure (WBS) should be easy to understand, be complete, and should facilitate progress monitoring during execution. Commonly used techniques include breaking down the project by phases or stages, deliverables or outputs, by work packages, or based on the organization, its departments and business units. -The Work Breakdown Structure (WBS) constitutes a good basis for the Project Manager (PM) in assigning different responsibilities to team members. Each task in the structure can then be further defined: work can be estimated, risks and dependencies can be identified, and resources can be mobilised. +The Work Breakdown Structure (WBS) constitutes a good basis for the Project Manager (PM) in assigning different responsibilities to team members. Each task in the structure can then be further defined: work can be estimated, risks and dependencies can be identified, and resources can be mobilized. ### C. 6 Deliverables Breakdown Structure (DBS) @@ -562,7 +562,7 @@ A high-quality Work Breakdown Structure (WBS) forms the basis for high-quality e The Three-Point Estimate is commonly used, in conjunctions with Network Diagrams, to provide a weighted average of activity duration or cost. It is primarily a quantitative risk assessment technique that makes use of a stochastic approach rather than a deterministic one (e.g. single point estimates). The expected duration/cost and standard deviation of a project's duration or cost is calculated based on three data points, namely an optimistic estimate of duration or cost, a most likely estimate and a pessimistic estimate. These estimates are then weighed to provide a weighted average of the effort, cost or duration. -In addition, these estimates can be used to calculate a standard deviation, to estimate confidence levels of the weighted average per activity, and to build simple statistical models of a task's time and cost. This method can be applied to forecast and mitigate risk and to assign buffers/contingencies to tasks. Nowadays, numerous Project Management Software, can perform automated calculation of the above through modelling and simulation (e.g. by using the Beta-PERT distribution). +In addition, these estimates can be used to calculate a standard deviation, to estimate confidence levels of the weighted average per activity, and to build simple statistical models of a task's time and cost. This method can be applied to forecast and mitigate risk and to assign buffers/contingencies to tasks. Nowadays, numerous Project Management Software, can perform automated calculation of the above through modeling and simulation (e.g. by using the Beta-PERT distribution). Involving experts increases the accuracy of the three-point estimates and reduces the degree of uncertainty of the project. @@ -572,7 +572,7 @@ The decision tree is a visual decision support tool, consisting of nodes and bra In decision tree analysis (primarily being performed during project risk management), the decision tree is principally used in conjunction with the Expected Monetary Value (EMV) where we compute the EMV of -each alternative (branch) and thus select the most favourable one. The decision tree analysis can also be performed by creating a stochastically determined structure and then simulate the outcomes (e.g. through Monte Carlo simulation), in order to derive to probability-based decisions. +each alternative (branch) and thus select the most favorable one. The decision tree analysis can also be performed by creating a stochastically determined structure and then simulate the outcomes (e.g. through Monte Carlo simulation), in order to derive to probability-based decisions. ### C. 10 Project Scheduling @@ -582,11 +582,11 @@ Scheduling can be done for the entire project upfront or for portions thereof, s Once approved, the project schedule is baselined and any further change to the schedule needs to follow the change management process and the corresponding governance arrangements. -### C. 11 Resource Levelling +### C. 11 Resource Leveling -Resource Levelling is a technique used to analyse the unbalanced use of project resources and to resolve conflicts related to resource allocation (i.e. human resources, material or equipment). +Resource Leveling is a technique used to analyze the unbalanced use of project resources and to resolve conflicts related to resource allocation (i.e. human resources, material or equipment). -Resource Levelling focuses on an efficient/optimal resource allocation in order for the project to be completed within the defined timeline. Project Managers (PMs) analyse dependencies between projects or activities to ensure that activities can be executed in a timely manner. Considering the identified constraints, Resource Levelling can be performed. Resource Levelling can for example require the delay of specific tasks until resources are available, via resource reallocation. +Resource Leveling focuses on an efficient/optimal resource allocation in order for the project to be completed within the defined timeline. Project Managers (PMs) analyze dependencies between projects or activities to ensure that activities can be executed in a timely manner. Considering the identified constraints, Resource Leveling can be performed. Resource Leveling can for example require the delay of specific tasks until resources are available, via resource reallocation. ### C. 12 Gantt Charts @@ -596,13 +596,13 @@ A Gantt Chart represents the order in which activities need to be carried out an ### C. 13 Critical Path Method (CPM) -The Critical Path Method (CPM) is a modelling technique that uses a mathematically based algorithm to calculate the total duration of a project. It calculates the longest necessary path (i.e. the longest unavoidable duration) of planned activities from beginning to the end of the project, otherwise known as the critical path of the project. This technique helps to understand which activities have a critical influence on the overall duration of the project. +The Critical Path Method (CPM) is a modeling technique that uses a mathematically based algorithm to calculate the total duration of a project. It calculates the longest necessary path (i.e. the longest unavoidable duration) of planned activities from beginning to the end of the project, otherwise known as the critical path of the project. This technique helps to understand which activities have a critical influence on the overall duration of the project. -Since the critical path represents the longest necessary path of activities, it also represents the shortest possible duration of the project to completion. Based on this information, activities can be prioritised in order to shorten the duration of the critical path by pruning the critical path activities, performing more activities in parallel or adding more resources. +Since the critical path represents the longest necessary path of activities, it also represents the shortest possible duration of the project to completion. Based on this information, activities can be prioritized in order to shorten the duration of the critical path by pruning the critical path activities, performing more activities in parallel or adding more resources. ### C. 14 Critical Chain Method (CCM) -The Critical Chain Method (CCM) is a modelling technique used to plan and schedule a set of activities or projects. It is similar to the Critical Path Method (CPM), but takes into account resources and their levelling, as well as the behaviour of the Project Manager (PM) when estimating the duration of project activities. +The Critical Chain Method (CCM) is a modeling technique used to plan and schedule a set of activities or projects. It is similar to the Critical Path Method (CPM), but takes into account resources and their leveling, as well as the behavior of the Project Manager (PM) when estimating the duration of project activities. The technique is based on the observation that activity time estimates for projects are close to double the time required to complete the activities. Reasons that lead to a delay can include not taking advantage of the early finish of an activity, pacing of the team members to fill the time available for the completion of a task, waiting until the last moment to really focus on the task at hand, etc. @@ -617,13 +617,13 @@ The principal metrics being used are the Planned Value (PV), also known as Budge ### C. 16 Pareto Analysis The Pareto Analysis is a formal technique to identify those issues that cause the majority of problems in a project. The Pareto principle states that generally 80% of the effects come from 20% of the causes (e.g. 80% of costs may be attributed to 20% of activities or 80% of risk effects may arise from just 20% of identified risks). -By focusing on these top issues (the 20%), the Pareto Analysis can be useful for risk or quality management as it helps to focus on those risks or quality issues with the highest impact on a project, therefore facilitating the prioritisation of necessary mitigation or contingency actions. +By focusing on these top issues (the 20%), the Pareto Analysis can be useful for risk or quality management as it helps to focus on those risks or quality issues with the highest impact on a project, therefore facilitating the prioritization of necessary mitigation or contingency actions. ### C. 17 Lessons Learned Capturing Lessons Learned is a way of identifying areas for development/improvement within a project for the purpose of helping similar projects avoid certain pitfalls in the future. Information that can be captured includes Lessons Learned from the management of risks, quality issues, outsourcing or contractor issues, change requests, etc. -The project team can capture ideas through brainstorming sessions, reviewing project reports and logs, sending project questionnaires, etc., during the lifecycle of the project. The Project Manager (PM) will group and prioritise Lessons Learned in order to understand key potential improvement areas. +The project team can capture ideas through brainstorming sessions, reviewing project reports and logs, sending project questionnaires, etc., during the lifecycle of the project. The Project Manager (PM) will group and prioritize Lessons Learned in order to understand key potential improvement areas. To avoid making the same mistakes twice, Lessons Learned should be shared with other project managers. In some cases, Lessons Learned can lead to process improvements, enhanced checklists and templates, or more effective training courses. @@ -633,25 +633,25 @@ To avoid making the same mistakes twice, Lessons Learned should be shared with o #### D.1.1 PM² and Agile Management -PM² recognises the complex and uncertain nature of many types of projects and the positive contribution of the Agile way of thinking to their effective management. +PM² recognizes the complex and uncertain nature of many types of projects and the positive contribution of the Agile way of thinking to their effective management. -Agile approaches face various challenges, which grow with the size of the organisations in which they are applied. In the case of many organisations, these challenges include coordination between Agile and nonAgile teams, compliance with various organisational governance and audit requirements, and organisational architecture and interoperability constraints. +Agile approaches face various challenges, which grow with the size of the organizations in which they are applied. In the case of many organizations, these challenges include coordination between Agile and nonAgile teams, compliance with various organizational governance and audit requirements, and organizational architecture and interoperability constraints. ![Fig D. 1 From project phases to daily cycles](d.01.png) -The Agile extension to PM² incorporates Agile into the overall PM² framework and creates the foundations for moving towards increased project management and organisational agility. It helps project teams achieve the desired level of agility while accommodating tight procurement and audit requirements, coordination with the programme and portfolio levels, and collaboration with other projects, contractors, other organisational units and even external organisations. +The Agile extension to PM² incorporates Agile into the overall PM² framework and creates the foundations for moving towards increased project management and organizational agility. It helps project teams achieve the desired level of agility while accommodating tight procurement and audit requirements, coordination with the programme and portfolio levels, and collaboration with other projects, contractors, other organizational units and even external organizations. **The Agile extension to PM² provides (for IT projects):** - Agile roles \& responsibilities (as an extension to the PM² governance). - integration with the overall PM² project lifecycle. -- a set of suggested Agile PM² Artefacts (as an extension to the PM² Artefacts). +- a set of suggested Agile PM² Artifacts (as an extension to the PM² Artifacts). -![Fig D. 2 The positioning of Agile PM² within an organisation](d.02.png) +![Fig D. 2 The positioning of Agile PM² within an organization](d.02.png) -Documenting the work planned and performed by the Agile teams is critical to increasing transparency and coordination between the different layers of the PM² project organisation (i.e. between the Directing, Managing and Performing layers). +Documenting the work planned and performed by the Agile teams is critical to increasing transparency and coordination between the different layers of the PM² project organization (i.e. between the Directing, Managing and Performing layers). -A set of artefacts supports the use of Agile PM². These artefacts capture and document information related to the management approach, to specific (implementation) activities, milestones, issues and progress reporting. These artefacts are grouped in three categories: Agile-Specific Artefacts, Coordination \& Reporting Artefacts, and Project Governance Artefacts. -![Fig D. 3 Agile PM² Artefacts Landscape](d.03.png) +A set of artifacts supports the use of Agile PM². These artifacts capture and document information related to the management approach, to specific (implementation) activities, milestones, issues and progress reporting. These artifacts are grouped in three categories: Agile-Specific Artifacts, Coordination \& Reporting Artifacts, and Project Governance Artifacts. +![Fig D. 3 Agile PM² Artifacts Landscape](d.03.png) #### D.1.2 PM² Programme Management (PgM²) @@ -659,27 +659,27 @@ A programme is a collection of projects aimed towards a common goal which are ma Programmes may also include work outside the scope of the discrete projects in the programme. Programme management is the process of applying knowledge, skills, and actions to a programme to achieve its objectives and benefits. -The programme management layer interacts with the project management layer in that it initiates and coordinates the projects within the programme. The programme itself is initiated from the portfolio management layer within the organisation. +The programme management layer interacts with the project management layer in that it initiates and coordinates the projects within the programme. The programme itself is initiated from the portfolio management layer within the organization. ![Fig D. 4 Relationships between strategy, project, programme, portfolio and operations](d.04.png) **Programme Lifecycle** A programme has a defined start and end during which all programme activities are performed, and the projects are delivered. The PM² programme lifecycle has four phases, which are similar but distinct to the PM² project lifecycle: The Initiating Phase, the Planning Phase, the Executing Phase and the Closing Phase. Throughout the whole life of the programme Monitor \& Control activities are performed. -The Executing Phase can also contain several Stages, each one being linked to a major achievement in terms of programme outcomes, which enables the realisation of the benefits. +The Executing Phase can also contain several Stages, each one being linked to a major achievement in terms of programme outcomes, which enables the realization of the benefits. -The typical programme management activities performed during each phase go hand-in-hand with a number of programme artefacts. -![Fig D. 5 The PM² Programme Lifecycle and Artefacts Landscape](d.05.png) +The typical programme management activities performed during each phase go hand-in-hand with a number of programme artifacts. +![Fig D. 5 The PM² Programme Lifecycle and Artifacts Landscape](d.05.png) -**Programme Organisation** +**Programme Organization** -![Fig D. 6 The PM²-Programme organisation](d.06.png) +![Fig D. 6 The PM²-Programme organization](d.06.png) The Programme Owner (PgO) is accountable for the programme's success, whereas the day-to-day management of the programme is delegated to the Programme Manager (PgM), whose focus is to achieve the programme outcomes. -The Programme Business Manager (PgBM) represents the Programme Owner (PgO) on a daily basis within the programme and collaborates closely with the Programme Manager (PgM). The focus of this role is to realise the programme benefits, enabled by the programme outcomes. +The Programme Business Manager (PgBM) represents the Programme Owner (PgO) on a daily basis within the programme and collaborates closely with the Programme Manager (PgM). The focus of this role is to realize the programme benefits, enabled by the programme outcomes. -The Programme Steering Committee (PgSC) comprises the Programme Owner (PgO), Programme Business Manager (PgBM) and Programme Manager (PgM). Other expert roles can participate as needed. The Programme Steering Committee (PgSC) is responsible for realising the programme's objectives and benefits. +The Programme Steering Committee (PgSC) comprises the Programme Owner (PgO), Programme Business Manager (PgBM) and Programme Manager (PgM). Other expert roles can participate as needed. The Programme Steering Committee (PgSC) is responsible for realizing the programme's objectives and benefits. A programme can also have a temporary Programme Support Team (PgST) to provide administrative assistance to the programme and its component projects. @@ -687,31 +687,31 @@ A programme can also have a temporary Programme Support Team (PgST) to provide a A Project Portfolio is a collection of projects, programmes and other activities which are grouped together to facilitate better control over their financial resources and to support their effective management in terms of meeting strategic objectives. The projects or programmes in the portfolio are not necessarily related or inter-dependent. From a strategic point of view, portfolios are higher-level structures than programmes and projects. It is at the portfolio level that investment decisions are made, priorities are identified, and resources are allocated. -It is very important for people involved in project definition and management to understand the differences between, and specific management requirements of, projects, programmes and portfolios. They should also be able to define or position their work at the right level (i.e. know if their work would be better managed as a programme or a network of projects), while always being aware of the management and organisational context of their work. +It is very important for people involved in project definition and management to understand the differences between, and specific management requirements of, projects, programmes and portfolios. They should also be able to define or position their work at the right level (i.e. know if their work would be better managed as a programme or a network of projects), while always being aware of the management and organizational context of their work. -The PM² Portfolio management process encompasses a range of activities, which are organised in four groups. +The PM² Portfolio management process encompasses a range of activities, which are organized in four groups. ##### 1. Portfolio Framework Definition -Defines the way the organisation will address portfolio management by delineating the portfolio structure, the governance bodies and their responsibilities, together with the necessary processes. +Defines the way the organization will address portfolio management by delineating the portfolio structure, the governance bodies and their responsibilities, together with the necessary processes. ##### 2. Portfolio Composition -Is the process containing the activities to evaluate portfolio candidates, make investment decisions and allocate resources. These are activities that are regularly performed depending on the needs of the organisation. +Is the process containing the activities to evaluate portfolio candidates, make investment decisions and allocate resources. These are activities that are regularly performed depending on the needs of the organization. -##### 3. Portfolio Realisation +##### 3. Portfolio Realization -Is the continuous process in which the authorised programmes and projects are managed towards realising their objectives. Although programmes and projects are temporary endeavours, the portfolio activities are performed continuously until the portfolio is closed. +Is the continuous process in which the authorized programmes and projects are managed towards realizing their objectives. Although programmes and projects are temporary endeavors, the portfolio activities are performed continuously until the portfolio is closed. #### 4. Stakeholder Management \& Communication -Is the continuous process of analysing and interacting with the different stakeholders to ensure their effective involvement in the composition and realisation of the portfolio's objectives. +Is the continuous process of analyzing and interacting with the different stakeholders to ensure their effective involvement in the composition and realization of the portfolio's objectives. ![Fig D. 7 PM² Portfolio Management Process Model](d.07.png) -The Portfolio Composition process feeds the continuous processes of Portfolio Realisation with new portfolio components (i.e. programmes or projects), the progress and results of which are communicated by executing the Portfolio Communication \& Stakeholder Management process. The characteristics and governance of the portfolio, as well as the activities of the portfolio management processes and the artefacts produced are defined by the Portfolio Framework. +The Portfolio Composition process feeds the continuous processes of Portfolio Realization with new portfolio components (i.e. programmes or projects), the progress and results of which are communicated by executing the Portfolio Communication \& Stakeholder Management process. The characteristics and governance of the portfolio, as well as the activities of the portfolio management processes and the artifacts produced are defined by the Portfolio Framework. -An overarching view of the organisational management of portfolios, programmes and projects is illustrated in the following diagram. -![Fig D. 8 High-level representation of the Management Layers, Activities and Artefacts](d.08.png) +An overarching view of the organizational management of portfolios, programmes and projects is illustrated in the following diagram. +![Fig D. 8 High-level representation of the Management Layers, Activities and Artifacts](d.08.png) The Governance Structure of the PM² Portfolio Management is shown below. ![Fig D. 9 PM² Project Portfolio Governance](d.09.png) @@ -722,19 +722,19 @@ The following sections present project management considerations which are more #### D.2.1 Sustainability Considerations in Project Management -The concept of sustainability has evolved from a noble aspiration to an imperative for organisations and projects. In recognition of its profound global significance, the European Commission has been at the forefront of initiatives to foster a sustainable economy. The European Green Deal underscores the need for an economic system that nurtures growth while safeguarding our planet and improving the lives of citizens and future generations. +The concept of sustainability has evolved from a noble aspiration to an imperative for organizations and projects. In recognition of its profound global significance, the European Commission has been at the forefront of initiatives to foster a sustainable economy. The European Green Deal underscores the need for an economic system that nurtures growth while safeguarding our planet and improving the lives of citizens and future generations. Sustainability encompasses more than just environmental stewardship; it encompasses the intricate interplay between economic, environmental, and social well-being. It calls for a holistic approach that goes beyond mitigating harm and instead focuses on creating lasting positive impacts on the world we inhabit. -As organisations and projects seek to incorporate sustainability into their core, sustainability considerations become a major factor in the way public and private organisations define, approve, plan, and manage projects, and their results. +As organizations and projects seek to incorporate sustainability into their core, sustainability considerations become a major factor in the way public and private organizations define, approve, plan, and manage projects, and their results. -As a result, project management practices should inspire and empower organisations, project managers, and project teams, to understand what sustainability in the context of projects is, but also to equip them with the practical and actionable guidelines and tools that will enable them to seamlessly integrate sustainability into their project management, fostering a more sustainable, prosperous future for all. +As a result, project management practices should inspire and empower organizations, project managers, and project teams, to understand what sustainability in the context of projects is, but also to equip them with the practical and actionable guidelines and tools that will enable them to seamlessly integrate sustainability into their project management, fostering a more sustainable, prosperous future for all. #### D.2.2 Data Protection Considerations in Project Management The European Union's General Data Protection Regulation (GDPR) stands as a significant framework for safeguarding personal data and the privacy rights of individuals. It establishes principles of data protection, emphasizing fairness, transparency, and accountability in data processing. -To attain data protection by design and by default, organisations and project teams must prioritise adherence to fundamental Data Protection principles. These encompass the critical aspects of Lawfulness, Fairness, and Transparency, Accuracy, Purpose Limitation, Data Minimization, Storage Limitation, and Data Security, including Integrity and Confidentiality. +To attain data protection by design and by default, organizations and project teams must prioritize adherence to fundamental Data Protection principles. These encompass the critical aspects of Lawfulness, Fairness, and Transparency, Accuracy, Purpose Limitation, Data Minimization, Storage Limitation, and Data Security, including Integrity and Confidentiality. In essence, these principles mandate that all personal data be processed in a manner that is both legal and equitable, with transparency toward the data subject. This entails acquiring explicit consent, diligently informing data subjects about data processing activities, and ensuring fairness throughout data treatment. Personal data collection is confined to precise, legitimate purposes, preventing any usage beyond the original data collection scope. Likewise, data collection and processing are restricted to the minimum necessary for the intended purposes, preventing unwarranted data accumulation and preserving data relevance. Furthermore, personal data must be maintained for accuracy and updated when necessary, guarding against the usage of outdated or erroneous data. The storage of personal data should not exceed the period required for its original purpose, averting indefinite data retention and facilitating timely data deletion when no longer necessary. Lastly, stringent data security measures are essential, encompassing protection against unauthorized access, disclosure, alterations, or destruction, safeguarding both the integrity and confidentiality of the data. @@ -742,27 +742,27 @@ As project teams grapple with the intricacies of data protection and privacy reg #### D.2.3 IT Security Considerations in Project Management -The European Commission's IT Security Policy, coupled with its IT Security Risk Management Methodology (ITSRM²), forms a robust framework that can help organisations safeguard digital assets and preserve their integrity. +The European Commission's IT Security Policy, coupled with its IT Security Risk Management Methodology (ITSRM²), forms a robust framework that can help organizations safeguard digital assets and preserve their integrity. IT security management comprises a set of practices and measures centered around assuring three fundamental dimensions: confidentiality, which involves keeping data accessible only to authorized users; integrity, ensuring that data is not altered without authorization; and availability, guaranteeing that data remains accessible and functional when needed. It addresses a range of potential threats, such as accidents, errors, deliberate attacks, and natural events, all of which are considered as risks. The primary objective is to reduce the likelihood and impact of these risk, maintaining them at an acceptable level while ensuring that the cost of their management do not outweigh benefits. -IT security measures should be tailored to align with the specific threats faced by digital solutions and be in compliance with organisational policies and regulations, typically describing a three-tiered model, comprising risk management, compliance reviews, and internal security audits. +IT security measures should be tailored to align with the specific threats faced by digital solutions and be in compliance with organizational policies and regulations, typically describing a three-tiered model, comprising risk management, compliance reviews, and internal security audits. -A security-oriented risk management approach starts in the conceptualisation of digital solutions, and subsequently in the Initiating Phase of the relevant projects, and continues until their closing of those projects, but also continues throughout the entire lifecycle of the produced digital solutions. Thus, IT security considerations should be integrated from the outset into the project priorities and workplan. +A security-oriented risk management approach starts in the conceptualization of digital solutions, and subsequently in the Initiating Phase of the relevant projects, and continues until their closing of those projects, but also continues throughout the entire lifecycle of the produced digital solutions. Thus, IT security considerations should be integrated from the outset into the project priorities and workplan. -However, most organisations, project managers and project teams struggle with the complexities of managing IT security and therefore should be educated on the processes, tools and artefacts that will help seamlessly integrate IT security management into project initiation, planning, and execution, fostering a resilient, secure digital environment. +However, most organizations, project managers and project teams struggle with the complexities of managing IT security and therefore should be educated on the processes, tools and artifacts that will help seamlessly integrate IT security management into project initiation, planning, and execution, fostering a resilient, secure digital environment. #### D.2.4 UX Considerations in Project Management The role of user experience (UX) in increasing the value of digital solutions is increasingly appreciated. UX, which concentrates on user interactions with products, services, and processes, plays a pivotal part in shaping user experiences that resonate with their requirements and desires. -UX is not merely about interface design; it extends to optimising the complete user experience within Digital Solutions, services, and processes. This approach revolves around the central role of users, diminishing uncertainty, enhancing mutual comprehension, and fostering empathetic partnerships. +UX is not merely about interface design; it extends to optimizing the complete user experience within Digital Solutions, services, and processes. This approach revolves around the central role of users, diminishing uncertainty, enhancing mutual comprehension, and fostering empathetic partnerships. The inclusion of UX considerations (e.g. design thinking) for the Digital solution, in the project priorities and workplan makes the project outputs user-focused. It empowers project teams to bridge the gap between assumptions and experimentation. ## Appendix E: Additional Resources -### E. 1 PM² Artefacts \& Activities Summary Tables and Diagrams +### E. 1 PM² Artifacts \& Activities Summary Tables and Diagrams RAM (RASCI)—Responsible, Accountable, Supports, Consulted, Informed @@ -816,13 +816,13 @@ RAM (RASCI)—Responsible, Accountable, Supports, Consulted, Informed | PO (Project Owner) | | | PM (Project Manager) | | | | | | | BM (Business Manager) | | | PCT (Project Core team) | | | | | | -**The PM³ Artefacts Landscape** +**The PM³ Artifacts Landscape** -![The PM³ Artefacts Landscape](e.01.01.png) +![The PM³ Artifacts Landscape](e.01.01.png) -**Overview of PM² Activities & Artefacts** +**Overview of PM² Activities & Artifacts** -![Overview of PM² Activities & Artefacts](e.01.02.png) +![Overview of PM² Activities & Artifacts](e.01.02.png) ### E. 2 Getting Started with PM² - Quick Start Tips @@ -865,7 +865,7 @@ The purpose of this quick start guide is to help you get started with applying P ### E. 3 Useful Online Resources -The Centre of Excellence in PM² (CoEPM²) provides a central location for downloading all PM² information, publications, translations, etc. To study PM² in more detail you can download and review the free PM² Methodology Guide and artefact templates, and explore the online resources: +The Centre of Excellence in PM² (CoEPM²) provides a central location for downloading all PM² information, publications, translations, etc. To study PM² in more detail you can download and review the free PM² Methodology Guide and artifact templates, and explore the online resources: - PM² Website: https://pm2.europa.eu/ - EU Bookshop: https://op.europa.eu/en @@ -886,28 +886,28 @@ Sign-up to our newsletter: https://ec.europa.eu/newsroom/login?univers=informati ### F. 1 PM² Code of Professional Conduct -Many organisations provide a code of ethics and conduct that members are required to respect. The purpose is to help people navigate through the complexities of professional reality and remind them which attitudes and behaviours are aligned with a commonly accepted set of professional values. +Many organizations provide a code of ethics and conduct that members are required to respect. The purpose is to help people navigate through the complexities of professional reality and remind them which attitudes and behaviors are aligned with a commonly accepted set of professional values. -Conduct means personal behaviour based on moral principles. Professionalism is the skill, good judgment, and polite behaviour that is expected from a person who is trained to do a job well. This section provides a useful reminder of the key principles that PM² practitioners (and project team members) should be aware of and respect. +Conduct means personal behavior based on moral principles. Professionalism is the skill, good judgment, and polite behavior that is expected from a person who is trained to do a job well. This section provides a useful reminder of the key principles that PM² practitioners (and project team members) should be aware of and respect. - INDEPENDENCE: staff conduct, and decision-making should be determined by the need to serve the common good and public interest, and never by any other interests whether private or as a result of, for example, political pressure. - IMPARTIALITY: staff members should be unbiased in any decisions they are called upon to make. - OBJECTIVITY: any conclusions drawn by staff as part of the project work should be balanced and based on a thorough analysis of the facts and legal background. -- LOYALTY: loyalty towards the organisation is essential for maintaining its independence and achieving its objectives. It is also necessary for the functioning of each service. +- LOYALTY: loyalty towards the organization is essential for maintaining its independence and achieving its objectives. It is also necessary for the functioning of each service. Putting these principles into practice requires: - CIRCUMSPECTION: which is about stopping and reflecting on the possible consequences and implications of potential actions, showing a degree of moderation and a sense of proportion and propriety. - RESPONSIBILITY: which is about carrying out those tasks entrusted to you as dutifully as possible and looking for solutions when difficulties are encountered. It is also important to know and respect the legal obligations and administrative rules and procedures in force. -The key principles can be summarised as INTEGRITY, which means consistently adhering to ethical principles and making sound decisions based on them. +The key principles can be summarized as INTEGRITY, which means consistently adhering to ethical principles and making sound decisions based on them. In addition to the aforementioned code of ethics, every practitioner of the PM² Project Management Methodology should act based on the following values: - LAWFULNESS and ACCOUNTABILITY: act in accordance with the law and hold yourself accountable for decisions and acts. -- FAIRNESS: fairness is our duty to make decisions impartially and objectively, and free from selfinterest, prejudice and favouritism. +- FAIRNESS: fairness is our duty to make decisions impartially and objectively, and free from selfinterest, prejudice and favoritism. - NON-DISCRIMINATION and EQUAL TREATMENT: respect the principle of non-discrimination and, in particular, guarantee equal treatment for members of the public irrespective of nationality, gender, racial or ethnic origin, religion or beliefs, disability, age or sexual orientation. -- PROPORTIONALITY and CONSISTENCY: ensure that measures taken are proportional to the aim pursued and be consistent in your behaviour. +- PROPORTIONALITY and CONSISTENCY: ensure that measures taken are proportional to the aim pursued and be consistent in your behavior. - RESPECT and LEADERSHIP: exercise the power of your position with responsibility and promote ethical principles and professional conduct by leadership and example. - HONESTY and OPENNESS: declare any private interests and openly provide reasons for any decision. - TEAMWORK and CONFLICT RESOLUTION: work together to achieve common goals by finding solutions through better mutual understanding. @@ -915,19 +915,19 @@ In addition to the aforementioned code of ethics, every practitioner of the PM² ### F. 2 Personal and Professional Virtues -Virtues are strengths (or excellence) of the person who possesses them and refer to the ideal management of our attitude, behaviour and actions that drive personal and professional performance. Virtues are expressed in a specific context as the healthy mean between the extremes of excess and deficiency, which, however, is not universal, but subjective, and as such will vary between individuals and their respective circumstances. This healthy mean should be determined by good judgment. +Virtues are strengths (or excellence) of the person who possesses them and refer to the ideal management of our attitude, behavior and actions that drive personal and professional performance. Virtues are expressed in a specific context as the healthy mean between the extremes of excess and deficiency, which, however, is not universal, but subjective, and as such will vary between individuals and their respective circumstances. This healthy mean should be determined by good judgment. Virtues are developed through practice. Their application helps us discover the right principles of conduct, to know what we ought to do in a given situation. Acting in a virtuous way enables us to raise the effectiveness and efficiency of our performance as a means to serve our personal, professional, as well as our higher and more inclusive goals. -The virtue of prudence (practical wisdom) refers to our ability to carefully consider how we can achieve our goal. Prudence is characterised as an executive disposition because its outcome is something to be executed. It can be examined on two levels: the level of purpose (our ability to set worthy goals) and the level of deliberation (our ability to carefully consider the course and the means of our actions so as to achieve the desired goals). +The virtue of prudence (practical wisdom) refers to our ability to carefully consider how we can achieve our goal. Prudence is characterized as an executive disposition because its outcome is something to be executed. It can be examined on two levels: the level of purpose (our ability to set worthy goals) and the level of deliberation (our ability to carefully consider the course and the means of our actions so as to achieve the desired goals). Judgment refers to our ability to assess what is true and what is not. Judgment forms our perception about things around us. Therefore, it strongly affects our prudence, which in turn determines our actions. When there is a deficiency in our Judgment (e.g. due to emotional factors or past experiences), we may consider as true something that is not and vice-versa (e.g. consider an act as fair when it is unfair). -It is through intuitive insight that the mind grasps the principles of conduct that may point the way toward success and happiness. The virtue of insightfulness refers to our ability to perceive things correctly, to examine circumstances accurately, to understand the relationships between things, to analyse and synthesise. It determines our capacity to learn or know what is the right thing to do and what is not, and to transfer this knowledge to various contexts in order to contribute to our wellbeing. +It is through intuitive insight that the mind grasps the principles of conduct that may point the way toward success and happiness. The virtue of insightfulness refers to our ability to perceive things correctly, to examine circumstances accurately, to understand the relationships between things, to analyze and synthesize. It determines our capacity to learn or know what is the right thing to do and what is not, and to transfer this knowledge to various contexts in order to contribute to our wellbeing. The virtue of courage refers to the management of risk taking and is described as the productive mean between cowardice (a deficiency) and audacity or fearlessness (an excess). A courageous person pursues (not necessarily without fear) the right goals, for the right reasons, in the right way, at the right time and for the right amount of time. Therefore, a person who is courageous acts and endures whatever is logically required for the attainment of a worthy goal. Courage (which always involves a risk) is a necessary means for the further development of one's capacities. -The virtue of honour refers to our disposition to seek honours and rewards from others. This virtue is defined as the mean between lack of ambition (seeking less honours and rewards than are deserved or having no desire for honours) and over-ambitiousness (an excessive desire for honours or seeking more honours and rewards than are deserved). +The virtue of honor refers to our disposition to seek honors and rewards from others. This virtue is defined as the mean between lack of ambition (seeking less honors and rewards than are deserved or having no desire for honors) and over-ambitiousness (an excessive desire for honors or seeking more honors and rewards than are deserved). Honesty refers to our ability to tell the truth about ourselves and demonstrate to others who we really are, without denying or exaggerating our qualities. This virtue is the mean between self-deprecation (deficiency) and boastfulness (excess). @@ -937,7 +937,7 @@ The virtue of generosity refers to the management of things that have value (e.g The virtue of friendliness refers to the management of our amicability in our interactions with others. It is defined as the mean between rudeness (deficiency) and obsequiousness (excess). A rude person enjoys conflict, without taking into consideration whether it displeases or embarrasses others, whereas an obsequious person demonstrates servitude and is mostly interested in being likeable to others, avoiding conflict even at great personal cost. -The virtue of humour is described as the mean between boorishness (deficiency) and buffoonery (excess) The boorish person does not enjoy humour, might even be unduly upset or annoyed by it. On the other hand, the buffoon is someone who enjoys humour in excess, expresses it in an unproductive way, with inappropriate timing or frequency, possibly causing annoyance to others. +The virtue of humor is described as the mean between boorishness (deficiency) and buffoonery (excess) The boorish person does not enjoy humor, might even be unduly upset or annoyed by it. On the other hand, the buffoon is someone who enjoys humor in excess, expresses it in an unproductive way, with inappropriate timing or frequency, possibly causing annoyance to others. The virtue of calmness refers to the management of anger. It is the mean between spiritlessness (deficiency) and irritability (excess). Spiritlessness refers to the lack of anger, while irritability refers to the excess of anger in its duration, intensity and frequency. The calm person desires to remain calm and not get carried away by passion or rage, but to always act within reasonable limits. @@ -945,21 +945,21 @@ The virtue of temperance refers to the management of our desires and is the mean The virtue of magnificence is similar to generosity, but it refers to the management of large assets. It is defined as the mean between paltriness (deficiency) and vulgarity (excess). Paltriness prevails when someone contributes to an important cause with a miserly disposition. On the contrary, vulgarity is displayed when someone contributes excessively, much more than is required or expected. -The virtue of magnanimity is similar to honour, but it refers to the management of high honours and rewards. It is defined as the mean between meekness (deficiency) and vanity (excess). A meek person believes that they do not deserve great honours when they actually do deserve them, whereas a vain person believes that they deserve great honours when they actually do not deserve them. The magnanimous (magnum=great) consider they deserve the greatest goods (wealth, influence, prestige, distinctions, etc.) when they do indeed deserve them. +The virtue of magnanimity is similar to honor, but it refers to the management of high honors and rewards. It is defined as the mean between meekness (deficiency) and vanity (excess). A meek person believes that they do not deserve great honors when they actually do deserve them, whereas a vain person believes that they deserve great honors when they actually do not deserve them. The magnanimous (magnum=great) consider they deserve the greatest goods (wealth, influence, prestige, distinctions, etc.) when they do indeed deserve them. All virtues are required for the application of professional competences, however, the intellectual virtues of judgment, prudence and insightfulness need to be transversally applied for their development. The following table shows the strongest relations of moral virtues to key professional competencies. | Competence | Key Virtues | | --- | --- | | Leadership | All | -| Relationships and engagement | Fairness, Friendliness, Generosity, Honesty, Humour,
    Temperance | -| Self-reflection and-self management | Calmness, Courage, Friendliness, Honesty, Honour, Temperance | +| Relationships and engagement | Fairness, Friendliness, Generosity, Honesty, Humor,
    Temperance | +| Self-reflection and-self management | Calmness, Courage, Friendliness, Honesty, Honor, Temperance | | Change and transformation | Calmness, Courage, Friendliness, Generosity | -| Personal communication | Calmness, Friendliness, Generosity, Humour | -| Resourcefulness | Fairness, Friendliness, Generosity, Honesty, Honour | -| Results orientation | Honour, Generosity, Magnanimity, Magnificence | -| Teamwork | Calmness, Courage, Fairness, Friendliness, Generosity, Honour,
    Magnificence | -| Negotiation | Courage, Fairness, Friendliness, Generosity, Honesty, Honour | +| Personal communication | Calmness, Friendliness, Generosity, Humor | +| Resourcefulness | Fairness, Friendliness, Generosity, Honesty, Honor | +| Results orientation | Honor, Generosity, Magnanimity, Magnificence | +| Teamwork | Calmness, Courage, Fairness, Friendliness, Generosity, Honor,
    Magnificence | +| Negotiation | Courage, Fairness, Friendliness, Generosity, Honesty, Honor | | Conflict and crisis management | Calmness, Fairness, Friendliness, Generosity | -| Personal integrity and reliability | Calmness, Courage, Fairness, Friendliness, Honour, Temperance | +| Personal integrity and reliability | Calmness, Courage, Fairness, Friendliness, Honor, Temperance | | Culture and values management | All virtues | diff --git a/docs/release-notes/12/12-0-0/README.md b/docs/release-notes/12/12-0-0/README.md index fb1ed882aa58..8b5ca56f4a19 100644 --- a/docs/release-notes/12/12-0-0/README.md +++ b/docs/release-notes/12/12-0-0/README.md @@ -186,7 +186,7 @@ OpenProject 12.0 will deprecate PostgreSQL versions < 13. This will result in a - Fixed: Translation errors/sentence errors when sending meeting minutes \[[#39072](https://community.openproject.org/wp/39072)\] - Fixed: During Installation in Debian 11 BIM version not selectable \[[#39113](https://community.openproject.org/wp/39113)\] - Fixed: Fix GET viewpoint endpoint in BCF API \[[#39144](https://community.openproject.org/wp/39144)\] -- Fixed: Email content not centred when deleting a project \[[#39188](https://community.openproject.org/wp/39188)\] +- Fixed: Email content not centered when deleting a project \[[#39188](https://community.openproject.org/wp/39188)\] - Fixed: Wrong Russian translate for custom fields and menu item \[[#39437](https://community.openproject.org/wp/39437)\] - Fixed: Highlighting in project table is broken \[[#39449](https://community.openproject.org/wp/39449)\] - Fixed: Wrong error message about missing external authentication source when changing a password \[[#39460](https://community.openproject.org/wp/39460)\] diff --git a/docs/release-notes/12/12-1-0/README.md b/docs/release-notes/12/12-1-0/README.md index 40dfbf292be4..16abf3367df9 100644 --- a/docs/release-notes/12/12-1-0/README.md +++ b/docs/release-notes/12/12-1-0/README.md @@ -175,7 +175,7 @@ We added a new “Files” tab in the work package details. This way, you will h - Fixed: Include projects - Action bar has no round corners \[[#41582](https://community.openproject.org/wp/41582)\] - Fixed: Fix capitalization in two places (minor) in the Team Planner \[[#41647](https://community.openproject.org/wp/41647)\] - Fixed: Comments linked to another package are not shown correctly \[[#41649](https://community.openproject.org/wp/41649)\] -- Fixed: APIv3 projects API signalling - Duplicated projects returned \[[#41673](https://community.openproject.org/wp/41673)\] +- Fixed: APIv3 projects API signaling - Duplicated projects returned \[[#41673](https://community.openproject.org/wp/41673)\] - Fixed: Include projects number is wrong moving from projects page to gantt view \[[#41680](https://community.openproject.org/wp/41680)\] - Fixed: Toolbars in Team planner not correctly aligned \[[#41711](https://community.openproject.org/wp/41711)\] - Fixed: Redundant heading in file section (files + attachments) \[[#41712](https://community.openproject.org/wp/41712)\] diff --git a/docs/release-notes/12/12-5-0/README.md b/docs/release-notes/12/12-5-0/README.md index 811a6ddb04f8..ebc16e591657 100644 --- a/docs/release-notes/12/12-5-0/README.md +++ b/docs/release-notes/12/12-5-0/README.md @@ -183,7 +183,7 @@ With OpenProject 12.5, we are happy to announce that another Enterprise add-on w - Fixed: English language displayed multiple times in available languages \[[#46067](https://community.openproject.org/wp/46067)\] - Fixed: Adding new type to lot of projects with custom fields times out \[[#46118](https://community.openproject.org/wp/46118)\] - Fixed: Bottom round corners on the modal are not rounded \[[#46144](https://community.openproject.org/wp/46144)\] -- Fixed: Loading animation not centred on mobile \[[#46148](https://community.openproject.org/wp/46148)\] +- Fixed: Loading animation not centered on mobile \[[#46148](https://community.openproject.org/wp/46148)\] - Fixed: Standard date picker small regression issues \[[#46156](https://community.openproject.org/wp/46156)\] - Fixed: Date picker on Non-working days: not enough spacing between the date field and the calendar + arrows \[[#46159](https://community.openproject.org/wp/46159)\] - Fixed: White space added to page when datepicker opens to bottom \[[#46164](https://community.openproject.org/wp/46164)\] diff --git a/docs/release-notes/15/15-1-0/README.md b/docs/release-notes/15/15-1-0/README.md index 6ca99d090405..cd745db7592d 100644 --- a/docs/release-notes/15/15-1-0/README.md +++ b/docs/release-notes/15/15-1-0/README.md @@ -129,7 +129,7 @@ Read more about [seeding through environment for OpenProject configuration in ou - Feature: Move primary action to subheader \[[#58636](https://community.openproject.org/wp/58636)\] - Feature: Validate uniqueness of short names of hierarchy items \[[#58852](https://community.openproject.org/wp/58852)\] - Feature: Add enterprise gateway to creation of custom fields of type hierarchy \[[#58865](https://community.openproject.org/wp/58865)\] -- Feature: Primer: Implement proper mobile behaviour for BoxTable \[[#59248](https://community.openproject.org/wp/59248)\] +- Feature: Primer: Implement proper mobile behavior for BoxTable \[[#59248](https://community.openproject.org/wp/59248)\] - Feature: Allow locking of the seeded admin user \[[#59722](https://community.openproject.org/wp/59722)\] - Feature: Remove feature flag custom\_field\_of\_type\_hierarchy \[[#59864](https://community.openproject.org/wp/59864)\] diff --git a/docs/release-notes/15/15-3-1/README.md b/docs/release-notes/15/15-3-1/README.md index 595babb1d221..366cca25117a 100644 --- a/docs/release-notes/15/15-3-1/README.md +++ b/docs/release-notes/15/15-3-1/README.md @@ -25,7 +25,7 @@ At the end, you will find a complete list of all changes and bug fixes. - Bugfix: In add relation dialog, selecting a WP that user doesn't have permission to edit raises an error \[[#60858](https://community.openproject.org/wp/60858)\] - Bugfix: Danger and Feedback Dialogs have broken ARIA describedby attribute value \[[#61347](https://community.openproject.org/wp/61347)\] - Bugfix: Big space below the comment box on mobile \[[#61543](https://community.openproject.org/wp/61543)\] -- Bugfix: Danger Dialog scroll behaviour still incorrect when used with forms \[[#61546](https://community.openproject.org/wp/61546)\] +- Bugfix: Danger Dialog scroll behavior still incorrect when used with forms \[[#61546](https://community.openproject.org/wp/61546)\] - Bugfix: Meeting sets system user as invited \[[#61570](https://community.openproject.org/wp/61570)\] - Bugfix: Time entry cannot be saved when comment is >255 characters long \[[#61602](https://community.openproject.org/wp/61602)\] - Bugfix: XSS via time entry comment \[[#61605](https://community.openproject.org/wp/61605)\] diff --git a/docs/release-notes/15/15-4-2/README.md b/docs/release-notes/15/15-4-2/README.md index 98ab7e063a46..8f5f57d750aa 100644 --- a/docs/release-notes/15/15-4-2/README.md +++ b/docs/release-notes/15/15-4-2/README.md @@ -22,7 +22,7 @@ At the end, you will find a complete list of all changes and bug fixes. -- Bugfix: Inconsistent behaviour for switching to automatic mode in WP create form \[[#61960](https://community.openproject.org/wp/61960)\] +- Bugfix: Inconsistent behavior for switching to automatic mode in WP create form \[[#61960](https://community.openproject.org/wp/61960)\] - Bugfix: WP can't be transformed to a Milestone if it is automatically scheduled \[[#62190](https://community.openproject.org/wp/62190)\] - Bugfix: Many WP fields are visually misaligned when populated with data \[[#62249](https://community.openproject.org/wp/62249)\] - Bugfix: PDF Export Report: no attributes are exported if the default columns of a query is used \[[#62316](https://community.openproject.org/wp/62316)\] diff --git a/docs/release-notes/16/16-1-0/README.md b/docs/release-notes/16/16-1-0/README.md index 86d42ca335d2..754d2bb933c0 100644 --- a/docs/release-notes/16/16-1-0/README.md +++ b/docs/release-notes/16/16-1-0/README.md @@ -149,7 +149,7 @@ Developers can now read and manage emoji reactions, create and update reminders, - Feature: Order by phases and phase gates on project list \[[#59184](https://community.openproject.org/wp/59184)\] - Feature: Extend Reminders API V3 to include create, update & delete operations \[[#59473](https://community.openproject.org/wp/59473)\] - Feature: Optimize life cycle modal UX \[[#60330](https://community.openproject.org/wp/60330)\] -- Feature: Document and implement proper mobile behaviour for Sub Header component (OP Primer) \[[#60332](https://community.openproject.org/wp/60332)\] +- Feature: Document and implement proper mobile behavior for Sub Header component (OP Primer) \[[#60332](https://community.openproject.org/wp/60332)\] - Feature: Reminders: Offer quick-set options like 'tomorrow' or 'next week' with smart defaults \[[#60357](https://community.openproject.org/wp/60357)\] - Feature: PDF export of meetings \[[#60730](https://community.openproject.org/wp/60730)\] - Feature: Date picker to edit phases and phase gates of a project life cycle \[[#61610](https://community.openproject.org/wp/61610)\] diff --git a/docs/release-notes/16/16-5-0/README.md b/docs/release-notes/16/16-5-0/README.md index 7e388dfb5359..83cc99964211 100644 --- a/docs/release-notes/16/16-5-0/README.md +++ b/docs/release-notes/16/16-5-0/README.md @@ -144,7 +144,7 @@ This menu is useful not only for new users, but also for anyone looking for addi - Bugfix: CTA on Project settings file storage page are too close to another \[[#67645](https://community.openproject.org/wp/67645)\] - Bugfix: User sees 500 when creating or editing a custom action when scored list custom field exists \[[#67649](https://community.openproject.org/wp/67649)\] - Bugfix: Virus scanning is not triggered after uploading a file to S3 storage \[[#67664](https://community.openproject.org/wp/67664)\] -- Bugfix: Create button: plus icon is smaller than before and no longer centred with the label \[[#67699](https://community.openproject.org/wp/67699)\] +- Bugfix: Create button: plus icon is smaller than before and no longer centered with the label \[[#67699](https://community.openproject.org/wp/67699)\] - Bugfix: Change working days pop-up: position of icons is off on the buttons \[[#67702](https://community.openproject.org/wp/67702)\] - Bugfix: Team planner: no spacing between the icon and the Assignee \[[#67710](https://community.openproject.org/wp/67710)\] - Bugfix: Project search dropdown: no spacing between the icon and the label \[[#67711](https://community.openproject.org/wp/67711)\] diff --git a/docs/release-notes/17-0-0/README.md b/docs/release-notes/17-0-0/README.md index 3f3b3d70bd42..de634125c6c0 100644 --- a/docs/release-notes/17-0-0/README.md +++ b/docs/release-notes/17-0-0/README.md @@ -84,7 +84,7 @@ OpenProject 17.0 introduces several great improvements that make meeting prepara New meetings now open in **draft mode**, allowing moderators to prepare agendas, add participants, and structure content before sending out invitations or updates. -A banner clearly indicates draft mode, and invitations are only sent once the meeting is explicitly opened by clicking on the green "Open meeting" button. Only then, invitations can be sent and the usual update behaviour applies. +A banner clearly indicates draft mode, and invitations are only sent once the meeting is explicitly opened by clicking on the green "Open meeting" button. Only then, invitations can be sent and the usual update behavior applies. ![OpenProject meeting draft mode, indicated by a "Draft" status and a banner explaining draft mode. There is a green button "Open meeting in the upper right corner".](openproject-17-0-meeting-draft-mode.png) @@ -103,7 +103,7 @@ See our user guide to [learn how to present a meeting in OpenProject](../../user #### Multiple text-based outcomes per agenda item -Agenda items can now hold **multiple text-based outcomes**: The **+ Outcome** button remains available while the meeting is _In progress_ and allows moderators to record more than one result for the same item. The first outcome is labelled "Outcome", additional ones are numbered ("Outcome 1", "Outcome 2", and so on). These outcomes are also supported in the PDF exports of meetings. This feature is a preparation for future improvements, such as [creating work packages as outcomes](https://community.openproject.org/work_packages/62093). +Agenda items can now hold **multiple text-based outcomes**: The **+ Outcome** button remains available while the meeting is _In progress_ and allows moderators to record more than one result for the same item. The first outcome is labeled "Outcome", additional ones are numbered ("Outcome 1", "Outcome 2", and so on). These outcomes are also supported in the PDF exports of meetings. This feature is a preparation for future improvements, such as [creating work packages as outcomes](https://community.openproject.org/work_packages/62093). ![OpenProject meeting which is in progress, below the first agenda item (a work package) are "Outcome 1" and "Outcome 2" displayed, and the + Outcome button is still available as well](openproject-17-0-meeting-multiple-outcomes.png) diff --git a/docs/release-notes/17-2-0/README.md b/docs/release-notes/17-2-0/README.md index 2203aef0d18d..c5f7cd92725f 100644 --- a/docs/release-notes/17-2-0/README.md +++ b/docs/release-notes/17-2-0/README.md @@ -198,7 +198,7 @@ For more information, please see the [GitHub advisory #GHSA-gpvh-g967-g4h8](http ### CVE-2026-31974 - Blind SSRF on OpenProject instance via webhooks, and through /admin/test_email via POST request leads to internal network reconnaissance -OpenProject SMTP test endpoint (POST /admin/settings/mail\_notifications) accepts arbitrary host and port values and exhibits measurable differences in response behaviour depending on whether the target IP exists and whether the port is open. An attacker with access can use these timing and error distinctions to map internal hosts and identify which services/ports are reachable. +OpenProject SMTP test endpoint (POST /admin/settings/mail\_notifications) accepts arbitrary host and port values and exhibits measurable differences in response behavior depending on whether the target IP exists and whether the port is open. An attacker with access can use these timing and error distinctions to map internal hosts and identify which services/ports are reachable. Similarly, you can create webhooks in OpenProject and point them to arbitrary IPs, resulting in the same kind of SSRF issue which allows attackers to scan the internal network. diff --git a/docs/release-notes/17-2-4/README.md b/docs/release-notes/17-2-4/README.md index b169cc06d919..e2db554427f0 100644 --- a/docs/release-notes/17-2-4/README.md +++ b/docs/release-notes/17-2-4/README.md @@ -20,9 +20,9 @@ Below you will find a complete list of all changes and bug fixes. ### CVE-2026-46386 - Docker Container starts with SECRET_KEY_BASE default value -When an attacker knew the secret key base that the application used to derive internal keys from, they could construct encrypted cookies that on the server side were decoded using [Object Marshalling](https://docs.ruby-lang.org/en/4.0/Marshal.html) which allowed the attacker to execute almost arbitrary ruby code within the container, up to a complete remote code execution. This was especially present in Docker containers that shipped with a default value as the secret key base, when it was not manually overwritten, as mentioned in the documentation. +When an attacker knew the secret key base that the application used to derive internal keys from, they could construct encrypted cookies that on the server side were decoded using [Object Marshaling](https://docs.ruby-lang.org/en/4.0/Marshal.html) which allowed the attacker to execute almost arbitrary ruby code within the container, up to a complete remote code execution. This was especially present in Docker containers that shipped with a default value as the secret key base, when it was not manually overwritten, as mentioned in the documentation. -As a fix, the docker containers now validate that a proper `SECRET_KEY_BASE` environment variable is set Otherwise the application aborts the boot process with an error message. The documentation has been updated to make it even clearer, that the `SECRET_KEY_BASE` env variable must be set. And the decoding of the encrypted cookies has been updated to use JSON encoding instead of Object Marshalling.  +As a fix, the docker containers now validate that a proper `SECRET_KEY_BASE` environment variable is set Otherwise the application aborts the boot process with an error message. The documentation has been updated to make it even clearer, that the `SECRET_KEY_BASE` env variable must be set. And the decoding of the encrypted cookies has been updated to use JSON encoding instead of Object Marshaling.  **Administrators that have not set a `SECRET_KEY_BASE` environment before need to set one now. Otherwise the application will not boot.** diff --git a/docs/release-notes/17-3-0/README.md b/docs/release-notes/17-3-0/README.md index 51a517e3a0a7..4d693668a6ee 100644 --- a/docs/release-notes/17-3-0/README.md +++ b/docs/release-notes/17-3-0/README.md @@ -219,7 +219,7 @@ We want to thank Community member [@cheezzz](https://github.com/cheezzz) for con - Bugfix: Update "finish" sprint to "complete" sprint \[[#73535](https://community.openproject.org/wp/73535)\] - Bugfix: Performance Issues with Backlog on v17.2.2 \[[#73557](https://community.openproject.org/wp/73557)\] - Bugfix: Spurious connection error blips while editing a document \[[#73571](https://community.openproject.org/wp/73571)\] -- Bugfix: Datepicker "today" field uses wrong colour \[[#73574](https://community.openproject.org/wp/73574)\] +- Bugfix: Datepicker "today" field uses wrong color \[[#73574](https://community.openproject.org/wp/73574)\] - Bugfix: User facing work package link from Github tab is not the shortened version \[[#73678](https://community.openproject.org/wp/73678)\] - Bugfix: User does not meet password requirements during Jira Import. \[[#73707](https://community.openproject.org/wp/73707)\] - Bugfix: Improve Backlogs and Sprints page performance by deferring story menu loading \[[#73737](https://community.openproject.org/wp/73737)\] diff --git a/docs/release-notes/17-3-2/README.md b/docs/release-notes/17-3-2/README.md index 0e8cd10f34eb..4d118c06de0f 100644 --- a/docs/release-notes/17-3-2/README.md +++ b/docs/release-notes/17-3-2/README.md @@ -20,9 +20,9 @@ Below you will find a complete list of all changes and bug fixes. ### CVE-2026-46386 - Docker Container starts with SECRET_KEY_BASE default value -When an attacker knew the secret key base that the application used to derive internal keys from, they could construct encrypted cookies that on the server side were decoded using [Object Marshalling](https://docs.ruby-lang.org/en/4.0/Marshal.html) which allowed the attacker to execute almost arbitrary ruby code within the container, up to a complete remote code execution. This was especially present in Docker containers that shipped with a default value as the secret key base, when it was not manually overwritten, as mentioned in the documentation. +When an attacker knew the secret key base that the application used to derive internal keys from, they could construct encrypted cookies that on the server side were decoded using [Object Marshaling](https://docs.ruby-lang.org/en/4.0/Marshal.html) which allowed the attacker to execute almost arbitrary ruby code within the container, up to a complete remote code execution. This was especially present in Docker containers that shipped with a default value as the secret key base, when it was not manually overwritten, as mentioned in the documentation. -As a fix, the docker containers now validate that a proper `SECRET_KEY_BASE` environment variable is set Otherwise the application aborts the boot process with an error message. The documentation has been updated to make it even clearer, that the `SECRET_KEY_BASE` env variable must be set. And the decoding of the encrypted cookies has been updated to use JSON encoding instead of Object Marshalling.  +As a fix, the docker containers now validate that a proper `SECRET_KEY_BASE` environment variable is set Otherwise the application aborts the boot process with an error message. The documentation has been updated to make it even clearer, that the `SECRET_KEY_BASE` env variable must be set. And the decoding of the encrypted cookies has been updated to use JSON encoding instead of Object Marshaling.  **Administrators that have not set a `SECRET_KEY_BASE` environment before need to set one now. Otherwise the application will not boot.** diff --git a/docs/release-notes/17-4-0/README.md b/docs/release-notes/17-4-0/README.md index 135dcae5c755..f604037f87b5 100644 --- a/docs/release-notes/17-4-0/README.md +++ b/docs/release-notes/17-4-0/README.md @@ -111,9 +111,9 @@ You can now configure webhook secrets for GitHub and GitLab integrations. This i ### CVE-2026-46386 - Docker Container starts with SECRET_KEY_BASE default value -When an attacker knew the secret key base that the application used to derive internal keys from, they could construct encrypted cookies that on the server side were decoded using [Object Marshalling](https://docs.ruby-lang.org/en/4.0/Marshal.html) which allowed the attacker to execute almost arbitrary ruby code within the container, up to a complete remote code execution. This was especially present in Docker containers that shipped with a default value as the secret key base, when it was not manually overwritten, as mentioned in the documentation. +When an attacker knew the secret key base that the application used to derive internal keys from, they could construct encrypted cookies that on the server side were decoded using [Object Marshaling](https://docs.ruby-lang.org/en/4.0/Marshal.html) which allowed the attacker to execute almost arbitrary ruby code within the container, up to a complete remote code execution. This was especially present in Docker containers that shipped with a default value as the secret key base, when it was not manually overwritten, as mentioned in the documentation. -As a fix, the docker containers now validate that a proper `SECRET_KEY_BASE` environment variable is set. Otherwise the application aborts the boot process with an error message. The documentation has been updated to make it even clearer that the `SECRET_KEY_BASE` env variable must be set. And the decoding of the encrypted cookies has been updated to use JSON encoding instead of Object Marshalling.  +As a fix, the docker containers now validate that a proper `SECRET_KEY_BASE` environment variable is set. Otherwise the application aborts the boot process with an error message. The documentation has been updated to make it even clearer that the `SECRET_KEY_BASE` env variable must be set. And the decoding of the encrypted cookies has been updated to use JSON encoding instead of Object Marshaling.  **Administrators that have not set a** `**SECRET_KEY_BASE**` **environment before need to set one now. Otherwise the application will not boot.** diff --git a/docs/release-notes/17-6-0/README.md b/docs/release-notes/17-6-0/README.md index 375f7ddb540d..f8c88839e500 100644 --- a/docs/release-notes/17-6-0/README.md +++ b/docs/release-notes/17-6-0/README.md @@ -368,7 +368,7 @@ We'd like to thank the contributors of this report, [@GEONWOOHAN](https://github - Bugfix: Previous work package opens in detail view from the wp list \[[#75819](https://community.openproject.org/wp/75819)\] - Bugfix: Users filter does not display accurate results when all filters are removed \[[#75916](https://community.openproject.org/wp/75916)\] - Bugfix: Meeting not shown in "All meetings" in the meetings index page if there are no participants \[[#75957](https://community.openproject.org/wp/75957)\] -- Bugfix: Harmonize behaviour between quick filters and "All filters" \[[#76128](https://community.openproject.org/wp/76128)\] +- Bugfix: Harmonize behavior between quick filters and "All filters" \[[#76128](https://community.openproject.org/wp/76128)\] - Bugfix: Project selector is in the wrong color on BIM instances \[[#76131](https://community.openproject.org/wp/76131)\] - Bugfix: Wrong translation for Wiki Macro "Links to child pages" \[[#76231](https://community.openproject.org/wp/76231)\] - Bugfix: Move work package form: Changing project, type wipes most form fields \[[#76432](https://community.openproject.org/wp/76432)\] diff --git a/docs/release-notes/17-7-0/README.md b/docs/release-notes/17-7-0/README.md index 754eb0344c21..539d196c99cd 100644 --- a/docs/release-notes/17-7-0/README.md +++ b/docs/release-notes/17-7-0/README.md @@ -100,11 +100,11 @@ Project attributes can now be displayed in a dedicated **Project attributes** ta ![OpenProject displays project attributes in a dedicated Project attributes tab within a Project initiation request work package.](openproject-17.7-project-attributes-tab.png) -**PMflex Artefact PDF export** +**PMflex Artifact PDF export** -Work packages can now be [exported using a dedicated **PMflex Artefact** PDF template](../../user-guide/work-packages/exporting/work-package-pdf/#pmflex-artefact). The export combines project attributes, work package attributes, custom fields, and related work packages into a structured document suitable for project documentation and governance. +Work packages can now be [exported using a dedicated **PMflex Artifact** PDF template](../../user-guide/work-packages/exporting/work-package-pdf/#pmflex-artifact). The export combines project attributes, work package attributes, custom fields, and related work packages into a structured document suitable for project documentation and governance. -Administrators can configure PMflex artefacts to be generated automatically when a work package reaches a defined status. Generated artefacts can either be uploaded to the project's connected Nextcloud folder or added directly as work package attachments. +Administrators can configure PMflex artifacts to be generated automatically when a work package reaches a defined status. Generated artifacts can either be uploaded to the project's connected Nextcloud folder or added directly as work package attachments. **Project phases and gates widget** @@ -199,10 +199,10 @@ The Agenda API now supports retrieving agenda items by work package ID, making i - Feature: User danger dialog when deleting placeholder users \[[#70726](https://community.openproject.org/wp/70726)\] - Feature: Configurable loading indication for filterable tree views with async filter input \[[#75620](https://community.openproject.org/wp/75620)\] - Feature: Show project attributes as separate tab in a WorkPackage \[[#75699](https://community.openproject.org/wp/75699)\] -- Feature: Extend WorkPackage export to include PMflex artefacts export \[[#75702](https://community.openproject.org/wp/75702)\] +- Feature: Extend WorkPackage export to include PMflex artifacts export \[[#75702](https://community.openproject.org/wp/75702)\] - Feature: User danger dialog when deleting repositories \[[#76540](https://community.openproject.org/wp/76540)\] - Feature: Replace outdated danger zone when creating a backup \[[#77184](https://community.openproject.org/wp/77184)\] -- Feature: Automatically upload PDF artefacts to project folder in Nextcloud or as work package attachment \[[#77321](https://community.openproject.org/wp/77321)\] +- Feature: Automatically upload PDF artifacts to project folder in Nextcloud or as work package attachment \[[#77321](https://community.openproject.org/wp/77321)\] - Feature: Add caption to recurring meeting create/edit forms to show end date/no. of occurrences \[[#71922](https://community.openproject.org/wp/71922)\] - Feature: Add ability to fetch agenda items by WorkPackage ID via the API \[[#76296](https://community.openproject.org/wp/76296)\] - Feature: Track working hours and availabilities for each user in the system \[[#34911](https://community.openproject.org/wp/34911)\] @@ -286,16 +286,16 @@ The Agenda API now supports retrieving agenda items by work package ID, making i - Bugfix: Members: Changing a group's role results in a 404 error \[[#77450](https://community.openproject.org/wp/77450)\] - Bugfix: Boolean calculated value is not properly formatted in input \[[#77487](https://community.openproject.org/wp/77487)\] - Bugfix: PDF Export: Empty hierarchy custom fields appear as "not found" in PDF instead of empty \[[#77684](https://community.openproject.org/wp/77684)\] -- Bugfix: Fix \`XOR\` behaviour \[[#77740](https://community.openproject.org/wp/77740)\] +- Bugfix: Fix \`XOR\` behavior \[[#77740](https://community.openproject.org/wp/77740)\] - Bugfix: Accidentally using a date for calculated value will cause either 500 or cause "unknown error" \[[#77789](https://community.openproject.org/wp/77789)\] - Bugfix: Booleans should be allowed as input for calculated values \[[#77830](https://community.openproject.org/wp/77830)\] - Bugfix: A \`CASE\` without default value causes an error on project and projects pages \[[#77874](https://community.openproject.org/wp/77874)\] - Bugfix: SSRF protection error when using custom design seeding with URLs \[[#78007](https://community.openproject.org/wp/78007)\] -- Bugfix: PIR PDF and PMflex artefacts are only shown after 2nd WP status change \[[#71857](https://community.openproject.org/wp/71857)\] +- Bugfix: PIR PDF and PMflex artifacts are only shown after 2nd WP status change \[[#71857](https://community.openproject.org/wp/71857)\] - Bugfix: Impossible to search for archived projects, page reverts to active projects list on its own \[[#71971](https://community.openproject.org/wp/71971)\] - Bugfix: Nextcloud integration error "<Nextcloud-Hostname> has no public IP addresses" \[[#77278](https://community.openproject.org/wp/77278)\] - Feature: New frontend for 'My account' based on design system \[[#56584](https://community.openproject.org/wp/56584)\] -- Feature: Automation to create PM²/PMflex artefacts \[[#69055](https://community.openproject.org/wp/69055)\] +- Feature: Automation to create PM²/PMflex artifacts \[[#69055](https://community.openproject.org/wp/69055)\] diff --git a/docs/release-notes/17-9-0/README.md b/docs/release-notes/17-9-0/README.md index 4b17252fca72..feb673778c74 100644 --- a/docs/release-notes/17-9-0/README.md +++ b/docs/release-notes/17-9-0/README.md @@ -81,11 +81,11 @@ OpenProject 17.9 further extends the capabilities of the [MCP Server](../../syst OpenProject 17.9 brings several improvements to PDF exports, providing more complete project information and making it easier to create consistent exports. -- **More comprehensive [PMflex artefact exports](../../user-guide/work-packages/exporting/work-package-pdf/):** Project lifecycle information and **project budgets** can now optionally be included in the PDF. Budgets are presented as a cost breakdown, including unit and labor costs and their subtotals. This provides a more complete view of project planning, progress, and costs in a single artefact. +- **More comprehensive [PMflex artifact exports](../../user-guide/work-packages/exporting/work-package-pdf/):** Project lifecycle information and **project budgets** can now optionally be included in the PDF. Budgets are presented as a cost breakdown, including unit and labor costs and their subtotals. This provides a more complete view of project planning, progress, and costs in a single artifact. - ![Project lifecycle and budget information in a PMflex artefact PDF export](openproject_release_notes_17.9_pmflex_pdf_export.png) + ![Project lifecycle and budget information in a PMflex artifact PDF export](openproject_release_notes_17.9_pmflex_pdf_export.png) -- **[Default PDF export settings per work package type](../../system-admin-guide/manage-work-packages/work-package-types/pdf-export/):** Administrators can now define default settings for **Attributes, Contract, and PMflex artefact exports** for each work package type. Depending on the template, defaults can include options such as footer text, page orientation, table of contents, and hyphenation. These defaults are automatically applied when starting an export, reducing repetitive configuration and helping teams create more consistent PDFs. +- **[Default PDF export settings per work package type](../../system-admin-guide/manage-work-packages/work-package-types/pdf-export/):** Administrators can now define default settings for **Attributes, Contract, and PMflex artifact exports** for each work package type. Depending on the template, defaults can include options such as footer text, page orientation, table of contents, and hyphenation. These defaults are automatically applied when starting an export, reducing repetitive configuration and helping teams create more consistent PDFs. ![Default PDF export settings for a work package type](openproject_release_notes_17.9_pdf_export_defaults.png) @@ -242,7 +242,7 @@ For more information, please see the [GitHub advisory #GHSA-r374-cr8p-hmp9](http - Feature: Give users the choice to not include descendants when deleting work packages \[[#77999](https://community.openproject.org/wp/77999)\] - Feature: Global default settings for PDF exports by type \[[#78333](https://community.openproject.org/wp/78333)\] - Feature: Allow planned labor to be entered in hours, days, weeks, or months \[[#78544](https://community.openproject.org/wp/78544)\] -- Feature: PMflex Artefact PDF: Include project phases and budgets \[[#78561](https://community.openproject.org/wp/78561)\] +- Feature: PMflex Artifact PDF: Include project phases and budgets \[[#78561](https://community.openproject.org/wp/78561)\] - Feature: Allow differing time stamps between SAML IdP and SP (OpenProject) within margin (allowed\_clock\_drift) \[[#79019](https://community.openproject.org/wp/79019)\] - Feature: Allow restricting password login for SSO authenticated users \[[#79300](https://community.openproject.org/wp/79300)\] - Feature: For number custom fields, replace min and max length with minimum and maximum values \[[#79759](https://community.openproject.org/wp/79759)\] @@ -286,7 +286,7 @@ For more information, please see the [GitHub advisory #GHSA-r374-cr8p-hmp9](http - Bugfix: 'No items' shown on wiki tree view is not translated \[[#79389](https://community.openproject.org/wp/79389)\] - Bugfix: Missing caption on 'Default colors' tab \[[#79771](https://community.openproject.org/wp/79771)\] - Bugfix: Remove max-width of 752px from the filter component \[[#79773](https://community.openproject.org/wp/79773)\] -- Bugfix: Save button has the wrong colour in admin/user settings \[[#79878](https://community.openproject.org/wp/79878)\] +- Bugfix: Save button has the wrong color in admin/user settings \[[#79878](https://community.openproject.org/wp/79878)\] - Bugfix: Personal-data fields do not expose their input purpose \[[#80031](https://community.openproject.org/wp/80031)\] - Bugfix: Jira import fails when historical issues reference deleted Jira users \[[#78961](https://community.openproject.org/wp/78961)\] - Bugfix: is\_closed status is not migrated \[[#79025](https://community.openproject.org/wp/79025)\] diff --git a/docs/release-notes/18-0-0/README.md b/docs/release-notes/18-0-0/README.md index 974bd129c9da..32201b808864 100644 --- a/docs/release-notes/18-0-0/README.md +++ b/docs/release-notes/18-0-0/README.md @@ -35,7 +35,7 @@ In these Release Notes, we will give an overview of important feature changes. A - Feature: Provide sprint reports for active and completed sprints \[[#71891](https://community.openproject.org/wp/71891)\] - Feature: Epic progress chart \[[#76462](https://community.openproject.org/wp/76462)\] - Feature: Labels for work packages \[[#32181](https://community.openproject.org/wp/32181)\] -- Feature: Automation to create PM²/PMflex artefacts \[[#69055](https://community.openproject.org/wp/69055)\] +- Feature: Automation to create PM²/PMflex artifacts \[[#69055](https://community.openproject.org/wp/69055)\] - Feature: Cumulative flow diagram \[[#46856](https://community.openproject.org/wp/46856)\] - Feature: Introduce burnup charts \[[#71381](https://community.openproject.org/wp/71381)\] - Feature: Provide velocity charts \[[#71903](https://community.openproject.org/wp/71903)\] diff --git a/docs/system-admin-guide/authentication/ldap-connections/ldap-department-synchronization/README.md b/docs/system-admin-guide/authentication/ldap-connections/ldap-department-synchronization/README.md index 203932e41b70..4812adc3105d 100644 --- a/docs/system-admin-guide/authentication/ldap-connections/ldap-department-synchronization/README.md +++ b/docs/system-admin-guide/authentication/ldap-connections/ldap-department-synchronization/README.md @@ -14,7 +14,7 @@ keywords: synchronize ldap departments, ldap department, organizational unit, or In OpenProject Enterprise edition, you can mirror the organizational unit (OU) structure of your LDAP or Active Directory into the OpenProject [organization](../../../users-permissions/organization/): each OU below a configured base DN becomes a department, and users are assigned to the department of the OU they reside in. This guide assumes that you: - have set up your LDAP authentication source (see the “[Manage LDAP authentication](../../ldap-connections/)” guide) -- have an LDAP subtree in which departments are modelled as organizational unit entries, with user entries placed directly below the OU they belong to +- have an LDAP subtree in which departments are modeled as organizational unit entries, with user entries placed directly below the OU they belong to > [!NOTE] > This feature is available for both Enterprise cloud and Enterprise on-premises. When using Enterprise cloud, your LDAP server must be reachable from the OpenProject cloud infrastructure, which typically means exposing it to the internet, which is not recommended. This is a network and security consideration for your organization to evaluate. Consider using [SAML](../../saml/) or [SCIM provisioning](../../scim/) as a more secure alternative. diff --git a/docs/system-admin-guide/authentication/openid-providers/README.md b/docs/system-admin-guide/authentication/openid-providers/README.md index c827052a9b5a..0808c94defab 100644 --- a/docs/system-admin-guide/authentication/openid-providers/README.md +++ b/docs/system-admin-guide/authentication/openid-providers/README.md @@ -239,7 +239,7 @@ For example: Keycloak allows you to map custom properties of the user. This allo OpenProject can optionally synchronize groups of users when they log in. If you want to enable this, you have to enable the checkbox "Synchronize groups". OpenProject will expect a claim with an array of group names that the user is a member of. By default this claim is expected to be named `groups`, but you can change this if desired. -The default behaviour of OpenProject is to create a new group for each unknown group listed in this claim. It will match existing groups by their name before creating a new group. You can later rename groups created this way in the group management UI, they will still be linked +The default behavior of OpenProject is to create a new group for each unknown group listed in this claim. It will match existing groups by their name before creating a new group. You can later rename groups created this way in the group management UI, they will still be linked to the ID with which they are referenced in OpenID Connect claims and recognized that way. Once this option is enabled, the identity provider becomes fully responsible for managing group assignments. Each time a user logs in through this provider, only the group memberships declared by the identity provider will be assigned to that user. Any group memberships not declared by the identity provider will be removed. diff --git a/docs/system-admin-guide/files/external-file-storages/health-status/README.md b/docs/system-admin-guide/files/external-file-storages/health-status/README.md index c9247cca62a4..2bf81bbcc5da 100644 --- a/docs/system-admin-guide/files/external-file-storages/health-status/README.md +++ b/docs/system-admin-guide/files/external-file-storages/health-status/README.md @@ -40,7 +40,7 @@ There are several possible errors that can occur during the connection test. Whi | Error code | Error description | Possible reasons | Next steps and solutions | |--------------------|-------------------------------------------|-----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------| -| ERR_NOT_CONFIGURED | The file storage is not fully configured. | Important data is missing, so that the file storage is labelled incomplete. | Check the input fields and fill in the missing data. | +| ERR_NOT_CONFIGURED | The file storage is not fully configured. | Important data is missing, so that the file storage is labeled incomplete. | Check the input fields and fill in the missing data. | | ERR_UNKNOWN_ERROR | An unknown error occurred. | There can be multiple reasons and the error source was not foreseen. | Errors of this kind are logged to the server logs. Look for a log entry starting with `Connection validation failed with unknown error:` | ### Error codes specific to OneDrive and SharePoint diff --git a/docs/system-admin-guide/manage-work-packages/work-package-types/pdf-export/README.md b/docs/system-admin-guide/manage-work-packages/work-package-types/pdf-export/README.md index 0bb8c757a848..60bc9cd48f43 100644 --- a/docs/system-admin-guide/manage-work-packages/work-package-types/pdf-export/README.md +++ b/docs/system-admin-guide/manage-work-packages/work-package-types/pdf-export/README.md @@ -3,12 +3,12 @@ sidebar_navigation: title: Generate PDF priority: 400 description: Configure PDF exports for a work package type in OpenProject. -keywords: work package PDF, PDF export, work package types, PDF templates, PMflex Artefact, automatic artefact export +keywords: work package PDF, PDF export, work package types, PDF templates, PMflex Artifact, automatic artifact export --- # Configure PDF exports for work package types -Under **Administration → Work packages → Types**, select a work package type and open the **Generate PDF** tab to configure how a single work package of this type is exported as a PDF. The tab contains two sections: the available export templates and the automatic artefact export. +Under **Administration → Work packages → Types**, select a work package type and open the **Generate PDF** tab to configure how a single work package of this type is exported as a PDF. The tab contains two sections: the available export templates and the automatic artifact export. ## Activate templates for PDF exports @@ -31,7 +31,7 @@ The following templates are available: - **Attributes and description** – Work package attributes present in the current form together with the description. - **Contract** – Work package details formatted according to the standard German contract form. -- **PMflex Artefact** – Work package details rendered as a PMflex Artefact. +- **PMflex Artifact** – Work package details rendered as a PMflex Artifact. ### Configure a PDF export template @@ -45,11 +45,11 @@ Click **Save** to apply your changes. Click **Reset to default** to restore the default settings for this template, or **Cancel** to leave the configuration page without saving your changes. -## Automatic artefact export +## Automatic artifact export -![Generate PDF tab under work package types settings in OpenProject administration, showing automatic artefact export options](openproject_system_guide_work_package_types_pdf_tab_options.png) +![Generate PDF tab under work package types settings in OpenProject administration, showing automatic artifact export options](openproject_system_guide_work_package_types_pdf_tab_options.png) -In addition to exporting on demand, OpenProject can generate a PMflex Artefact PDF automatically whenever the status of a work package of this type changes. Select one of the following options: +In addition to exporting on demand, OpenProject can generate a PMflex Artifact PDF automatically whenever the status of a work package of this type changes. Select one of the following options: - **Off** - no PDF is generated automatically. This is the default. - **Save as work package file attachment** - the generated PDF is saved as a file attachment to the work package. The new attachment is also recorded in the work package Activity. @@ -58,4 +58,4 @@ In addition to exporting on demand, OpenProject can generate a PMflex Artefact P The selection is saved immediately. > [!NOTE] -> The automatic export always uses the PMflex Artefact template, regardless of which templates are enabled for manual exports above. \ No newline at end of file +> The automatic export always uses the PMflex Artifact template, regardless of which templates are enabled for manual exports above. \ No newline at end of file diff --git a/docs/system-admin-guide/projects/project-attributes/README.md b/docs/system-admin-guide/projects/project-attributes/README.md index 64a3f8f3daf8..92b8ef788893 100644 --- a/docs/system-admin-guide/projects/project-attributes/README.md +++ b/docs/system-admin-guide/projects/project-attributes/README.md @@ -235,7 +235,7 @@ When used as operators, `AND` and `OR` have the same lowest precedence `0`, lowe `SWITCH(300, 100, 1, 200, 2)` => invalid -`CASE` provides similar behaviour using keyword form. Invalid if no branch matches and there is no `ELSE`: +`CASE` provides similar behavior using keyword form. Invalid if no branch matches and there is no `ELSE`: `CASE 200 WHEN 100 THEN 1 WHEN 200 THEN 2 ELSE 3 END` => `2` diff --git a/docs/system-admin-guide/wikis/wiki-providers/health-status/README.md b/docs/system-admin-guide/wikis/wiki-providers/health-status/README.md index 74794c727479..67f79891c4bf 100644 --- a/docs/system-admin-guide/wikis/wiki-providers/health-status/README.md +++ b/docs/system-admin-guide/wikis/wiki-providers/health-status/README.md @@ -39,7 +39,7 @@ There are several possible errors that can occur during the connection test. Whi | Error code | Error description | Possible reasons | Next steps and solutions | |--------------------|-------------------------------------------|-----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------| -| ERR_NOT_CONFIGURED | The wiki provider is not fully configured. | Important data is missing, so the wiki provider is labelled incomplete. | Check the input fields and fill in the missing data. | +| ERR_NOT_CONFIGURED | The wiki provider is not fully configured. | Important data is missing, so the wiki provider is labeled incomplete. | Check the input fields and fill in the missing data. | | WRN_UID_MISMATCH | The universal identifier of the provider does not match the one initially stored for it. | The URL might have changed to point to another wiki instance or the wiki provider was reinstalled from scratch. | If you accidentally switched the URL from one instance to another, switch it back. If you intended to point to a new instance, create a new wiki provider instead. | | ERR_UNKNOWN_ERROR | An unknown error occurred. | There can be multiple reasons, and the error source was not anticipated. | Errors of this kind are logged to the server logs. Look for a log entry starting with `Connection validation failed with unknown error:` | diff --git a/docs/use-cases/project-management-pm2-pmflex/README.md b/docs/use-cases/project-management-pm2-pmflex/README.md index 9110705c6da1..ab4489a10bb1 100644 --- a/docs/use-cases/project-management-pm2-pmflex/README.md +++ b/docs/use-cases/project-management-pm2-pmflex/README.md @@ -38,7 +38,7 @@ The following sections focus on PM² concepts that require a specific mapping or | Aspect | Mapping and guidance | | --- | --- | -| Meaning in PM² | [Project roles](../../project-management-guide/4-project-organisation-and-roles/#42-project-organisation-layers-and-roles) define the responsibilities and decision-making authority within the PM² governance model. | +| Meaning in PM² | [Project roles](../../project-management-guide/4-project-organisation-and-roles/#42-project-organization-layers-and-roles) define the responsibilities and decision-making authority within the PM² governance model. | | Representation in OpenProject | [Project members with roles](../../user-guide/members/) | | System-wide configuration | Create project roles and assign permissions under [Administration → Users and permissions → Roles and permissions](../../system-admin-guide/users-permissions/roles-permissions/#customize-roles-with-individual-permissions). | | Project-specific configuration | Add members and assign the appropriate PM² role in the project's [Members module](../../user-guide/members/). | @@ -71,23 +71,23 @@ The following sections focus on PM² concepts that require a specific mapping or | Aspect | Mapping and guidance | | --- | --- | -| Meaning in PM² | [Project deliverables](../../project-management-guide/9-monitor-and-control/#910-manage-deliverables-acceptance) are the products or services produced by the project. They are formally reviewed and accepted against the criteria in the Deliverables Acceptance Plan. They are distinct from the management artefacts used to govern the project. | +| Meaning in PM² | [Project deliverables](../../project-management-guide/9-monitor-and-control/#910-manage-deliverables-acceptance) are the products or services produced by the project. They are formally reviewed and accepted against the criteria in the Deliverables Acceptance Plan. They are distinct from the management artifacts used to govern the project. | | Representation in OpenProject | Deliverables are represented as [work packages](../../user-guide/work-packages/). Their acceptance criteria and status can be captured in the work package form and documented through related Approval or Decision work packages. | | System-wide configuration | Create and configure a Deliverable type under [Administration → Work packages → Types](../../system-admin-guide/manage-work-packages/work-package-types/#create-new-work-package-type). Add any required acceptance fields to its form. | | Project-specific configuration | [Enable the Deliverable type and relevant custom fields](../../user-guide/projects/project-settings/work-packages/) for the project. | | Demo | — | | Potential product iteration | — | -### PM² artefacts +### PM² artifacts | Aspect | Mapping and guidance | | --- | --- | -| Meaning in PM² | [PM² artefacts](../../project-management-guide/appendices/#e-1-pm-artefacts--activities-summary-tables-and-diagrams) document the information and decisions produced while managing a project. | +| Meaning in PM² | [PM² artifacts](../../project-management-guide/appendices/#e-1-pm-artifacts--activities-summary-tables-and-diagrams) document the information and decisions produced while managing a project. | | Included terms | [Project Initiation Request](../../project-management-guide/5-initiating-phase/#52-project-initiation-request), [Business Case](../../project-management-guide/5-initiating-phase/#53-business-case), [Project Charter](../../project-management-guide/5-initiating-phase/#54-project-charter), [Project Handbook](../../project-management-guide/6-planning-phase/#62-project-handbook), [Project Stakeholder Matrix](../../project-management-guide/6-planning-phase/#63-project-stakeholder-matrix), [Project Work Plan](../../project-management-guide/6-planning-phase/#64-project-work-plan), [Outsourcing Plan](../../project-management-guide/6-planning-phase/#65-outsourcing-plan), [Deliverables Acceptance Plan](../../project-management-guide/6-planning-phase/#66-deliverables-acceptance-plan), [Transition Plan](../../project-management-guide/6-planning-phase/#67-transition-plan), [Business Implementation Plan](../../project-management-guide/6-planning-phase/#68-business-implementation-plan), [Project Status Report](../../project-management-guide/7-executing-phase/#74-project-reporting), [Project-End Report](../../project-management-guide/8-closing-phase/#83-project-end-report), [Quality Review Report](../../project-management-guide/9-monitor-and-control/#99-manage-quality) and [Change Request](../../project-management-guide/9-monitor-and-control/#96-manage-project-change) | -| Representation in OpenProject | Each artefact is a [custom work package type](../../system-admin-guide/manage-work-packages/work-package-types/) with a pre-filled description. Artefacts can include [project attributes](../../user-guide/work-packages/edit-work-package/#project-attributes-in-work-packages) and be exported with the [PMflex Artefact PDF template](../../user-guide/work-packages/exporting/work-package-pdf/#pmflex-artefact). | -| System-wide configuration | Create and configure artefact types under [Administration → Work packages → Types](../../system-admin-guide/manage-work-packages/work-package-types/#create-new-work-package-type). Configure their form, project attributes, PDF templates and [automatic artefact export](../../system-admin-guide/manage-work-packages/work-package-types/pdf-export/#automatic-artefact-export) on the same administration page. | -| Project-specific configuration | [Enable the artefact work package types](../../user-guide/projects/project-settings/work-packages/#work-package-types) for the project. A project template is recommended. | -| Demo | [Project Initiation Request](https://pm2.openproject.com/wp/537); [list of all PM² artefacts](https://pm2.openproject.com/projects/pm2-test/work_packages?query_id=68) | +| Representation in OpenProject | Each artifact is a [custom work package type](../../system-admin-guide/manage-work-packages/work-package-types/) with a pre-filled description. Artifacts can include [project attributes](../../user-guide/work-packages/edit-work-package/#project-attributes-in-work-packages) and be exported with the [PMflex Artifact PDF template](../../user-guide/work-packages/exporting/work-package-pdf/#pmflex-artifact). | +| System-wide configuration | Create and configure artifact types under [Administration → Work packages → Types](../../system-admin-guide/manage-work-packages/work-package-types/#create-new-work-package-type). Configure their form, project attributes, PDF templates and [automatic artifact export](../../system-admin-guide/manage-work-packages/work-package-types/pdf-export/#automatic-artifact-export) on the same administration page. | +| Project-specific configuration | [Enable the artifact work package types](../../user-guide/projects/project-settings/work-packages/#work-package-types) for the project. A project template is recommended. | +| Demo | [Project Initiation Request](https://pm2.openproject.com/wp/537); [list of all PM² artifacts](https://pm2.openproject.com/projects/pm2-test/work_packages?query_id=68) | | Potential product iteration | [#67726](https://community.openproject.org/wp/67726) Project business case widget for project overview
    [#68058](https://community.openproject.org/wp/68058) Stakeholder module to list all relevant project stakeholders
    [#30528](https://community.openproject.org/wp/30528) Project status reporting module
    [#66309](https://community.openproject.org/wp/66309) Live collaboration for documents | ### Project logs @@ -126,7 +126,7 @@ Each PM² project is established as an individual OpenProject project, incorpora - **Project members** assigned to specific PM² roles (Project Owner, Business Manager, Project Manager, Project Steering Committee etc.) - **Project life cycle / phases** to split projects into the four sequential and non-overlapping PM² project life cycle phases -- **Custom work packages** to mirror the PM²-specific artefacts (e.g. Business Case, Project Handbook etc.) incl. official PM² artefacts templates +- **Custom work packages** to mirror the PM²-specific artifacts (e.g. Business Case, Project Handbook etc.) incl. official PM² artifacts templates - **Gantt charts** for giving you a visual timeline of your PM² project - **Meetings module** to help you prepare meetings (incl. agenda, reference to work packages) and collect all meeting-relevant information in one place @@ -155,21 +155,21 @@ To conduct the approval process we suggest to use work packages in combination w ![Initiating phase-exit checklist in the meeting module in OpenProject](openproject_use_case_PM2_meeting-phase-review.png) -### How to create and share PM² artefacts with OpenProject? +### How to create and share PM² artifacts with OpenProject? -PM² methodology includes specific **deliverables** that can be managed through OpenProject's custom work packages. To do so, create custom work packages for PM² artefacts like Project Charter, Business Case, Project Work Plan etc. +PM² methodology includes specific **deliverables** that can be managed through OpenProject's custom work packages. To do so, create custom work packages for PM² artifacts like Project Charter, Business Case, Project Work Plan etc. -While creating work packages add the official templates as pre-filled description of the newly created work package types. Whenever a user will create a new artefact using the work package, the template will be automatically visible and needs only to be filled out with relevant project data. +While creating work packages add the official templates as pre-filled description of the newly created work package types. Whenever a user will create a new artifact using the work package, the template will be automatically visible and needs only to be filled out with relevant project data. ![Setting up work package templates in OpenProject](openproject_use_case_PM2_work_package_templates.png) Administrators can configure which [project attributes are displayed for each work package type](../../system-admin-guide/manage-work-packages/work-package-types/project-attributes/#display-project-attributes-in-work-packages). Project members can then view and edit this project-level information directly in the work package's [Project attributes tab](../../user-guide/work-packages/edit-work-package/#project-attributes-in-work-packages). -Completed artefacts can be exported with the dedicated [PMflex Artefact PDF template](../../user-guide/work-packages/exporting/work-package-pdf/#pmflex-artefact). Administrators can also configure an [automatic artefact export](../../system-admin-guide/manage-work-packages/work-package-types/pdf-export/#automatic-artefact-export) whenever a work package status changes. The generated PDF can be attached to the work package or uploaded to the project's connected Nextcloud folder. +Completed artifacts can be exported with the dedicated [PMflex Artifact PDF template](../../user-guide/work-packages/exporting/work-package-pdf/#pmflex-artifact). Administrators can also configure an [automatic artifact export](../../system-admin-guide/manage-work-packages/work-package-types/pdf-export/#automatic-artifact-export) whenever a work package status changes. The generated PDF can be attached to the work package or uploaded to the project's connected Nextcloud folder. -Since all artefacts can be stored directly within work packages, OpenProject is your single source of truth providing all relevant project information. Everyone from the team can always access the current version of artefacts. +Since all artifacts can be stored directly within work packages, OpenProject is your single source of truth providing all relevant project information. Everyone from the team can always access the current version of artifacts. -If you want to be up to date with all changes within certain artefacts, e.g. Project Handbook, just add your name to the watchers list and thanks to e-mail notifications you will never miss an update. +If you want to be up to date with all changes within certain artifacts, e.g. Project Handbook, just add your name to the watchers list and thanks to e-mail notifications you will never miss an update. ![Adding watchers within OpenProject](openproject_use_case_PM2_watchers.png) @@ -179,8 +179,8 @@ OpenProject provides multiple views for managing PM² project work effectively. **Table view:** -- Tabular display of all project artefacts and deliverables -- Customizable sorting, grouping, and filtering by PM² phases or artefact types +- Tabular display of all project artifacts and deliverables +- Customizable sorting, grouping, and filtering by PM² phases or artifact types These tables are highly customizable and can be [configured](../../user-guide/work-packages/work-package-table-configuration) to show precisely the information you need. Tables can also be **sorted** (for example by id, name, start dates, project, assignee, priority), **grouped** and **filtered** to create highly precise views. They can also show nested parent-children relations in **hierarchy view**. @@ -191,7 +191,7 @@ To quickly access your most used table views, save these as your **favorite filt **Gantt View:** - Timeline-based visualization of PM² phases -- Dependencies between tasks and artefacts +- Dependencies between tasks and artifacts - Critical path analysis for phase gate readiness The [Gantt chart](../../user-guide/gantt-chart) module allows you to quickly visualize planning of each phase in a timeline view that also displays [work package relations](../../user-guide/work-packages/work-package-relations-hierarchies). Like table view, it can be filtered to create custom views that can be saved. @@ -218,11 +218,11 @@ The **meetings module** in OpenProject allows you to manage and document your PM PM² emphasizes **accountability, transparency, and stakeholder communication**, which OpenProject supports through: -- **Project overview** for real-time phase and artefact status +- **Project overview** for real-time phase and artifact status - **Custom reporting** aligned with PM² governance requirements - **Time tracking** for capacity management and phase effort analysis - **Stakeholder communication** through automated notifications and status updates -- **[PMflex Artefact PDF export](../../user-guide/work-packages/exporting/work-package-pdf/#pmflex-artefact)** for sharing structured artefacts with users without OpenProject access +- **[PMflex Artifact PDF export](../../user-guide/work-packages/exporting/work-package-pdf/#pmflex-artifact)** for sharing structured artifacts with users without OpenProject access ![Project overview in OpenProject](openproject_use_case_PM2_project_overview.png) diff --git a/docs/user-guide/projects/project-home/README.md b/docs/user-guide/projects/project-home/README.md index 2d60498d16d3..5e225d356aab 100644 --- a/docs/user-guide/projects/project-home/README.md +++ b/docs/user-guide/projects/project-home/README.md @@ -3,7 +3,7 @@ sidebar_navigation: title: Project home page priority: 700 description: Learn how to configure a project overview page -keywords: project overview page, project home page, project home, project overview, project dashboard, project life cycle, life cycle, lifecycle, project lifecycle, favorite, favourite, archive, project attribute +keywords: project overview page, project home page, project home, project overview, project dashboard, project life cycle, life cycle, lifecycle, project lifecycle, favorite, favorite, archive, project attribute --- # Project home page diff --git a/docs/user-guide/work-packages/exporting/csv/README.md b/docs/user-guide/work-packages/exporting/csv/README.md index 1157bdca71b2..1f6ba179662f 100644 --- a/docs/user-guide/work-packages/exporting/csv/README.md +++ b/docs/user-guide/work-packages/exporting/csv/README.md @@ -31,7 +31,7 @@ You can choose which columns will be displayed in the table (excluding long text ## Escaped formulas -Values that start with a character a spreadsheet application could interpret as a formula, such as `=` or `+`, are escaped by default. This protects you from formula injection when the file is opened. Administrators can change this behaviour in the [export settings](../../../../system-admin-guide/system-settings/exports/#escape-control-characters-in-csv-exports) in the system administration. +Values that start with a character a spreadsheet application could interpret as a formula, such as `=` or `+`, are escaped by default. This protects you from formula injection when the file is opened. Administrators can change this behavior in the [export settings](../../../../system-admin-guide/system-settings/exports/#escape-control-characters-in-csv-exports) in the system administration. ## Export limit diff --git a/docs/user-guide/work-packages/exporting/work-package-pdf/README.md b/docs/user-guide/work-packages/exporting/work-package-pdf/README.md index 9cc5f2bd82c2..ba3ae071ba59 100644 --- a/docs/user-guide/work-packages/exporting/work-package-pdf/README.md +++ b/docs/user-guide/work-packages/exporting/work-package-pdf/README.md @@ -3,7 +3,7 @@ sidebar_navigation: title: Work package PDF export priority: 400 description: How to export a single work package in PDF format in OpenProject -keywords: work package exports, single work package, PDF, contract template, PMflex artefact +keywords: work package exports, single work package, PDF, contract template, PMflex artifact --- # Work package PDF export @@ -68,10 +68,10 @@ In addition to the options above, you can adjust the following: - **Footer text**, which is displayed at the center of the footer of every page, with the export date to the left and the page number to the right of it. The work package subject will be suggested as footer text. You can adjust the suggested footer text. -## PMflex Artefact +## PMflex Artifact -This template renders the work package as a PMflex Artefact: a structured document that combines the context of the project with the content of the work package and its related work packages. -The [PM² Project Management Guide](../../../../project-management-guide/3-overview-pm2/#33-pm-phase-drivers-and-key-artefacts) describes the key artefacts of the methodology and the phases they belong to. +This template renders the work package as a PMflex Artifact: a structured document that combines the context of the project with the content of the work package and its related work packages. +The [PM² Project Management Guide](../../../../project-management-guide/3-overview-pm2/#33-pm-phase-drivers-and-key-artifacts) describes the key artifacts of the methodology and the phases they belong to. The export contains: @@ -82,7 +82,7 @@ The export contains: - The project's lifecycle (phases) and budgets, if the options below are activated. - All work package attributes, grouped as in the form configuration of the work package type. - Related work packages from embedded tables of the form configuration. Unlike the other templates, - these are not listed as table rows but rendered with their attributes, their description and their long text custom fields, so the artefact is complete on its own. + these are not listed as table rows but rendered with their attributes, their description and their long text custom fields, so the artifact is complete on its own. In addition to the options above, you can adjust the following: @@ -91,7 +91,7 @@ In addition to the options above, you can adjust the following: - **Project budgets** - if selected, a planned cost breakdown of the project's [budgets](../../../budgets/) is added. Each budget is listed with its planned total, its base amount if it has one, and its planned unit cost and planned labor cost items, each item with its quantity, cost per unit and sum. Every group carries a subtotal and the section closes with a total across all budgets. Spent and available amounts are not part of the export, and budget item comments are not exported. The section is only shown to users who can view the project's budgets, and individual amounts are left blank for users who may not see the underlying rates - just as they are in the budget views, which means the amounts a partially permitted user sees do not necessarily add up to the subtotal shown. This option is deactivated by default. > [!TIP] -> Administrators can configure [automatic artefact export](../../../../system-admin-guide/manage-work-packages/work-package-types/pdf-export/#automatic-artefact-export) for a work package type. The artefact is then generated whenever the status of a work package changes and either added to the work package as an attachment or uploaded to the connected Nextcloud folder of the project. +> Administrators can configure [automatic artifact export](../../../../system-admin-guide/manage-work-packages/work-package-types/pdf-export/#automatic-artifact-export) for a work package type. The artifact is then generated whenever the status of a work package changes and either added to the work package as an attachment or uploaded to the connected Nextcloud folder of the project. ## Generate the export diff --git a/docs/user-guide/work-packages/exporting/xls-excel/README.md b/docs/user-guide/work-packages/exporting/xls-excel/README.md index 2f5e73509652..75e159ed355b 100644 --- a/docs/user-guide/work-packages/exporting/xls-excel/README.md +++ b/docs/user-guide/work-packages/exporting/xls-excel/README.md @@ -32,7 +32,7 @@ If you activate the **Include descriptions** option, an additional column will b If you activate the **Include relations** option, each work package is repeated in a separate row for every relation it has. Work packages without relations are exported in a single row. -Every row is extended by the columns **Relation type**, **Lag** and **Description** of the relation, followed by the selected columns of the related work package. Hierarchy relations are included as well and are labelled _parent of_ and _child of_. +Every row is extended by the columns **Relation type**, **Lag** and **Description** of the relation, followed by the selected columns of the related work package. Hierarchy relations are included as well and are labeled _parent of_ and _child of_. ![OpenProject_work_package_export_excel_relations](openproject_export_excel_with_relations.png) diff --git a/docs/user-guide/work-packages/importing/README.md b/docs/user-guide/work-packages/importing/README.md index ebe956e996cb..893f9ff74d80 100644 --- a/docs/user-guide/work-packages/importing/README.md +++ b/docs/user-guide/work-packages/importing/README.md @@ -148,7 +148,7 @@ A time zone is optional, and may follow the time with or without a space. A cell with no time zone is read in the time zone of your own account, so `2026-09-26 08:09` imported from an account set to Berlin is 08:09 Berlin time. A date with no time at all is read as midnight in -that same zone. A zone name that OpenProject does not recognise is reported rather than ignored, so a +that same zone. A zone name that OpenProject does not recognize is reported rather than ignored, so a cell is never read in a zone other than the one it names. #### Created on and Updated on From a6c1fc0bbb955881c9f07b0467545a43ac3b256a Mon Sep 17 00:00:00 2001 From: Alexander Brandon Coles Date: Thu, 22 Oct 2026 13:09:13 +0100 Subject: [PATCH 05/11] [OP-20545] Use US spelling in modules Converts British spellings in module code comments, spec descriptions, private names such as the hourly rate labelled helper, and the BIM seed texts, whose translations are keyed by path rather than by the English source. Shipped migrations and external payloads keep their spelling. https://community.openproject.org/wp/OP-20545 --- .../lib/omni_auth/flexible_strategy.rb | 2 +- .../work_package_card_list_item_component.rb | 4 +-- .../selection_description_component_spec.rb | 2 +- .../backlogs/work_packages_controller_spec.rb | 2 +- .../work_packages/batch_selection_spec.rb | 2 +- .../work_packages/card_context_menu_spec.rb | 4 +-- .../work_packages/move_via_menu_spec.rb | 2 +- .../work_packages/readonly_card_spec.rb | 2 +- .../spec/models/backlogs/target_spec.rb | 2 +- .../update_service_readonly_spec.rb | 2 +- .../backlogs/spec/support/pages/backlog.rb | 10 +++---- modules/bim/app/seeders/bim.yml | 26 +++++++++---------- .../spec/services/create_ical_service_spec.rb | 2 +- .../hourly_rates/current_rate_component.rb | 6 ++--- .../components/members/current_rate_column.rb | 2 +- .../base_contract_past_months_spec.rb | 2 +- modules/costs/spec/models/rate_spec.rb | 2 +- .../document_types/row_component_spec.rb | 2 +- modules/ldap_groups/config/locales/en.yml | 2 +- .../models/activities/meeting_event_mapper.rb | 2 +- .../features/meeting_notifications_spec.rb | 6 ++--- .../work_package_meetings_tab_spec.rb | 2 +- .../handle_ical_response_service_spec.rb | 2 +- ...e_widget_with_a_negative_time_zone_spec.rb | 4 +-- .../my/time_entries_current_user_spec.rb | 2 +- modules/openid_connect/config/locales/en.yml | 2 +- .../spec/requests/openid_connect_spec.rb | 2 +- .../spec/models/cost_query/group_by_spec.rb | 4 +-- .../reporting/spec/models/cost_report_spec.rb | 2 +- .../timeline/content.rb | 2 +- .../user_card_list/card_component.rb | 2 +- .../user_timeline/allocation_bar_component.rb | 2 +- .../non_working_bar_component.rb | 2 +- .../resource_allocations/base_contract.rb | 2 +- .../resource_management/base_controller.rb | 2 +- .../work_package_selection.rb | 2 +- .../app/models/resource_user_card.rb | 2 +- .../utilization_bar_component_spec.rb | 2 +- .../user_timeline/content_component_spec.rb | 2 +- .../allocated_members_component_spec.rb | 2 +- .../allocatable_work_packages_api_spec.rb | 2 +- .../spec/requests/user_timeline_feeds_spec.rb | 4 +-- .../fit_calculator_spec.rb | 8 +++--- .../oauth_client_credentials.rb | 2 +- .../adapters/results/storage_file_contract.rb | 2 +- .../lib/api/v3/file_links/file_links_api.rb | 4 +-- .../support/components/add_existing_pane.rb | 2 +- .../app/forms/wikis/admin/url_input_form.rb | 2 +- .../update_reverse_inline_wiki_page_links.rb | 2 +- .../admin/redirect_uri_info_component_spec.rb | 2 +- .../wiki_pages/create_service_spec.rb | 2 +- .../open_project/xls_export/xls_views_spec.rb | 2 +- 52 files changed, 81 insertions(+), 81 deletions(-) diff --git a/modules/auth_plugins/lib/omni_auth/flexible_strategy.rb b/modules/auth_plugins/lib/omni_auth/flexible_strategy.rb index 3e6bf0366ede..7cba6996d60d 100644 --- a/modules/auth_plugins/lib/omni_auth/flexible_strategy.rb +++ b/modules/auth_plugins/lib/omni_auth/flexible_strategy.rb @@ -44,7 +44,7 @@ def on_callback_path? ## # Tries to match the request path of the current request with one of the registered providers. - # If a match is found the strategy is initialised with that provider to handle the request. + # If a match is found the strategy is initialized with that provider to handle the request. def match_provider! return false unless providers diff --git a/modules/backlogs/app/components/backlogs/work_package_card_list_item_component.rb b/modules/backlogs/app/components/backlogs/work_package_card_list_item_component.rb index 309aa1183f98..7344961742a5 100644 --- a/modules/backlogs/app/components/backlogs/work_package_card_list_item_component.rb +++ b/modules/backlogs/app/components/backlogs/work_package_card_list_item_component.rb @@ -101,7 +101,7 @@ def card_aria end # Every card row is a sortable item, movable or not: a non-movable row is - # still an addressable position its neighbours anchor drops on. + # still an addressable position its neighbors anchor drops on. def row_data { controller: "sortable-lists--item", @@ -111,7 +111,7 @@ def row_data sortable_lists__item_mobility_value: mobility, # Native drag payload for external consumers; the same absolute URL # as the card menu's "Copy link to clipboard" item. The label above - # doubles as the link text of the text/html flavour. + # doubles as the link text of the text/html flavor. sortable_lists__item_external_url_value: url_helpers.work_package_url(work_package) } end diff --git a/modules/backlogs/spec/components/backlogs/selection_description_component_spec.rb b/modules/backlogs/spec/components/backlogs/selection_description_component_spec.rb index ec9f9e82af35..4b4ddfcab433 100644 --- a/modules/backlogs/spec/components/backlogs/selection_description_component_spec.rb +++ b/modules/backlogs/spec/components/backlogs/selection_description_component_spec.rb @@ -33,7 +33,7 @@ subject(:rendered_component) { render_inline(described_class.new) && page } # `visible: :all` because the element is permanently `hidden`, which is the - # one form of invisibility Capybara::Node::Simple does honour. + # one form of invisibility Capybara::Node::Simple does honor. it "renders the description every selected card points at" do expect(rendered_component) diff --git a/modules/backlogs/spec/controllers/backlogs/work_packages_controller_spec.rb b/modules/backlogs/spec/controllers/backlogs/work_packages_controller_spec.rb index 87902f2f4a17..17a326c5d578 100644 --- a/modules/backlogs/spec/controllers/backlogs/work_packages_controller_spec.rb +++ b/modules/backlogs/spec/controllers/backlogs/work_packages_controller_spec.rb @@ -317,7 +317,7 @@ def turbo_stream_template(action:) let(:prev_id) { first_item.id } let(:optimistic) { "true" } - it "skips the reload because the requested anchor was honoured", :aggregate_failures do + it "skips the reload because the requested anchor was honored", :aggregate_failures do expect(response).to be_successful expect(response).to have_turbo_stream action: "dispatchEvent" expect(response).not_to have_turbo_stream action: "turbo_frame_reload" diff --git a/modules/backlogs/spec/features/work_packages/batch_selection_spec.rb b/modules/backlogs/spec/features/work_packages/batch_selection_spec.rb index 607446e604ee..37192b2599b9 100644 --- a/modules/backlogs/spec/features/work_packages/batch_selection_spec.rb +++ b/modules/backlogs/spec/features/work_packages/batch_selection_spec.rb @@ -141,7 +141,7 @@ it "paints a row with a different background once it is selected" do # Focus is established first and held constant across both reads: a # click would move focus, open the details pane and toggle membership at - # once, leaving the colour difference unattributable. + # once, leaving the color difference unattributable. backlogs_page.focus_work_package_card(story1) unselected_color = backlogs_page.row_background_color(story1) diff --git a/modules/backlogs/spec/features/work_packages/card_context_menu_spec.rb b/modules/backlogs/spec/features/work_packages/card_context_menu_spec.rb index 24dc8a241558..8963ec886dad 100644 --- a/modules/backlogs/spec/features/work_packages/card_context_menu_spec.rb +++ b/modules/backlogs/spec/features/work_packages/card_context_menu_spec.rb @@ -30,9 +30,9 @@ require "spec_helper" require_relative "../../support/pages/backlog" -# Selenium, not Cuprite: the presenter's behaviour hangs on a trusted +# Selenium, not Cuprite: the presenter's behavior hangs on a trusted # `contextmenu` and on a real pointer sequence for the browser's light-dismiss -# to act on, neither of which a synthesised gesture reproduces. +# to act on, neither of which a synthesized gesture reproduces. RSpec.describe "Open a backlog card's action menu contextually", :js, :selenium do let!(:project) do diff --git a/modules/backlogs/spec/features/work_packages/move_via_menu_spec.rb b/modules/backlogs/spec/features/work_packages/move_via_menu_spec.rb index 72a3055fbb65..f26eb65295a5 100644 --- a/modules/backlogs/spec/features/work_packages/move_via_menu_spec.rb +++ b/modules/backlogs/spec/features/work_packages/move_via_menu_spec.rb @@ -72,7 +72,7 @@ items: [sprint_wp1, sprint_wp2, sprint_wp3, sprint_wp4]) # Arm the reload probe before triggering the move: a full frame reload - # (the old behaviour) would still leave the list in the expected order + # (the old behavior) would still leave the list in the expected order # once it settles, so the order assertion alone can't tell an optimistic # client-side move from a reload that happens to finish within the wait # window. The probe does: it only flips if `#backlogs_container` actually diff --git a/modules/backlogs/spec/features/work_packages/readonly_card_spec.rb b/modules/backlogs/spec/features/work_packages/readonly_card_spec.rb index 2b8013426bea..04c1a1297305 100644 --- a/modules/backlogs/spec/features/work_packages/readonly_card_spec.rb +++ b/modules/backlogs/spec/features/work_packages/readonly_card_spec.rb @@ -82,7 +82,7 @@ backlogs_page.drag_work_package(rejected_wp, before: movable_wp) backlogs_page.expect_sprint_items_in_order(sprint, items: [rejected_wp, movable_wp]) - # Dropping a movable neighbour against it proves the read-only card is + # Dropping a movable neighbor against it proves the read-only card is # also still a drop target: confining its drag must not carve a dead zone # out of the list. backlogs_page.drag_work_package(movable_wp, before: rejected_wp) diff --git a/modules/backlogs/spec/models/backlogs/target_spec.rb b/modules/backlogs/spec/models/backlogs/target_spec.rb index 3160d09191b2..7c7c0aa11f4e 100644 --- a/modules/backlogs/spec/models/backlogs/target_spec.rb +++ b/modules/backlogs/spec/models/backlogs/target_spec.rb @@ -127,7 +127,7 @@ expect(described_class.for(described_class::Inbox)).to eq(described_class::InboxId) end - it "raises for an unrecognised container" do + it "raises for an unrecognized container" do expect { described_class.for(Object.new) }.to raise_error(NoMatchingPatternError) end end diff --git a/modules/backlogs/spec/services/backlogs/work_packages/update_service_readonly_spec.rb b/modules/backlogs/spec/services/backlogs/work_packages/update_service_readonly_spec.rb index a3a0c7a469e4..25d0b70ebc8a 100644 --- a/modules/backlogs/spec/services/backlogs/work_packages/update_service_readonly_spec.rb +++ b/modules/backlogs/spec/services/backlogs/work_packages/update_service_readonly_spec.rb @@ -29,7 +29,7 @@ require "spec_helper" -# Pins the server behaviour that Backlogs::Concerns::WorkPackageMovability +# Pins the server behavior that Backlogs::Concerns::WorkPackageMovability # renders decisions from. The card surfaces hide every movement action for a # read-only work package; these examples record what the server would actually # have done, so a change on either side is visible against the other. diff --git a/modules/backlogs/spec/support/pages/backlog.rb b/modules/backlogs/spec/support/pages/backlog.rb index 75d48c473a03..e4a318b98e21 100644 --- a/modules/backlogs/spec/support/pages/backlog.rb +++ b/modules/backlogs/spec/support/pages/backlog.rb @@ -349,7 +349,7 @@ def work_package_row(work_package) find(work_package_selector(work_package)) end - # The row's resolved background colour. Read it twice around one isolated + # The row's resolved background color. Read it twice around one isolated # change, never across two rows and never around a gesture that also # focuses or navigates: the background depends on focus and `aria-current` # too, so anything else makes the difference unattributable. @@ -359,7 +359,7 @@ def row_background_color(work_package) # Moves focus onto the card without a pointer and without any event a # Backlogs controller listens for. Establishes focus before a - # background-colour control read, so a later keyboard gesture on the same + # background-color control read, so a later keyboard gesture on the same # card does not change it a second time. def focus_work_package_card(work_package) work_package_card(work_package).execute_script( @@ -706,7 +706,7 @@ def expect_work_package_not_locked(work_package) end # An unmodified click: narrows the batch to this card and opens its - # details pane. Offset near the top-left corner because the card's centre + # details pane. Offset near the top-left corner because the card's center # sits on the subject link or the actions menu button, both of which the # selection root ignores as interactive descendants. def select_card(work_package) @@ -1129,9 +1129,9 @@ def boolean_filter?(filter) end # Node::Element#click takes the held key and positional options, so no - # action chain is needed. The offset avoids the card's centre, where the + # action chain is needed. The offset avoids the card's center, where the # subject link or actions menu button sits: the selection root ignores a - # gesture starting on either, and which one lands dead centre varies with + # gesture starting on either, and which one lands dead center varies with # the card's content. def modified_click(work_package, key) work_package_card(work_package).click(key, x: 6, y: 6, offset: :position) diff --git a/modules/bim/app/seeders/bim.yml b/modules/bim/app/seeders/bim.yml index 3d78bdd9e1cb..b9e9bea61b74 100644 --- a/modules/bim/app/seeders/bim.yml +++ b/modules/bim/app/seeders/bim.yml @@ -211,7 +211,7 @@ groups: reference: :group__bim_coordinators - t_name: BIM Managers reference: :group__bim_managers - - t_name: BIM Modellers + - t_name: BIM Modelers reference: :group__bim_modellers - t_name: Lead BIM Coordinators reference: :group__lead_bim_coordinators @@ -1113,18 +1113,18 @@ projects: :type: follows :children: - :start: 56 - :t_subject: Modelling initial BIM model + :t_subject: Modeling initial BIM model :reference: :modelling_initial_bim_model :t_description: |- # Goal - * Modelling the initial BIM model + * Modeling the initial BIM model * Creating a BIM model for the whole project team # Description - * According to the gathered data from the customer, the initial model will be modelled - * The model shall be modelled according to the LOD Matrices and contain the information needed + * According to the gathered data from the customer, the initial model will be modeled + * The model shall be modeled according to the LOD Matrices and contain the information needed * ... :status: :default_status_new :type: :default_type_task @@ -1168,7 +1168,7 @@ projects: - :to: :initial_internal_model_check_and_revising :type: follows - :start: 66 - :t_subject: Modelling, first cycle + :t_subject: Modeling, first cycle :t_description: This type is hierarchically a parent of the types "Clash" and "Request", thus represents a general note. :status: :default_status_new @@ -1191,7 +1191,7 @@ projects: # Description - * The external model will be referenced in the BIM platform, thus used for modelling the internal model + * The external model will be referenced in the BIM platform, thus used for modeling the internal model * ... :status: :default_status_new :type: :default_type_task @@ -1202,7 +1202,7 @@ projects: - :to: :submitting_initial_bim_model :type: follows - :start: 67 - :t_subject: Modelling the BIM model + :t_subject: Modeling the BIM model :reference: :modelling_of_the_bim_model :t_description: |- # Goal @@ -1308,7 +1308,7 @@ projects: - :to: :issue_management_first_cycle :type: follows - :start: 84 - :t_subject: Modelling & coordinating, second cycle + :t_subject: Modeling & coordinating, second cycle :reference: :modelling_and_coordinating_second_cycle :t_description: "## Goal\r\n\r\n* ...\r\n\r\n## Description\r\n\r\n* ..." :status: :default_status_new @@ -1320,7 +1320,7 @@ projects: - :to: :finishing_coordination_first_cycle :type: follows - :start: 85 - :t_subject: Modelling & coordinating, ... cycle + :t_subject: Modeling & coordinating, ... cycle :reference: :modelling_and_coordinating_another_cycle :t_description: This type is hierarchically a parent of the types "Clash" and "Request", thus represents a general note. @@ -1333,7 +1333,7 @@ projects: - :to: :modelling_and_coordinating_second_cycle :type: follows - :start: 86 - :t_subject: Modelling & coordinating, (n-th minus 1) cycle + :t_subject: Modeling & coordinating, (n-th minus 1) cycle :reference: :modelling_and_coordinating_penultimate_cycle :t_description: "## Goal\r\n\r\n* ...\r\n\r\n## Description\r\n\r\n* ..." :status: :default_status_new @@ -1345,7 +1345,7 @@ projects: - :to: :modelling_and_coordinating_another_cycle :type: follows - :start: 87 - :t_subject: Modelling & coordinating n-th cycle + :t_subject: Modeling & coordinating n-th cycle :reference: :modelling_and_coordinating_last_cycle :t_description: This type is hierarchically a parent of the types "Clash" and "Request", thus represents a general note. @@ -1358,7 +1358,7 @@ projects: - :to: :modelling_and_coordinating_penultimate_cycle :type: follows - :start: 88 - :t_subject: Finishing modelling & coordinating, n-th cycle + :t_subject: Finishing modeling & coordinating, n-th cycle :reference: :finishing_modelling_and_coordinating :t_description: This type is hierarchically a parent of the types "Clash" and "Request", thus represents a general note. diff --git a/modules/calendar/spec/services/create_ical_service_spec.rb b/modules/calendar/spec/services/create_ical_service_spec.rb index c33282d6993c..61388fe2ce91 100644 --- a/modules/calendar/spec/services/create_ical_service_spec.rb +++ b/modules/calendar/spec/services/create_ical_service_spec.rb @@ -183,7 +183,7 @@ describe "sanitized attributes" do # the iCalendar gem takes care of escaping malicious values - # following specs double check on this behaviour + # following specs double check on this behavior let(:work_package_with_malicious_subject) do create(:work_package, subject: "", project:, due_date: Time.zone.today + 7.days, assigned_to: user) diff --git a/modules/costs/app/components/hourly_rates/current_rate_component.rb b/modules/costs/app/components/hourly_rates/current_rate_component.rb index b27370941955..bacbc05d6da5 100644 --- a/modules/costs/app/components/hourly_rates/current_rate_component.rb +++ b/modules/costs/app/components/hourly_rates/current_rate_component.rb @@ -47,13 +47,13 @@ def wrapper_uniq_by # label names which of the two is in effect. def caption if rate - labelled(I18n.t(:label_current), rate) + labeled(I18n.t(:label_current), rate) elsif fallback_rate - labelled(I18n.t(:label_using_current_default_rate), fallback_rate) + labeled(I18n.t(:label_using_current_default_rate), fallback_rate) end end - def labelled(label, applicable_rate) + def labeled(label, applicable_rate) "#{label}: #{helpers.number_to_currency(applicable_rate.rate)}" end end diff --git a/modules/costs/app/components/members/current_rate_column.rb b/modules/costs/app/components/members/current_rate_column.rb index 7fcfb4c378ad..3ddef54baf79 100644 --- a/modules/costs/app/components/members/current_rate_column.rb +++ b/modules/costs/app/components/members/current_rate_column.rb @@ -53,7 +53,7 @@ def sort_collection(query, sort_clause, sort_columns) # 2) a user's rate in one of the given project's parents # 3) a user's default rate # - # This mirrors the behaviour as implemented in `HourlyRate#at_date_for_user_in_project`. + # This mirrors the behavior as implemented in `HourlyRate#at_date_for_user_in_project`. def join_rate(query) query.joins( ActiveRecord::Base.sanitize_sql_array( diff --git a/modules/costs/spec/contracts/time_entries/base_contract_past_months_spec.rb b/modules/costs/spec/contracts/time_entries/base_contract_past_months_spec.rb index 5ed86a851daa..f1c5a1c5a0a5 100644 --- a/modules/costs/spec/contracts/time_entries/base_contract_past_months_spec.rb +++ b/modules/costs/spec/contracts/time_entries/base_contract_past_months_spec.rb @@ -137,7 +137,7 @@ def expect_rejected(call) # Evaluated inside the before hook, so still relative to the real date. let(:next_month) { Date.current.next_month.beginning_of_month } - # Evaluated inside the examples, so relative to the date travelled to. + # Evaluated inside the examples, so relative to the date traveled to. let(:month_that_just_ended) { Date.current.prev_month.beginning_of_month } let(:an_earlier_month) { Date.current.prev_month.prev_month.beginning_of_month } diff --git a/modules/costs/spec/models/rate_spec.rb b/modules/costs/spec/models/rate_spec.rb index 81f140010af9..443a05f5f920 100644 --- a/modules/costs/spec/models/rate_spec.rb +++ b/modules/costs/spec/models/rate_spec.rb @@ -138,7 +138,7 @@ end end - # Behavioural coverage for the entry lookups the rate callbacks drive. Written + # Behavioral coverage for the entry lookups the rate callbacks drive. Written # against the returned entries only, so it holds regardless of how the queries # are built. describe Rate::Methods do diff --git a/modules/documents/spec/components/documents/admin/document_types/row_component_spec.rb b/modules/documents/spec/components/documents/admin/document_types/row_component_spec.rb index 30c07f19da9c..da11ad11ac73 100644 --- a/modules/documents/spec/components/documents/admin/document_types/row_component_spec.rb +++ b/modules/documents/spec/components/documents/admin/document_types/row_component_spec.rb @@ -87,7 +87,7 @@ expect(rendered_component).to have_css(".DragHandle.hide-when-print") end - it "sits behind a labelled actions button" do + it "sits behind a labeled actions button" do expect(rendered_component).to have_button(accessible_name: "Document type actions") end diff --git a/modules/ldap_groups/config/locales/en.yml b/modules/ldap_groups/config/locales/en.yml index b3dd4578f26d..57b859b47b6d 100644 --- a/modules/ldap_groups/config/locales/en.yml +++ b/modules/ldap_groups/config/locales/en.yml @@ -99,7 +99,7 @@ en: plural: 'Synchronized LDAP groups' singular: 'Synchronized LDAP group' upsell: - description: 'Take advantage of synchronised LDAP groups to manage users, change their permissions and facilitate user management across groups.' + description: 'Take advantage of synchronized LDAP groups to manage users, change their permissions and facilitate user management across groups.' plugin_openproject_ldap_groups: description: "Synchronization of LDAP group memberships." name: "OpenProject LDAP groups" diff --git a/modules/meeting/app/models/activities/meeting_event_mapper.rb b/modules/meeting/app/models/activities/meeting_event_mapper.rb index 10ef14d25b62..9ac27014ea31 100644 --- a/modules/meeting/app/models/activities/meeting_event_mapper.rb +++ b/modules/meeting/app/models/activities/meeting_event_mapper.rb @@ -199,7 +199,7 @@ def start_time(journal_time) end end - # duplicates necessary behaviour from Activities::Fetcher + # duplicates necessary behavior from Activities::Fetcher def event_title(_journal, data) start_time = data[:meeting_start_time] end_time = start_time + data[:meeting_duration].to_f.hours diff --git a/modules/meeting/spec/features/meeting_notifications_spec.rb b/modules/meeting/spec/features/meeting_notifications_spec.rb index cb9de01eff6e..acf65f855be4 100644 --- a/modules/meeting/spec/features/meeting_notifications_spec.rb +++ b/modules/meeting/spec/features/meeting_notifications_spec.rb @@ -57,7 +57,7 @@ def perform_debounced_meeting_notification_jobs perform_enqueued_jobs end - shared_examples "notification checkbox behaviour" do + shared_examples "notification checkbox behavior" do it "shows checkbox checked initially" do page.find_by_id("open-meeting-button").click @@ -102,7 +102,7 @@ def perform_debounced_meeting_notification_jobs meetings_page.click_create end - include_examples "notification checkbox behaviour" + include_examples "notification checkbox behavior" it "sets and toggles the calendar updates state" do edit_start_time = "12:00" @@ -248,7 +248,7 @@ def perform_debounced_meeting_notification_jobs meetings_page.click_create end - include_examples "notification checkbox behaviour" + include_examples "notification checkbox behavior" end context "for a recurring meeting" do diff --git a/modules/meeting/spec/features/structured_meetings/work_package_meetings_tab_spec.rb b/modules/meeting/spec/features/structured_meetings/work_package_meetings_tab_spec.rb index 115b03d1f435..362183dabe0e 100644 --- a/modules/meeting/spec/features/structured_meetings/work_package_meetings_tab_spec.rb +++ b/modules/meeting/spec/features/structured_meetings/work_package_meetings_tab_spec.rb @@ -638,7 +638,7 @@ expect(page.find(".op-meeting-agenda-item--presenter")).to have_text(user.name) end - context "when testing section selection behaviour" do + context "when testing section selection behavior" do shared_let(:meeting_without_sections) { create(:meeting, project:, start_time: 1.hour.from_now) } shared_let(:recurring_meeting) do create(:recurring_meeting, project:) diff --git a/modules/meeting/spec/services/all_meetings/handle_ical_response_service_spec.rb b/modules/meeting/spec/services/all_meetings/handle_ical_response_service_spec.rb index a6b86ec092dc..dcb07aa6f771 100644 --- a/modules/meeting/spec/services/all_meetings/handle_ical_response_service_spec.rb +++ b/modules/meeting/spec/services/all_meetings/handle_ical_response_service_spec.rb @@ -666,7 +666,7 @@ create(:recurring_meeting_historic_schedule, recurring_meeting:, uid: "newer@example.com") end - it "still recognises the older UID" do + it "still recognizes the older UID" do expect(subject).to be_success expect(subject.errors).to be_empty end diff --git a/modules/my_page/spec/features/my/my_spent_time_widget_with_a_negative_time_zone_spec.rb b/modules/my_page/spec/features/my/my_spent_time_widget_with_a_negative_time_zone_spec.rb index 832d32cc351a..0bde71820fde 100644 --- a/modules/my_page/spec/features/my/my_spent_time_widget_with_a_negative_time_zone_spec.rb +++ b/modules/my_page/spec/features/my/my_spent_time_widget_with_a_negative_time_zone_spec.rb @@ -89,14 +89,14 @@ end # The browser runs five hours behind the server here, which must not move the entry - # to the neighbouring day. + # to the neighboring day. select_day(thursday) time_logging_modal.has_field_with_value "spent_on", thursday.iso8601 end # The slot lanes lie over the day columns and are what a click actually lands on, so the - # day is picked by clicking a lane at that column's horizontal centre, as a user does. + # day is picked by clicking a lane at that column's horizontal center, as a user does. def select_day(date) # The stack renders once its frame has loaded, so wait for the grid before measuring it. find("td.fc-timegrid-col[data-date='#{date.iso8601}']") diff --git a/modules/my_page/spec/features/my/time_entries_current_user_spec.rb b/modules/my_page/spec/features/my/time_entries_current_user_spec.rb index 4e085fbff3c8..4bdc1dd80a8f 100644 --- a/modules/my_page/spec/features/my/time_entries_current_user_spec.rb +++ b/modules/my_page/spec/features/my/time_entries_current_user_spec.rb @@ -158,7 +158,7 @@ def step_to_today end # The slot lanes lie over the day columns and are what a click actually lands on, so the - # day is picked by clicking a lane at that column's horizontal centre, as a user does. + # day is picked by clicking a lane at that column's horizontal center, as a user does. def select_day(date) # The stack renders once its frame has loaded, so wait for the grid before measuring it. find("td.fc-timegrid-col[data-date='#{date.iso8601}']") diff --git a/modules/openid_connect/config/locales/en.yml b/modules/openid_connect/config/locales/en.yml index ff2622f652e0..3cefb59f4c65 100644 --- a/modules/openid_connect/config/locales/en.yml +++ b/modules/openid_connect/config/locales/en.yml @@ -81,7 +81,7 @@ en: group_regexes: One regular expression pattern per line. Please read [the documentation](docs_url) for more information on how to do this. group_regexes_detail_html: Optionally define patterns using regular expressions to match group names from the groups claim. For example, entering a pattern like ^Level1/Level2/([\w/]+)$ will extract the group “Groupname/SubGroup” from a response including “Level1/Level2/GroupName/SubGroup”. If no pattern matches, the group is ignored. Leave empty to synchronize all groups using their full group name. group_regexes_testing: "Click on 'Test pattern' to test your regular expression pattern against sample OIDC userinfo." - group_sync: Automatically extract and synchronise group membership information from the identity provider. + group_sync: Automatically extract and synchronize group membership information from the identity provider. groups_claim: Specify the name of the claim that's expected to indicate the group names that the user is a member of. limit_self_registration: If enabled, users can only register using this provider if configuration on the provider's end allows it. mapping_admin: > diff --git a/modules/openid_connect/spec/requests/openid_connect_spec.rb b/modules/openid_connect/spec/requests/openid_connect_spec.rb index 4f72671f1efa..9f4dfdcb8325 100644 --- a/modules/openid_connect/spec/requests/openid_connect_spec.rb +++ b/modules/openid_connect/spec/requests/openid_connect_spec.rb @@ -54,7 +54,7 @@ let(:oidc_sid) { "oidc-session-id-42" } before do - # The redirect will include an authorisation code. + # The redirect will include an authorization code. # Since we don't actually get a valid code in the test we will stub the resulting AccessToken. allow_any_instance_of(OpenIDConnect::Client).to receive(:access_token!) do instance_double(OpenIDConnect::AccessToken, diff --git a/modules/reporting/spec/models/cost_query/group_by_spec.rb b/modules/reporting/spec/models/cost_query/group_by_spec.rb index 9bb7c3e4db61..71f4bca6e85a 100644 --- a/modules/reporting/spec/models/cost_query/group_by_spec.rb +++ b/modules/reporting/spec/models/cost_query/group_by_spec.rb @@ -291,12 +291,12 @@ expect(query.result.count).to eq(8) end - it "accepts row as a specialised group_by" do + it "accepts row as a specialized group_by" do query.row :project_id expect(query.chain.type).to eq(:row) end - it "accepts column as a specialised group_by" do + it "accepts column as a specialized group_by" do query.column :project_id expect(query.chain.type).to eq(:column) end diff --git a/modules/reporting/spec/models/cost_report_spec.rb b/modules/reporting/spec/models/cost_report_spec.rb index aee107fb29eb..9b2fe1408454 100644 --- a/modules/reporting/spec/models/cost_report_spec.rb +++ b/modules/reporting/spec/models/cost_report_spec.rb @@ -42,7 +42,7 @@ expect(PersistedView.find(instance.id)).to be_a(described_class) end - it "categorises itself as a cost report" do + it "categorizes itself as a cost report" do instance.save! expect(instance.category).to eq("cost_report") diff --git a/modules/resource_management/app/components/resource_planner_views/timeline/content.rb b/modules/resource_management/app/components/resource_planner_views/timeline/content.rb index 0609a8cf7b8d..cc5500ec0a07 100644 --- a/modules/resource_management/app/components/resource_planner_views/timeline/content.rb +++ b/modules/resource_management/app/components/resource_planner_views/timeline/content.rb @@ -62,7 +62,7 @@ def stimulus_values "first-day" => (Setting.start_of_week.presence || 1).to_i, "initial-date" => Date.current.iso8601, "initial-view" => Granularity.default_view, - # The planner's range steers the initial centring (blank when unset). + # The planner's range steers the initial centering (blank when unset). "range-start" => @resource_planner.start_date&.iso8601, "range-end" => @resource_planner.end_date&.iso8601, "new-allocation-url" => new_allocation_url, diff --git a/modules/resource_management/app/components/resource_planner_views/user_card_list/card_component.rb b/modules/resource_management/app/components/resource_planner_views/user_card_list/card_component.rb index a0de95c911cd..68907af16d5a 100644 --- a/modules/resource_management/app/components/resource_planner_views/user_card_list/card_component.rb +++ b/modules/resource_management/app/components/resource_planner_views/user_card_list/card_component.rb @@ -28,7 +28,7 @@ #++ module ResourcePlannerViews::UserCardList - # Modelled on Users::HoverCardComponent + # Modeled on Users::HoverCardComponent class CardComponent < ApplicationComponent include OpPrimer::ComponentHelpers include ResourceAllocations::ScheduleSummary diff --git a/modules/resource_management/app/components/resource_planner_views/user_timeline/allocation_bar_component.rb b/modules/resource_management/app/components/resource_planner_views/user_timeline/allocation_bar_component.rb index 53a8d644ae04..14b3b77bda2b 100644 --- a/modules/resource_management/app/components/resource_planner_views/user_timeline/allocation_bar_component.rb +++ b/modules/resource_management/app/components/resource_planner_views/user_timeline/allocation_bar_component.rb @@ -106,7 +106,7 @@ def date_range(from_date, to_date) "#{helpers.format_date(from_date)} - #{helpers.format_date(to_date)}" end - # Nil when the status has no colour, in which case the CSS falls back to a muted border. + # Nil when the status has no color, in which case the CSS falls back to a muted border. def status_style return unless entity_visible? diff --git a/modules/resource_management/app/components/resource_planner_views/user_timeline/non_working_bar_component.rb b/modules/resource_management/app/components/resource_planner_views/user_timeline/non_working_bar_component.rb index 924e0694edc7..ce621a0dc863 100644 --- a/modules/resource_management/app/components/resource_planner_views/user_timeline/non_working_bar_component.rb +++ b/modules/resource_management/app/components/resource_planner_views/user_timeline/non_working_bar_component.rb @@ -29,7 +29,7 @@ module ResourcePlannerViews module UserTimeline - # Styling (the blue colour) is applied through the event's class names by FullCalendar. + # Styling (the blue color) is applied through the event's class names by FullCalendar. class NonWorkingBarComponent < ApplicationComponent def initialize(label:, icon: :calendar) super diff --git a/modules/resource_management/app/contracts/resource_allocations/base_contract.rb b/modules/resource_management/app/contracts/resource_allocations/base_contract.rb index bf81ce6219cd..a67acecf9b95 100644 --- a/modules/resource_management/app/contracts/resource_allocations/base_contract.rb +++ b/modules/resource_management/app/contracts/resource_allocations/base_contract.rb @@ -47,7 +47,7 @@ def self.model # The permission lives on the project of the allocated work package, which is # also how a global planner resolves it. A missing project means no reachable - # entity, so there is nothing to authorise against. + # entity, so there is nothing to authorize against. def user_allowed_to_allocate return if model.project && user.allowed_in_project?(:allocate_user_resources, model.project) diff --git a/modules/resource_management/app/controllers/resource_management/base_controller.rb b/modules/resource_management/app/controllers/resource_management/base_controller.rb index 2e4afd3d193a..68f9d8617b07 100644 --- a/modules/resource_management/app/controllers/resource_management/base_controller.rb +++ b/modules/resource_management/app/controllers/resource_management/base_controller.rb @@ -47,7 +47,7 @@ class BaseController < ::ApplicationController # project's planners. Which planners the user then gets to see is decided by # `ResourcePlanner.visible_to`. def self.load_and_authorize_in_planner_section(**options) - # `Accounts::Authorization` only recognises its own method names as an + # `Accounts::Authorization` only recognizes its own method names as an # authorization check, so ours has to be affirmed. authorization_checked_by_default_action(**options.slice(:only, :except)) diff --git a/modules/resource_management/app/models/concerns/resource_management/work_package_selection.rb b/modules/resource_management/app/models/concerns/resource_management/work_package_selection.rb index 6f052234405d..f8db6a461558 100644 --- a/modules/resource_management/app/models/concerns/resource_management/work_package_selection.rb +++ b/modules/resource_management/app/models/concerns/resource_management/work_package_selection.rb @@ -125,7 +125,7 @@ def work_packages end # A manually-picked view pins its hand-chosen ids; an automatic view forwards - # its query filters so the API filters server-side instead of materialising a + # its query filters so the API filters server-side instead of materializing a # potentially huge id list. def allocation_work_package_filters if manually_picked? diff --git a/modules/resource_management/app/models/resource_user_card.rb b/modules/resource_management/app/models/resource_user_card.rb index 5321fe3fc10e..f39d29d2b327 100644 --- a/modules/resource_management/app/models/resource_user_card.rb +++ b/modules/resource_management/app/models/resource_user_card.rb @@ -36,7 +36,7 @@ class ResourceUserCard < PersistedView store_attribute :options, :card_fields, :json, default: %w[department working_times] # `store_attribute_unset_values_fallback_to_default` is disabled globally, so - # the declared default is only materialised for new in-memory records; a + # the declared default is only materialized for new in-memory records; a # persisted view whose `options` never stored the key reads back as `nil`. # Coalesce to an empty array so views never receive `nil`; the view's creator # can then pick their own fields. diff --git a/modules/resource_management/spec/components/resource_planner_views/user_card_list/utilization_bar_component_spec.rb b/modules/resource_management/spec/components/resource_planner_views/user_card_list/utilization_bar_component_spec.rb index cebf75f13546..417d72026d5f 100644 --- a/modules/resource_management/spec/components/resource_planner_views/user_card_list/utilization_bar_component_spec.rb +++ b/modules/resource_management/spec/components/resource_planner_views/user_card_list/utilization_bar_component_spec.rb @@ -38,7 +38,7 @@ def bar(value) = described_class.new(value:) expect(page).to have_no_test_selector("utilization-bar") end - describe "the bar colour and width by utilization" do + describe "the bar color and width by utilization" do it "is accent and proportional below 100%" do expect(bar(34).send(:bar_color)).to eq(:accent_emphasis) expect(bar(34).send(:bar_percentage)).to eq(34) diff --git a/modules/resource_management/spec/components/resource_planner_views/user_timeline/content_component_spec.rb b/modules/resource_management/spec/components/resource_planner_views/user_timeline/content_component_spec.rb index 00c7ffd5c39b..e0fa0ab4b3b9 100644 --- a/modules/resource_management/spec/components/resource_planner_views/user_timeline/content_component_spec.rb +++ b/modules/resource_management/spec/components/resource_planner_views/user_timeline/content_component_spec.rb @@ -75,7 +75,7 @@ expect(el["#{prefix}-range-end-value"]).to be_blank end - it "passes the planner's date range for the initial centring" do + it "passes the planner's date range for the initial centering" do planner.update!(start_date: Date.new(2026, 1, 1), end_date: Date.new(2026, 12, 31)) el = rendered.find("[data-controller='resource-management--resource-timeline']") diff --git a/modules/resource_management/spec/components/resource_planner_views/work_package_list/allocated_members_component_spec.rb b/modules/resource_management/spec/components/resource_planner_views/work_package_list/allocated_members_component_spec.rb index 7632a9c9268a..7a0076ea1cdb 100644 --- a/modules/resource_management/spec/components/resource_planner_views/work_package_list/allocated_members_component_spec.rb +++ b/modules/resource_management/spec/components/resource_planner_views/work_package_list/allocated_members_component_spec.rb @@ -88,7 +88,7 @@ def filter_allocation(name) context "with a filter-based allocation that has no assigned user" do let(:allocations) { [filter_allocation("Full stack Developer (DE-EN)")] } - it "renders a generated avatar keyed to the allocation, labelled with the filter name" do + it "renders a generated avatar keyed to the allocation, labeled with the filter name" do expect(rendered).to have_css("avatar-fallback[data-unique-id='resource-allocation-#{allocations.first.id}']") expect(rendered).to have_css("avatar-fallback[data-alt-text='Full stack Developer (DE-EN)']") expect(rendered).to have_text("Full stack Developer (DE-EN)") diff --git a/modules/resource_management/spec/requests/api/v3/allocatable_work_packages/allocatable_work_packages_api_spec.rb b/modules/resource_management/spec/requests/api/v3/allocatable_work_packages/allocatable_work_packages_api_spec.rb index 4174d5d48a36..d87135bfb586 100644 --- a/modules/resource_management/spec/requests/api/v3/allocatable_work_packages/allocatable_work_packages_api_spec.rb +++ b/modules/resource_management/spec/requests/api/v3/allocatable_work_packages/allocatable_work_packages_api_spec.rb @@ -75,7 +75,7 @@ filters: [{ subject: { operator: "~", values: ["Allocatable"] } }]) end - it "still honours the full work package filter vocabulary" do + it "still honors the full work package filter vocabulary" do expect(last_response).to have_http_status(:ok) expect(returned_ids).to contain_exactly(allocatable.id) end diff --git a/modules/resource_management/spec/requests/user_timeline_feeds_spec.rb b/modules/resource_management/spec/requests/user_timeline_feeds_spec.rb index 3ab0ae8c7a11..46f85fabb843 100644 --- a/modules/resource_management/spec/requests/user_timeline_feeds_spec.rb +++ b/modules/resource_management/spec/requests/user_timeline_feeds_spec.rb @@ -155,7 +155,7 @@ def get_events expect(event["resourceId"]).to eq(assignee.id) expect(event).to include("start" => "2026-06-01", "end" => "2026-06-06") expect(event.dig("extendedProps", "html")).to include("Develop route optimization") - # Carries its work package's status colour on the bar's top edge. + # Carries its work package's status color on the bar's top edge. expect(event.dig("extendedProps", "html")).to include("op-rm-timeline-bar_status") end @@ -276,7 +276,7 @@ def non_working_events_for(user) .select { |e| e["resourceId"] == user.id } end - it "emits a blue normal event for a user's time off, labelled with the working days lost" do + it "emits a blue normal event for a user's time off, labeled with the working days lost" do create(:user_non_working_time, user: assignee, start_date: Date.new(2026, 6, 29), end_date: Date.new(2026, 7, 3)) diff --git a/modules/resource_management/spec/services/resource_allocations/fit_calculator_spec.rb b/modules/resource_management/spec/services/resource_allocations/fit_calculator_spec.rb index bca65426d870..12ec3d77ff9e 100644 --- a/modules/resource_management/spec/services/resource_allocations/fit_calculator_spec.rb +++ b/modules/resource_management/spec/services/resource_allocations/fit_calculator_spec.rb @@ -83,7 +83,7 @@ let(:due_tuesday) { allocation(2, mon, tue, 480) } let(:allocations) { [due_monday, due_tuesday] } - it "prioritises the earlier deadline and shifts the other" do + it "prioritizes the earlier deadline and shifts the other" do expect(result).to be_feasible expect(result.placements).to eq( due_monday => { mon => 480 }, @@ -113,7 +113,7 @@ let(:earlier_start) { allocation(2, mon, wed, 480) } let(:allocations) { [later_start, earlier_start] } - it "prioritises the earlier start" do + it "prioritizes the earlier start" do expect(result.placements).to eq(earlier_start => { wed => 480 }) expect(result.overtime).to eq(later_start => { wed => 480 }) end @@ -125,7 +125,7 @@ let(:lower_id) { allocation(1, mon, mon, 480) } let(:allocations) { [higher_id, lower_id] } - it "prioritises the lower id regardless of the given order" do + it "prioritizes the lower id regardless of the given order" do expect(result.placements).to eq(lower_id => { mon => 480 }) expect(result.overtime).to eq(higher_id => { mon => 480 }) end @@ -137,7 +137,7 @@ let(:persisted) { allocation(1, mon, mon, 480) } let(:allocations) { [unsaved, persisted] } - it "prioritises the persisted one" do + it "prioritizes the persisted one" do expect(result.placements).to eq(persisted => { mon => 480 }) expect(result.overtime).to eq(unsaved => { mon => 480 }) end diff --git a/modules/storages/app/common/storages/adapters/authentication_strategies/oauth_client_credentials.rb b/modules/storages/app/common/storages/adapters/authentication_strategies/oauth_client_credentials.rb index d9f76b7174e7..70e1e171ca23 100644 --- a/modules/storages/app/common/storages/adapters/authentication_strategies/oauth_client_credentials.rb +++ b/modules/storages/app/common/storages/adapters/authentication_strategies/oauth_client_credentials.rb @@ -60,7 +60,7 @@ def call(storage:, http_options: {}) # rubocop:disable Metrics/AbcSize end operation_result - # HTTPX default behaviour is to return error responses and not raise errors unless + # HTTPX default behavior is to return error responses and not raise errors unless # explicitly asked by using the `#raise_for_status`method. # # On Storages codebase we handle the error responses, but the OAuth diff --git a/modules/storages/app/common/storages/adapters/results/storage_file_contract.rb b/modules/storages/app/common/storages/adapters/results/storage_file_contract.rb index 78e6d127165b..030ad4e9237b 100644 --- a/modules/storages/app/common/storages/adapters/results/storage_file_contract.rb +++ b/modules/storages/app/common/storages/adapters/results/storage_file_contract.rb @@ -45,7 +45,7 @@ class StorageFileContract < DryApplicationContract optional(:created_by_name).filled(:string) optional(:last_modified_by_name).filled(:string) optional(:location).filled(:string, format?: /^\//) - # Permissions are either array or string. We should standardise this + # Permissions are either array or string. We should standardize this optional(:permissions).value { array? | str? } end end diff --git a/modules/storages/lib/api/v3/file_links/file_links_api.rb b/modules/storages/lib/api/v3/file_links/file_links_api.rb index 9e40b57a6200..20dcad23edf5 100644 --- a/modules/storages/lib/api/v3/file_links/file_links_api.rb +++ b/modules/storages/lib/api/v3/file_links/file_links_api.rb @@ -58,10 +58,10 @@ class API::V3::FileLinks::FileLinksAPI < API::OpenProjectAPI end end - # A helper is used to define the behaviour at GET /api/v3/file_links/:file_link_id + # A helper is used to define the behavior at GET /api/v3/file_links/:file_link_id get &::API::V3::Utilities::Endpoints::Show.new(model: ::Storages::FileLink).mount - # A helper is used to define the behaviour at DELETE /api/v3/file_links/:file_link_id + # A helper is used to define the behavior at DELETE /api/v3/file_links/:file_link_id delete &::API::V3::Utilities::Endpoints::Delete.new( model: ::Storages::FileLink, process_service: ::Storages::FileLinks::DeleteService diff --git a/modules/team_planner/spec/support/components/add_existing_pane.rb b/modules/team_planner/spec/support/components/add_existing_pane.rb index fe8614cea6eb..35ed21357f2f 100644 --- a/modules/team_planner/spec/support/components/add_existing_pane.rb +++ b/modules/team_planner/spec/support/components/add_existing_pane.rb @@ -71,7 +71,7 @@ def expect_result(work_package, visible: true) def drag_wp_to_date(work_package, date) wp_card = card(work_package) # The FullCalendar timeline day headers are not exposed as columnheaders - # (their table has a presentation role), so target the labelled slot by date. + # (their table has a presentation role), so target the labeled slot by date. day_header = page.find(".fc-timeline-slot-label[data-date='#{date.iso8601}']") drag_n_drop_element(from: wp_card, to: day_header, offset_y: day_header.native.size.height) end diff --git a/modules/wikis/app/forms/wikis/admin/url_input_form.rb b/modules/wikis/app/forms/wikis/admin/url_input_form.rb index 966eb8c852f0..d5788821a08d 100644 --- a/modules/wikis/app/forms/wikis/admin/url_input_form.rb +++ b/modules/wikis/app/forms/wikis/admin/url_input_form.rb @@ -36,7 +36,7 @@ class UrlInputForm < ApplicationForm required: true, type: :url, pattern: ".{1,255}", - placeholder: "https://xwiki.my-organisation.com", + placeholder: "https://xwiki.my-organization.com", caption: I18n.t("wikis.admin.wiki_providers.url_caption"), input_width: :large, disabled: model.configured_from_env? diff --git a/modules/wikis/app/services/wikis/concerns/update_reverse_inline_wiki_page_links.rb b/modules/wikis/app/services/wikis/concerns/update_reverse_inline_wiki_page_links.rb index 7f9e346b37ff..2d87f25be618 100644 --- a/modules/wikis/app/services/wikis/concerns/update_reverse_inline_wiki_page_links.rb +++ b/modules/wikis/app/services/wikis/concerns/update_reverse_inline_wiki_page_links.rb @@ -34,7 +34,7 @@ module UpdateReverseInlineWikiPageLinks # Mirrors the prefix character class of the inline-text macro matcher. # The trailing `(?!\w)` on the semantic branch keeps `#PROJ-1abc` from # matching `#PROJ-1`; the numeric branch deliberately has no trailing - # boundary to preserve historic behaviour for inputs like `#13-blubb`. + # boundary to preserve historic behavior for inputs like `#13-blubb`. # rubocop:disable Style/RedundantRegexpEscape WP_REF_RE = / (?:[[:space:],~>\#\(\[\-]|^)\# diff --git a/modules/wikis/spec/components/wikis/admin/redirect_uri_info_component_spec.rb b/modules/wikis/spec/components/wikis/admin/redirect_uri_info_component_spec.rb index e9ed1bb112b1..3bd33730fd39 100644 --- a/modules/wikis/spec/components/wikis/admin/redirect_uri_info_component_spec.rb +++ b/modules/wikis/spec/components/wikis/admin/redirect_uri_info_component_spec.rb @@ -63,7 +63,7 @@ expect(subject).to have_text(I18n.t(:label_completed)) end - it "renders the labelled redirect uri" do + it "renders the labeled redirect uri" do expect(subject).to have_text( "#{I18n.t('wikis.admin.redirect_uri_info_component.label_uri')}: #{oauth_client.redirect_uri}" ) diff --git a/modules/wikis/spec/services/wiki_pages/create_service_spec.rb b/modules/wikis/spec/services/wiki_pages/create_service_spec.rb index 68060a168145..847a43b94919 100644 --- a/modules/wikis/spec/services/wiki_pages/create_service_spec.rb +++ b/modules/wikis/spec/services/wiki_pages/create_service_spec.rb @@ -180,7 +180,7 @@ context "when a numeric reference is immediately followed by alphanumeric text" do # The numeric branch of WP_REF_RE has no trailing `(?!\w)` boundary — - # historic behaviour matches `#13` inside `#13-blubb` and similar + # historic behavior matches `#13` inside `#13-blubb` and similar # shapes. Locked here so a future tightening of the boundary can't # silently strip reverse-links from existing wiki content. let(:text) { "Trailing: ##{work_package.id}abc" } diff --git a/modules/xls_export/spec/lib/open_project/xls_export/xls_views_spec.rb b/modules/xls_export/spec/lib/open_project/xls_export/xls_views_spec.rb index 674f49f7c18d..80e9c7d2a5b6 100644 --- a/modules/xls_export/spec/lib/open_project/xls_export/xls_views_spec.rb +++ b/modules/xls_export/spec/lib/open_project/xls_export/xls_views_spec.rb @@ -64,7 +64,7 @@ end # The :work_package_id column renderer is fed the numeric id directly and - # formats " : "; it must honour the same display identifier. + # formats " : "; it must honor the same display identifier. describe "#work_package_representation" do context "with semantic mode", with_settings: { work_packages_identifier: "semantic" } do it "renders the semantic identifier, not the numeric id" do From c6117605349a79a7f66272affeec20bf05335678 Mon Sep 17 00:00:00 2001 From: Alexander Brandon Coles Date: Thu, 22 Oct 2026 13:09:33 +0100 Subject: [PATCH 06/11] [OP-20545] Use US spelling in core specs Converts British spellings in spec descriptions, shared example names, comments, locals and test data. Specs asserting English UI text that changes with the locale strings move along with those strings. https://community.openproject.org/wp/OP-20545 --- .../features/admin/llm_connection_spec.rb | 2 +- .../admin/llm_feature_bindings_spec.rb | 2 +- .../requests/admin/llm_health_status_spec.rb | 4 +- .../spec/requests/admin/llm_models_spec.rb | 4 +- .../env_data/llm/connection_seeder_spec.rb | 2 +- .../admin/labels/row_component_spec.rb | 2 +- .../result_pane_component_spec.rb | 2 +- spec/components/forums/row_component_spec.rb | 2 +- .../forums/topics/row_component_spec.rb | 2 +- .../op_primer/inset_box_component_spec.rb | 2 +- .../common/border_box_list_component_spec.rb | 2 +- .../version_select_list_component_spec.rb | 4 +- .../types/in_use_marker_component_spec.rb | 2 +- .../components/statuses/row_component_spec.rb | 4 +- .../export_configuration_component_spec.rb | 4 +- .../group_attribute_row_component_spec.rb | 2 +- .../group_query_row_component_spec.rb | 2 +- .../import/csv/report_component_spec.rb | 2 +- .../projects/create_contract_spec.rb | 2 +- .../header/projects_controller_spec.rb | 4 +- .../creation_wizard_controller_spec.rb | 2 +- .../pdf_export_template_controller_spec.rb | 6 +-- ...pec.rb => endpoint_implementation_spec.rb} | 0 .../journal/work_package_journal_factory.rb | 2 +- spec/factories/project_factory.rb | 2 +- .../work_package/activities_spec.rb | 2 +- .../activity_tab_comment_editor_spec.rb | 2 +- .../work_packages/hierarchy_spec.rb | 4 +- spec/features/auth/omniauth_spec.rb | 2 +- spec/features/external_link_capture_spec.rb | 2 +- spec/features/my/interface_spec.rb | 2 +- .../semantic_id_navigation_spec.rb | 4 +- .../overview_page/inputs_spec.rb | 2 +- .../overview_page/update_spec.rb | 4 +- .../overview_page/validation_spec.rb | 2 +- spec/features/roles/index_spec.rb | 2 +- .../types/form_configuration_required_spec.rb | 2 +- .../pdf_export_template_settings_spec.rb | 2 +- spec/features/types/variants_tab_spec.rb | 2 +- .../cards/semantic_id_navigation_spec.rb | 2 +- .../semantic_id_navigation_follow_ups_spec.rb | 2 +- spec/helpers/pagination_helper_spec.rb | 8 ++-- spec/helpers/pwa_helper_spec.rb | 4 +- spec/helpers/settings_helper_spec.rb | 6 +-- ...ackage_payload_representer_parsing_spec.rb | 2 +- spec/lib/custom_field_form_builder_spec.rb | 2 +- ...file_command_content_type_detector_spec.rb | 2 +- spec/lib/open_project/notifications_spec.rb | 2 +- .../scm/local_path_validator_spec.rb | 6 +-- .../markdown/static_html_rendering_spec.rb | 2 +- .../text_formatting/markdown/security_spec.rb | 16 ++++---- .../link_handlers/work_packages_spec.rb | 6 +-- spec/lib/tabular_form_builder_spec.rb | 38 +++++++++---------- spec/mailers/work_package_mailer_spec.rb | 2 +- ...stom_field_activations_to_variants_spec.rb | 2 +- .../extract_named_forms_conversion_spec.rb | 2 +- .../ai/text_transform_run_event_spec.rb | 2 +- .../calculated_value_strategy_spec.rb | 4 +- .../form_configuration_attribute_spec.rb | 2 +- .../with_historic_attributes_spec.rb | 2 +- spec/models/persisted_query_spec.rb | 2 +- .../queries/projects/project_query_spec.rb | 2 +- .../filter/filter_for_wp_mixin_spec.rb | 2 +- .../query/results_labels_integration_spec.rb | 2 +- spec/models/token/ical_token_spec.rb | 2 +- .../configuration_linkable_spec.rb | 2 +- spec/models/user_query_integration_spec.rb | 2 +- .../work_package/pdf_export/artefact_spec.rb | 28 +++++++------- .../work_packages/journal_timeline_spec.rb | 2 +- .../scopes/allowed_to_via_share_only_spec.rb | 2 +- spec/models/workflows/matrix_context_spec.rb | 2 +- spec/requests/admin/members_spec.rb | 2 +- .../attachment_resource_shared_examples.rb | 2 +- .../auth/api_key_authentication_spec.rb | 2 +- .../types/owned_variants_spec.rb | 2 +- spec/requests/pwa_manifest_spec.rb | 16 ++++---- spec/requests/pwa_offline_page_spec.rb | 2 +- spec/requests/statuses_spec.rb | 2 +- spec/scripts/ai_involvement_check_spec.rb | 2 +- .../root_seeder_standard_edition_spec.rb | 2 +- spec/services/import/jira_client_spec.rb | 2 +- .../import/jira_wiki_markup_converter_spec.rb | 4 +- ...te_from_model_service_work_package_spec.rb | 2 +- ...ic_identifier_suggestion_generator_spec.rb | 4 +- .../scim_clients/delete_service_spec.rb | 2 +- .../excluded_elements/add_service_spec.rb | 2 +- .../activities_tab/comment_service_spec.rb | 16 ++++---- .../activities_tab/paginator_spec.rb | 4 +- .../update_service_integration_spec.rb | 2 +- spec/support/browsers/browser_platform.rb | 2 +- .../components/work_packages/context_menu.rb | 2 +- spec/support/pages/members.rb | 2 +- spec/support/shared/forms_html.rb | 10 ++--- .../projects/identifier_validator_spec.rb | 4 +- .../jira_fetch_custom_field_job_spec.rb | 2 +- .../work_packages/workflow_job_spec.rb | 4 +- 96 files changed, 178 insertions(+), 178 deletions(-) rename spec/docs/{enpoint_implementation_spec.rb => endpoint_implementation_spec.rb} (100%) diff --git a/modules/llm/spec/features/admin/llm_connection_spec.rb b/modules/llm/spec/features/admin/llm_connection_spec.rb index ef1b31860da1..a48d960a773e 100644 --- a/modules/llm/spec/features/admin/llm_connection_spec.rb +++ b/modules/llm/spec/features/admin/llm_connection_spec.rb @@ -49,7 +49,7 @@ def default_chat_model_picker "opce-autocompleter[data-input-name*='default_chat_model_id']") end - # The kebab is a Primer ActionMenu: clicking it before its behaviour is + # The kebab is a Primer ActionMenu: clicking it before its behavior is # attached silently does nothing, so wait for the page to settle first and # for the item itself to become visible. def choose_action(item) diff --git a/modules/llm/spec/requests/admin/llm_feature_bindings_spec.rb b/modules/llm/spec/requests/admin/llm_feature_bindings_spec.rb index 1f1dcb197821..0861d31f8c76 100644 --- a/modules/llm/spec/requests/admin/llm_feature_bindings_spec.rb +++ b/modules/llm/spec/requests/admin/llm_feature_bindings_spec.rb @@ -36,7 +36,7 @@ let(:admin) { create(:admin) } let(:base_url) { "https://example.com/v1" } - # The picker is an autocompleter, so its options are serialised into the + # The picker is an autocompleter, so its options are serialized into the # element rather than rendered as markup. def offered_models(feature_key) items = page.find("form[action='#{llm_feature_binding_path(feature_key)}'] opce-autocompleter")["data-items"] diff --git a/modules/llm/spec/requests/admin/llm_health_status_spec.rb b/modules/llm/spec/requests/admin/llm_health_status_spec.rb index d9335c6eb9d7..dab035c8f7b7 100644 --- a/modules/llm/spec/requests/admin/llm_health_status_spec.rb +++ b/modules/llm/spec/requests/admin/llm_health_status_spec.rb @@ -179,7 +179,7 @@ expect(response.body).to include("base_url") end - it "is plain YAML, without serialised Ruby objects" do + it "is plain YAML, without serialized Ruby objects" do connection.update_columns(last_synced_at: Time.zone.parse("2026-10-07 14:42:41")) get llm_connection_health_status_report_path(format: :txt) @@ -243,7 +243,7 @@ end end - describe "authorisation" do + describe "authorization" do let!(:connection) { create(:llm_connection, :with_models, base_url:) } before do diff --git a/modules/llm/spec/requests/admin/llm_models_spec.rb b/modules/llm/spec/requests/admin/llm_models_spec.rb index 4287fd570d16..5066b63f7d02 100644 --- a/modules/llm/spec/requests/admin/llm_models_spec.rb +++ b/modules/llm/spec/requests/admin/llm_models_spec.rb @@ -36,7 +36,7 @@ let(:admin) { create(:admin) } let(:base_url) { "https://example.com/v1" } - # The picker is an autocompleter, so its options are serialised into the + # The picker is an autocompleter, so its options are serialized into the # element rather than rendered as markup. def offered_default_models(field = :default_chat_model_id) element = page.all("[data-test-selector='llm-connection--defaults-form'] opce-autocompleter") @@ -91,7 +91,7 @@ def offered_default_models(field = :default_chat_model_id) expect(a_request(:get, "#{base_url}/models")).not_to have_been_made end - # ".icon:before" carries the padding and colour and "a.icon:hover" removes + # ".icon:before" carries the padding and color and "a.icon:hover" removes # the underline, and both select the anchor, so the classes cannot sit on # an inner as op_icon would place them. it "puts the icon classes on the action anchor itself" do diff --git a/modules/llm/spec/seeders/env_data/llm/connection_seeder_spec.rb b/modules/llm/spec/seeders/env_data/llm/connection_seeder_spec.rb index d9f146f66bf1..c6ec73e73467 100644 --- a/modules/llm/spec/seeders/env_data/llm/connection_seeder_spec.rb +++ b/modules/llm/spec/seeders/env_data/llm/connection_seeder_spec.rb @@ -38,7 +38,7 @@ expect { seed }.not_to change(LlmConnection, :count) end - # On a fresh installation the seed runs before any model synchronisation, so + # On a fresh installation the seed runs before any model synchronization, so # the model the environment names has no row yet. Provisioning enters it the # way an administrator would, and the refresh confirms it later. context "with a default model configured on a fresh installation", with_settings: { diff --git a/spec/components/admin/labels/row_component_spec.rb b/spec/components/admin/labels/row_component_spec.rb index 76f9cd63f529..f1271374a220 100644 --- a/spec/components/admin/labels/row_component_spec.rb +++ b/spec/components/admin/labels/row_component_spec.rb @@ -50,7 +50,7 @@ expect(rendered_component).to have_test_selector("label-name", text: "Bug") end - it "renders the pluralised usage count" do + it "renders the pluralized usage count" do expect(rendered_component).to have_test_selector("label-usage", text: "3 work packages") end end diff --git a/spec/components/ai/text_transforms/result_pane_component_spec.rb b/spec/components/ai/text_transforms/result_pane_component_spec.rb index 00ad7dd156d6..c9960897da64 100644 --- a/spec/components/ai/text_transforms/result_pane_component_spec.rb +++ b/spec/components/ai/text_transforms/result_pane_component_spec.rb @@ -42,7 +42,7 @@ run.events.build(kind: "completed", payload: { "text" => "Login works again." }, seq: 1) end - it "renders a labelled, non-modal dialog" do + it "renders a labeled, non-modal dialog" do expect(subject).to have_css("[role=dialog][aria-label='AI result'].op-ai-result-pane") expect(subject).to have_no_css("dialog") end diff --git a/spec/components/forums/row_component_spec.rb b/spec/components/forums/row_component_spec.rb index 606b9dfff8d9..ea3e50159510 100644 --- a/spec/components/forums/row_component_spec.rb +++ b/spec/components/forums/row_component_spec.rb @@ -57,7 +57,7 @@ expect(rendered_component).to have_css(".DragHandle[data-sortable-lists--item-target~='handle']", visible: :all) end - it "offers every move between neighbours", :aggregate_failures do + it "offers every move between neighbors", :aggregate_failures do expect(rendered_component).to have_button("Move to top") expect(rendered_component).to have_button("Move up") expect(rendered_component).to have_button("Move down") diff --git a/spec/components/forums/topics/row_component_spec.rb b/spec/components/forums/topics/row_component_spec.rb index be9f82a103b9..3f673c014b33 100644 --- a/spec/components/forums/topics/row_component_spec.rb +++ b/spec/components/forums/topics/row_component_spec.rb @@ -83,7 +83,7 @@ before { rendered_component } - it "marks both with a labelled icon", :aggregate_failures do + it "marks both with a labeled icon", :aggregate_failures do expect(find_test_selector("topic-sticky")["aria-label"]).to eq("Sticky") expect(find_test_selector("topic-locked")["aria-label"]).to eq("Locked") end diff --git a/spec/components/op_primer/inset_box_component_spec.rb b/spec/components/op_primer/inset_box_component_spec.rb index 3c4095b63a68..6c17fca4d8f4 100644 --- a/spec/components/op_primer/inset_box_component_spec.rb +++ b/spec/components/op_primer/inset_box_component_spec.rb @@ -113,7 +113,7 @@ def render_component(**args) expect(rendered).to have_css(".octicon-link + h3", text: "Inherited configuration") end - it "honours a custom heading tag" do + it "honors a custom heading tag" do rendered = render_inline(described_class.new) do |box| box.with_title(tag: :h2) { "Dependents" } end diff --git a/spec/components/open_project/common/border_box_list_component_spec.rb b/spec/components/open_project/common/border_box_list_component_spec.rb index f216a3f1909b..bf77fcfe6b08 100644 --- a/spec/components/open_project/common/border_box_list_component_spec.rb +++ b/spec/components/open_project/common/border_box_list_component_spec.rb @@ -235,7 +235,7 @@ def call expect(rendered).to have_no_css(".op-border-box-list-header--heading-line .Truncate") end - it "keeps the list labelled by a header that contains the title text" do + it "keeps the list labeled by a header that contains the title text" do rendered = render_inline( described_class.new(container: "hdr-breadcrumbs-label") ) do |list| diff --git a/spec/components/open_project/common/inplace_edit_fields/version_select_list_component_spec.rb b/spec/components/open_project/common/inplace_edit_fields/version_select_list_component_spec.rb index 5edfd4acc840..5a3b077ced12 100644 --- a/spec/components/open_project/common/inplace_edit_fields/version_select_list_component_spec.rb +++ b/spec/components/open_project/common/inplace_edit_fields/version_select_list_component_spec.rb @@ -61,7 +61,7 @@ def render_component(project_model) render_component(project) expect(rendered_content).to have_css("opce-autocompleter") - # Options are serialised as JSON in the opce-autocompleter's items attribute + # Options are serialized as JSON in the opce-autocompleter's items attribute expect(rendered_content).to include("v1.0") expect(rendered_content).to include("v2.0") end @@ -71,7 +71,7 @@ def render_component(project_model) create(:custom_value, :skip_validations, customized: project, custom_field:, value: version1.id.to_s) render_component(Project.find(project.id)) - # The decorated autocompleter serialises the selected item as a data-model attribute + # The decorated autocompleter serializes the selected item as a data-model attribute expect(page).to have_element "opce-autocompleter" do |autocompleter| expect(autocompleter["data-model"]).to be_json_eql( %{{"disabled": false, "group_by": "#{project.name}", "name": "#{version1.name}", "selected": true}} diff --git a/spec/components/projects/settings/work_packages/types/in_use_marker_component_spec.rb b/spec/components/projects/settings/work_packages/types/in_use_marker_component_spec.rb index 79b9d6fce261..e10f2b879bc4 100644 --- a/spec/components/projects/settings/work_packages/types/in_use_marker_component_spec.rb +++ b/spec/components/projects/settings/work_packages/types/in_use_marker_component_spec.rb @@ -40,7 +40,7 @@ expect(rendered_component).to have_css(".octicon-check-circle-fill") end - it "sets the words in the colour that means so" do + it "sets the words in the color that means so" do expect(rendered_component).to have_css(".color-fg-success", text: "Variant in this project") end diff --git a/spec/components/statuses/row_component_spec.rb b/spec/components/statuses/row_component_spec.rb index e1589c29b765..6fd897f2e8e9 100644 --- a/spec/components/statuses/row_component_spec.rb +++ b/spec/components/statuses/row_component_spec.rb @@ -44,7 +44,7 @@ let(:position) { 2 } # The menu offers a direction only while there is somewhere to go, so the row needs - # a neighbour on either side. + # a neighbor on either side. before do create(:status, name: "Above").update_column(:position, 1) status.update_column(:position, position) @@ -55,7 +55,7 @@ expect(rendered_component).to have_link("In progress", href: "/statuses/#{status.id}/edit") end - it "shows the colour beside the name rather than in a column of its own" do + it "shows the color beside the name rather than in a column of its own" do status.update!(color: create(:color, name: "Blue", hexcode: "#1F83D6")) expect(rendered_component).to have_css(".op-border-box-grid__row-item--main-column .color--preview") diff --git a/spec/components/work_package_types/export_configuration_component_spec.rb b/spec/components/work_package_types/export_configuration_component_spec.rb index 47a6631c332e..9f55668ac7d6 100644 --- a/spec/components/work_package_types/export_configuration_component_spec.rb +++ b/spec/components/work_package_types/export_configuration_component_spec.rb @@ -43,7 +43,7 @@ expect(page).to have_no_css("[data-test-selector='disable-all-pdf-export-templates']") end - it "renders the inherited artefact export mode as disabled radios" do + it "renders the inherited artifact export mode as disabled radios" do render_inline(described_class.new(variant, readonly: true)) expect(page.find("input[type=radio][value='#{Type::ArtefactExport::OFF}']")).to be_disabled @@ -57,7 +57,7 @@ expect(page).to have_css("[data-test-selector='enable-all-pdf-export-templates']") end - it "renders the artefact export mode as editable radios" do + it "renders the artifact export mode as editable radios" do render_inline(described_class.new(variant)) expect(page.find("input[type=radio][value='#{Type::ArtefactExport::OFF}']")).not_to be_disabled diff --git a/spec/components/work_package_types/form_configuration/group_attribute_row_component_spec.rb b/spec/components/work_package_types/form_configuration/group_attribute_row_component_spec.rb index 5b18b81744e9..f4d40ec55a4d 100644 --- a/spec/components/work_package_types/form_configuration/group_attribute_row_component_spec.rb +++ b/spec/components/work_package_types/form_configuration/group_attribute_row_component_spec.rb @@ -86,7 +86,7 @@ def render_row(exclusions:, readonly: true) expect(page).to have_no_test_selector("toggle-form-config-exclusion-assignee") end - it "is keyed on the attribute and labelled with its translation", :aggregate_failures do + it "is keyed on the attribute and labeled with its translation", :aggregate_failures do render_row(exclusions: WorkPackageTypes::ExclusionState.new(variant:, excluded: [])) toggle = page.find("[data-test-selector='toggle-form-config-exclusion-assignee']") diff --git a/spec/components/work_package_types/form_configuration/group_query_row_component_spec.rb b/spec/components/work_package_types/form_configuration/group_query_row_component_spec.rb index 6a2a52ff33ca..1a7d30a778ce 100644 --- a/spec/components/work_package_types/form_configuration/group_query_row_component_spec.rb +++ b/spec/components/work_package_types/form_configuration/group_query_row_component_spec.rb @@ -54,7 +54,7 @@ WorkPackageTypes::ExclusionState.new(variant:, excluded: []) end - it "is keyed on the query and labelled with the section name", :aggregate_failures do + it "is keyed on the query and labeled with the section name", :aggregate_failures do render_inline(described_class.new(group: group.merge(element_key: "query_7"), ee_available: false, readonly: true, exclusions:)) diff --git a/spec/components/work_packages/import/csv/report_component_spec.rb b/spec/components/work_packages/import/csv/report_component_spec.rb index abe230a861b2..0a2c293cc70f 100644 --- a/spec/components/work_packages/import/csv/report_component_spec.rb +++ b/spec/components/work_packages/import/csv/report_component_spec.rb @@ -147,7 +147,7 @@ def render_outcome(outcome, **overrides) expect(page).to have_text("Imported from sprint-43-scope.csv on 09/21/2026 at", normalize_ws: true) end - it "summarises the run exactly as the check did" do + it "summarizes the run exactly as the check did" do render_outcome("imported", "dry_run" => false) expect(page).to have_text("Work packages 142", normalize_ws: true) diff --git a/spec/contracts/projects/create_contract_spec.rb b/spec/contracts/projects/create_contract_spec.rb index 0db5350867d7..6b202ea08588 100644 --- a/spec/contracts/projects/create_contract_spec.rb +++ b/spec/contracts/projects/create_contract_spec.rb @@ -217,7 +217,7 @@ # the custom fields the user can access via project memberships with `:view_project_attributes` # permission or return all the custom fields if the user has the `:add_project` global permission. # - # The purpose of this behaviour is to provide details for the project schema only. + # The purpose of this behavior is to provide details for the project schema only. # It will not affect the availability of all the custom fields on project creation, because # the `:add_project` permission will ensure that all the custom fields are accessible. diff --git a/spec/controllers/header/projects_controller_spec.rb b/spec/controllers/header/projects_controller_spec.rb index 4c7b35a9016d..f7579d877c48 100644 --- a/spec/controllers/header/projects_controller_spec.rb +++ b/spec/controllers/header/projects_controller_spec.rb @@ -216,7 +216,7 @@ expect(assigns(:projects)).to be_empty end - it "renders the no-favourites placeholder" do + it "renders the no-favorites placeholder" do make_request expect(response.body).to include("op-header-project-select--no-favourites") end @@ -224,7 +224,7 @@ context "when a query is present" do subject(:make_request) { get :index, params: { filter_mode: "favorited", query: "Alpha" } } - it "does not render the no-favourites placeholder" do + it "does not render the no-favorites placeholder" do make_request expect(response.body).not_to include("op-header-project-select--no-favourites") end diff --git a/spec/controllers/work_package_types/creation_wizard_controller_spec.rb b/spec/controllers/work_package_types/creation_wizard_controller_spec.rb index dc3ea1a86e6f..acd2473451d2 100644 --- a/spec/controllers/work_package_types/creation_wizard_controller_spec.rb +++ b/spec/controllers/work_package_types/creation_wizard_controller_spec.rb @@ -93,7 +93,7 @@ end end - describe "GET show with an unrecognised step" do + describe "GET show with an unrecognized step" do it "falls back to the first step" do get :show, params: { type_id: type.id, step: "does-not-exist" } diff --git a/spec/controllers/work_package_types/pdf_export_template_controller_spec.rb b/spec/controllers/work_package_types/pdf_export_template_controller_spec.rb index ead076996953..df8d221973a3 100644 --- a/spec/controllers/work_package_types/pdf_export_template_controller_spec.rb +++ b/spec/controllers/work_package_types/pdf_export_template_controller_spec.rb @@ -141,7 +141,7 @@ def post_reload(endpoint, params = {}) describe "#edit" do render_views - it "renders the export configuration page including the artefact export form" do + it "renders the export configuration page including the artifact export form" do get :edit, params: { type_id: wp_type.id } expect(response).to have_http_status(:ok) @@ -236,7 +236,7 @@ def post_reload(endpoint, params = {}) expect(response).to have_http_status(:not_found) end - it "stores the artefact template's lifecycle/budget defaults and resets them" do + it "stores the artifact template's lifecycle/budget defaults and resets them" do artefact_template = variant.pdf_export_templates.find("artefact") patch :update_settings, @@ -286,7 +286,7 @@ def post_reload(endpoint, params = {}) describe "#update_artefact_export" do let(:param_key) { variant.model_name.param_key.to_sym } - it "stores a valid artefact export mode and responds with a turbo stream" do + it "stores a valid artifact export mode and responds with a turbo stream" do put :update_artefact_export, params: { type_id: wp_type.id, param_key => { artefact_export_mode: Type::ArtefactExport::FILE_LINK } }, as: :turbo_stream diff --git a/spec/docs/enpoint_implementation_spec.rb b/spec/docs/endpoint_implementation_spec.rb similarity index 100% rename from spec/docs/enpoint_implementation_spec.rb rename to spec/docs/endpoint_implementation_spec.rb diff --git a/spec/factories/journal/work_package_journal_factory.rb b/spec/factories/journal/work_package_journal_factory.rb index aaf58f6c82bc..fe16c70a4edd 100644 --- a/spec/factories/journal/work_package_journal_factory.rb +++ b/spec/factories/journal/work_package_journal_factory.rb @@ -32,7 +32,7 @@ ignore_non_working_days { false } # The following properties are not actually valid. # They were added when the default value (also 0) was removed and too many - # tests relied on this behaviour for it to be fixed right away. + # tests relied on this behavior for it to be fixed right away. subject { "abc" } type_id { 0 } project_id { 0 } diff --git a/spec/factories/project_factory.rb b/spec/factories/project_factory.rb index 7802a369619f..2193da8bb074 100644 --- a/spec/factories/project_factory.rb +++ b/spec/factories/project_factory.rb @@ -50,7 +50,7 @@ sequence(:name) { |n| "My Project No. #{n}" } sequence(:identifier) { |n| Setting::WorkPackageIdentifier.semantic? ? "MPN#{n}" : "myproject_no_#{n}" } - # Use this trait for specs that exercise semantic-mode behaviour. + # Use this trait for specs that exercise semantic-mode behavior. # Produces a deterministic uppercase identifier that satisfies # Projects::Identifier's semantic format constraints # (\A[A-Z][A-Z0-9_]*\z, max 10 chars). diff --git a/spec/features/activities/work_package/activities_spec.rb b/spec/features/activities/work_package/activities_spec.rb index 6563c3e60f0c..774182f3dd23 100644 --- a/spec/features/activities/work_package/activities_spec.rb +++ b/spec/features/activities/work_package/activities_spec.rb @@ -1086,7 +1086,7 @@ # this works as expected but cannot be tested in test env, reason unknown # TODO: fix this part of this spec # wp_page.expect_conflict_warning_banner # warning banner is shown as another user has updated the work package - # I'm not marking this spec as pending as the following part is testing the crucial behaviour successfully + # I'm not marking this spec as pending as the following part is testing the crucial behavior successfully wp_page.edit_field(:description).save! # user ignores the warning and saves the changes diff --git a/spec/features/activities/work_package/activity_tab_comment_editor_spec.rb b/spec/features/activities/work_package/activity_tab_comment_editor_spec.rb index 298060a8508e..a82285786e8d 100644 --- a/spec/features/activities/work_package/activity_tab_comment_editor_spec.rb +++ b/spec/features/activities/work_package/activity_tab_comment_editor_spec.rb @@ -147,7 +147,7 @@ def expect_editor_to_be_dismissed_with_confirmation(&) wp_page.wait_for_activity_tab end - it "has the rich text editor aria labelled" do + it "has the rich text editor aria labeled" do activity_tab.add_comment(text: "Sample text", save: false) activity_tab.expect_focus_on_editor diff --git a/spec/features/admin/custom_fields/work_packages/hierarchy_spec.rb b/spec/features/admin/custom_fields/work_packages/hierarchy_spec.rb index 411caa8a5a44..d4dd3cef66fd 100644 --- a/spec/features/admin/custom_fields/work_packages/hierarchy_spec.rb +++ b/spec/features/admin/custom_fields/work_packages/hierarchy_spec.rb @@ -44,7 +44,7 @@ custom_field_index_page.click_to_create_new_custom_field("Hierarchy") - hierarchy_name = "Stormtrooper Organisation" + hierarchy_name = "Stormtrooper Organization" fill_in "Name", with: hierarchy_name click_on "Save" @@ -63,7 +63,7 @@ expect(page).to have_css(".PageHeader-title", text: hierarchy_name) # Now, that was the wrong name, so I can change it to the correct one - hierarchy_name = "Imperial Organisation" + hierarchy_name = "Imperial Organization" fill_in "Name", with: "", fill_options: { clear: :backspace } fill_in "Name", with: hierarchy_name click_on "Save" diff --git a/spec/features/auth/omniauth_spec.rb b/spec/features/auth/omniauth_spec.rb index ed0bcc73300e..7ec138675124 100644 --- a/spec/features/auth/omniauth_spec.rb +++ b/spec/features/auth/omniauth_spec.rb @@ -263,7 +263,7 @@ # to a symbol will force omniauth to fail /auth/failure OmniAuth.config.test_mode = true OmniAuth.config.mock_auth[:developer] = :invalid_credentials - # seems like this default behaviour is removed when running the full + # seems like this default behavior is removed when running the full # test suite, so let's set it back when running this test original_on_failure = OmniAuth.config.on_failure OmniAuth.config.on_failure = Proc.new do |env| diff --git a/spec/features/external_link_capture_spec.rb b/spec/features/external_link_capture_spec.rb index 95c71690b450..6c83dae3d360 100644 --- a/spec/features/external_link_capture_spec.rb +++ b/spec/features/external_link_capture_spec.rb @@ -45,7 +45,7 @@ current_user { admin } shared_examples "opens external link directly in a new window" do - it "keeps the default external link behaviour" do + it "keeps the default external link behavior" do visit project_wiki_path(project, wiki_page) link = page.find_link("OpenProject", href: external_url) diff --git a/spec/features/my/interface_spec.rb b/spec/features/my/interface_spec.rb index e99d14d68ee9..d76781343c71 100644 --- a/spec/features/my/interface_spec.rb +++ b/spec/features/my/interface_spec.rb @@ -106,7 +106,7 @@ def set_automatic_mode_with_reload end context "with OS in dark mode", driver: :chrome_dark_mode do - it "syncs with OS colour mode" do + it "syncs with OS color mode" do set_automatic_mode_with_reload expect(page).to have_theme("dark") end diff --git a/spec/features/notifications/semantic_id_navigation_spec.rb b/spec/features/notifications/semantic_id_navigation_spec.rb index fa48f6ce0751..1e2646e9caf0 100644 --- a/spec/features/notifications/semantic_id_navigation_spec.rb +++ b/spec/features/notifications/semantic_id_navigation_spec.rb @@ -33,7 +33,7 @@ :js, :with_cuprite, with_settings: { work_packages_identifier: "semantic" } do - # Classic mode is a behavioural no-op: the URL helpers and the + # Classic mode is a behavioral no-op: the URL helpers and the # resolveRoutingId bridge both collapse to the numeric id when semantic # mode is off. Covering semantic-only where the bug actually manifests. @@ -56,7 +56,7 @@ before do work_package.allocate_and_register_semantic_id - notification # realise + notification # realize end it "opens the split view at the semantic identifier URL" do diff --git a/spec/features/projects/project_custom_fields/overview_page/inputs_spec.rb b/spec/features/projects/project_custom_fields/overview_page/inputs_spec.rb index a04561858965..f9dc9cd19cd7 100644 --- a/spec/features/projects/project_custom_fields/overview_page/inputs_spec.rb +++ b/spec/features/projects/project_custom_fields/overview_page/inputs_spec.rb @@ -54,7 +54,7 @@ overview_page.visit_page end - describe "with correct initialization and input behaviour" do + describe "with correct initialization and input behavior" do def field = overview_page.open_inplace_edit_field_for_custom_field(custom_field) describe "with single select fields" do diff --git a/spec/features/projects/project_custom_fields/overview_page/update_spec.rb b/spec/features/projects/project_custom_fields/overview_page/update_spec.rb index f4c54ab92dc2..a22c9538dd13 100644 --- a/spec/features/projects/project_custom_fields/overview_page/update_spec.rb +++ b/spec/features/projects/project_custom_fields/overview_page/update_spec.rb @@ -51,7 +51,7 @@ end end - describe "with correct updating behaviour" do + describe "with correct updating behavior" do def open_dialog dialog = overview_page.open_modal_for_custom_field(custom_field).dialog @@ -694,7 +694,7 @@ def open_field # all the custom field accessors on every project, and that leads to having the # empty custom values created. This is a compromise to avoid further patching the # aac plugin and increase complexity. We will also get rid of the patch and this - # behaviour in a latter ticket https://community.openproject.org/wp/53729 . + # behavior in a latter ticket https://community.openproject.org/wp/53729 . # An extra expectation is added to make sure we don't activate other custom fields, # so there are no unwanted side effects. diff --git a/spec/features/projects/project_custom_fields/overview_page/validation_spec.rb b/spec/features/projects/project_custom_fields/overview_page/validation_spec.rb index 36c449786a6b..ef7fcb618275 100644 --- a/spec/features/projects/project_custom_fields/overview_page/validation_spec.rb +++ b/spec/features/projects/project_custom_fields/overview_page/validation_spec.rb @@ -40,7 +40,7 @@ overview_page.visit_page end - describe "with correct validation behaviour" do + describe "with correct validation behavior" do describe "after validation" do it "keeps showing only activated custom fields (tricky regression)" do custom_field = string_project_custom_field diff --git a/spec/features/roles/index_spec.rb b/spec/features/roles/index_spec.rb index fae7995ebae5..750f50ab22ae 100644 --- a/spec/features/roles/index_spec.rb +++ b/spec/features/roles/index_spec.rb @@ -154,7 +154,7 @@ def reorderable_role_ids expect_roles_listed("Alpha global") end - # A move is relative to the neighbouring rows, and a filtered list hides them. + # A move is relative to the neighboring rows, and a filtered list hides them. it "takes away reordering while a filter is active" do visit roles_path diff --git a/spec/features/types/form_configuration_required_spec.rb b/spec/features/types/form_configuration_required_spec.rb index 34024832749a..7fe975bfc086 100644 --- a/spec/features/types/form_configuration_required_spec.rb +++ b/spec/features/types/form_configuration_required_spec.rb @@ -52,7 +52,7 @@ def required_badge(attribute) page.test_selector("type-form-configuration-required-#{attribute}") end - # The two labels differ in colour as well as wording, and "Required" is a substring of + # The two labels differ in color as well as wording, and "Required" is a substring of # "Required in this type", so both are asserted exactly. def expect_badge(attribute, text:, scheme:) badge = page.find_test_selector("type-form-configuration-required-#{attribute}") diff --git a/spec/features/types/pdf_export_template_settings_spec.rb b/spec/features/types/pdf_export_template_settings_spec.rb index c011c7220712..9c60b242fc9b 100644 --- a/spec/features/types/pdf_export_template_settings_spec.rb +++ b/spec/features/types/pdf_export_template_settings_spec.rb @@ -80,7 +80,7 @@ end it "keeps the table of contents enabled and the hyphenation language unset when saving " \ - "artefact settings that were never configured" do + "artifact settings that were never configured" do click_link_or_button type.default_variant.pdf_export_templates.find("artefact").label expect(page).to have_checked_field("toc_enabled") diff --git a/spec/features/types/variants_tab_spec.rb b/spec/features/types/variants_tab_spec.rb index e5e6bf3b1897..453c43e858a9 100644 --- a/spec/features/types/variants_tab_spec.rb +++ b/spec/features/types/variants_tab_spec.rb @@ -113,7 +113,7 @@ def open_variant_menu expect(page).to have_test_selector("migrated-variants-banner", text: banner_text) end - it "labels them, leaving the authored ones unlabelled" do + it "labels them, leaving the authored ones unlabeled" do within(".Box-row", text: converted.variant_name) do expect(page).to have_css(".Label--attention", text: I18n.t("types.index.created_by_migration")) end diff --git a/spec/features/work_packages/cards/semantic_id_navigation_spec.rb b/spec/features/work_packages/cards/semantic_id_navigation_spec.rb index 45a0fa26cda8..4f03183a46ca 100644 --- a/spec/features/work_packages/cards/semantic_id_navigation_spec.rb +++ b/spec/features/work_packages/cards/semantic_id_navigation_spec.rb @@ -33,7 +33,7 @@ :js, :with_cuprite, with_settings: { work_packages_identifier: "semantic" } do - # Classic mode is a behavioural no-op here: the card href is built via + # Classic mode is a behavioral no-op here: the card href is built via # `workPackage.displayId`, which returns the numeric id in classic mode — i.e. # the same value the pre-fix code (`workPackage.id`) used. Covering only # semantic mode where the bug actually manifests. diff --git a/spec/features/work_packages/table/semantic_id_navigation_follow_ups_spec.rb b/spec/features/work_packages/table/semantic_id_navigation_follow_ups_spec.rb index 81147ac63da9..3e9b83d0833f 100644 --- a/spec/features/work_packages/table/semantic_id_navigation_follow_ups_spec.rb +++ b/spec/features/work_packages/table/semantic_id_navigation_follow_ups_spec.rb @@ -33,7 +33,7 @@ :js, :with_cuprite, with_settings: { work_packages_identifier: "semantic" } do - # Classic mode is a behavioural no-op for each of these fixes: + # Classic mode is a behavioral no-op for each of these fixes: # `workPackage.displayId` and `resolveRoutingId(...)` both collapse to the # numeric id when semantic mode is off. Covering semantic-only where the # bugs manifest. diff --git a/spec/helpers/pagination_helper_spec.rb b/spec/helpers/pagination_helper_spec.rb index 0ecd21b60107..0ca4e26b3b0f 100644 --- a/spec/helpers/pagination_helper_spec.rb +++ b/spec/helpers/pagination_helper_spec.rb @@ -72,7 +72,7 @@ expect(pagination).to have_css("div.op-pagination") end - it "renders a labelled nav element" do + it "renders a labeled nav element" do expect(pagination).to have_element "nav", aria: { label: "Pagination" } end @@ -147,7 +147,7 @@ expect(pagination).to have_css ".op-pagination--options" end - it "renders a labelled nav element" do + it "renders a labeled nav element" do expect(pagination).to have_element "nav", aria: { label: "Items per page selection" } end @@ -178,7 +178,7 @@ expect(pagination).to have_no_css ".op-pagination--options" end - it "does not render a labelled nav element" do + it "does not render a labeled nav element" do expect(pagination).to have_no_element "nav", aria: { label: "Items per page selection" } end end @@ -221,7 +221,7 @@ expect(pagination).to have_no_css(".op-pagination") end - it "does not render a labelled nav element" do + it "does not render a labeled nav element" do expect(pagination).to have_no_element "nav", aria: { label: "Pagination" } end end diff --git a/spec/helpers/pwa_helper_spec.rb b/spec/helpers/pwa_helper_spec.rb index 6b89a628a133..2aa5fd353b79 100644 --- a/spec/helpers/pwa_helper_spec.rb +++ b/spec/helpers/pwa_helper_spec.rb @@ -31,7 +31,7 @@ RSpec.describe PwaHelper do describe "#pwa_cache_name" do - it "changes when the header colour changes" do + it "changes when the header color changes" do allow(helper).to receive(:header_bg_color).and_return("#aaaaaa") before = helper.pwa_cache_name @@ -40,7 +40,7 @@ expect(helper.pwa_cache_name).not_to eq(before) end - it "changes when the dark header colour changes" do + it "changes when the dark header color changes" do allow(helper).to receive(:header_bg_color).and_return("#aaaaaa") allow(helper).to receive(:header_bg_color).with(color_mode: :dark).and_return("#bbbbbb") before = helper.pwa_cache_name diff --git a/spec/helpers/settings_helper_spec.rb b/spec/helpers/settings_helper_spec.rb index 8c617631aeec..fb5058ff82bb 100644 --- a/spec/helpers/settings_helper_spec.rb +++ b/spec/helpers/settings_helper_spec.rb @@ -77,7 +77,7 @@ allow(Setting).to receive(:host_name).and_return("2") end - it_behaves_like "labelled by default" + it_behaves_like "labeled by default" it_behaves_like "wrapped in field-container by default" it_behaves_like "wrapped in container", "select-container" it_behaves_like "field disabled if non writable" @@ -136,7 +136,7 @@ allow(Setting).to receive(:host_name).and_return("important value") end - it_behaves_like "labelled by default" + it_behaves_like "labeled by default" it_behaves_like "wrapped in field-container by default" it_behaves_like "wrapped in container", "text-field-container" it_behaves_like "field disabled if non writable" @@ -154,7 +154,7 @@ helper.setting_label :host_name end - it_behaves_like "labelled" + it_behaves_like "labeled" it_behaves_like "not wrapped in container" end end diff --git a/spec/lib/api/v3/work_packages/work_package_payload_representer_parsing_spec.rb b/spec/lib/api/v3/work_packages/work_package_payload_representer_parsing_spec.rb index b19e9c03af3a..b6b178c6d013 100644 --- a/spec/lib/api/v3/work_packages/work_package_payload_representer_parsing_spec.rb +++ b/spec/lib/api/v3/work_packages/work_package_payload_representer_parsing_spec.rb @@ -129,7 +129,7 @@ } end - it "only honours targetVersions" do + it "only honors targetVersions" do expect(subject.target_version_ids).to eq([other_version.id.to_s]) end end diff --git a/spec/lib/custom_field_form_builder_spec.rb b/spec/lib/custom_field_form_builder_spec.rb index 6c5dd7c38b0e..811073f9421c 100644 --- a/spec/lib/custom_field_form_builder_spec.rb +++ b/spec/lib/custom_field_form_builder_spec.rb @@ -74,7 +74,7 @@ builder.cf_form_field options end - it_behaves_like "labelled by default" + it_behaves_like "labeled by default" it_behaves_like "wrapped in field-container by default" do let(:container_count) { 2 } end diff --git a/spec/lib/open_project/file_command_content_type_detector_spec.rb b/spec/lib/open_project/file_command_content_type_detector_spec.rb index 8674192467d4..7833780537aa 100644 --- a/spec/lib/open_project/file_command_content_type_detector_spec.rb +++ b/spec/lib/open_project/file_command_content_type_detector_spec.rb @@ -116,7 +116,7 @@ def detect(raw_output) expect(detect("text/plain; charset=")).to eq(["text/plain", nil]) end - it "ignores unrecognised parameters before charset" do + it "ignores unrecognized parameters before charset" do expect(detect("text/plain; taste=banana; charset=iso-8859-1")).to eq(["text/plain", "iso-8859-1"]) end end diff --git a/spec/lib/open_project/notifications_spec.rb b/spec/lib/open_project/notifications_spec.rb index 7653427d8728..d6bec99fb223 100644 --- a/spec/lib/open_project/notifications_spec.rb +++ b/spec/lib/open_project/notifications_spec.rb @@ -48,7 +48,7 @@ expect(probe).to have_received(:call) do |call_payload| # Don't check for object identity for the payload as it might be - # marshalled and unmarshalled before being delivered in the future. + # marshaled and unmarshalled before being delivered in the future. expect(call_payload).to eql(payload) end end diff --git a/spec/lib/open_project/scm/local_path_validator_spec.rb b/spec/lib/open_project/scm/local_path_validator_spec.rb index 42cc5bbf1abd..b8a351ab1940 100644 --- a/spec/lib/open_project/scm/local_path_validator_spec.rb +++ b/spec/lib/open_project/scm/local_path_validator_spec.rb @@ -64,7 +64,7 @@ context "with triple-slash bare path (///path)" do let(:value) { "///srv/openproject/git/myproject.git" } - it "normalises to a single leading slash" do + it "normalizes to a single leading slash" do expect(subject).to eq("/srv/openproject/git/myproject.git") end end @@ -72,7 +72,7 @@ context "with double-slash bare path (//path)" do let(:value) { "//srv/openproject/git/myproject.git" } - it "normalises to a single leading slash" do + it "normalizes to a single leading slash" do expect(subject).to eq("/srv/openproject/git/myproject.git") end end @@ -80,7 +80,7 @@ context "with file URL containing quadruple slashes (file:////path)" do let(:value) { "file:////srv/openproject/git/myproject.git" } - it "normalises to a single leading slash" do + it "normalizes to a single leading slash" do expect(subject).to eq("/srv/openproject/git/myproject.git") end end diff --git a/spec/lib/open_project/text_formatting/formats/markdown/static_html_rendering_spec.rb b/spec/lib/open_project/text_formatting/formats/markdown/static_html_rendering_spec.rb index 083d7c0f989f..c97df8104335 100644 --- a/spec/lib/open_project/text_formatting/formats/markdown/static_html_rendering_spec.rb +++ b/spec/lib/open_project/text_formatting/formats/markdown/static_html_rendering_spec.rb @@ -60,7 +60,7 @@ def render(text) end end - describe "basic mention (#N) — no behaviour change" do + describe "basic mention (#N) — no behavior change" do let(:input) { "see ##{work_package.id} please" } context "in semantic mode", diff --git a/spec/lib/open_project/text_formatting/markdown/security_spec.rb b/spec/lib/open_project/text_formatting/markdown/security_spec.rb index c84f44c82199..c6b1dc8610d7 100644 --- a/spec/lib/open_project/text_formatting/markdown/security_spec.rb +++ b/spec/lib/open_project/text_formatting/markdown/security_spec.rb @@ -77,25 +77,25 @@ def to_html(markdown) end describe "classic XSS payloads" do - it "neutralises an inline world") expect(html).not_to match(/ external loader" do + it "neutralizes a )) expect(html).not_to match(/ pointing at javascript:" do + it "neutralizes an )) expect(html).not_to match(/ HTML injection" do + it "neutralizes )) expect(html).not_to match(/ document-title takeover" do + it "neutralizes document-title takeover" do html = to_html("<title>Attacker Title") expect(html).not_to match(/ that would otherwise swallow following content" do + it "neutralizes