xaizek / dit (License: GPLv3) (since 2018-12-07)
Command-line task keeper that remembers all old values and is meant to combine several orthogonal features to be rather flexible in managing items.
<root> / docs / 03-description.md (979a12ca7c07cb46ebc63f77697ad11eee518922) (2,348B) (mode 100644) [raw]
DESCRIPTION
===========

Overview
--------

The overall hierarchical structure of data is as follows:

```
+-------------------+         +-------------+
|   Project A       |         |  Project X  |
|                   |    .    |             |
| Item a    Item b  |         |  Item a     |
| ------    ------  |    .    |  ------     |
| entry1    entry1  |         |  entry1     |
| entry2    entry2  |    .    |             |
|           entry3  |         |             |
|                   |         |             |
+-------------------+         +-------------+
          |                           |
    +-----------+               +-----------+
    | Project A |-------+-------| Project B |
    |  Config   |       |       |  Config   |
    +-----------+       |       +-----------+
                        |
                        v
               +-----------------+
               |  Global config  |
               +-----------------+

```

Projects
--------

Projects define storage namespace for items and configuration settings.
Project-specific settings can override almost any of the global ones.

Project manages distribution of unique identifies among items constituting it.

IDs
---

Identifies are three character strings picked in semi-randomised way that
guarantees that they won't repeat.  The space is picked at the moment of project
creation.  Each character can be one of 26 lower case and 26 upper case letters
of Latin alphabet.  IDs start as at the length of three and then automatically
extended.

Items
-----

Each item in a project is uniquely identified by its symbolic ID.  Items consist
of entries, which are key-value pairs.  Removing of an entry is performed by
assigning empty value to it.

Entries
-------

Users' key names start with one of `[a-zA-Z]` characters and are followed by any
of `[-a-zA-Z_0-9]`.  Builtin keys start with `_`.

Currently available builtin keys:

 - `_id` -- identifier of the item;
 - `_created` -- creation date and time of the item;
 - `_changed` -- date and time the item was last changed.

Values can contain arbitrary strings, which might include newline characters.

Changes
-------

When a change is made to an entry, instead of actually overwriting an old value
with a new one, new one just hides old value keeping whole history of item
changes available for the future.
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/dit

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/dit

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master