@futdevpro/fsm-dynamo 1.16.5 → 1.16.9

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 (28) hide show
  1. package/.github/workflows/main.yml +433 -427
  2. package/__documentations/2026-06-22-dyfm-error-extends-error.md +109 -0
  3. package/build/_enums/error-status.enum.d.ts +28 -0
  4. package/build/_enums/error-status.enum.d.ts.map +1 -0
  5. package/build/_enums/error-status.enum.js +32 -0
  6. package/build/_enums/error-status.enum.js.map +1 -0
  7. package/build/_models/control-models/error.control-model.d.ts +11 -2
  8. package/build/_models/control-models/error.control-model.d.ts.map +1 -1
  9. package/build/_models/control-models/error.control-model.js +56 -3
  10. package/build/_models/control-models/error.control-model.js.map +1 -1
  11. package/build/_models/data-models/errors.data-model.d.ts +13 -0
  12. package/build/_models/data-models/errors.data-model.d.ts.map +1 -1
  13. package/build/_models/data-models/errors.data-model.js +13 -0
  14. package/build/_models/data-models/errors.data-model.js.map +1 -1
  15. package/build/_models/data-models/metadata.data-model.d.ts +16 -0
  16. package/build/_models/data-models/metadata.data-model.d.ts.map +1 -1
  17. package/build/_models/data-models/metadata.data-model.js +37 -20
  18. package/build/_models/data-models/metadata.data-model.js.map +1 -1
  19. package/build/index.d.ts +1 -0
  20. package/build/index.d.ts.map +1 -1
  21. package/build/index.js +1 -0
  22. package/build/index.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/_enums/error-status.enum.ts +30 -0
  25. package/src/_models/control-models/error.control-model.ts +67 -8
  26. package/src/_models/data-models/errors.data-model.ts +17 -0
  27. package/src/_models/data-models/metadata.data-model.ts +49 -24
  28. package/src/index.ts +1 -0
package/build/index.d.ts CHANGED
@@ -32,6 +32,7 @@ export * from './_enums/basic-property-type.enum';
32
32
  export * from './_enums/data-model-type.enum';
33
33
  export * from './_enums/environment-flag.enum';
34
34
  export * from './_enums/error-level.enum';
35
+ export * from './_enums/error-status.enum';
35
36
  export * from './_enums/log-style.enum';
36
37
  export * from './_enums/server-connection-status.enum';
37
38
  export * from './_enums/http/http-call-type.enum';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gDAAgD,CAAC;AAI/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wCAAwC,CAAC;AAGvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AAKjD,cAAc,0DAA0D,CAAC;AACzE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uEAAuE,CAAC;AAGtF,cAAc,iEAAiE,CAAC;AAChF,cAAc,0DAA0D,CAAC;AACzE,cAAc,wDAAwD,CAAC;AAGvE,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAG1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,sCAAsC,CAAC;AACrD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wDAAwD,CAAC;AACvE,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gEAAgE,CAAC;AAC/E,cAAc,4DAA4D,CAAC;AAG3E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gDAAgD,CAAC;AAI/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wCAAwC,CAAC;AAGvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AAKjD,cAAc,0DAA0D,CAAC;AACzE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uEAAuE,CAAC;AAGtF,cAAc,iEAAiE,CAAC;AAChF,cAAc,0DAA0D,CAAC;AACzE,cAAc,wDAAwD,CAAC;AAGvE,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAG1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,sCAAsC,CAAC;AACrD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wDAAwD,CAAC;AACvE,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gEAAgE,CAAC;AAC/E,cAAc,4DAA4D,CAAC;AAG3E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC"}
package/build/index.js CHANGED
@@ -41,6 +41,7 @@ tslib_1.__exportStar(require("./_enums/basic-property-type.enum"), exports);
41
41
  tslib_1.__exportStar(require("./_enums/data-model-type.enum"), exports);
42
42
  tslib_1.__exportStar(require("./_enums/environment-flag.enum"), exports);
