## Changelog

When the reflow CLI is executed, it will compare its version against the API server running. It will warn upon any minor version increases, and fail on any major version increases.

This tool generally follows [semantic versioning](https://semver.org/). Given a version number [MAJOR.MINOR.PATCH]: 

1. A MAJOR version increase is made when the API has changed in such a way that the CLI is now incompatible
2. A MINOR version increase is made when a backwards compatible functionality is added
3. A PATCH version increase is made when a backwards compatible fix/chore is implemented.

For stability, it is always recommended to always run the latest version of the reflow CLI.

This file is also available at [https://reflow.io/changelog](https://reflow.io/changelog)

### [4.14.0] - May 3, 2022
- [FEATURE] Track application releases via sourcemap content hashing
- [FEATURE] Capability to download sourcemap content.
- [FEATURE] Capability to associate multiple browser sequences with an application
- [FEATURE] Capability to disable screenshot stabilisation for faster action execution.
- [PERF] Optimized replay pathways: reducing all wait times on a per-action basis. Approximately 70% speedup.
- [PERF] Move screenshot comparison into a worker thread
- [PERF] Move screenshot comparison outside hot pathway: do not wait for comparison before progression
- [PERF] Do not load chatwoot unless button is pressed
- [FIX] Install browsers on reflow install
- [FIX] Remove duplicate page load on loading up a recorder instance.

### [4.13.0] - April 19, 2022
- [FEATURE] Embed support widget (chatwoot)

### [4.12.4] - April 15, 2022
- [FIX] Automatically install browsers after installing reflow locally

### [4.12.3] - April 9, 2022
- [FIX] Improve mobile view of recording pane: make panel persistent, fix padding

### [4.12.2] - April 8 2022
- [FIX] Expire images in frontend S3 cache after 15 minutes : this should prevent stale images from being shown on client, but still allow browser to cache the presigned image.

### [4.12.1] - April 5 2022
- [PERF] Save test actions in parallel.
- [FIX] Sync theme between devtools pane and reflow main app
- [FIX] Auto reload chrome when DNS propagation appears to be an issue whilst waiting for recorder
- [FIX] Fix image comparison assertions inside deep iframe 
- [FIX] Adjust backup to screencast frames to run more often
- [FIX] Increase expiry timeout on presigned images in UI to avoid them expiring after browser cache expires but before refresh.

### [4.12.0] - Mar 25 2022
- [FEATURE] Action timeouts are now configurable. Apply timeouts to snippets / execute javascript functions.

### [4.11.0] - Mar 23 2022
- [FEATURE] CLI command to run a single image comparison. Local usage only.
- [FEATURE] CLI commands without API keys cache credentials on local machine for 15 minutes -- eliminating the need for re-login with sequential commands
- [FEATURE] New Action: "Execute Snippet" and corresponding "Push Snippets" "Pull Snippets" CLI commands to syncronize them between the server and a local folder.  
- [FEATURE] Run Metric Graphs showing all run results and duration at the top of the run history.   

### [4.10.5] - Mar 17 2022
- [FIX] Handle additional image cropping edge cases where targeted element is hidden with width outside of the image width

### [4.10.4] - Mar 17 2022
- [FIX] Increase Apollo Timeout in API Key CLI.

### [4.10.3] - Mar 17 2022
 - [FIX] Increase Apollo Timeout in JWT CLI to account for lower internet connection speeds.

### [4.10.2] - Mar 17 2022
 - [FIX] Fix edge case in image comparison when cropping an image to a size bigger than the destination; could happen upon significant visual changes.

### [4.10.1] - Mar 16 2022
 - [FIX] Ensure CLI-passed variables are also saved in test metadata for CLI filtering. 

### [4.10.0] - Mar 16 2022
 - [FEATURE] Capability to pass device-emulation-profile name to CLI

### [4.9.1] - Mar 16 2022
 - [FIX] More resilient authentication via force refreshing session every 20 minutes.
 - [FIX] Fix a bug in executing custom browser javascript causing some interactions to not execute.

### [4.9.0] - Mar 16 2022
 - [FEATURE] New action for executing custom javascript in browser.
 - [FEATURE] No longer require API key for CLI `pull` command -- default to login if not available

### [4.8.0] - Mar 14 2022
 - [FEATURE] CLI command to download all images for a given test run. Requires API key. 

### [4.7.0] - Mar 13 2022
 - [FEATURE] Capability to add an API key that allows cli/api access without login. Available to AWS Marketplace users only

### [4.6.0] - Mar 08 2022
 - [FEATURE] Capability to add a description to a Test Action

### [4.5.0] - Mar 07 2022
 - [FEATURE] Implement test name/description/device changes via UI
 - [FIX] Handle ambiguity better when performing the "best selector" search.

### [4.4.2] - Feb 28 2022
 - [CHORE] Documentation when opening the test dashboard with no pre-existing tests

### [4.4.1] - Feb 28 2022
 - [FEATURE] Auto healing button now also prompts to auto heal visual regressions

### [4.4.0] - Feb 23 2022
 - [FEATURE] Capability to send a kill command to a cloud runner to stop an in-progress run

### [4.3.1] - Feb 22 2022
 - [PERF] Preload the recorder whilst waiting for VM to start

### [4.3.0] - Feb 21 2022
 - [FEATURE] Always show picture of "best effort" element selector upon a failed-to-find element interaction
 - [FEATURE] Add Auto heal button to rewrite the test action with that "best effort" selector.
 - [FEATURE] More stability improvements in element match
 - [PERF] Frontend optimization around realtime subscription updates

### [4.2.0] - Feb 17 2022
 - [FEATURE] Sort customer usage records
 - [FEATURE] Enable sorting of more test/run grid columns

### [4.1.0] - Feb 16 2022
 - [FEATURE] Expose customer usage records for AWS Marketplace customers in the billing page.
 - [FIX] Remove overlay of element dimensions on captured screenshots 
 - [FIX] Better handling of record page interactions where device scale does not match viewport scale.

### [4.0.0] - Feb 14 2022
 - [FEATURE] Serverless recorders in preparation for multi-region / custom runners push
 - [SECURITY] Isolate runs to not run on shared VMs; each team now on an isolated virtual cluster. Breaking change due to API protocol change.
 - [FEATURE] Expose more runner information in a Runners UI. 
 - [FEATURE] Expose more details about the Run's runner in API response 

### [3.1.0] - Feb 03 2022
 - [FEATURE] Track speed of DOM changes for action element relative to the prior action finish time and use that to power element waiting loops. Speeds up replayed element interactions without sacrificing reliability.
 - [FIX] Backend upgraded (now uses appsync pipeline resolvers), with some non-breaking graphql api changes introduced
 - [FIX] Increased reliability around page frame changes; more retry loops whilst waiting for page frame to load.

### [3.0.0] - January 16 2022
 - [FEATURE] Software Licenses / AWS Marketplace integration
 - [FIX] Integration with new backend infrastructure stack; adjusted API URL
 - [FIX] When an initial URL is invalid, the recorder still opens and provides an appropriate error

### [2.2.0] - November 23 2021
 - [FEATURE] Single click oauth login
 - [FIX] Dark mode now also applies to authenticator component

### [2.1.0] - November 05 2021
 - [FEATURE] Capability to use an emulated mobile device to record / run tests.
 - [FEATURE] Capability to execute a test against a different device to the one configured in the test.   
 - [FEATURE] Capability to compose pipeline actions with different devices to the one configured in the test.   
 - [FEATURE] Visual Diff (Percentage) of the associated action page screenshot against its baseline is rendered on the test run action.    
 - [FEATURE] Capability to explicitly use a given baseline in the execute run UI.    
 - [FEATURE] When running a run without pre-defining a baseline, the most recent successful run for the same device/test version is used. 
             If it is the first run of that device, the most recent successful run of that test version is used. If it is the first
             run of that test version, then it is not compared with any other run.

### [2.0.1] - November 01 2021
 - [FIX] Tab width of watch recording tabs works better on mobile  
 - [PERF] Lowered datastore overhead

### [2.0.0] - October 29 2021
 - [FEATURE] Nodes now register/heartbeat against a manager process that points them towards things to execute.
             Avoids run contention and enables higher parallelism, usage based pricing. Breaking change, as polling for 
             runs now unsupported
 - [FEATURE] Screenshot stability now powered by SSIM. Custom Mix of SSIM and pixeldiff used for visualistation of diff.
 - [FIX] Playwright version now pinned to avoid playwright screenshot bug  
 - [FIX] First / last actions now show post/prior screenshot respectively (previously were just a blank screenshot)  
 - [FIX] Retry loops added to page stability functions
 - [FIX] Frame injection ensured before executing findElement calls; fixing failure caused by frame too slow.
 - [FIX] Fix capturing click/drag events when viewport is scrolled
 - [PERF] Screenshots of selected nodes are only done when the custom action form is open.

### [1.4.0] - October 20 2021
 - [FEATURE] Assertions can now be raised as either warnings or errors (previously, only errors).
             Assertions configured as warnings do not block the flow, but are highlighted when viewing results. 

### [1.3.1] - October 16 2021
 - [FIX] Dark mode now default

### [1.3.0] - October 15 2021
 - [FEATURE] Highlight the elements that reflow interacts with in UI
 - [FEATURE] Highlight mouse coordinates on selector / page images for mouse click or drag events
 - [FEATURE] Dark mode
 - [FIX] Completed elements now link appropriately to old test actions
 - [FIX] Exponential-Backoff retry loops around element node screenshotting to improve reliability
 - [FIX] Consolidation between `<component>:has-text(<text>)` and `<component>=<text>` selector scores.

### [1.2.0] - October 12 2021
 - [FIX] Better support for refreshing devtools by creating a cdp session per connected one, instead of sharing a global cdp session
 - [FIX] Better support for iframe actions where frame url doesn't exactly match 
 - [FIX] Better support for click/drag by tracking mouse location statefully.
         CDP event for mouse release could, under some conditions, have incorrect X/Y params so instead "most recent" 
         mouse move event is now used
 - [FIX] Add a backup method to CDP screencast frame/frame acks. CDP only has frame/frame-ack as a best-effort API. This 
         adds an interval check so that if we know about DOM updates but haven't had a new frame since before DOM updates
         and a timeout (2.5s) the CDP screencast session is refreshed via stop/start APIs.   
 - [FEATURE] Show visual comparisons of elements after assert step.
 - [FEATURE] Never show again option for action delete confirmations.
 - [SECURITY] Enable chromium sandbox when run on local machines to reduce untrusted test execution risk.

### [1.0.9, 1.1.0, 1.1.1] - October 4 2021
 - [PERF] Only use S3 to store non-draft images
 - [FEATURE] Visual screenshot assert: capability to asserts a given element matches the exact screenshot of an element when the test was first recorded
 - [FEATURE] In custom action selector form UI, the selected element will now show a screenshot of the captured element just below the preferred selector.  
 - [FIX] Find typescript more reliably when invoked in a non-npm directory.  

### [1.0.5, 1.0.6, 1.0.7, 1.0.8] - September 31 2021
 - [FIX] Remove browser event memoization layer; recalculate selectors just before supplementing action details.  
 - [PERF] Ensure reflow only gets evaluated once per frame via stripping the magic symbol and replacing it with a hardcoded text constant on document root.
 - [PERF] Increase performance inside browser by memoizing events and only recalculating selectors once per event.
 - [PERF] Increase performance by only sending mouse move events when mouse is down.

### [1.0.4] - September 30 2021
 - [FEATURE] Fill actions with a selector containing `input[type="password"]` get their text title replaced with '*'s.
 - [FEATURE] Show number of found elements and associated score for each selector in selector layout UI.
 - [FEATURE] Support for clicking / dragging elements.
