Following is the list of critical additions and updates for a given released version:

0.9.5
-----
- Data References
    - Introduced concept of Contextual Data References.
    - Built-in Support for Column and Row Excel Data References.
    - The Excel data references are automatically loaded by Arjuna during init().
    - The references are easily accessible using the `request` object in test/fixture functions.
    - Added example code and doc.
- Localizer
    - Introduced concept of localization
    - Built-in support for Excel based localization files
    - Excel localizers are automatically loaded and merged into a single Contextual Data Reference
    - The `L` function is a special function to easily localize a string as per `Locale`.
    - Introduced `Locale` enum and ArjunaOption.LOCALE to control configured Locale.
- Chrome driver creation uses the Service object as the previous signature was deprecated.
- Arjuna uses sys.exit with the same code as returned by pytest.main

0.9.4
-----
- create-project command added to CLI.
- conftest.py is generated as per project_name.lib.fixture structure.
- Fixed example codes across projects.
- Data Driven Testing
    - Fixed indexed values in Data Record.
    - Data Record keys/names are now case-insensitive.
    - Support for `records` markup.
    - Support for `data_function` markup.
    - Support for `data_class` markup.
    - Support for `data_file` markup (Out of the box support for XLS, TSV/CSV and INI formats.)
    - Support for record filtering in data files.
    - Support for `many_data_sources` builder.
    - Added example code and docs for data driven testing.

0.9.3
-----
- Added Linux to enum.

0.9.2
-----
- Bug fix: attr and related With factory methods had a bug post refactoring. Fixed.
- Bug fix: screenshot path in HTML report hook.
- Entity -> DataEntity for clarity of purpose.
- BrowserConditions class added with DocumentReadyState condition automatically called for browser methods.

0.9.1
------
- In test or test scope fixture, item can be added to module scope.
- GNS default format changed to YAML. Added PyYAML to setup.py as dependency.
- root and anchor element checking refer to existing element labels. Avoids duplicating same locator information.
- Introduction of "withx" (With Extended) in GNS for cleaner identifiers which share same pattern.
- Added mimesis as a dependency in setup.py. Arjuna will use its facilties for faking/generating commonly used data.
- Introduction of basic Data Generator wrapper class on top of Mimesis.
- Value class is an overhang of Java version of Arjuna. It is completely removed from Arjuna as object wrapper.
    - DataRecord or Configuration values are not Value objects any more.
    - Value class remains to provide any conversion class methods, which can be a useful feature to retain.
- Added SourceNode class. 
    - element.source.node gives an object of this. 
    - Provides finder methods for directly finding content in element source rather than browser based selenium commands.
    - Added xfinder in arjuna.core.xml to define finding strategy.
- Singular names for all directories.
- config.get_arjuna_option_value and config.get_user_option_value -> config.arjuna_options.value, config.user_options.value

0.8.17
------
- Widget class renamed to Section. Widget and Dialog are synonyms for Section.
- Concept of my is removed. pytest does not allow multi-scope fixtures. request fixture is used the same way in fixtures and tests now.
- For data driven test, one needs add 'data' as an arg to the test.
- Common fixtures can be placed in lib.fixtures.
- HTML report screenshots related changes:
    - add_screenshot_for_failed_result now add_screenshot_for_result
    - Behavior can be controlled by passing ignore_passed (on by default) or ignore_fixtures (off by default) arguments.
    - Expects a screen_shooter in Function or Module space. Any object with take_screenshot(prefix) is a screen shooter. 
    - Usage is very simple. Include the following in conftest.py:
        @pytest.mark.hookwrapper
        def pytest_runtest_makereport(item, call):
            result = yield
            PytestHooks.add_screenshot_for_result(item, result)
    - Screenshots are now taken for failures in fixtures as well. Arjuna now does not depend on presence of request fixture in item.funcargs.