43
43
  tslib_1.__exportStar(require("./_enums/error-level.enum"), exports);
44
+ tslib_1.__exportStar(require("./_enums/error-status.enum"), exports);
44
45
  tslib_1.__exportStar(require("./_enums/log-style.enum"), exports);
45
46
  tslib_1.__exportStar(require("./_enums/server-connection-status.enum"), exports);
46
47
  // enums/HTTP
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,cAAc;AACd,wBAAwB;AACxB,oFAA0D;AAC1D,wFAA8D;AAC9D,yFAA+D;AAC/D,iFAAuD;AACvD,+EAAqD;AAErD,oBAAoB;AACpB,0EAAgD;AAChD,0EAAgD;AAChD,yEAA+C;AAC/C,0FAAgE;AAChE,sFAA4D;AAC5D,wEAA8C;AAC9C,+EAAqD;AACrD,gFAAsD;AACtD,2EAAiD;AACjD,gFAAsD;AACtD,0EAAgD;AAChD,2EAAiD;AACjD,gFAAsD;AACtD,yEAA+C;AAC/C,0FAAgE;AAChE,8EAAoD;AACpD,yEAA+C;AAE/C,yBAAyB;AACzB,oFAA0D;AAC1D,8EAAoD;AACpD,gFAAsD;AACtD,sFAA4D;AAC5D,iFAAuD;AAEvD,2BAA2B;AAC3B,yFAA+D;AAC/D,gFAAsD;AACtD,yFAA+D;AAG/D,QAAQ;AACR,4EAAkD;AAClD,wEAA8C;AAC9C,yEAA+C;AAC/C,oEAA0C;AAC1C,kEAAwC;AACxC,iFAAuD;AAEvD,aAAa;AACb,4EAAkD;AAClD,6EAAmD;AACnD,gFAAsD;AAEtD,aAAa;AACb,yEAA+C;AAC/C,mEAAyC;AACzC,2EAAiD;AAGjD,SAAS;AACT,wBAAwB;AACxB,mGAAyE;AACzE,sGAA4E;AAC5E,uFAA6D;AAC7D,sFAA4D;AAC5D,6FAAmE;AACnE,+FAAqE;AACrE,gHAAsF;AAEtF,6BAA6B;AAC7B,0GAAgF;AAChF,mGAAyE;AACzE,iGAAuE;AAEvE,qBAAqB;AACrB,kFAAwD;AACxD,oFAA0D;AAE1D,oBAAoB;AACpB,oFAA0D;AAC1D,wFAA8D;AAC9D,+EAAqD;AACrD,uFAA6D;AAC7D,wFAA8D;AAC9D,sFAA4D;AAC5D,uFAA6D;AAC7D,iGAAuE;AACvE,iFAAuD;AAEvD,gCAAgC;AAChC,yGAA+E;AAC/E,qGAA2E;AAE3E,eAAe;AACf,yEAA+C;AAC/C,uEAA6C;AAC7C,yEAA+C;AAC/C,uEAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,cAAc;AACd,wBAAwB;AACxB,oFAA0D;AAC1D,wFAA8D;AAC9D,yFAA+D;AAC/D,iFAAuD;AACvD,+EAAqD;AAErD,oBAAoB;AACpB,0EAAgD;AAChD,0EAAgD;AAChD,yEAA+C;AAC/C,0FAAgE;AAChE,sFAA4D;AAC5D,wEAA8C;AAC9C,+EAAqD;AACrD,gFAAsD;AACtD,2EAAiD;AACjD,gFAAsD;AACtD,0EAAgD;AAChD,2EAAiD;AACjD,gFAAsD;AACtD,yEAA+C;AAC/C,0FAAgE;AAChE,8EAAoD;AACpD,yEAA+C;AAE/C,yBAAyB;AACzB,oFAA0D;AAC1D,8EAAoD;AACpD,gFAAsD;AACtD,sFAA4D;AAC5D,iFAAuD;AAEvD,2BAA2B;AAC3B,yFAA+D;AAC/D,gFAAsD;AACtD,yFAA+D;AAG/D,QAAQ;AACR,4EAAkD;AAClD,wEAA8C;AAC9C,yEAA+C;AAC/C,oEAA0C;AAC1C,qEAA2C;AAC3C,kEAAwC;AACxC,iFAAuD;AAEvD,aAAa;AACb,4EAAkD;AAClD,6EAAmD;AACnD,gFAAsD;AAEtD,aAAa;AACb,yEAA+C;AAC/C,mEAAyC;AACzC,2EAAiD;AAGjD,SAAS;AACT,wBAAwB;AACxB,mGAAyE;AACzE,sGAA4E;AAC5E,uFAA6D;AAC7D,sFAA4D;AAC5D,6FAAmE;AACnE,+FAAqE;AACrE,gHAAsF;AAEtF,6BAA6B;AAC7B,0GAAgF;AAChF,mGAAyE;AACzE,iGAAuE;AAEvE,qBAAqB;AACrB,kFAAwD;AACxD,oFAA0D;AAE1D,oBAAoB;AACpB,oFAA0D;AAC1D,wFAA8D;AAC9D,+EAAqD;AACrD,uFAA6D;AAC7D,wFAA8D;AAC9D,sFAA4D;AAC5D,uFAA6D;AAC7D,iGAAuE;AACvE,iFAAuD;AAEvD,gCAAgC;AAChC,yGAA+E;AAC/E,qGAA2E;AAE3E,eAAe;AACf,yEAA+C;AAC/C,uEAA6C;AAC7C,yEAA+C;AAC/C,uEAA6C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/fsm-dynamo",
3
- "version": "01.16.5",
3
+ "version": "01.16.9",
4
4
  "description": "Full Stack Model Collection for Dynamic (NodeJS-Typescript) Framework called Dynamo, by Future Development Ltd.",
