genesis-compiler 1.10.17 → 1.10.19
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.
package/package.json
CHANGED
|
@@ -31,6 +31,9 @@ Each one silently loses data, protection or a whole run.
|
|
|
31
31
|
- Edit a migration that has run anywhere: databases diverge.
|
|
32
32
|
- Let the first visitor to a new deployment own it.
|
|
33
33
|
- Run production with development settings, fallbacks, hosts or secrets.
|
|
34
|
+
- Send real email, messages or payments from a copy the platform's side-effects
|
|
35
|
+
setting has not made live: honour that setting, and simulate them where it is
|
|
36
|
+
unset or the platform has none.
|
|
34
37
|
- Release a test's servers, processes or timers only where a timeout skips it.
|
|
35
38
|
- Stop a process by name or pattern (`pkill`, `killall`, `kill $(pgrep ...)`)
|
|
36
39
|
instead of the pid you started or the project's stop command: the match also
|
|
@@ -63,6 +66,58 @@ its rows stay unseen and unchanged, write hooks and side effects included.
|
|
|
63
66
|
**Outer limit:** an application with no owner layer, a table written from
|
|
64
67
|
several places, or a request whose work grows with the whole population.
|
|
65
68
|
|
|
69
|
+
## Data: one source for each fact
|
|
70
|
+
|
|
71
|
+
**Good:** each fact (an item's name, a rule, a template's structure) lives in
|
|
72
|
+
one known place, and everything else refers to it. Copies are made on purpose:
|
|
73
|
+
you know why each exists and what keeps it in step with its source, or why it
|
|
74
|
+
may drift. Accidental copies drift: a fix to the source never reaches them, and
|
|
75
|
+
nobody can tell which is right. Where it fits, prefer:
|
|
76
|
+
- shared content (a catalogue, a library of templates, presets) kept once and
|
|
77
|
+
referenced by a stable id; a person's own version keeps what they changed and
|
|
78
|
+
the id it came from;
|
|
79
|
+
- a variant as a reference plus what differs, not a copy of the whole;
|
|
80
|
+
- one current format for each kind of data: convert the old data and remove
|
|
81
|
+
the old format and its converters, keeping only an upgrade path for old data
|
|
82
|
+
out of reach (files people saved);
|
|
83
|
+
- where the software is translated, its own texts kept as keys and looked up
|
|
84
|
+
when shown: stored text cannot follow the language, and matching it back to
|
|
85
|
+
a key breaks once someone edits it. Text a person wrote is kept as written;
|
|
86
|
+
- a change sent to a tool, an API or an AI model rather than the whole
|
|
87
|
+
document: each has size limits, the model's output length included, and a
|
|
88
|
+
whole document stops fitting as it grows while a change stays small.
|
|
89
|
+
|
|
90
|
+
Deliberate copies are often right: a cache, a baked asset, a read model, a
|
|
91
|
+
snapshot that must not change (an issued invoice, a saved game). In a
|
|
92
|
+
database, a JSON column suits data read and written as one unit, while data
|
|
93
|
+
queried, shared or referenced elsewhere usually does better in its own rows.
|
|
94
|
+
When breaking one of these is clearly better, say why in the code or the
|
|
95
|
+
Program.
|
|
96
|
+
|
|
97
|
+
**Check:** before reporting a data feature done, list what it stores, where
|
|
98
|
+
each fact lives, what refers to what, each copy with what keeps it in step,
|
|
99
|
+
and the largest real size of each document. Look for one value or structure
|
|
100
|
+
stored twice. Send the largest real document, library and generated items
|
|
101
|
+
included, through the real path (the tool, the API, the loader).
|
|
102
|
+
|
|
103
|
+
**Examples:**
|
|
104
|
+
- Choosing a template from a library copied the whole template into the
|
|
105
|
+
person's data, and a lighter variant copied every part to change one value:
|
|
106
|
+
one template held 28 parts, 16 of them distinct. Its items, referenced by
|
|
107
|
+
id, took names and translations live from their own library and needed no
|
|
108
|
+
copy.
|
|
109
|
+
- The same library was kept in two formats, with converters for the old one
|
|
110
|
+
beside them.
|
|
111
|
+
- The software's own names were stored as English and translated by matching
|
|
112
|
+
that text against keys, which broke when a name was edited.
|
|
113
|
+
- An AI tool took a whole document as its arguments and refused the larger
|
|
114
|
+
library documents. Every test passed: the library was generated by code and
|
|
115
|
+
never went through the tool.
|
|
116
|
+
|
|
117
|
+
**Outer limit:** copies of one fact that disagree with nothing to say which is
|
|
118
|
+
right, two formats of one kind of data both still written, or a real document
|
|
119
|
+
the software's own path refuses.
|
|
120
|
+
|
|
66
121
|
## Data: loading a dataset
|
|
67
122
|
|
|
68
123
|
**Good:** a list, page or report takes about as many queries for 10 rows as
|