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
2 changes: 1 addition & 1 deletion .claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ Both are FOSS with independent governance (no Big Tech).
### Package Management

- **Primary**: Guix (guix.scm)
- **Fallback**: Nix (flake.nix)
- **Fallback**: Guix (flake.guix)
- **JS deps**: Deno (deno.json imports)

### Security Requirements
Expand Down
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ updates:
actions:
patterns:
- "*"
- package-ecosystem: "nix"
- package-ecosystem: "guix"
directory: "/"
schedule:
interval: "weekly"
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/rescript-deno-ci.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: MPL-2.0
name: ReScript/Deno CI
name: AffineScript/Deno CI
on:
push:
branches: [main, master]
Expand Down Expand Up @@ -30,11 +30,11 @@ jobs:
run: deno fmt --check
- name: Deno test
run: deno test --allow-all --coverage=coverage
- name: ReScript build
- name: AffineScript build
run: |
if [ -f "rescript.json" ] || [ -f "bsconfig.json" ]; then
if [ -f "affinescript.json" ] || [ -f "bsconfig.json" ]; then
npm install
npx rescript
npx affinescript
fi
- name: Type check
run: deno check **/*.ts || true
Expand Down
2 changes: 1 addition & 1 deletion .machine_readable/contractiles/Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ doctor:
check "just" just "1.25"
check "git" git "2.40"
check "Deno" deno "2.0"
check "ReScript (resc)" rescript "12.0"
check "AffineScript (resc)" affinescript "12.0"
check "Zig" zig "0.13"
# Optional tools
if command -v panic-attack >/dev/null 2>&1; then
Expand Down
16 changes: 8 additions & 8 deletions 0-AI-MANIFEST.a2ml
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,14 @@ Additional artefact:

| Language/Tool | Use Case | Notes |
|---------------|----------|-------|
| ReScript | Application code | Type-safe, compiles to JS |
| AffineScript | Application code | Type-safe, compiles to JS |
| Deno | Runtime and package management | Replaces Node/npm/bun |
| Rust | Systems, performance-critical, WASM | Preferred for CLI tools |
| Tauri 2.0+ | Mobile apps (iOS/Android) | Rust backend + web UI |
| Dioxus | Mobile apps (native UI) | Pure Rust, React-like |
| Gleam | Backend services | BEAM or JS targets |
| Bash/POSIX Shell | Automation scripts | Keep minimal |
| JavaScript | Only where ReScript cannot | MCP glue, Deno APIs |
| JavaScript | Only where AffineScript cannot | MCP glue, Deno APIs |
| Nickel | Configuration | Complex config logic |
| Guile Scheme | Metadata/state files | For all `.scm` artefacts |
| Julia | Batch/data processing | Per RSR |
Expand All @@ -71,13 +71,13 @@ Additional artefact:

| Banned | Replacement |
|--------|-------------|
| TypeScript | ReScript |
| TypeScript | AffineScript |
| Node.js | Deno |
| npm | Deno |
| Bun | Deno |
| pnpm/yarn | Deno |
| Go | Rust |
| Python | Julia / Rust / ReScript |
| Python | Julia / Rust / AffineScript |
| Java/Kotlin | Rust / Tauri / Dioxus |
| Swift | Tauri / Dioxus |
| React Native | Tauri / Dioxus |
Expand All @@ -87,24 +87,24 @@ Additional artefact:

A strict Rust-first approach applies.

- Use **Tauri 2.0+** for web UI (ReScript) + Rust backend.
- Use **Tauri 2.0+** for web UI (AffineScript) + Rust backend.
- Use **Dioxus** for pure Rust native UI.

Both are FOSS with independent governance.

## Enforcement Rules

- Do not create new TypeScript files; convert existing TS to ReScript.
- Do not create new TypeScript files; convert existing TS to AffineScript.
- Do not use `package.json` for runtime dependencies; use `deno.json` imports.
- Do not include `node_modules` in production; Deno handles dependency caching.
- Do not use Go; use Rust.
- Do not use Python; use Julia (data/batch), Rust (systems), or ReScript (apps).
- Do not use Python; use Julia (data/batch), Rust (systems), or AffineScript (apps).
- Do not use Kotlin/Swift; use Tauri 2.0+ or Dioxus for mobile.

## Package Management

- Primary: Guix (`guix.scm`)
- Fallback: Nix (`flake.nix`)
- Fallback: Guix (`flake.guix`)
- JavaScript dependencies: Deno (`deno.json` imports)

## Security Requirements
Expand Down
4 changes: 2 additions & 2 deletions ABI-FFI-README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,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. │
└─────────────────────────────────────────────┘
```

Expand Down Expand Up @@ -79,7 +79,7 @@ This library follows the **Hyperpolymath RSR Standard** for ABI and FFI design:
└── bindings/ # Language-specific wrappers (optional)
├── rust/
├── rescript/
├── affinescript/
└── julia/
```

Expand Down
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ this project aims to follow [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added

- feat(safe-dom): add minimal SafeDOM package and runnable example (#26)
- feat(rescript): reconcile migration onto main
- feat(affinescript): reconcile migration onto main
- feat(affinescript): step (a) — design lock-in for Node-bound packages (#16)
- feat(react): pilot AffineScript port of Button per migration playbook (#15)
- feat(stapeln): add selur-compose.toml Stapeln service definition
Expand Down
6 changes: 3 additions & 3 deletions 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://github.com/hyperpolymath/accessibility-everywhere.git
cd accessibility-everywhere

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

# Or using toolbox/distrobox
toolbox create accessibility-everywhere-dev
Expand Down Expand Up @@ -45,7 +45,7 @@ accessibility-everywhere/
├── MAINTAINERS.md
├── README.adoc
├── SECURITY.md
├── flake.nix # Nix flake (Perimeter 1)
├── flake.guix # Guix flake (Perimeter 1)
└── Justfile # Task runner (Perimeter 1)
```

Expand Down
14 changes: 7 additions & 7 deletions EXPLAINME.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ The browser extension (`tools/browser-extension/`) uses axe-core (Deque Systems)
2. **Lightweight Scan**: axe-core runs a WCAG scan (user selects A/AA/AAA), produces violation array
3. **Score Calculation**: Violations scored as violations / total violations checked
4. **Local Storage**: Results cached in browser's IndexedDB under `a11y-scores` database
5. **UI Render**: ReScript frontend renders violations table and score history chart
5. **UI Render**: AffineScript frontend renders violations table and score history chart

**Code Evidence:**
- Manifest parser at `tools/browser-extension/manifest.json` declares permissions for `activeTab`, `scripting`, `storage`
Expand Down Expand Up @@ -59,7 +59,7 @@ ____

The testing dashboard (`tools/testing-dashboard/`) provides:

1. **Frontend Input**: User enters domain in `tools/testing-dashboard/src/Dashboard.res` (ReScript)
1. **Frontend Input**: User enters domain in `tools/testing-dashboard/src/Dashboard.res` (AffineScript)
2. **Scan Dispatch**: Frontend POST to `tools/monitoring-api/` with domain + WCAG level
3. **Queue**: API stores job in ArangoDB `scanning_queue` collection with status "pending"
4. **Background Worker**: A Node.js worker (`tools/monitoring-api/src/worker.js`) picks up jobs, spawns Puppeteer, calls axe-core
Expand Down Expand Up @@ -104,13 +104,13 @@ The leaderboard has known limitations:
|===
| Layer | Technology | Reason

| **Extension UI** | JavaScript (ES6) + TypeScript | Tight coupling to browser APIs; ReScript cannot target extension manifest directly
| **Frontend (Dashboard)** | ReScript + TEA | Type safety + simple state machine for forms
| **Extension UI** | JavaScript (ES6) + TypeScript | Tight coupling to browser APIs; AffineScript cannot target extension manifest directly
| **Frontend (Dashboard)** | AffineScript + TEA | Type safety + simple state machine for forms
| **API Gateway** | Node.js + Express | Lightweight, good async/await for Puppeteer orchestration
| **Scanner Core** | Puppeteer + axe-core | Industry standard (used by Lighthouse, WebAIM, Accessibility Checker)
| **Database** | ArangoDB | Graph + document = flexible metadata + relationship queries
| **Leaderboard Export** | JSON (static) | Immutable, cacheable, CDN-friendly
| **Frontend (Leaderboard)** | ReScript | Sortable table, reactive on new data
| **Frontend (Leaderboard)** | AffineScript | Sortable table, reactive on new data
|===

---
Expand All @@ -126,7 +126,7 @@ The leaderboard has known limitations:
| `tools/browser-extension/src/scanner.ts` | axe-core injection and result formatting
| `tools/browser-extension/src/storage.ts` | IndexedDB schema and persistence layer
| `tools/testing-dashboard/` | Public web dashboard for URL scanning and leaderboard display
| `tools/testing-dashboard/src/Dashboard.res` | ReScript TEA app (ReScript → JS)
| `tools/testing-dashboard/src/Dashboard.res` | AffineScript TEA app (AffineScript → JS)
| `tools/testing-dashboard/public/leaderboard.schema.json` | JSON schema for leaderboard data
| `tools/monitoring-api/` | REST API backend for scanning jobs
| `tools/monitoring-api/src/api.ts` | Express routes for `/scan`, `/results`, `/health`
Expand All @@ -149,7 +149,7 @@ The leaderboard has known limitations:
| **ABI/FFI (Idris2 + Zig)** | Scanner FFI boundary (axe-core → native code if needed in future)
| Planned for Phase 2: formal verification of WCAG criterion predicates

| **Hyperpolymath Language Policy** | ReScript for dashboard (no TypeScript), Node.js for API (exception: JS ecosystem tooling unavoidable)
| **Hyperpolymath Language Policy** | AffineScript for dashboard (no TypeScript), Node.js for API (exception: JS ecosystem tooling unavoidable)
| Compliant; Node.js API transitioning to Deno in Phase 3

| **MPL-2.0 License** | Primary; fallback to MPL-2.0 for browser extension store requirements
Expand Down
2 changes: 1 addition & 1 deletion Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ doctor:
check "just" just "1.25"
check "git" git "2.40"
check "Deno" deno "2.0"
check "ReScript (resc)" rescript "12.0"
check "AffineScript (resc)" affinescript "12.0"
check "Zig" zig "0.13"
# Optional tools
if command -v panic-attack >/dev/null 2>&1; then
Expand Down
8 changes: 4 additions & 4 deletions RSR_OUTLINE.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,8 @@ project/

=== Language Tiers

* **Tier 1** (Gold): Rust, Elixir, Zig, Ada, Haskell, ReScript
* **Tier 2** (Silver): Nickel, Racket, Guile Scheme, Nix
* **Tier 1** (Gold): Rust, Elixir, Zig, Ada, Haskell, AffineScript
* **Tier 2** (Silver): Nickel, Racket, Guile Scheme, Guix
* **Infrastructure**: Guix channels, derivations

=== Required Files
Expand All @@ -163,12 +163,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`)

Expand Down
36 changes: 0 additions & 36 deletions deno.json

This file was deleted.

16 changes: 8 additions & 8 deletions examples/web-project-deno.json
Original file line number Diff line number Diff line change
@@ -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://github.com/ghraw/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://github.com/ghraw/hyperpolymath/affinescript-dom-mounter/main/src/",
"proven/": "../proven/bindings/affinescript/src/"
},
"compilerOptions": {
"allowJs": true,
Expand Down
21 changes: 0 additions & 21 deletions tools/cli/deno.json

This file was deleted.

18 changes: 0 additions & 18 deletions tools/github-action/deno.json

This file was deleted.

25 changes: 0 additions & 25 deletions tools/monitoring-api/deno.json

This file was deleted.

16 changes: 0 additions & 16 deletions tools/safe-dom/deno.json

This file was deleted.

6 changes: 0 additions & 6 deletions tools/safe-dom/package-lock.json

This file was deleted.

Loading
Loading