@nac3/forge-cli 1.0.88 → 1.0.90
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/dist/chat/doctrine_digest.d.ts.map +1 -1
- package/dist/chat/doctrine_digest.js +17 -0
- package/dist/chat/doctrine_digest.js.map +1 -1
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +30 -8
- package/dist/chat/panel.js.map +1 -1
- package/dist/docs/doctrine/concurrency-scale.md +11 -0
- package/dist/docs/doctrine/performance-hardening.md +213 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/doctrine/concurrency-scale.md +11 -0
- package/docs/doctrine/performance-hardening.md +213 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctrine_digest.d.ts","sourceRoot":"","sources":["../../src/chat/doctrine_digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,eAAe,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"doctrine_digest.d.ts","sourceRoot":"","sources":["../../src/chat/doctrine_digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,eAAe,EAAE,mBAAmB,EA2IhD,CAAC;AAEF,6DAA6D;AAC7D,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED,MAAM,WAAW,qBAAqB;IACpC;4EACwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;uEACuE;AACvE,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,qBAA0B,GAAG,MAAM,EAAE,CAiBnF"}
|
|
@@ -105,6 +105,23 @@ export const DOCTRINE_DIGEST = [
|
|
|
105
105
|
+ 'number (a 20-user tool stays single-tier; neither a bottleneck nor '
|
|
106
106
|
+ 'gold-plating).',
|
|
107
107
|
},
|
|
108
|
+
{
|
|
109
|
+
slugs: ['performance-hardening'],
|
|
110
|
+
rule: 'harden every load-bearing component for its load in v1 -- match the '
|
|
111
|
+
+ 'trigger (full patterns via discover): DB batch = COMMIT PER CHUNK, '
|
|
112
|
+
+ 'never a tx open across a network call, deadlock retry w/ backoff but '
|
|
113
|
+
+ 'never an external call inside a retry; third parties NON-idempotent -- '
|
|
114
|
+
+ 'dedupe by id ON WRITE (UNIQUE), ACK-first + background, pace outbound, '
|
|
115
|
+
+ 'firm reject -> dead-end not retry-burst; background loops = '
|
|
116
|
+
+ 'backpressure cap per pass + TTL-keyed locks + start-once singletons; '
|
|
117
|
+
+ 'lists PAGINATE server-side; growing tables INDEX filtered/sorted cols, '
|
|
118
|
+
+ 'no fn on an indexed col, no LIKE %q%, VARCHAR(191) not TEXT; long work '
|
|
119
|
+
+ '-> job+poll not a 504; TTL-clean growth; heartbeat+watchdog+'
|
|
120
|
+
+ 'alert-dedupe. LAWS: cero hardcode (thresholds in config, default '
|
|
121
|
+
+ 'preserves behavior, dangerous features born inert), producer/consumer '
|
|
122
|
+
+ 'symmetry, fail-closed, MEASURE before a fan-out switch, PROPORTIONAL '
|
|
123
|
+
+ '(pairs with concurrency-scale).',
|
|
124
|
+
},
|
|
108
125
|
{
|
|
109
126
|
slugs: ['verb-composition'],
|
|
110
127
|
rule: 'compose native verbs in dependency order; prefer a yujin.* verb over shell. Long-running commands (dev server/watcher/tunnel) MUST use yujin.task.run, never shell.exec (which refuses them).',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctrine_digest.js","sourceRoot":"","sources":["../../src/chat/doctrine_digest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctrine_digest.js","sourceRoot":"","sources":["../../src/chat/doctrine_digest.ts"],"names":[],"mappings":"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"}
|
package/dist/chat/panel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;2BAKuB;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"AAmBA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;2BAKuB;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAmrZxD"}
|
package/dist/chat/panel.js
CHANGED
|
@@ -7296,7 +7296,11 @@ function initGraphTab(it) {
|
|
|
7296
7296
|
n.r = n.isRoot ? 17 : 2.5 + n.dr * 11;
|
|
7297
7297
|
/* Relativistic distance to the center of mass: gamma-1 so the most-massive
|
|
7298
7298
|
* node sits AT the center (targetDist 0) and leaves blow out. The project
|
|
7299
|
-
* root is pinned dead-center -- it is the galaxy's black hole.
|
|
7299
|
+
* root is pinned dead-center -- it is the galaxy's black hole. FIXED for
|
|
7300
|
+
* real: in dense-mesh graphs (many high-degree nodes, targetDist ~0 for
|
|
7301
|
+
* all) the crowd's repulsion used to expel the unpinned root to the edge
|
|
7302
|
+
* of the blob (foto Pablo 2026-07-16). */
|
|
7303
|
+
n.fixed = n.isRoot;
|
|
7300
7304
|
const beta = Math.min(0.94, 1 - n.dr);
|
|
7301
7305
|
n.targetDist = n.isRoot ? 0 : SPREAD * (1 / Math.sqrt(1 - beta * beta) - 1);
|
|
7302
7306
|
/* seed on a golden-angle ring near the target so the sim converges fast */
|
|
@@ -7304,6 +7308,9 @@ function initGraphTab(it) {
|
|
|
7304
7308
|
n.x = CX + Math.cos(a2) * n.targetDist * 0.6;
|
|
7305
7309
|
n.y = CY + Math.sin(a2) * n.targetDist * 0.6;
|
|
7306
7310
|
});
|
|
7311
|
+
/* The galaxy organizes AROUND the black hole (radial center = root).
|
|
7312
|
+
* Only graphs without a project root fall back to the center of mass. */
|
|
7313
|
+
const rootNode = nodes.find((n) => n.isRoot) || null;
|
|
7307
7314
|
/* Layout cacheado: si el contenido no cambio, restaurar las posiciones ya
|
|
7308
7315
|
* convergidas -> apertura INSTANTANEA (sin re-simular). */
|
|
7309
7316
|
const _layHash = graphContentHash(String(it.content || ''));
|
|
@@ -7311,9 +7318,16 @@ function initGraphTab(it) {
|
|
|
7311
7318
|
let _layRestored = false;
|
|
7312
7319
|
if (_laySaved && _laySaved.hash === _layHash) {
|
|
7313
7320
|
let hits = 0;
|
|
7321
|
+
/* The cache may come from another canvas geometry: shift every cached
|
|
7322
|
+
* position so the cached ROOT lands dead-center in the CURRENT canvas
|
|
7323
|
+
* (the root is pinned at CX,CY; without the shift the pinned root and
|
|
7324
|
+
* the restored galaxy would land in different places). */
|
|
7325
|
+
let shX = 0, shY = 0;
|
|
7326
|
+
const rp = rootNode ? _laySaved.pos[rootNode.id] : null;
|
|
7327
|
+
if (rp) { shX = CX - rp[0]; shY = CY - rp[1]; }
|
|
7314
7328
|
for (const n of nodes) {
|
|
7315
7329
|
const p = _laySaved.pos[n.id];
|
|
7316
|
-
if (p) { n.x = p[0]; n.y = p[1]; hits++; }
|
|
7330
|
+
if (p) { n.x = p[0] + shX; n.y = p[1] + shY; hits++; }
|
|
7317
7331
|
}
|
|
7318
7332
|
_layRestored = hits >= nodes.length * 0.9;
|
|
7319
7333
|
}
|
|
@@ -7581,11 +7595,17 @@ function initGraphTab(it) {
|
|
|
7581
7595
|
let alpha = 1;
|
|
7582
7596
|
const REPULSE = 6500, SPRING = 0.010, SPRING_LEN = 130, RADIAL = 0.05, DAMP = 0.85;
|
|
7583
7597
|
function tick() {
|
|
7584
|
-
/*
|
|
7585
|
-
*
|
|
7586
|
-
|
|
7587
|
-
|
|
7588
|
-
|
|
7598
|
+
/* Radial center = the BLACK HOLE (pinned at CX,CY) when the graph has a
|
|
7599
|
+
* project root, so the galaxy organizes around it -- same center the
|
|
7600
|
+
* orbit mode uses. Without a root, fall back to the center of MASS
|
|
7601
|
+
* weighted by connection mass (the galaxy re-centers on its hubs). */
|
|
7602
|
+
let comX, comY;
|
|
7603
|
+
if (rootNode) { comX = rootNode.x; comY = rootNode.y; }
|
|
7604
|
+
else {
|
|
7605
|
+
let mx = 0, my = 0, mt = 0;
|
|
7606
|
+
for (const n of nodes) { const m = 0.3 + n.dr; mx += n.x * m; my += n.y * m; mt += m; }
|
|
7607
|
+
comX = mt ? mx / mt : CX; comY = mt ? my / mt : CY;
|
|
7608
|
+
}
|
|
7589
7609
|
for (let i = 0; i < nodes.length; i++) {
|
|
7590
7610
|
const a = nodes[i];
|
|
7591
7611
|
if (a.fixed) continue;
|
|
@@ -7714,7 +7734,9 @@ function initGraphTab(it) {
|
|
|
7714
7734
|
paint();
|
|
7715
7735
|
});
|
|
7716
7736
|
g.addEventListener('pointerup', (evt) => {
|
|
7717
|
-
|
|
7737
|
+
/* The root stays pinned (it is the galaxy's center); dragging it
|
|
7738
|
+
* relocates the whole galaxy around the new spot. */
|
|
7739
|
+
if (drag && drag.node === g._node) { g._node.fixed = g._node.isRoot; drag = null; }
|
|
7718
7740
|
try { g.releasePointerCapture(evt.pointerId); } catch (e) { /* */ }
|
|
7719
7741
|
});
|
|
7720
7742
|
g.addEventListener('click', () => showDetail(g._node));
|
package/dist/chat/panel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAkoTpB,kBAAkB;;QAEpB,CAAC;AACT,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAwpTpB,kBAAkB;;QAEpB,CAAC;AACT,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -52,3 +52,14 @@ the stated concurrency.
|
|
|
52
52
|
|
|
53
53
|
Record the target concurrency and the tier decisions in the spec so
|
|
54
54
|
they are traceable and can be revisited when the number changes.
|
|
55
|
+
|
|
56
|
+
## 4. Then harden each component (see `performance-hardening`)
|
|
57
|
+
|
|
58
|
+
This doctrine sizes the ARCHITECTURE. Sizing the tiers right does not
|
|
59
|
+
save a component that holds a transaction open across a network call,
|
|
60
|
+
runs a batch in one monolithic commit, hammers a non-idempotent third
|
|
61
|
+
party, or grids a table with `LIKE '%q%'`. The construction-time
|
|
62
|
+
pattern library -- commit-per-chunk, send-outside-transaction, deadlock
|
|
63
|
+
retry, backpressure caps, server-side pagination, idempotency at the
|
|
64
|
+
boundary, TTL cleanup, heartbeat/watchdog -- lives in
|
|
65
|
+
`performance-hardening`. Size here; harden there.
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Performance & scale hardening doctrine
|
|
2
|
+
|
|
3
|
+
Every load-bearing component MUST be built for its load in its FIRST
|
|
4
|
+
version -- not hardened after it falls over in production. The brain
|
|
5
|
+
defaults to the happy path: it writes the loop, calls the API, renders
|
|
6
|
+
the grid, and stops. That is exactly how a component ships that
|
|
7
|
+
saturates the DB, hammers a third party, or deadlocks under
|
|
8
|
+
concurrency. This doctrine is the pattern library that closes that gap.
|
|
9
|
+
|
|
10
|
+
Apply the patterns that the component's SHAPE triggers (below). This is
|
|
11
|
+
the RUNTIME / construction complement to `concurrency-scale` (which
|
|
12
|
+
sizes the ARCHITECTURE during relevamiento). Size the tiers there;
|
|
13
|
+
harden each component here. Every rule below is battle-tested in a
|
|
14
|
+
production HITL system, not theory.
|
|
15
|
+
|
|
16
|
+
## How to use this: match the trigger, apply the pattern
|
|
17
|
+
|
|
18
|
+
### Trigger 1 -- a component that WRITES to a DB in a loop or batch
|
|
19
|
+
|
|
20
|
+
- **Commit per chunk, never one monolithic transaction.** A single
|
|
21
|
+
final commit over the whole run holds row/gap locks on every touched
|
|
22
|
+
table until the end, grows the undo log unbounded, and lets ONE
|
|
23
|
+
deadlock roll back the ENTIRE run. Commit per item (or per small
|
|
24
|
+
chunk): locks release continuously, a failure isolates to one item,
|
|
25
|
+
and the run becomes resumable.
|
|
26
|
+
- **Never hold a transaction open across a slow side-effect (network /
|
|
27
|
+
external call).** Use the TWO-TRANSACTION pattern: TX1 = change state
|
|
28
|
+
+ set an "in-flight" marker -> COMMIT (release locks) -> perform the
|
|
29
|
+
external call with NO transaction open -> TX2 = record the result +
|
|
30
|
+
clear the marker -> COMMIT. A crash between the COMMIT and the call
|
|
31
|
+
must be recoverable: build a sweeper that finds rows with the marker
|
|
32
|
+
set but no result, past a TTL, and re-queues them.
|
|
33
|
+
- **Deadlock retry with backoff + jitter.** Classify transient errors
|
|
34
|
+
(MariaDB 1213 deadlock / 1205 lock-wait-timeout; SQLite "database is
|
|
35
|
+
locked") and retry the transaction with exponential backoff + jitter
|
|
36
|
+
(~6 attempts is a good default). Two variants: retry on a FRESH
|
|
37
|
+
connection (top-level request) vs retry a pure-DB sub-transaction on
|
|
38
|
+
the ALREADY-OPEN connection. **INVARIANT: never put an external call
|
|
39
|
+
inside a retry body** -- a redo would double-send / double-charge.
|
|
40
|
+
- **Reserve -> confirm -> return for consumable resources.** Do not
|
|
41
|
+
decrement-then-hope-to-refund. Reserve at arming, confirm on success,
|
|
42
|
+
return on reject. The decrement MUST be a single atomic UPDATE guarded
|
|
43
|
+
so the balance never goes negative (multiple workers touch the same
|
|
44
|
+
row).
|
|
45
|
+
- **Atomic counter / compare-and-swap, not read-modify-write, across
|
|
46
|
+
threads or workers.** `UPDATE ... SET flag=1 WHERE id=? AND flag=0`;
|
|
47
|
+
if rowcount=0 you lost the race, back off. Guard in-process shared
|
|
48
|
+
state with a lock (a multi-thread WSGI server runs N handlers).
|
|
49
|
+
|
|
50
|
+
### Trigger 2 -- a component that CALLS a third party (API / provider / webhook)
|
|
51
|
+
|
|
52
|
+
- **Assume NOT idempotent until proven.** Never auto-retry a
|
|
53
|
+
non-idempotent write. A firm reject goes to a dead-end + manual path,
|
|
54
|
+
NOT a burst of retries at a real person or resource. Gate any
|
|
55
|
+
auto-refire behind provider-confirmed idempotency OR a read-back that
|
|
56
|
+
proves the prior call did not land.
|
|
57
|
+
- **Idempotency at the boundary = a UNIQUE constraint.** Dedupe by the
|
|
58
|
+
provider's real message/transaction id ON WRITE, not just on read.
|
|
59
|
+
Webhooks arrive "at least once" and may re-deliver even after your
|
|
60
|
+
ACK; an unconditional insert turns one event into six rows.
|
|
61
|
+
- **ACK first, work after.** Answer the webhook immediately (202) and do
|
|
62
|
+
the slow work (notices, downstream calls) in a background thread /
|
|
63
|
+
queue. A slow response makes the provider time out and re-send ->
|
|
64
|
+
amplification (one real incident: 62 inbound images -> 36 real).
|
|
65
|
+
- **Pace outbound explicitly.** Per-recipient minimum interval; a
|
|
66
|
+
time-window gate (do not contact outside allowed hours; exempt urgent
|
|
67
|
+
paths); a per-run quota + an inter-item sleep placed OUTSIDE any open
|
|
68
|
+
transaction. Respect the provider's rate limits as first-class config.
|
|
69
|
+
- **Timeout-then-escalate; never wait forever.** After a bounded wait,
|
|
70
|
+
escalate or advance so nothing stays stuck. Advance on the FIRST of
|
|
71
|
+
several signals (read / reply / timeout), idempotently.
|
|
72
|
+
- **The external latency and the human ARE the dominant time cost** --
|
|
73
|
+
far above the DB. Do not block the main thread on them; optimizing a
|
|
74
|
+
query that was never the bottleneck buys nothing.
|
|
75
|
+
|
|
76
|
+
### Trigger 3 -- a background loop / scheduler / sweeper
|
|
77
|
+
|
|
78
|
+
- **Backpressure: cap dispatches per pass.** A mass dump ("run it all
|
|
79
|
+
now") without a cap is a stampede that collides into deadlocks. A
|
|
80
|
+
configurable cap per pass drains the backlog in controlled batches and
|
|
81
|
+
keeps each pass under the watchdog threshold.
|
|
82
|
+
- **One unit per key per pass** when exclusivity/order matters (e.g. one
|
|
83
|
+
message per recipient per sweep) so the loop never fires two at the
|
|
84
|
+
same target.
|
|
85
|
+
- **Isolate each sweep in its own transaction + its own retry.** Do not
|
|
86
|
+
bundle several sweeps under one commit -- one deadlock then starves all
|
|
87
|
+
of them for the whole interval.
|
|
88
|
+
- **Locks with a configurable TTL, keyed CORRECTLY.** An eternal lock is
|
|
89
|
+
a bug (a silent responder blocks the target forever). Key the lock by
|
|
90
|
+
the thing that must serialize (per type / per recipient / per delivery
|
|
91
|
+
target). Stamp each run with the SERVER-INSTANCE token so a recycled
|
|
92
|
+
PID after a restart does not leave the lock hung.
|
|
93
|
+
- **Singletons start EXACTLY once**, guarded against double-start (a dev
|
|
94
|
+
reloader or two threads can otherwise launch two schedulers -> doubled
|
|
95
|
+
cron and doubled sends).
|
|
96
|
+
|
|
97
|
+
### Trigger 4 -- a list / grid / export endpoint
|
|
98
|
+
|
|
99
|
+
- **Server-side pagination**: LIMIT/OFFSET with an envelope
|
|
100
|
+
`{items, total, page, pages}` and a page_size cap. Filter the WHOLE set
|
|
101
|
+
server-side, THEN paginate -- never filter only the visible page.
|
|
102
|
+
- **Export fetches the complete filtered/ordered set** via an explicit
|
|
103
|
+
flag (e.g. `?todo=1`), never by scraping the visible DOM page. The
|
|
104
|
+
page_size cap still protects the screen.
|
|
105
|
+
- Never load the whole world into the client to render a view.
|
|
106
|
+
|
|
107
|
+
### Trigger 5 -- a query on a table that GROWS
|
|
108
|
+
|
|
109
|
+
- **Index every column that grows and is filtered / joined / sorted.** A
|
|
110
|
+
UNIQUE constraint IS an index -- do not double-index its leading
|
|
111
|
+
column, and do not "fix" a scan that already rides a UNIQUE.
|
|
112
|
+
- **Never wrap an indexed column in a function inside WHERE / GROUP BY /
|
|
113
|
+
ORDER BY** (`substr(ts,1,10)=today`, `TRIM(col)=''`, `ORDER BY CASE`).
|
|
114
|
+
It disables the index. Rewrite to a RANGE (`ts >= day AND ts < next`),
|
|
115
|
+
normalize on write, or persist the sort key in its own indexed column.
|
|
116
|
+
- **`LIKE '%q%'` (leading wildcard) is unindexable by a B-tree.** Use an
|
|
117
|
+
anchored prefix `q%` (indexable, "starts with") or a real full-text
|
|
118
|
+
index (MariaDB FULLTEXT / SQLite FTS). Free-text search at scale wants
|
|
119
|
+
an inverted index, not SQL LIKE.
|
|
120
|
+
- **Engine portability: short indexed columns are VARCHAR(191), not
|
|
121
|
+
TEXT.** SQLite indexes TEXT happily and hides the bug; MariaDB errors
|
|
122
|
+
1071 "key too long" (and FK-on-TEXT errno 150). Test against the REAL
|
|
123
|
+
engine before prod (a pre-push barrier catches "key too long" before
|
|
124
|
+
the VM does).
|
|
125
|
+
|
|
126
|
+
### Trigger 6 -- memory / large payloads / long work
|
|
127
|
+
|
|
128
|
+
- **Do not load a whole file / dataset into memory** when you can stream
|
|
129
|
+
in chunks. Know the memory peak of each heavy operation and do not let
|
|
130
|
+
two heavy runs (import + browser bot + batch) overlap on one machine.
|
|
131
|
+
- **Compress large payloads (gzip)** and raise size caps ONLY on the
|
|
132
|
+
specific admin endpoint, not globally.
|
|
133
|
+
- **Long-running work -> background job + poll**, never inside the HTTP
|
|
134
|
+
request (that is a structural 504). Return `202 + id`; the client polls
|
|
135
|
+
a status endpoint. Guard it idempotently: a second start while one is
|
|
136
|
+
alive returns the SAME run.
|
|
137
|
+
|
|
138
|
+
### Trigger 7 -- anything that accumulates (tables, files, logs)
|
|
139
|
+
|
|
140
|
+
- **Every fast-growing table and disk accumulation needs a TTL cleanup**,
|
|
141
|
+
configurable, default OFF (never silent data loss). Bounded size keeps
|
|
142
|
+
queries fast and disk healthy. Beware: cleanup that deletes DB rows
|
|
143
|
+
often forgets the files they point to -- purge both.
|
|
144
|
+
|
|
145
|
+
### Trigger 8 -- observability of the hardening itself
|
|
146
|
+
|
|
147
|
+
- **Instrument retries.** Leave a trace when a retry saved a transaction,
|
|
148
|
+
so residual deadlocks are countable ("the retry doing its job, not an
|
|
149
|
+
error"), not invisible.
|
|
150
|
+
- **Heartbeat per service + heartbeat MID-PASS.** A long pass over a big
|
|
151
|
+
backlog exceeds the liveness threshold and trips a FALSE "hung" alarm;
|
|
152
|
+
refresh the heartbeat every N items inside the loop (zero DB, safe
|
|
153
|
+
mid-transaction).
|
|
154
|
+
- **A watchdog that RELAUNCHES the hung thread, not just logs** -- and
|
|
155
|
+
reports honestly whether it revived a dead thread or the thread is
|
|
156
|
+
alive-but-stuck (which needs a restart it cannot do from inside).
|
|
157
|
+
- **Dedupe repeated alerts within a window** (one incident emitted 891
|
|
158
|
+
identical alerts, one per pass). Exclude genuinely unique events from
|
|
159
|
+
dedupe.
|
|
160
|
+
- **Load-test as an acceptance gate.** Re-run the realistic peak and
|
|
161
|
+
compare deadlocks / orphaned handoffs / false-watchdogs / throughput
|
|
162
|
+
p50/p95 against a baseline; a hardening change does not "close" until
|
|
163
|
+
the numbers hold. You cannot tune what you do not measure -- and the
|
|
164
|
+
volumetry you assume is not the volumetry you have until measured.
|
|
165
|
+
|
|
166
|
+
## The cross-cutting laws (apply to EVERY threshold you add)
|
|
167
|
+
|
|
168
|
+
1. **Cero hardcode.** Every threshold -- cap, retry count, backoff, TTL,
|
|
169
|
+
timeout, poll interval, quota, sleep -- lives in config with a sane
|
|
170
|
+
clamp/floor. The DEFAULT preserves current behavior; a dangerous
|
|
171
|
+
feature is born INERT (0 / off) and hot-applied. A garbage value
|
|
172
|
+
collapses to the safe behavior, never to the risky one.
|
|
173
|
+
2. **Producer/consumer symmetry.** When you change a producer, audit ALL
|
|
174
|
+
its consumers BEFORE the commit. Clamp the same value identically on
|
|
175
|
+
save (producer) and on read (consumer). Preview (dry-run) must walk
|
|
176
|
+
the EXACT same set and same locks as real execution -- the count shown
|
|
177
|
+
equals the count processed.
|
|
178
|
+
3. **Never an external / network call inside an open transaction or a
|
|
179
|
+
retry.** This single rule prevents most lock storms AND all
|
|
180
|
+
double-sends / double-charges.
|
|
181
|
+
4. **Fail-closed (cero dano silencioso).** On ambiguous or corrupt input,
|
|
182
|
+
collapse to the safe branch (manual review, no-op), never the
|
|
183
|
+
irreversible one. Lists are born empty, switches born off.
|
|
184
|
+
5. **Measure first.** Before flipping a switch that fans out to real
|
|
185
|
+
users / resources, COUNT the burst it will release (how many are
|
|
186
|
+
queued right now). Benchmark before and after.
|
|
187
|
+
6. **Proportionality.** Apply the pattern the component's real load
|
|
188
|
+
needs. A 20-user internal tool does not get a broker and sharding --
|
|
189
|
+
that is a defect too. Neither a bottleneck nor gold-plating. Size to
|
|
190
|
+
the number in the spec (see `concurrency-scale`).
|
|
191
|
+
|
|
192
|
+
## When the numbers actually grow (the escalation ladder)
|
|
193
|
+
|
|
194
|
+
Cheapest-first; each step only when volume demands it (details +
|
|
195
|
+
sizing in `concurrency-scale`):
|
|
196
|
+
|
|
197
|
+
1. Production WSGI server with a thread pool (removes the single-thread
|
|
198
|
+
web bottleneck -- highest return for lowest effort).
|
|
199
|
+
2. Connection pool (stop opening/closing a connection per operation).
|
|
200
|
+
3. **Queue-in-the-DB**: a "pending jobs" table on the DB you already run
|
|
201
|
+
-- gives enqueue, retry-with-wait, restart-survival, and models the
|
|
202
|
+
per-key lock as a ROW you lock, with zero new services (~80% of a
|
|
203
|
+
broker's benefit at ~20% of the operational cost).
|
|
204
|
+
4. Split API vs Worker; move the in-process lock to a distributed lock
|
|
205
|
+
(DB `GET_LOCK()` / Redis) with a single active consumer per key.
|
|
206
|
+
5. A real broker (RabbitMQ / Pub-Sub) with a dead-letter queue and
|
|
207
|
+
partitioning by the lock key; a circuit breaker so one failing
|
|
208
|
+
dependency does not take the rest down.
|
|
209
|
+
|
|
210
|
+
The expensive part of distributing is NOT the broker -- it is preserving
|
|
211
|
+
the per-key serialization/order invariant once the lock leaves the
|
|
212
|
+
process. Do not reach for a broker to solve a problem a per-run cap and a
|
|
213
|
+
queue-in-the-DB already solve.
|
package/dist/version.d.ts
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Yujin Forge CLI version. Kept in sync with package.json by the npm
|
|
3
3
|
* "version" lifecycle (scripts/sync_version.mjs) so the two never drift.
|
|
4
4
|
*/
|
|
5
|
-
export declare const VERSION = "1.0.
|
|
5
|
+
export declare const VERSION = "1.0.90";
|
|
6
6
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -52,3 +52,14 @@ the stated concurrency.
|
|
|
52
52
|
|
|
53
53
|
Record the target concurrency and the tier decisions in the spec so
|
|
54
54
|
they are traceable and can be revisited when the number changes.
|
|
55
|
+
|
|
56
|
+
## 4. Then harden each component (see `performance-hardening`)
|
|
57
|
+
|
|
58
|
+
This doctrine sizes the ARCHITECTURE. Sizing the tiers right does not
|
|
59
|
+
save a component that holds a transaction open across a network call,
|
|
60
|
+
runs a batch in one monolithic commit, hammers a non-idempotent third
|
|
61
|
+
party, or grids a table with `LIKE '%q%'`. The construction-time
|
|
62
|
+
pattern library -- commit-per-chunk, send-outside-transaction, deadlock
|
|
63
|
+
retry, backpressure caps, server-side pagination, idempotency at the
|
|
64
|
+
boundary, TTL cleanup, heartbeat/watchdog -- lives in
|
|
65
|
+
`performance-hardening`. Size here; harden there.
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# Performance & scale hardening doctrine
|
|
2
|
+
|
|
3
|
+
Every load-bearing component MUST be built for its load in its FIRST
|
|
4
|
+
version -- not hardened after it falls over in production. The brain
|
|
5
|
+
defaults to the happy path: it writes the loop, calls the API, renders
|
|
6
|
+
the grid, and stops. That is exactly how a component ships that
|
|
7
|
+
saturates the DB, hammers a third party, or deadlocks under
|
|
8
|
+
concurrency. This doctrine is the pattern library that closes that gap.
|
|
9
|
+
|
|
10
|
+
Apply the patterns that the component's SHAPE triggers (below). This is
|
|
11
|
+
the RUNTIME / construction complement to `concurrency-scale` (which
|
|
12
|
+
sizes the ARCHITECTURE during relevamiento). Size the tiers there;
|
|
13
|
+
harden each component here. Every rule below is battle-tested in a
|
|
14
|
+
production HITL system, not theory.
|
|
15
|
+
|
|
16
|
+
## How to use this: match the trigger, apply the pattern
|
|
17
|
+
|
|
18
|
+
### Trigger 1 -- a component that WRITES to a DB in a loop or batch
|
|
19
|
+
|
|
20
|
+
- **Commit per chunk, never one monolithic transaction.** A single
|
|
21
|
+
final commit over the whole run holds row/gap locks on every touched
|
|
22
|
+
table until the end, grows the undo log unbounded, and lets ONE
|
|
23
|
+
deadlock roll back the ENTIRE run. Commit per item (or per small
|
|
24
|
+
chunk): locks release continuously, a failure isolates to one item,
|
|
25
|
+
and the run becomes resumable.
|
|
26
|
+
- **Never hold a transaction open across a slow side-effect (network /
|
|
27
|
+
external call).** Use the TWO-TRANSACTION pattern: TX1 = change state
|
|
28
|
+
+ set an "in-flight" marker -> COMMIT (release locks) -> perform the
|
|
29
|
+
external call with NO transaction open -> TX2 = record the result +
|
|
30
|
+
clear the marker -> COMMIT. A crash between the COMMIT and the call
|
|
31
|
+
must be recoverable: build a sweeper that finds rows with the marker
|
|
32
|
+
set but no result, past a TTL, and re-queues them.
|
|
33
|
+
- **Deadlock retry with backoff + jitter.** Classify transient errors
|
|
34
|
+
(MariaDB 1213 deadlock / 1205 lock-wait-timeout; SQLite "database is
|
|
35
|
+
locked") and retry the transaction with exponential backoff + jitter
|
|
36
|
+
(~6 attempts is a good default). Two variants: retry on a FRESH
|
|
37
|
+
connection (top-level request) vs retry a pure-DB sub-transaction on
|
|
38
|
+
the ALREADY-OPEN connection. **INVARIANT: never put an external call
|
|
39
|
+
inside a retry body** -- a redo would double-send / double-charge.
|
|
40
|
+
- **Reserve -> confirm -> return for consumable resources.** Do not
|
|
41
|
+
decrement-then-hope-to-refund. Reserve at arming, confirm on success,
|
|
42
|
+
return on reject. The decrement MUST be a single atomic UPDATE guarded
|
|
43
|
+
so the balance never goes negative (multiple workers touch the same
|
|
44
|
+
row).
|
|
45
|
+
- **Atomic counter / compare-and-swap, not read-modify-write, across
|
|
46
|
+
threads or workers.** `UPDATE ... SET flag=1 WHERE id=? AND flag=0`;
|
|
47
|
+
if rowcount=0 you lost the race, back off. Guard in-process shared
|
|
48
|
+
state with a lock (a multi-thread WSGI server runs N handlers).
|
|
49
|
+
|
|
50
|
+
### Trigger 2 -- a component that CALLS a third party (API / provider / webhook)
|
|
51
|
+
|
|
52
|
+
- **Assume NOT idempotent until proven.** Never auto-retry a
|
|
53
|
+
non-idempotent write. A firm reject goes to a dead-end + manual path,
|
|
54
|
+
NOT a burst of retries at a real person or resource. Gate any
|
|
55
|
+
auto-refire behind provider-confirmed idempotency OR a read-back that
|
|
56
|
+
proves the prior call did not land.
|
|
57
|
+
- **Idempotency at the boundary = a UNIQUE constraint.** Dedupe by the
|
|
58
|
+
provider's real message/transaction id ON WRITE, not just on read.
|
|
59
|
+
Webhooks arrive "at least once" and may re-deliver even after your
|
|
60
|
+
ACK; an unconditional insert turns one event into six rows.
|
|
61
|
+
- **ACK first, work after.** Answer the webhook immediately (202) and do
|
|
62
|
+
the slow work (notices, downstream calls) in a background thread /
|
|
63
|
+
queue. A slow response makes the provider time out and re-send ->
|
|
64
|
+
amplification (one real incident: 62 inbound images -> 36 real).
|
|
65
|
+
- **Pace outbound explicitly.** Per-recipient minimum interval; a
|
|
66
|
+
time-window gate (do not contact outside allowed hours; exempt urgent
|
|
67
|
+
paths); a per-run quota + an inter-item sleep placed OUTSIDE any open
|
|
68
|
+
transaction. Respect the provider's rate limits as first-class config.
|
|
69
|
+
- **Timeout-then-escalate; never wait forever.** After a bounded wait,
|
|
70
|
+
escalate or advance so nothing stays stuck. Advance on the FIRST of
|
|
71
|
+
several signals (read / reply / timeout), idempotently.
|
|
72
|
+
- **The external latency and the human ARE the dominant time cost** --
|
|
73
|
+
far above the DB. Do not block the main thread on them; optimizing a
|
|
74
|
+
query that was never the bottleneck buys nothing.
|
|
75
|
+
|
|
76
|
+
### Trigger 3 -- a background loop / scheduler / sweeper
|
|
77
|
+
|
|
78
|
+
- **Backpressure: cap dispatches per pass.** A mass dump ("run it all
|
|
79
|
+
now") without a cap is a stampede that collides into deadlocks. A
|
|
80
|
+
configurable cap per pass drains the backlog in controlled batches and
|
|
81
|
+
keeps each pass under the watchdog threshold.
|
|
82
|
+
- **One unit per key per pass** when exclusivity/order matters (e.g. one
|
|
83
|
+
message per recipient per sweep) so the loop never fires two at the
|
|
84
|
+
same target.
|
|
85
|
+
- **Isolate each sweep in its own transaction + its own retry.** Do not
|
|
86
|
+
bundle several sweeps under one commit -- one deadlock then starves all
|
|
87
|
+
of them for the whole interval.
|
|
88
|
+
- **Locks with a configurable TTL, keyed CORRECTLY.** An eternal lock is
|
|
89
|
+
a bug (a silent responder blocks the target forever). Key the lock by
|
|
90
|
+
the thing that must serialize (per type / per recipient / per delivery
|
|
91
|
+
target). Stamp each run with the SERVER-INSTANCE token so a recycled
|
|
92
|
+
PID after a restart does not leave the lock hung.
|
|
93
|
+
- **Singletons start EXACTLY once**, guarded against double-start (a dev
|
|
94
|
+
reloader or two threads can otherwise launch two schedulers -> doubled
|
|
95
|
+
cron and doubled sends).
|
|
96
|
+
|
|
97
|
+
### Trigger 4 -- a list / grid / export endpoint
|
|
98
|
+
|
|
99
|
+
- **Server-side pagination**: LIMIT/OFFSET with an envelope
|
|
100
|
+
`{items, total, page, pages}` and a page_size cap. Filter the WHOLE set
|
|
101
|
+
server-side, THEN paginate -- never filter only the visible page.
|
|
102
|
+
- **Export fetches the complete filtered/ordered set** via an explicit
|
|
103
|
+
flag (e.g. `?todo=1`), never by scraping the visible DOM page. The
|
|
104
|
+
page_size cap still protects the screen.
|
|
105
|
+
- Never load the whole world into the client to render a view.
|
|
106
|
+
|
|
107
|
+
### Trigger 5 -- a query on a table that GROWS
|
|
108
|
+
|
|
109
|
+
- **Index every column that grows and is filtered / joined / sorted.** A
|
|
110
|
+
UNIQUE constraint IS an index -- do not double-index its leading
|
|
111
|
+
column, and do not "fix" a scan that already rides a UNIQUE.
|
|
112
|
+
- **Never wrap an indexed column in a function inside WHERE / GROUP BY /
|
|
113
|
+
ORDER BY** (`substr(ts,1,10)=today`, `TRIM(col)=''`, `ORDER BY CASE`).
|
|
114
|
+
It disables the index. Rewrite to a RANGE (`ts >= day AND ts < next`),
|
|
115
|
+
normalize on write, or persist the sort key in its own indexed column.
|
|
116
|
+
- **`LIKE '%q%'` (leading wildcard) is unindexable by a B-tree.** Use an
|
|
117
|
+
anchored prefix `q%` (indexable, "starts with") or a real full-text
|
|
118
|
+
index (MariaDB FULLTEXT / SQLite FTS). Free-text search at scale wants
|
|
119
|
+
an inverted index, not SQL LIKE.
|
|
120
|
+
- **Engine portability: short indexed columns are VARCHAR(191), not
|
|
121
|
+
TEXT.** SQLite indexes TEXT happily and hides the bug; MariaDB errors
|
|
122
|
+
1071 "key too long" (and FK-on-TEXT errno 150). Test against the REAL
|
|
123
|
+
engine before prod (a pre-push barrier catches "key too long" before
|
|
124
|
+
the VM does).
|
|
125
|
+
|
|
126
|
+
### Trigger 6 -- memory / large payloads / long work
|
|
127
|
+
|
|
128
|
+
- **Do not load a whole file / dataset into memory** when you can stream
|
|
129
|
+
in chunks. Know the memory peak of each heavy operation and do not let
|
|
130
|
+
two heavy runs (import + browser bot + batch) overlap on one machine.
|
|
131
|
+
- **Compress large payloads (gzip)** and raise size caps ONLY on the
|
|
132
|
+
specific admin endpoint, not globally.
|
|
133
|
+
- **Long-running work -> background job + poll**, never inside the HTTP
|
|
134
|
+
request (that is a structural 504). Return `202 + id`; the client polls
|
|
135
|
+
a status endpoint. Guard it idempotently: a second start while one is
|
|
136
|
+
alive returns the SAME run.
|
|
137
|
+
|
|
138
|
+
### Trigger 7 -- anything that accumulates (tables, files, logs)
|
|
139
|
+
|
|
140
|
+
- **Every fast-growing table and disk accumulation needs a TTL cleanup**,
|
|
141
|
+
configurable, default OFF (never silent data loss). Bounded size keeps
|
|
142
|
+
queries fast and disk healthy. Beware: cleanup that deletes DB rows
|
|
143
|
+
often forgets the files they point to -- purge both.
|
|
144
|
+
|
|
145
|
+
### Trigger 8 -- observability of the hardening itself
|
|
146
|
+
|
|
147
|
+
- **Instrument retries.** Leave a trace when a retry saved a transaction,
|
|
148
|
+
so residual deadlocks are countable ("the retry doing its job, not an
|
|
149
|
+
error"), not invisible.
|
|
150
|
+
- **Heartbeat per service + heartbeat MID-PASS.** A long pass over a big
|
|
151
|
+
backlog exceeds the liveness threshold and trips a FALSE "hung" alarm;
|
|
152
|
+
refresh the heartbeat every N items inside the loop (zero DB, safe
|
|
153
|
+
mid-transaction).
|
|
154
|
+
- **A watchdog that RELAUNCHES the hung thread, not just logs** -- and
|
|
155
|
+
reports honestly whether it revived a dead thread or the thread is
|
|
156
|
+
alive-but-stuck (which needs a restart it cannot do from inside).
|
|
157
|
+
- **Dedupe repeated alerts within a window** (one incident emitted 891
|
|
158
|
+
identical alerts, one per pass). Exclude genuinely unique events from
|
|
159
|
+
dedupe.
|
|
160
|
+
- **Load-test as an acceptance gate.** Re-run the realistic peak and
|
|
161
|
+
compare deadlocks / orphaned handoffs / false-watchdogs / throughput
|
|
162
|
+
p50/p95 against a baseline; a hardening change does not "close" until
|
|
163
|
+
the numbers hold. You cannot tune what you do not measure -- and the
|
|
164
|
+
volumetry you assume is not the volumetry you have until measured.
|
|
165
|
+
|
|
166
|
+
## The cross-cutting laws (apply to EVERY threshold you add)
|
|
167
|
+
|
|
168
|
+
1. **Cero hardcode.** Every threshold -- cap, retry count, backoff, TTL,
|
|
169
|
+
timeout, poll interval, quota, sleep -- lives in config with a sane
|
|
170
|
+
clamp/floor. The DEFAULT preserves current behavior; a dangerous
|
|
171
|
+
feature is born INERT (0 / off) and hot-applied. A garbage value
|
|
172
|
+
collapses to the safe behavior, never to the risky one.
|
|
173
|
+
2. **Producer/consumer symmetry.** When you change a producer, audit ALL
|
|
174
|
+
its consumers BEFORE the commit. Clamp the same value identically on
|
|
175
|
+
save (producer) and on read (consumer). Preview (dry-run) must walk
|
|
176
|
+
the EXACT same set and same locks as real execution -- the count shown
|
|
177
|
+
equals the count processed.
|
|
178
|
+
3. **Never an external / network call inside an open transaction or a
|
|
179
|
+
retry.** This single rule prevents most lock storms AND all
|
|
180
|
+
double-sends / double-charges.
|
|
181
|
+
4. **Fail-closed (cero dano silencioso).** On ambiguous or corrupt input,
|
|
182
|
+
collapse to the safe branch (manual review, no-op), never the
|
|
183
|
+
irreversible one. Lists are born empty, switches born off.
|
|
184
|
+
5. **Measure first.** Before flipping a switch that fans out to real
|
|
185
|
+
users / resources, COUNT the burst it will release (how many are
|
|
186
|
+
queued right now). Benchmark before and after.
|
|
187
|
+
6. **Proportionality.** Apply the pattern the component's real load
|
|
188
|
+
needs. A 20-user internal tool does not get a broker and sharding --
|
|
189
|
+
that is a defect too. Neither a bottleneck nor gold-plating. Size to
|
|
190
|
+
the number in the spec (see `concurrency-scale`).
|
|
191
|
+
|
|
192
|
+
## When the numbers actually grow (the escalation ladder)
|
|
193
|
+
|
|
194
|
+
Cheapest-first; each step only when volume demands it (details +
|
|
195
|
+
sizing in `concurrency-scale`):
|
|
196
|
+
|
|
197
|
+
1. Production WSGI server with a thread pool (removes the single-thread
|
|
198
|
+
web bottleneck -- highest return for lowest effort).
|
|
199
|
+
2. Connection pool (stop opening/closing a connection per operation).
|
|
200
|
+
3. **Queue-in-the-DB**: a "pending jobs" table on the DB you already run
|
|
201
|
+
-- gives enqueue, retry-with-wait, restart-survival, and models the
|
|
202
|
+
per-key lock as a ROW you lock, with zero new services (~80% of a
|
|
203
|
+
broker's benefit at ~20% of the operational cost).
|
|
204
|
+
4. Split API vs Worker; move the in-process lock to a distributed lock
|
|
205
|
+
(DB `GET_LOCK()` / Redis) with a single active consumer per key.
|
|
206
|
+
5. A real broker (RabbitMQ / Pub-Sub) with a dead-letter queue and
|
|
207
|
+
partitioning by the lock key; a circuit breaker so one failing
|
|
208
|
+
dependency does not take the rest down.
|
|
209
|
+
|
|
210
|
+
The expensive part of distributing is NOT the broker -- it is preserving
|
|
211
|
+
the per-key serialization/order invariant once the lock leaves the
|
|
212
|
+
process. Do not reach for a broker to solve a problem a per-run cap and a
|
|
213
|
+
queue-in-the-DB already solve.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nac3/forge-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.90",
|
|
4
4
|
"description": "Yujin Forge -- voice-first NAC-3 React development framework. CLI + chat panel + spec ingest + 10-format document reader + voice loop.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": "Pablo Kuschnirof <pablo@rpaforce.com>",
|