diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 746c07b..d6ae542 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -2,8 +2,8 @@ git clone https://github.com/hyperpolymath/affinescriptiser.git cd affinescriptiser -# Using Nix (recommended for reproducibility) -nix develop +# Using Guix (recommended for reproducibility) +guix develop # Or using toolbox/distrobox toolbox create affinescriptiser-dev @@ -45,7 +45,7 @@ affinescriptiser/ ├── MAINTAINERS.md ├── README.adoc ├── SECURITY.md -├── flake.nix # Nix flake — fallback (Perimeter 1) +├── flake.guix # Guix flake — fallback (Perimeter 1) ├── guix.scm # Guix package — primary (Perimeter 1) └── Justfile # Task runner (Perimeter 1) ``` diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 6e2bea9..678e4a4 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -33,7 +33,7 @@ ## Banned Languages -- No TypeScript (use ReScript) +- No TypeScript (use AffineScript) - No Node.js / npm / bun (use Deno) - No Go (use Rust) - No Python (use Julia or Rust) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d5cd4e9..045cb8f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -41,8 +41,8 @@ updates: schedule: interval: "weekly" - # Nix flakes - - package-ecosystem: "nix" + # Guix flakes + - package-ecosystem: "guix" directory: "/" schedule: interval: "weekly" diff --git a/.machine_readable/ai/PLACEHOLDERS.adoc b/.machine_readable/ai/PLACEHOLDERS.adoc index 897fbca..c1d366f 100644 --- a/.machine_readable/ai/PLACEHOLDERS.adoc +++ b/.machine_readable/ai/PLACEHOLDERS.adoc @@ -48,8 +48,8 @@ sed -i "s/{{CURRENT_DATE}}/$(date +%Y-%m-%d)/g" $(grep -rl '{{CURRENT_DATE}}' .) | Placeholder | Description | Example | Files | |---|---|---|---| -| `{{PROJECT_NAME}}` | Human-readable project name | `My Project` | SECURITY.md, CODE_OF_CONDUCT.md, TOPOLOGY.md, STATE.a2ml, Justfile, GOVERNANCE.md, MAINTAINERS.md, flake.nix, devcontainer.json | -| `{{PROJECT_DESCRIPTION}}` | One-line description | `A tool for X` | flake.nix | +| `{{PROJECT_NAME}}` | Human-readable project name | `My Project` | SECURITY.md, CODE_OF_CONDUCT.md, TOPOLOGY.md, STATE.a2ml, Justfile, GOVERNANCE.md, MAINTAINERS.md, flake.guix, devcontainer.json | +| `{{PROJECT_DESCRIPTION}}` | One-line description | `A tool for X` | flake.guix | | `{{PROJECT}}` | Uppercase identifier (for Idris2 modules, C macros) | `MY_PROJECT` | ABI-FFI-README.md, src/interface/abi/*.idr, src/interface/ffi/*.zig | | `{{project}}` | Lowercase identifier (for C symbols, filenames) | `my_project` | ABI-FFI-README.md, src/interface/ffi/*.zig | | `affinescriptiser` | Repository name (slug) | `my-project` | CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md, cliff.toml | @@ -133,7 +133,7 @@ After replacing all placeholders, verify none remain: ```bash grep -rn '{{' . --include='*.md' --include='*.adoc' --include='*.a2ml' \ --include='*.scm' --include='*.idr' --include='*.zig' --include='*.res' \ - --include='Justfile' --include='*.nix' --include='*.toml' --include='*.yml' \ + --include='Justfile' --include='*.guix' --include='*.toml' --include='*.yml' \ --include='*.yaml' --include='*.hs' --include='*.ncl' --include='*.txt' \ --include='*.json' --include='Containerfile' --include='dep5' \ | grep -v 'PLACEHOLDERS.md' | grep -v 'node_modules' diff --git a/.machine_readable/contractiles/lust/Intentfile.a2ml b/.machine_readable/contractiles/lust/Intentfile.a2ml index f75d38e..53287e5 100644 --- a/.machine_readable/contractiles/lust/Intentfile.a2ml +++ b/.machine_readable/contractiles/lust/Intentfile.a2ml @@ -16,7 +16,7 @@ design philosophy — not current state, but target state. ### reproducible-builds - description: Builds should be bit-for-bit reproducible -- target: Guix + Nix + Containerfile +- target: Guix + Guix + Containerfile - status: aspiration ### zero-dangerous-patterns diff --git a/.machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml b/.machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml index eaee720..698f4d0 100644 --- a/.machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml +++ b/.machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml @@ -67,7 +67,7 @@ compliance-seams-check = true exception-register-required = true exception-bounded-scope-required = true policy-drift-contamination-check = true -example-drift-risk = "single TypeScript exception causing broad ReScript->TypeScript migration" +example-drift-risk = "single TypeScript exception causing broad AffineScript->TypeScript migration" compliance-tooling = "panic-attack" effects-tooling = "ecological checking with sustainabot guidance" diff --git a/CODE_OF_CONDUCT.adoc b/CODE_OF_CONDUCT.adoc new file mode 100644 index 0000000..bd2a83c --- /dev/null +++ b/CODE_OF_CONDUCT.adoc @@ -0,0 +1,24 @@ +== Contributor Covenant Code of Conduct + +=== Our Pledge + +We pledge to make participation a harassment-free experience for +everyone. + +=== Our Standards + +*Positive behavior:* * Using welcoming language * Being respectful of +differing viewpoints * Accepting constructive criticism * Focusing on +what is best for the community + +*Unacceptable behavior:* * Harassment, trolling, or personal attacks * +Publishing private information without permission + +=== Enforcement + +Report issues to the maintainers. All complaints will be reviewed. + +=== Attribution + +Adapted from https://www.contributor-covenant.org/[Contributor Covenant] +v2.1. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index caeda1c..0000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,27 +0,0 @@ - -# Contributor Covenant Code of Conduct - -## Our Pledge - -We pledge to make participation a harassment-free experience for everyone. - -## Our Standards - -**Positive behavior:** -* Using welcoming language -* Being respectful of differing viewpoints -* Accepting constructive criticism -* Focusing on what is best for the community - -**Unacceptable behavior:** -* Harassment, trolling, or personal attacks -* Publishing private information without permission - -## Enforcement - -Report issues to the maintainers. All complaints will be reviewed. - -## Attribution - -Adapted from [Contributor Covenant](https://www.contributor-covenant.org/) v2.1. - diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc new file mode 100644 index 0000000..dd089ae --- /dev/null +++ b/CONTRIBUTING.adoc @@ -0,0 +1,71 @@ +== Contributing + +Thank you for your interest in contributing! We follow a "`Dual-Track`" +architecture where human-readable documentation lives in the root and +machine-readable policies live in `+.machine_readable/+`. + +=== How to Contribute + +We welcome contributions in many forms: + +* *Code:* Improving the core stack or extensions +* *Documentation:* Enhancing docs or AI manifests +* *Testing:* Adding property-based tests or formal proofs +* *Bug reports:* Filing clear, reproducible issues + +=== Getting Started + +[arabic] +. *Read the AI Manifest:* Start with `+0-AI-MANIFEST.a2ml+` (if present) +to understand the repository structure. +. *Environment:* Use `+guix develop+` or `+direnv allow+` to set up your +tools. +. *Task Runner:* Use `+just+` to see available commands +(`+just --list+`). + +=== Development Workflow + +==== Branch Naming + +.... +docs/short-description # Documentation +test/what-added # Test additions +feat/short-description # New features +fix/issue-number-description # Bug fixes +refactor/what-changed # Code improvements +security/what-fixed # Security fixes +.... + +==== Commit Messages + +We follow https://www.conventionalcommits.org/[Conventional Commits]: + +.... +(): + +[optional body] + +[optional footer] +.... + +Types: `+feat+`, `+fix+`, `+docs+`, `+test+`, `+refactor+`, `+ci+`, +`+chore+`, `+security+` + +=== Reporting Bugs + +Before reporting: 1. Search existing issues 2. Check if it’s already +fixed in `+main+` + +When reporting, include: - Clear, descriptive title - Environment +details (OS, versions, toolchain) - Steps to reproduce - Expected vs +actual behaviour + +=== Code of Conduct + +All contributors are expected to adhere to our +link:CODE_OF_CONDUCT.md[Code of Conduct]. + +=== License + +By contributing, you agree that your contributions will be licensed +under the same license as the project (see LICENSE). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 80ecdac..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,66 +0,0 @@ - -# Contributing - -Thank you for your interest in contributing! We follow a "Dual-Track" architecture where human-readable documentation lives in the root and machine-readable policies live in `.machine_readable/`. - -## How to Contribute - -We welcome contributions in many forms: - -- **Code:** Improving the core stack or extensions -- **Documentation:** Enhancing docs or AI manifests -- **Testing:** Adding property-based tests or formal proofs -- **Bug reports:** Filing clear, reproducible issues - -## Getting Started - -1. **Read the AI Manifest:** Start with `0-AI-MANIFEST.a2ml` (if present) to understand the repository structure. -2. **Environment:** Use `nix develop` or `direnv allow` to set up your tools. -3. **Task Runner:** Use `just` to see available commands (`just --list`). - -## Development Workflow - -### Branch Naming - -``` -docs/short-description # Documentation -test/what-added # Test additions -feat/short-description # New features -fix/issue-number-description # Bug fixes -refactor/what-changed # Code improvements -security/what-fixed # Security fixes -``` - -### Commit Messages - -We follow [Conventional Commits](https://www.conventionalcommits.org/): - -``` -(): - -[optional body] - -[optional footer] -``` - -Types: `feat`, `fix`, `docs`, `test`, `refactor`, `ci`, `chore`, `security` - -## Reporting Bugs - -Before reporting: -1. Search existing issues -2. Check if it's already fixed in `main` - -When reporting, include: -- Clear, descriptive title -- Environment details (OS, versions, toolchain) -- Steps to reproduce -- Expected vs actual behaviour - -## Code of Conduct - -All contributors are expected to adhere to our [Code of Conduct](CODE_OF_CONDUCT.md). - -## License - -By contributing, you agree that your contributions will be licensed under the same license as the project (see [LICENSE](LICENSE)). diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..39b9ba0 --- /dev/null +++ b/README.adoc @@ -0,0 +1,189 @@ +https://github.com/sponsors/hyperpolymath[image:https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?logo=github[Sponsor]] + +== What Is Affinescriptiser? + +Affinescriptiser takes existing code written in Rust, C, or Zig and +wraps it with +https://github.com/hyperpolymath/affinescript[AffineScript]’s type +system — combining *affine types* (resources used at most once) with +*dependent types* (compile-time value constraints) — then compiles the +result to *WebAssembly*. + +The outcome: resources such as file descriptors, sockets, GPU buffers, +and heap allocations become *provably* safe. They cannot be leaked, +double-freed, or used after release. The wrapped code ships as a +`+.wasm+` binary with zero garbage collector and zero runtime overhead +from the type proofs. + +Affinescriptiser is part of the +https://github.com/hyperpolymath/iseriser[-iser family], a collection of +tools that wrap existing code in a target language’s capabilities +without requiring users to learn that language. + +== How It Works + +You describe your code in an `+affinescriptiser.toml+` manifest, point +at your source files, and declare which resources need affine tracking. + +[source,toml] +---- +# affinescriptiser.toml — example manifest +[workload] +name = "secure-file-processor" +entry = "src/lib.rs::process_file" +strategy = "affine-wrap" + +[data] +input-type = "FileHandle" +output-type = "ProcessedResult" + +[options] +flags = ["track-file-descriptors", "track-allocations", "wasm-size-opt"] +---- + +Affinescriptiser then: + +[arabic] +. *Analyses* your function signatures and identifies resource handles +(file descriptors, heap allocations, locks, GPU buffers) +. *Generates* AffineScript type annotations that enforce at-most-once +usage for each tracked resource +. *Proves* via Idris2 that affine invariants hold across the FFI +boundary +. *Compiles* the wrapped code to WebAssembly with size and performance +optimisation + +== Architecture + +.... + affinescriptiser pipeline + ┌──────────────────────────────────────────────────────────────────────────┐ + │ │ + │ ┌─────────────────┐ ┌───────────────────┐ ┌────────────────┐ │ + │ │ affinescriptiser │ │ Source Analysis │ │ Idris2 ABI │ │ + │ │ .toml │────▶│ (Rust CLI) │────▶│ Proofs │ │ + │ │ │ │ │ │ │ │ + │ │ - entry point │ │ - parse signatures│ │ - ResourceKind│ │ + │ │ - resource list │ │ - find handles │ │ - Linearity │ │ + │ │ - WASM flags │ │ - map ownership │ │ - Ownership │ │ + │ └─────────────────┘ └───────────────────┘ └───────┬────────┘ │ + │ │ │ + │ ▼ │ + │ ┌─────────────────┐ ┌───────────────────┐ ┌────────────────┐ │ + │ │ .wasm output │◀────│ AffineScript │◀────│ Zig FFI │ │ + │ │ │ │ Codegen │ │ Bridge │ │ + │ │ - zero GC │ │ │ │ │ │ + │ │ - size-optimised│ │ - affine wrappers │ │ - C headers │ │ + │ │ - portable │ │ - effect handlers │ │ - zero-cost │ │ + │ └─────────────────┘ └───────────────────┘ └────────────────┘ │ + │ │ + └──────────────────────────────────────────────────────────────────────────┘ +.... + +=== Layer Responsibilities + +[width="100%",cols="50%,50%",options="header",] +|=== +|Layer |Role +|*Manifest* (`+affinescriptiser.toml+`) |User declares what code to wrap +and which resources to track. + +|*Source Analysis* (Rust, `+src/manifest/+`, `+src/codegen/+`) |Parses +input source files, identifies resource handles and ownership patterns. + +|*Idris2 ABI* (`+src/interface/abi/+`) |Formal proofs that affine +invariants (at-most-once usage, no leaks) hold. Defines +`+ResourceKind+`, `+Linearity+`, `+Ownership+`, and WASM memory layout. + +|*Zig FFI* (`+src/interface/ffi/+`) |C-ABI compatible bridge between the +proven ABI and the generated code. Zero runtime overhead, +cross-compilation built in. + +|*AffineScript Codegen* (`+src/codegen/+`) |Generates AffineScript +wrapper code with ownership annotations and algebraic effect handlers. +Compiles to WASM. + +|*WASM Output* |Final `+.wasm+` binary. No garbage collector, no +runtime, minimal size. +|=== + +== Key Value + +*Automatic resource safety* — files, sockets, GPU buffers, and heap +allocations cannot be leaked or double-freed. The type system proves +this at compile time, not at runtime. + +*WASM deployment* — the output is a portable WebAssembly binary that +runs in browsers, edge workers, IoT devices, or any WASM runtime. No GC +means predictable latency and tiny binary size. + +*Zero target-language exposure* — users never write AffineScript +directly. They describe their intent in TOML and let affinescriptiser +handle the wrapping, proving, and compilation. + +== Use Cases + +* *Browser sandboxed computation* — run resource-safe code in the +browser via WASM without worrying about memory leaks in long-running +tabs +* *Edge computing* — deploy provably-safe WASM modules to Cloudflare +Workers, Fastly Compute, or Deno Deploy with guaranteed resource bounds +* *IoT firmware* — compile to WASM for microcontrollers with formal +proof that bounded memory is respected +* *GPU buffer management* — wrap CUDA/Vulkan buffer allocations with +affine types to prevent double-free and use-after-free in compute +shaders +* *Secure file processing* — process sensitive files with compile-time +proof that file handles are closed exactly once + +== CLI Commands + +[source,bash] +---- +# Initialise a new manifest in the current directory +affinescriptiser init + +# Validate your manifest +affinescriptiser validate -m affinescriptiser.toml + +# Generate AffineScript wrappers, Zig FFI bridge, and C headers +affinescriptiser generate -m affinescriptiser.toml -o generated/affinescriptiser + +# Build the generated artifacts +affinescriptiser build -m affinescriptiser.toml --release + +# Run the workload +affinescriptiser run -m affinescriptiser.toml -- --input data.bin + +# Show manifest information +affinescriptiser info -m affinescriptiser.toml +---- + +== Building from Source + +[source,bash] +---- +# Prerequisites: Rust (nightly), Idris2, Zig +cargo build --release + +# Run tests +cargo test + +# Full quality check (format, lint, test) +just quality +---- + +== Status + +*Pre-alpha / Scaffold.* The architecture is defined, the CLI is +functional (init, validate, info), and the RSR template with full CI/CD +is in place. Code generation is stubbed — the `+generate+` command +creates output directories but does not yet emit AffineScript wrappers. +The Idris2 ABI proofs and Zig FFI bridge contain template placeholders +awaiting domain-specific implementation. + +See ROADMAP for the phased development plan. + +== License + +SPDX-License-Identifier: CC-BY-SA-4.0 diff --git a/README.md b/README.md deleted file mode 100644 index 8859060..0000000 --- a/README.md +++ /dev/null @@ -1,181 +0,0 @@ - - -[![Sponsor](https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?logo=github)](https://github.com/sponsors/hyperpolymath) - -# What Is Affinescriptiser? - -Affinescriptiser takes existing code written in Rust, C, or Zig and -wraps it with -[AffineScript](https://github.com/hyperpolymath/affinescript)’s type -system — combining **affine types** (resources used at most once) with -**dependent types** (compile-time value constraints) — then compiles the -result to **WebAssembly**. - -The outcome: resources such as file descriptors, sockets, GPU buffers, -and heap allocations become **provably** safe. They cannot be leaked, -double-freed, or used after release. The wrapped code ships as a `.wasm` -binary with zero garbage collector and zero runtime overhead from the -type proofs. - -Affinescriptiser is part of the [-iser -family](https://github.com/hyperpolymath/iseriser), a collection of -tools that wrap existing code in a target language’s capabilities -without requiring users to learn that language. - -# How It Works - -You describe your code in an `affinescriptiser.toml` manifest, point at -your source files, and declare which resources need affine tracking. - -```toml -# affinescriptiser.toml — example manifest -[workload] -name = "secure-file-processor" -entry = "src/lib.rs::process_file" -strategy = "affine-wrap" - -[data] -input-type = "FileHandle" -output-type = "ProcessedResult" - -[options] -flags = ["track-file-descriptors", "track-allocations", "wasm-size-opt"] -``` - -Affinescriptiser then: - -1. **Analyses** your function signatures and identifies resource - handles (file descriptors, heap allocations, locks, GPU buffers) - -2. **Generates** AffineScript type annotations that enforce - at-most-once usage for each tracked resource - -3. **Proves** via Idris2 that affine invariants hold across the FFI - boundary - -4. **Compiles** the wrapped code to WebAssembly with size and - performance optimisation - -# Architecture - - affinescriptiser pipeline - ┌──────────────────────────────────────────────────────────────────────────┐ - │ │ - │ ┌─────────────────┐ ┌───────────────────┐ ┌────────────────┐ │ - │ │ affinescriptiser │ │ Source Analysis │ │ Idris2 ABI │ │ - │ │ .toml │────▶│ (Rust CLI) │────▶│ Proofs │ │ - │ │ │ │ │ │ │ │ - │ │ - entry point │ │ - parse signatures│ │ - ResourceKind│ │ - │ │ - resource list │ │ - find handles │ │ - Linearity │ │ - │ │ - WASM flags │ │ - map ownership │ │ - Ownership │ │ - │ └─────────────────┘ └───────────────────┘ └───────┬────────┘ │ - │ │ │ - │ ▼ │ - │ ┌─────────────────┐ ┌───────────────────┐ ┌────────────────┐ │ - │ │ .wasm output │◀────│ AffineScript │◀────│ Zig FFI │ │ - │ │ │ │ Codegen │ │ Bridge │ │ - │ │ - zero GC │ │ │ │ │ │ - │ │ - size-optimised│ │ - affine wrappers │ │ - C headers │ │ - │ │ - portable │ │ - effect handlers │ │ - zero-cost │ │ - │ └─────────────────┘ └───────────────────┘ └────────────────┘ │ - │ │ - └──────────────────────────────────────────────────────────────────────────┘ - -## Layer Responsibilities - -| Layer | Role | -|----|----| -| **Manifest** (`affinescriptiser.toml`) | User declares what code to wrap and which resources to track. | -| **Source Analysis** (Rust, `src/manifest/`, `src/codegen/`) | Parses input source files, identifies resource handles and ownership patterns. | -| **Idris2 ABI** (`src/interface/abi/`) | Formal proofs that affine invariants (at-most-once usage, no leaks) hold. Defines `ResourceKind`, `Linearity`, `Ownership`, and WASM memory layout. | -| **Zig FFI** (`src/interface/ffi/`) | C-ABI compatible bridge between the proven ABI and the generated code. Zero runtime overhead, cross-compilation built in. | -| **AffineScript Codegen** (`src/codegen/`) | Generates AffineScript wrapper code with ownership annotations and algebraic effect handlers. Compiles to WASM. | -| **WASM Output** | Final `.wasm` binary. No garbage collector, no runtime, minimal size. | - -# Key Value - -**Automatic resource safety** — files, sockets, GPU buffers, and heap -allocations cannot be leaked or double-freed. The type system proves -this at compile time, not at runtime. - -**WASM deployment** — the output is a portable WebAssembly binary that -runs in browsers, edge workers, IoT devices, or any WASM runtime. No GC -means predictable latency and tiny binary size. - -**Zero target-language exposure** — users never write AffineScript -directly. They describe their intent in TOML and let affinescriptiser -handle the wrapping, proving, and compilation. - -# Use Cases - -- **Browser sandboxed computation** — run resource-safe code in the - browser via WASM without worrying about memory leaks in long-running - tabs - -- **Edge computing** — deploy provably-safe WASM modules to Cloudflare - Workers, Fastly Compute, or Deno Deploy with guaranteed resource - bounds - -- **IoT firmware** — compile to WASM for microcontrollers with formal - proof that bounded memory is respected - -- **GPU buffer management** — wrap CUDA/Vulkan buffer allocations with - affine types to prevent double-free and use-after-free in compute - shaders - -- **Secure file processing** — process sensitive files with compile-time - proof that file handles are closed exactly once - -# CLI Commands - -```bash -# Initialise a new manifest in the current directory -affinescriptiser init - -# Validate your manifest -affinescriptiser validate -m affinescriptiser.toml - -# Generate AffineScript wrappers, Zig FFI bridge, and C headers -affinescriptiser generate -m affinescriptiser.toml -o generated/affinescriptiser - -# Build the generated artifacts -affinescriptiser build -m affinescriptiser.toml --release - -# Run the workload -affinescriptiser run -m affinescriptiser.toml -- --input data.bin - -# Show manifest information -affinescriptiser info -m affinescriptiser.toml -``` - -# Building from Source - -```bash -# Prerequisites: Rust (nightly), Idris2, Zig -cargo build --release - -# Run tests -cargo test - -# Full quality check (format, lint, test) -just quality -``` - -# Status - -**Pre-alpha / Scaffold.** The architecture is defined, the CLI is -functional (init, validate, info), and the RSR template with full CI/CD -is in place. Code generation is stubbed — the `generate` command creates -output directories but does not yet emit AffineScript wrappers. The -Idris2 ABI proofs and Zig FFI bridge contain template placeholders -awaiting domain-specific implementation. - -See ROADMAP for the phased -development plan. - -# License - -SPDX-License-Identifier: CC-BY-SA-4.0 diff --git a/SECURITY.md b/SECURITY.adoc similarity index 55% rename from SECURITY.md rename to SECURITY.adoc index 3af9319..faa3f03 100644 --- a/SECURITY.md +++ b/SECURITY.adoc @@ -1,21 +1,25 @@ -# Security Policy +== Security Policy -## Supported Versions +=== Supported Versions -| Version | Supported | -|---------|-----------| -| 0.1.x | ✅ | +[cols=",",options="header",] +|=== +|Version |Supported +|0.1.x |✅ +|=== -## Reporting a Vulnerability +=== Reporting a Vulnerability Please report security vulnerabilities to: j.d.a.jewell@open.ac.uk Do NOT open a public issue for security vulnerabilities. -## Response Time +=== Response Time -We aim to respond within 48 hours and provide a fix within 7 days for critical issues. +We aim to respond within 48 hours and provide a fix within 7 days for +critical issues. -## Scope +=== Scope -This policy covers the affinescriptiser CLI tool and its generated artifacts. +This policy covers the affinescriptiser CLI tool and its generated +artifacts. diff --git a/TEST-NEEDS.adoc b/TEST-NEEDS.adoc new file mode 100644 index 0000000..b74f042 --- /dev/null +++ b/TEST-NEEDS.adoc @@ -0,0 +1,34 @@ +== TEST-NEEDS.md — affinescriptiser + +=== CRG Grade: C — ACHIEVED 2026-04-04 + +=== Current Test State + +[cols=",,",options="header",] +|=== +|Category |Count |Notes +|Test directories |2 |Location(s): /tests, /verification/tests +|CI workflows |22 |Running tests on GitHub Actions +|Unit tests |Built-in |Rust/cargo test framework +|Integration tests |Configured |Via integration/ directory +|=== + +=== What’s Covered + +* [x] Rust unit test suite (cargo test) +* [x] Documentation tests +* [x] Example programs with tests + +=== Still Missing (for CRG B+) + +* [ ] Code coverage reports (codecov integration) +* [ ] Detailed test documentation in CONTRIBUTING.md +* [ ] Integration tests beyond unit tests +* [ ] Performance benchmarking suite + +=== Run Tests + +[source,bash] +---- +cargo test +---- diff --git a/TEST-NEEDS.md b/TEST-NEEDS.md deleted file mode 100644 index c1e1711..0000000 --- a/TEST-NEEDS.md +++ /dev/null @@ -1,31 +0,0 @@ -# TEST-NEEDS.md — affinescriptiser - -## CRG Grade: C — ACHIEVED 2026-04-04 - -## Current Test State - -| Category | Count | Notes | -|----------|-------|-------| -| Test directories | 2 | Location(s): /tests, /verification/tests | -| CI workflows | 22 | Running tests on GitHub Actions | -| Unit tests | Built-in | Rust/cargo test framework | -| Integration tests | Configured | Via integration/ directory | - -## What's Covered - -- [x] Rust unit test suite (cargo test) -- [x] Documentation tests -- [x] Example programs with tests - -## Still Missing (for CRG B+) - -- [ ] Code coverage reports (codecov integration) -- [ ] Detailed test documentation in CONTRIBUTING.md -- [ ] Integration tests beyond unit tests -- [ ] Performance benchmarking suite - -## Run Tests - -```bash -cargo test -``` diff --git a/TOPOLOGY.adoc b/TOPOLOGY.adoc new file mode 100644 index 0000000..d9cbfd0 --- /dev/null +++ b/TOPOLOGY.adoc @@ -0,0 +1,219 @@ +== TOPOLOGY.md — Affinescriptiser Repository Map + +=== Root + +[width="100%",cols="40%,60%",options="header",] +|=== +|File |Purpose +|`+0-AI-MANIFEST.a2ml+` |AI agent entry point — canonical file locations +and invariants + +|`+README.adoc+` |Human-facing orientation: what, why, how, architecture + +|`+ROADMAP.adoc+` |Phased development plan (Phase 0–5) + +|`+TOPOLOGY.md+` |This file — repository structure map + +|`+CONTRIBUTING.adoc+` |Contribution guide + +|`+SECURITY.md+` |Security policy + +|`+CHANGELOG.md+` |Release history + +|`+LICENSE+` |MPL-2.0 full text + +|`+Cargo.toml+` |Rust crate manifest (clap, serde, toml, handlebars) + +|`+Justfile+` |Task runner (build, test, lint, fmt, quality, assail) + +|`+Containerfile+` |OCI container build (Chainguard base) + +|`+contractile.just+` |Contractile enforcement recipes + +|`+flake.guix+` |Guix flake for reproducible builds + +|`+guix.scm+` |Guix package definition + +|`+.editorconfig+` |Editor formatting rules + +|`+.envrc+` |direnv environment + +|`+.gitignore+` |Git ignore rules + +|`+.gitattributes+` |Git attribute rules + +|`+.gitlab-ci.yml+` |GitLab CI mirror pipeline + +|`+.guix-channel+` |Guix channel metadata + +|`+.tool-versions+` |asdf tool version pins +|=== + +=== `+src/+` — Source Code + +==== Rust CLI and Orchestration + +[width="100%",cols="40%,60%",options="header",] +|=== +|File |Purpose +|`+src/main.rs+` |CLI entry point — clap subcommands: init, validate, +generate, build, run, info + +|`+src/lib.rs+` |Library facade — re-exports manifest, codegen, abi +modules + +|`+src/manifest/mod.rs+` |TOML manifest parser — `+Manifest+`, +`+WorkloadConfig+`, `+DataConfig+`, `+Options+` + +|`+src/codegen/mod.rs+` |Code generation stubs — `+generate_all()+`, +`+build()+`, `+run()+` (pending implementation) + +|`+src/abi/mod.rs+` |ABI module declaration (Rust side) +|=== + +==== Verified Interface Seams (`+src/interface/+`) + +[width="100%",cols="24%,40%,36%",options="header",] +|=== +|Path |Language |Purpose +|`+src/interface/abi/Types.idr+` |Idris2 |ABI type definitions: +`+ResourceKind+`, `+Linearity+`, `+Ownership+`, platform detection, +opaque handles, memory layout proofs + +|`+src/interface/abi/Layout.idr+` |Idris2 |WASM memory layout proofs: +alignment, padding, struct field layout, C ABI compliance + +|`+src/interface/abi/Foreign.idr+` |Idris2 |FFI declarations: library +lifecycle, core operations, string/buffer ops, error handling, version +info, callbacks + +|`+src/interface/ffi/build.zig+` |Zig |Build configuration: +shared/static library, C header generation, test/bench steps + +|`+src/interface/ffi/src/main.zig+` |Zig |FFI implementation: C-ABI +functions matching Foreign.idr declarations + +|`+src/interface/ffi/test/integration_test.zig+` |Zig |Integration +tests: lifecycle, operations, strings, errors, memory safety, threading + +|`+src/interface/generated/abi/+` |(empty) |Target directory for +generated C headers from Idris2 ABI +|=== + +==== Cross-Cutting Modules + +[cols=",",options="header",] +|=== +|Path |Purpose +|`+src/aspects/integrity/+` |Data integrity aspects (pending) +|`+src/aspects/observability/+` |Observability aspects (pending) +|`+src/aspects/security/+` |Security aspects (pending) +|`+src/bridges/+` |Bridge code between analysis and codegen (pending) +|`+src/contracts/+` |Runtime contract enforcement (pending) +|`+src/core/+` |Core domain logic (pending) +|`+src/definitions/+` |Shared type definitions (pending) +|`+src/errors/+` |Error types and diagnostics (pending) +|=== + +=== `+examples/+` — Usage Examples + +[width="100%",cols="40%,60%",options="header",] +|=== +|File |Purpose +|`+examples/SafeDOMExample.affine+` |AffineScript example: SafeDOM +mounting with proven selector/HTML validation + +|`+examples/web-project-deno.json+` |Deno project configuration for web +example +|=== + +=== `+tests/+` — Test Suite + +Rust integration and unit tests (via `+cargo test+`). + +=== `+docs/+` — Documentation + +Technical documentation, architecture diagrams, theory, and practice +guides. Includes `+docs/attribution/+`, `+docs/architecture/+`, +`+docs/theory/+`, `+docs/practice/+`. + +=== `+features/+` — Feature Specifications + +BDD-style feature specs for affinescriptiser behaviour. + +=== `+verification/+` — Verification Artefacts + +Formal verification scripts and proof artefacts. + +=== `+container/+` — Container Ecosystem + +Stapeln container configuration for OCI deployment. + +=== `+.machine_readable/+` — Machine-Readable Metadata + +All machine-readable metadata lives here (never in root). + +[width="100%",cols="40%,60%",options="header",] +|=== +|Path |Purpose +|`+.machine_readable/6a2/STATE.a2ml+` |Project state: scaffold phase, 5% +complete + +|`+.machine_readable/6a2/META.a2ml+` |Architecture decisions: +iser-pattern, ABI-FFI standard, RSR template + +|`+.machine_readable/6a2/ECOSYSTEM.a2ml+` |Ecosystem position: -iser +family, siblings (typedqliser, chapeliser, verisimiser) + +|`+.machine_readable/CLADE.a2ml+` |Clade taxonomy classification + +|`+.machine_readable/ENSAID_CONFIG.a2ml+` |ENSAID integration +configuration + +|`+.machine_readable/anchors/+` |Semantic boundary declarations + +|`+.machine_readable/bot_directives/+` |Bot-specific instructions +(rhodibot, echidnabot, etc.) + +|`+.machine_readable/contractiles/+` |Policy enforcement contracts (k9, +dust, must, trust) + +|`+.machine_readable/policies/+` |Maintenance axes, checklists, +development approach + +|`+.machine_readable/configs/+` |Tool and CI configuration + +|`+.machine_readable/scripts/+` |Automation scripts + +|`+.machine_readable/integrations/+` |External integration configs + +|`+.machine_readable/ai/+` |AI agent patterns and guides + +|`+.machine_readable/compliance/+` |Compliance documentation +|=== + +=== `+.github/+` — GitHub Configuration + +CI/CD workflows (17 total), issue templates, PR templates, CODEOWNERS. + +=== `+.hypatia/+` — Hypatia Security Scanner + +Neurosymbolic security scanning rules for affinescriptiser. + +=== `+.claude/+` — Claude Code Configuration + +[width="100%",cols="40%,60%",options="header",] +|=== +|File |Purpose +|`+.claude/CLAUDE.md+` |Project-specific AI instructions: architecture, +build commands, integration points +|=== + +=== `+.devcontainer/+` — Dev Container + +VS Code dev container configuration for reproducible development +environments. + +=== `+.well-known/+` — Well-Known URIs + +Standard well-known directory for security.txt and related metadata. diff --git a/TOPOLOGY.md b/TOPOLOGY.md deleted file mode 100644 index 7847f1f..0000000 --- a/TOPOLOGY.md +++ /dev/null @@ -1,137 +0,0 @@ - - -# TOPOLOGY.md — Affinescriptiser Repository Map - -## Root - -| File | Purpose | -|------|---------| -| `0-AI-MANIFEST.a2ml` | AI agent entry point — canonical file locations and invariants | -| `README.adoc` | Human-facing orientation: what, why, how, architecture | -| `ROADMAP.adoc` | Phased development plan (Phase 0–5) | -| `TOPOLOGY.md` | This file — repository structure map | -| `CONTRIBUTING.adoc` | Contribution guide | -| `SECURITY.md` | Security policy | -| `CHANGELOG.md` | Release history | -| `LICENSE` | MPL-2.0 full text | -| `Cargo.toml` | Rust crate manifest (clap, serde, toml, handlebars) | -| `Justfile` | Task runner (build, test, lint, fmt, quality, assail) | -| `Containerfile` | OCI container build (Chainguard base) | -| `contractile.just` | Contractile enforcement recipes | -| `flake.nix` | Nix flake for reproducible builds | -| `guix.scm` | Guix package definition | -| `.editorconfig` | Editor formatting rules | -| `.envrc` | direnv environment | -| `.gitignore` | Git ignore rules | -| `.gitattributes` | Git attribute rules | -| `.gitlab-ci.yml` | GitLab CI mirror pipeline | -| `.guix-channel` | Guix channel metadata | -| `.tool-versions` | asdf tool version pins | - -## `src/` — Source Code - -### Rust CLI and Orchestration - -| File | Purpose | -|------|---------| -| `src/main.rs` | CLI entry point — clap subcommands: init, validate, generate, build, run, info | -| `src/lib.rs` | Library facade — re-exports manifest, codegen, abi modules | -| `src/manifest/mod.rs` | TOML manifest parser — `Manifest`, `WorkloadConfig`, `DataConfig`, `Options` | -| `src/codegen/mod.rs` | Code generation stubs — `generate_all()`, `build()`, `run()` (pending implementation) | -| `src/abi/mod.rs` | ABI module declaration (Rust side) | - -### Verified Interface Seams (`src/interface/`) - -| Path | Language | Purpose | -|------|----------|---------| -| `src/interface/abi/Types.idr` | Idris2 | ABI type definitions: `ResourceKind`, `Linearity`, `Ownership`, platform detection, opaque handles, memory layout proofs | -| `src/interface/abi/Layout.idr` | Idris2 | WASM memory layout proofs: alignment, padding, struct field layout, C ABI compliance | -| `src/interface/abi/Foreign.idr` | Idris2 | FFI declarations: library lifecycle, core operations, string/buffer ops, error handling, version info, callbacks | -| `src/interface/ffi/build.zig` | Zig | Build configuration: shared/static library, C header generation, test/bench steps | -| `src/interface/ffi/src/main.zig` | Zig | FFI implementation: C-ABI functions matching Foreign.idr declarations | -| `src/interface/ffi/test/integration_test.zig` | Zig | Integration tests: lifecycle, operations, strings, errors, memory safety, threading | -| `src/interface/generated/abi/` | (empty) | Target directory for generated C headers from Idris2 ABI | - -### Cross-Cutting Modules - -| Path | Purpose | -|------|---------| -| `src/aspects/integrity/` | Data integrity aspects (pending) | -| `src/aspects/observability/` | Observability aspects (pending) | -| `src/aspects/security/` | Security aspects (pending) | -| `src/bridges/` | Bridge code between analysis and codegen (pending) | -| `src/contracts/` | Runtime contract enforcement (pending) | -| `src/core/` | Core domain logic (pending) | -| `src/definitions/` | Shared type definitions (pending) | -| `src/errors/` | Error types and diagnostics (pending) | - -## `examples/` — Usage Examples - -| File | Purpose | -|------|---------| -| `examples/SafeDOMExample.affine` | AffineScript example: SafeDOM mounting with proven selector/HTML validation | -| `examples/web-project-deno.json` | Deno project configuration for web example | - -## `tests/` — Test Suite - -Rust integration and unit tests (via `cargo test`). - -## `docs/` — Documentation - -Technical documentation, architecture diagrams, theory, and practice guides. -Includes `docs/attribution/`, `docs/architecture/`, `docs/theory/`, `docs/practice/`. - -## `features/` — Feature Specifications - -BDD-style feature specs for affinescriptiser behaviour. - -## `verification/` — Verification Artefacts - -Formal verification scripts and proof artefacts. - -## `container/` — Container Ecosystem - -Stapeln container configuration for OCI deployment. - -## `.machine_readable/` — Machine-Readable Metadata - -All machine-readable metadata lives here (never in root). - -| Path | Purpose | -|------|---------| -| `.machine_readable/6a2/STATE.a2ml` | Project state: scaffold phase, 5% complete | -| `.machine_readable/6a2/META.a2ml` | Architecture decisions: iser-pattern, ABI-FFI standard, RSR template | -| `.machine_readable/6a2/ECOSYSTEM.a2ml` | Ecosystem position: -iser family, siblings (typedqliser, chapeliser, verisimiser) | -| `.machine_readable/CLADE.a2ml` | Clade taxonomy classification | -| `.machine_readable/ENSAID_CONFIG.a2ml` | ENSAID integration configuration | -| `.machine_readable/anchors/` | Semantic boundary declarations | -| `.machine_readable/bot_directives/` | Bot-specific instructions (rhodibot, echidnabot, etc.) | -| `.machine_readable/contractiles/` | Policy enforcement contracts (k9, dust, must, trust) | -| `.machine_readable/policies/` | Maintenance axes, checklists, development approach | -| `.machine_readable/configs/` | Tool and CI configuration | -| `.machine_readable/scripts/` | Automation scripts | -| `.machine_readable/integrations/` | External integration configs | -| `.machine_readable/ai/` | AI agent patterns and guides | -| `.machine_readable/compliance/` | Compliance documentation | - -## `.github/` — GitHub Configuration - -CI/CD workflows (17 total), issue templates, PR templates, CODEOWNERS. - -## `.hypatia/` — Hypatia Security Scanner - -Neurosymbolic security scanning rules for affinescriptiser. - -## `.claude/` — Claude Code Configuration - -| File | Purpose | -|------|---------| -| `.claude/CLAUDE.md` | Project-specific AI instructions: architecture, build commands, integration points | - -## `.devcontainer/` — Dev Container - -VS Code dev container configuration for reproducible development environments. - -## `.well-known/` — Well-Known URIs - -Standard well-known directory for security.txt and related metadata. diff --git a/docs/RSR_OUTLINE.adoc b/docs/RSR_OUTLINE.adoc index 8faf3bb..83e1c15 100644 --- a/docs/RSR_OUTLINE.adoc +++ b/docs/RSR_OUTLINE.adoc @@ -204,8 +204,8 @@ project/ === Language Tiers -* **Tier 1** (Gold): Rust, Elixir, Zig, Ada, Haskell, ReScript, Gleam -* **Tier 2** (Silver): Nickel, Guile Scheme, Nix, Idris2, OCaml +* **Tier 1** (Gold): Rust, Elixir, Zig, Ada, Haskell, AffineScript, Gleam +* **Tier 2** (Silver): Nickel, Guile Scheme, Guix, Idris2, OCaml * **Infrastructure**: Guix channels, derivations, Julia batch scripts === Required Files @@ -219,12 +219,12 @@ project/ * `.well-known/security.txt` * `.well-known/ai.txt` * `.well-known/humans.txt` -* `guix.scm` OR `flake.nix` +* `guix.scm` OR `flake.guix` === Prohibited * Python outside `salt/` directory -* TypeScript/JavaScript (use ReScript) +* TypeScript/JavaScript (use AffineScript) * CUE (use Guile/Nickel) * `Dockerfile` (use `Containerfile`) * npm, Bun, pnpm, yarn (use Deno) diff --git a/docs/STATE-VISUALIZER.adoc b/docs/STATE-VISUALIZER.adoc index 4be8d44..7746b12 100644 --- a/docs/STATE-VISUALIZER.adoc +++ b/docs/STATE-VISUALIZER.adoc @@ -46,7 +46,7 @@ ┌─────────────────────────────────────────┐ │ PLATFORM INTEGRATION │ │ ┌───────────┐ ┌───────────┐ ┌───────┐│ - │ │ GitHub │ │ GitLab │ │ Nix / ││ + │ │ GitHub │ │ GitLab │ │ Guix / ││ │ │ Workflows │ │ CI/CD │ │ Guix ││ │ └───────────┘ └───────────┘ └───────┘│ └─────────────────────────────────────────┘ @@ -88,7 +88,7 @@ CONTAINER ECOSYSTEM (Phase 2) REPO INFRASTRUCTURE .machine_readable/ ██████████ 100% STATE/META/ECOSYSTEM active Governance & License ██████████ 100% MPL-2.0 & Ethical use verified - Development Shells (Nix/Guix) ██████████ 100% Reproducible env stable + Development Shells (Guix/Guix) ██████████ 100% Reproducible env stable ───────────────────────────────────────────────────────────────────────────── OVERALL: ██████████ 100% RSR Template Stable & Certified diff --git a/docs/developer/ABI-FFI-README.adoc b/docs/developer/ABI-FFI-README.adoc index fe01f12..dd5db7a 100644 --- a/docs/developer/ABI-FFI-README.adoc +++ b/docs/developer/ABI-FFI-README.adoc @@ -44,7 +44,7 @@ This library follows the **Hyperpolymath RSR Standard** for ABI and FFI design: ▼ ┌─────────────────────────────────────────────┐ │ Any Language via C ABI │ -│ - Rust, ReScript, Julia, Python, etc. │ +│ - Rust, AffineScript, Julia, Python, etc. │ └─────────────────────────────────────────────┘ ``` @@ -76,7 +76,7 @@ This library follows the **Hyperpolymath RSR Standard** for ABI and FFI design: │ └── bindings/ # Language-specific wrappers (optional) ├── rust/ - ├── rescript/ + ├── affinescript/ └── julia/ ``` diff --git a/docs/governance/MAINTENANCE-CHECKLIST.a2ml b/docs/governance/MAINTENANCE-CHECKLIST.a2ml index eaee720..698f4d0 100644 --- a/docs/governance/MAINTENANCE-CHECKLIST.a2ml +++ b/docs/governance/MAINTENANCE-CHECKLIST.a2ml @@ -67,7 +67,7 @@ compliance-seams-check = true exception-register-required = true exception-bounded-scope-required = true policy-drift-contamination-check = true -example-drift-risk = "single TypeScript exception causing broad ReScript->TypeScript migration" +example-drift-risk = "single TypeScript exception causing broad AffineScript->TypeScript migration" compliance-tooling = "panic-attack" effects-tooling = "ecological checking with sustainabot guidance" diff --git a/docs/practice/AI-CONVENTIONS.adoc b/docs/practice/AI-CONVENTIONS.adoc index 58e132b..6a3636b 100644 --- a/docs/practice/AI-CONVENTIONS.adoc +++ b/docs/practice/AI-CONVENTIONS.adoc @@ -53,7 +53,7 @@ MAINTENANCE-CHECKLIST.a2ml, or SOFTWARE-DEVELOPMENT-APPROACH.a2ml in the reposit | Banned | Use Instead | |---------------------|--------------------| -| TypeScript | ReScript | +| TypeScript | AffineScript | | Node.js / npm / bun | Deno | | Go | Rust | | Python | Julia / Rust | diff --git a/examples/web-project-deno.json b/examples/web-project-deno.json index 5ddd3bd..ee775a4 100644 --- a/examples/web-project-deno.json +++ b/examples/web-project-deno.json @@ -1,17 +1,17 @@ { - "// NOTE": "Example deno.json for ReScript web projects", + "// NOTE": "Example deno.json for AffineScript web projects", "tasks": { - "build": "deno run -A npm:rescript", - "clean": "deno run -A npm:rescript clean", - "watch": "deno run -A npm:rescript -w", + "build": "deno run -A npm:affinescript", + "clean": "deno run -A npm:affinescript clean", + "watch": "deno run -A npm:affinescript -w", "serve": "deno run -A jsr:@std/http/file-server .", "test": "deno test --allow-all" }, "imports": { - "rescript": "^12.0.0", - "@rescript/core": "npm:@rescript/core@^1.6.0", - "safe-dom/": "https://raw.githubusercontent.com/hyperpolymath/rescript-dom-mounter/main/src/", - "proven/": "../proven/bindings/rescript/src/" + "affinescript": "^12.0.0", + "@affinescript/core": "npm:@affinescript/core@^1.6.0", + "safe-dom/": "https://raw.githubusercontent.com/hyperpolymath/affinescript-dom-mounter/main/src/", + "proven/": "../proven/bindings/affinescript/src/" }, "compilerOptions": { "allowJs": true, diff --git a/llm-warmup-dev.adoc b/llm-warmup-dev.adoc new file mode 100644 index 0000000..4095b36 --- /dev/null +++ b/llm-warmup-dev.adoc @@ -0,0 +1,19 @@ +== LLM Warmup — affinescriptiser (Developer) + +=== What is affinescriptiser? + +See README.adoc for overview. + +=== Key Commands + +* `+just setup+` — set up development environment +* `+just build+` — build the project +* `+just test+` — run tests +* `+just doctor+` — diagnose issues +* `+just heal+` — attempt auto-repair + +=== Quick Context + +* License: MPL-2.0 +* Part of hyperpolymath ecosystem +* See EXPLAINME.adoc for architecture diff --git a/llm-warmup-dev.md b/llm-warmup-dev.md deleted file mode 100644 index 0242bf3..0000000 --- a/llm-warmup-dev.md +++ /dev/null @@ -1,16 +0,0 @@ -# LLM Warmup — affinescriptiser (Developer) - -## What is affinescriptiser? -See README.adoc for overview. - -## Key Commands -- `just setup` — set up development environment -- `just build` — build the project -- `just test` — run tests -- `just doctor` — diagnose issues -- `just heal` — attempt auto-repair - -## Quick Context -- License: MPL-2.0 -- Part of hyperpolymath ecosystem -- See EXPLAINME.adoc for architecture diff --git a/llm-warmup-user.adoc b/llm-warmup-user.adoc new file mode 100644 index 0000000..f5456f9 --- /dev/null +++ b/llm-warmup-user.adoc @@ -0,0 +1,19 @@ +== LLM Warmup — affinescriptiser (User) + +=== What is affinescriptiser? + +See README.adoc for overview. + +=== Key Commands + +* `+just setup+` — set up development environment +* `+just build+` — build the project +* `+just test+` — run tests +* `+just doctor+` — diagnose issues +* `+just heal+` — attempt auto-repair + +=== Quick Context + +* License: MPL-2.0 +* Part of hyperpolymath ecosystem +* See EXPLAINME.adoc for architecture diff --git a/llm-warmup-user.md b/llm-warmup-user.md deleted file mode 100644 index 92dc465..0000000 --- a/llm-warmup-user.md +++ /dev/null @@ -1,16 +0,0 @@ -# LLM Warmup — affinescriptiser (User) - -## What is affinescriptiser? -See README.adoc for overview. - -## Key Commands -- `just setup` — set up development environment -- `just build` — build the project -- `just test` — run tests -- `just doctor` — diagnose issues -- `just heal` — attempt auto-repair - -## Quick Context -- License: MPL-2.0 -- Part of hyperpolymath ecosystem -- See EXPLAINME.adoc for architecture