|
| 1 | +// SPDX-License-Identifier: MPL-2.0 |
| 2 | +// SPDX-FileCopyrightText: 2024-2026 hyperpolymath |
| 3 | += AffineScript RSR Compliance |
| 4 | +:toc: macro |
| 5 | +:toclevels: 3 |
| 6 | +:icons: font |
| 7 | + |
| 8 | +[IMPORTANT] |
| 9 | +==== |
| 10 | +This document tracks how the AffineScript repo aligns with the |
| 11 | +*Rhodium Standard Repository* template |
| 12 | +(link:https://github.com/hyperpolymath/RSR-template-repo[RSR-template-repo], |
| 13 | +ledger entry in link:standards/RSR-OUTLINE.adoc[docs/standards/RSR-OUTLINE.adoc]). |
| 14 | +RSR is an estate-wide convention, not a third-party standard; this |
| 15 | +file is the place where deviations from the template are documented |
| 16 | +and justified rather than left silent. |
| 17 | +==== |
| 18 | + |
| 19 | +toc::[] |
| 20 | + |
| 21 | +== Status |
| 22 | + |
| 23 | +[cols="3,1,4"] |
| 24 | +|=== |
| 25 | +|Requirement |State |Notes |
| 26 | + |
| 27 | +|`.editorconfig` |✅ |Standard editor config (indent / charset). |
| 28 | +|`.gitignore` |✅ |Repo-specific ignore rules. |
| 29 | +|`justfile` |✅ |Task runner with all RSR-mandated recipes (`build`, `test`, `quality`, `ci`, `validate`, `docs`). |
| 30 | +|`README.adoc` |✅ |Project overview + Getting Started. |
| 31 | +|`LICENSE` |✅ |MPL-2.0 — the legal-fallback bridge until the in-flight Palimpsest license is formally recognised. Full text and SPDX-by-file are tracked under `LICENSES/`. |
| 32 | +|`.well-known/security.txt` |✅ |RFC 9116 disclosure contact. |
| 33 | +|`.well-known/ai.txt` |✅ |Estate-wide AI agent affordance metadata. |
| 34 | +|`.well-known/humans.txt` |✅ |Human-readable maintainer / contributor surface. |
| 35 | +|`guix.scm` or `flake.nix` |⚠️ |Neither file currently committed; the `affinescript.opam` package descriptor + the global `justfile` recipes carry the build contract today. Adding a Guix channel definition is a planned follow-up (estate primary is Guix per RSR-OUTLINE §"Language Tiers"); a Nix fallback would be acceptable for early CI. |
| 36 | +|`0-AI-MANIFEST.a2ml` |✅ |Adopted 2026-05-25 (PR #359) replacing the older `AI.a2ml` per Hypatia `root_hygiene` rule. Matches sibling-repo convention (`road-skate/`, `affinescript-vite/`, `affinescriptiser/` all carry the same). |
| 37 | +|`STATE.scm` |❌ |*Documented exemption.* This repo's `.scm` extension is reserved for Guix (`guix.scm`, `.guix-channel`) per the language policy in `0-AI-MANIFEST.a2ml`. Project state lives at `.machine_readable/6a2/STATE.a2ml` in the canonical 6a2 schema (matches sibling repos in the same estate). Substituting `.a2ml` for `.scm` is the cross-repo standard, not an AffineScript outlier — see also `road-skate/.machine_readable/STATE.a2ml`. |
| 38 | +|`RSR_COMPLIANCE.adoc` |✅ |This file. Added 2026-05-25. |
| 39 | +|=== |
| 40 | + |
| 41 | +== Directory layout |
| 42 | + |
| 43 | +The RSR template proposes a deliberately small `docs/` (only |
| 44 | +`generated/`, `man/`, `just-cookbook.adoc`). This repo's `docs/` is |
| 45 | +richer because the compiler's documentation surface is genuinely |
| 46 | +larger (specs + ADRs + architecture + reference + history + tutorial |
| 47 | ++ vision). The structure is: |
| 48 | + |
| 49 | +[source] |
| 50 | +---- |
| 51 | +docs/ |
| 52 | +├── README.adoc / NAVIGATION.adoc # indices |
| 53 | +├── ROADMAP.adoc / CAPABILITY-MATRIX.adoc / TECH-DEBT.adoc / ECOSYSTEM.adoc |
| 54 | +├── architecture/ # compiler / backend internals |
| 55 | +├── governance/ # licensing, security, community |
| 56 | +├── guides/ # how-tos, programming practices |
| 57 | +├── history/ # session notes, retired specs |
| 58 | +├── reference/ # ABI-FFI, capabilities (technical reference) |
| 59 | +├── reports/ # status snapshots |
| 60 | +├── specs/ # language + typed-wasm specifications |
| 61 | +├── standards/ # decisions, roadmap, testing, RSR-OUTLINE |
| 62 | +├── tutorial/ # user-facing tutorials |
| 63 | +└── vision/ # long-form direction-setting |
| 64 | +---- |
| 65 | + |
| 66 | +This is a *superset* of the RSR-template `docs/`, not a contradiction — |
| 67 | +no required RSR file is missing because of the extra subdirs. |
| 68 | + |
| 69 | +== Language tier compliance |
| 70 | + |
| 71 | +RSR-OUTLINE §"Prohibited" lists languages estate-wide policy forbids. |
| 72 | +AffineScript-specific status: |
| 73 | + |
| 74 | +[cols="2,3"] |
| 75 | +|=== |
| 76 | +|Prohibition |Status |
| 77 | + |
| 78 | +|No Python outside `salt/` |
| 79 | +|✅ — no Python in this repo. |
| 80 | + |
| 81 | +|No new TypeScript |
| 82 | +|⚠️ — *seven documented exemptions* listed in |
| 83 | +link:../.claude/CLAUDE.md[CLAUDE.md §"TypeScript Exemptions (Approved)"]: |
| 84 | +`packages/affine-js/types.d.ts` (1), `packages/affinescript-cli/mod.d.ts` (1), |
| 85 | +`affinescript-deno-test/*.ts` (6). Each entry carries a per-file rationale and |
| 86 | +an unblock condition. The Hypatia security scan flags them at every PR; the |
| 87 | +policy check has no allowlist, so the resulting CI signal is treated as |
| 88 | +a documented baseline (see CLAUDE.md §"Known-failing baseline checks"). |
| 89 | + |
| 90 | +|No CUE |
| 91 | +|✅ — no CUE in this repo. |
| 92 | + |
| 93 | +|No `Dockerfile` (use `Containerfile`) |
| 94 | +|✅ — no `Dockerfile` in this repo. |
| 95 | + |
| 96 | +|Runtime exemptions (Node.js / Bun) |
| 97 | +|⚠️ — *two documented exemptions* in |
| 98 | +link:../.claude/CLAUDE.md[CLAUDE.md §"Runtime Exemptions (Approved)"]: |
| 99 | +`packages/affinescript-cli/mod.js` (the runtime-agnostic JSR shim; |
| 100 | +ecosystem reach into Node/Bun installer pipelines requires it) and |
| 101 | +`editors/vscode/test/**/*.js` (the in-editor smoke harness for issue #139; |
| 102 | +the VS Code extension host is npm/Node-native and `@vscode/test-electron` |
| 103 | +has no Deno equivalent). |
| 104 | +|=== |
| 105 | + |
| 106 | +== Validation |
| 107 | + |
| 108 | +[source,sh] |
| 109 | +---- |
| 110 | +# Build + test (the CI gate) |
| 111 | +opam exec -- dune build |
| 112 | +opam exec -- dune runtest |
| 113 | +
|
| 114 | +# Format check |
| 115 | +opam exec -- dune build @fmt |
| 116 | +
|
| 117 | +# Migration-assistant grammar pipeline (PR #321) |
| 118 | +just install-grammar |
| 119 | +---- |
| 120 | + |
| 121 | +`just validate-rsr` (the RSR-template recipe name) is *not currently |
| 122 | +wired* in this repo's `justfile` — adding it as an alias for the |
| 123 | +above two-line check is on the follow-up list. |
| 124 | + |
| 125 | +== Cross-references |
| 126 | + |
| 127 | +* link:standards/RSR-OUTLINE.adoc[`docs/standards/RSR-OUTLINE.adoc`] — the upstream RSR template's outline, vendored here so the repo can read it without leaving `main`. |
| 128 | +* link:../.claude/CLAUDE.md[`.claude/CLAUDE.md`] — language policy + exemption tables (the authoritative source for ⚠️ rows above). |
| 129 | +* link:CAPABILITY-MATRIX.adoc[`docs/CAPABILITY-MATRIX.adoc`] — feature-readiness matrix; this RSR-compliance file is about *repo shape*, that one is about *language readiness*. |
| 130 | +* link:TECH-DEBT.adoc[`docs/TECH-DEBT.adoc`] — coordination ledger; long-form follow-up tracking for the ⚠️ rows lives in DOC / CORE / INT ledger entries there. |
| 131 | + |
| 132 | +== History |
| 133 | + |
| 134 | +* 2026-05-25 — Initial file. T-4 of the repo-tidy stack (PR follows). Documented the four ⚠️ rows (`guix.scm`/Nix gap; `STATE.scm` substitution; TypeScript exemptions; runtime exemptions) and the ✅ adoption of `0-AI-MANIFEST.a2ml` from PR #359. |
0 commit comments