5
5
  "DyBu_settings": {
6
6
  "packageType": "full-stack-package",
@@ -0,0 +1,30 @@
1
+
2
+
3
+
4
+ /**
5
+ * Lifecycle status of a persisted error record (`DyFM_Errors`).
6
+ *
7
+ * Drives the error-tracking / fix-attempt / auto-reactivation flow:
8
+ * - `active` — open error, not yet claimed fixed (default for every new record).
9
+ * - `investigating` — someone is actively working on it (optional intermediate;
10
+ * set manually, not auto-transitioned).
11
+ * - `fixed` — a fix was claimed (`recordFixAttempt` / `resolveError`); the record
12
+ * is KEPT (never deleted) so a later recurrence can be detected.
13
+ * - `regressed` — a NEW occurrence arrived carrying a version `>=` the last
14
+ * claimed-fix version → the fix did not hold → auto-reactivated by `recordError`.
15
+ * Treated as "active again" on the dashboard, but distinguishable from a
16
+ * never-fixed `active` so the next investigator knows a prior hypothesis failed.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * if (errorRecord.status === DyFM_ErrorStatus.regressed) {
21
+ * // a shipped fix did not hold — re-investigate, do not trust "fixed in vN"
22
+ * }
23
+ * ```
24
+ */
25
+ export enum DyFM_ErrorStatus {
26
+ active = 'active',
27
+ investigating = 'investigating',
28
+ fixed = 'fixed',
29
+ regressed = 'regressed',
30
+ }
@@ -73,9 +73,26 @@ export interface DyFM_Error_Settings {
73
73
  __v?: number;
74
74
  }
75
75
 
76
- export class DyFM_Error extends DyFM_Metadata {
76
+ export class DyFM_Error extends Error implements DyFM_Metadata {
77
77
  readonly flag = DyFM_errorFlag + '-v2';
78
78
 
79
+ // ─── DyFM_Metadata mezok (implements DyFM_Metadata) ─────────────────────────
80
+ // A DyFM_Error mostantol `extends Error` — igy `err instanceof Error === true`, es a
81
+ // Node 22 strict unhandled-rejection riport a VALODI throw-site stacket mutatja (a korabbi
82
+ // `extends DyFM_Metadata` mellett a bare-object Promise rejection veletlen specet blame-elt).
83
+ // A metadata-orokles helyett strukturalisan IMPLEMENTALJUK a DyFM_Metadata-t: a mezoket itt
84
+ // deklaraljuk, az init-logikat a constructorban a DyFM_Metadata.applyMetadata statikus vegzi.
85
+ _id?: string;
86
+ __created?: Date;
87
+ __createdBy?: string;
88
+ __lastModified?: Date;
89
+ __lastModifiedBy?: string;
90
+ __v?: number;
91
+ _deleted?: Date;
92
+ _deletedBy?: string;
93
+ _archived?: Date;
94
+ _originalId?: string;
95
+
79
96
  _errorCode?: string;
80
97
  _errorCodes?: string[] = [];
81
98
 
@@ -105,7 +122,8 @@ export class DyFM_Error extends DyFM_Metadata {
105
122
  errors?: DyFM_AnyError[] = [];
106
123
  validationErrors?: DyFM_ValidationErrors;
107
124
 
108
- stack?: string;
125
+ // `stack` az Error-bol jon (`extends Error`) — itt NEM deklaraljuk ujra, kulonben a
126
+ // class-field-init undefined-dal felulirna a natancsolt stacket a super() utan.
109
127
  __localStack?: string;
110
128
 
111
129
  level?: DyFM_ErrorLevel;
@@ -117,15 +135,32 @@ export class DyFM_Error extends DyFM_Metadata {
117
135
  constructor(
118
136
  set?: DyFM_Error_Settings
119
137
  ) {
120
- super(
121
- set,
122
- {
123
- issuer: set?.issuerService ??
124
- (set?.error as DyFM_Error)?.___issuerService ??
138
+ // az Error-constructort a nyers input-message-dzsel hivjuk (a vegleges _message kesobb all
139
+ // ossze; a natancsolt Error.message-et a constructor vegen allitjuk ra) — super() KOTELEZOEN
140
+ // az elso utasitas, a this- erintese elott.
141
+ super(set?.message);
142
+
143
+ // a natancsolt Error.name -> 'DyFM_Error' (non-enumerable, hogy a szerializalt shape ne
144
+ // valtozzon): igy a logok / Node-riport "DyFM_Error: ..."-kent jelennek meg, nem "Error: ...".
145
+ Object.defineProperty(this, 'name', {
146
+ value: 'DyFM_Error',
147
+ enumerable: false,
148
+ writable: true,
149
+ configurable: true,
150
+ });
151
+
152
+ // metadata-init: a korabbi `super(set, { issuer })` helyett (a super most az Error),
153
+ // target-alapon a DyFM_Metadata.applyMetadata statikuson at.
154
+ DyFM_Metadata.applyMetadata(
155
+ this,
156
+ set,
157
+ {
158
+ issuer: set?.issuerService ??
159
+ (set?.error as DyFM_Error)?.___issuerService ??
125
160
  DyFM_error_defaults.issuerService,
126
161
  }
127
162
  );
128
-
163
+
129
164
  try {
130
165
  if (!set) {
131
166
  set = {};
@@ -408,6 +443,30 @@ export class DyFM_Error extends DyFM_Metadata {
408
443
  Boolean(error) && (error instanceof Error || Boolean(Object.keys(error).length))
409
444
  );
410
445
 
446
+ // ─── `extends Error` szerializacios igazitasok ─────────────────────────
447
+ // A natancsolt Error a stacket NON-ENUMERABLE own-property-kent kezeli, igy a
448
+ // `{ ...this }` spread (getErrorsFlat) es a JSON.stringify (getParsable / perzisztalas)
449
+ // elejtene. Enumerable-kent ujradefinialjuk, hogy a szerializacios utak megtartsak.
450
+ if (this.stack !== undefined) {
451
+ Object.defineProperty(this, 'stack', {
452
+ value: this.stack,
453
+ enumerable: true,
454
+ writable: true,
455
+ configurable: true,
456
+ });
457
+ }
458
+
459
+ // A natancsolt Error.message-et a sajat _message-unkre allitjuk (NON-enumerable marad,
460
+ // hogy a szerializalt shape valtozatlan legyen — a forras tovabbra is a _message): igy a
461
+ // `(err as Error).message` fogyasztok ES a Node 22 unhandled-rejection printer a valodi
462
+ // uzenetet latjak, nem ures stringet.
463
+ Object.defineProperty(this, 'message', {
464
+ value: this._message ?? this.__userMessage ?? '',
465
+ enumerable: false,
466
+ writable: true,
467
+ configurable: true,
468
+ });
469
+
411
470
  DyFM_Object.safeCleanObject(this);
412
471
 
413
472
  if (!set.allowCircular) {
@@ -1,5 +1,6 @@
1
1
  import { DyFM_DataModel_Params } from '../control-models/data-model-params.control-model';
2
2
  import { DyFM_ErrorLevel } from '../../_enums/error-level.enum';
3
+ import { DyFM_ErrorStatus } from '../../_enums/error-status.enum';
3
4
  import { DyFM_Error } from '../control-models/error.control-model';
4
5
  import { DyFM_Metadata } from './metadata.data-model';
5
6
 
@@ -26,6 +27,8 @@ export interface DyFM_Errors_FixAttempt {
26
27
  version: string;
27
28
  /** Plain-text root-cause hypothesis that justified the fix. */
28
29
  hypothesis: string;
30
+ /** Optional free-form notes attached to this fix attempt (links, context, follow-ups). */
31
+ notes?: string;
29
32
  }
30
33
 
31
34
  /**
@@ -81,6 +84,18 @@ export class DyFM_Errors<T_Error extends DyFM_Error> extends DyFM_Metadata {
81
84
 
82
85
  // ─── Fix tracking (append-only audit + quick-access aliases) ────────────────
83
86
 
87
+ /**
88
+ * Lifecycle status. `active` for every new record; `fixed` after a claimed
89
+ * fix (`recordFixAttempt` / `resolveError`, record KEPT not deleted);
90
+ * `regressed` when `recordError` sees a recurrence with a version >= the last
91
+ * claimed-fix version (auto-reactivation); `investigating` set manually.
92
+ * Mirrors `regressedAfterFix` (kept for back-compat): `regressed` ⇔ `regressedAfterFix=true`.
93
+ */
94
+ status?: DyFM_ErrorStatus = DyFM_ErrorStatus.active;
95
+
96
+ /** Optional free-form notes captured on a soft-resolve (`resolveError`). */
97
+ resolutionNotes?: string;
98
+
84
99
  /**
85
100
  * Append-only audit log of fix attempts. New entries via `recordFixAttempt`
86
101
  * on the data-service. Never overwritten / pruned — full hypothesis history
@@ -149,6 +164,8 @@ export const DyFM_errors_dataParams: DyFM_DataModel_Params<DyFM_Errors<DyFM_Erro
149
164
  duplications: { type: 'DyNTS_Error[]' },
150
165
  category: { type: 'string' },
151
166
 
167
+ status: { type: 'string' },
168
+ resolutionNotes: { type: 'string' },
152
169
  fixAttempts: { type: 'any' },
153
170
  lastFixedAt: { type: 'Date' },
154
171
  lastFixedBy: { type: 'string' },
@@ -31,53 +31,78 @@ export class DyFM_Metadata {
31
31
 
32
32
  constructor(
33
33
  set?: DyFM_Metadata,
34
- init?: {
34
+ init?: {
35
35
  id?: string,
36
36
  issuer: string,
37
37
  },
38
38
  ){
39
+ // a metadata-init logika a statikus applyMetadata-ban el — igy a `DyFM_Error extends Error`
40
+ // (ami NEM tudja super()-rel hivni ezt a constructort) ugyanezt a target-en futtathatja.
41
+ DyFM_Metadata.applyMetadata(this, set, init);
42
+ }
43
+
44
+ /**
45
+ * Applies the metadata fields onto a target object.
46
+ *
47
+ * Kiemelt statikus a constructor-torzsbol: a viselkedes BIT-RE azonos a korabbi
48
+ * constructorral, de igy a `DyFM_Error extends Error implements DyFM_Metadata` is meg
49
+ * tudja hivni (az Error-bol orokolt osztaly nem tud `super(set, init)`-tel a
50
+ * DyFM_Metadata constructorba lepni, ezert target-alapon kell elerni az init-logikat).
51
+ *
52
+ * @param target - The object the metadata fields are written onto (`this`)
53
+ * @param set - The source metadata to copy from
54
+ * @param init - Optional id + issuer defaults
55
+ */
56
+ static applyMetadata(
57
+ target: DyFM_Metadata,
58
+ set?: DyFM_Metadata,
59
+ init?: {
60
+ id?: string,
61
+ issuer: string,
62
+ },
63
+ ): void {
39
64
  if (set) {
40
- if (!set._id && set._id !== undefined) {
65
+ if (!set._id && set._id !== undefined) {
41
66
  set._id = undefined;
42
67
  }
43
68
 
44
- this._id = set._id;
45
- this.__created = set.__created;
46
- this.__createdBy = set.__createdBy;
47
- this.__lastModified = set.__lastModified;
48
- this.__lastModifiedBy = set.__lastModifiedBy;
49
- this.__v = set.__v;
69
+ target._id = set._id;
70
+ target.__created = set.__created;
71
+ target.__createdBy = set.__createdBy;
72
+ target.__lastModified = set.__lastModified;
73
+ target.__lastModifiedBy = set.__lastModifiedBy;
74
+ target.__v = set.__v;
50
75
 
51
76
  if (set._archived) {
52
- this._archived = set._archived;
53
- this._originalId = set._originalId;
77
+ target._archived = set._archived;
78
+ target._originalId = set._originalId;
54
79
  }
55
80
  }
56
81
 
57
- if (!this.__created) {
58
- this.__created = new Date();
82
+ if (!target.__created) {
83
+ target.__created = new Date();
59
84
  }
60
85
 
61
- if (!this.__lastModified) {
62
- this.__lastModified = new Date();
86
+ if (!target.__lastModified) {
87
+ target.__lastModified = new Date();
63
88
  }
64
-
65
- if (!this.__v) {
66
- this.__v = 0;
89
+
90
+ if (!target.__v) {
91
+ target.__v = 0;
67
92
  }
68
-
93
+
69
94
  if (init) {
70
- if (!this._id && init?.id) {
71
- this._id = init.id;
95
+ if (!target._id && init?.id) {
96
+ target._id = init.id;
72
97
  }
73
98
 
74
99
  if (init?.issuer) {
75
- if (!this.__createdBy) {
76
- this.__createdBy = init.issuer;
100
+ if (!target.__createdBy) {
101
+ target.__createdBy = init.issuer;
77
102
  }
78
103
 
79
- if (!this.__lastModifiedBy) {
80
- this.__lastModifiedBy = init.issuer;
104
+ if (!target.__lastModifiedBy) {
105
+ target.__lastModifiedBy = init.issuer;
81
106
  }
82
107
  }
83
108
  }
package/src/index.ts CHANGED
@@ -44,6 +44,7 @@ export * from './_enums/basic-property-type.enum';
44
44
  export * from './_enums/data-model-type.enum';
45
45
  export * from './_enums/environment-flag.enum';
46
46
  export * from './_enums/error-level.enum';
47
+ export * from './_enums/error-status.enum';
47
48
  export * from './_enums/log-style.enum';
48
49
  export * from './_enums/server-connection-status.enum';
49
50