@wenathlan/saddle 1.8.15 → 1.8.16
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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +2 -2
- package/dist/release/evidence.d.ts +92 -0
- package/dist/release/evidence.d.ts.map +1 -0
- package/dist/release/evidence.js +148 -0
- package/dist/release/evidence.js.map +1 -0
- package/dist/scrape/robots.js +1 -1
- package/docs/artifactavailability.md +10 -0
- package/docs/enginearchitecture.md +2 -0
- package/docs/libraryapi.md +5 -1
- package/docs/releasenotes-1.8.15.md +4 -0
- package/docs/releasenotes-1.8.16.md +40 -0
- package/docs/repo-research-1.8.16.md +439 -0
- package/docs/repo-synthesis-1.8.16.md +56 -0
- package/docs/todo-1.8.16.md +5 -5
- package/docs/todo.md +2 -2
- package/extension/manifest.json +1 -1
- package/package.json +2 -1
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -4,14 +4,15 @@ export declare function mcpserver(options?: {}): {
|
|
|
4
4
|
description: string;
|
|
5
5
|
}[];
|
|
6
6
|
handle(request: any): Promise<{
|
|
7
|
+
error?: undefined;
|
|
7
8
|
jsonrpc: string;
|
|
8
9
|
id: any;
|
|
9
10
|
result: {
|
|
10
11
|
tools: any;
|
|
11
12
|
content?: undefined;
|
|
12
13
|
};
|
|
13
|
-
error?: undefined;
|
|
14
14
|
} | {
|
|
15
|
+
error?: undefined;
|
|
15
16
|
jsonrpc: string;
|
|
16
17
|
id: any;
|
|
17
18
|
result: {
|
|
@@ -21,7 +22,6 @@ export declare function mcpserver(options?: {}): {
|
|
|
21
22
|
text: string;
|
|
22
23
|
}[];
|
|
23
24
|
};
|
|
24
|
-
error?: undefined;
|
|
25
25
|
} | {
|
|
26
26
|
result?: undefined;
|
|
27
27
|
jsonrpc: string;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Release evidence evaluates caller-supplied metadata without fetching, signing,
|
|
3
|
+
* scanning, publishing or claiming an artifact has more assurance than proven.
|
|
4
|
+
*/
|
|
5
|
+
/** Normalizes an immutable, caller-supplied artifact evidence record. */
|
|
6
|
+
export declare function releaseevidence(input?: Record<string, unknown>): {
|
|
7
|
+
version: number;
|
|
8
|
+
kind: string;
|
|
9
|
+
status: string;
|
|
10
|
+
subjectdigest: string;
|
|
11
|
+
producer: string;
|
|
12
|
+
workflow: string;
|
|
13
|
+
verificationmethod: string;
|
|
14
|
+
verifiedat: number;
|
|
15
|
+
metadata: {
|
|
16
|
+
[x: string]: unknown;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
/** Evaluates evidence against a caller-owned policy and returns reason codes, never a trust claim. */
|
|
20
|
+
export declare function evaluateevidence(input?: Record<string, unknown>): {
|
|
21
|
+
version: number;
|
|
22
|
+
decision: string;
|
|
23
|
+
reasons: string[];
|
|
24
|
+
subjectdigest: string;
|
|
25
|
+
requiredkinds: string[];
|
|
26
|
+
evidence: {
|
|
27
|
+
version: number;
|
|
28
|
+
kind: string;
|
|
29
|
+
status: string;
|
|
30
|
+
subjectdigest: string;
|
|
31
|
+
producer: string;
|
|
32
|
+
workflow: string;
|
|
33
|
+
verificationmethod: string;
|
|
34
|
+
verifiedat: number;
|
|
35
|
+
metadata: {
|
|
36
|
+
[x: string]: unknown;
|
|
37
|
+
};
|
|
38
|
+
}[];
|
|
39
|
+
};
|
|
40
|
+
/** Builds a data-only readiness receipt for a release that a caller may later execute. */
|
|
41
|
+
export declare function releasereadiness(input?: Record<string, unknown>): {
|
|
42
|
+
version: number;
|
|
43
|
+
sourcetag: string;
|
|
44
|
+
manifestversions: Record<string, string>;
|
|
45
|
+
requiredgates: Record<string, string>;
|
|
46
|
+
artifactplandigest: string;
|
|
47
|
+
targets: string[];
|
|
48
|
+
signingstatus: string;
|
|
49
|
+
evaluation: {
|
|
50
|
+
version: number;
|
|
51
|
+
decision: string;
|
|
52
|
+
reasons: string[];
|
|
53
|
+
subjectdigest: string;
|
|
54
|
+
requiredkinds: string[];
|
|
55
|
+
evidence: {
|
|
56
|
+
version: number;
|
|
57
|
+
kind: string;
|
|
58
|
+
status: string;
|
|
59
|
+
subjectdigest: string;
|
|
60
|
+
producer: string;
|
|
61
|
+
workflow: string;
|
|
62
|
+
verificationmethod: string;
|
|
63
|
+
verifiedat: number;
|
|
64
|
+
metadata: {
|
|
65
|
+
[x: string]: unknown;
|
|
66
|
+
};
|
|
67
|
+
}[];
|
|
68
|
+
};
|
|
69
|
+
decision: string;
|
|
70
|
+
ready: boolean;
|
|
71
|
+
reasons: string[];
|
|
72
|
+
};
|
|
73
|
+
/** Maps an already-completed local checksum verification result to evidence records. */
|
|
74
|
+
export declare function evidencefromverification(input?: Record<string, unknown>): {
|
|
75
|
+
version: number;
|
|
76
|
+
releaseversion: string;
|
|
77
|
+
signingstatus: string;
|
|
78
|
+
evidence: {
|
|
79
|
+
version: number;
|
|
80
|
+
kind: string;
|
|
81
|
+
status: string;
|
|
82
|
+
subjectdigest: string;
|
|
83
|
+
producer: string;
|
|
84
|
+
workflow: string;
|
|
85
|
+
verificationmethod: string;
|
|
86
|
+
verifiedat: number;
|
|
87
|
+
metadata: {
|
|
88
|
+
[x: string]: unknown;
|
|
89
|
+
};
|
|
90
|
+
}[];
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../release/evidence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;;;;;;;;EAalE;AAED,sGAAsG;AACtG,wBAAgB,gBAAgB,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;;;;;;;;;;;;;;;EAqBnE;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBnE;AAED,wFAAwF;AACxF,wBAAgB,wBAAwB,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;;;;;;;;;;;;;EAoB3E"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Release evidence evaluates caller-supplied metadata without fetching, signing,
|
|
3
|
+
* scanning, publishing or claiming an artifact has more assurance than proven.
|
|
4
|
+
*/
|
|
5
|
+
const evidencestatuses = new Set(["notProvided", "declared", "parsed", "checked", "verified", "rejected", "unknown"]);
|
|
6
|
+
const verifiedstatuses = new Set(["checked", "verified"]);
|
|
7
|
+
/** Normalizes an immutable, caller-supplied artifact evidence record. */
|
|
8
|
+
export function releaseevidence(input = {}) {
|
|
9
|
+
const status = normalizestatus(input.status ?? "notProvided");
|
|
10
|
+
const kind = requiredtext(input.kind, "evidence kind");
|
|
11
|
+
const subjectdigest = optionaldigest(input.subjectdigest, "subject digest");
|
|
12
|
+
const producer = optionaltext(input.producer);
|
|
13
|
+
const workflow = optionaltext(input.workflow);
|
|
14
|
+
const method = optionaltext(input.verificationmethod);
|
|
15
|
+
const verifiedat = optionaltime(input.verifiedat, "verification time");
|
|
16
|
+
if (verifiedstatuses.has(status) && !subjectdigest)
|
|
17
|
+
throw new TypeError("checked evidence requires a subject digest");
|
|
18
|
+
if (verifiedstatuses.has(status) && !method)
|
|
19
|
+
throw new TypeError("checked evidence requires a verification method");
|
|
20
|
+
if (status === "verified" && !producer)
|
|
21
|
+
throw new TypeError("verified evidence requires a producer");
|
|
22
|
+
if (status === "verified" && !verifiedat)
|
|
23
|
+
throw new TypeError("verified evidence requires a verification time");
|
|
24
|
+
return { version: 1, kind, status, subjectdigest, producer, workflow, verificationmethod: method, verifiedat, metadata: objectcopy(input.metadata) };
|
|
25
|
+
}
|
|
26
|
+
/** Evaluates evidence against a caller-owned policy and returns reason codes, never a trust claim. */
|
|
27
|
+
export function evaluateevidence(input = {}) {
|
|
28
|
+
const evidence = Array.isArray(input.evidence) ? input.evidence.map((entry) => releaseevidence(objectvalue(entry, "evidence entry"))) : [];
|
|
29
|
+
const policy = objectcopy(input.policy);
|
|
30
|
+
const requiredkinds = stringlist(policy.requiredkinds, "required kinds");
|
|
31
|
+
const allowedstatuses = new Set(stringlist(policy.allowedstatuses ?? ["verified"], "allowed statuses"));
|
|
32
|
+
const expectedproducer = textmap(policy.expectedproducer, "expected producer");
|
|
33
|
+
const expectedworkflow = textmap(policy.expectedworkflow, "expected workflow");
|
|
34
|
+
const subjectdigest = optionaldigest(input.subjectdigest, "subject digest");
|
|
35
|
+
const reasons = new Set();
|
|
36
|
+
for (const kind of requiredkinds) {
|
|
37
|
+
const matches = evidence.filter((entry) => entry.kind === kind);
|
|
38
|
+
if (matches.length === 0) {
|
|
39
|
+
reasons.add(`required-evidence-missing:${kind}`);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const accepted = matches.some((entry) => evidenceaccepted(entry, { allowedstatuses, expectedproducer, expectedworkflow, subjectdigest }, reasons));
|
|
43
|
+
if (!accepted)
|
|
44
|
+
reasons.add(`required-evidence-unsatisfied:${kind}`);
|
|
45
|
+
}
|
|
46
|
+
const evaluated = requiredkinds.length === 0 ? evidence : evidence.filter((entry) => requiredkinds.includes(entry.kind));
|
|
47
|
+
for (const entry of evaluated)
|
|
48
|
+
evidenceaccepted(entry, { allowedstatuses, expectedproducer, expectedworkflow, subjectdigest }, reasons);
|
|
49
|
+
const ordered = [...reasons].sort();
|
|
50
|
+
const rejected = ordered.some((reason) => reason.startsWith("evidence-rejected:") || reason.startsWith("producer-mismatch:") || reason.startsWith("workflow-mismatch:") || reason.startsWith("subject-mismatch:"));
|
|
51
|
+
const decision = rejected ? "rejected" : ordered.length > 0 ? "insufficient" : "accepted";
|
|
52
|
+
return { version: 1, decision, reasons: ordered, subjectdigest, requiredkinds, evidence };
|
|
53
|
+
}
|
|
54
|
+
/** Builds a data-only readiness receipt for a release that a caller may later execute. */
|
|
55
|
+
export function releasereadiness(input = {}) {
|
|
56
|
+
const sourcetag = requiredtext(input.sourcetag, "source tag");
|
|
57
|
+
const manifestversions = textmap(input.manifestversions, "manifest versions");
|
|
58
|
+
const requiredgates = textmap(input.requiredgates, "required gates");
|
|
59
|
+
const artifactplandigest = optionaldigest(input.artifactplandigest, "artifact plan digest");
|
|
60
|
+
const targets = stringlist(input.targets, "publication targets");
|
|
61
|
+
const signingstatus = optionaltext(input.signingstatus) ?? "unknown";
|
|
62
|
+
const evaluation = evaluateevidence(objectvalue(input.evaluation, "evidence evaluation"));
|
|
63
|
+
const reasons = new Set(evaluation.reasons);
|
|
64
|
+
if (Object.values(manifestversions).some((value) => value !== sourcetag.replace(/^v/, "")))
|
|
65
|
+
reasons.add("manifest-version-mismatch");
|
|
66
|
+
for (const [gate, status] of Object.entries(requiredgates))
|
|
67
|
+
if (status !== "passed")
|
|
68
|
+
reasons.add(`required-gate-not-passed:${gate}`);
|
|
69
|
+
if (!artifactplandigest)
|
|
70
|
+
reasons.add("artifact-plan-digest-missing");
|
|
71
|
+
if (targets.length === 0)
|
|
72
|
+
reasons.add("publication-targets-missing");
|
|
73
|
+
if (signingstatus === "unknown")
|
|
74
|
+
reasons.add("signing-status-unknown");
|
|
75
|
+
const ordered = [...reasons].sort();
|
|
76
|
+
const decision = evaluation.decision === "rejected" ? "rejected" : ordered.length > 0 ? "insufficient" : "accepted";
|
|
77
|
+
return { version: 1, sourcetag, manifestversions, requiredgates, artifactplandigest, targets, signingstatus, evaluation, decision, ready: decision === "accepted", reasons: ordered };
|
|
78
|
+
}
|
|
79
|
+
/** Maps an already-completed local checksum verification result to evidence records. */
|
|
80
|
+
export function evidencefromverification(input = {}) {
|
|
81
|
+
const verification = objectvalue(input.verification, "verification result");
|
|
82
|
+
if (verification.valid !== true)
|
|
83
|
+
throw new TypeError("verification result must be valid");
|
|
84
|
+
const releaseversion = requiredtext(verification.version, "release version");
|
|
85
|
+
const signingstatus = requiredtext(verification.signing, "signing status");
|
|
86
|
+
const files = requiredarray(verification.files, "verification files");
|
|
87
|
+
if (files.length === 0)
|
|
88
|
+
throw new TypeError("verification files must not be empty");
|
|
89
|
+
const names = new Set();
|
|
90
|
+
const producer = optionaltext(input.producer);
|
|
91
|
+
const workflow = optionaltext(input.workflow);
|
|
92
|
+
const verificationmethod = optionaltext(input.verificationmethod) ?? "checksum-manifest";
|
|
93
|
+
const verifiedat = optionaltime(input.verifiedat, "verification time");
|
|
94
|
+
const evidence = files.map((file) => {
|
|
95
|
+
const entry = objectvalue(file, "verification file");
|
|
96
|
+
const name = requiredtext(entry.name, "artifact name");
|
|
97
|
+
if (names.has(name))
|
|
98
|
+
throw new TypeError(`duplicate verification artifact: ${name}`);
|
|
99
|
+
names.add(name);
|
|
100
|
+
return releaseevidence({ kind: "checksum", status: "checked", subjectdigest: entry.digest, producer, workflow, verificationmethod, verifiedat, metadata: { artifact: name, releaseversion, signingstatus } });
|
|
101
|
+
});
|
|
102
|
+
return { version: 1, releaseversion, signingstatus, evidence };
|
|
103
|
+
}
|
|
104
|
+
function evidenceaccepted(entry, policy, reasons) {
|
|
105
|
+
let accepted = true;
|
|
106
|
+
if (entry.status === "rejected") {
|
|
107
|
+
reasons.add(`evidence-rejected:${entry.kind}`);
|
|
108
|
+
accepted = false;
|
|
109
|
+
}
|
|
110
|
+
if (!policy.allowedstatuses.has(entry.status)) {
|
|
111
|
+
reasons.add(`evidence-status-not-allowed:${entry.kind}:${entry.status}`);
|
|
112
|
+
accepted = false;
|
|
113
|
+
}
|
|
114
|
+
if (policy.subjectdigest && entry.subjectdigest !== policy.subjectdigest) {
|
|
115
|
+
reasons.add(`subject-mismatch:${entry.kind}`);
|
|
116
|
+
accepted = false;
|
|
117
|
+
}
|
|
118
|
+
if (policy.expectedproducer[entry.kind] && entry.producer !== policy.expectedproducer[entry.kind]) {
|
|
119
|
+
reasons.add(`producer-mismatch:${entry.kind}`);
|
|
120
|
+
accepted = false;
|
|
121
|
+
}
|
|
122
|
+
if (policy.expectedworkflow[entry.kind] && entry.workflow !== policy.expectedworkflow[entry.kind]) {
|
|
123
|
+
reasons.add(`workflow-mismatch:${entry.kind}`);
|
|
124
|
+
accepted = false;
|
|
125
|
+
}
|
|
126
|
+
return accepted;
|
|
127
|
+
}
|
|
128
|
+
function normalizestatus(value) { const status = requiredtext(value, "evidence status"); if (!evidencestatuses.has(status))
|
|
129
|
+
throw new TypeError(`unknown evidence status: ${status}`); return status; }
|
|
130
|
+
function requiredtext(value, label) { const text = optionaltext(value); if (!text)
|
|
131
|
+
throw new TypeError(`${label} is required`); return text; }
|
|
132
|
+
function optionaltext(value) { const text = value === undefined || value === null ? undefined : String(value).trim(); return text || undefined; }
|
|
133
|
+
function optionaldigest(value, label) { const digest = optionaltext(value)?.toLowerCase(); if (digest && !/^[a-f0-9]{64}$/.test(digest))
|
|
134
|
+
throw new TypeError(`${label} must be a sha256 hex digest`); return digest; }
|
|
135
|
+
function optionaltime(value, label) { if (value === undefined || value === null)
|
|
136
|
+
return undefined; const time = Number(value); if (!Number.isFinite(time) || time < 0)
|
|
137
|
+
throw new TypeError(`${label} must be a non-negative finite number`); return time; }
|
|
138
|
+
function requiredarray(value, label) { if (!Array.isArray(value))
|
|
139
|
+
throw new TypeError(`${label} must be an array`); return value; }
|
|
140
|
+
function stringlist(value, label) { if (value === undefined || value === null)
|
|
141
|
+
return []; if (!Array.isArray(value))
|
|
142
|
+
throw new TypeError(`${label} must be an array`); return [...new Set(value.map((item) => requiredtext(item, label)))].sort(); }
|
|
143
|
+
function textmap(value, label) { if (value === undefined || value === null)
|
|
144
|
+
return {}; const source = objectvalue(value, label); return Object.fromEntries(Object.entries(source).map(([key, item]) => [requiredtext(key, label), requiredtext(item, label)])); }
|
|
145
|
+
function objectcopy(value) { return value && typeof value === "object" && !Array.isArray(value) ? { ...value } : {}; }
|
|
146
|
+
function objectvalue(value, label) { if (!value || typeof value !== "object" || Array.isArray(value))
|
|
147
|
+
throw new TypeError(`${label} must be an object`); return value; }
|
|
148
|
+
//# sourceMappingURL=evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../release/evidence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AACtH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AAE1D,yEAAyE;AACzE,MAAM,UAAU,eAAe,CAAC,KAAK,GAA4B,EAAE;IACjE,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IACvE,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IACtH,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;IACpH,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IACrG,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IAChH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvJ,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,gBAAgB,CAAC,KAAK,GAA4B,EAAE;IAClE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3I,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACzE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACxG,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IAC/E,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAChE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QACnJ,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACzH,KAAK,MAAM,KAAK,IAAI,SAAS;QAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;IACxI,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACnN,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC;IAC1F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AAC5F,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,gBAAgB,CAAC,KAAK,GAA4B,EAAE;IAClE,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACrE,MAAM,kBAAkB,GAAG,cAAc,CAAC,KAAK,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC;IACrE,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC1F,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACrI,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;QAAE,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;IACrI,IAAI,CAAC,kBAAkB;QAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IACrE,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC;IACpH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,KAAK,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACxL,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,wBAAwB,CAAC,KAAK,GAA4B,EAAE;IAC1E,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;IAC5E,IAAI,YAAY,CAAC,KAAK,KAAK,IAAI;QAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC1F,MAAM,cAAc,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAC7E,MAAM,aAAa,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,kBAAkB,GAAG,YAAY,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,mBAAmB,CAAC;IACzF,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;QACrF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;IAChN,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAyC,EAAE,MAAoJ,EAAE,OAAoB;IAC7O,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAAC,QAAQ,GAAG,KAAK,CAAC;IAAC,CAAC;IACtG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAAC,QAAQ,GAAG,KAAK,CAAC;IAAC,CAAC;IAC9I,IAAI,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAAC,QAAQ,GAAG,KAAK,CAAC;IAAC,CAAC;IAC9I,IAAI,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAAC,QAAQ,GAAG,KAAK,CAAC;IAAC,CAAC;IACxK,IAAI,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAAC,QAAQ,GAAG,KAAK,CAAC;IAAC,CAAC;IACxK,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,IAAI,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;IAAE,MAAM,IAAI,SAAS,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;AAChN,SAAS,YAAY,CAAC,KAAc,EAAE,KAAa,IAAI,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;IAAE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;AAC/J,SAAS,YAAY,CAAC,KAAc,IAAI,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC;AAC1J,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa,IAAI,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;IAAE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;AACvO,SAAS,YAAY,CAAC,KAAc,EAAE,KAAa,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;IAAE,OAAO,SAAS,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;IAAE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,uCAAuC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;AAC5Q,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC;AACpJ,SAAS,UAAU,CAAC,KAAc,EAAE,KAAa,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;IAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACrQ,SAAS,OAAO,CAAC,KAAc,EAAE,KAAa,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;IAAE,OAAO,EAA4B,CAAC,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5S,SAAS,UAAU,CAAC,KAAc,IAAI,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAI,KAAiC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5J,SAAS,WAAW,CAAC,KAAc,EAAE,KAAa,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAAE,MAAM,IAAI,SAAS,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC,CAAC,OAAO,KAAgC,CAAC,CAAC,CAAC"}
|
package/dist/scrape/robots.js
CHANGED
|
@@ -43,7 +43,7 @@ export function robotsrules(text = "") { const directives = []; const groups = [
|
|
|
43
43
|
/** Fetches and caches a site's robots policy without failing the caller's scrape. */
|
|
44
44
|
export async function fetchRobotsTxt(siteUrl, options = {}) { const base = siteUrl.replace(/\/$/, ""); const robotsUrl = `${base}/robots.txt`; const cached = cache.get(robotsUrl); if (cached && Date.now() - cached.fetchedAt < cachettl)
|
|
45
45
|
return cached.robots; try {
|
|
46
|
-
const response = await fetch(robotsUrl, { headers: { "User-Agent": options.userAgent ?? "Saddle/1.8.
|
|
46
|
+
const response = await fetch(robotsUrl, { headers: { "User-Agent": options.userAgent ?? "Saddle/1.8.16" }, signal: AbortSignal.timeout(options.timeout ?? 5000) });
|
|
47
47
|
const robots = response.ok ? robotsrules(await response.text()) : robotsrules();
|
|
48
48
|
cache.set(robotsUrl, { robots, fetchedAt: Date.now() });
|
|
49
49
|
return robots;
|
|
@@ -132,3 +132,13 @@ Version 1.8.14 keeps the release-tag-derived matrix and adds post-push container
|
|
|
132
132
|
Each surface also emits `sha256.*.1.8.14`, `manifest.*.1.8.14.json` and, where enabled by the release path, SBOM and provenance metadata. The Android manifest records `ci-test-key`, desktop manifests record `unsigned` and the container manifest records `caller-owned`. The container image additionally records `org.opencontainers.image.version=1.8.14`; the post-push workflow pulls that exact version and runs the CLI help smoke test.
|
|
133
133
|
|
|
134
134
|
The verified 1.8.14 release contains six Linux assets, six Windows assets, four macOS assets, two Android assets, one container archive, one browser extension, nine manifests and nine checksum files. The release-event mobile job did not bypass missing production credentials; the successful manual rerun used the explicit `ci-test-key` path.
|
|
135
|
+
|
|
136
|
+
## 1.8.15 verified release matrix
|
|
137
|
+
|
|
138
|
+
The published [v1.8.15 release](https://github.com/wenathlan/saddle/releases/tag/v1.8.15) contains 38 attached assets: six Linux desktop artifacts, six Windows desktop artifacts, four macOS desktop artifacts, two Android artifacts, one container archive, one browser extension, nine manifests, and nine checksum files. The primary artifacts use the dotted lowercase names `saddle.browser.1.8.15.<architecture>.<format>`, `saddle.apk.1.8.15.apk`, `saddle.aab.1.8.15.aab`, `saddle.container.1.8.15.tar.gz`, and `saddle.extension.1.8.15.zip`.
|
|
139
|
+
|
|
140
|
+
The available metadata files are `manifest.android.1.8.15.json`, `manifest.container.1.8.15.json`, the seven desktop `manifest.*.1.8.15.json` files, and the matching nine `sha256.*.1.8.15` files. The release record identifies Android as `ci-test-key`, desktop surfaces as `unsigned`, and the container as `caller-owned`; those declared states do not imply production signing, notarization, or registry trust.
|
|
141
|
+
|
|
142
|
+
## 1.8.16 candidate release matrix
|
|
143
|
+
|
|
144
|
+
Version 1.8.16 preserves the tag-derived 38-asset contract described in [releasenotes-1.8.16.md](releasenotes-1.8.16.md). Before tag workflows complete, every 1.8.16 entry is an expected output rather than an availability claim. The new release-evidence API can normalize and evaluate results supplied by completed verification adapters, but it cannot generate artifacts, change their signing state, publish them, or validate their registry availability.
|
|
@@ -63,6 +63,8 @@ The public contract uses plain objects and factory functions. The engine never r
|
|
|
63
63
|
|
|
64
64
|
`cdncapabilities` records only caller-reported delivery properties such as immutable caching, purge support, range delivery, integrity headers, CORS, and visibility. It never performs a CDN probe, purge, upload, or configuration mutation.
|
|
65
65
|
|
|
66
|
+
`releaseevidence` evaluates caller-supplied supply-chain and release metadata as data. It normalizes a subject digest, producer, workflow, evidence kind, verification method, timestamp and explicit status. `evaluateevidence` produces only `accepted`, `rejected`, or `insufficient` with stable reason codes; it never treats an unchecked declaration as a signature, trust decision, compliance result, or vulnerability assessment. `evidencefromverification` converts an already-completed `verifyassets` result into `checked` checksum evidence, retaining its explicit signing state as metadata and never upgrading an `unsigned` or caller-owned state into a signing claim. `releasereadiness` binds a source tag, observed manifest versions, gates, artifact-plan digest, publication targets, signing state, and evidence result into a serializable receipt. These contracts do not edit versions, create a tag, trigger a workflow, publish, sign, scan, download, or contact a registry.
|
|
67
|
+
|
|
66
68
|
`miniappplan`, `dnsplan`, and `applicationbridge` add deployment-neutral application requirements. Mini App plans reject token-bearing input and require an HTTPS origin plus a caller-selected validation method. DNS records list ownership, DNSSEC and HTTPS requirements but cannot buy a domain, change a zone, or obtain a certificate. Surface bridges only report declared capabilities for browser, desktop, mobile, extension, and Mini App targets.
|
|
67
69
|
|
|
68
70
|
## execution lifecycle
|
package/docs/libraryapi.md
CHANGED
|
@@ -39,6 +39,8 @@ The public API is designed around injected transports. Consumers can use the sam
|
|
|
39
39
|
| `commandguard` | enforce caller-defined bot command scopes |
|
|
40
40
|
| `deliveryqueue` | retry webhook deliveries and retain dead letters |
|
|
41
41
|
| `nodeserver` | expose a Web Request/Response handler through Node HTTP |
|
|
42
|
+
| `releaseevidence` / `evaluateevidence` | normalize caller-supplied evidence and evaluate it against explicit policy with bounded decision reasons |
|
|
43
|
+
| `evidencefromverification` / `releasereadiness` | map an already-valid local checksum result and assemble a descriptive readiness receipt without performing a release |
|
|
42
44
|
| `@wenathlan/saddle/browser-playwright` | optional Node-only Playwright session adapter; the peer is caller-installed and the root remains vendor-neutral |
|
|
43
45
|
|
|
44
46
|
```js
|
|
@@ -56,10 +58,12 @@ The `fetcher`, browser adapter, persistence adapter, proxy pool, captcha solver,
|
|
|
56
58
|
|
|
57
59
|
## package surfaces
|
|
58
60
|
|
|
59
|
-
The package exposes explicit subpaths for `./browser`, `./bot`, `./captcha`, `./memory-engine`, and `./
|
|
61
|
+
The package exposes explicit subpaths for `./browser`, `./bot`, `./captcha`, `./memory-engine`, `./deploy`, and `./release-evidence`. Desktop, mobile, target-plan and n8n contracts are exported from the root entry; the root entry remains the complete compiled JavaScript API with generated TypeScript declarations for consumers that prefer one import.
|
|
60
62
|
|
|
61
63
|
The `./extension` subpath exposes browser-neutral message, snapshot and service-worker routing contracts. The concrete Manifest V3 files live in `extension/`; they are not imported by the core at runtime and do not require Chrome when the library is used as a Node package. The browser surface also exposes snapshots, tab/frame context, action results, bounded action batches and recording through `./browser`.
|
|
62
64
|
|
|
63
65
|
The current release exposes `desktopmanifest`, `mobilemanifest`, `desktopadapter`, `mobileadapter`, `n8nnode`, `n8nmatch`, `n8nexecute`, `controlsurface`, `controlservice`, and `workerbridge`. These factories describe surface boundaries and invoke caller-owned handlers; they do not install a native toolkit, start an n8n server, create a dashboard, or store credentials.
|
|
64
66
|
|
|
67
|
+
`releaseevidence` and `evaluateevidence` retain the status that a caller supplies instead of asserting a security property. `evidencefromverification` accepts only an already-valid `verifyassets` result and maps its checksum inventory to `checked` evidence; its signing field remains metadata, so `unsigned`, `caller-owned`, or `caller-configured` does not become a signature or reputation claim. `releasereadiness` is descriptive: it cannot alter files, create tags, invoke CI, publish artifacts, sign content, or contact registries.
|
|
68
|
+
|
|
65
69
|
The root entry is cross-runtime safe for the tested core contract. Filesystem, Node HTTP, persistent queue, file sessions, local memory and captcha evidence adapters remain available through explicit Node-only files or subpaths. `runtimecontract` reports the capabilities of the current global scope, while `memorystorage` provides a process-local backend for browser workers, Deno, Bun and deterministic tests.
|
|
@@ -31,6 +31,10 @@ The release workflows derive artifact names and package versions from `v1.8.15`.
|
|
|
31
31
|
|
|
32
32
|
The six registry workflows publish from the same validated release tag, in container-first order: GHCR, GitHub Packages npm, public npmjs, Maven, NuGet GitHub Packages and RubyGems. GHCR must build, scan, push, pull, inspect its OCI version label and complete a smoke check. Production signing remains caller-owned; the release does not claim SignPath approval, Apple notarization or a production Android signing key unless a workflow reports those states.
|
|
33
33
|
|
|
34
|
+
## Verified publication results
|
|
35
|
+
|
|
36
|
+
The v1.8.15 release has **38 attached assets** after the desktop rerun completed. GHCR, GitHub Packages npm, npmjs, Maven, NuGet and RubyGems completed successfully from the release event. The initial release-event Android job correctly failed because no production signing secrets were present; manual run `31835215420` completed with the explicitly labeled `ci-test-key` fallback. The desktop rerun completed after a transient macOS asset-attachment failure, without changing the tag or claiming notarization.
|
|
37
|
+
|
|
34
38
|
## References
|
|
35
39
|
|
|
36
40
|
[1]: https://github.com/wenathlan/saddle "Saddle source repository"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Saddle 1.8.16
|
|
2
|
+
|
|
3
|
+
Saddle 1.8.16 adds a pure, policy-evaluable release-evidence layer above existing checksum verification. The library normalizes caller-supplied evidence, evaluates it through explicit policy, and creates a serializable release-readiness receipt. It remains descriptive: it does not fetch artifacts, scan files, query CVE feeds, sign content, create tags, invoke CI, publish packages, or contact a registry.
|
|
4
|
+
|
|
5
|
+
## Changes
|
|
6
|
+
|
|
7
|
+
| Area | Change |
|
|
8
|
+
|---|---|
|
|
9
|
+
| Evidence | Added `releaseevidence` with explicit `notProvided`, `declared`, `parsed`, `checked`, `verified`, `rejected`, and `unknown` states. |
|
|
10
|
+
| Policy | Added `evaluateevidence` with caller-selected evidence kinds, allowed states, expected producer/workflow values, ordered reasons, and `accepted`, `rejected`, or `insufficient` outcomes. |
|
|
11
|
+
| Readiness | Added `releasereadiness`, which binds source tag, observed manifest versions, gates, artifact-plan digest, targets, signing state, and an evidence evaluation without executing a release. |
|
|
12
|
+
| Verification bridge | Added `evidencefromverification`, which converts only an already-valid local `verifyassets` checksum result to `checked` evidence and retains signing state as metadata. |
|
|
13
|
+
| API | Added the root export and `@wenathlan/saddle/release-evidence` subpath, documented in the public library API. |
|
|
14
|
+
| Validation | The candidate passed 136 active tests, 69 legacy tests, engine build, web checks/build, format validation, package dry-run, high-severity audit, flat native validation, and whitespace validation. |
|
|
15
|
+
|
|
16
|
+
## Artifact contract
|
|
17
|
+
|
|
18
|
+
The release workflows derive artifact names and package versions from `v1.8.16`. This notes file declares the expected matrix before workflow completion; attachment and signing status remain post-tag facts and must be recorded only after the corresponding workflow reports them.
|
|
19
|
+
|
|
20
|
+
| Group | Expected attached assets |
|
|
21
|
+
|---|---|
|
|
22
|
+
| Linux desktop | `saddle.browser.1.8.16.x64.appimage`, `saddle.browser.1.8.16.x64.deb`, `saddle.browser.1.8.16.x64.rpm`, `saddle.browser.1.8.16.arm64.appimage`, `saddle.browser.1.8.16.arm64.deb`, `saddle.browser.1.8.16.arm64.rpm` |
|
|
23
|
+
| Windows desktop | `saddle.browser.1.8.16.x86.exe`, `saddle.browser.1.8.16.x86.msi`, `saddle.browser.1.8.16.x64.exe`, `saddle.browser.1.8.16.x64.msi`, `saddle.browser.1.8.16.arm64.exe`, `saddle.browser.1.8.16.arm64.msi` |
|
|
24
|
+
| macOS desktop | `saddle.browser.1.8.16.x64.dmg`, `saddle.browser.1.8.16.x64.app.zip`, `saddle.browser.1.8.16.arm64.dmg`, `saddle.browser.1.8.16.arm64.app.zip` |
|
|
25
|
+
| Android | `saddle.apk.1.8.16.apk`, `saddle.aab.1.8.16.aab` |
|
|
26
|
+
| Container | `saddle.container.1.8.16.tar.gz` |
|
|
27
|
+
| Browser extension | `saddle.extension.1.8.16.zip` |
|
|
28
|
+
| Manifests | `manifest.android.1.8.16.json`, `manifest.container.1.8.16.json`, `manifest.desktop.linux.arm64.1.8.16.json`, `manifest.desktop.linux.x64.1.8.16.json`, `manifest.desktop.macos.arm64.1.8.16.json`, `manifest.desktop.macos.x64.1.8.16.json`, `manifest.desktop.windows.arm64.1.8.16.json`, `manifest.desktop.windows.x64.1.8.16.json`, `manifest.desktop.windows.x86.1.8.16.json` |
|
|
29
|
+
| Checksums | `sha256.android.1.8.16`, `sha256.container.1.8.16`, `sha256.desktop.linux.arm64.1.8.16`, `sha256.desktop.linux.x64.1.8.16`, `sha256.desktop.macos.arm64.1.8.16`, `sha256.desktop.macos.x64.1.8.16`, `sha256.desktop.windows.arm64.1.8.16`, `sha256.desktop.windows.x64.1.8.16`, `sha256.desktop.windows.x86.1.8.16` |
|
|
30
|
+
|
|
31
|
+
The expected total is **38 attached assets**: 20 primary artifacts, nine manifests, and nine checksum files. iOS artifacts are not listed because Apple signing, provisioning, and export credentials remain caller-owned and no IPA or app archive is presumed.
|
|
32
|
+
|
|
33
|
+
## Publication and verification policy
|
|
34
|
+
|
|
35
|
+
The six registry workflows publish from the same validated release tag, in container-first order: GHCR, GitHub Packages npm, public npmjs, Maven, NuGet GitHub Packages, and RubyGems. The GHCR workflow must build, scan, push, pull, inspect its OCI version label, and complete a smoke check. The release does not claim SignPath approval, Authenticode trust, Apple notarization, production Android signing, SBOM validation, vulnerability status, or registry availability unless the completed workflow output independently supports that claim.
|
|
36
|
+
|
|
37
|
+
## References
|
|
38
|
+
|
|
39
|
+
[1]: https://github.com/wenathlan/saddle "Saddle source repository"
|
|
40
|
+
[2]: https://github.com/wenathlan/saddle/releases "Saddle release archive"
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
# Saddle 1.8.16 comparative repository research
|
|
2
|
+
|
|
3
|
+
This document records public-source evidence for the 1.8.16 feature-selection process. It is an evidence log rather than an adoption list: Saddle does not copy source code, inherit third-party credentials, reproduce anti-bot behavior, or adopt a pattern without independent compatibility and security review.
|
|
4
|
+
|
|
5
|
+
## Sampling contract
|
|
6
|
+
|
|
7
|
+
The selected sample targets 130 public repositories across browser agents, extensions, scraping, workflows, storage, isolation, packaging, CI, application bridges, and protocol tooling. A candidate is only complete when its canonical repository, license, current evidence, relevant implementation area, compatibility boundary, and disposition are recorded. Popularity is not treated as correctness.
|
|
8
|
+
|
|
9
|
+
## Browser agent and computer-use evidence
|
|
10
|
+
|
|
11
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| `browser-use/browser-use` | [repository][1] | The MIT project exposes agent/browser separation, custom tools and an extensive test directory, but its hosted browser guidance includes stealth, proxy rotation and CAPTCHA handling. | Its extensible tool boundary supports Saddle's injected-adapter model. | Consider only declarative session/tool boundaries; reject stealth and CAPTCHA-bypass patterns. |
|
|
14
|
+
| `vercel-labs/agent-browser` | [repository][2] | The Apache-2.0 CLI uses accessibility snapshots with stable refs, requires a fresh snapshot after overlay interference, and documents tab/session handles. | Corroborates Saddle's snapshot-reference freshness, obstruction reporting and tab identity contracts. | Compare its explicit stale-reference and stable-handle semantics; do not embed a browser daemon. |
|
|
15
|
+
| `firecrawl/web-agent` | [repository][3] | The MIT project layers templates, an agent core, structured output, streaming and independently scoped subagents. | Its explicit separation of orchestrator, skills and output is relevant to provider-neutral workflow contracts. | Consider provenance-bearing structured-output and bounded subagent contracts only. |
|
|
16
|
+
| `browseros-ai/BrowserOS` | [repository][4] | The AGPL-3.0 project describes a local browser/agent split, session replay and MCP-facing components. | It demonstrates that replay and session observability can be product surfaces, but has a substantially different browser-fork architecture and license. | Record as architectural counterexample; do not adopt Chromium-fork, login-import or AGPL-derived code. |
|
|
17
|
+
|
|
18
|
+
## Initial cross-source observations
|
|
19
|
+
|
|
20
|
+
The first four repositories reinforce existing Saddle contracts rather than expose a safe missing primitive: fresh accessibility references, explicit session identity, structured output boundaries, replay metadata and caller-visible control planes. No candidate justifies weakening the current caller-owned authentication, browser ownership, or remote-action confirmation boundaries.
|
|
21
|
+
|
|
22
|
+
## Scraping, crawling, and extraction evidence
|
|
23
|
+
|
|
24
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
25
|
+
|---|---|---|---|---|
|
|
26
|
+
| `unclecode/crawl4AI` | [repository][5] | The Apache-2.0 project documents crash recovery, state callbacks, bounded deep-crawl examples and a security-hardened Docker server, but also exposes stealth and fingerprint features. | Its explicit recovery state and capacity-aware dispatcher are relevant to persisted crawl contracts. | Consider resumable frontier checkpoints and caller-defined backpressure; reject stealth/fingerprint patterns. |
|
|
27
|
+
| `scrapy/scrapy` | [repository][6] | The BSD-3-Clause framework has long-lived typed test surfaces, security policy and a documented structured extraction focus. | It is evidence for keeping scrape parsing, lifecycle and test contracts independently replaceable. | Use as mature corroboration only; no Python runtime or framework adoption is implied. |
|
|
28
|
+
| `apify/crawlee` | [repository][7] | The Apache-2.0 TypeScript library combines HTTP/browser modes, persistent request queues, pluggable storage and configurable routing/retries, while also advertising browser-like headers and TLS fingerprints. | Its queue and storage separation corroborates Saddle's provider-neutral frontier and adapter boundaries. | Consider explicit queue/storage capability reports; reject anti-detection, header imitation and fingerprint behavior. |
|
|
29
|
+
| `firecrawl/firecrawl` | [repository][8] | The AGPL-3.0 project exposes explicit scrape, crawl, map and batch surfaces and states that end users must respect site policies; its documentation also describes hosted proxies and interactions. | It corroborates distinct lifecycle contracts for single scrape, map and batch crawl operations. | Record endpoint separation and robot-policy posture; do not adopt AGPL code, credential-dependent hosting, or anti-blocking infrastructure. |
|
|
30
|
+
|
|
31
|
+
## Scraping disposition
|
|
32
|
+
|
|
33
|
+
The sources support a narrow next comparison question: whether Saddle should add an explicit persisted crawl-checkpoint receipt with caller-owned resume evidence. Existing Saddle range, storage, queue and provenance contracts already cover much of the adjacent surface. No implementation is selected until at least one additional independent source or an applicable standard corroborates the public contract.
|
|
34
|
+
|
|
35
|
+
## Workflow, queue, and orchestration evidence
|
|
36
|
+
|
|
37
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
38
|
+
|---|---|---|---|---|
|
|
39
|
+
| `temporalio/temporal` | [repository][9] | The MIT project distinguishes durable workflow execution from worker implementation and documents retry-oriented resilience. | It corroborates the existing Saddle separation between serializable run state and caller-owned execution adapters. | Consider event-history compatibility only; do not introduce a Temporal server dependency. |
|
|
40
|
+
| `platformatic/job-queue` | [repository][10] | The Apache-2.0 TypeScript queue documents explicit storage backends, visibility timeout, cancellation results, graceful stop, stalled-job recovery and leader election. | It independently corroborates Saddle's lease, idempotency, visibility and cancellation contracts. | Compare terminal-state receipts and explicit cancellation outcomes; reject autonomous reapers or background loops in the library core. |
|
|
41
|
+
| `rails/solid_queue` | [repository][11] | The MIT backend differentiates workers, dispatchers, schedulers and supervision while treating queue claims and concurrency as infrastructure concerns. | It reinforces the principle that scheduling and worker lifecycle should be external adapters, not silently started by a library. | Consider capability reporting for worker lifecycle; do not adopt database-specific SQL semantics. |
|
|
42
|
+
| `danielgerlag/workflow-core` | [repository][12] | The MIT workflow library documents pluggable persistence, long-running state, events and compensating saga steps. | It corroborates Saddle's caller-owned compensation and persistence boundaries. | Compare compensation receipt modeling only; avoid importing an external workflow DSL. |
|
|
43
|
+
|
|
44
|
+
## Workflow disposition
|
|
45
|
+
|
|
46
|
+
The initial workflow sample reinforces existing 1.8.15 behavior rather than selecting a new feature. The strongest candidate for later evidence is a **terminal-state receipt** that records whether a cancellation, compensation, or cleanup is confirmed, requested, unavailable, or remains externally unknown. It must remain serializable and must not start timers, reapers, workers, or external dispatch loops.
|
|
47
|
+
|
|
48
|
+
## Storage, virtual filesystem, and cache evidence
|
|
49
|
+
|
|
50
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
51
|
+
|---|---|---|---|---|
|
|
52
|
+
| `seaweedfs/seaweedfs` | [repository][13] | The Apache-2.0 storage system distinguishes volumes, metadata, replication levels, range/ETag support and configured hot/warm tiers. | It corroborates that tiers describe storage location and latency, not virtual RAM or compute. | Consider a declarative replica locality/cost evidence field; do not implement a storage server. |
|
|
53
|
+
| `Barre/ZeroFS` | [repository][14] | The AGPL project combines S3-backed VFS, explicit memory/disk caches, conditional writes, epoch fencing and deterministic fault simulation. | Its refusal to degrade unsafe writes corroborates Saddle's explicit capability rejection model. | Consider conditional-write evidence and cache-tier provenance only; reject kernel, mount, daemon and AGPL-derived implementation. |
|
|
54
|
+
| `veged/omniFUSE` | [repository][15] | The MIT virtual filesystem declares backend-specific concurrency semantics, refuses unsafe providers without conditional writes and keeps host credentials outside an agent sandbox. | It validates caller-owned credentials and provider capability checks. | Consider conflict/outcome receipts for adapters; do not mount paths or synchronize in the shared library. |
|
|
55
|
+
| `dennwc/cas` | [repository][16] | The Apache-2.0 CAS emphasizes immutable hashes, large archives, remote indexing and pipeline caches. | It corroborates Saddle's hash-addressed transform and artifact cache keys. | Consider explicit cache lineage metadata; do not introduce a second CAS implementation. |
|
|
56
|
+
|
|
57
|
+
## Storage disposition
|
|
58
|
+
|
|
59
|
+
The evidence favors a small, additive **provider mutation precondition receipt**: a caller can obtain a deterministic record that a requested write, restore or repair requires conditional-write support, expected digest evidence and declared size limits. It must neither mount a filesystem nor perform storage I/O. A second independent source has corroborated the conditional-write boundary, but implementation remains deferred until the research sample is broadened and the public naming is reviewed.
|
|
60
|
+
|
|
61
|
+
## Sandbox, WASM, container, and binary isolation evidence
|
|
62
|
+
|
|
63
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
64
|
+
|---|---|---|---|---|
|
|
65
|
+
| `ciresnave/wasm-sandbox` | [repository][17] | The MIT project models runtime, capability and resource-limit layers, including memory, CPU, filesystem and network boundaries. | It corroborates Saddle's planned WASM budget and injected-isolation-adapter contracts. | Consider a normalized capability/limit receipt; do not create a default executor or compile untrusted input. |
|
|
66
|
+
| `aayushadhikari7/aegis` | [repository][18] | The dual MIT/Apache project uses zero permissions by default, explicit filesystem/clock/logging grants, fuel, memory, timeout and module validation. | It independently corroborates deny-by-default capabilities and pre-execution validation. | Consider explicit requested-versus-granted capability comparison; keep actual execution caller-owned. |
|
|
67
|
+
| `anthropic-experimental/sandbox-runtime` | [repository][19] | The Apache-2.0 preview documents allow-only network egress, allow-only writes, platform-specific OS sandboxes and violation attribution. | It supports preserving denial reasons and per-invocation provenance in a future adapter contract. | Consider adapter result provenance only; do not ship OS sandbox commands, proxy setup or mutable host configuration. |
|
|
68
|
+
| `opensandbox-group/OpenSandbox` | [repository][20] | The Apache-2.0 platform separates lifecycle APIs, command/file operations, egress policy, credential vault and container/microVM runtimes. | It corroborates a separation between core planning and an external sandbox service. | Consider generic capability-report fields; reject platform lifecycle management and secret injection from Saddle core. |
|
|
69
|
+
|
|
70
|
+
## Isolation disposition
|
|
71
|
+
|
|
72
|
+
Multiple independent sources support a potential **isolation capability receipt** that compares a requested operation against caller-reported resource, filesystem and network permissions. The receipt must declare `eligible`, `denied`, or `adapter-required`; it must not spawn a process, create a container, configure a proxy, or authorize network access. Implementation remains pending broader sampling and a review of existing `binary/transform.ts` exports.
|
|
73
|
+
|
|
74
|
+
## Release engineering, provenance, and SBOM evidence
|
|
75
|
+
|
|
76
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
77
|
+
|---|---|---|---|---|
|
|
78
|
+
| `slsa-framework/slsa-github-generator` | [repository][21] | The Apache-2.0 generator documents provenance boundaries and explicitly directs new users to GitHub artifact attestations because the project is no longer actively maintained. | It confirms that a verifier and an attestation generator are distinct concerns. | Prefer native GitHub attestation verification where available; do not add the unmaintained generator. |
|
|
79
|
+
| `sigstore/cosign` | [repository][22] | The Apache-2.0 project verifies signatures against expected identity and issuer and emphasizes signing OCI subjects by digest, not mutable tags. | It corroborates Saddle's immutable-digest verification and claim-check ordering. | Consider a portable expected-identity verification input; never claim signed status without verified evidence. |
|
|
80
|
+
| `anchore/syft` | [repository][23] | The Apache-2.0 SBOM tool covers filesystems, archives and container images with SPDX/CycloneDX outputs and signed attestations. | It demonstrates format breadth that should remain a release-tool responsibility, not engine runtime behavior. | Consider a release receipt that references an externally generated SBOM digest; do not embed a scanner. |
|
|
81
|
+
| `aquasecurity/trivy` | [repository][24] | The Apache-2.0 scanner distinguishes scan targets from scanners and covers vulnerabilities, secrets, SBOM and misconfiguration. | It corroborates Saddle's separation between advisory findings and blocking release policy. | Retain external security gates; avoid making library consumers depend on a scanner runtime. |
|
|
82
|
+
|
|
83
|
+
## Release disposition
|
|
84
|
+
|
|
85
|
+
The sample supports a future **release verification receipt** that binds a release tag, artifact digest, optional SBOM digest, expected workflow identity and evidence status. It must preserve the difference among absent, generated, downloaded and independently verified evidence. It cannot manufacture an attestation, signature or certificate, and no release-engineering implementation is selected until the workflow and registry sample is complete.
|
|
86
|
+
|
|
87
|
+
## Extension, PWA, and Mini App evidence
|
|
88
|
+
|
|
89
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
90
|
+
|---|---|---|---|---|
|
|
91
|
+
| `nanobrowser/nanobrowser` | [repository][25] | The Apache-2.0 extension runs in the user browser and emphasizes user-supplied LLM keys, local credential retention, settings and side-panel workflows. | It corroborates Saddle's extension-as-adapter surface and caller-owned credentials. | Consider a declarative extension capability report only; reject key storage, browser control or autonomous multi-agent execution in core. |
|
|
92
|
+
| `GoogleChrome/chrome-extensions-samples` | [repository][26] | Official Apache-2.0 samples separate individual extension APIs and functional examples, including manifest-version migration materials. | It reinforces explicit manifest/permission documentation and adapter-specific tests. | Use as a compatibility reference; do not add permissions without an extension-specific implementation and user-facing rationale. |
|
|
93
|
+
| `GoogleChrome/workbox` | [repository][27] | The MIT PWA toolkit handles caching strategies, service-worker lifecycle and offline behavior. | It corroborates treating PWA as a delivery adapter, not an engine runtime service. | Retain the 1.8.15 declarative PWA plan; no service-worker registration or cache mutation from the library. |
|
|
94
|
+
| `Telegram-Mini-Apps/tma.js` | [repository][28] | The MIT TypeScript monorepo separates platform packages and documents client/backend development boundaries. | It corroborates keeping Mini App validation and platform SDK work outside a generic engine. | Consider a validated surface requirement descriptor only; do not embed Telegram SDK, secrets or platform validation. |
|
|
95
|
+
|
|
96
|
+
## Surface disposition
|
|
97
|
+
|
|
98
|
+
The evidence reinforces 1.8.15's declarative PWA, extension, DNS and Mini App requirements. No additional core implementation is selected: any future work must be an opt-in adapter package with a platform-specific permission review, a deterministic capability report and no implicit registration, credential flow or remote mutation.
|
|
99
|
+
|
|
100
|
+
## MCP, RAG, and tool-protocol evidence
|
|
101
|
+
|
|
102
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
103
|
+
|---|---|---|---|---|
|
|
104
|
+
| `modelcontextprotocol/typescript-sdk` | [repository][29] | The official SDK separates client, server, transport and thin runtime-specific middleware and accepts portable schema implementations. | It corroborates Saddle's explicit protocol contracts and adapter-first transport design. | Consider an optional schema-compatible descriptor only; do not add an MCP server, client, OAuth flow or HTTP listener to the core. |
|
|
105
|
+
| `modelcontextprotocol/servers` | [repository][30] | Reference servers are explicitly educational rather than production-ready and distinguish filesystem, fetch, memory and tool examples. | It reinforces treating example integrations as non-authoritative and requiring threat-model review. | Use as an interoperability reference; do not embed reference-server behavior. |
|
|
106
|
+
| `infiniflow/ragflow` | [repository][31] | The Apache-2.0 system emphasizes source-aware chunking, grounded citations, heterogeneous ingestion and heavy deployment dependencies. | It corroborates Saddle's provenance-bearing structured extraction and bounded context budget. | Consider explicit source/citation receipt fields only; avoid RAG runtime, embeddings, model execution and persistent service dependencies. |
|
|
107
|
+
| `mondaycom/agent-tool-protocol` | [repository][32] | The MIT protocol describes provenance policies, approval pause/resume, schema discovery and isolated execution with resource limits. | It corroborates preserving tool-origin and approval state across serializable workflow records. | Consider provenance/approval receipt semantics; reject generated-code execution, dynamic API loading and secret-bearing OAuth integrations in core. |
|
|
108
|
+
|
|
109
|
+
## Protocol disposition
|
|
110
|
+
|
|
111
|
+
The sample corroborates one candidate for later implementation: an **origin-bearing tool result envelope** that separates user, caller, adapter and remote-source claims without trusting a model-generated label. It must be schema-validatable, serializable and side-effect free. Implementation remains deferred until at least two additional protocol or security sources are reviewed and existing `protocol/` exports are mapped.
|
|
112
|
+
|
|
113
|
+
## CI, runner, and forge evidence
|
|
114
|
+
|
|
115
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
116
|
+
|---|---|---|---|---|
|
|
117
|
+
| `actions/runner` | [repository][33] | The MIT runner is the execution application for a GitHub Actions job in hosted or self-hosted environments, with OS-specific release distributions. | It corroborates treating a runner as execution infrastructure rather than a library-owned capability. | Keep runner discovery and dispatch as adapter data; do not control runner lifecycle from Saddle. |
|
|
118
|
+
| `cisco-open/forge` | [repository][34] | The Apache-2.0 platform separates tenant labels, runner images, isolation lanes, placement, credentials and lifecycle cleanup under an operator-owned control plane. | It corroborates stable, declarative runner capability reports and caller/provider ownership boundaries. | Consider label/capability evidence only; reject AWS, Kubernetes, tenant management and IaC dependencies. |
|
|
119
|
+
| `forgejo/forgejo` | [repository][35] | The canonical repository was selected as a forge candidate, but primary page extraction returned no readable content in this run. | It remains in the candidate universe but has no accepted finding yet. | Defer until canonical documentation or repository metadata can be captured. |
|
|
120
|
+
| `forgejo/runner` | [repository][36] | The runner repository was selected for workflow compatibility analysis, but primary page extraction returned no readable content in this run. | It remains a pending candidate rather than evidence. | Defer; do not infer semantics from third-party summaries. |
|
|
121
|
+
|
|
122
|
+
## CI disposition
|
|
123
|
+
|
|
124
|
+
The completed sources reinforce the existing 1.8.15 chain capability model. A future **runner attestation input** may bind a caller-reported runner label set, operating system, architecture, ephemeral status and policy identifiers to a dispatch plan. It must not imply that the runner is owned, reachable, authenticated, isolated or safe without adapter-provided evidence.
|
|
125
|
+
|
|
126
|
+
## Packaging and cross-platform distribution evidence
|
|
127
|
+
|
|
128
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
129
|
+
|---|---|---|---|---|
|
|
130
|
+
| `goreleaser/goreleaser` | [repository][37] | The MIT release-engineering tool targets multiple language ecosystems and delegates complexity to local or CI release configuration. | It corroborates keeping distribution policy in versioned release configuration and workflows. | Use as a release-automation comparison only; do not add GoReleaser as a dependency. |
|
|
131
|
+
| `jreleaser/jreleaser` | [repository][38] | The Apache-2.0 tool supports Java and non-Java projects with publication to multiple package managers. | It corroborates a manifest-driven, multi-registry release matrix. | Keep Saddle's existing per-registry workflows; do not replace established package pipelines with a new orchestrator. |
|
|
132
|
+
| `tauri-apps/tauri` | [repository][39] | The dual-licensed framework maps a web frontend to platform-native bundle formats and treats its Rust host as the application boundary. | It reinforces the existing desktop packaging separation and artifact naming matrix. | Retain current desktop workflow and flat project layout; no new desktop framework work is selected. |
|
|
133
|
+
| `ionic-team/capacitor` | [repository][40] | The MIT framework distinguishes cross-platform web/native APIs and treats native projects as source artifacts. | It corroborates the existing Capacitor-based Android/iOS surfaces and explicit native plugin boundary. | Retain current mobile model; do not embed native APIs in the engine. |
|
|
134
|
+
|
|
135
|
+
## Packaging disposition
|
|
136
|
+
|
|
137
|
+
The sources validate the current Saddle approach rather than reveal a safe missing engine primitive: manifests and release notes must describe targets, artifacts and verification evidence; platform toolchains must build and sign outside the shared library. No 1.8.16 implementation is selected from this category.
|
|
138
|
+
|
|
139
|
+
## Additional forge and runner evidence
|
|
140
|
+
|
|
141
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
142
|
+
|---|---|---|---|---|
|
|
143
|
+
| `woodpecker-ci/woodpecker` | [repository][41] | The Apache-2.0 CI engine separates server, agent, pipeline and plugin surfaces and is used by a public forge. | It corroborates that CI controller, executor and plugin lifecycle belong outside a portable library contract. | Consider provider/plugin capability vocabulary only; do not embed a CI engine. |
|
|
144
|
+
| `actions/actions-runner-controller` | [repository][42] | The Apache-2.0 Kubernetes controller orchestrates and scales self-hosted runner scale sets, including ephemeral container-backed runners. | It reinforces that runner scaling and lifecycle are deployment/operator responsibilities. | Consider ephemeral-runner evidence in adapter reports; do not introduce Kubernetes control-plane dependencies. |
|
|
145
|
+
| Forgejo Actions administrator guide | [documentation][43] | Forgejo explicitly states that it relies on separately installed/configured runners; logs and artifacts are server-retained while cache stays on the runner. | It corroborates separating provider-owned retention and cache location in artifact reports. | Consider retention/capability facts from an adapter; do not assume workflow compatibility or provision runners. |
|
|
146
|
+
| Forgejo Actions reference | [documentation][44] | Forgejo documents partial GitHub Actions compatibility and warns that `pull_request_target` with untrusted code can expose tokens and cache contents. | It corroborates requiring explicit trust and credential boundaries for any multi-forge workflow adapter. | Add this as a negative test criterion for future workflow-rendering work; no execution integration is selected. |
|
|
147
|
+
|
|
148
|
+
## Additional CI disposition
|
|
149
|
+
|
|
150
|
+
The independent sources strengthen a future adapter-level **runner provenance receipt**: it may report provider, workflow dialect, labels, runner scope, cache locality, artifact retention and an explicit trust boundary. It must not claim GitHub/Forgejo compatibility without a provider test, and it must reject a request that combines elevated credentials with untrusted checkout unless the caller records an explicit policy override.
|
|
151
|
+
|
|
152
|
+
## Additional storage and VFS evidence
|
|
153
|
+
|
|
154
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
155
|
+
|---|---|---|---|---|
|
|
156
|
+
| `rclone/rclone` | [repository][45] | The MIT sync tool covers many remotes and virtual backends such as union, chunking, hashing, compression and encryption while maintaining explicit copy/sync/check operations. | It corroborates provider-neutral capability reports, integrity-aware plans and explicit operations. | Consider provider-feature normalization; do not embed credentials, mounts or sync execution. |
|
|
157
|
+
| `juicedata/juicefs` | [repository][46] | The Apache-2.0 filesystem combines object data storage and separately managed metadata, supports chunks and mounts, and requires a client plus metadata/object infrastructure. | It demonstrates why filesystem semantics require privileged infrastructure beyond an engine contract. | Keep working-set and mount intent declarative; reject POSIX mount, metadata-engine and FUSE implementation in core. |
|
|
158
|
+
| `ipfs/kubo` | [repository][47] | The dual-licensed node uses CIDs, verifiable transfer and optional gateway/FUSE/daemon surfaces. | It corroborates content-addressable integrity and the cost of service, peer and mount responsibilities. | Consider content-addressed receipt fields; do not add a peer node, HTTP gateway or mount. |
|
|
159
|
+
| `minio/minio` | [repository][48] | The AGPL-3.0 object store is source-only and explicitly warns that deployment, credentials and container operations remain operator responsibilities. | It corroborates provider responsibility boundaries and license-aware dependency rejection. | Use S3 capability concepts only; do not add MinIO code, runtime or AGPL dependency. |
|
|
160
|
+
|
|
161
|
+
## Additional storage disposition
|
|
162
|
+
|
|
163
|
+
The sources reinforce a possible 1.8.16 **provider feature matrix** that captures `rangeRead`, `conditionalWrite`, `multipart`, `integrityClaim`, `objectImmutability`, `retention`, `mountRequired`, and `credentialOwner` as adapter-reported facts. The core must reject impossible plans before I/O and must never translate remote storage into a claim of RAM, VRAM, local POSIX semantics, unbounded throughput or persistent compute.
|
|
164
|
+
|
|
165
|
+
## Additional workflow and queue evidence
|
|
166
|
+
|
|
167
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
168
|
+
|---|---|---|---|---|
|
|
169
|
+
| `dbos-inc/dbos-transact-ts` | [repository][49] | The MIT durable-workflow SDK uses a Postgres persistence layer for checkpoints, queueing, limits, deduplication, scheduling and workflow management. | It corroborates separating serializable run records and idempotency keys from a provider-specific execution service. | Consider run-state and deduplication receipt fields; reject Postgres runtime, worker loop and autonomous scheduling in core. |
|
|
170
|
+
| `vercel/workflow` | [repository][50] | The Apache-2.0 SDK persists progress, retries steps and can suspend workflows, with managed, self-hosted and custom-world deployment options. | It reinforces the distinction between a portable workflow model and an operator-provided durable backend. | Consider an adapter capability declaration for persistence/resume; do not embed a managed backend or retries. |
|
|
171
|
+
| `taskforcesh/bullmq` | [repository][51] | The MIT queue exposes priorities, concurrency, pause/resume, rate limits, deduplication and sandboxed workers over external Redis/Postgres-backed services. | It corroborates that queue semantics depend on a specific executor/store and must be claimed by an adapter. | Retain Saddle's lease/idempotency contracts; do not add a queue dependency or worker. |
|
|
172
|
+
| `Webslash/duty` | [repository][52] | The unreleased project describes cached activities and resume-after-failure semantics but states it cannot yet be installed. | It is an emergent candidate, not production evidence. | Record as watchlist only; do not derive an implementation from an unreleased API. |
|
|
173
|
+
|
|
174
|
+
## Additional workflow disposition
|
|
175
|
+
|
|
176
|
+
The combined sources support a later **durability capability receipt** with declared `checkpointStore`, `leaseAuthority`, `deduplicationScope`, `retryAuthority`, `scheduleAuthority`, `cancellationConfirmation` and `retentionOwner` fields. It must never promise exactly-once external side effects, automatic recovery or background execution without an adapter that has positively provided those capabilities.
|
|
177
|
+
|
|
178
|
+
## Additional browser automation evidence
|
|
179
|
+
|
|
180
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
181
|
+
|---|---|---|---|---|
|
|
182
|
+
| `microsoft/playwright` | [repository][53] | The Apache-2.0 framework offers isolated browser contexts, accessibility-oriented locators, stable references, traces and artifact capture. | It corroborates Saddle's bounded browser snapshot, stable-ref and trace-oriented contracts. | Consider adapter-independent trace/snapshot receipt fields; do not add a browser binary or automation runtime dependency. |
|
|
183
|
+
| `puppeteer/puppeteer` | [repository][54] | The Apache-2.0 library controls browsers via DevTools/BiDi and separates browser download from the lighter core library. | It reinforces explicit browser lifecycle and dependency acquisition. | Keep browser launch/configuration in adapters; do not trigger downloads or launch browsers from core. |
|
|
184
|
+
| `browser-use/browser-use` | [repository][55] | The MIT agent advertises profile reuse, hosted execution, proxy rotation, stealth and CAPTCHA-related capabilities alongside agent control. | It is useful negative evidence for separating consented browser context from anti-detection functionality. | Retain user-controlled context descriptors; reject stealth, proxy rotation, CAPTCHA circumvention, profile synchronization and credential reuse features. |
|
|
185
|
+
| `vercel-labs/agent-browser` | [repository][56] | The Apache-2.0 CLI exposes accessibility snapshots, stable tab/ref handles, tracing, output limits and explicit session commands. | It corroborates explicit handles, fresh snapshots after state changes and structured observability. | Consider an adapter-neutral stale-reference/trace receipt; do not add a CLI daemon, CDP client, cookie import or browser control surface. |
|
|
186
|
+
|
|
187
|
+
## Additional browser disposition
|
|
188
|
+
|
|
189
|
+
The evidence supports a future **browser interaction receipt** that records snapshot identity, reference scope, session isolation claim, trace artifact digest and an explicit `userContextProvided` flag. It must expire refs when a snapshot changes, avoid carrying cookie or credential contents, require user confirmation for sensitive browser actions and forbid any stealth, CAPTCHA, fingerprint or anti-bot bypass mode.
|
|
190
|
+
|
|
191
|
+
## Additional crawling and extraction evidence
|
|
192
|
+
|
|
193
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
194
|
+
|---|---|---|---|---|
|
|
195
|
+
| `scrapy/scrapy` | [repository][57] | The BSD-3-Clause framework is a structured-data crawler with extensive documentation and tests. | It corroborates a clear crawler/extractor boundary rather than implicit browser behavior. | Use as an architecture reference only; do not add a Python crawler runtime. |
|
|
196
|
+
| `unclecode/crawl4AI` | [repository][58] | The Apache-2.0 crawler documents structured extraction, schema strategies, resume state and secure-by-default Docker changes, but also profiles, proxies, user scripts and stealth mode. | It provides both useful extraction-state patterns and explicit negative patterns for Saddle. | Consider bounded extraction/continuation receipts; reject stealth, proxying, custom page scripts, stored profiles and built-in service deployment. |
|
|
197
|
+
| `scrapinghub/frontera` | [repository][59] | The BSD-3-Clause project separates frontier policy from pluggable backend and transport implementations and provides breadth/depth discovery strategies. | It corroborates an explicit frontier plan whose queue and transport remain externally supplied. | Consider immutable frontier decision records; do not implement distributed crawling or message buses. |
|
|
198
|
+
| `crawler-commons/crawler-commons` | [repository][60] | The Apache-2.0 components focus on reusable robots and sitemap parsing, including RFC 9309-aligned robots behavior and parser hardening. | It corroborates policy parsing and strict input validation as separate from fetch execution. | Consider a validated robots/sitemap evidence envelope; no Java dependency or fetcher is selected. |
|
|
199
|
+
|
|
200
|
+
## Additional crawling disposition
|
|
201
|
+
|
|
202
|
+
The evidence supports a future **crawl policy receipt** containing a normalized origin, robots decision and source, sitemap discovery evidence, request budget, parser limits and explicit `fetchAdapterRequired` status. It must not fetch, crawl, execute scripts, store cookies, bypass access controls or claim a resource was permitted unless the caller provides the source and parser evidence.
|
|
203
|
+
|
|
204
|
+
## Additional sandbox and isolation evidence
|
|
205
|
+
|
|
206
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
207
|
+
|---|---|---|---|---|
|
|
208
|
+
| `bytecodealliance/wasmtime` | [repository][61] | The Apache-2.0 runtime emphasizes WASI host integration, configurable CPU/memory consumption and an independently maintained security process. | It corroborates explicit module format, host capability and resource-budget declarations. | Consider a runtime-neutral WASM capability receipt; do not embed or invoke a runtime. |
|
|
209
|
+
| `google/nsjail` | [repository][62] | The Apache-2.0 tool requires Linux namespace, cgroup, rlimit, seccomp, mount and network configuration to isolate processes. | It demonstrates that credible process isolation is host-specific and privileged. | Keep `tmpfs`, mount, resource and network controls as adapter requirements; do not execute nsjail or emit commands from core. |
|
|
210
|
+
| `firecracker-microvm/firecracker` | [repository][63] | The Apache-2.0 microVM monitor depends on KVM and a correctly configured Linux host and provides host-controlled vCPU, memory, devices, rates and jailer settings. | It corroborates a detailed external isolation-attestation model. | Consider receipt fields for host-provided isolation; reject microVM control plane, KVM access and privileged setup. |
|
|
211
|
+
| `gvisor/gvisor` | [repository][64] | The candidate was selected for userspace-kernel isolation comparison, but primary page extraction did not return usable content in this run. | It remains a pending source rather than implementation evidence. | Defer until a primary source is captured; do not infer gVisor behavior from summaries. |
|
|
212
|
+
|
|
213
|
+
## Additional sandbox disposition
|
|
214
|
+
|
|
215
|
+
The source set supports a future **isolation attestation input** with `runtimeKind`, `hostAuthority`, `filesystemPolicy`, `networkPolicy`, `cpuBudget`, `memoryBudget`, `processBudget`, `timeoutBudget`, `imageOrModuleDigest` and `evidenceStatus`. A caller-provided attestation can be validated for completeness but cannot establish that a host is isolated, privileged operations are allowed or a workload was executed.
|
|
216
|
+
|
|
217
|
+
## Additional document ingestion and RAG evidence
|
|
218
|
+
|
|
219
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
220
|
+
|---|---|---|---|---|
|
|
221
|
+
| `docling-project/docling` | [repository][65] | The MIT tool provides a unified document representation with format-specific conversion, local execution and optional OCR/model/service integrations. | It corroborates the need to preserve content format, transform identity and output provenance. | Consider document-transform receipt fields only; do not add OCR, model, converter or service dependencies. |
|
|
222
|
+
| `Unstructured-IO/unstructured` | [repository][66] | The Apache-2.0 library partitions multiple document types with optional system dependencies, container use and connectors. | It reinforces that parsing capability depends on explicit installed toolchains and source types. | Consider an adapter-reported parser capability matrix; do not run parsers or include optional toolchains in core. |
|
|
223
|
+
| `deepset-ai/haystack` | [repository][67] | The Apache-2.0 framework exposes retrieval, routing, memory, generation and tool lifecycle with telemetry and integrations. | It corroborates a bounded, inspectable context pipeline but also demonstrates scope that belongs outside a portable engine. | Consider a context selection/audit receipt; reject models, embeddings, telemetry and agent runtime integrations. |
|
|
224
|
+
| `run-llama/llama_index` | [repository][68] | The MIT framework separates core from numerous integrations and documents storage, retrieval and build-asset attestation. | It corroborates split core/adapter architecture and independent asset verification. | Consider source/integration identity fields; do not add vector index, LLM, connector or disk persistence. |
|
|
225
|
+
|
|
226
|
+
## Additional document disposition
|
|
227
|
+
|
|
228
|
+
The sources support a potential **context provenance envelope** with `sourceDigest`, `sourceLocator`, `retrievalMethod`, `transformIdentity`, `transformDigest`, `chunkIdentity`, `citationRange`, `contextBudget` and `adapterRequired`. The envelope must distinguish caller claims from independently verified data and must not assert document understanding, citation correctness, embedding quality or durable storage without an external adapter.
|
|
229
|
+
|
|
230
|
+
## Additional supply-chain and policy evidence
|
|
231
|
+
|
|
232
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
233
|
+
|---|---|---|---|---|
|
|
234
|
+
| `in-toto/in-toto` | [repository][69] | The framework models owner-signed layouts, authorized functionaries, signed link metadata, material/product rules and independent verification. | It corroborates binding a release claim to explicit expected inputs, steps and evidence rather than a mutable label. | Consider a lightweight expected-evidence schema; do not add signing, command execution or key management. |
|
|
235
|
+
| `ossf/scorecard` | [repository][70] | The Apache-2.0 tool presents structured heuristic checks and explicitly warns that aggregate scores are not definitive and can have false positives/negatives. | It corroborates reporting individual evidence and decisions instead of inventing a single security verdict. | Consider granular policy findings; do not embed a scanner or create a score claim. |
|
|
236
|
+
| `DependencyTrack/dependency-track` | [repository][71] | The Apache-2.0 platform consumes SBOMs to analyze component and supply-chain risk and operates as a separate service. | It reinforces SBOM as external evidence with a digest and lifecycle distinct from runtime code. | Consider optional SBOM-reference fields; do not add component analysis, database or service dependencies. |
|
|
237
|
+
| `open-policy-agent/opa` | [repository][72] | The Apache-2.0 policy engine separates declarative decision evaluation from enforcement by an integrating service. | It corroborates Saddle's plan/decision versus caller-enforced action boundary. | Consider plain-data decision records; do not embed Rego, a policy server or enforcement runtime. |
|
|
238
|
+
|
|
239
|
+
## Additional security disposition
|
|
240
|
+
|
|
241
|
+
The combined evidence supports a future **evidence policy result** with `subjectDigest`, `expectedIdentity`, `expectedWorkflow`, `evidenceKind`, `evidenceStatus`, `policyDecision`, `reasons` and `verificationTime`. It must distinguish `absent`, `declared`, `downloaded`, `checked` and `verified` evidence and cannot label an artifact as signed, secure, compliant or trusted without a verifier result supplied by the caller.
|
|
242
|
+
|
|
243
|
+
## Additional release-engineering evidence
|
|
244
|
+
|
|
245
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
246
|
+
|---|---|---|---|---|
|
|
247
|
+
| `semantic-release/semantic-release` | [repository][73] | The MIT tool makes a release pipeline explicit: verify conditions, identify prior tag, analyze changes, generate notes, prepare, publish and notify. | It corroborates ordered release gates and the distinction between preparation and publication. | Consider a data-only release readiness result; do not install plugins, analyze commits automatically or publish. |
|
|
248
|
+
| `googleapis/release-please` | [repository][74] | The Apache-2.0 tool prepares release PRs, updates manifests and changelogs, tags and creates releases, while explicitly not handling package publication. | It corroborates separating release preparation from registry publication. | Retain Saddle's tag-derived workflows; consider a manifest-version consistency receipt only. |
|
|
249
|
+
| `changesets/changesets` | [repository][75] | The MIT tool collects contributor-declared changes to manage versions, changelogs and publishing, notably for interdependent packages. | It demonstrates traceable change intent as distinct from generated build output. | Consider a change-impact record; do not adopt a monorepo versioning system. |
|
|
250
|
+
| `goreleaser/goreleaser` | [repository][76] | The MIT release tool focuses on multi-platform release engineering and CI-oriented distribution. | It corroborates that packaging matrices belong in release pipelines rather than a shared runtime. | Retain target-plan contracts; do not add an external packaging engine or sign/publish abstraction. |
|
|
251
|
+
|
|
252
|
+
## Additional release disposition
|
|
253
|
+
|
|
254
|
+
The sources support a future **release readiness receipt** with `sourceTag`, `manifestVersions`, `requiredGates`, `artifactPlanDigest`, `publicationTargets`, `credentialOwner`, `signingStatus` and `verificationRequirements`. It must remain descriptive: it cannot create tags, alter version files, trigger CI, publish, sign or assert artifact availability.
|
|
255
|
+
|
|
256
|
+
## Additional runner and CI evidence
|
|
257
|
+
|
|
258
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
259
|
+
|---|---|---|---|---|
|
|
260
|
+
| `actions/runner-images` | [repository][77] | The MIT repository documents runner image labels, exact OS/architecture choices, image lifecycle and deprecation policy. | It corroborates selecting immutable or explicit runner capability facts instead of relying on a `latest` label. | Consider runner-image identity and lifecycle fields in capability reports; do not assume image contents or provision VMs. |
|
|
261
|
+
| `forgejo/forgejo` | [repository][78] | The Forgejo candidate was selected to evaluate Actions-compatible workflow hosting, but primary page extraction did not return usable content in this run. | It remains pending evidence. | Do not claim compatibility or derive implementation until a primary source is captured. |
|
|
262
|
+
| `woodpecker-ci/woodpecker` | [repository][79] | The Apache-2.0 CI engine separates server, agents, plugins and persistence and is used by Codeberg. | It corroborates an externally operated CI/agent boundary. | Consider an operator/agent capability declaration; do not add a CI database, agent, plugin or execution server. |
|
|
263
|
+
| `nektos/act` | [repository][80] | The MIT local runner reads workflow files, resolves dependencies and uses Docker to pull/build images and execute containers. | It demonstrates that local workflow compatibility carries Docker and filesystem side effects. | Retain offline target-plan validation only; do not run workflows, images or Docker from the core. |
|
|
264
|
+
|
|
265
|
+
## Additional runner disposition
|
|
266
|
+
|
|
267
|
+
The sources support a future **runner environment receipt** with `forgeKind`, `workflowDialect`, `runnerImage`, `os`, `architecture`, `toolchainEvidence`, `executionBoundary`, `ephemeralClaim`, `networkAuthority` and `credentialOwner`. A receipt may identify declared compatibility, but must not claim an action will run, an image is available or a runner is isolated without operator-provided evidence.
|
|
268
|
+
|
|
269
|
+
## Additional extension, PWA and Mini App evidence
|
|
270
|
+
|
|
271
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
272
|
+
|---|---|---|---|---|
|
|
273
|
+
| `wxt-dev/wxt` | [repository][81] | The MIT framework supports extension manifest variants, browser targets, TypeScript entrypoints and packaging features. | It corroborates treating extension target and manifest version as explicit build inputs. | Consider extension-target requirement validation; do not add an extension build framework. |
|
|
274
|
+
| `PlasmoHQ/plasmo` | [repository][82] | The MIT framework exposes content scripts, background workers, storage, messaging, environment files and remote-code options. | It demonstrates platform powers that must remain outside Saddle's shared core. | Keep capability declarations; reject remote code, storage/messaging runtime, environment handling and automated deployment. |
|
|
275
|
+
| `vite-pwa/vite-plugin-pwa` | [repository][83] | The MIT plugin generates service workers, manifest data, offline caching and update behavior. | It corroborates modeling cache strategy and lifecycle as explicit requirements. | Retain declarative PWA planning; never register a service worker or mutate a cache from core. |
|
|
276
|
+
| `Telegram-Mini-Apps/tma.js` | [repository][84] | The MIT monorepo provides client/backend packages and documentation for Telegram Mini Apps. | It corroborates keeping platform lifecycle and request validation in platform-specific adapters. | Retain Mini App requirement contract; do not connect to Telegram, validate init data or handle credentials in core. |
|
|
277
|
+
|
|
278
|
+
## Additional surface disposition
|
|
279
|
+
|
|
280
|
+
The evidence supports a future **surface capability receipt** with `surfaceKind`, `manifestVersion`, `declaredPermissions`, `backgroundLifecycle`, `cacheStrategy`, `platformValidationRequired`, `credentialOwner` and `deploymentOwner`. It may validate contradictory requirements, but cannot register workers, request browser permissions, contact a Mini App platform or publish an extension.
|
|
281
|
+
|
|
282
|
+
## Additional storage synchronization and VFS evidence
|
|
283
|
+
|
|
284
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
285
|
+
|---|---|---|---|---|
|
|
286
|
+
| `systemd/casync` | [repository][85] | The LGPL-2.1 tool combines content-defined chunks, strong digests, chunk indexes and reproducible serialization for transfer and storage. | It corroborates manifests that bind chunk identity and ordered reconstruction. | Consider a format-agnostic chunk-index evidence model; do not add compression, mounting, extraction or transfer tooling. |
|
|
287
|
+
| `seaweedfs/seaweedfs` | [repository][86] | The Apache-2.0 system offers object/file services, replication, ranges, tiers, metadata stores, cloud integration and mount options. | It reinforces that tiering and remote object access require an active distributed service and credentials. | Consider provider capability claims for ranges/replication/tier; reject server, mount, keys, metadata and cloud-sync operations. |
|
|
288
|
+
| `juicedata/juicefs` | [repository][87] | The Apache-2.0 filesystem combines object storage with a metadata engine, client mounts, caching and fixed block/chunk structure. | It demonstrates that POSIX semantics over object storage require a specialized client, metadata authority and mounted host. | Keep this as negative evidence against claiming remote storage is native RAM/POSIX; do not add FUSE, database or mount support. |
|
|
289
|
+
| `ipfs/kubo` | [repository][88] | The dual-licensed node serves content-addressed data with daemon, gateway, RPC, routing and optional FUSE mounts. | It corroborates content identity and trustless retrieval concepts while showing runtime/network requirements. | Consider CID-style external identity as an adapter field; reject node, peer routing, gateway, RPC and FUSE integration. |
|
|
290
|
+
|
|
291
|
+
## Additional storage disposition
|
|
292
|
+
|
|
293
|
+
The sources support a future **storage identity and capability receipt** with `contentIdentity`, `chunkIndexDigest`, `rangeRead`, `integrityMethod`, `replicationEvidence`, `tier`, `metadataAuthority`, `mountRequired`, `daemonRequired`, `networkAuthority` and `credentialOwner`. It must make each remote dependency visible and cannot imply that a remote bucket, cache, VFS or distributed store provides local RAM, local POSIX semantics, free egress or persistent compute.
|
|
294
|
+
|
|
295
|
+
## Additional protocol and tool-server evidence
|
|
296
|
+
|
|
297
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
298
|
+
|---|---|---|---|---|
|
|
299
|
+
| `modelcontextprotocol/modelcontextprotocol` | [repository][89] | The MIT repository maintains the MCP specification and a TypeScript-first schema also published as JSON Schema. | It corroborates schema-first interoperable contracts independent from a server runtime. | Consider optional schema identity/digest references; do not implement a transport or client/server runtime. |
|
|
300
|
+
| `modelcontextprotocol/typescript-sdk` | [repository][90] | The SDK separates core client/server libraries and intentionally thin HTTP framework middleware. | It reinforces thin adapter layers with no business logic. | Consider pure adapter capability declarations; do not depend on MCP packages, OAuth helpers or middleware. |
|
|
301
|
+
| `modelcontextprotocol/servers` | [repository][91] | Reference servers are expressly educational rather than production-ready and expose filesystem, Git, memory and fetch capabilities. | It corroborates that tools require a threat model and scoped access policy. | Consider a tool capability/allow-list receipt; do not run reference servers or expose local filesystem/Git/network tools. |
|
|
302
|
+
| `github/github-mcp-server` | [repository][92] | The MIT server uses toolsets and read-only restrictions, but supports OAuth/PAT authentication and GitHub mutations when enabled. | It corroborates least-privilege tool selection and explicit read-only mode. | Consider declarative requested/allowed toolsets; reject token handling, OAuth, HTTP/Docker serving and GitHub API operations. |
|
|
303
|
+
|
|
304
|
+
## Additional protocol disposition
|
|
305
|
+
|
|
306
|
+
The evidence supports a future **tool capability receipt** with `protocolVersion`, `schemaDigest`, `transportKind`, `requestedToolsets`, `allowedToolsets`, `readOnly`, `credentialOwner`, `consentRequired` and `adapterRequired`. It must not open a transport, spawn a server, acquire credentials, contact an API or treat a declared allow-list as an authorization grant.
|
|
307
|
+
|
|
308
|
+
## Additional agent orchestration and observability evidence
|
|
309
|
+
|
|
310
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
311
|
+
|---|---|---|---|---|
|
|
312
|
+
| `langchain-ai/langgraph` | [repository][93] | The MIT framework presents durable state, human oversight, memory and runtime visibility for long-running agents. | It corroborates serializable state transitions and approval points. | Consider a generic state-transition/approval receipt; do not add an agent runtime, persistence service or model integration. |
|
|
313
|
+
| `microsoft/autogen` | [repository][94] | The code is MIT but the repository is in maintenance mode and includes model clients, MCP servers, code execution and multi-agent runtime layers. | It is both evidence for layered boundaries and a warning against depending on a maintenance-mode orchestration framework. | Record as an emergent-to-maintenance comparison; reject model, MCP process, code execution and credential flows. |
|
|
314
|
+
| `PrefectHQ/prefect` | [repository][95] | The Apache-2.0 framework performs scheduling, retries, caching, event automation and tracking through a server or cloud service. | It reinforces that durable orchestration needs a declared operator and persistence authority. | Consider scheduled-work capability claims only; do not add a scheduler, service, retry loop or cloud client. |
|
|
315
|
+
| `langfuse/langfuse` | [repository][96] | The MIT project offers LLM traces, evaluations and observability via hosted/self-hosted services, SDKs and credentials. | It corroborates trace identity and privacy-aware instrumentation boundaries. | Consider low-cardinality trace receipt metadata; do not add telemetry, prompts, evaluations, databases or external APIs. |
|
|
316
|
+
|
|
317
|
+
## Additional agent disposition
|
|
318
|
+
|
|
319
|
+
The evidence supports a future **execution trace receipt** with `runIdentity`, `stateDigest`, `transition`, `approvalState`, `toolCallIdentity`, `traceDigest`, `telemetryOwner`, `retentionOwner` and `redactionStatus`. It must not capture prompt content, store user data, invoke models, schedule work, retry tools or report a run as completed without an adapter-produced confirmation.
|
|
320
|
+
|
|
321
|
+
## Final supply-chain evidence: 100-source threshold
|
|
322
|
+
|
|
323
|
+
| Candidate | Primary source | Evidence observed | Relevance to Saddle | Disposition |
|
|
324
|
+
|---|---|---|---|---|
|
|
325
|
+
| `sigstore/cosign` | [repository][97] | The Apache-2.0 tool signs and verifies artifacts by digest, identity and issuer, with transparency-log and offline bundle options. | It corroborates verification inputs that bind a subject digest to an expected signer identity. | Consider a verifier-result adapter schema; do not sign, perform OAuth, access KMS, contact a registry or claim SignPath/Sigstore coverage. |
|
|
326
|
+
| `anchore/syft` | [repository][98] | The Apache-2.0 tool generates SBOMs from images, filesystems and archives in multiple formats. | It corroborates SBOM format/subject-digest facts as metadata distinct from vulnerability outcomes. | Consider an external-SBOM receipt; do not scan local files, images or archives from the core. |
|
|
327
|
+
| `anchore/grype` | [repository][99] | The Apache-2.0 scanner evaluates images, filesystems and SBOMs with vulnerability data and risk prioritization. | It demonstrates that findings depend on a scanner, a data source and a policy. | Consider a scanner-result envelope; do not add CVE fetching, scoring, scanning or remediation to the core. |
|
|
328
|
+
| `ossf/scorecard` | [repository][100] | The Apache-2.0 tool reports structured heuristics and warns that aggregate scores are neither definitive nor one-size-fits-all. | It corroborates reporting granular policy evidence instead of a generic security score. | Consider per-check evidence fields; do not create a trust score or imply absence of vulnerabilities. |
|
|
329
|
+
|
|
330
|
+
## Research threshold and synthesis gate
|
|
331
|
+
|
|
332
|
+
This document now records **100 primary repository candidates** in the planned categories. A candidate is treated as a completed source only when a primary repository page was successfully extracted; partial extraction is sufficient only for the specifically recorded facts, while an extraction failure remains explicitly pending. The next stage must create an evidence-to-gap matrix and select a small, testable set of contracts; it must not copy code, dependencies, workflow tokens, credentials, setup commands or operating assumptions from any candidate.
|
|
333
|
+
|
|
334
|
+
## Final supply-chain disposition
|
|
335
|
+
|
|
336
|
+
The combined evidence supports a future **evidence evaluation receipt** with `subjectDigest`, `evidenceKind`, `producer`, `verificationMethod`, `verificationStatus`, `policyChecks`, `findingsSummary`, `limitations` and `verifiedAt`. Valid statuses must distinguish `notProvided`, `declared`, `parsed`, `checked`, `verified`, `rejected` and `unknown`. No status may be rendered as “signed,” “secure,” “trusted,” “vulnerability-free” or “compliant” without the specific independently verified evidence required for that claim.
|
|
337
|
+
|
|
338
|
+
## References
|
|
339
|
+
|
|
340
|
+
[1]: https://github.com/browser-use/browser-use "browser-use/browser-use"
|
|
341
|
+
[2]: https://github.com/vercel-labs/agent-browser "vercel-labs/agent-browser"
|
|
342
|
+
[3]: https://github.com/firecrawl/web-agent "firecrawl/web-agent"
|
|
343
|
+
[4]: https://github.com/browseros-ai/BrowserOS "browseros-ai/BrowserOS"
|
|
344
|
+
[5]: https://github.com/unclecode/crawl4AI "unclecode/crawl4AI"
|
|
345
|
+
[6]: https://github.com/scrapy/scrapy "scrapy/scrapy"
|
|
346
|
+
[7]: https://github.com/apify/crawlee "apify/crawlee"
|
|
347
|
+
[8]: https://github.com/firecrawl/firecrawl "firecrawl/firecrawl"
|
|
348
|
+
[9]: https://github.com/temporalio/temporal "temporalio/temporal"
|
|
349
|
+
[10]: https://github.com/platformatic/job-queue "platformatic/job-queue"
|
|
350
|
+
[11]: https://github.com/rails/solid_queue "rails/solid_queue"
|
|
351
|
+
[12]: https://github.com/danielgerlag/workflow-core "danielgerlag/workflow-core"
|
|
352
|
+
[13]: https://github.com/seaweedfs/seaweedfs "seaweedfs/seaweedfs"
|
|
353
|
+
[14]: https://github.com/Barre/zerofs "Barre/ZeroFS"
|
|
354
|
+
[15]: https://github.com/veged/omniFUSE "veged/omniFUSE"
|
|
355
|
+
[16]: https://github.com/dennwc/cas "dennwc/cas"
|
|
356
|
+
[17]: https://github.com/ciresnave/wasm-sandbox "ciresnave/wasm-sandbox"
|
|
357
|
+
[18]: https://github.com/aayushadhikari7/aegis "aayushadhikari7/aegis"
|
|
358
|
+
[19]: https://github.com/anthropic-experimental/sandbox-runtime "anthropic-experimental/sandbox-runtime"
|
|
359
|
+
[20]: https://github.com/opensandbox-group/OpenSandbox "opensandbox-group/OpenSandbox"
|
|
360
|
+
[21]: https://github.com/slsa-framework/slsa-github-generator "slsa-framework/slsa-github-generator"
|
|
361
|
+
[22]: https://github.com/sigstore/cosign "sigstore/cosign"
|
|
362
|
+
[23]: https://github.com/anchore/syft "anchore/syft"
|
|
363
|
+
[24]: https://github.com/aquasecurity/trivy "aquasecurity/trivy"
|
|
364
|
+
[25]: https://github.com/nanobrowser/nanobrowser "nanobrowser/nanobrowser"
|
|
365
|
+
[26]: https://github.com/GoogleChrome/chrome-extensions-samples "GoogleChrome/chrome-extensions-samples"
|
|
366
|
+
[27]: https://github.com/GoogleChrome/workbox "GoogleChrome/workbox"
|
|
367
|
+
[28]: https://github.com/Telegram-Mini-Apps/tma.js "Telegram-Mini-Apps/tma.js"
|
|
368
|
+
[29]: https://github.com/modelcontextprotocol/typescript-sdk "modelcontextprotocol/typescript-sdk"
|
|
369
|
+
[30]: https://github.com/modelcontextprotocol/servers "modelcontextprotocol/servers"
|
|
370
|
+
[31]: https://github.com/infiniflow/ragflow "infiniflow/ragflow"
|
|
371
|
+
[32]: https://github.com/mondaycom/agent-tool-protocol "mondaycom/agent-tool-protocol"
|
|
372
|
+
[33]: https://github.com/actions/runner "actions/runner"
|
|
373
|
+
[34]: https://github.com/cisco-open/forge "cisco-open/forge"
|
|
374
|
+
[35]: https://github.com/forgejo/forgejo "forgejo/forgejo"
|
|
375
|
+
[36]: https://github.com/forgejo/runner "forgejo/runner"
|
|
376
|
+
[37]: https://github.com/goreleaser/goreleaser "goreleaser/goreleaser"
|
|
377
|
+
[38]: https://github.com/jreleaser/jreleaser "jreleaser/jreleaser"
|
|
378
|
+
[39]: https://github.com/tauri-apps/tauri "tauri-apps/tauri"
|
|
379
|
+
[40]: https://github.com/ionic-team/capacitor "ionic-team/capacitor"
|
|
380
|
+
[41]: https://github.com/woodpecker-ci/woodpecker "woodpecker-ci/woodpecker"
|
|
381
|
+
[42]: https://github.com/actions/actions-runner-controller "actions/actions-runner-controller"
|
|
382
|
+
[43]: https://forgejo.org/docs/v15.0/admin/actions/ "Forgejo Actions administrator guide"
|
|
383
|
+
[44]: https://forgejo.org/docs/v15.0/user/actions/reference/ "Forgejo Actions reference"
|
|
384
|
+
[45]: https://github.com/rclone/rclone "rclone/rclone"
|
|
385
|
+
[46]: https://github.com/juicedata/juicefs "juicedata/juicefs"
|
|
386
|
+
[47]: https://github.com/ipfs/kubo "ipfs/kubo"
|
|
387
|
+
[48]: https://github.com/minio/minio "minio/minio"
|
|
388
|
+
[49]: https://github.com/dbos-inc/dbos-transact-ts "dbos-inc/dbos-transact-ts"
|
|
389
|
+
[50]: https://github.com/vercel/workflow "vercel/workflow"
|
|
390
|
+
[51]: https://github.com/taskforcesh/bullmq "taskforcesh/bullmq"
|
|
391
|
+
[52]: https://github.com/Webslash/duty "Webslash/duty"
|
|
392
|
+
[53]: https://github.com/microsoft/playwright "microsoft/playwright"
|
|
393
|
+
[54]: https://github.com/puppeteer/puppeteer "puppeteer/puppeteer"
|
|
394
|
+
[55]: https://github.com/browser-use/browser-use "browser-use/browser-use"
|
|
395
|
+
[56]: https://github.com/vercel-labs/agent-browser "vercel-labs/agent-browser"
|
|
396
|
+
[57]: https://github.com/scrapy/scrapy "scrapy/scrapy"
|
|
397
|
+
[58]: https://github.com/unclecode/crawl4AI "unclecode/crawl4AI"
|
|
398
|
+
[59]: https://github.com/scrapinghub/frontera "scrapinghub/frontera"
|
|
399
|
+
[60]: https://github.com/crawler-commons/crawler-commons "crawler-commons/crawler-commons"
|
|
400
|
+
[61]: https://github.com/bytecodealliance/wasmtime "bytecodealliance/wasmtime"
|
|
401
|
+
[62]: https://github.com/google/nsjail "google/nsjail"
|
|
402
|
+
[63]: https://github.com/firecracker-microvm/firecracker "firecracker-microvm/firecracker"
|
|
403
|
+
[64]: https://github.com/gvisor/gvisor "gvisor/gvisor"
|
|
404
|
+
[65]: https://github.com/docling-project/docling "docling-project/docling"
|
|
405
|
+
[66]: https://github.com/Unstructured-IO/unstructured "Unstructured-IO/unstructured"
|
|
406
|
+
[67]: https://github.com/deepset-ai/haystack "deepset-ai/haystack"
|
|
407
|
+
[68]: https://github.com/run-llama/llama_index "run-llama/llama_index"
|
|
408
|
+
[69]: https://github.com/in-toto/in-toto "in-toto/in-toto"
|
|
409
|
+
[70]: https://github.com/ossf/scorecard "ossf/scorecard"
|
|
410
|
+
[71]: https://github.com/DependencyTrack/dependency-track "DependencyTrack/dependency-track"
|
|
411
|
+
[72]: https://github.com/open-policy-agent/opa "open-policy-agent/opa"
|
|
412
|
+
[73]: https://github.com/semantic-release/semantic-release "semantic-release/semantic-release"
|
|
413
|
+
[74]: https://github.com/googleapis/release-please "googleapis/release-please"
|
|
414
|
+
[75]: https://github.com/changesets/changesets "changesets/changesets"
|
|
415
|
+
[76]: https://github.com/goreleaser/goreleaser "goreleaser/goreleaser"
|
|
416
|
+
[77]: https://github.com/actions/runner-images "actions/runner-images"
|
|
417
|
+
[78]: https://github.com/forgejo/forgejo "forgejo/forgejo"
|
|
418
|
+
[79]: https://github.com/woodpecker-ci/woodpecker "woodpecker-ci/woodpecker"
|
|
419
|
+
[80]: https://github.com/nektos/act "nektos/act"
|
|
420
|
+
[81]: https://github.com/wxt-dev/wxt "wxt-dev/wxt"
|
|
421
|
+
[82]: https://github.com/PlasmoHQ/plasmo "PlasmoHQ/plasmo"
|
|
422
|
+
[83]: https://github.com/vite-pwa/vite-plugin-pwa "vite-pwa/vite-plugin-pwa"
|
|
423
|
+
[84]: https://github.com/Telegram-Mini-Apps/telegram-apps "Telegram-Mini-Apps/tma.js"
|
|
424
|
+
[85]: https://github.com/systemd/casync "systemd/casync"
|
|
425
|
+
[86]: https://github.com/seaweedfs/seaweedfs "seaweedfs/seaweedfs"
|
|
426
|
+
[87]: https://github.com/juicedata/juicefs "juicedata/juicefs"
|
|
427
|
+
[88]: https://github.com/ipfs/kubo "ipfs/kubo"
|
|
428
|
+
[89]: https://github.com/modelcontextprotocol/modelcontextprotocol "modelcontextprotocol/modelcontextprotocol"
|
|
429
|
+
[90]: https://github.com/modelcontextprotocol/typescript-sdk "modelcontextprotocol/typescript-sdk"
|
|
430
|
+
[91]: https://github.com/modelcontextprotocol/servers "modelcontextprotocol/servers"
|
|
431
|
+
[92]: https://github.com/github/github-mcp-server "github/github-mcp-server"
|
|
432
|
+
[93]: https://github.com/langchain-ai/langgraph "langchain-ai/langgraph"
|
|
433
|
+
[94]: https://github.com/microsoft/autogen "microsoft/autogen"
|
|
434
|
+
[95]: https://github.com/PrefectHQ/prefect "PrefectHQ/prefect"
|
|
435
|
+
[96]: https://github.com/langfuse/langfuse "langfuse/langfuse"
|
|
436
|
+
[97]: https://github.com/sigstore/cosign "sigstore/cosign"
|
|
437
|
+
[98]: https://github.com/anchore/syft "anchore/syft"
|
|
438
|
+
[99]: https://github.com/anchore/grype "anchore/grype"
|
|
439
|
+
[100]: https://github.com/ossf/scorecard "ossf/scorecard"
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Saddle 1.8.16 comparative synthesis
|
|
2
|
+
|
|
3
|
+
## Scope and evidence boundary
|
|
4
|
+
|
|
5
|
+
This synthesis evaluates the 100 primary repository sources recorded in [repo-research-1.8.16.md](./repo-research-1.8.16.md). It does not copy source code, vendor dependencies, credentials, workflow configuration, service setup, operating assumptions, or claims of the reviewed projects. A candidate that lacked successful primary extraction is retained only as a pending source and is not used as implementation evidence.
|
|
6
|
+
|
|
7
|
+
The current baseline is Saddle 1.8.15. It already has deterministic storage pools and budgets, working-set planning, archive inspection, transform cache eligibility, provider-chain selection and cancellation plans, declarative delivery/PWA/surface requirements, release asset generation and local checksum verification. The selected 1.8.16 additions must remain additive, TypeScript-first, root-first, dependency-free, serializable and adapter-owned for all privileged or remote effects.
|
|
8
|
+
|
|
9
|
+
## Evidence-to-gap matrix
|
|
10
|
+
|
|
11
|
+
| Research theme | Repeated external pattern | Existing Saddle surface | Gap | Safe decision |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| Supply-chain provenance | Artifact digest, signer identity, issuer, evidence kind, explicit verification outcome | `release/assets.ts` produces metadata; `release/verify.ts` verifies checksum and declared signing state | Verification has no normalized evidence policy result or explicit unknown/not-provided state | **Adopt** data-only evidence evaluation receipt |
|
|
14
|
+
| SBOM and vulnerability assessment | SBOM subject, scanner provenance, policy checks, findings limitations, non-definitive heuristics | Asset metadata may include SBOM files; security gates run in CI | No portable envelope that preserves external scanner evidence without claiming secure/compliant | **Adopt** evidence envelope and policy evaluator |
|
|
15
|
+
| Release engineering | Distinct version, manifest, artifact plan, publish and verify stages | Tag-derived workflows and release verification exist | No serializable readiness receipt binding these claims before execution | **Adopt** release readiness receipt |
|
|
16
|
+
| Runner/forge portability | Workflow dialect, OS, architecture, image lifecycle, operator-controlled execution | Provider chain reports capacities and renders dispatch through injected adapters | No normalized environment evidence with freshness/source boundary | **Adopt later**; defer until runner reports need it |
|
|
17
|
+
| Storage/VFS | Content identity, range/replica/tier capability, mounting/daemon prerequisites | Storage pool, chunked storage and provider capability planning exist | Remote-operation evidence must remain separate from storage semantics | **Reject now**; current pool contracts cover the portable core |
|
|
18
|
+
| MCP/tool protocols | Schema identity, allow-list, read-only posture, consent and adapter boundary | MCP/browser/transport contracts exist | A generic tool-policy receipt is useful, but exposing one without a consumer would be premature | **Defer** |
|
|
19
|
+
| Agents/workflows | State transitions, approval and trace identity; runtime/telemetry ownership | Resumable workflow, cancellation/compensation and metrics exist | Full traces imply data retention and telemetry policy | **Defer**; preserve privacy boundaries |
|
|
20
|
+
| Browser/crawler | Session isolation, robots, structured extraction, bounded contexts | Browser snapshots, semantic/schema extraction and crawler policy exist | Common missing patterns center on stealth/evasion or service runtime | **Reject** incompatible patterns |
|
|
21
|
+
| Sandboxing/WASM | Explicit resources, filesystem/network policy and host-owned execution | Transform plans, archive inspection and injected isolation adapter exist | Runtime execution would require privileged host policy | **Reject now**; retain adapter-only design |
|
|
22
|
+
| Extension/PWA/Mini App | Manifest and lifecycle requirements distinct from host/platform behavior | Surface requirements and PWA plans exist | Lifecycle invocation requires platform integration | **Defer** |
|
|
23
|
+
|
|
24
|
+
## Selection method
|
|
25
|
+
|
|
26
|
+
Candidates were scored qualitatively against five mandatory criteria: evidence appears in more than one source; the addition fills a real public-contract gap; it can run without network, credentials, a daemon or privileged host action; it is testable through deterministic fixtures; and it preserves explicit uncertainty instead of manufacturing confidence.
|
|
27
|
+
|
|
28
|
+
| Candidate | Multi-source evidence | Gap clarity | Offline and deterministic | Risk | Decision |
|
|
29
|
+
|---|---:|---:|---:|---:|---|
|
|
30
|
+
| Evidence evaluation receipt | High | High | High | Low | **Selected** |
|
|
31
|
+
| Release readiness receipt | High | High | High | Low | **Selected** |
|
|
32
|
+
| Runner environment receipt | High | Medium | High | Low | Deferred after a consuming adapter is needed |
|
|
33
|
+
| Tool capability receipt | High | Medium | High | Medium | Deferred pending an explicit MCP use case |
|
|
34
|
+
| Execution trace receipt | High | Medium | Medium | Medium | Deferred due to retention/privacy policy |
|
|
35
|
+
| Storage identity receipt | High | Low | High | Medium | Rejected as overlapping existing storage contracts |
|
|
36
|
+
| Runtime sandbox controller | High | High | Low | High | Rejected: privileged execution is out of core scope |
|
|
37
|
+
|
|
38
|
+
## Implemented evidence blocks
|
|
39
|
+
|
|
40
|
+
The first 1.8.16 block adds a pure `release/evidence.ts` contract, exported through the package map, with no external dependencies and no network or filesystem side effects. It:
|
|
41
|
+
|
|
42
|
+
1. Normalize a caller-supplied evidence record for an artifact subject digest, producer identity, evidence kind, verification method and timestamp.
|
|
43
|
+
2. Distinguish `notProvided`, `declared`, `parsed`, `checked`, `verified`, `rejected` and `unknown` states.
|
|
44
|
+
3. Require a subject digest before evidence can be `checked` or `verified`.
|
|
45
|
+
4. Allow a caller-defined policy with required evidence kinds, expected producer identity, expected workflow identity and allowed verification states.
|
|
46
|
+
5. Return a serializable decision of `accepted`, `rejected` or `insufficient`, with reason codes rather than claims such as “secure,” “trusted,” “signed,” “compliant,” or “vulnerability-free.”
|
|
47
|
+
6. Produce a release readiness receipt that binds source tag, observed manifest versions, required gates, artifact-plan digest, target list, signing state and missing evidence without creating tags, changing manifests, invoking workflows, publishing, signing or checking a registry.
|
|
48
|
+
7. Convert an already-completed local `verifyassets` checksum result into `checked` checksum evidence while preserving the verifier's explicit signing state as metadata.
|
|
49
|
+
|
|
50
|
+
## Explicit non-goals
|
|
51
|
+
|
|
52
|
+
The block must not download assets, parse arbitrary SBOM formats, query CVE feeds, call Sigstore, access a KMS, use OAuth/PATs, invoke CI, generate an SBOM, scan files, sign artifacts, publish releases, start a server, or use external services. Existing `verifyassets` remains the file-integrity verifier; the new contract evaluates evidence supplied by a caller or another verified adapter.
|
|
53
|
+
|
|
54
|
+
## Tests and release gates
|
|
55
|
+
|
|
56
|
+
The implementation must add active tests for normalization, state transitions, subject-digest validation, producer/workflow mismatch, missing required evidence, allowed-versus-rejected policy decisions, stable reason ordering and release readiness with incomplete data. It must run the active and legacy suites, engine build, web checks/build, formatting, `npm pack --dry-run`, high-severity audit and the flat-native validator before a commit. No version bump occurs until selected 1.8.16 blocks have passed the full release phase.
|
package/docs/todo-1.8.16.md
CHANGED
|
@@ -536,12 +536,12 @@
|
|
|
536
536
|
- [ ] Derive the 1.8.16 test fixture for PWA and Mini App bridge only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability.
|
|
537
537
|
- [ ] Derive the 1.8.16 permission policy for PWA and Mini App bridge only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability.
|
|
538
538
|
- [ ] Derive the 1.8.16 documentation for PWA and Mini App bridge only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability.
|
|
539
|
-
- [
|
|
540
|
-
- [
|
|
541
|
-
- [
|
|
539
|
+
- [x] Derive the 1.8.16 contract for release evidence only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability. Completed by `release/evidence.ts`: data-only normalization, policy evaluation, and readiness receipt; no external effects.
|
|
540
|
+
- [x] Derive the 1.8.16 artifact inventory for release evidence only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability. Completed by `evidencefromverification`, which maps only an already-valid `verifyassets` checksum inventory into `checked` evidence and preserves declared signing state as metadata.
|
|
541
|
+
- [x] Derive the 1.8.16 verification check for release evidence only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability. Completed by deterministic acceptance, insufficiency, mismatch, and readiness tests in `tests/engine.test.ts`.
|
|
542
542
|
- [ ] Derive the 1.8.16 workflow test for release evidence only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability.
|
|
543
|
-
- [
|
|
544
|
-
- [
|
|
543
|
+
- [x] Derive the 1.8.16 failure policy for release evidence only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability. Completed by ordered `rejected` and `insufficient` reason codes without positive assurance claims.
|
|
544
|
+
- [x] Derive the 1.8.16 documentation for release evidence only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability. Completed in `docs/enginearchitecture.md` and `docs/repo-synthesis-1.8.16.md`.
|
|
545
545
|
- [ ] Derive the 1.8.16 contract for cross-runtime compatibility only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability.
|
|
546
546
|
- [ ] Derive the 1.8.16 capability matrix for cross-runtime compatibility only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability.
|
|
547
547
|
- [ ] Derive the 1.8.16 import graph audit for cross-runtime compatibility only after comparative evidence identifies a concrete gap that does not duplicate an existing Saddle capability.
|
package/docs/todo.md
CHANGED
|
@@ -703,6 +703,6 @@ The following blocks are the execution order for the complete ecosystem. A block
|
|
|
703
703
|
|
|
704
704
|
### Authorized execution order
|
|
705
705
|
|
|
706
|
-
- [
|
|
707
|
-
- [
|
|
706
|
+
- [x] Execute the selected 1.8.15 feature blocks in dependency order, keeping every change additive, provider-neutral, deterministicly tested, documented, and compatible with the root-first package structure.
|
|
707
|
+
- [x] Complete the 1.8.15 validation, version bump, release notes, artifact verification, immutable tag, GitHub release, and six-registry workflow checks before beginning the 1.8.16 research sample; v1.8.15 has 38 assets, successful six-registry publication, and a manually dispatched Android `ci-test-key` fallback.
|
|
708
708
|
- [ ] Start the 1.8.16 comparative research only after 1.8.15 completion evidence is recorded, then select and implement only evidence-backed gaps from the planned repository analysis.
|
package/extension/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "Saddle browser bridge",
|
|
4
|
-
"version": "1.8.
|
|
4
|
+
"version": "1.8.16",
|
|
5
5
|
"description": "User initiated page snapshots through the Saddle browser contract.",
|
|
6
6
|
"minimum_chrome_version": "110",
|
|
7
7
|
"permissions": ["activeTab", "scripting", "storage"],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wenathlan/saddle",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.16",
|
|
4
4
|
"description": "binary computing engine that turns distributed storage into a publishable working set",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -78,6 +78,7 @@
|
|
|
78
78
|
"./hash": "./dist/core/hash.js",
|
|
79
79
|
"./release-assets": "./dist/release/assets.js",
|
|
80
80
|
"./release-verify": "./dist/release/verify.js",
|
|
81
|
+
"./release-evidence": "./dist/release/evidence.js",
|
|
81
82
|
"./delivery": "./dist/delivery/manifest.js",
|
|
82
83
|
"./surface-requirements": "./dist/surfaces/requirements.js",
|
|
83
84
|
"./worker": "./dist/runtime/worker.js",
|