# henriqf/sal architecture

> Architecture diagram of the GitHub repository henriqf/sal, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/henriqf/sal
- Repository: https://github.com/henriqf/sal

## Overview

SALT is a command-line tool for creating named or automatic project builds in a local registry, restoring builds, comparing versions, and viewing registry contents. The main flow starts at the CLI, loads configuration, then dispatches to build, restore, diff, or view behavior. Builds use file traversal and SHA-1-based content handling; registry metadata and content are stored on the local filesystem. The excerpts show the command dispatch and parts of these workflows, but not every implementation detail, so uncertain internal links are omitted.

Main entry points: [`sal.c`](https://github.com/henriqf/sal/blob/main/sal.c) (Command dispatcher), [`diff/diff.c`](https://github.com/henriqf/sal/blob/main/diff/diff.c) (Line diff engine), [`os/linus.c`](https://github.com/henriqf/sal/blob/main/os/linus.c) (File traversal), [`util.c`](https://github.com/henriqf/sal/blob/main/util.c) (File utilities)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_commands["Command interface"]
  node_dispatcher["Command dispatcher<br/>[sal.c]"]
  node_config["Config loader<br/>[sal.c]"]
end

subgraph group_builds["Build and restore"]
  node_build_creator["Build creator<br/>[sal.c]"]
  node_content_builder["Content builder<br/>[sal.c]"]
  node_restore["Build restore<br/>[sal.c]"]
end

subgraph group_registry["Registry and comparison"]
  node_registry_store[("Build registry")]
  node_content_store[("Hash content")]
  node_build_logs["Build log"]
  node_comparison["Build comparison<br/>[sal.c]"]
  node_diff_engine["Line diff engine<br/>[diff.c]"]
  node_registry_view["Registry viewer<br/>[sal.c]"]
end

subgraph group_platform["Platform and utilities"]
  node_file_traversal["File traversal<br/>[linus.c]"]
  node_file_utilities["File utilities<br/>[util.c]"]
  node_ignore_sets["Ignore sets<br/>[set.c]"]
  node_os_api["OS file operations<br/>[linus.c]"]
end

node_user(("CLI user"))
node_config_file["svconfig<br/>[svconfig.txt]"]
node_filesystem[("Local filesystem")]

node_user -->|"runs commands"| node_dispatcher
node_dispatcher -->|"initializes"| node_config
node_config -->|"reads settings"| node_config_file
node_config -->|"populates filters"| node_ignore_sets
node_dispatcher -->|"creates builds"| node_build_creator
node_dispatcher -->|"loads builds"| node_restore
node_dispatcher -->|"requests diff"| node_comparison
node_dispatcher -->|"requests view"| node_registry_view
node_build_creator -->|"traverses source"| node_file_traversal
node_build_creator -->|"checks exclusions"| node_ignore_sets
node_build_creator -->|"builds snapshot"| node_content_builder
node_content_builder -->|"reads and writes hashes"| node_content_store
node_build_creator -->|"writes build metadata"| node_registry_store
node_build_creator -->|"appends entries"| node_build_logs
node_restore -->|"reads build metadata"| node_registry_store
node_restore -->|"reads file hashes"| node_content_store
node_restore -->|"copies files"| node_os_api
node_comparison -->|"reads build hashes"| node_registry_store
node_comparison -->|"compares file contents"| node_diff_engine
node_registry_view -->|"reads build records"| node_registry_store
node_registry_view -->|"displays directories"| node_file_utilities
node_file_traversal -->|"enumerates files"| node_filesystem
node_os_api -->|"reads and writes files"| node_filesystem
node_file_utilities -->|"reads files"| node_filesystem
node_diff_engine -->|"reads compared files"| node_filesystem

click node_dispatcher "https://github.com/henriqf/sal/blob/main/sal.c"
click node_config "https://github.com/henriqf/sal/blob/main/sal.c"
click node_config_file "https://github.com/henriqf/sal/blob/main/svconfig.txt"
click node_build_creator "https://github.com/henriqf/sal/blob/main/sal.c"
click node_content_builder "https://github.com/henriqf/sal/blob/main/sal.c"
click node_restore "https://github.com/henriqf/sal/blob/main/sal.c"
click node_comparison "https://github.com/henriqf/sal/blob/main/sal.c"
click node_diff_engine "https://github.com/henriqf/sal/blob/main/diff/diff.c"
click node_registry_view "https://github.com/henriqf/sal/blob/main/sal.c"
click node_file_traversal "https://github.com/henriqf/sal/blob/main/os/linus.c"
click node_file_utilities "https://github.com/henriqf/sal/blob/main/util.c"
click node_ignore_sets "https://github.com/henriqf/sal/blob/main/set/set.c"
click node_os_api "https://github.com/henriqf/sal/blob/main/os/linus.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dispatcher,node_config,node_user toneBlue
class node_build_creator,node_content_builder,node_restore,node_filesystem toneAmber
class node_registry_store,node_content_store,node_build_logs,node_comparison,node_diff_engine,node_registry_view toneMint
class node_file_traversal,node_file_utilities,node_ignore_sets,node_os_api toneRose
class node_config_file toneTeal
```

## Components

### Command interface

- [Command dispatcher](https://github.com/henriqf/sal/blob/main/sal.c): `sal.c`
- [Config loader](https://github.com/henriqf/sal/blob/main/sal.c): `sal.c`

### Build and restore

- [Build creator](https://github.com/henriqf/sal/blob/main/sal.c): `sal.c`
- [Content builder](https://github.com/henriqf/sal/blob/main/sal.c): `sal.c`
- [Build restore](https://github.com/henriqf/sal/blob/main/sal.c): `sal.c`

### Registry and comparison

- **Build registry**
- **Hash content**
- **Build log**
- [Build comparison](https://github.com/henriqf/sal/blob/main/sal.c): `sal.c`
- [Line diff engine](https://github.com/henriqf/sal/blob/main/diff/diff.c): `diff/diff.c`
- [Registry viewer](https://github.com/henriqf/sal/blob/main/sal.c): `sal.c`

### Platform and utilities

- [File traversal](https://github.com/henriqf/sal/blob/main/os/linus.c): `os/linus.c`
- [File utilities](https://github.com/henriqf/sal/blob/main/util.c): `util.c`
- [Ignore sets](https://github.com/henriqf/sal/blob/main/set/set.c): `set/set.c`
- [OS file operations](https://github.com/henriqf/sal/blob/main/os/linus.c): `os/linus.c`

### Other components

- **CLI user**
- [svconfig](https://github.com/henriqf/sal/blob/main/svconfig.txt): `svconfig.txt`
- **Local filesystem**

## Connections

- CLI user → Command dispatcher: runs commands
- Command dispatcher → Config loader: initializes
- Config loader → svconfig: reads settings
- Config loader → Ignore sets: populates filters
- Command dispatcher → Build creator: creates builds
- Command dispatcher → Build restore: loads builds
- Command dispatcher → Build comparison: requests diff
- Command dispatcher → Registry viewer: requests view
- Build creator → File traversal: traverses source
- Build creator → Ignore sets: checks exclusions
- Build creator → Content builder: builds snapshot
- Content builder → Hash content: reads and writes hashes
- Build creator → Build registry: writes build metadata
- Build creator → Build log: appends entries
- Build restore → Build registry: reads build metadata
- Build restore → Hash content: reads file hashes
- Build restore → OS file operations: copies files
- Build comparison → Build registry: reads build hashes
- Build comparison → Line diff engine: compares file contents
- Registry viewer → Build registry: reads build records
- Registry viewer → File utilities: displays directories
- File traversal → Local filesystem: enumerates files
- OS file operations → Local filesystem: reads and writes files
- File utilities → Local filesystem: reads files
- Line diff engine → Local filesystem: reads compared files
