<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Cradicle Explorer</title>
    <link href="/css/bootstrap/bootstrap.min.css" rel="stylesheet">
    <style>
      .form-control-dark::placeholder {
          color: #aaa;
          opacity: 1;
      }
    </style>
    <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
    <link rel="icon" type="image/png" href="/favicon.png">


                <link href="/css/dashboard.css" rel="stylesheet">
                </head>
                <body>
                <header class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
                  <a class="navbar-brand col-md-3 col-lg-2 me-0 px-3 fs-6" href="/">Cradicle Explorer</a>
                  <button class="navbar-toggler position-absolute d-md-none collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                  </button>
                  <form method="get" action="/cgi-bin/main" style="width:100%;"><input class="form-control form-control-dark w-100 rounded-0 border-0" type="text" name="q" placeholder="Search repos" aria-label="Search"></form>
                  <div class="navbar-nav flex-row">
                    <div class="nav-item text-nowrap">
                      <a class="nav-link px-3 active" href="/cgi-bin/repo?id=z4AHrMnU89Sv7158BAaXqagkDhqPw">techstack-filterlist</a>
                    </div>
                  </div>
                </header>
                <div class="container-fluid">
                  <div class="row">
                    <nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-dark sidebar collapse">
                      <div class="position-sticky pt-3 sidebar-sticky">
                        <ul class="nav flex-column">
                          <li class="nav-item">
                            <a class="nav-link active" href="/cgi-bin/repo?id=z4AHrMnU89Sv7158BAaXqagkDhqPw">
                              <i class="align-text-bottom fa-solid fa-info"></i>
                              Info
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=z4AHrMnU89Sv7158BAaXqagkDhqPw&issue=list">
                              <i class="align-text-bottom fa-solid fa-layer-group"></i>
                              Issues
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=z4AHrMnU89Sv7158BAaXqagkDhqPw&patch=list">
                              <i class="align-text-bottom fa-solid fa-vest-patches"></i>
                              Patches
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=z4AHrMnU89Sv7158BAaXqagkDhqPw&wallet=list">
                              <i class="align-text-bottom fa-solid fa-wallet"></i>
                              Wallets
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=z4AHrMnU89Sv7158BAaXqagkDhqPw&source=.">
                              <i class="align-text-bottom fa-solid fa-code"></i>
                              Source
                            </a>
                          </li>
                        <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted text-uppercase">
                          <span></span>
                        </h6>
                        <ul class="nav flex-column mb-2">
                        
                        </ul>
                      </div>
                    </nav>
                <main class="col-md-9 ms-sm-auto col-lg-10">
                  <div class="container px-1 py-3">
        

    <div class="list-group">
    <div class="list-group-item">
    <div style="font-size:1.3rem;">techstack-filterlist</div>
    <div class="repo-item"></div>
    <div>rad:z4AHrMnU89Sv7158BAaXqagkDhqPw</div>
    </div>
    <div class="list-group-item">
    <div>Visibility</div>
    <div class="repo-item">public</div>
    </div>
    <div class="list-group-item">
    <div>Delegates</div><div class="repo-item">did:key:z6MkpViXnXEa1vn9EHzENkxA7T8nJnhEE961GsCDinVXWaPU</div>
    </div>
    <div class="list-group-item">
    <div>Default branch</div>
    <div><span class="repo-item">main &#8594 a65ff55a77674b778d492b09b84d7e7ab3706729</span> (Mon Dec 29 23:40:53 2025)</div>
    </div>
    <div class="list-group-item">
    <div>Threshold</div>
    <div class="repo-item">1</div>
    </div>
    </div>
    
        <div class="list-group mt-3">
        <div class="list-group-item">
        <div class="mb-2" style="font-weight:bold;"><i class="fa-solid fa-book"></i> README.md</div>
        <pre style="margin:0; font-size:0.85rem; overflow-x:auto; color:#fafafa;"># Techstack Enforcer

A formally verified technology stack filter list enforcement system written in Ada/SPARK.

