artifact-app 1.0.1

Artifact is a design doc tool made for developers. It allows anyone to easily write and link their design docs both to each other and to source code, making it easy to track how complete their project is. Documents are revision controllable, can be rendered as a static web page and have a full suite of command line tools for searching, formatting and displaying them.
Documentation
[REQ-purpose]
text = '''
Write a flash card quizzer from scratch and learn about artifact
while doing so.

The example tutorial can be found here:
    http://wiki.openhatch.org/Flash_card_challenge
or at: {repo}/flash_card_challenge.htm

The program should be easy to understand and follow along so that it can
reach maximum audience for instructing in artifact

This can be broken into several parts:
- [[REQ-learning]]: define goals for ease of learning
- [[REQ-cmd]]: requirements for the command line interface
'''

[REQ-learning]
partof = 'REQ-purpose'
text = '''
The flash program should do things in a way that is most condusive to learning
the desired subject. This includes:
- asking items in a random order
- asking missed items more often
- telling the correct answer after the user answers incorrectly
- allow users to configure time limits, so they can
  compare results between quizzes.

duplicates **shall not** be allowed, as they would be extremely confusing
'''

[REQ-cmd]
partof = 'REQ-purpose'
text = '''
The minimum viable product shall be a command line utility that is given the
path to one or more question files as arguments and has options which
help it obtain the goals outlined in [[REQ-learning]].

It shall also:
- give the user feedback on each question
- print out a final report

See [[SPC-cmd]] for the specification.
'''

[SPC-cmd]
text = '''
In addition to the path to one or more question files, the arguments
for the cmdline utility shall be:
- `-t`: specify the time allowed for each question
- `-T`: specify the total time allowed for the whole quiz
- `-r NUM`: repeat questions only a certain number of times.
    By default there is no limit.

## Responses
When an answer to a question is correct, a happy message **shall** be 
displayed. Otherwise, an error message with the correct answer **shall** be 
displayed.

The program will ask one question at a time, recording how many answers
the user got correct/incorrect.

TODO: detail how the message shall look.

## Final Results
When the program is complete a report shall be printed with:
- time taken, broken up by whole quiz and each question
- the user's total score
- questions ranked by ones the user had the most difficulty

Further information:
- [[SPC-load]]: specification for loading data
'''

[SPC-random]
partof = 'SPC-cmd'
text = '''
The questions **shall** be presented randomly.

Questions that are answered incorrectly **shall** be given a higher weight to
being asked again, to help the user learn.
'''

[TST-cmd]
text = '''
End to end tests shall be written to validate the cmdline interface:
- pass in invalid arguments and expect rc != 1
- pass in a valid path and answer several questions correctly
  and exit, validating the report
- pass in a valid path and answer a question wrong, validating
  the error output
'''