bin/ 230 CLI tools (ask-*, br-*, agent-*, roadid, carpool) scripts/ 99 automation scripts fleet/ Node configs and deployment workers/ Cloudflare Worker sources (roadpay, road-search, squad webhooks) roadc/ RoadC programming language roadnet/ Mesh network (5 APs, WireGuard) operator/ Memory system scripts config/ System configs dotfiles/ Shell configs docs/ Documentation BlackRoad OS — Pave Tomorrow. RoadChain-SHA2048: d1a24f55318d338b RoadChain-Identity: alexa@sovereign RoadChain-Full: d1a24f55318d338b24b60bad7be39286379c76ae5470817482100cb0ddbbcb97e147d07ac7243da0a9f0363e4e5c833d612b9c0df3a3cd20802465420278ef74875a5b77f55af6fe42a931b8b635b3d0d0b6bde9abf33dc42eea52bc03c951406d8cbe49f1a3d29b26a94dade05e9477f34a7d4d4c6ec4005c3c2ac54e73a68440c512c8e83fd9b1fe234750b898ef8f4032c23db173961fe225e67a0432b5293a9714f76c5c57ed5fdf35b9fb40fd73c03ebf88b7253c6a0575f5afb6a6b49b3bda310602fb1ef676859962dad2aebbb2875814b30eee0a8ba195e482d4cbc91d8819e7f38f6db53e8063401649c77bb994371473cabfb917fb53e8cbe73d60
311 lines
10 KiB
Bash
Executable File
311 lines
10 KiB
Bash
Executable File
#!/bin/bash
|
|
# ============================================================================
|
|
# BLACKROAD OS, INC. - PROPRIETARY AND CONFIDENTIAL
|
|
# Copyright (c) 2025-2026 BlackRoad OS, Inc. All Rights Reserved.
|
|
#
|
|
# This code is the intellectual property of BlackRoad OS, Inc.
|
|
# AI-assisted development does not transfer ownership to AI providers.
|
|
# Unauthorized use, copying, or distribution is prohibited.
|
|
# NOT licensed for AI training or data extraction.
|
|
# ============================================================================
|
|
# index-discovery.sh - INDEX.md Discovery and Validation for BlackRoad OS
|
|
# Part of the index-first architecture governance system
|
|
#
|
|
# Usage:
|
|
# ~/index-discovery.sh discover [path] - Find relevant INDEX.md files
|
|
# ~/index-discovery.sh read [path] - Display formatted INDEX content
|
|
# ~/index-discovery.sh check <path> - Verify before creating file
|
|
# ~/index-discovery.sh summary - Quick overview of indexes
|
|
#
|
|
# © 2026 BlackRoad OS, Inc.
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
PINK='\033[38;5;205m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
PINK='\033[38;5;205m'
|
|
RED='\033[0;31m'
|
|
BOLD='\033[1m'
|
|
NC='\033[0m'
|
|
|
|
# Valid statuses per STATUS_SEMANTICS.md
|
|
VALID_STATUSES="active|experimental|archived|deprecated|frozen"
|
|
|
|
# Find repository root from a given path
|
|
find_repo_root() {
|
|
local check_dir="${1:-$(pwd)}"
|
|
while [ "$check_dir" != "/" ]; do
|
|
if [ -d "$check_dir/.git" ]; then
|
|
echo "$check_dir"
|
|
return 0
|
|
fi
|
|
check_dir=$(dirname "$check_dir")
|
|
done
|
|
return 1
|
|
}
|
|
|
|
# Discover all relevant INDEX.md files from path to repo root
|
|
discover_indexes() {
|
|
local current_dir="${1:-$(pwd)}"
|
|
local indexes=()
|
|
local repo_root=""
|
|
|
|
# Resolve to absolute path
|
|
current_dir=$(cd "$current_dir" 2>/dev/null && pwd || echo "$current_dir")
|
|
|
|
# Find repo root
|
|
repo_root=$(find_repo_root "$current_dir") || {
|
|
echo ""
|
|
return 1
|
|
}
|
|
|
|
# Walk from current to repo root, collecting INDEX files
|
|
local check_dir="$current_dir"
|
|
while [ "$check_dir" != "/" ]; do
|
|
if [ -f "$check_dir/INDEX.md" ]; then
|
|
indexes+=("$check_dir/INDEX.md")
|
|
fi
|
|
|
|
# Stop at repo root
|
|
if [ "$check_dir" = "$repo_root" ]; then
|
|
break
|
|
fi
|
|
|
|
check_dir=$(dirname "$check_dir")
|
|
done
|
|
|
|
# Output found indexes (most specific first)
|
|
printf '%s\n' "${indexes[@]}"
|
|
}
|
|
|
|
# Read and display INDEX content with formatting
|
|
read_indexes() {
|
|
local target_path="${1:-$(pwd)}"
|
|
local indexes=$(discover_indexes "$target_path")
|
|
|
|
if [ -z "$indexes" ]; then
|
|
echo -e "${YELLOW}No INDEX.md files found for $target_path${NC}"
|
|
return 1
|
|
fi
|
|
|
|
for idx in $indexes; do
|
|
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo -e "${GREEN}${BOLD}📑 $idx${NC}"
|
|
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
|
|
# Show first 80 lines with some formatting
|
|
head -80 "$idx" | while IFS= read -r line; do
|
|
# Highlight headers
|
|
if [[ "$line" =~ ^#+ ]]; then
|
|
echo -e "${PINK}${line}${NC}"
|
|
# Highlight status values
|
|
elif [[ "$line" =~ (active|experimental|archived|deprecated|frozen) ]]; then
|
|
echo -e "${YELLOW}${line}${NC}"
|
|
else
|
|
echo "$line"
|
|
fi
|
|
done
|
|
|
|
local total_lines=$(wc -l < "$idx")
|
|
if [ "$total_lines" -gt 80 ]; then
|
|
echo -e "${PINK}... ($((total_lines - 80)) more lines)${NC}"
|
|
fi
|
|
echo ""
|
|
done
|
|
}
|
|
|
|
# Check if creating a file/directory is allowed per INDEX rules
|
|
check_before_create() {
|
|
local target_path="$1"
|
|
|
|
if [ -z "$target_path" ]; then
|
|
echo -e "${RED}Usage: $0 check <path>${NC}"
|
|
return 1
|
|
fi
|
|
|
|
local target_dir=$(dirname "$target_path")
|
|
local target_name=$(basename "$target_path")
|
|
local indexes=$(discover_indexes "$target_dir")
|
|
|
|
if [ -z "$indexes" ]; then
|
|
echo -e "${GREEN}✅ No INDEX governance for this path - creation allowed${NC}"
|
|
return 0
|
|
fi
|
|
|
|
local blocked=false
|
|
local warnings=""
|
|
|
|
for index_file in $indexes; do
|
|
# Check for frozen status
|
|
if grep -qi "$target_name.*frozen" "$index_file" 2>/dev/null; then
|
|
echo -e "${RED}❌ BLOCKED: '$target_name' is FROZEN in INDEX${NC}"
|
|
echo -e " INDEX: $index_file"
|
|
blocked=true
|
|
fi
|
|
|
|
# Check for deprecated
|
|
if grep -qi "$target_name.*deprecated" "$index_file" 2>/dev/null; then
|
|
warnings="${warnings}\n${YELLOW}⚠️ WARNING: '$target_name' is DEPRECATED - consider alternatives${NC}"
|
|
fi
|
|
|
|
# Check for archived
|
|
if grep -qi "$target_name.*archived" "$index_file" 2>/dev/null; then
|
|
warnings="${warnings}\n${YELLOW}⚠️ WARNING: '$target_name' is ARCHIVED - fork to experimental if modifying${NC}"
|
|
fi
|
|
|
|
# Check "What NEVER Belongs Here" section
|
|
if grep -A 20 "What NEVER Belongs Here" "$index_file" 2>/dev/null | grep -qi "$target_name"; then
|
|
echo -e "${RED}❌ BLOCKED: '$target_name' explicitly excluded in INDEX${NC}"
|
|
echo -e " INDEX: $index_file"
|
|
blocked=true
|
|
fi
|
|
done
|
|
|
|
if [ "$blocked" = true ]; then
|
|
return 1
|
|
fi
|
|
|
|
if [ -n "$warnings" ]; then
|
|
echo -e "$warnings"
|
|
echo -e "${YELLOW}Proceeding with caution...${NC}"
|
|
return 2
|
|
fi
|
|
|
|
echo -e "${GREEN}✅ Creation allowed for '$target_name'${NC}"
|
|
return 0
|
|
}
|
|
|
|
# Quick summary of indexes in current context
|
|
summary() {
|
|
local target_path="${1:-$(pwd)}"
|
|
local indexes=$(discover_indexes "$target_path")
|
|
local count=$(echo "$indexes" | grep -c "INDEX.md" 2>/dev/null || echo 0)
|
|
|
|
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo -e "${BOLD}📑 INDEX Summary for: ${PINK}$target_path${NC}"
|
|
echo -e "${PINK}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
|
|
if [ "$count" -eq 0 ] || [ -z "$indexes" ]; then
|
|
echo -e "${YELLOW}No INDEX.md files found${NC}"
|
|
echo -e "Consider creating one if this is a significant directory"
|
|
return 0
|
|
fi
|
|
|
|
echo -e "${GREEN}Found $count INDEX file(s):${NC}"
|
|
echo ""
|
|
|
|
for idx in $indexes; do
|
|
# Get first line (title) and line count
|
|
local title=$(head -1 "$idx" | sed 's/^# //')
|
|
local lines=$(wc -l < "$idx" | tr -d ' ')
|
|
echo -e " 📄 ${PINK}$idx${NC}"
|
|
echo -e " Title: $title"
|
|
echo -e " Lines: $lines"
|
|
|
|
# Count sections
|
|
local sections=$(grep -c "^## " "$idx" 2>/dev/null || echo 0)
|
|
echo -e " Sections: $sections"
|
|
echo ""
|
|
done
|
|
|
|
echo -e "${YELLOW}⚠️ Remember: Read INDEX before creating files!${NC}"
|
|
}
|
|
|
|
# Validate INDEX.md structure
|
|
validate() {
|
|
local index_file="${1:-INDEX.md}"
|
|
|
|
if [ ! -f "$index_file" ]; then
|
|
echo -e "${RED}❌ File not found: $index_file${NC}"
|
|
return 1
|
|
fi
|
|
|
|
local errors=0
|
|
|
|
echo -e "${BOLD}Validating: $index_file${NC}"
|
|
echo ""
|
|
|
|
# Check required sections
|
|
local required_sections=("What This Repo IS" "What This Repo is NOT" "Directory Structure")
|
|
for section in "${required_sections[@]}"; do
|
|
if grep -qi "## $section" "$index_file"; then
|
|
echo -e "${GREEN}✅ Found: '$section'${NC}"
|
|
else
|
|
echo -e "${RED}❌ Missing: '$section'${NC}"
|
|
((errors++))
|
|
fi
|
|
done
|
|
|
|
# Check for valid status values
|
|
echo ""
|
|
echo "Checking status values..."
|
|
local invalid_found=false
|
|
while IFS= read -r line; do
|
|
# Look for status patterns in tables
|
|
if [[ "$line" =~ \|[^|]+\|[[:space:]]*([a-zA-Z_-]+)[[:space:]]*\| ]]; then
|
|
local status="${BASH_REMATCH[1]}"
|
|
local status_lower=$(echo "$status" | tr '[:upper:]' '[:lower:]')
|
|
|
|
# Skip header cells and obvious non-status values
|
|
if [[ "$status_lower" =~ ^(status|purpose|description|what|notes|install)$ ]]; then
|
|
continue
|
|
fi
|
|
|
|
# Check if it's a valid status
|
|
if echo "$status_lower" | grep -qE "^($VALID_STATUSES|planned|tbd)$"; then
|
|
: # Valid
|
|
elif [[ ${#status} -lt 15 ]]; then
|
|
# Might be invalid status
|
|
echo -e "${YELLOW}⚠️ Possible invalid status: '$status'${NC}"
|
|
fi
|
|
fi
|
|
done < "$index_file"
|
|
|
|
echo ""
|
|
if [ $errors -eq 0 ]; then
|
|
echo -e "${GREEN}✅ INDEX validation passed${NC}"
|
|
return 0
|
|
else
|
|
echo -e "${RED}❌ INDEX validation failed with $errors error(s)${NC}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Main command router
|
|
case "${1:-summary}" in
|
|
discover)
|
|
discover_indexes "${2:-$(pwd)}"
|
|
;;
|
|
read)
|
|
read_indexes "${2:-$(pwd)}"
|
|
;;
|
|
check)
|
|
check_before_create "$2"
|
|
;;
|
|
summary)
|
|
summary "${2:-$(pwd)}"
|
|
;;
|
|
validate)
|
|
validate "${2:-INDEX.md}"
|
|
;;
|
|
help|--help|-h)
|
|
echo "INDEX.md Discovery and Validation"
|
|
echo ""
|
|
echo "Usage:"
|
|
echo " $0 discover [path] - Find relevant INDEX.md files"
|
|
echo " $0 read [path] - Display formatted INDEX content"
|
|
echo " $0 check <path> - Verify before creating file"
|
|
echo " $0 summary [path] - Quick overview of indexes"
|
|
echo " $0 validate [file] - Validate INDEX.md structure"
|
|
echo ""
|
|
echo "Valid statuses: active, experimental, archived, deprecated, frozen"
|
|
;;
|
|
*)
|
|
echo -e "${RED}Unknown command: $1${NC}"
|
|
echo "Run '$0 help' for usage"
|
|
exit 1
|
|
;;
|
|
esac
|