/ META.scm
META.scm
1 ;; SPDX-License-Identifier: AGPL-3.0-or-later 2 ;; SPDX-FileCopyrightText: 2025 Jonathan D.A. Jewell 3 ;;; META.scm — beamdeno 4 5 (define-module (beamdeno meta) 6 #:export (architecture-decisions development-practices design-rationale)) 7 8 (define architecture-decisions 9 '((adr-001 10 (title . "Port-First, Distribution Later") 11 (status . "accepted") 12 (date . "2025-12-31") 13 (context . "Erlang distribution protocol is complex, ports are simpler") 14 (decision . "Start with Erlang ports, add distribution protocol in v0.3") 15 (consequences . ("Faster initial release" "Requires running erl" "Distribution for advanced users"))) 16 17 (adr-002 18 (title . "ETF as Wire Format") 19 (status . "accepted") 20 (date . "2025-12-31") 21 (context . "Need to serialize data between Deno and BEAM") 22 (decision . "Use Erlang Term Format (ETF) for native BEAM compatibility") 23 (consequences . ("Native BEAM types" "Binary efficiency" "Need encoder/decoder"))) 24 25 (adr-003 26 (title . "Actor Model Mapping") 27 (status . "accepted") 28 (date . "2025-12-31") 29 (context . "BEAM uses actors/processes, JS uses callbacks/promises") 30 (decision . "Map BEAM messages to JS event emitters and async iterators") 31 (consequences . ("Familiar JS patterns" "Natural async integration" "Some semantic mismatch"))))) 32 33 (define development-practices 34 '((code-style 35 (languages . ("TypeScript" "Erlang")) 36 (formatter . "deno fmt") 37 (linter . "deno lint")) 38 (security 39 (sast . "CodeQL") 40 (credentials . "Erlang cookies handled securely")) 41 (testing 42 (framework . "Deno.test") 43 (integration . "Requires running BEAM node") 44 (coverage-minimum . 70)) 45 (versioning 46 (scheme . "SemVer 2.0.0")))) 47 48 (define design-rationale 49 '((why-etf 50 "ETF is BEAM's native format. JSON would require conversion on both sides.") 51 (why-ports 52 "Ports are well-documented, stable, and don't require distribution cookies.") 53 (why-not-nif 54 "NIFs require Erlang toolchain. Ports work with just the erl binary.")))