0.8.16
------
- Fixed name typo and arg bug in browser api.
- GuiMultiElement gives interface just like GuiElement for source inquiry.
- GuiMultiElement has many assertions available now: assert_size, assert_min_size, assert_max_size, assert_empty, assert_not_empty
- Asserter methods have simpler interface. Goal now is to add higher level assertions in objects themselves.

0.8.15
------
- Introduce __state__ special label in GNS. This element can be automatically checked as a part of Gui Loading Protocol. Avoids the need for writing a validate_readiness method for simple single element loading need.
- Module space bug fix.

0.8.14
------
Minor - Doc links in main README.md made absolute because for PyPi.

0.8.13
------
- Added arjex_internals examples project to create example code that reflects/tests internal workings of Arjuna.
- CLI changes based on community discussion
    - c/consider prefix changed to i/include
    - i/ignore prefix changed to e/exclude
    - --enumerate-only change to --dry-run
- My.repr method is used for including test data in test name. No more of the staple 'my0' in the names.
- Fix in PyTestHooks. Still need to look for a better solution. request object is not retrievable when error happens in fixture.
- To support nested element finding across all With locators that use XPath, "." is automatically pre-fixed if not present.
- New named exceptions introduced for better information: GuiNotLoadedError, GuiLabelNotPresentError, GuiNamespaceLoadingError
- Concept of root element introduced for Widget. 
    - Widget takes a keyword argument 'root_element_locators' in its __init__method.
    - You can specify a single locator (With object) or a list of locators.
    - You can also specifiy it in corresponding GNS file with a special label: __root__
    - If both are specified, then one passed in init overrides the GNS entry.
    - If root element is specified in any of the above manner, it is used to find elements when factory methods of Widget are used (e.g. .element())
    - If root element is NOT specified, automator is used as the finder.
- Test Object Space (earlier called Shared Spaces)
    - my.modules_shared_space is changed to my.module.space for better code structure.
    - request.space in test refers to the current test's scope.
    - In fixtures, request.space refers to the scope as per the fixture scope.
    - With request.space, and request.space, storing is done for scope, retrieval is from current test object up the parent chain.

0.8.12
------
- arjuna_launcher.py moved to scripts directory and updated to support new structure.
- archives directory is not created now.
- Cleanup of arjuna central conf and description files.
- Examples:
    - Web UI Automation Basics
        - DropDown and RadioGroup
    - GUI abstraction
        - Gui Namespace
        - Creating an App Class
        - Gui Loading Logic
        - App Model
        - App-Page Object Model
        - App-Page-Widget Object Model
- Added 'fail', 'assert_not_equal', 'assert_true', 'assert_false methods to Asserter.
- Dropdown bug fix as per With.tag instead of With.tag_name
- Name changes for consistency:
    ns_dir -> gns_dir
    def_file_name -> gns_file_name
- Formalized Gui Loading Model and implemented GuiConditions, GuiReady condition and GuiNotLoadedError exception.


0.8.11
------

- With.meta -> changed to With.label
- Fix for GNS for attr based identification.
- Support for static RunID when --static-rid switch is passed. Useful during script development. Default is dynamic timestamped runid.


0.8.10
------
Primary Goal: Document Usage of Key Features. Make code changes to support doc flow and intuitive names/usage.

- Added asserter object to 'my'
- Split Example Project to represent documentation sections.
- Examples are now tracked based on transformation to @test and doc written.
- Examples:
    - Core Features
        - Writing First Test
        - Value abstraction
        - Configuration - Arjuna Options and User Defined Options
    - Web UI Automation Basics
        - Getting Started with WebApp
        - GuiElement - Selenium By's Equivalent, Arjuna Extensions, Basic Interactions
        - Creating a Self-Contained App Class
        - GuiMultiElement
- Added non-coding documentation:
    - Project Structure
- CLI Changes
    - cm/im switches removed based on new test structure.
    - cf/if changed to ct/it (--consider-tests, --ignore-tests).
    - run-pickers changed to run-selected.
