informalsystems / themis-tracer

A tool for managing complex contexts for developing critical systems
Apache License 2.0
4 stars 0 forks source link

NOTE: This repository is no longer supported or updated by Informal Systems. If you wish to continue to develop this code yourself, we recommend you fork it.

Themis Tracer

Tracer is a prosthetic device for cultivating, and connecting within, the context of software development for critical systems.

Tracer is designed to support DOVES:dove:: Development and Operations that are Verifiable and Explicitly Specified ๐Ÿ˜‰.

Tracer seeks to improve the productivity of distributed teams of developers by supporting them throughout the development process and providing means to ensure the correctness and continuity of communication, implementation, and operation.

Tracer aims...

Tracer is developed by Informal Systems'.

WARNING: This project is still pre-alpha and nothing is stabilized, from the tech stack and functionality to the project name. That said, early adopters willing to contribute or give feedback are most welcome ๐Ÿ™‚.

Table of Contents

(Planned) Features

WIP Context management

Manage multiple parallel contexts, spread across any number of repositories.

WIP Tracing

Trace logical units (chunks of functionality) through:

TODO Tracking

Automate the specify -> formalize -> implement -> verify -> deploy -> revise life cycle, by tracking the flow of system properties from conception to delivery and back again.

TODO Monitoring

Verify coherence and consistency of your development with its context in CI

Installation

The tool is currently in early development, so expect snags.

Prerequisites

Optional

From git using cargo

cargo install --git https://github.com/informalsystems/themis-tracer.git

If this fails for any reason, please open a ticket and try installing from source, as documented in the next section.

From source

git clone git@github.com:informalsystems/themis-tracer.git
cd themis-tracer
cargo install --path .

Documentation

See the CLI usage documentation.

Tutorial

Logical units in markdown

We make use of a variant of PHP Markdown Extra's definition lists to define logical units (i.e. requirements) in Markdown.

# Specification

|SPEC-HELLO.1|
: When executed, the program must print out the text "Hello world!"

Logical units have unique identifiers associated with them. In this overly simple case, we have the requirement labelled SPEC-HELLO.1. In order to differentiate logical unit identifiers from ordinary definition list items, we enclose the tag in pipe symbols (|).

Each logical unit identifier must have a version number associated with it. In this case, unit SPEC-HELLO has a version of 1 at present. This helps us ensure that, when specifications change, we can automatically see which parts of the code need to change too.

TODO

Aliases and scripts

Useful bash functions and alias are collected in ./utils.sh. You might wish to source this from your rc file.

License

Copyright 2020 Informal Systems Inc. and contributors (see CONTRIBUTORS.md)

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.