-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
268 lines (257 loc) · 18.6 KB
/
Copy pathindex.html
File metadata and controls
268 lines (257 loc) · 18.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>CFAM / XF — Cross-Framework Architectural Model</title>
<meta name="description" content="CFAM / XF: a technology-agnostic, statically verifiable architectural reference model for the interior of a software artifact. Normative specification XF-CFAM-001:2026.">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
<meta name="googlebot" content="index, follow">
<meta name="bingbot" content="index, follow">
<meta property="og:title" content="Cross-Framework Architectural Model (CFAM / XF)">
<meta property="og:description" content="A technology-agnostic, verifiable architectural reference model. Normative specification XF-CFAM-001:2026.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://xfcfam.org">
<style>
:root{
--ink:#13182b; --muted:#5b6478; --line:#e4e7ef; --bg:#ffffff;
--accent:#1f3a93; --accent-2:#2b4fd0; --soft:#f5f7fb; --code:#f0f2f8;
--max:880px;
}
@media (prefers-color-scheme: dark){
:root{--ink:#e8ebf5;--muted:#9aa3ba;--line:#2a3046;--bg:#0e1120;
--accent:#8aa6ff;--accent-2:#9db4ff;--soft:#161a2c;--code:#161a2c;}
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);
font-family:system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
line-height:1.6;font-size:17px}
a{color:var(--accent-2);text-decoration:none}
a:hover{text-decoration:underline}
.wrap{max-width:var(--max);margin:0 auto;padding:0 22px}
header{border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--bg);z-index:5}
.bar{display:flex;align-items:center;justify-content:space-between;height:60px}
.brand{font-weight:700;letter-spacing:.02em;color:var(--ink)}
.brand span{color:var(--accent)}
.bar-right{display:flex;align-items:center;gap:18px}
.nav{display:flex;gap:18px}
.nav a{color:var(--ink);font-weight:600;font-size:15px}
.nav a:hover{color:var(--accent-2);text-decoration:none}
.lang{display:inline-flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.lang button{border:0;background:transparent;color:var(--muted);padding:6px 12px;cursor:pointer;font-size:14px;font-weight:600}
.lang button.on{background:var(--accent);color:#fff}
.hero{padding:54px 0 34px;border-bottom:1px solid var(--line)}
.badge{display:inline-block;font-size:13px;font-weight:600;color:var(--accent);
background:var(--soft);border:1px solid var(--line);border-radius:999px;padding:4px 12px;margin-bottom:18px}
h1{font-size:2.15rem;line-height:1.15;margin:.1em 0 .35em}
.tag{font-size:1.18rem;color:var(--muted);margin:0 0 26px;max-width:40em}
.cta{display:flex;flex-wrap:wrap;gap:12px;align-items:center}
.btn{display:inline-flex;align-items:center;gap:8px;border-radius:9px;padding:11px 18px;font-weight:600;font-size:15px;border:1px solid var(--accent)}
.btn.primary{background:var(--accent);color:#fff}
.btn.ghost{background:transparent;color:var(--accent-2)}
.alt{font-size:14px;color:var(--muted);margin-top:12px}
section{padding:38px 0;border-bottom:1px solid var(--line)}
h2{font-size:1.4rem;margin:0 0 .6em}
h3{font-size:1.05rem;margin:1.4em 0 .4em}
p{margin:.2em 0 1em}
ul.clean{padding-left:1.1em;margin:.2em 0 1em}
ul.clean li{margin:.3em 0}
table.lxt{width:100%;border-collapse:collapse;font-size:14.5px;margin:.4em 0 .2em}
table.lxt th,table.lxt td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:top}
table.lxt thead th{border-top:2px solid var(--ink);border-bottom:2px solid var(--ink);font-size:13px;text-transform:uppercase;letter-spacing:.03em}
table.lxt tbody tr:last-child td{border-bottom:2px solid var(--ink)}
table.lxt td code,code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:var(--code);padding:1px 5px;border-radius:5px;font-size:.92em}
.note{font-size:13.5px;color:var(--muted);margin-top:8px}
pre{background:var(--code);border:1px solid var(--line);border-radius:9px;padding:14px 16px;overflow:auto;font-size:13.5px;line-height:1.5}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px 26px}
@media(max-width:620px){.grid2{grid-template-columns:1fr}h1{font-size:1.8rem}}
.meta{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;font-size:15px}
.meta dt{color:var(--muted)}
footer{padding:28px 0 48px;color:var(--muted);font-size:14px}
body.lang-en .es{display:none}
body.lang-es .en{display:none}
</style>
</head>
<body class="lang-en">
<header><div class="wrap bar">
<div class="brand">CFAM<span>/</span>XF</div>
<div class="bar-right">
<nav class="nav">
<a href="libraries.html"><span class="en">Libraries</span><span class="es">Librerías</span></a>
<a href="tools.html"><span class="en">Tools</span><span class="es">Herramientas</span></a>
</nav>
<div class="lang" role="group" aria-label="Language">
<button id="b-en" class="on" onclick="setLang('en')">EN</button>
<button id="b-es" onclick="setLang('es')">ES</button>
</div>
</div>
</div></header>
<div class="hero"><div class="wrap">
<div class="badge">XF-CFAM-001:2026 · June 9, 2026</div>
<div class="en">
<h1>Cross-Framework Architectural Model</h1>
<p class="tag">A technology-agnostic, statically verifiable reference model for the <em>interior</em> of a software artifact — one structure beneath many frameworks.</p>
<div class="cta">
<a class="btn primary" href="spec/XF-CFAM-001-2026-EN.pdf">Read the specification (PDF)</a>
<a class="btn ghost" href="spec/XF-CFAM-001-2026-EN.pdf" download>Download PDF</a>
</div>
<div class="alt">228 pages · English edition. Also available in <a href="#" onclick="setLang('es');return false;">Spanish</a>.</div>
</div>
<div class="es">
<h1>Modelo de Arquitectura Cross-Framework</h1>
<p class="tag">Un modelo de referencia independiente de la tecnología y verificable estáticamente para el <em>interior</em> de un artefacto de software — una estructura bajo muchos frameworks.</p>
<div class="cta">
<a class="btn primary" href="spec/XF-CFAM-001-2026-ES.pdf">Leer la especificación (PDF)</a>
<a class="btn ghost" href="spec/XF-CFAM-001-2026-ES.pdf" download>Descargar PDF</a>
</div>
<div class="alt">235 páginas · edición en español. También disponible en <a href="#" onclick="setLang('en');return false;">inglés</a>.</div>
</div>
</div></div>
<section><div class="wrap">
<div class="en">
<h2>What it is</h2>
<p>The <strong>Cross-Framework Architectural Model</strong> (CFAM, also XF) starts from a simple observation: mainstream frameworks independently converge on the same component roles because the processes they automate share one structure — a convergence hidden behind incompatible vocabularies. From the theory of formal processes (Input–Process–Output, communicating sequential processes, the Actor model, BPMN), CFAM derives a universal <strong>three-layer structure</strong> and crosses it with <strong>five functional types</strong> into a closed <strong>L×T taxonomy</strong> with a canonical, technology-agnostic nomenclature.</p>
<p>Following the precedent of OSI — which standardized communication <em>between</em> systems — CFAM standardizes the vocabulary and construction of the <em>interior</em> of each artifact. Conformance is statically verifiable across five levels, and prior reference architectures (Clean, Hexagonal, Onion, Domain-Driven Design) project onto L×T as <strong>partial instances</strong>.</p>
</div>
<div class="es">
<h2>Qué es</h2>
<p>El <strong>Modelo de Arquitectura Cross-Framework</strong> (CFAM, también XF) parte de una observación simple: los frameworks dominantes convergen de forma independiente en los mismos roles de componente porque los procesos que automatizan comparten una misma estructura, oculta tras vocabularios incompatibles. Desde la teoría de los procesos formales (Entrada–Proceso–Salida, procesos secuenciales comunicantes, el modelo de Actores, BPMN), CFAM deriva una <strong>estructura universal de tres capas</strong> y la cruza con <strong>cinco tipos funcionales</strong> en una <strong>taxonomía cerrada L×T</strong> con una nomenclatura canónica e independiente de la tecnología.</p>
<p>Siguiendo el precedente de OSI — que estandarizó la comunicación <em>entre</em> sistemas —, CFAM estandariza el vocabulario y la construcción del <em>interior</em> de cada artefacto. La conformidad es verificable estáticamente en cinco niveles, y las arquitecturas de referencia previas (Clean, Hexagonal, Onion, Domain-Driven Design) se proyectan sobre L×T como <strong>instancias parciales</strong>.</p>
</div>
</div></section>
<section><div class="wrap">
<div class="en"><h2>The L×T taxonomy</h2>
<p>Every component of an artifact occupies exactly one cell: an <strong>abstraction layer</strong> (rows) crossed with a <strong>functional type</strong> (columns). The asterisk (<code>*</code>) stands for the modeled concept.</p></div>
<div class="es"><h2>La taxonomía L×T</h2>
<p>Todo componente de un artefacto ocupa exactamente una celda: una <strong>capa de abstracción</strong> (filas) cruzada con un <strong>tipo funcional</strong> (columnas). El asterisco (<code>*</code>) representa el concepto modelado.</p></div>
<table class="lxt">
<thead><tr>
<th><span class="en">Layer</span><span class="es">Capa</span></th>
<th><span class="en">Logical</span><span class="es">Lógico</span></th>
<th><span class="en">Generalization</span><span class="es">Generalización</span></th>
<th><span class="en">Injection</span><span class="es">Inyección</span></th>
<th><span class="en">Utility</span><span class="es">Utilidad</span></th>
<th><span class="en">Transfer</span><span class="es">Transferencia</span></th>
</tr></thead>
<tbody>
<tr><td><strong><span class="en">Access</span><span class="es">Acceso</span></strong></td>
<td><code>*Repository</code></td><td><code>*Repository</code></td><td><code>R</code></td><td><code>*Utils</code></td><td><span class="en">concept</span><span class="es">concepto</span> / <code>*Exception</code></td></tr>
<tr><td><strong><span class="en">Business</span><span class="es">Negocio</span></strong></td>
<td><code>*Business</code></td><td><code>*Business</code></td><td><code>B</code></td><td><code>*Utils</code></td><td><span class="en">concept</span><span class="es">concepto</span> / <code>*Exception</code></td></tr>
<tr><td><strong><span class="en">Interaction</span><span class="es">Interacción</span></strong></td>
<td><code>*Service</code>, <code>*View</code></td><td><code>*Service</code>, <code>*View</code></td><td><code>A</code></td><td><code>*Utils</code></td><td><span class="en">concept</span><span class="es">concepto</span> / <code>*Exception</code></td></tr>
</tbody>
</table>
<p class="note"><span class="en">Dependencies are strictly descending (Interaction → Business → Access). The three injection components <code>R</code>, <code>B</code>, <code>A</code> give a single access pattern: <code><injection>.<component>.<operation>()</code>, e.g. <code>B.session.refresh()</code>.</span>
<span class="es">Las dependencias son estrictamente descendentes (Interacción → Negocio → Acceso). Los tres componentes de inyección <code>R</code>, <code>B</code>, <code>A</code> dan un único patrón de acceso: <code><inyección>.<componente>.<operación>()</code>, p. ej. <code>B.session.refresh()</code>.</span></p>
</div></section>
<section><div class="wrap">
<div class="en">
<h2>What’s in the specification</h2>
<div class="grid2"><ul class="clean">
<li>Scope, conformance, and terms</li>
<li>The component taxonomy — the L×T matrix</li>
<li>Layer responsibilities & the descending-dependency rule</li>
<li>Injection components (<code>R</code>, <code>B</code>, <code>A</code>) and the canonical access pattern</li>
</ul><ul class="clean">
<li>Canonical folder structure</li>
<li>Artifact lifecycle (defined → initialized → terminated)</li>
<li>Conformance: rule catalog, five levels, structural vs. semantic verifiability</li>
<li>Formal apparatus: definitions, axioms, properties & theorems (annexes); glossary & index</li>
</ul></div>
</div>
<div class="es">
<h2>Qué contiene la especificación</h2>
<div class="grid2"><ul class="clean">
<li>Ámbito, conformidad y términos</li>
<li>La taxonomía de componentes — la matriz L×T</li>
<li>Responsabilidades de capa y la regla de dependencia descendente</li>
<li>Componentes de inyección (<code>R</code>, <code>B</code>, <code>A</code>) y el patrón de acceso canónico</li>
</ul><ul class="clean">
<li>Estructura de carpetas canónica</li>
<li>Ciclo de vida del artefacto (definido → inicializado → terminado)</li>
<li>Conformidad: catálogo de reglas, cinco niveles, verificabilidad estructural vs. semántica</li>
<li>Aparato formal: definiciones, axiomas, propiedades y teoremas (anexos); glosario e índice</li>
</ul></div>
</div>
</div></section>
<section><div class="wrap">
<div class="en">
<h2>Libraries</h2>
<p>Official XF libraries bring the L×T taxonomy and the canonical nomenclature into real code, with one technology-specific monorepo per ecosystem — <code>lib-npm</code>, <code>lib-nuget</code>, <code>lib-pip</code> and <code>lib-maven</code> — published under <a href="https://github.com/xfcfam">@xfcfam</a> on GitHub.</p>
<div class="cta">
<a class="btn primary" href="libraries.html">Browse the libraries</a>
<a class="btn ghost" href="https://github.com/xfcfam">View on GitHub</a>
</div>
</div>
<div class="es">
<h2>Librerías</h2>
<p>Las librerías oficiales XF llevan la taxonomía L×T y la nomenclatura canónica a código real, con un monorepo por tecnología — <code>lib-npm</code>, <code>lib-nuget</code>, <code>lib-pip</code> y <code>lib-maven</code> — publicados en <a href="https://github.com/xfcfam">@xfcfam</a> en GitHub.</p>
<div class="cta">
<a class="btn primary" href="libraries.html">Ver las librerías</a>
<a class="btn ghost" href="https://github.com/xfcfam">Ver en GitHub</a>
</div>
</div>
</div></section>
<section><div class="wrap">
<div class="en">
<h2>Tools</h2>
<p><code>xftools</code> is the official command-line validator for CFAM / XF. It classifies every component of an artifact into the L×T matrix, runs the normative rule catalog (71 rules across 9 groups, XF-CFAM-001:2026), and reports a single conformance level Λ ∈ {0..4}. It is built as an XF artifact itself — it validates its own source. Published at <a href="https://github.com/xfcfam/tools">xfcfam/tools</a> on GitHub.</p>
<div class="cta">
<a class="btn primary" href="tools.html">Explore the tool</a>
<a class="btn ghost" href="https://github.com/xfcfam/tools">View on GitHub</a>
</div>
</div>
<div class="es">
<h2>Herramientas</h2>
<p><code>xftools</code> es el validador oficial de línea de comandos de CFAM / XF. Clasifica cada componente de un artefacto en la matriz L×T, ejecuta el catálogo normativo de reglas (71 reglas en 9 grupos, XF-CFAM-001:2026) y reporta un único nivel de conformidad Λ ∈ {0..4}. Está construido como un artefacto XF en sí mismo — valida su propio código. Publicado en <a href="https://github.com/xfcfam/tools">xfcfam/tools</a> en GitHub.</p>
<div class="cta">
<a class="btn primary" href="tools.html">Explorar la herramienta</a>
<a class="btn ghost" href="https://github.com/xfcfam/tools">Ver en GitHub</a>
</div>
</div>
</div></section>
<section><div class="wrap">
<div class="en"><h2>Cite this work</h2>
<p>To cite the normative specification:</p>
<p>Sanjurjo, I. (2026). <em>Cross-Framework Architectural Model (CFAM / XF)</em>, XF-CFAM-001:2026. <a href="https://xfcfam.org">https://xfcfam.org</a></p>
<p class="note">A companion overview article is under review at <em>IEEE Software</em>.</p>
</div>
<div class="es"><h2>Cómo citar</h2>
<p>Para citar la especificación normativa:</p>
<p>Sanjurjo, I. (2026). <em>Modelo de Arquitectura Cross-Framework (CFAM / XF)</em>, XF-CFAM-001:2026. <a href="https://xfcfam.org">https://xfcfam.org</a></p>
<p class="note">Un artículo panorámico complementario está en revisión en <em>IEEE Software</em>.</p>
</div>
<pre>@techreport{cfam2026,
author = {Sanjurjo, Israel},
title = {Cross-Framework Architectural Model (CFAM/XF)},
number = {XF-CFAM-001:2026},
year = {2026},
url = {https://xfcfam.org}
}</pre>
</div></section>
<footer><div class="wrap">
<div class="meta">
<dt><span class="en">Author</span><span class="es">Autor</span></dt>
<dd>Israel Sanjurjo · <a href="https://orcid.org/0009-0006-9584-7977">ORCID 0009-0006-9584-7977</a></dd>
<dt><span class="en">Edition</span><span class="es">Edición</span></dt>
<dd>XF-CFAM-001:2026 (June 9, 2026)</dd>
<dt><span class="en">Rights</span><span class="es">Derechos</span></dt>
<dd>© 2026 Israel Sanjurjo.
<span class="en">Licensed under <a href="https://creativecommons.org/licenses/by-nd/4.0/">CC BY-ND 4.0</a>: copy and redistribute the document in any medium, <strong>unmodified</strong> and <strong>with attribution</strong>. <code>xfcfam.org</code> is the canonical source — please cite the versioned edition above.</span>
<span class="es">Bajo licencia <a href="https://creativecommons.org/licenses/by-nd/4.0/deed.es">CC BY-ND 4.0</a>: copia y redistribuye el documento en cualquier medio, <strong>sin modificaciones</strong> y <strong>con atribución</strong>. <code>xfcfam.org</code> es la fuente canónica — cita la edición versionada de arriba.</span></dd>
</div>
</div></footer>
<script>
function setLang(l){
document.body.className='lang-'+l;
document.documentElement.lang=l;
var en=document.getElementById('b-en'), es=document.getElementById('b-es');
if(en&&es){en.classList.toggle('on',l==='en');es.classList.toggle('on',l==='es');}
try{localStorage.setItem('xf_lang',l);}catch(e){}
}
(function(){var l='en';try{l=localStorage.getItem('xf_lang')||'en';}catch(e){}setLang(l);})();
</script>
</body>
</html>