Because
* Whenever you filter by a related entity in django you'll always get duplicates in the results set so you have to add a .distinct() to the end of it
This commit
* Adds the necessary distinct filter to the owners queryset
Because
* We'd like to prevent targeting configs with invalid JEXL syntax from landing
This commit
* Uses the PyJEXL validator to validate the syntax of all targeting configs
* Adds an extra test to make sure new targeting configs are added to both constant classes
Because
* We neglected to validate that the clone name can't exceed 80 characters
This commit
* Validates clone name is <= 80 characters
* Noticed we were only validating experiment length on the client side, not the server side, so added it in the serializer too
Because
* Its easier to reason about options in a drop down when they're sorted
This commit
* Sorts the options in all the directory view filter drop downs
* Default sorts the experiment list by latest change before applying column specific sorting
Because
* Some of the config API fields were inconsistently singular or plural
* Some fields names didn't reflect the type of data they contained
This commit
* Renames fields that return a collection to pluralized
* Renames fields to match the type of data they return
Because:
* Results pages were failing to load if a metric was listed as an outcome metric but it had no data
This commit:
* Will gracefully ignore outcome metrics that don't have data.
* fixes#5888 feat(nimbus): added links to the sidebar for experimenter.info and slack
Because
* links to experimenter.info and #ask-experimenter are helpful
This commit
* adds links to experimenter.info and #ask-experimenter to the sidebar
* moved links to SidebarActions, moved URLS to constants, added feedback and removed text weight
* added feedback icon
* add more spacing around links
Co-authored-by: Jared Lockhart <119884+jaredlockhart@users.noreply.github.com>
Because:
* experiments can be ended before enrollment is paused
This commit:
* switches to experiment duration rather than proposed duration if
enrollment wasn't explicitly ended
Because
* The integration test PyPom library provides a handy .open method that opens the page and waits for it to load
* This can clean up a lot of code in the tests
This commit
* Uses .open in all the integration tests
Because:
* the archive button is disabled during loading, but this is not the
same as the archive action being disabled altogether
This commit:
* separates archive disabled state from archive query loading state,
only showing the explanatory tooltip during the former state
Because:
* archived experiments cannot be changed
This commit:
* prevents the display of the alert listing pages with missing details
for an archived experiment
Because:
* resetting sort order on the index page clears query parameters
This commit:
* applies a bugfix to correctly handle reset query parameters, rather
than restoring the previous non-empty stored value
Because:
* Users would like to toggle between relative and absolute branch comparison values - functionality was previously implemented for two tables deemed most important, this change allows the toggle to switch in sets of tabs containing these tables plus, now, the highlights table
This commit:
* Enables the highlights table to toggle between absolute/relative comparison
* Removes the branch comparison button, uses Bootstrap's Tabs component instead for applicable tables since the toggle is not useful for the metric tables
* Contains cosmetic tweaks, including spacing updates, updating heading levels and adding a metrics heading, combining monitoring/analysis sections, and aligning tooltips horizontally
Because
* Now that we have nice clear base classes for the integration tests
* We don't need to override some shared logic in the child page classes
This commit
* Moves all the shared page logic to the respective base classes
Because:
* we want to place cloned experiments in context with the original
This commit:
* adds a line to HeaderExperiment component identifying the experiment as a
clone with a link back to the original parent
* updates GQL query and API to expose full parent experiment data, mainly for
slug & name needed for the link
* updates types & tests as necessary
Because
* We've seen persistent intermittent failures in the remote settings integration tests
* It turns out the remote settings pages can render in stages so it's not sufficient to just wait for the page wait locator for all the UI elements to be available
* Also we were using the old remote settings review page instead of the new simple one that Experimenter links to
This commit
* Adds a wait locator to every UI element in the Remote Settings pages so interactions shouldn't occur until the element is visible
* Adds helpful messages to each of the waits so if one fails the test should clearly say what it was waiting for and couldn't find
* Use the new simple-review page in Remote Settings instead of the old review page
Because
* We should add a simple integration test for each new major feature we add
This commit
* Adds an integration test for archiving
* Splits the integration tests into two groups
* Tests that run for each application (for remote settings integration)
* Tests that only run once (for things constrained just to experimenter UI)
* Adds a random identifier to the end of integration test experiments to allow rerunning tests locally
* Cleans up the page load wait locators
Because:
* we want to enable cloning of experiments
This commit:
* adds the clone experiment GQL mutation in front end
* creates a useCloneDialog hook with CloneDialog display and mutation
logic that can be partially controlled and watched from SidebarActions
* adds display of general submit errors to CloneDialog
* updates types & tests as necessary
Because
* We've had this issue for a little while where creating multiple changelogs in tests with timezone.now() can result in multiple changes having the same change datetime
* Several bits of logic depend on using the 'latest' change to understand the state of the experiment
* Multiple changes with the same change datetime can randomly invert the expected ordering and intermittently fail tests
This commit
* Changes the NimbusExperimentFactory to always use the same starting date and then create each change 1 day later
* For tests that are sensitive to timeouts, provide the ability to set the latest change to the current time
* For tests that require more detailed change date logic, explicitly set those dates in the test
* This should hopefully prevent this kind of intermittency from happening in the future
Because
* We previously used circle docker layer caching to speed up circle runs
* While migrating to the shared build cache, some confusing errors appeared
* We disabled it to see if that cleared up the issue
* Circle builds have been stable lately using the shared layer cache, but each circle run takes a significant amount of time to pull in remote images
* It's worth trying to re enable it to see if we can get both the circle caching and shared layer cache working together properly
This commit
* Re enables circle docker layer caching
Because:
* Experiment analysis can be ran with overrides on the Jetstream side. As of Jetstream metadata schema 4, these overrides are exposed and we want to convey them to users to eliminate confusion. The reference/control branch was taken care of in a prior commit - this covers the rest of the overrides.
This commit:
* Displays start date, end date, and enrollment period overrides in ExternalConfigAlert
* Displays 'analysis was skipped' text in the sidebar if 'skip' is set to true, slightly alters analysis ready text
* Refactors AppLayoutSidebarLaunched stories to new syntax, refactors PageResults stories to new syntax and adds story to better preview the page when the control branch is overridden
Because:
- We want to remove friction by allowing users to clone experiments
This commit:
- adds a new CloneDialog sub-component for SidebarActions that accepts a
new name based on the current experiment and offers a slug preview
- adds a Clone Experiment button in SidebarActions to summon CloneDialog
- adds SlugTextControl, a small component that shows a slugified preview
of string value
Because
* the whitenoise docs suggests putting the Django Security middleware above the whitenoise middleware
This commit
* reorders the middleware as suggested by whitenoise
Because:
* The 'testing locally' vis docs were out of date and could use more details
This commit:
* Updates the visualization portion of the nimbus-ui readme for more explicit instructions on testing locally, with other details
Because
* We expect many people to be adding/changing targeting configs over time
* It shouldn't be necessary to run make generate_types when landing changes to targeting
This commit
* Removes the enumeration typing from the V5 API for targeting_config_slug
Because
* Without a default ordering branches can be returned in any order
* Serializing the same experiment twice can yield different exact data occasionally
* This can cause non obvious intermittent test failures
This commit
* Specifies a default ordering for branches