Skip to content

Commit d1d8e1d

Browse files
hyperpolymathclaude
andcommitted
fix!: restore gitbot-fleet from mass-deletion + permanent integrity guard
main had been silently gutted from 1777 files to 2 by a squash-merge from a near-empty base (the post-#126/#128/#141/#142 sequence). The loss went unrepaired for months and broke hypatia's Phase-2 learning submission estate-wide: scripts/submit-finding.sh — the findings sink hypatia-scan.yml execs in every consuming repo — no longer existed, exit-127ing the security gate for any repo with >=1 finding. This restores the full repo to last-good tree 9b0a29e (the last first-parent commit on main before the deletion: all bots, scripts/, shared-context/, dashboard, docs, robot-repo-automaton/, etc.), preserving the only two legitimate post-deletion improvements: * .github/workflows/secret-scanner.yml — kept current main (#141: step-level Cargo.toml gate). * .github/workflows/hypatia-scan.yml — replaced with the canonical post-hypatia#252 hardened workflow (Layer-1: Phase-2 step is continue-on-error + self-healing, so a future fleet-side hiccup can never again hard-fail the gate). scripts/submit-finding.sh is the already-hardened version (input validation, JSON-shape normalisation, best-effort push with ::warning::, repository_dispatch intake) — restored verbatim, mode 0755. "Forever" guard: .github/workflows/repo-integrity-guard.yml fails any push/PR to main that (a) deletes >50 tracked files vs base without an explicit [mass-delete-ok] marker, or (b) drops a critical path (scripts/submit-finding.sh, run-fleet.sh, fleet-coordinator.sh, README.adoc). A stale-base squash can no longer silently nuke main. Refs hyperpolymath/hypatia#252 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 4f43a8c commit d1d8e1d

1,777 files changed

Lines changed: 323952 additions & 31 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/CLAUDE.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
3+
# CLAUDE.md - Gitbot Fleet
4+
5+
## Project Overview
6+
7+
Gitbot Fleet is the bot orchestration hub for automated repository quality enforcement across 500+ hyperpolymath repositories. It coordinates multiple bots through a shared-context system with safety-triangle-aware routing.
8+
9+
## Architecture
10+
11+
```
12+
hypatia (scanner) → findings JSONL → fleet-coordinator.sh → dispatch-runner.sh
13+
14+
┌──────────┼──────────┐
15+
▼ ▼ ▼
16+
rhodibot echidnabot sustainabot
17+
(git ops) (quality) (deps)
18+
19+
robot-repo-automaton
20+
(scan → fix → commit → PR)
21+
```
22+
23+
## Key Components
24+
25+
| Component | Location | Purpose |
26+
|-----------|----------|---------|
27+
| fleet-coordinator.sh | root | Orchestrates bot dispatching |
28+
| dispatch-runner.sh | scripts/ | Reads JSONL manifests, executes fixes |
29+
| process-review-findings.sh | scripts/ | Creates GitHub issues for review-tier |
30+
| fix-*.sh | scripts/ | 7 fix scripts for eliminate-tier patterns |
31+
| shared-context/ | shared-context/ | Rust crate for inter-bot communication |
32+
| robot-repo-automaton/ | robot-repo-automaton/ | Rust CLI: scan, fix, PR creation |
33+
34+
## Build & Run
35+
36+
```bash
37+
# Shell scripts (no build needed)
38+
bash fleet-coordinator.sh --help
39+
40+
# Robot-repo-automaton (Rust)
41+
cd robot-repo-automaton
42+
OPENSSL_NO_VENDOR=1 cargo build --release
43+
./target/release/robot-repo-automaton scan /path/to/repo
44+
./target/release/robot-repo-automaton fix /path/to/repo --create-pr
45+
```
46+
47+
## Safety Triangle
48+
49+
```
50+
Eliminate (auto_execute >= 0.95) → Direct fix, no review
51+
Substitute (review >= 0.85) → proven module replacement, needs review
52+
Control (report < 0.85) → Human review required
53+
```
54+
55+
## Code Style
56+
57+
- SPDX headers: `PMPL-1.0-or-later`
58+
- Author: Jonathan D.A. Jewell <jonathan.jewell@open.ac.uk>
59+
- Shell scripts: bash with `set -euo pipefail`
60+
- Rust: standard formatting, `anyhow::Result` for error handling
61+
- JSON construction in shell: always use `jq` (never string interpolation)
62+
63+
## Critical Invariants
64+
65+
1. SCM files ONLY in `.machine_readable/6scm/` (never root)
66+
2. All shell scripts must validate untrusted input before use
67+
3. No hardcoded secrets — use env vars with `${VAR:-}` defaults
68+
4. Fix scripts must be idempotent (safe to run multiple times)
69+
5. Confidence thresholds gate all automated actions

.dockerignore

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
3+
# Git
4+
.git
5+
.gitignore
6+
.gitattributes
7+
8+
# Build artifacts
9+
target/
10+
**/*.rs.bk
11+
*.pdb
12+
13+
# IDE
14+
.vscode/
15+
.idea/
16+
*.swp
17+
*.swo
18+
*~
19+
20+
# Documentation
21+
*.md
22+
!README.md
23+
docs/
24+
25+
# CI/CD
26+
.github/
27+
.gitlab-ci.yml
28+
29+
# Testing
30+
tests/
31+
test-repo/
32+
33+
# Development
34+
.env
35+
.env.local
36+
*.log
37+
38+
# System
39+
.DS_Store
40+
Thumbs.db
41+
42+
# Deployment (not needed in image)
43+
deploy/
44+
docker-compose.yml

.editorconfig

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# SPDX-FileCopyrightText: 2025 hyperpolymath
3+
4+
root = true
5+
6+
[*]
7+
indent_style = space
8+
indent_size = 2
9+
end_of_line = lf
10+
charset = utf-8
11+
trim_trailing_whitespace = true
12+
insert_final_newline = true
13+
14+
[*.rs]
15+
indent_size = 4
16+
17+
[*.scm]
18+
indent_size = 2
19+
20+
[Makefile]
21+
indent_style = tab
22+
23+
[*.md]
24+
trim_trailing_whitespace = false

.gitattributes

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# RSR-compliant .gitattributes
3+
4+
* text=auto eol=lf
5+
6+
# Source
7+
*.rs text eol=lf diff=rust
8+
*.ex text eol=lf diff=elixir
9+
*.exs text eol=lf diff=elixir
10+
*.jl text eol=lf
11+
*.res text eol=lf
12+
*.resi text eol=lf
13+
*.ada text eol=lf diff=ada
14+
*.adb text eol=lf diff=ada
15+
*.ads text eol=lf diff=ada
16+
*.hs text eol=lf
17+
*.chpl text eol=lf
18+
*.scm text eol=lf
19+
*.ncl text eol=lf
20+
*.nix text eol=lf
21+
22+
# Docs
23+
*.md text eol=lf diff=markdown
24+
*.adoc text eol=lf
25+
*.txt text eol=lf
26+
27+
# Data
28+
*.json text eol=lf
29+
*.yaml text eol=lf
30+
*.yml text eol=lf
31+
*.toml text eol=lf
32+
33+
# Config
34+
.gitignore text eol=lf
35+
.gitattributes text eol=lf
36+
justfile text eol=lf
37+
Makefile text eol=lf
38+
Containerfile text eol=lf
39+
40+
# Scripts
41+
*.sh text eol=lf
42+
43+
# Binary
44+
*.png binary
45+
*.jpg binary
46+
*.gif binary
47+
*.pdf binary
48+
*.woff2 binary
49+
*.zip binary
50+
*.gz binary
51+
52+
# Lock files
53+
Cargo.lock text eol=lf -diff
54+
flake.lock text eol=lf -diff

.github/CODEOWNERS

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
#
4+
# CODEOWNERS — gitbot-fleet
5+
6+
# Default owner for all files
7+
* @hyperpolymath
8+
9+
# Core orchestration (security-critical — taint flow validated)
10+
/fleet-coordinator.sh @hyperpolymath
11+
/scripts/ @hyperpolymath
12+
13+
# Rust executors
14+
/robot-repo-automaton/ @hyperpolymath
15+
/shared-context/ @hyperpolymath
16+
17+
# Bot implementations
18+
/bots/ @hyperpolymath
19+
20+
# Security-sensitive
21+
/.github/workflows/ @hyperpolymath
22+
/.well-known/ @hyperpolymath
23+
/SECURITY.md @hyperpolymath
24+
25+
# Machine-readable metadata
26+
/.machine_readable/ @hyperpolymath

.github/dependabot.yml

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
version: 2
3+
updates:
4+
- package-ecosystem: "github-actions"
5+
directory: "/"
6+
schedule:
7+
interval: "daily"
8+
groups:
9+
actions:
10+
patterns:
11+
- "*"
12+
13+
# Rust dependencies
14+
- package-ecosystem: "cargo"
15+
directory: "/robot-repo-automaton"
16+
schedule:
17+
interval: "weekly"
18+
19+
- package-ecosystem: "cargo"
20+
directory: "/shared-context"
21+
schedule:
22+
interval: "weekly"
23+
24+
- package-ecosystem: "cargo"
25+
directory: "/bots/echidnabot"
26+
schedule:
27+
interval: "weekly"
28+
29+
- package-ecosystem: "cargo"
30+
directory: "/bots/glambot"
31+
schedule:
32+
interval: "weekly"
33+
34+
- package-ecosystem: "cargo"
35+
directory: "/bots/rhodibot"
36+
schedule:
37+
interval: "weekly"
38+
39+
- package-ecosystem: "cargo"
40+
directory: "/bots/seambot"
41+
schedule:
42+
interval: "weekly"
43+
44+
- package-ecosystem: "cargo"
45+
directory: "/bots/sustainabot"
46+
schedule:
47+
interval: "weekly"
48+
49+
- package-ecosystem: "cargo"
50+
directory: "/bots/finishingbot"
51+
schedule:
52+
interval: "weekly"
53+
54+
- package-ecosystem: "cargo"
55+
directory: "/bots/accessibilitybot"
56+
schedule:
57+
interval: "weekly"
58+
59+
- package-ecosystem: "cargo"
60+
directory: "/bots/cipherbot"
61+
schedule:
62+
interval: "weekly"
63+
64+
- package-ecosystem: "cargo"
65+
directory: "/bots/panicbot"
66+
schedule:
67+
interval: "weekly"
68+
69+
# Python dependencies for gsbot
70+
- package-ecosystem: "pip"
71+
directory: "/bots/gsbot"
72+
schedule:
73+
interval: "weekly"

.github/workflows/boj-build.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
name: BoJ Server Build Trigger
3+
on:
4+
push:
5+
branches: [main, master]
6+
workflow_dispatch:
7+
jobs:
8+
trigger-boj:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Checkout
12+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
13+
- name: Trigger BoJ Server (Casket/ssg-mcp)
14+
run: |
15+
# Send a secure trigger to boj-server to build this repository
16+
curl -X POST "http://boj-server.local:7700/cartridges/ssg-mcp/invoke" -H "Content-Type: application/json" -d "{\"repo\": \"${{ github.repository }}\", \"branch\": \"${{ github.ref_name }}\", \"engine\": \"casket\\"}"}
17+
continue-on-error: true
18+
permissions:
19+
contents: read

0 commit comments

Comments
 (0)