<commit_before>
The default is to use the languages *inside* the web image
$ ./cyber-dojo up

Whereas this creates a new languages volume and mounts that which replaces the default
$ ./cyber-dojo create-collection refactoring=https://github.com/JonJagger/cyber-dojo-refactoring-exercises.git
$ ./cyber-dojo up exercises=refactoring


Note: [cyber-dojo up] should check it server is already up and ask you to do [down]
Note: need a check that each docker image has a user in it called nobody
      (don't think it's uid is important)

- - - - - - - - - - - - - - - - - - - - -

)) is Clojure manifest from Frederick in the main web image?
   If not build a new web image and push it to cdf.

- - - - - - - - - - - - - - - - - - - - -

)) ./cyber-dojo catalog

     design issue here is that I need a command that can be used for the default
     manifests and also when a custom manifest collection is used.

     I could just list the one in use in the web container but I'd like an api
     that allows you to list a create but not-yet used (up'd) collection.

     It would also make sense to have a command that lists the name of the
     custom collections that have been created. tags? Or are tags only for data-collections?
     $ docker volume create --help
     Suggests --label=[]
     $ docker volume ls --help
     Suggests --filter=[]

     $ docker volume create --name=${NAME} > /dev/null
     Suggests mimicking the docker api
     Viz
     $ ./cyber-dojo volume create --name=NAME --git=URL
       This would check that the URL adhered to the api,
       viz it specified whether it was languages/exercises/instructions
       If ok it would add a label, eg cyber-dojo-volume
     $ ./cyber-dojo volume ls
       This would filter on the label set
     $ ./cyber-dojo volume rm VOL [VOL...]
     $ ./cyber-dojo volume inspect VOL [VOL...]
       This would do the old catalog listing

     cyber-dojo.rb could do with some documentation showing example output
     of various internal commands.

- - - - - - - - - - - - - - - - - - - - -

)) finish the what/how separation

     ./cyber-dojo up exercises=a
        Use meta-data to confirm a is an exercise collection?

     Union of collection. Do in later release.
     ./cyber-dojo up exercises=a,b
        With meta-data the command could simplify to [./cyber-dojo up a,b] ?? no.

        unioning affects the UX quite a lot.
        It also introduces the possiblity of manifests from different collections
        having an identical display_name...

        DONT add the collection name to the path because then it will *NOT* replace
        the default it will union with it...<commit_msg>notes update<commit_after>
The default is to use the languages *inside* the web image
$ ./cyber-dojo up

Whereas this creates a new languages volume and mounts that which replaces the default
$ ./cyber-dojo create-collection refactoring=https://github.com/JonJagger/cyber-dojo-refactoring-exercises.git
$ ./cyber-dojo up exercises=refactoring


Note: [cyber-dojo up] should check it server is already up and ask you to do [down]
Note: need a check that each docker image has a user in it called nobody
      (don't think it's uid is important)

- - - - - - - - - - - - - - - - - - - - -

)) is Clojure manifest from Frederick in the main web image?
   If not build a new web image and push it to cdf.

- - - - - - - - - - - - - - - - - - - - -

)) ./cyber-dojo catalog

     design issue here is that I need a command that can be used for the default
     manifests and also when a custom manifest collection is used.

     I could just list the one in use in the web container but I'd like an api
     that allows you to list a create but not-yet used (up'd) collection.

     It would also make sense to have a command that lists the name of the
     custom collections that have been created. tags? Or are tags only for data-collections?
     $ docker volume create --help
     Suggests --label=[]
     $ docker volume ls --help
     Suggests --filter=[]

     $ docker volume create --name=${NAME} > /dev/null
     Suggests mimicking the docker api
     Viz
     $ ./cyber-dojo volume create --name=NAME --git=URL
       This would check that the URL adhered to the api,
       viz it specified whether it was languages/exercises/instructions
       If ok it would add a label, eg cyber-dojo-volume
     $ ./cyber-dojo volume ls
       This would filter on the label set
     $ ./cyber-dojo volume rm VOL [VOL...]
     $ ./cyber-dojo volume inspect VOL [VOL...]
       This would do the old catalog listing.
       This should show the origin (URL) of the volume.

     Coming round to the idea that the main cyber-dojo repo does *not* contain
     app/data/languages etc. There is no default. The [cyber-dojo up] command
     adds the defaults if you don't provide any. First time you call that
     it builds the three default volumes (like it builds katas data-container)
     and uses them.
     Issue then becomes are you allowed to delete the default volumes by name?
     I think yes, since then you could create a new one to install your own
     default. If you delete the default and try [cyber-dojo up] then it will
     recreate it. Similarly if you delete the default, try to recreate your
     own and misname it, then again it will try to recreate it.


     cyber-dojo.rb could do with some documentation showing example output
     of various internal commands.

- - - - - - - - - - - - - - - - - - - - -

)) finish the what/how separation

     ./cyber-dojo up exercises=a
        Use meta-data to confirm a is an exercise collection?

     Union of collection. Do in later release.
     ./cyber-dojo up exercises=a,b
        With meta-data the command could simplify to [./cyber-dojo up a,b] ?? no.

        unioning affects the UX quite a lot.
        It also introduces the possiblity of manifests from different collections
        having an identical display_name...

        DONT add the collection name to the path because then it will *NOT* replace
        the default it will union with it...
{'fraction_non_alphanumeric': 0.0791981597108117, 'fraction_numerical': 0.0, 'mean_word_length': 2.340834248079034, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 18, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7419898', 'n_tokens_mistral': 1755, 'n_tokens_neox': 1677, 'n_words': 826}