- Simplification of With
    - class_name, class_names, compound_class -> With.classes
    - css_selector -> selector
    - tag_name -> tag
    - link_text -> flink (Full text of link)
    - link_ptext -> link (Default match in Arjuna is Partial)
    - javascript -> js
    - attr_value -> fattr (Full attribute)
    - attr_pvalue -> attr (Default match in Arjuna is Partial)
- WebApp Interface Improvements
    - delegates all calls which it does not contain to its 'ui' obj. It simplifies the App abstraction code in tests.
    - title is a direct inquirable attribute
    - go_to_url is a direct call.
- Name and importing changes
    - AnyRefValue changed to Value. It is now a direct arjuna import.
    - DefaultTestContext -> RunContext
    - guiauto_max_wait property method -> guiauto_max_wait
- With.attr* now take two arguments and simple strings rather than [attr][value] string.
- test.my and Gui have Arjuna's asserter object. More assertions to be added. AsserterMixin moved to asserter module.
- Current working directory is changed to project directory before pytest is launched.
- pytest.ini now present inside arjuna deployment.
- conftest.py now resides inside tests directory.
- Basic proof of concept done w.r.t. creating session level fixtures outside of conftest. Will build on this in upcoming versions.

0.8.9
-----
- (Critical Fix) Support for @test decorator withour any args for simple tests.
- Support for module level shared space.

0.8.8
-----
- wait_until_element_absent method support in Gui.
- Element filtering support for multi-element. (Example 34).
- Support for loadable page and widget via overridable prepare, reach_until and validate_readiness methods.
- Support for browser level screenshot.
- Support for automatic screenshot on failure in test and inclusion in HTML report.
- Support for -cm -im -cc -ic -cf -if test filtering switches added.
- Support for -e --enumerate-only switch added to check display picked tests without running.
- Added @test decorator for Arjuna test function.
- Added support for defining dependencies by provide id and exclude_if args to @test
- Data Driven Testing support using drive_with argument to @test
- Support for a single data record source using record argument.
- Added support for data store, shared objects and basic data pipeline.
- Support for 'my' as a single argument containing info and data about test func.
- Support for module level and test level fixtures using @for_module and @for_test decorators.
- Support for lookup of a resource in the the reverse order of function, class, module and session.
- Fixtures take request as arg. Tests take my and request as args.
- Dictionary as well . supported for setting and retrieval of resources.

0.8.7
-----
- Arjuna now uses pytest as its engine instead of unittest. It supports unittest style tests as well.
- Added pytest and pytest-html as dependencies in setup.py.
- Reporting: Added support for XML and HTML reporting simultaneously. Both are switched on by default.
- CLI: Added -rf switch to which one or more of the ReportFormat allowed names can be supplied.
- Concept of Run ID representing a given run introduced.
- CLI: Support for specifying Run ID added. Default is 'mrun'.
- Logging functionality is fixed. Extraneous logs removed.
- CLI: Support for -dl (console display level) and -ll (log level) CLI switches.
- Log and screenshots directory is within Run report directory for a run id.
- RunID is clubbed with timestamp to form the final run id to avoid any overwriting of reports.

0.8.6
-----
- Automator is created in the context of an App.
- Elements are created in the context of a GUI (App/Page/Widget)
- Nested Element Finding.
- Partial Element can be used to find elements as well.
- Drodown and radiogroup components fixed.
- OR relationship bug fixed for multiple With identifiers.
- Introduced FrameIsPresent and WindowIsPresent Conditions.
- Max wait time has been made configurable for some contexts at call level.
- Window logic works. Improved window waits. All wait is constrained by Gui max wait.
- Frame logic works. Improved window waits. All wait is constrained by Gui max wait.
- Conditions raise TimeoutError which is a WaitableError.
- Exception message contains more string representation of Locator information. 
- Basic unittest integration to run all tests in the tests directory of a project.
- Element names in GNS files are validated as Arjuna names (Valid Python names, 3-50 length)
- Importing from arjuna has been heavily simplified. from arjuna import * provides all public names.
