diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..38006e8 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,171 @@ +# SPDX-License-Identifier: MIT AND Palimpsest-0.8 +# SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors +# +# Git attributes for polysafe-gitfixer +# Ensures consistent line endings and diff behavior across platforms + +# ============================================================================== +# Auto-detect text files and normalize line endings +# ============================================================================== +* text=auto + +# ============================================================================== +# Source Code - Text files with LF normalization +# ============================================================================== + +# Rust +*.rs text eol=lf diff=rust +*.toml text eol=lf + +# Haskell +*.hs text eol=lf diff=haskell +*.lhs text eol=lf diff=haskell +*.cabal text eol=lf + +# Elixir +*.ex text eol=lf diff=elixir +*.exs text eol=lf diff=elixir +*.eex text eol=lf +*.heex text eol=lf +*.leex text eol=lf +mix.lock text eol=lf + +# Idris +*.idr text eol=lf +*.ipkg text eol=lf + +# Nickel +*.ncl text eol=lf + +# Nix +*.nix text eol=lf +flake.lock text eol=lf + +# C/C++ (for native dependencies) +*.c text eol=lf diff=cpp +*.h text eol=lf diff=cpp +*.cpp text eol=lf diff=cpp +*.hpp text eol=lf diff=cpp + +# ============================================================================== +# Documentation - Text files with LF normalization +# ============================================================================== + +*.md text eol=lf diff=markdown +*.adoc text eol=lf +*.txt text eol=lf +*.rst text eol=lf +*.html text eol=lf diff=html +*.css text eol=lf diff=css +*.xml text eol=lf + +# ============================================================================== +# Configuration - Text files with LF normalization +# ============================================================================== + +*.yml text eol=lf +*.yaml text eol=lf +*.json text eol=lf +*.conf text eol=lf +*.cfg text eol=lf +*.ini text eol=lf +*.env text eol=lf + +# Shell scripts +*.sh text eol=lf diff=bash +*.bash text eol=lf diff=bash +*.zsh text eol=lf + +# Build files +Makefile text eol=lf +justfile text eol=lf +Containerfile text eol=lf +Dockerfile text eol=lf + +# Git +.gitignore text eol=lf +.gitattributes text eol=lf +.gitmodules text eol=lf + +# ============================================================================== +# Binary Files - Explicitly mark as binary +# ============================================================================== + +# Images +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.webp binary +*.svg text eol=lf + +# Documents +*.pdf binary + +# Archives +*.zip binary +*.tar binary +*.gz binary +*.bz2 binary +*.xz binary +*.7z binary + +# Compiled +*.wasm binary +*.so binary +*.dylib binary +*.dll binary +*.exe binary +*.a binary +*.o binary +*.beam binary + +# Fonts +*.ttf binary +*.otf binary +*.woff binary +*.woff2 binary +*.eot binary + +# ============================================================================== +# Export Ignore - Files not included in archives +# ============================================================================== + +.git export-ignore +.gitignore export-ignore +.gitattributes export-ignore +.gitlab-ci.yml export-ignore +.github export-ignore +.well-known export-ignore + +# Development files +.editorconfig export-ignore +.envrc export-ignore +*.nix export-ignore +flake.lock export-ignore + +# Test fixtures +test/fixtures export-ignore +tests/fixtures export-ignore + +# Documentation source (keep compiled docs) +docs/*.adoc export-ignore + +# ============================================================================== +# Linguist Overrides (for GitHub language detection) +# ============================================================================== + +# Ensure Rust is detected as primary language +*.rs linguist-detectable=true +*.hs linguist-detectable=true +*.ex linguist-detectable=true +*.idr linguist-detectable=true + +# Don't count generated files +Cargo.lock linguist-generated=true +flake.lock linguist-generated=true +mix.lock linguist-generated=true + +# Vendor directories (if any) +vendor/* linguist-vendored=true diff --git a/.gitignore b/.gitignore index 44652fd..fcc2046 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,120 @@ +# SPDX-License-Identifier: MIT AND Palimpsest-0.8 +# SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors + +# ============================================================================== +# Rust +# ============================================================================== target/ Cargo.lock -.DS_Store -*.log -*.tmp +**/*.rs.bk +*.pdb + +# ============================================================================== +# Haskell +# ============================================================================== +dist/ +dist-newstyle/ +cabal-dev/ +*.o +*.hi +*.hie +*.chi +*.chs.h +*.dyn_o +*.dyn_hi +.hpc/ +.hsenv/ +.cabal-sandbox/ +cabal.sandbox.config +*.prof +*.aux +*.hp +*.eventlog +.stack-work/ +cabal.project.local +cabal.project.local~ +.HTF/ +.ghc.environment.* + +# ============================================================================== +# Elixir +# ============================================================================== _build/ deps/ -.elixir_ls/ -.erlang.cookie -*.beam *.ez +*.beam erl_crash.dump +.elixir_ls/ +.erlang.cookie +mix.lock + +# ============================================================================== +# Idris +# ============================================================================== +build/ +*.ibc +*.o +*.so + +# ============================================================================== +# Nickel +# ============================================================================== +*.ncl.json + +# ============================================================================== +# Nix +# ============================================================================== +result +result-* +.direnv/ + +# ============================================================================== +# Editor/IDE +# ============================================================================== +.idea/ +.vscode/ +*.swp +*.swo +*~ +.project +.classpath +.settings/ +*.sublime-workspace +*.sublime-project + +# ============================================================================== +# OS +# ============================================================================== +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# ============================================================================== +# Logs and temp files +# ============================================================================== +*.log +*.tmp +*.temp +*.bak +*.backup + +# ============================================================================== +# Environment +# ============================================================================== +.env +.env.local +.env.*.local +*.local +# ============================================================================== +# Test artifacts +# ============================================================================== +coverage/ +.coverage +htmlcov/ +.hypothesis/ +.pytest_cache/ diff --git a/.well-known/ai.txt b/.well-known/ai.txt new file mode 100644 index 0000000..5c7d4d8 --- /dev/null +++ b/.well-known/ai.txt @@ -0,0 +1,82 @@ +# SPDX-License-Identifier: MIT AND Palimpsest-0.8 +# SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors +# +# AI Training and Crawling Policy for polysafe-gitfixer +# This file defines permissions for AI systems interacting with this repository. + +# ============================================================================== +# POLICY SUMMARY +# ============================================================================== +# +# This repository is dual-licensed under MIT and Palimpsest-0.8. +# AI training is permitted under specific conditions. + +# ============================================================================== +# PERMITTED: Open-Source AI Training +# ============================================================================== +# +# Training is ALLOWED if ALL of the following conditions are met: +# +# 1. ATTRIBUTION: Models must acknowledge "The polysafe-gitfixer Contributors" +# and link to: https://gitlab.com/Hyperpolymath/polysafe-gitfixer +# +# 2. OPEN SOURCE: Trained models must release weights, architecture, and +# training code under OSI-approved or Creative Commons licenses +# +# 3. TRANSPARENCY: Generated content must disclose AI involvement and +# preserve attribution chains where applicable +# +# 4. RECIPROCITY: Commercial use permitted if the model is open-sourced and +# improvements to training data are contributed back + +# ============================================================================== +# PROHIBITED: Proprietary AI Training +# ============================================================================== +# +# Training is NOT ALLOWED for: +# +# - Closed-source AI models +# - Proprietary commercial models without open weights +# - Models that strip or obscure attribution +# - Systems that claim sole authorship of derivatives + +# ============================================================================== +# CRAWLER DIRECTIVES +# ============================================================================== + +User-agent: GPTBot +Disallow: / + +User-agent: ChatGPT-User +Disallow: / + +User-agent: Google-Extended +Disallow: / + +User-agent: anthropic-ai +Disallow: / + +User-agent: Claude-Web +Disallow: / + +User-agent: CCBot +Allow: / + +User-agent: Common-Crawl +Allow: / + +User-agent: ia_archiver +Allow: / + +User-agent: * +Allow: / + +# ============================================================================== +# CONTACT +# ============================================================================== +# +# For questions about AI training permissions: +# - Open an issue: https://gitlab.com/Hyperpolymath/polysafe-gitfixer/-/issues +# - See LICENSE.txt for full legal terms + +# Expires: 2026-12-31 diff --git a/.well-known/consent-required.txt b/.well-known/consent-required.txt new file mode 100644 index 0000000..2aa9928 --- /dev/null +++ b/.well-known/consent-required.txt @@ -0,0 +1,64 @@ +# SPDX-License-Identifier: MIT AND Palimpsest-0.8 +# SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors +# +# HTTP 430 (Consent Required) Policy +# See: https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-targeted-cache-control +# +# This file documents consent requirements for automated access to this repository. + +# ============================================================================== +# CONSENT FRAMEWORK +# ============================================================================== + +# Automated Access Categories: +# +# 1. PERMITTED WITHOUT CONSENT +# - Reading public documentation +# - Cloning repository +# - Running tests locally +# - Contributing via merge requests +# +# 2. REQUIRES IMPLICIT CONSENT (follow published policies) +# - Mirroring repository (respect .well-known/ai.txt) +# - Indexing for search engines (respect robots.txt) +# - Archival by non-profit organizations +# +# 3. REQUIRES EXPLICIT CONSENT (contact maintainers) +# - Commercial AI training +# - Embedding in proprietary products +# - Bulk data collection beyond normal use + +# ============================================================================== +# DATA COLLECTION NOTICE +# ============================================================================== + +# This repository may collect: +# - Git commit metadata (author, timestamp, message) +# - Issue and merge request content +# - CI/CD logs (temporary) +# +# This repository does NOT collect: +# - Personal data beyond Git commit information +# - Tracking cookies or analytics +# - Usage telemetry + +# ============================================================================== +# CONSENT CONTACT +# ============================================================================== + +# For consent requests: +# - Open an issue: https://gitlab.com/Hyperpolymath/polysafe-gitfixer/-/issues +# - Use subject: "Consent Request: [purpose]" +# +# Response time: Within 1 week for non-urgent requests + +# ============================================================================== +# REVOCATION +# ============================================================================== + +# Previously granted consent may be revoked if: +# - Terms of consent are violated +# - The recipient becomes a "bad actor" as defined in LICENSE.txt +# - Material changes to repository licensing occur +# +# Revocation does not affect existing legitimate uses. diff --git a/.well-known/humans.txt b/.well-known/humans.txt new file mode 100644 index 0000000..852caad --- /dev/null +++ b/.well-known/humans.txt @@ -0,0 +1,58 @@ +# SPDX-License-Identifier: MIT AND Palimpsest-0.8 +# SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors +# +# humanstxt.org - Credits and acknowledgments for polysafe-gitfixer + +/* TEAM */ + +Creator: Jonathan D.A. Jewell +Role: Project Lead, Architecture +Contact: @Hyperpolymath [GitLab/GitHub] +Location: Earth +Languages: Rust, Haskell, Elixir, Ada + +/* THANKS */ + +The Rhodium Standard - Repository standards and governance framework +git2-rs - Rust bindings for libgit2 +ring - Cryptographic primitives for audit logging +Rustler - Elixir NIF bindings + +/* SITE */ + +Last update: 2024 +Language: English +Standards: RSR (Rhodium Standard Repositories) +Software: Rust, Haskell, Elixir, Idris, Nickel + +/* PROJECT */ + +Name: polysafe-gitfixer +Description: Polyglot git backup merger with maximum safety guarantees +Repository: https://gitlab.com/Hyperpolymath/polysafe-gitfixer +License: MIT AND Palimpsest-0.8 + +/* COMPONENTS */ + +capability - Path safety and audit logging (Rust) +fs_ops - Transactional filesystem operations (Rust) +git_ops - Git repository operations (Rust) +diff-engine - Tree/file diffing (Haskell) +tui - Terminal user interface (Haskell/Brick) +workflow - State machine (Idris/Haskell) +orchestrator - Supervision and coordination (Elixir/OTP) + +/* PHILOSOPHY */ + +Each component uses the language with the strongest safety guarantees +for its specific concerns: +- Rust for memory safety and RAII +- Haskell for totality and streaming +- Elixir for fault tolerance and supervision +- Idris for dependent types and proofs +- Nickel for configuration schemas + +/* CONTRIBUTING */ + +See CONTRIBUTING.adoc for how to participate. +All contributors are welcome under the Tri-Perimeter framework. diff --git a/.well-known/provenance.json b/.well-known/provenance.json new file mode 100644 index 0000000..f3c7cce --- /dev/null +++ b/.well-known/provenance.json @@ -0,0 +1,94 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "polysafe-gitfixer Provenance", + "description": "Immutable provenance chain for polysafe-gitfixer", + "version": "1.0.0", + "license": "SPDX-License-Identifier: MIT AND Palimpsest-0.8", + "copyright": "2024-2025 The polysafe-gitfixer Contributors", + + "project": { + "name": "polysafe-gitfixer", + "description": "Polyglot git backup merger with maximum safety guarantees", + "repository": "https://gitlab.com/Hyperpolymath/polysafe-gitfixer", + "created": "2024-12-06", + "license": "MIT AND Palimpsest-0.8" + }, + + "origins": [ + { + "type": "concept", + "description": "Conversation exploring polyglot architecture for git backup merging", + "date": "2024-12-06", + "contributors": ["Jonathan D.A. Jewell"] + }, + { + "type": "prior_art", + "description": "Bash prototypes: git-health-audit.sh, git-merge-backups.sh", + "license": "MIT", + "contributors": ["Jonathan D.A. Jewell"] + } + ], + + "components": [ + { + "name": "capability", + "language": "Rust", + "purpose": "Path traversal prevention, audit logging", + "dependencies": ["ring", "serde", "chrono"], + "created": "2024-12-06" + }, + { + "name": "fs_ops", + "language": "Rust", + "purpose": "Transactional filesystem operations with RAII", + "dependencies": ["capability"], + "created": "2024-12-06" + }, + { + "name": "git_ops", + "language": "Rust", + "purpose": "Git repository operations", + "dependencies": ["git2"], + "created": "2024-12-06" + }, + { + "name": "diff-engine", + "language": "Haskell", + "purpose": "Tree and file diffing with streaming", + "status": "planned" + }, + { + "name": "tui", + "language": "Haskell", + "purpose": "Terminal user interface (Brick/Elm architecture)", + "status": "planned" + }, + { + "name": "workflow", + "language": "Idris/Haskell", + "purpose": "Typestate workflow management", + "status": "planned" + }, + { + "name": "orchestrator", + "language": "Elixir", + "purpose": "OTP supervision and coordination", + "status": "planned" + } + ], + + "transformations": [], + + "attestations": [ + { + "type": "original_work", + "statement": "This is original work by the listed contributors", + "date": "2024-12-06" + }, + { + "type": "license_compliance", + "statement": "All dependencies are compatible with MIT + Palimpsest-0.8", + "date": "2024-12-06" + } + ] +} diff --git a/.well-known/security.txt b/.well-known/security.txt new file mode 100644 index 0000000..8fc02eb --- /dev/null +++ b/.well-known/security.txt @@ -0,0 +1,21 @@ +# SPDX-License-Identifier: MIT AND Palimpsest-0.8 +# SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors +# +# Security contact information for polysafe-gitfixer +# See: https://www.rfc-editor.org/rfc/rfc9116 + +Contact: https://gitlab.com/Hyperpolymath/polysafe-gitfixer/-/issues/new?issuable_template=security +Expires: 2026-12-31T23:59:59.000Z +Preferred-Languages: en + +# Security Policy +Policy: https://gitlab.com/Hyperpolymath/polysafe-gitfixer/-/blob/main/SECURITY.md + +# Acknowledgments +# Acknowledgments: https://gitlab.com/Hyperpolymath/polysafe-gitfixer/-/blob/main/SECURITY.md#acknowledgments + +# Canonical location +Canonical: https://gitlab.com/Hyperpolymath/polysafe-gitfixer/-/raw/main/.well-known/security.txt + +# Hiring +# Hiring: https://example.com/careers diff --git a/CODE_OF_CONDUCT.adoc b/CODE_OF_CONDUCT.adoc new file mode 100644 index 0000000..c10badc --- /dev/null +++ b/CODE_OF_CONDUCT.adoc @@ -0,0 +1,123 @@ += Code of Conduct +:toc: +:toc-placement!: + +toc::[] + +== Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +== Our Standards + +=== Positive Behaviors + +Examples of behavior that contributes to a positive environment: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility for our mistakes and learning from them +* Focusing on what is best for the overall community +* Using welcoming and inclusive language +* Being patient with newcomers learning the codebase + +=== Unacceptable Behaviors + +Examples of unacceptable behavior: + +* The use of sexualized language or imagery, and sexual attention or advances +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information without explicit permission +* Deliberately intimidating, stalking, or following +* Other conduct which could reasonably be considered inappropriate + +== Scope + +This Code of Conduct applies within all community spaces, including: + +* GitLab/GitHub repositories (issues, merge requests, comments) +* Project documentation and wikis +* Community chat channels +* Project events and meetups +* Social media interactions representing the project + +It also applies when an individual is officially representing the community +in public spaces. + +== Enforcement + +=== Reporting + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the project maintainers listed in `MAINTAINERS.md`. + +All complaints will be reviewed and investigated promptly and fairly. +Maintainers are obligated to respect the privacy and security of the +reporter of any incident. + +=== Enforcement Guidelines + +Maintainers will follow these guidelines in determining consequences: + +==== 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional. + +**Consequence**: A private, written warning providing clarity around the +nature of the violation and an explanation of why the behavior was +inappropriate. A public apology may be requested. + +==== 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved for a specified period. This includes +avoiding interactions in community spaces as well as external channels. +Violating these terms may lead to a temporary or permanent ban. + +==== 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period. No public or +private interaction with the people involved is allowed during this period. +Violating these terms may lead to a permanent ban. + +==== 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment, or +aggression toward individuals or groups. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +== Attribution + +This Code of Conduct is adapted from the +https://www.contributor-covenant.org[Contributor Covenant], version 2.1, +available at +https://www.contributor-covenant.org/version/2/1/code_of_conduct.html + +Community Impact Guidelines were inspired by +https://github.com/mozilla/diversity[Mozilla's code of conduct enforcement ladder]. + +== Questions + +For questions about this Code of Conduct, please open an issue or contact +the maintainers directly. diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc new file mode 100644 index 0000000..e3c5afc --- /dev/null +++ b/CONTRIBUTING.adoc @@ -0,0 +1,289 @@ += Contributing to polysafe-gitfixer +:toc: +:toc-placement!: +:sectnums: + +toc::[] + +Thank you for considering contributing to polysafe-gitfixer! This document +explains how to participate in the project at any level. + +== Quick Start + +[source,bash] +---- +# Fork the repository on GitLab/GitHub +git clone https://gitlab.com/YOUR_USERNAME/polysafe-gitfixer.git +cd polysafe-gitfixer + +# Create a feature branch +git checkout -b feature/your-feature-name + +# Make changes, then run tests +make test + +# Commit with SPDX headers and clear message +git commit -m "feat: add your feature description" + +# Push and create merge request +git push origin feature/your-feature-name +---- + +== Before You Begin + +Please read: + +* link:README.adoc[README] - Project overview and architecture +* link:CODE_OF_CONDUCT.adoc[Code of Conduct] - Community standards +* link:LICENSE.txt[LICENSE] - Dual MIT + Palimpsest licensing +* link:SECURITY.md[Security Policy] - For security-related contributions + +== Tri-Perimeter Contribution Framework (TPCF) + +polysafe-gitfixer uses graduated access levels to balance openness with +quality control. + +=== Perimeter 3: Community Sandbox (Open to All) + +**Who**: Everyone + +**Contributions**: + +* Documentation improvements +* Bug reports with reproduction steps +* Feature requests and discussions +* Example code and tutorials +* Translations +* Testing and feedback + +**Process**: + +1. Fork the repository +2. Make changes on a feature branch +3. Run `make check` to validate locally +4. Submit a merge request +5. Respond to review feedback + +=== Perimeter 2: Expert Extensions (Trusted Contributors) + +**Who**: Contributors with demonstrated expertise + +**Requirements**: + +* 3+ months of active participation, OR +* 10+ merged contributions, OR +* Demonstrated domain expertise (Rust, Haskell, Elixir, security) + +**Additional Contributions**: + +* Review and approve merge requests +* Extend test infrastructure +* Create templates and tooling +* Mentor new contributors + +**How to Apply**: Self-nominate or be nominated via an issue + +=== Perimeter 1: Core Systems (Maintainers Only) + +**Who**: Core maintainers listed in MAINTAINERS.md + +**Scope**: + +* Security-critical code (capability system, audit log) +* CI/CD configuration +* Release management +* Architectural decisions + +**Note**: Core systems are restricted to ensure safety and consistency, +but proposals and discussions are always welcome. + +== Types of Contributions + +=== Documentation + +* Fix typos, clarify explanations +* Add examples and tutorials +* Improve API documentation +* Translate to other languages + +=== Bug Reports + +Please include: + +* polysafe-gitfixer version +* Operating system and version +* Steps to reproduce +* Expected vs actual behavior +* Error messages and logs + +=== Feature Requests + +* Check existing issues first +* Describe the use case +* Explain why existing features don't suffice +* Consider security implications + +=== Code Contributions + +==== Rust (crates/) + +* Follow Rust API guidelines +* Run `cargo fmt` and `cargo clippy` +* Add tests for new functionality +* Update documentation + +==== Haskell (haskell/) + +* Use `cabal format` or `ormolu` +* Prefer total functions +* Add Haddock documentation +* Include QuickCheck properties where appropriate + +==== Elixir (elixir/) + +* Follow Elixir style guide +* Run `mix format` +* Add ExUnit tests +* Document with `@doc` and `@moduledoc` + +==== All Languages + +* Add SPDX headers to new files +* Keep changes focused and atomic +* Write clear commit messages +* Update relevant documentation + +== Contribution Workflow + +=== 1. Find or Create an Issue + +* Check existing issues for duplicates +* For bugs: create a detailed report +* For features: discuss before implementing +* Wait for maintainer feedback on larger changes + +=== 2. Fork and Branch + +[source,bash] +---- +git checkout -b type/description +# Examples: +# feat/add-backup-detection +# fix/path-traversal-edge-case +# docs/improve-installation-guide +---- + +=== 3. Develop + +* Write tests first when practical +* Keep commits small and focused +* Run the full test suite: `make test` +* Ensure `make check` passes + +=== 4. Commit Messages + +Follow conventional commits: + +[source] +---- +type(scope): description + +[optional body] + +[optional footer] +---- + +Types: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore` + +=== 5. Submit Merge Request + +* Fill out the MR template completely +* Link related issues +* Describe testing performed +* Request review from appropriate maintainers + +=== 6. Code Review + +* Respond to feedback promptly +* Push fixes as new commits (don't force-push during review) +* Squash commits when requested before merge + +== SPDX Headers + +All source files must include SPDX license headers: + +.Rust +[source,rust] +---- +// SPDX-License-Identifier: MIT AND Palimpsest-0.8 +// SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors +---- + +.Haskell +[source,haskell] +---- +-- SPDX-License-Identifier: MIT AND Palimpsest-0.8 +-- SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors +---- + +.Elixir +[source,elixir] +---- +# SPDX-License-Identifier: MIT AND Palimpsest-0.8 +# SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors +---- + +== Development Environment + +=== Required Tools + +* **Rust**: 1.75+ (via rustup) +* **Haskell**: GHC 9.4+, Cabal 3.8+ +* **Elixir**: 1.15+, OTP 26+ +* **Optional**: Nickel 1.4+, Idris 2 0.6+ + +=== Setup + +[source,bash] +---- +# Clone repository +git clone https://gitlab.com/Hyperpolymath/polysafe-gitfixer.git +cd polysafe-gitfixer + +# Build all components +make all + +# Run tests +make test +---- + +== Getting Help + +* **Issues**: For bugs and feature requests +* **Discussions**: For questions and ideas +* **Matrix/IRC**: Real-time community chat (if available) + +== Recognition + +Contributors are recognized in: + +* `MAINTAINERS.md` for significant contributions +* `.well-known/humans.txt` for all contributors +* Release notes for specific contributions + +== Legal + +=== Licensing + +By contributing, you agree that your contributions will be licensed under +the project's dual MIT + Palimpsest-0.8 license. + +=== Developer Certificate of Origin + +By submitting a contribution, you certify that you have the right to submit +it under the project's license. See https://developercertificate.org/ + +== Thank You! + +Every contribution makes polysafe-gitfixer better. We appreciate your time +and effort! diff --git a/FUNDING.yml b/FUNDING.yml new file mode 100644 index 0000000..fc47fbc --- /dev/null +++ b/FUNDING.yml @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: MIT AND Palimpsest-0.8 +# SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors +# +# Funding and sponsorship information for polysafe-gitfixer +# See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository + +# Primary funding platforms +# open_collective: polysafe-gitfixer +# liberapay: polysafe-gitfixer + +# Direct sponsorship +github: [Hyperpolymath] +# patreon: +# ko_fi: + +# Custom links +custom: + - https://gitlab.com/Hyperpolymath/polysafe-gitfixer + +# ============================================================================== +# Funding Philosophy +# ============================================================================== +# +# polysafe-gitfixer is free and open source software. Core functionality will +# always remain freely available under the MIT + Palimpsest-0.8 dual license. +# +# Funding helps with: +# - Development time for new features +# - Security audits +# - Infrastructure costs +# - Documentation improvements +# +# ============================================================================== +# Budget Allocation (when funded) +# ============================================================================== +# +# - 40% - Maintainer compensation +# - 20% - Infrastructure (CI/CD, hosting) +# - 15% - Security audits +# - 10% - Community (events, swag) +# - 10% - Upstream dependencies +# - 5% - Emergency reserve +# +# ============================================================================== +# Transparency +# ============================================================================== +# +# If/when the project receives funding: +# - All transactions will be tracked via OpenCollective or similar +# - Quarterly financial reports will be published +# - Major expenditures require core team approval +# +# See GOVERNANCE.adoc for spending authority levels. diff --git a/GOVERNANCE.adoc b/GOVERNANCE.adoc new file mode 100644 index 0000000..854f569 --- /dev/null +++ b/GOVERNANCE.adoc @@ -0,0 +1,293 @@ += Governance +:toc: +:toc-placement!: +:sectnums: + +toc::[] + +== Overview + +polysafe-gitfixer is governed by principles of transparency, consensus-seeking, +and graduated trust. This document describes how decisions are made and how +contributors can participate in project governance. + +== Core Principles + +=== Consensus-Seeking + +We prefer consensus over voting. Decisions should emerge from discussion +where possible, with voting reserved for deadlocks. + +=== Graduated Trust + +The Tri-Perimeter Contribution Framework (TPCF) provides graduated access +based on demonstrated expertise and commitment. + +=== Reversibility + +Decisions should be reversible when practical. We prefer experiments over +permanent commitments. + +=== Transparency + +All governance discussions happen in public, with decisions documented +in issues or merge requests. + +=== Merit-Based + +Advancement is based on contributions and demonstrated judgment, not +tenure alone. + +== Tri-Perimeter Framework + +See link:CONTRIBUTING.adoc[CONTRIBUTING] for detailed framework description. + +[cols="1,2,3"] +|=== +|Perimeter |Access Level |Scope + +|3 - Community +|Open to all +|Documentation, bug reports, features, examples + +|2 - Expert +|Trusted contributors +|Code review, extensions, mentoring + +|1 - Core +|Maintainers only +|Security, CI/CD, releases, architecture +|=== + +== Decision-Making + +=== Decision Categories + +==== Routine Decisions + +* Typo fixes, documentation improvements +* Clear bug fixes with tests +* Approved by any maintainer + +==== Minor Decisions + +* Feature additions within existing architecture +* Dependency updates (non-breaking) +* Requires review from one core maintainer + +==== Major Decisions + +* New components or languages +* Breaking changes to public APIs +* Significant architectural changes +* Requires discussion period (1 week) and approval from 2+ maintainers + +==== Critical Decisions + +* Security-critical changes +* License modifications +* Governance changes +* Requires supermajority (2/3) of active maintainers + +=== Voting Process + +When consensus cannot be reached: + +1. Discussion period of at least 72 hours +2. Clear proposal documented in an issue +3. Voting period of 1 week +4. Each active maintainer gets one vote +5. Results documented publicly + +== Project Roles + +=== Community Contributor + +* Anyone who participates in discussions or reports bugs +* No special permissions required + +=== Regular Contributor + +* Has submitted multiple accepted contributions +* Demonstrates understanding of project goals +* May be invited to review PRs + +=== Trusted Contributor (Perimeter 2) + +* Requirements: +** 3+ months active participation, OR +** 10+ merged contributions, OR +** Demonstrated domain expertise +* Responsibilities: +** Review and approve merge requests +** Mentor new contributors +** Help with issue triage + +=== Core Maintainer (Perimeter 1) + +* Requirements: +** Sustained high-quality contributions +** Demonstrated good judgment +** Nominated by existing maintainer, approved by consensus +* Responsibilities: +** Merge to protected branches +** Release management +** Security response +** Final say on architectural decisions +* Listed in MAINTAINERS.md + +== Security Governance + +=== Security Team + +Core maintainers form the security response team. + +=== Response Process + +1. Vulnerability reported via SECURITY.md channels +2. Acknowledged within SLA timeframe +3. Assessed and assigned severity +4. Fix developed in private +5. Coordinated disclosure + +=== Emergency Authority + +In critical security situations, any core maintainer may: + +* Revert commits +* Disable features +* Push emergency patches + +Such actions must be documented immediately and reviewed by the team +within 24 hours. + +== Release Management + +=== Versioning + +We follow Semantic Versioning (SemVer): + +* MAJOR: Breaking changes +* MINOR: New features, backward compatible +* PATCH: Bug fixes, backward compatible + +=== Release Process + +1. Feature freeze announced +2. Release candidate prepared +3. Testing period (1 week for major, 3 days for minor) +4. Release notes drafted +5. Tag created and release published +6. Announcement posted + +=== Release Schedule + +* Patch releases: As needed +* Minor releases: Quarterly +* Major releases: When necessary, with migration guides + +== Conflict Resolution + +=== Technical Disagreements + +1. Discussion in relevant issue/MR +2. Seek input from domain experts +3. If unresolved, escalate to core maintainers +4. If still unresolved, vote + +=== Code of Conduct Violations + +See link:CODE_OF_CONDUCT.adoc[CODE OF CONDUCT] for enforcement procedures. + +=== Maintainer Disputes + +1. Private discussion between involved parties +2. Mediation by uninvolved maintainer +3. If unresolved, vote by all other maintainers + +== Succession Planning + +=== Bus Factor Mitigation + +* No single maintainer should have exclusive knowledge +* Critical systems documented in docs/ +* Multiple maintainers for each component + +=== Maintainer Transitions + +When a maintainer steps down: + +1. Knowledge transfer period (if possible) +2. Update MAINTAINERS.md +3. Credential rotation +4. Public acknowledgment + +=== Project Archival + +If the project becomes unmaintained: + +1. Clear announcement with 90-day notice +2. Fork recommendations documented +3. Archive repository (read-only) +4. Preserve issue history + +== Amendment Process + +=== Minor Amendments + +* Clarifications, typo fixes +* Single maintainer approval + +=== Major Amendments + +* Structural changes to governance +* Process: +1. Proposal issue created +2. 2-week discussion period +3. 2/3 supermajority vote required +4. 1-week implementation period + +== Financial Governance + +=== Transparency + +If the project receives funding: + +* All income and expenses documented +* Quarterly reports published +* OpenCollective or similar transparent platform preferred + +=== Spending Authority + +* Under $100: Any maintainer +* $100-$500: Two maintainer approval +* Over $500: Majority maintainer approval + +=== Budget Priorities + +1. Infrastructure and hosting +2. Security audits +3. Contributor compensation +4. Community events +5. Upstream support + +== Platform Governance + +=== Primary Platform + +GitLab (gitlab.com/Hyperpolymath/polysafe-gitfixer) + +=== Mirrors + +GitHub mirror maintained for discoverability. + +=== Credentials + +* Access credentials documented securely +* Rotation on maintainer departure +* 2FA required for all maintainers + +== Contact + +For governance questions, open an issue or contact maintainers listed +in MAINTAINERS.md. diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..26e1b81 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,87 @@ +SPDX-License-Identifier: MIT AND Palimpsest-0.8 + +This project is dual-licensed under the MIT License and the Palimpsest License v0.8. +You may choose either license when using, copying, modifying, or distributing this work. + +================================================================================ +MIT License +================================================================================ + +Copyright (c) 2024-2025 The polysafe-gitfixer Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +================================================================================ +Palimpsest License v0.8 +================================================================================ + +Copyright (c) 2024-2025 The polysafe-gitfixer Contributors + +PERMITTED USES + +You are permitted to: +- Use, copy, and distribute this work +- Create derivative works +- Use this work for commercial purposes + +PROVIDED THAT you: +- Maintain attribution to the original authors +- Include this license text in all distributions +- Document any modifications in .well-known/provenance.json +- Acknowledge the contribution chain in derivative works + +RESTRICTIONS + +You may NOT: +- Train proprietary/closed-source AI models on this work without explicit + permission from the copyright holders +- Remove or obscure attribution information +- Claim sole authorship of derivative works + +OPEN-SOURCE AI EXCEPTION + +Training open-source AI models (where weights, architecture, and training code +are released under OSI-approved licenses) is permitted, provided: +- The trained model credits this project +- Generated outputs preserve attribution chains +- The model's license permits inspection and modification + +CONTRIBUTOR RIGHTS + +Contributors retain copyright to their contributions and may: +- Relicense their own contributions under compatible terms +- Revoke permissions for specific bad actors (existing legitimate uses unaffected) + +DISCLAIMER + +THIS WORK IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. THE AUTHORS SHALL +NOT BE LIABLE FOR ANY DAMAGES ARISING FROM USE OF THIS WORK. + +================================================================================ +License Compatibility +================================================================================ + +This dual license is compatible with: +- MIT License +- Apache License 2.0 +- BSD Licenses (2-clause, 3-clause) +- GNU General Public License (GPL) v2 and v3 +- Mozilla Public License 2.0 + +For questions about licensing, see CONTRIBUTING.adoc or open an issue. diff --git a/MAINTAINERS.md b/MAINTAINERS.md new file mode 100644 index 0000000..65b752a --- /dev/null +++ b/MAINTAINERS.md @@ -0,0 +1,57 @@ +# Maintainers + +This file lists the maintainers of polysafe-gitfixer and their areas of responsibility. + +## Core Maintainers + +Core maintainers have full access to all project systems and final say on +architectural decisions. + +| Name | GitLab/GitHub | Areas | Since | +|------|---------------|-------|-------| +| Jonathan D.A. Jewell | @Hyperpolymath | Architecture, Rust, Security | 2024 | + +## Component Leads + +Component leads have expertise in specific areas and help review related changes. + +| Component | Language | Lead | Backup | +|-----------|----------|------|--------| +| capability | Rust | @Hyperpolymath | - | +| fs_ops | Rust | @Hyperpolymath | - | +| git_ops | Rust | @Hyperpolymath | - | +| diff-engine | Haskell | - | - | +| tui | Haskell | - | - | +| workflow | Idris/Haskell | - | - | +| orchestrator | Elixir | - | - | + +## Emeritus Maintainers + +Former maintainers who have stepped back but made significant contributions. + +*None yet* + +## Becoming a Maintainer + +See [GOVERNANCE.adoc](GOVERNANCE.adoc) for the process of becoming a maintainer. + +In brief: +1. Sustained high-quality contributions +2. Demonstrated good judgment in code reviews +3. Nomination by existing maintainer +4. Consensus approval from core team + +## Contact + +- **Security issues**: See [SECURITY.md](SECURITY.md) +- **General questions**: Open an issue +- **Private matters**: Contact maintainers via GitLab/GitHub + +## Attribution + +All contributors are listed in `.well-known/humans.txt` and acknowledged +in release notes for their specific contributions. + +--- + +*This file follows the [Rhodium Standard](https://gitlab.com/Hyperpolymath/rhodium-standard-repositories) format.* diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..5e6caef --- /dev/null +++ b/README.adoc @@ -0,0 +1,209 @@ +// SPDX-License-Identifier: MIT AND Palimpsest-0.8 +// SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors + += polysafe-gitfixer +:toc: +:toc-placement!: +:sectnums: +:icons: font +:source-highlighter: rouge + +image:https://img.shields.io/badge/RSR-compliant-gold[RSR Compliant] +image:https://img.shields.io/badge/license-MIT%20%2B%20Palimpsest--0.8-blue[License] + +A polyglot implementation of a git backup merger tool, where each component is +written in the language that provides the strongest safety guarantees for that +component's concerns. + +toc::[] + +== Overview + +polysafe-gitfixer helps you manage git repository backups by: + +1. Scanning a directory tree for git repositories +2. Finding backup directories (`*-backup`, `*.backup-*`) +3. Matching backups to their corresponding repos +4. Diffing backup vs repo contents +5. Offering interactive merge/replace/delete options +6. Maintaining an append-only audit log +7. Handling failures gracefully via OTP supervision + +== Architecture + +[source] +---- +┌─────────────────────────────────────────────────────────────────────────────┐ +│ COMPONENT MAP │ +├─────────────────────────────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────────────┐ ┌─────────────────┐ │ +│ │ Haskell │ │ Nickel │ │ +│ │ TUI/CLI │◄────────│ Config │ │ +│ │ (Brick) │ │ (schemas) │ │ +│ └────────┬────────┘ └─────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌─────────────────────────────────────────────────────────────┐ │ +│ │ Elixir/OTP │ │ +│ │ Orchestration & Supervision │ │ +│ └───┬─────────────────┬─────────────────┬─────────────────┬───┘ │ +│ │ │ │ │ │ +│ ▼ ▼ ▼ ▼ │ +│ ┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │ Idris │ │ Haskell │ │ Rust │ │ Rust │ │ +│ │Workflow │ │ Diff │ │ Git │ │ F/S │ │ +│ │ State │ │ Engine │ │ Ops │ │ Ops │ │ +│ └─────────┘ └──────────┘ └──────────┘ └──────────┘ │ +│ │ +│ ┌──────────────────────────────┐ │ +│ │ Rust │ │ +│ │ Capability & Audit Layer │ │ +│ └──────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────────────────────┘ +---- + +== Components + +[cols="2,1,3"] +|=== +|Component |Language |Safety Guarantee + +|Configuration +|Nickel +|Schema validation, typed defaults + +|Capability & Audit +|Rust +|Path traversal prevention, tamper-evident logging + +|Filesystem Ops +|Rust +|RAII, atomic transactions, rollback on failure + +|Git Operations +|Rust +|Error handling, effect tracking + +|Diff Engine +|Haskell +|Totality, streaming for large files + +|Workflow State +|Idris 2 +|Typestate (can't call operations in wrong order) + +|Orchestration +|Elixir/OTP +|Fault isolation, supervision trees + +|TUI/CLI +|Haskell (Brick) +|Elm Architecture, exhaustive event handling +|=== + +== Quick Start + +=== Prerequisites + +* **Rust** 1.75+ (via rustup) +* **Haskell** GHC 9.4+, Cabal 3.8+ +* **Elixir** 1.15+, OTP 26+ +* **Nickel** 1.4+ (optional, for config validation) +* **Idris 2** 0.6+ (optional, Haskell fallback available) + +=== Build + +[source,bash] +---- +# Build all components +make all + +# Run tests +make test + +# Build individual components +make rust # Rust crates only +make haskell # Haskell components only +make elixir # Elixir orchestrator only +---- + +== Project Structure + +[source] +---- +polysafe-gitfixer/ +├── config/ # Nickel configuration schemas +├── crates/ # Rust components +│ ├── capability/ # Path safety & audit logging +│ ├── fs_ops/ # Transactional filesystem operations +│ ├── git_ops/ # Git repository operations +│ └── polysafe_nifs/ # Rustler NIFs for Elixir +├── haskell/ # Haskell components +│ ├── diff-engine/ # Tree/file diffing +│ └── tui/ # Terminal UI +├── idris/ # Idris 2 workflow state machine +├── elixir/ # Elixir orchestrator +├── .well-known/ # RSR protocol files +└── test/ # Integration tests +---- + +== Safety Philosophy + +Each component uses the language with the strongest safety guarantees for its +specific concerns: + +**Rust** (capability, fs_ops, git_ops):: +Memory safety without garbage collection, RAII for deterministic cleanup, +strong ownership model prevents data races. + +**Haskell** (diff-engine, tui):: +Strong static typing, totality checking, lazy evaluation for streaming +large files, Elm Architecture for exhaustive event handling. + +**Elixir/OTP** (orchestrator):: +"Let it crash" philosophy with supervision trees, process isolation, +fault-tolerant by design. + +**Idris 2** (workflow):: +Dependent types enable typestate patterns where invalid states are +unrepresentable at compile time. + +**Nickel** (configuration):: +Schema validation with contracts, preventing configuration errors +before runtime. + +== Contributing + +We welcome contributions! See link:CONTRIBUTING.adoc[CONTRIBUTING] for: + +* The Tri-Perimeter Contribution Framework (TPCF) +* Development setup instructions +* Code style guidelines +* How to submit merge requests + +== Documentation + +* link:SECURITY.md[Security Policy] - Vulnerability reporting +* link:CODE_OF_CONDUCT.adoc[Code of Conduct] - Community standards +* link:GOVERNANCE.adoc[Governance] - Decision-making process +* link:MAINTAINERS.md[Maintainers] - Project leadership + +== License + +This project is dual-licensed under: + +* **MIT License** - Permissive, widely compatible +* **Palimpsest License v0.8** - Collaborative attribution, AI training restrictions + +See link:LICENSE.txt[LICENSE.txt] for full terms. + +== Acknowledgments + +* https://gitlab.com/Hyperpolymath/rhodium-standard-repositories[Rhodium Standard] - Repository standards +* https://github.com/rust-lang/git2-rs[git2-rs] - Rust bindings for libgit2 +* https://github.com/briansmith/ring[ring] - Cryptographic primitives + +--- + +_This project follows the https://gitlab.com/Hyperpolymath/rhodium-standard-repositories[Rhodium Standard Repositories] specification._ diff --git a/README.md b/README.md deleted file mode 100644 index e8e1653..0000000 --- a/README.md +++ /dev/null @@ -1,111 +0,0 @@ -# polysafe-gitfixer - -A polyglot implementation of a git backup merger tool, where each component is written in the language that provides the strongest safety guarantees for that component's concerns. - -## Overview - -This tool: -1. Scans a directory tree for git repositories -2. Finds backup directories (`*-backup`, `*.backup-*`) -3. Matches backups to their corresponding repos -4. Diffs backup vs repo contents -5. Offers interactive merge/replace/delete options -6. Maintains append-only audit log -7. Handles failures gracefully (supervision) - -## Architecture - -``` -┌─────────────────────────────────────────────────────────────────────────────┐ -│ COMPONENT MAP │ -├─────────────────────────────────────────────────────────────────────────────┤ -│ │ -│ ┌─────────────────┐ ┌─────────────────┐ │ -│ │ Haskell │ │ Nickel │ │ -│ │ TUI/CLI │◄────────│ Config │ │ -│ │ (Brick) │ │ (schemas) │ │ -│ └────────┬────────┘ └─────────────────┘ │ -│ │ │ -│ ▼ │ -│ ┌─────────────────────────────────────────────────────────────┐ │ -│ │ Elixir/OTP │ │ -│ │ Orchestration & Supervision │ │ -│ └───┬─────────────────┬─────────────────┬─────────────────┬───┘ │ -│ │ │ │ │ │ -│ ▼ ▼ ▼ ▼ │ -│ ┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ -│ │ Idris │ │ Haskell │ │ Rust │ │ Rust │ │ -│ │Workflow │ │ Diff │ │ Git │ │ F/S │ │ -│ │ State │ │ Engine │ │ Ops │ │ Ops │ │ -│ └─────────┘ └──────────┘ └──────────┘ └──────────┘ │ -│ │ -│ ┌──────────────────────────────┐ │ -│ │ Rust │ │ -│ │ Capability & Audit Layer │ │ -│ └──────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────────────────┘ -``` - -## Components - -| Component | Language | Safety Guarantee | -|-----------|----------|------------------| -| Configuration | Nickel | Schema validation, typed defaults | -| Capability & Audit | Rust | Path traversal prevention, tamper-evident logging | -| Filesystem Ops | Rust | RAII, atomic transactions, rollback on failure | -| Git Operations | Rust | Error handling, effect tracking | -| Diff Engine | Haskell | Totality, streaming for large files | -| Workflow State | Idris 2 | Typestate (can't call operations in wrong order) | -| Orchestration | Elixir/OTP | Fault isolation, supervision trees | -| TUI/CLI | Haskell (Brick) | Elm Architecture, exhaustive event handling | - -## Building - -### Prerequisites - -- Rust (1.75+) -- Haskell (GHC 9.4+, Cabal 3.8+) -- Elixir (1.15+, OTP 26+) -- Nickel (1.4+) -- Idris 2 (0.6+) - optional, Haskell fallback available - -### Build All - -```bash -make all -``` - -### Build Individual Components - -```bash -# Rust crates -make rust - -# Haskell components -make haskell - -# Elixir orchestrator -make elixir -``` - -## Project Structure - -``` -polysafe-gitfixer/ -├── config/ # Nickel configuration schemas -├── crates/ # Rust components -│ ├── capability/ # Path safety & audit logging -│ ├── fs_ops/ # Transactional filesystem operations -│ ├── git_ops/ # Git repository operations -│ └── polysafe_nifs/# Rustler NIFs for Elixir -├── haskell/ # Haskell components -│ ├── diff-engine/ # Tree/file diffing -│ └── tui/ # Terminal UI -├── idris/ # Idris 2 workflow state machine -├── elixir/ # Elixir orchestrator -└── test/ # Integration tests -``` - -## License - -MIT OR Apache-2.0 diff --git a/crates/capability/src/audit_log.rs b/crates/capability/src/audit_log.rs index 34329a3..1600b3e 100644 --- a/crates/capability/src/audit_log.rs +++ b/crates/capability/src/audit_log.rs @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: MIT AND Palimpsest-0.8 +// SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors + //! Append-only, hash-chained audit log for tamper evidence use std::fs::{File, OpenOptions}; diff --git a/crates/capability/src/dir_capability.rs b/crates/capability/src/dir_capability.rs index 2adf086..e6235c6 100644 --- a/crates/capability/src/dir_capability.rs +++ b/crates/capability/src/dir_capability.rs @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: MIT AND Palimpsest-0.8 +// SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors + //! Directory capability - unforgeable tokens for safe path resolution use std::path::{Path, PathBuf}; diff --git a/crates/capability/src/lib.rs b/crates/capability/src/lib.rs index 060e3b7..f1e9ba2 100644 --- a/crates/capability/src/lib.rs +++ b/crates/capability/src/lib.rs @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: MIT AND Palimpsest-0.8 +// SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors + //! # Capability-based Security for polysafe-gitfixer //! //! This crate provides two core security primitives: diff --git a/crates/fs_ops/src/lib.rs b/crates/fs_ops/src/lib.rs index abf93a2..a31d180 100644 --- a/crates/fs_ops/src/lib.rs +++ b/crates/fs_ops/src/lib.rs @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: MIT AND Palimpsest-0.8 +// SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors + //! # Transactional Filesystem Operations //! //! This crate provides atomic, transactional filesystem operations with automatic diff --git a/crates/fs_ops/src/transaction.rs b/crates/fs_ops/src/transaction.rs index 173aa56..5d94d53 100644 --- a/crates/fs_ops/src/transaction.rs +++ b/crates/fs_ops/src/transaction.rs @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: MIT AND Palimpsest-0.8 +// SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors + //! Filesystem transaction with journaling and rollback use std::fs::{self, File}; diff --git a/crates/git_ops/src/lib.rs b/crates/git_ops/src/lib.rs index 82adfd0..e4127e9 100644 --- a/crates/git_ops/src/lib.rs +++ b/crates/git_ops/src/lib.rs @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: MIT AND Palimpsest-0.8 +// SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors + //! # Git Operations for polysafe-gitfixer //! //! Safe wrappers around git2 operations with proper error handling. diff --git a/crates/polysafe_nifs/src/lib.rs b/crates/polysafe_nifs/src/lib.rs index 1add917..5442330 100644 --- a/crates/polysafe_nifs/src/lib.rs +++ b/crates/polysafe_nifs/src/lib.rs @@ -1,3 +1,6 @@ +// SPDX-License-Identifier: MIT AND Palimpsest-0.8 +// SPDX-FileCopyrightText: 2024-2025 The polysafe-gitfixer Contributors + //! # Rustler NIF Bindings for polysafe-gitfixer //! //! This crate provides Elixir NIF bindings for the Rust components: