Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
git clone https://{{FORGE}}/{{OWNER}}/{{REPO}}.git
cd {{REPO}}

# Using Nix (recommended for reproducibility)
nix develop
# Using Guix (recommended for reproducibility)
guix develop

# Or using toolbox/distrobox
toolbox create {{REPO}}-dev
Expand Down Expand Up @@ -49,7 +49,7 @@ just test # Run test suite
├── 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)
```
Expand Down
2 changes: 1 addition & 1 deletion .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>

## 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)
Expand Down
4 changes: 2 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ updates:
schedule:
interval: "weekly"

# Nix flakes
- package-ecosystem: "nix"
# Guix flakes
- package-ecosystem: "guix"
directory: "/"
schedule:
interval: "weekly"
4 changes: 2 additions & 2 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ jobs:
# - run: mix deps.get && mix compile --warnings-as-errors
# - run: mix test test/integration/e2e_test.exs --trace

## === DENO/RESCRIPT E2E ===
## === DENO/AFFINESCRIPT E2E ===
# e2e:
# name: E2E — Full Pipeline
# runs-on: ubuntu-latest
Expand All @@ -88,7 +88,7 @@ jobs:
# with:
# deno-version: v2.x
# - run: deno install --node-modules-dir=auto
# - run: deno task res:build # ReScript compile
# - run: deno task res:build # AffineScript compile
# - run: deno test tests/e2e/

## === PLAYWRIGHT (Browser E2E) ===
Expand Down
4 changes: 2 additions & 2 deletions .machine_readable/6a2/META.a2ml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ author = "Jonathan D.A. Jewell (hyperpolymath)"
build-tool = "just"
container-runtime = "podman"
ci-platform = "github-actions"
package-manager = "guix" # guix | nix | cargo | mix
package-manager = "guix" # guix | guix | cargo | mix

[maintenance-axes]
scoping-first = true
Expand All @@ -46,7 +46,7 @@ perfective-source = "axis-1 honest state after corrective/adaptive updates"
[axis-3-audit-rules]
audit-focus = "systems in place, documentation explains actual state, safety/security accounted for, observed effects reviewed"
compliance-focus = "seams/compromises/exception register, bounded exceptions, anti-drift checks"
drift-risk-example = "single exception broadening into policy violation (e.g. ReScript->TypeScript spread)"
drift-risk-example = "single exception broadening into policy violation (e.g. AffineScript->TypeScript spread)"
effects-evidence = "benchmark execution/results and maintainer status dialogue/review"

[design-rationale]
Expand Down
4 changes: 2 additions & 2 deletions .machine_readable/6a2/STATE.a2ml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ milestones = [
{ name = "Phase 1e: Trustfile / contractiles", completion = 100 },
{ name = "Phase 2: Container ecosystem templates (stapeln)", completion = 100 },
{ name = "Phase 3: Multi-forge sync hardening", completion = 0 },
{ name = "Phase 4: Nix/Guix reproducible shells", completion = 50 },
{ name = "Phase 4: Guix/Guix reproducible shells", completion = 50 },
]

[blockers-and-issues]
Expand All @@ -43,7 +43,7 @@ actions = [
"Container templates complete — test with `just container-init`",
"Validate container templates across wolfi-base and static Chainguard images",
"Harden multi-forge sync for GitLab/Bitbucket mirroring edge cases",
"Expand Nix/Guix development shell templates",
"Expand Guix/Guix development shell templates",
]

[maintenance-status]
Expand Down
6 changes: 3 additions & 3 deletions .machine_readable/ai/PLACEHOLDERS.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,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 |
| `{{REPO}}` | Repository name (slug) | `my-project` | CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md, cliff.toml |
Expand Down Expand Up @@ -135,7 +135,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'
Expand Down
24 changes: 12 additions & 12 deletions .machine_readable/contractiles/Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ init:

# Check for remaining placeholders
PATTERN="${LB}[A-Z_]*${RB}"
REMAINING=$(grep -rl "$PATTERN" . --include='*.md' --include='*.adoc' --include='*.yml' --include='*.yaml' --include='*.a2ml' --include='*.toml' --include='*.scm' --include='*.ncl' --include='*.nix' --include='*.json' --include='*.sh' 2>/dev/null | grep -v '.git/' | grep -v '.machine_readable/ai/PLACEHOLDERS.adoc' || true)
REMAINING=$(grep -rl "$PATTERN" . --include='*.md' --include='*.adoc' --include='*.yml' --include='*.yaml' --include='*.a2ml' --include='*.toml' --include='*.scm' --include='*.ncl' --include='*.guix' --include='*.json' --include='*.sh' 2>/dev/null | grep -v '.git/' | grep -v '.machine_readable/ai/PLACEHOLDERS.adoc' || true)
if [ -n "$REMAINING" ]; then
echo "WARNING: Remaining placeholders in:"
echo "$REMAINING" | sed 's/^/ /'
Expand Down Expand Up @@ -381,7 +381,7 @@ self-assess:
# Detect project characteristics
HAS_RUST=false; [ -f "Cargo.toml" ] && HAS_RUST=true
HAS_ELIXIR=false; [ -f "mix.exs" ] && HAS_ELIXIR=true
HAS_RESCRIPT=false; [ -f "rescript.json" ] || [ -f "bsconfig.json" ] && HAS_RESCRIPT=true
HAS_RESCRIPT=false; [ -f "affinescript.json" ] || [ -f "bsconfig.json" ] && HAS_RESCRIPT=true
HAS_IDRIS=false; ls *.ipkg >/dev/null 2>&1 && HAS_IDRIS=true
HAS_ZIG=false; [ -f "build.zig" ] || [ -d "ffi/zig" ] && HAS_ZIG=true
HAS_GLEAM=false; [ -f "gleam.toml" ] && HAS_GLEAM=true
Expand All @@ -390,7 +390,7 @@ self-assess:
HAS_API=false; grep -rq 'port\|listen\|endpoint' --include="*.exs" --include="*.rs" --include="*.toml" . 2>/dev/null && HAS_API=true
IS_LIBRARY=false; [ -f "Cargo.toml" ] && grep -q '\[lib\]' Cargo.toml 2>/dev/null && IS_LIBRARY=true

echo "Detected: Rust=$HAS_RUST Elixir=$HAS_ELIXIR ReScript=$HAS_RESCRIPT"
echo "Detected: Rust=$HAS_RUST Elixir=$HAS_ELIXIR AffineScript=$HAS_RESCRIPT"
echo " Idris=$HAS_IDRIS Zig=$HAS_ZIG Gleam=$HAS_GLEAM"
echo " Container=$HAS_CONTAINER Tests=$HAS_TESTS API=$HAS_API"
echo ""
Expand Down Expand Up @@ -468,16 +468,16 @@ self-assess:
echo ""

if ! $HAS_RESCRIPT && [ -d "examples" ] && ls examples/*.res >/dev/null 2>&1; then
echo " ○ examples/*.res — Template ReScript examples. Not your code."
echo " ○ examples/*.res — Template AffineScript examples. Not your code."
fi

if [ -f ".machine_readable/ai/PLACEHOLDERS.adoc" ]; then
echo " ○ .machine_readable/ai/PLACEHOLDERS.adoc — Template doc. Remove after init."
fi

if [ -f "flake.nix" ] && ! command -v nix >/dev/null 2>&1; then
echo " ○ flake.nixNix flake. Safe to remove if you don't use Nix."
echo " → KEEP if others might build with Nix."
if [ -f "flake.guix" ] && ! command -v guix >/dev/null 2>&1; then
echo " ○ flake.guixGuix flake. Safe to remove if you don't use Guix."
echo " → KEEP if others might build with Guix."
fi

if [ -f "guix.scm" ] && ! command -v guix >/dev/null 2>&1; then
Expand Down Expand Up @@ -596,7 +596,7 @@ build *args:
# cargo build {{args}} # Rust
# mix compile {{args}} # Elixir
# zig build {{args}} # Zig
# deno task build {{args}} # Deno/ReScript
# deno task build {{args}} # Deno/AffineScript
@echo "Build complete"

# Build in release mode with optimizations
Expand Down Expand Up @@ -1184,7 +1184,7 @@ state-phase:
@grep -oP 'phase\s*=\s*"\K[^"]+' .machine_readable/STATE.a2ml 2>/dev/null | head -1 || echo "unknown"

# ═══════════════════════════════════════════════════════════════════════════════
# GUIX & NIX
# GUIX & GUIX
# ═══════════════════════════════════════════════════════════════════════════════

# Enter Guix development shell (primary)
Expand All @@ -1195,9 +1195,9 @@ guix-shell:
guix-build:
guix build -f guix.scm

# Enter Nix development shell (fallback)
nix-shell:
@if [ -f "flake.nix" ]; then nix develop; else echo "No flake.nix"; fi
# Enter Guix development shell (fallback)
guix-shell:
@if [ -f "flake.guix" ]; then guix develop; else echo "No flake.guix"; fi

# ═══════════════════════════════════════════════════════════════════════════════
# HYBRID AUTOMATION
Expand Down
2 changes: 1 addition & 1 deletion .machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
48 changes: 48 additions & 0 deletions ARCHITECTURE.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
== Architecture

=== Overview

This repository follows a modular, maintainable architecture designed
for clarity, scalability, and long-term sustainability.

=== Directory Structure

....
.
├── src/ # Source code
├── tests/ # Test suites
├── docs/ # Documentation
├── scripts/ # Utility scripts
├── config/ # Configuration files
├── LICENSE # License file
├── LICENSES/ # Full license texts
└── README.adoc # Project documentation
....

=== Design Principles

* *Separation of Concerns*: Each module has a single responsibility
* *Testability*: Code is written to be easily testable
* *Documentation*: All public APIs are documented
* *Configuration*: Environment-specific settings are externalized

=== Dependencies

* External dependencies are minimized and clearly declared
* Version pinning is used for reproducibility

=== Security Considerations

* Sensitive data is never committed to the repository
* Secrets are managed through environment variables or secure vaults
* Regular dependency audits are performed

=== Maintainability

* Code follows consistent style guidelines
* Pull requests require review and CI checks
* Issues and discussions are tracked transparently

'''''

_Last updated: 2026-07-18_
47 changes: 0 additions & 47 deletions ARCHITECTURE.md

This file was deleted.

9 changes: 9 additions & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
== Changelog

All notable changes to this project will be documented in this file.

The format is based on https://keepachangelog.com/en/1.1.0/[Keep a
Changelog], and this project adheres to
https://semver.org/spec/v2.0.0.html[Semantic Versioning].

=== [Unreleased]
15 changes: 0 additions & 15 deletions CHANGELOG.md

This file was deleted.

24 changes: 24 additions & 0 deletions CODE_OF_CONDUCT.adoc
Original file line number Diff line number Diff line change
@@ -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.
30 changes: 0 additions & 30 deletions CODE_OF_CONDUCT.md

This file was deleted.

9 changes: 9 additions & 0 deletions CONTRIBUTING.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
== Contributing

[arabic]
. Fork the repository
. Create a feature branch
. Ensure SPDX headers on all files
. Submit a pull request

*Author:* Jonathan D.A. Jewell j.d.a.jewell@open.ac.uk
Loading
Loading