@uniweb/core 0.29.3 → 0.29.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/services.js +20 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniweb/core",
3
- "version": "0.29.3",
3
+ "version": "0.29.4",
4
4
  "description": "Core classes for the Uniweb platform - Uniweb, Website, Page, Block",
5
5
  "type": "module",
6
6
  "exports": {
package/src/services.js CHANGED
@@ -21,6 +21,18 @@ import { applyBasePath } from './base-path.js'
21
21
  * does not provide, and on a static site, where no host speaks, the whole
22
22
  * answer.
23
23
  *
24
+ * ## ⛔ THE TWO TIERS ARE NOT TWO SOURCES OF ONE KIND OF THING
25
+ *
26
+ * ⭐ **A site's block is an EXPRESSION OF INTENT — a request for something. The
27
+ * host's is THE ANSWER.** That is the real reason step 1 wins below, and it is
28
+ * not a detail of precedence: an operator's declaration can be answered
29
+ * differently by the deployment that serves it, and is routinely settled later
30
+ * than the moment it was written.
31
+ *
32
+ * ⇒ **So never read a site's declaration as what the site HAS**, and never
33
+ * report a resolved address back as what the operator asked for. The two are
34
+ * different kinds of statement that happen to share a spelling.
35
+ *
24
36
  * Absent from both means the site has no such service, and the caller acts on
25
37
  * that rather than guessing an address. That is the same rule for every service,
26
38
  * and it is why this module exists: it was previously implemented three times —
@@ -80,6 +92,14 @@ import { applyBasePath } from './base-path.js'
80
92
  * and a framework that encodes which capabilities cost money ships the business
81
93
  * model into open source.
82
94
  *
95
+ * ⛔ **AND IT COVERS A FIELD'S JUSTIFICATION, NOT ONLY ITS NAME.** A field naming
96
+ * no tier still breaks this if the reason it exists is to help someone manage
97
+ * what a host charges for: the commercial surface has then been designed around,
98
+ * which is the same coupling wearing a neutral spelling. ⇒ **Ask what a field is
99
+ * FOR, not only what it says** — a neutral spelling with a commercial purpose
100
+ * passes every check that reads only the name. (One such field was proposed and
101
+ * rejected on this ground, 2026-09-15.)
102
+ *
83
103
  * ⛔ **There is deliberately no explanatory string, and there was one — it was
84
104
  * a mistake.** Until 2026-08-13 a declining host could supply a `reason` that
85
105
  * this module relayed "to the UI verbatim", with an English default when nothing