Skip to content

Commit ef37cee

Browse files
chore(tidy): T-4 — add RSR_COMPLIANCE.adoc documenting template alignment + exemptions (#366)
## Summary Phase T-4 of the repo-tidy stack. Adds `RSR_COMPLIANCE.adoc` at the repository root — the RSR template lists this as a required file but it has never existed in this repo. The file is a deliberately short, honest gap analysis of where AffineScript aligns with the RSR template and where it deliberately deviates. Each deviation cites the authoritative source (`.claude/CLAUDE.md` for language exemptions, `0-AI-MANIFEST.a2ml` for the `.scm`-reserved-for-Guix rule, and the sibling-repo convention for the `STATE.scm` → `STATE.a2ml` substitution). ## Documented deviations - **No `guix.scm` / `flake.nix`** — the `affinescript.opam` + `justfile` carry the build contract; Guix channel is a planned follow-up per the estate-wide "Guix primary, Nix fallback" rule. - **`STATE.scm` substituted by `.machine_readable/6a2/STATE.a2ml`** — `.scm` is reserved for Guix in this estate; sibling repos (`road-skate/`, `affinescript-vite/`, `affinescriptiser/`) all use `.machine_readable/STATE.a2ml`. This is the cross-repo standard. - **TypeScript exemptions (7)** — pre-existing carve-outs in `.claude/CLAUDE.md` §"TypeScript Exemptions (Approved)". No policy change here; just the cross-link so a future RSR audit finds them. - **Runtime exemptions (2)** — pre-existing carve-outs in `.claude/CLAUDE.md` §"Runtime Exemptions (Approved)". Same — no policy change, just a cross-link. ## What this file does NOT do - Doesn't move `STATE.a2ml` — it stays at `.machine_readable/6a2/`. Per the policy, that's the canonical location. - Doesn't add `guix.scm` — separate substantive change (reproducibility via Guix-shell), out of scope for a doc-tidy PR. - Doesn't change exemption policy — the carve-outs in CLAUDE.md remain the authoritative decision; this file *quotes* them. ## Test plan - [ ] Pure-addition; expected to inherit `main`'s baseline CI state. - [ ] Hypatia: no new findings; no banned-language / unpinned-action hits added. ## Stack - ✅ T-1 (#359 merged) — AI manifest canonical name + TECH-DEBT restore - ✅ T-2 (#360) — game-file deletion - ✅ T-3 (#365) — root → docs/ reshuffle - 🟡 **T-4 (this PR)** — RSR_COMPLIANCE.adoc - T-5 — refresh `wiki/` - T-6 — issue / PR triage Phase 2c (#357) is on a separate branch and unaffected. --- _Generated by [Claude Code](https://claude.ai/code/session_01WNkH8UucP3PppG5R36kGcu)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent cf2f895 commit ef37cee

1 file changed

Lines changed: 134 additions & 0 deletions

File tree

RSR_COMPLIANCE.adoc

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
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

Comments
 (0)