[![SPARK Verified](https://img.shields.io/badge/SPARK-verified-green)](https://www.adacore.com/about-spark)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

## Overview

Techstack Enforcer blocks unwanted technologies across development layers with:

- **Multi-layer Enforcement**: Git hooks, CI/CD pipelines, file watchers
- **Formal Verification**: Core engine verified with SPARK
- **Definition Sets**: Pre-configured policies (strict, moderate, enterprise)
- **JSON API**: Structured decisions for automation
- **Interactive TUI**: Keyboard-driven filter management

## Quick Start

```bash
# Build
gprbuild -P techstack_enforcer.gpr -XMODE=release

# Audit repository
./bin/techstack_main audit .

# Use definition set
./bin/techstack_main --defset=strict audit .

# Get JSON decisions
./bin/techstack_main decide src/main.py

# Launch TUI
./bin/techstack_tui_main
```

## Definition Sets

| Set | Mode | Description |
|-----|------|-------------|
| `strict` | lockdown | Maximum memory safety |
| `moderate` | enforce | Balanced with exceptions |
| `permissive` | warn | Advisory only |
| `enterprise` | enforce | Corporate/legacy support |
| `memory_safe` | enforce | Focus on memory safety |

```bash
techstack-enforcer --defset=moderate audit .
techstack-enforcer defsets  # List all sets
```

## Commands

| Command | Description |
|---------|-------------|
| `audit &lt;path&gt;` | Full repository audit |
| `decide [path]` | JSON allow/deny decisions |
| `check &lt;path&gt;` | Check single file/directory |
| `list` | Show all filters |
| `defsets` | List definition sets |

## CI/CD Integration

**GitLab CI:**
```yaml
include:
  - project: &#x27;your-group/techstack-filterlist&#x27;
    file: &#x27;/ci-templates/gitlab-ci-techstack.yml&#x27;

variables:
  TECHSTACK_DEFSET: moderate
```

**GitHub Actions:** See [ci-templates/github-action-techstack.yml](ci-templates/github-action-techstack.yml)

## Documentation

📚 **[Full Documentation](docs/README.md)**

- [Getting Started](docs/getting-started.md) - Installation and first steps
- [CLI Reference](docs/cli-reference.md) - Complete command reference
- [Definition Sets](docs/definition-sets.md) - Pre-configured policies
- [TUI Guide](docs/tui-guide.md) - Interactive interface
- [CI Integration](docs/ci-integration.md) - Pipeline setup
- [API &amp; JSON Format](docs/api-json-format.md) - Automation interface

## Architecture

```
src/
├── core/                    # SPARK-verified enforcement engine
│   ├── techstack_types.ads      # Type definitions
│   ├── techstack_enforcer.ads   # Core logic
│   ├── techstack_patterns.ads   # Glob matching
│   ├── techstack_defsets.ads    # Definition sets
│   └── techstack_json_io.ads    # JSON API
├── tui/                     # Terminal interface
├── learning/                # Security pattern analysis
└── hooks/                   # Git hook integration
```

## Filter Levels

| Level | Symbol | Behavior |
|-------|--------|----------|
| Fatal | `#` | Always blocked |
| Block | `X` | Blocked in enforce/lockdown |
| Warn | `!` | Warning only |
| Allow | `+` | Explicitly permitted |

## Philosophy

This tool enforces preferences for:

1. **Memory-safe languages** (Rust, Ada/SPARK, Haskell)
2. **Static typing** (TypeScript, Rust)
3. **Formal verification** (Ada/SPARK)
4. **Open infrastructure** (Podman, GitLab)

## Building

Requirements: GNAT, GPRbuild

```bash
# Debug build
gprbuild -P techstack_enforcer.gpr -XMODE=debug

# Release build
gprbuild -P techstack_enforcer.gpr -XMODE=release

# SPARK verification
gnatprove -P techstack_enforcer.gpr --level=2
```

## License

MIT
</pre>
        </div>
        </div>

</div>
</main>
</div>
</div>


</body>
</html>

