patchwork-os 1.2.0-beta.2.canary.768 → 1.2.0-beta.2.canary.769
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/privacy/dataPolicy.d.ts +24 -0
- package/dist/privacy/dataPolicy.js +24 -0
- package/dist/privacy/dataPolicy.js.map +1 -1
- package/dist/privacy/describeDestinations.d.ts +21 -0
- package/dist/privacy/describeDestinations.js +19 -0
- package/dist/privacy/describeDestinations.js.map +1 -1
- package/package.json +1 -1
|
@@ -93,6 +93,30 @@ export interface BoundaryOutcome {
|
|
|
93
93
|
* Rule 1 runs FIRST and is not reachable past. A destination cannot become
|
|
94
94
|
* cleared by redacting a category, because the classification is a property of
|
|
95
95
|
* the step as a whole — dropping a tag does not declassify what remains.
|
|
96
|
+
*
|
|
97
|
+
* ## The LOCAL_ONLY / REQUIRE_APPROVAL ordering inside rule 1
|
|
98
|
+
*
|
|
99
|
+
* The `LOCAL_ONLY` branch is tested BEFORE `approvable`, so on a registry with
|
|
100
|
+
* a permissive local destination — the shape the docs recommend — an
|
|
101
|
+
* `approvable: true` remote destination is never asked about for any
|
|
102
|
+
* classification it refuses. The operator set a control expecting to be asked
|
|
103
|
+
* and is REFUSED instead, because `LOCAL_ONLY` declines rather than rerouting.
|
|
104
|
+
*
|
|
105
|
+
* This is NOT the same as "REQUIRE_APPROVAL is unreachable", which is the
|
|
106
|
+
* stronger claim that has been written down elsewhere and is wrong: it fires
|
|
107
|
+
* whenever no local destination accepts the classification. Pinned in
|
|
108
|
+
* `__tests__/approvableIsInert.test.ts`, in both directions.
|
|
109
|
+
*
|
|
110
|
+
* Deliberately NOT reordered here. Note that `narrowest()` below ranks
|
|
111
|
+
* `REQUIRE_APPROVAL` (3) as stricter than `LOCAL_ONLY` (2), so rule 1 returns
|
|
112
|
+
* the LESS restrictive of its two candidates — which looks like a defect and
|
|
113
|
+
* may not be one. In EFFECT today `LOCAL_ONLY` is the stricter of the two,
|
|
114
|
+
* because it refuses outright and no approval unlocks it, while
|
|
115
|
+
* `REQUIRE_APPROVAL` can be unlocked by a human. The ranking describes intent,
|
|
116
|
+
* the runtime describes behaviour, and they disagree. Reordering would make
|
|
117
|
+
* live traffic newly approvable — an enforcement change, not a tidy-up — so it
|
|
118
|
+
* needs a decision, not a patch. `patchwork privacy destinations` reports the
|
|
119
|
+
* dead flag in the meantime.
|
|
96
120
|
*/
|
|
97
121
|
export declare function decideBoundary(policy: DataPolicy, destination: Destination, opts?: {
|
|
98
122
|
localDestinationAccepts?: boolean;
|
|
@@ -59,6 +59,30 @@ export function classificationRank(c) {
|
|
|
59
59
|
* Rule 1 runs FIRST and is not reachable past. A destination cannot become
|
|
60
60
|
* cleared by redacting a category, because the classification is a property of
|
|
61
61
|
* the step as a whole — dropping a tag does not declassify what remains.
|
|
62
|
+
*
|
|
63
|
+
* ## The LOCAL_ONLY / REQUIRE_APPROVAL ordering inside rule 1
|
|
64
|
+
*
|
|
65
|
+
* The `LOCAL_ONLY` branch is tested BEFORE `approvable`, so on a registry with
|
|
66
|
+
* a permissive local destination — the shape the docs recommend — an
|
|
67
|
+
* `approvable: true` remote destination is never asked about for any
|
|
68
|
+
* classification it refuses. The operator set a control expecting to be asked
|
|
69
|
+
* and is REFUSED instead, because `LOCAL_ONLY` declines rather than rerouting.
|
|
70
|
+
*
|
|
71
|
+
* This is NOT the same as "REQUIRE_APPROVAL is unreachable", which is the
|
|
72
|
+
* stronger claim that has been written down elsewhere and is wrong: it fires
|
|
73
|
+
* whenever no local destination accepts the classification. Pinned in
|
|
74
|
+
* `__tests__/approvableIsInert.test.ts`, in both directions.
|
|
75
|
+
*
|
|
76
|
+
* Deliberately NOT reordered here. Note that `narrowest()` below ranks
|
|
77
|
+
* `REQUIRE_APPROVAL` (3) as stricter than `LOCAL_ONLY` (2), so rule 1 returns
|
|
78
|
+
* the LESS restrictive of its two candidates — which looks like a defect and
|
|
79
|
+
* may not be one. In EFFECT today `LOCAL_ONLY` is the stricter of the two,
|
|
80
|
+
* because it refuses outright and no approval unlocks it, while
|
|
81
|
+
* `REQUIRE_APPROVAL` can be unlocked by a human. The ranking describes intent,
|
|
82
|
+
* the runtime describes behaviour, and they disagree. Reordering would make
|
|
83
|
+
* live traffic newly approvable — an enforcement change, not a tidy-up — so it
|
|
84
|
+
* needs a decision, not a patch. `patchwork privacy destinations` reports the
|
|
85
|
+
* dead flag in the meantime.
|
|
62
86
|
*/
|
|
63
87
|
export function decideBoundary(policy, destination, opts = {}) {
|
|
64
88
|
const cleared = destination.classifications.includes(policy.classification);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataPolicy.js","sourceRoot":"","sources":["../../src/privacy/dataPolicy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ;IACR,UAAU;IACV,UAAU;IACV,cAAc;IACd,YAAY;CACJ,CAAC;AAIX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAmB,UAAU,CAAC;AAEjE,MAAM,UAAU,kBAAkB,CAAC,CAAiB;IAClD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAoDD
|
|
1
|
+
{"version":3,"file":"dataPolicy.js","sourceRoot":"","sources":["../../src/privacy/dataPolicy.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,6 +49,27 @@ export interface DescribedDestination {
|
|
|
49
49
|
* the one that sends data an operator may not expect to leave the machine.
|
|
50
50
|
*/
|
|
51
51
|
sendsSensitiveOffMachine: boolean;
|
|
52
|
+
/** The operator set `approvable: true` on this destination. */
|
|
53
|
+
approvable: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* True when `approvable` is set and can NEVER fire.
|
|
56
|
+
*
|
|
57
|
+
* `decideBoundary` rule 1 short-circuits to `LOCAL_ONLY` before it tests
|
|
58
|
+
* `approvable`, whenever some registered LOCAL destination is cleared for the
|
|
59
|
+
* classification in question. So on a registry with a permissive local
|
|
60
|
+
* destination — the shape the docs recommend — an `approvable` remote
|
|
61
|
+
* destination is never asked about for ANY classification it refuses.
|
|
62
|
+
*
|
|
63
|
+
* Reported rather than fixed. The operator set a control expecting to be
|
|
64
|
+
* asked, and is refused instead, because `LOCAL_ONLY` declines rather than
|
|
65
|
+
* rerouting. A knob that silently does nothing is worse than an absent one:
|
|
66
|
+
* it reads as a control that is in place.
|
|
67
|
+
*
|
|
68
|
+
* Computed with the SAME predicate the runtime uses (`some local destination
|
|
69
|
+
* is cleared for this classification`), not a re-derivation — two notions of
|
|
70
|
+
* reachability would drift, and the drift would be silent and reassuring.
|
|
71
|
+
*/
|
|
72
|
+
approvalUnreachable: boolean;
|
|
52
73
|
note?: string;
|
|
53
74
|
noteReviewedOn?: string;
|
|
54
75
|
/** True when a note exists but carries no reviewed date, or an unparseable one. */
|
|
@@ -41,12 +41,20 @@ export function describeDestinations(destinations, driversFor, opts = {}) {
|
|
|
41
41
|
const sensitive = cleared.some((c) => classificationRank(c) >= classificationRank(SENSITIVE_FLOOR));
|
|
42
42
|
const dated = note?.noteReviewedOn !== undefined &&
|
|
43
43
|
!Number.isNaN(Date.parse(note.noteReviewedOn));
|
|
44
|
+
// Every classification this destination would REFUSE. If a local
|
|
45
|
+
// destination accepts all of them, rule 1 short-circuits every time and the
|
|
46
|
+
// `approvable` flag is dead.
|
|
47
|
+
const refused = ALL_CLASSIFICATIONS.filter((c) => !d.classifications.includes(c));
|
|
48
|
+
const localAcceptsAllRefused = refused.length > 0 &&
|
|
49
|
+
refused.every((c) => destinations.some((x) => x.type === "local" && x.classifications.includes(c)));
|
|
44
50
|
out.push({
|
|
45
51
|
id: d.id,
|
|
46
52
|
type: d.type,
|
|
47
53
|
cleared,
|
|
48
54
|
drivers: driversFor.get(d.id) ?? [],
|
|
49
55
|
sendsSensitiveOffMachine: d.type === "remote" && sensitive,
|
|
56
|
+
approvable: d.approvable === true,
|
|
57
|
+
approvalUnreachable: d.approvable === true && d.type === "remote" && localAcceptsAllRefused,
|
|
50
58
|
...(note?.note !== undefined && { note: note.note }),
|
|
51
59
|
...(note?.noteReviewedOn !== undefined && {
|
|
52
60
|
noteReviewedOn: note.noteReviewedOn,
|
|
@@ -106,6 +114,17 @@ export function formatDestinationsReport(described, opts = {}) {
|
|
|
106
114
|
L.push(` own choice, and the one that sends personal data to a`);
|
|
107
115
|
L.push(` third party's servers.`);
|
|
108
116
|
}
|
|
117
|
+
if (d.approvalUnreachable) {
|
|
118
|
+
// Louder than a note, because the operator believes a control is in
|
|
119
|
+
// place. Says what will happen INSTEAD — being refused is not what
|
|
120
|
+
// "approvable" led them to expect, and `LOCAL_ONLY` declines rather than
|
|
121
|
+
// rerouting, so nothing asks and nothing reaches the local destination
|
|
122
|
+
// either.
|
|
123
|
+
L.push(` ⚠ "approvable" is set here and can NEVER fire: a local`);
|
|
124
|
+
L.push(` destination accepts every classification this one refuses,`);
|
|
125
|
+
L.push(` so the decision short-circuits to LOCAL_ONLY first. You will`);
|
|
126
|
+
L.push(` be REFUSED, not asked.`);
|
|
127
|
+
}
|
|
109
128
|
if (d.note !== undefined) {
|
|
110
129
|
L.push(` note: ${d.note}`);
|
|
111
130
|
if (noteIsStale(d, opts)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describeDestinations.js","sourceRoot":"","sources":["../../src/privacy/describeDestinations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EACL,eAAe,EAEf,kBAAkB,GAEnB,MAAM,iBAAiB,CAAC;AAEzB,gFAAgF;AAChF,MAAM,eAAe,GAAmB,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"describeDestinations.js","sourceRoot":"","sources":["../../src/privacy/describeDestinations.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "patchwork-os",
|
|
3
|
-
"version": "1.2.0-beta.2.canary.
|
|
3
|
+
"version": "1.2.0-beta.2.canary.769",
|
|
4
4
|
"description": "Your personal AI runtime, local-first. Patchwork OS gives any AI model a consistent set of tools, YAML recipes, a delegation policy with approval queue, and a durable trace memory — all on your machine, all under your policy.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|