@openvtc/trust-tasks 0.17.9 → 0.17.10
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/CHANGELOG.md +45 -0
- package/dist/persona/correlation/analyze/1.0/payload.d.ts +82 -0
- package/dist/persona/correlation/analyze/1.0/payload.d.ts.map +1 -1
- package/dist/persona/correlation/analyze/1.0/payload.js +34 -0
- package/dist/persona/correlation/analyze/1.0/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/persona/correlation/analyze/1.0/payload.ts +48 -0
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,51 @@ The package versions over **its own API** — what a consumer compiles against
|
|
|
11
11
|
not over `SPEC.md`. Below 1.0 a breaking change bumps the leading non-zero
|
|
12
12
|
component.
|
|
13
13
|
|
|
14
|
+
## 0.17.10 — 2026-09-09
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **persona/correlation**: Say whether a link crosses a part of the holder's life (#408)
|
|
20
|
+
|
|
21
|
+
Additive members on `persona/correlation/analyze/1.0`: `crossesFacets` and
|
|
22
|
+
`facetIds` on a finding, `facetId` on each `sharedWith` location.
|
|
23
|
+
|
|
24
|
+
**Severity is how linkable. Facets are whether the holder minds.** Two axes,
|
|
25
|
+
kept apart, because collapsing them loses whichever one is inconvenient.
|
|
26
|
+
|
|
27
|
+
`severity` is a fact about the value and the proof beneath it — a credential
|
|
28
|
+
presented whole links every verifier that sees it, and that is true whatever
|
|
29
|
+
the holder intended. `crossesFacets` is a fact about the holder's own
|
|
30
|
+
arrangement: a work email in every work profile is linkage they built on
|
|
31
|
+
purpose, and a consumer that alarms on it teaches them to dismiss alarms,
|
|
32
|
+
which costs them the one that matters.
|
|
33
|
+
|
|
34
|
+
So the spec is explicit that a maintainer **MUST NOT** reduce severity, or
|
|
35
|
+
omit a finding, because a linkage stays inside one facet. The linkage is
|
|
36
|
+
real either way — two verifiers who see both profiles link the holder
|
|
37
|
+
regardless of which part of their own life they filed each under — and a
|
|
38
|
+
severity that softened on intent would report a false all-clear about
|
|
39
|
+
something a counterparty can still do.
|
|
40
|
+
|
|
41
|
+
**Absent is unknown, not false.** A maintainer without facets omits all
|
|
42
|
+
three rather than emitting `crossesFacets: false`, because `false` asserts
|
|
43
|
+
the holder keeps these identities in one part of their life and an
|
|
44
|
+
implementation with no facets has made no such finding.
|
|
45
|
+
|
|
46
|
+
**An unarranged profile is not a second facet.** `crossesFacets` is true
|
|
47
|
+
only where two or more DISTINCT facets appear; otherwise every holder who
|
|
48
|
+
has arranged one part of their life and not the rest would see a crossing on
|
|
49
|
+
everything they own.
|
|
50
|
+
|
|
51
|
+
**No facet NAME crosses.** The caller holds the facet records and can
|
|
52
|
+
resolve an identifier; the name is the member of a facet worth protecting,
|
|
53
|
+
and this response already carries the linkage map.
|
|
54
|
+
|
|
55
|
+
Bindings regenerated per CONTRIBUTING-SPECS.md; no version bump or CHANGELOG
|
|
56
|
+
entry (release-plz owns both). Rust workspace builds --all-features;
|
|
57
|
+
trust-tasks-ts 79/79.
|
|
58
|
+
|
|
14
59
|
## 0.17.9 — 2026-09-09
|
|
15
60
|
|
|
16
61
|
|
|
@@ -48,6 +48,10 @@ export interface PersonaCorrelationAnalyzeResponsePayload {
|
|
|
48
48
|
* @maxItems 64
|
|
49
49
|
*/
|
|
50
50
|
disclosedTo?: string[];
|
|
51
|
+
/**
|
|
52
|
+
* The facet the profile at this location belongs to. Absent where it belongs to none, which is a real and common state rather than a gap — most profiles are unarranged until someone arranges them, and a consumer MUST NOT read absence as a facet of its own.
|
|
53
|
+
*/
|
|
54
|
+
facetId?: Ulid;
|
|
51
55
|
}[];
|
|
52
56
|
/**
|
|
53
57
|
* Plain-language cause. A severity with no explanation is a warning a holder learns to dismiss.
|
|
@@ -101,6 +105,16 @@ export interface PersonaCorrelationAnalyzeResponsePayload {
|
|
|
101
105
|
"useDifferentValue" | "reissueCredentialToThisDid" | "correlateDeliberately" | "proceedAndRecord",
|
|
102
106
|
"useDifferentValue" | "reissueCredentialToThisDid" | "correlateDeliberately" | "proceedAndRecord"
|
|
103
107
|
];
|
|
108
|
+
/**
|
|
109
|
+
* Whether this linkage spans two or more of the holder's facets — parts of their life they have said belong apart. **A second axis, not a restatement of `severity`.** `severity` says how strongly a disclosure would link the holder, which is a fact about provenance and proof rung and is true whatever the holder intended; this says whether the holder would mind. A value shared between two profiles in the SAME facet is linkage the holder arranged on purpose — a work email in every work profile — and a consumer that alarmed on it teaches people to dismiss the alarm. A value shared ACROSS facets is the finding worth raising. True only when two or more DISTINCT facets appear among `sharedWith`: a profile belonging to no facet is unarranged, not a second facet, and contributes nothing here. Absent when the maintainer does not implement facets.
|
|
110
|
+
*/
|
|
111
|
+
crossesFacets?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* The distinct facets this linkage touches, so a consumer can name them — "Work and Home share your mobile number" is a sentence a holder can act on, where "a value is shared" is not. Identifiers rather than names, on the same reasoning as every other member here: the caller already holds the facet records and a name repeated on the wire is a second copy to keep correct.
|
|
114
|
+
*
|
|
115
|
+
* @maxItems 64
|
|
116
|
+
*/
|
|
117
|
+
facetIds?: Ulid[];
|
|
104
118
|
}[];
|
|
105
119
|
ext?: Ext;
|
|
106
120
|
}
|
|
@@ -206,6 +220,10 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
206
220
|
readonly type: "string";
|
|
207
221
|
};
|
|
208
222
|
};
|
|
223
|
+
readonly facetId: {
|
|
224
|
+
readonly $ref: "#/$defs/Ulid";
|
|
225
|
+
readonly description: "The facet the profile at this location belongs to. Absent where it belongs to none, which is a real and common state rather than a gap — most profiles are unarranged until someone arranges them, and a consumer MUST NOT read absence as a facet of its own.";
|
|
226
|
+
};
|
|
209
227
|
};
|
|
210
228
|
};
|
|
211
229
|
};
|
|
@@ -223,6 +241,19 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
223
241
|
};
|
|
224
242
|
readonly description: "What the holder can actually do. Naming reissueCredentialToThisDid matters more than it looks: without it, a holder told 'this links your personas' has no action but to abandon the attribute, and the honest fix — a credential re-issued against the persona actually using it — stays invisible unless the analysis names it.";
|
|
225
243
|
};
|
|
244
|
+
readonly crossesFacets: {
|
|
245
|
+
readonly type: "boolean";
|
|
246
|
+
readonly description: "Whether this linkage spans two or more of the holder's facets — parts of their life they have said belong apart. **A second axis, not a restatement of `severity`.** `severity` says how strongly a disclosure would link the holder, which is a fact about provenance and proof rung and is true whatever the holder intended; this says whether the holder would mind. A value shared between two profiles in the SAME facet is linkage the holder arranged on purpose — a work email in every work profile — and a consumer that alarmed on it teaches people to dismiss the alarm. A value shared ACROSS facets is the finding worth raising. True only when two or more DISTINCT facets appear among `sharedWith`: a profile belonging to no facet is unarranged, not a second facet, and contributes nothing here. Absent when the maintainer does not implement facets.";
|
|
247
|
+
};
|
|
248
|
+
readonly facetIds: {
|
|
249
|
+
readonly type: "array";
|
|
250
|
+
readonly maxItems: 64;
|
|
251
|
+
readonly uniqueItems: true;
|
|
252
|
+
readonly items: {
|
|
253
|
+
readonly $ref: "#/$defs/Ulid";
|
|
254
|
+
};
|
|
255
|
+
readonly description: "The distinct facets this linkage touches, so a consumer can name them — \"Work and Home share your mobile number\" is a sentence a holder can act on, where \"a value is shared\" is not. Identifiers rather than names, on the same reasoning as every other member here: the caller already holds the facet records and a name repeated on the wire is a second copy to keep correct.";
|
|
256
|
+
};
|
|
226
257
|
};
|
|
227
258
|
};
|
|
228
259
|
};
|
|
@@ -315,6 +346,10 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
|
315
346
|
readonly type: "string";
|
|
316
347
|
};
|
|
317
348
|
};
|
|
349
|
+
readonly facetId: {
|
|
350
|
+
readonly $ref: "#/$defs/Ulid";
|
|
351
|
+
readonly description: "The facet the profile at this location belongs to. Absent where it belongs to none, which is a real and common state rather than a gap — most profiles are unarranged until someone arranges them, and a consumer MUST NOT read absence as a facet of its own.";
|
|
352
|
+
};
|
|
318
353
|
};
|
|
319
354
|
};
|
|
320
355
|
};
|
|
@@ -332,6 +367,19 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
|
332
367
|
};
|
|
333
368
|
readonly description: "What the holder can actually do. Naming reissueCredentialToThisDid matters more than it looks: without it, a holder told 'this links your personas' has no action but to abandon the attribute, and the honest fix — a credential re-issued against the persona actually using it — stays invisible unless the analysis names it.";
|
|
334
369
|
};
|
|
370
|
+
readonly crossesFacets: {
|
|
371
|
+
readonly type: "boolean";
|
|
372
|
+
readonly description: "Whether this linkage spans two or more of the holder's facets — parts of their life they have said belong apart. **A second axis, not a restatement of `severity`.** `severity` says how strongly a disclosure would link the holder, which is a fact about provenance and proof rung and is true whatever the holder intended; this says whether the holder would mind. A value shared between two profiles in the SAME facet is linkage the holder arranged on purpose — a work email in every work profile — and a consumer that alarmed on it teaches people to dismiss the alarm. A value shared ACROSS facets is the finding worth raising. True only when two or more DISTINCT facets appear among `sharedWith`: a profile belonging to no facet is unarranged, not a second facet, and contributes nothing here. Absent when the maintainer does not implement facets.";
|
|
373
|
+
};
|
|
374
|
+
readonly facetIds: {
|
|
375
|
+
readonly type: "array";
|
|
376
|
+
readonly maxItems: 64;
|
|
377
|
+
readonly uniqueItems: true;
|
|
378
|
+
readonly items: {
|
|
379
|
+
readonly $ref: "#/$defs/Ulid";
|
|
380
|
+
};
|
|
381
|
+
readonly description: "The distinct facets this linkage touches, so a consumer can name them — \"Work and Home share your mobile number\" is a sentence a holder can act on, where \"a value is shared\" is not. Identifiers rather than names, on the same reasoning as every other member here: the caller already holds the facet records and a name repeated on the wire is a second copy to keep correct.";
|
|
382
|
+
};
|
|
335
383
|
};
|
|
336
384
|
};
|
|
337
385
|
};
|
|
@@ -467,6 +515,10 @@ export declare const SPEC: {
|
|
|
467
515
|
readonly type: "string";
|
|
468
516
|
};
|
|
469
517
|
};
|
|
518
|
+
readonly facetId: {
|
|
519
|
+
readonly $ref: "#/$defs/Ulid";
|
|
520
|
+
readonly description: "The facet the profile at this location belongs to. Absent where it belongs to none, which is a real and common state rather than a gap — most profiles are unarranged until someone arranges them, and a consumer MUST NOT read absence as a facet of its own.";
|
|
521
|
+
};
|
|
470
522
|
};
|
|
471
523
|
};
|
|
472
524
|
};
|
|
@@ -484,6 +536,19 @@ export declare const SPEC: {
|
|
|
484
536
|
};
|
|
485
537
|
readonly description: "What the holder can actually do. Naming reissueCredentialToThisDid matters more than it looks: without it, a holder told 'this links your personas' has no action but to abandon the attribute, and the honest fix — a credential re-issued against the persona actually using it — stays invisible unless the analysis names it.";
|
|
486
538
|
};
|
|
539
|
+
readonly crossesFacets: {
|
|
540
|
+
readonly type: "boolean";
|
|
541
|
+
readonly description: "Whether this linkage spans two or more of the holder's facets — parts of their life they have said belong apart. **A second axis, not a restatement of `severity`.** `severity` says how strongly a disclosure would link the holder, which is a fact about provenance and proof rung and is true whatever the holder intended; this says whether the holder would mind. A value shared between two profiles in the SAME facet is linkage the holder arranged on purpose — a work email in every work profile — and a consumer that alarmed on it teaches people to dismiss the alarm. A value shared ACROSS facets is the finding worth raising. True only when two or more DISTINCT facets appear among `sharedWith`: a profile belonging to no facet is unarranged, not a second facet, and contributes nothing here. Absent when the maintainer does not implement facets.";
|
|
542
|
+
};
|
|
543
|
+
readonly facetIds: {
|
|
544
|
+
readonly type: "array";
|
|
545
|
+
readonly maxItems: 64;
|
|
546
|
+
readonly uniqueItems: true;
|
|
547
|
+
readonly items: {
|
|
548
|
+
readonly $ref: "#/$defs/Ulid";
|
|
549
|
+
};
|
|
550
|
+
readonly description: "The distinct facets this linkage touches, so a consumer can name them — \"Work and Home share your mobile number\" is a sentence a holder can act on, where \"a value is shared\" is not. Identifiers rather than names, on the same reasoning as every other member here: the caller already holds the facet records and a name repeated on the wire is a second copy to keep correct.";
|
|
551
|
+
};
|
|
487
552
|
};
|
|
488
553
|
};
|
|
489
554
|
};
|
|
@@ -587,6 +652,10 @@ export declare const RESPONSE_SPEC: {
|
|
|
587
652
|
readonly type: "string";
|
|
588
653
|
};
|
|
589
654
|
};
|
|
655
|
+
readonly facetId: {
|
|
656
|
+
readonly $ref: "#/$defs/Ulid";
|
|
657
|
+
readonly description: "The facet the profile at this location belongs to. Absent where it belongs to none, which is a real and common state rather than a gap — most profiles are unarranged until someone arranges them, and a consumer MUST NOT read absence as a facet of its own.";
|
|
658
|
+
};
|
|
590
659
|
};
|
|
591
660
|
};
|
|
592
661
|
};
|
|
@@ -604,6 +673,19 @@ export declare const RESPONSE_SPEC: {
|
|
|
604
673
|
};
|
|
605
674
|
readonly description: "What the holder can actually do. Naming reissueCredentialToThisDid matters more than it looks: without it, a holder told 'this links your personas' has no action but to abandon the attribute, and the honest fix — a credential re-issued against the persona actually using it — stays invisible unless the analysis names it.";
|
|
606
675
|
};
|
|
676
|
+
readonly crossesFacets: {
|
|
677
|
+
readonly type: "boolean";
|
|
678
|
+
readonly description: "Whether this linkage spans two or more of the holder's facets — parts of their life they have said belong apart. **A second axis, not a restatement of `severity`.** `severity` says how strongly a disclosure would link the holder, which is a fact about provenance and proof rung and is true whatever the holder intended; this says whether the holder would mind. A value shared between two profiles in the SAME facet is linkage the holder arranged on purpose — a work email in every work profile — and a consumer that alarmed on it teaches people to dismiss the alarm. A value shared ACROSS facets is the finding worth raising. True only when two or more DISTINCT facets appear among `sharedWith`: a profile belonging to no facet is unarranged, not a second facet, and contributes nothing here. Absent when the maintainer does not implement facets.";
|
|
679
|
+
};
|
|
680
|
+
readonly facetIds: {
|
|
681
|
+
readonly type: "array";
|
|
682
|
+
readonly maxItems: 64;
|
|
683
|
+
readonly uniqueItems: true;
|
|
684
|
+
readonly items: {
|
|
685
|
+
readonly $ref: "#/$defs/Ulid";
|
|
686
|
+
};
|
|
687
|
+
readonly description: "The distinct facets this linkage touches, so a consumer can name them — \"Work and Home share your mobile number\" is a sentence a holder can act on, where \"a value is shared\" is not. Identifiers rather than names, on the same reasoning as every other member here: the caller already holds the facet records and a name repeated on the wire is a second copy to keep correct.";
|
|
688
|
+
};
|
|
607
689
|
};
|
|
608
690
|
};
|
|
609
691
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../../src/persona/correlation/analyze/1.0/payload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAGzF;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C;;OAEG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,SAAS,CAAC;QAChB,SAAS,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AACD;;GAEG;AACH,MAAM,WAAW,wCAAwC;IACvD;;OAEG;IACH,QAAQ,EAAE;QACR,WAAW,CAAC,EAAE,IAAI,CAAC;QACnB,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC;QACzB;;;;WAIG;QACH,UAAU,CAAC,EAAE;YACX,SAAS,CAAC,EAAE,IAAI,CAAC;YACjB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB;;eAEG;YACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../../src/persona/correlation/analyze/1.0/payload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAGzF;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C;;OAEG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB;;OAEG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,SAAS,CAAC;QAChB,SAAS,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AACD;;GAEG;AACH,MAAM,WAAW,wCAAwC;IACvD;;OAEG;IACH,QAAQ,EAAE;QACR,WAAW,CAAC,EAAE,IAAI,CAAC;QACnB,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC;QACzB;;;;WAIG;QACH,UAAU,CAAC,EAAE;YACX,SAAS,CAAC,EAAE,IAAI,CAAC;YACjB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB;;eAEG;YACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;YACvB;;eAEG;YACH,OAAO,CAAC,EAAE,IAAI,CAAC;SAChB,EAAE,CAAC;QACJ;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;;;WAIG;QACH,QAAQ,EACJ,EAAE,GACF,CAAC,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB,CAAC,GACnG;YACE,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;SAClG,GACD;YACE,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;SAClG,GACD;YACE,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;SAClG,GACD;YACE,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;SAClG,GACD;YACE,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;SAClG,GACD;YACE,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;SAClG,GACD;YACE,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;YACjG,mBAAmB,GAAG,4BAA4B,GAAG,uBAAuB,GAAG,kBAAkB;SAClG,CAAC;QACN;;WAEG;QACH,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB;;;;WAIG;QACH,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;KACnB,EAAE,CAAC;IACJ,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED,kHAAkH;AAClH,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAEhD,2BAA2B;AAC3B,eAAO,MAAM,QAAQ,EAAG,6DAAsE,CAAC;AAE/F,mEAAmE;AACnE,MAAM,MAAM,OAAO,GAAG,gCAAgC,CAAC;AAEvD,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,EAAG,sEAA+E,CAAC;AAEjH,4EAA4E;AAC5E,MAAM,MAAM,QAAQ,GAAG,wCAAwC,CAAC;AAEhE;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoLjB,CAAC;AAEX,mEAAmE;AACnE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgJ1B,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOP,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOhB,CAAC"}
|
|
@@ -110,6 +110,10 @@ export const PAYLOAD_SCHEMA = {
|
|
|
110
110
|
"items": {
|
|
111
111
|
"type": "string"
|
|
112
112
|
}
|
|
113
|
+
},
|
|
114
|
+
"facetId": {
|
|
115
|
+
"$ref": "#/$defs/Ulid",
|
|
116
|
+
"description": "The facet the profile at this location belongs to. Absent where it belongs to none, which is a real and common state rather than a gap — most profiles are unarranged until someone arranges them, and a consumer MUST NOT read absence as a facet of its own."
|
|
113
117
|
}
|
|
114
118
|
}
|
|
115
119
|
}
|
|
@@ -132,6 +136,19 @@ export const PAYLOAD_SCHEMA = {
|
|
|
132
136
|
]
|
|
133
137
|
},
|
|
134
138
|
"description": "What the holder can actually do. Naming reissueCredentialToThisDid matters more than it looks: without it, a holder told 'this links your personas' has no action but to abandon the attribute, and the honest fix — a credential re-issued against the persona actually using it — stays invisible unless the analysis names it."
|
|
139
|
+
},
|
|
140
|
+
"crossesFacets": {
|
|
141
|
+
"type": "boolean",
|
|
142
|
+
"description": "Whether this linkage spans two or more of the holder's facets — parts of their life they have said belong apart. **A second axis, not a restatement of `severity`.** `severity` says how strongly a disclosure would link the holder, which is a fact about provenance and proof rung and is true whatever the holder intended; this says whether the holder would mind. A value shared between two profiles in the SAME facet is linkage the holder arranged on purpose — a work email in every work profile — and a consumer that alarmed on it teaches people to dismiss the alarm. A value shared ACROSS facets is the finding worth raising. True only when two or more DISTINCT facets appear among `sharedWith`: a profile belonging to no facet is unarranged, not a second facet, and contributes nothing here. Absent when the maintainer does not implement facets."
|
|
143
|
+
},
|
|
144
|
+
"facetIds": {
|
|
145
|
+
"type": "array",
|
|
146
|
+
"maxItems": 64,
|
|
147
|
+
"uniqueItems": true,
|
|
148
|
+
"items": {
|
|
149
|
+
"$ref": "#/$defs/Ulid"
|
|
150
|
+
},
|
|
151
|
+
"description": "The distinct facets this linkage touches, so a consumer can name them — \"Work and Home share your mobile number\" is a sentence a holder can act on, where \"a value is shared\" is not. Identifiers rather than names, on the same reasoning as every other member here: the caller already holds the facet records and a name repeated on the wire is a second copy to keep correct."
|
|
135
152
|
}
|
|
136
153
|
}
|
|
137
154
|
}
|
|
@@ -239,6 +256,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
239
256
|
"items": {
|
|
240
257
|
"type": "string"
|
|
241
258
|
}
|
|
259
|
+
},
|
|
260
|
+
"facetId": {
|
|
261
|
+
"$ref": "#/$defs/Ulid",
|
|
262
|
+
"description": "The facet the profile at this location belongs to. Absent where it belongs to none, which is a real and common state rather than a gap — most profiles are unarranged until someone arranges them, and a consumer MUST NOT read absence as a facet of its own."
|
|
242
263
|
}
|
|
243
264
|
}
|
|
244
265
|
}
|
|
@@ -261,6 +282,19 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
261
282
|
]
|
|
262
283
|
},
|
|
263
284
|
"description": "What the holder can actually do. Naming reissueCredentialToThisDid matters more than it looks: without it, a holder told 'this links your personas' has no action but to abandon the attribute, and the honest fix — a credential re-issued against the persona actually using it — stays invisible unless the analysis names it."
|
|
285
|
+
},
|
|
286
|
+
"crossesFacets": {
|
|
287
|
+
"type": "boolean",
|
|
288
|
+
"description": "Whether this linkage spans two or more of the holder's facets — parts of their life they have said belong apart. **A second axis, not a restatement of `severity`.** `severity` says how strongly a disclosure would link the holder, which is a fact about provenance and proof rung and is true whatever the holder intended; this says whether the holder would mind. A value shared between two profiles in the SAME facet is linkage the holder arranged on purpose — a work email in every work profile — and a consumer that alarmed on it teaches people to dismiss the alarm. A value shared ACROSS facets is the finding worth raising. True only when two or more DISTINCT facets appear among `sharedWith`: a profile belonging to no facet is unarranged, not a second facet, and contributes nothing here. Absent when the maintainer does not implement facets."
|
|
289
|
+
},
|
|
290
|
+
"facetIds": {
|
|
291
|
+
"type": "array",
|
|
292
|
+
"maxItems": 64,
|
|
293
|
+
"uniqueItems": true,
|
|
294
|
+
"items": {
|
|
295
|
+
"$ref": "#/$defs/Ulid"
|
|
296
|
+
},
|
|
297
|
+
"description": "The distinct facets this linkage touches, so a consumer can name them — \"Work and Home share your mobile number\" is a sentence a holder can act on, where \"a value is shared\" is not. Identifiers rather than names, on the same reasoning as every other member here: the caller already holds the facet records and a name repeated on the wire is a second copy to keep correct."
|
|
264
298
|
}
|
|
265
299
|
}
|
|
266
300
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../../../src/persona/correlation/analyze/1.0/payload.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../../../src/persona/correlation/analyze/1.0/payload.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -51,6 +51,10 @@ export interface PersonaCorrelationAnalyzeResponsePayload {
|
|
|
51
51
|
* @maxItems 64
|
|
52
52
|
*/
|
|
53
53
|
disclosedTo?: string[];
|
|
54
|
+
/**
|
|
55
|
+
* The facet the profile at this location belongs to. Absent where it belongs to none, which is a real and common state rather than a gap — most profiles are unarranged until someone arranges them, and a consumer MUST NOT read absence as a facet of its own.
|
|
56
|
+
*/
|
|
57
|
+
facetId?: Ulid;
|
|
54
58
|
}[];
|
|
55
59
|
/**
|
|
56
60
|
* Plain-language cause. A severity with no explanation is a warning a holder learns to dismiss.
|
|
@@ -113,6 +117,16 @@ export interface PersonaCorrelationAnalyzeResponsePayload {
|
|
|
113
117
|
"useDifferentValue" | "reissueCredentialToThisDid" | "correlateDeliberately" | "proceedAndRecord",
|
|
114
118
|
"useDifferentValue" | "reissueCredentialToThisDid" | "correlateDeliberately" | "proceedAndRecord"
|
|
115
119
|
];
|
|
120
|
+
/**
|
|
121
|
+
* Whether this linkage spans two or more of the holder's facets — parts of their life they have said belong apart. **A second axis, not a restatement of `severity`.** `severity` says how strongly a disclosure would link the holder, which is a fact about provenance and proof rung and is true whatever the holder intended; this says whether the holder would mind. A value shared between two profiles in the SAME facet is linkage the holder arranged on purpose — a work email in every work profile — and a consumer that alarmed on it teaches people to dismiss the alarm. A value shared ACROSS facets is the finding worth raising. True only when two or more DISTINCT facets appear among `sharedWith`: a profile belonging to no facet is unarranged, not a second facet, and contributes nothing here. Absent when the maintainer does not implement facets.
|
|
122
|
+
*/
|
|
123
|
+
crossesFacets?: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* The distinct facets this linkage touches, so a consumer can name them — "Work and Home share your mobile number" is a sentence a holder can act on, where "a value is shared" is not. Identifiers rather than names, on the same reasoning as every other member here: the caller already holds the facet records and a name repeated on the wire is a second copy to keep correct.
|
|
126
|
+
*
|
|
127
|
+
* @maxItems 64
|
|
128
|
+
*/
|
|
129
|
+
facetIds?: Ulid[];
|
|
116
130
|
}[];
|
|
117
131
|
ext?: Ext;
|
|
118
132
|
}
|
|
@@ -236,6 +250,10 @@ export const PAYLOAD_SCHEMA = {
|
|
|
236
250
|
"items": {
|
|
237
251
|
"type": "string"
|
|
238
252
|
}
|
|
253
|
+
},
|
|
254
|
+
"facetId": {
|
|
255
|
+
"$ref": "#/$defs/Ulid",
|
|
256
|
+
"description": "The facet the profile at this location belongs to. Absent where it belongs to none, which is a real and common state rather than a gap — most profiles are unarranged until someone arranges them, and a consumer MUST NOT read absence as a facet of its own."
|
|
239
257
|
}
|
|
240
258
|
}
|
|
241
259
|
}
|
|
@@ -258,6 +276,19 @@ export const PAYLOAD_SCHEMA = {
|
|
|
258
276
|
]
|
|
259
277
|
},
|
|
260
278
|
"description": "What the holder can actually do. Naming reissueCredentialToThisDid matters more than it looks: without it, a holder told 'this links your personas' has no action but to abandon the attribute, and the honest fix — a credential re-issued against the persona actually using it — stays invisible unless the analysis names it."
|
|
279
|
+
},
|
|
280
|
+
"crossesFacets": {
|
|
281
|
+
"type": "boolean",
|
|
282
|
+
"description": "Whether this linkage spans two or more of the holder's facets — parts of their life they have said belong apart. **A second axis, not a restatement of `severity`.** `severity` says how strongly a disclosure would link the holder, which is a fact about provenance and proof rung and is true whatever the holder intended; this says whether the holder would mind. A value shared between two profiles in the SAME facet is linkage the holder arranged on purpose — a work email in every work profile — and a consumer that alarmed on it teaches people to dismiss the alarm. A value shared ACROSS facets is the finding worth raising. True only when two or more DISTINCT facets appear among `sharedWith`: a profile belonging to no facet is unarranged, not a second facet, and contributes nothing here. Absent when the maintainer does not implement facets."
|
|
283
|
+
},
|
|
284
|
+
"facetIds": {
|
|
285
|
+
"type": "array",
|
|
286
|
+
"maxItems": 64,
|
|
287
|
+
"uniqueItems": true,
|
|
288
|
+
"items": {
|
|
289
|
+
"$ref": "#/$defs/Ulid"
|
|
290
|
+
},
|
|
291
|
+
"description": "The distinct facets this linkage touches, so a consumer can name them — \"Work and Home share your mobile number\" is a sentence a holder can act on, where \"a value is shared\" is not. Identifiers rather than names, on the same reasoning as every other member here: the caller already holds the facet records and a name repeated on the wire is a second copy to keep correct."
|
|
261
292
|
}
|
|
262
293
|
}
|
|
263
294
|
}
|
|
@@ -366,6 +397,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
366
397
|
"items": {
|
|
367
398
|
"type": "string"
|
|
368
399
|
}
|
|
400
|
+
},
|
|
401
|
+
"facetId": {
|
|
402
|
+
"$ref": "#/$defs/Ulid",
|
|
403
|
+
"description": "The facet the profile at this location belongs to. Absent where it belongs to none, which is a real and common state rather than a gap — most profiles are unarranged until someone arranges them, and a consumer MUST NOT read absence as a facet of its own."
|
|
369
404
|
}
|
|
370
405
|
}
|
|
371
406
|
}
|
|
@@ -388,6 +423,19 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
388
423
|
]
|
|
389
424
|
},
|
|
390
425
|
"description": "What the holder can actually do. Naming reissueCredentialToThisDid matters more than it looks: without it, a holder told 'this links your personas' has no action but to abandon the attribute, and the honest fix — a credential re-issued against the persona actually using it — stays invisible unless the analysis names it."
|
|
426
|
+
},
|
|
427
|
+
"crossesFacets": {
|
|
428
|
+
"type": "boolean",
|
|
429
|
+
"description": "Whether this linkage spans two or more of the holder's facets — parts of their life they have said belong apart. **A second axis, not a restatement of `severity`.** `severity` says how strongly a disclosure would link the holder, which is a fact about provenance and proof rung and is true whatever the holder intended; this says whether the holder would mind. A value shared between two profiles in the SAME facet is linkage the holder arranged on purpose — a work email in every work profile — and a consumer that alarmed on it teaches people to dismiss the alarm. A value shared ACROSS facets is the finding worth raising. True only when two or more DISTINCT facets appear among `sharedWith`: a profile belonging to no facet is unarranged, not a second facet, and contributes nothing here. Absent when the maintainer does not implement facets."
|
|
430
|
+
},
|
|
431
|
+
"facetIds": {
|
|
432
|
+
"type": "array",
|
|
433
|
+
"maxItems": 64,
|
|
434
|
+
"uniqueItems": true,
|
|
435
|
+
"items": {
|
|
436
|
+
"$ref": "#/$defs/Ulid"
|
|
437
|
+
},
|
|
438
|
+
"description": "The distinct facets this linkage touches, so a consumer can name them — \"Work and Home share your mobile number\" is a sentence a holder can act on, where \"a value is shared\" is not. Identifiers rather than names, on the same reasoning as every other member here: the caller already holds the facet records and a name repeated on the wire is a second copy to keep correct."
|
|
391
439
|
}
|
|
392
440
|
}
|
|
393
441
|
}
|