### ----------------------------------------------------
### -- Sparrow6
### -- Licenses: Artistic-2.0
### -- Authors: Alexey Melezhik
### -- File: Roadmap.md
### ----------------------------------------------------
# Roadmap

The Roadmap of Sparrow6 project development.

# Done

+ Perl/Bash tasks
+ test.pl6 - embedded test support ( aka m10 - METEN minimalistic embedded test engine )
+ multiroot story support ( ability to run multi root stories  )
+ ignore_story_err implementation
+ set_stdout implementation
+ ignore_error() instead of ignore_story_err()
+ implement cwd attribute
+ implement purge-cache
+ Add self!set-sparrow-root(); to Sparrow6::SparrowHub::API constructor
+ s6 - install/search/list plugin
+ freeze SparrowHub index for Sparrow/Perl5, disable upload action
+ read config support (set-conf/conf/SP6_CONF)
+ sudo support
+ Implement os() function
+ Rewrite resources/sparrow6common.pm to Perl6
+ Port Sparrowdo::DSL to Sparrow6::DSL
+ Sparrowdo - convert outthentic tests to regular tests
+ Sparrowdo - support for config
+ Sparrow6::Task::Runner::Api story => task renaming
+ Sparrowdo [copy local files](https://github.com/melezhik/sparrowdo/blob/master/core-dsl.md#copy-local-files)
+ Regexp interpolation
+ Sequences, Ranges, Withins
+ Streams for Sequences, Ranges and Withins
+ Handle comments inside code/generators correctly
+ Port Otthentic::DSL tests to Sparrow6
+ Don't allow  nested contexts
+ Task states ( ability to exchange data between tasks - implimented for Perl )
+ Ruby support
+ Python support
+ Document Sparrow6::Task::Check
+ S6 - `--repo-init` command
+ Document task states
+ Ruby plugins, bundle install test
+ Rename sparrow.index to index
+ module_run added
+ Powershell support
+ Renaming: suite.yaml => config.yaml
+ Renaming: story* => task*
+ Renaming: story  => task
+ Renaming: story.check  => task.check
+ Rewrite Sparrow client to s6 ( Sparrow::S6 )
+ Switch Tomtit to Updated Sparrowdo version ( github master branch )
+ Switch Sparrowdo to Updated Sparrowdo version ( github master branch )
+ SparrowHub reference removed from docs
+ modules/ => tasks/ renaming
+ ignore_task_err => ignore_task_error renaming
+ story_run => task_run renaming
+ story_var => task_var renaming
+ Consider lightweight SparrowHub alternative ( Azure free host, domain ) - http://repo.southcentralus.cloudapp.azure.com
+ Create information on SparrowHub retirement - reddit
+ s6 cli module-run added
+ Documenting repo.southcentralus.cloudapp.azure.com
+ Perl6 support ( after renaming )
+ Args stringification

# Urgent

- Reconsider Sparrowdo bootstrap ( need to remove some packages from there - git, perl ? )

# New syntax / renaming

- target_os() => os() # implemented but should be documented
- meta.txt => task.txt (???)
- sparrow.json => sparrow6.json (?)

# New features

These features are almost done, just list them here

- Task states ( ability to exchange data between tasks )
- config.pl6 support (???)
- m10
- `streams` # streams presented as a Hash ( need to document )
- `streams_arrays` # streams presented as an Array ( need to document )
- `dump_streams` ( implemeted for Perl, need to document )
- `note:` expressions ( done, need to document )
- m10 ( need to add more helpers )
- Low priority - document Sparrow6::Task::Runner Class
- Low priority - document m10 feature ( METEN - Minimalistic Embedded Testing Engine )
- Low priority - `s6 --install` install plugin without plugin name ( read data from sparrow.json in CWD )

# Documentation

- hook set_stdout gets merged with task stdout in ( implimented, need to document )
- task check is not triggered if there is no task  ( implimented, need to document ) - breaking changes

# Questionable

- Sparrowdo - Sparrow6::DSL::Assert - workaround for `input_param` method
- Sparrowdo - support for target_host
- Sparrowdo - cwd cli support ( do we need it? )
- Sparrowdo - vagrant support ( do we need it ? )
- Sparrowdo - git ( Sparrlets support, do we need it ? )
+ Sparrowdo - `var=name=value` command line support (done via --tags)
- Sparrowdo - `module_run`, `task_run` cli options support
- Deprecate set_stdout (???), hook stdout should contribute to task stdout (???)
- Don't allow generators/codes if check failures (???)
- Handle code failures in task checks (???)
- Impliment cwd parameter for Sparrow6 tasks
- Use api/v2 instead of api/v1
- meta.txt support
- Supporting outthentic messages
- Color/nocolor output
- Dry run support (??? is it possible with Sparrow6? I doubt)
- suite.json config support

# Medium priority

- Port existed Sparrowdo:: Modules to Sparrow6
- Adjust existing Sparrow plugins ( documentation fixes, compatibility with Sparrow6 core )
- Plugins - fix Perl5 generators as Array refs
- Write tests for Ruby common libraries - $task-dir/common.rb $root-dir/common.rb
- Write tests for Powershell streams support

# Low priority

- s6 cli - save / restore tasks
- Task descriptions (task.txt)
- dump_streams() implimentation for Ruby, Python, Powershell
+ Windows support ( run stories, run hooks )
- Catch stderr for hooks/stories (?)
- Don't strip comments from one-line code and generator expressions


# Other tools support

+ Switch Sparky to Updated Sparrowdo version ( done partly, need to check )
- Port Sparrowform to Sparrow6
- Make Old Sparrowhub plugins compatible with Sparrow6


# Breaking changes

- truncating to the `match_l` is removed, we reports check results as is, even for really long matched strings (examples/match-length.pl6)
- `:blank` is deprecated, you should use regexp: `^^ \s* $$`  instead
- `suite.ini`, `suite.json` are not supported
- `story.pm` files are not supported
-  task recursive execution is not supported
- `outthentic_die`, `outthentic_exit` functions are not supported
- old reports formats ("production, default, concise") are not supported
- private plugins supports dropped in favor of private repositories



