@wenathlan/saddle 1.8.12 → 1.8.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +46 -8
  2. package/dist/browser/snapshot.d.ts +12 -0
  3. package/dist/browser/snapshot.d.ts.map +1 -1
  4. package/dist/browser/snapshot.js +76 -0
  5. package/dist/browser/snapshot.js.map +1 -1
  6. package/dist/dispatch/resumable.d.ts +18 -1
  7. package/dist/dispatch/resumable.d.ts.map +1 -1
  8. package/dist/dispatch/resumable.js +28 -3
  9. package/dist/dispatch/resumable.js.map +1 -1
  10. package/dist/mcp/server.d.ts +3 -3
  11. package/dist/memory/engine.d.ts +1 -1
  12. package/dist/queue/persistent.d.ts +2 -1
  13. package/dist/queue/persistent.d.ts.map +1 -1
  14. package/dist/queue/persistent.js +27 -10
  15. package/dist/queue/persistent.js.map +1 -1
  16. package/dist/release/assets.d.ts +25 -0
  17. package/dist/release/assets.d.ts.map +1 -1
  18. package/dist/release/assets.js +67 -4
  19. package/dist/release/assets.js.map +1 -1
  20. package/dist/scrape/robots.js +1 -1
  21. package/dist/scrape/schema.d.ts +18 -0
  22. package/dist/scrape/schema.d.ts.map +1 -1
  23. package/dist/scrape/schema.js +67 -0
  24. package/dist/scrape/schema.js.map +1 -1
  25. package/docs/artifactavailability.md +34 -2
  26. package/docs/releaseassets.md +2 -2
  27. package/docs/releasenotes-1.8.12.md +61 -0
  28. package/docs/releasenotes-1.8.13.md +70 -0
  29. package/docs/releasenotes-1.8.14.md +52 -0
  30. package/docs/repo-analysis-1.8.21.json +2617 -0
  31. package/docs/repo-candidates-1.8.21.jsonl +666 -0
  32. package/docs/repo-research-1.8.21.md +38 -0
  33. package/docs/repo-selected-1.8.21.json +786 -0
  34. package/docs/repo-synthesis-1.8.21.md +112 -0
  35. package/extension/README.md +1 -1
  36. package/extension/manifest.json +1 -1
  37. package/package.json +1 -1
@@ -3,7 +3,7 @@
3
3
  * The adapter reads caller-selected artifacts and never publishes or handles credentials.
4
4
  */
5
5
  import { createHash } from "node:crypto";
6
- import { mkdir, readFile, writeFile } from "node:fs/promises";
6
+ import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
7
7
  import { basename, dirname, join, relative, resolve, sep } from "node:path";
8
8
  import { fileURLToPath } from "node:url";
9
9
  const modulepath = dirname(fileURLToPath(import.meta.url));
@@ -23,13 +23,15 @@ export async function createassets(options = {}) {
23
23
  const subjects = await Promise.all(artifacts.map(async (artifact) => {
24
24
  const name = relative(artifactroot, artifact).replaceAll("\\", "/");
25
25
  validateArtifactName(basename(name));
26
- return { name, digest: await sha256(artifact) };
26
+ const details = await stat(artifact);
27
+ return { name, digest: await sha256(artifact), bytes: details.size, updatedat: Math.trunc(details.mtimeMs) };
27
28
  }));
28
29
  await mkdir(output, { recursive: true });
29
30
  const checksums = `${subjects.map((subject) => `${subject.digest} ${subject.name}`).join("\n")}${subjects.length ? "\n" : ""}`;
30
31
  const sbom = createsbom(packagejson, lockjson);
31
32
  const provenance = createprovenance(packagejson, subjects, { ...options, version });
32
- const manifest = { name: String(packagejson.name), version, surface, files: subjects.map((subject) => basename(subject.name)), signing: String(options.signing ?? "caller-owned") };
33
+ const retention = options.retention ? retentionplan(subjects, options.retention) : undefined;
34
+ const manifest = { name: String(packagejson.name), version, surface, files: subjects.map((subject) => basename(subject.name)), signing: String(options.signing ?? "caller-owned"), ...(retention ? { retention: retention.policy, retentionplan: retention.decisions, retentionevaluatedat: retention.evaluatedat } : {}) };
33
35
  const files = {
34
36
  checksums: join(output, `sha256.${surface}.${version}`),
35
37
  manifest: join(output, `manifest.${surface}.${version}.json`),
@@ -40,7 +42,43 @@ export async function createassets(options = {}) {
40
42
  await writeFile(files.manifest, `${JSON.stringify(manifest, null, 2)}\n`);
41
43
  await writeFile(files.sbom, `${JSON.stringify(sbom, null, 2)}\n`);
42
44
  await writeFile(files.provenance, `${JSON.stringify(provenance)}\n`);
43
- return { output, files, subjects, sbom, provenance };
45
+ return { output, files, subjects, sbom, provenance, retention };
46
+ }
47
+ /** Computes deterministic keep or prune decisions without deleting caller files. */
48
+ export function retentionplan(artifacts = [], options = {}) {
49
+ const policy = normalizeretention(options);
50
+ const evaluatedat = Number(options.evaluatedat ?? options.now ?? 0);
51
+ if (!Number.isSafeInteger(evaluatedat) || evaluatedat < 0)
52
+ throw new RangeError("retention evaluatedat must be a non-negative safe integer");
53
+ const entries = [...new Map(artifacts.map((artifact) => {
54
+ const name = String(artifact.name ?? "");
55
+ if (!name)
56
+ throw new TypeError("retention artifact requires name");
57
+ return [name, { name, bytes: normalizebytes(artifact.bytes), updatedat: normalizeupdatedat(artifact.updatedat) }];
58
+ })).values()].sort(comparefreshness);
59
+ const decisions = entries.map((entry) => ({ ...entry, action: "keep", reasons: [] }));
60
+ for (const decision of decisions) {
61
+ if (policy.maxagedays !== undefined && evaluatedat > 0 && decision.updatedat + policy.maxagedays * 86400000 < evaluatedat) {
62
+ decision.action = "prune";
63
+ decision.reasons.push("max-age");
64
+ }
65
+ }
66
+ if (policy.maxcount !== undefined)
67
+ decisions.slice(policy.maxcount).forEach((decision) => { if (decision.action === "keep") {
68
+ decision.action = "prune";
69
+ decision.reasons.push("max-count");
70
+ } });
71
+ if (policy.maxbytes !== undefined) {
72
+ let total = decisions.filter((decision) => decision.action === "keep").reduce((sum, decision) => sum + decision.bytes, 0);
73
+ for (const decision of [...decisions].reverse()) {
74
+ if (total <= policy.maxbytes || decision.action !== "keep")
75
+ continue;
76
+ decision.action = "prune";
77
+ decision.reasons.push("max-bytes");
78
+ total -= decision.bytes;
79
+ }
80
+ }
81
+ return { policy, evaluatedat, decisions: decisions.sort((left, right) => left.name.localeCompare(right.name)) };
44
82
  }
45
83
  /** Creates a compact CycloneDX component list from the root lockfile dependencies. */
46
84
  export function createsbom(packagejson, lockjson = {}) {
@@ -84,11 +122,36 @@ function parsearguments(argumentslist) {
84
122
  options.buildtype = argumentslist[++index];
85
123
  else if (argument === "--builder")
86
124
  options.builder = argumentslist[++index];
125
+ else if (argument === "--max-age-days")
126
+ (options.retention ??= {}).maxagedays = Number(argumentslist[++index]);
127
+ else if (argument === "--max-count")
128
+ (options.retention ??= {}).maxcount = Number(argumentslist[++index]);
129
+ else if (argument === "--max-bytes")
130
+ (options.retention ??= {}).maxbytes = Number(argumentslist[++index]);
131
+ else if (argument === "--evaluated-at")
132
+ (options.retention ??= {}).evaluatedat = Number(argumentslist[++index]);
87
133
  else
88
134
  throw new TypeError(`unsupported release asset argument: ${argument}`);
89
135
  }
90
136
  return options;
91
137
  }
138
+ function normalizeretention(options) {
139
+ const result = {};
140
+ if (options.maxagedays !== undefined)
141
+ result.maxagedays = normalizepolicyinteger(options.maxagedays, "maxagedays");
142
+ if (options.maxcount !== undefined)
143
+ result.maxcount = normalizepolicyinteger(options.maxcount, "maxcount");
144
+ if (options.maxbytes !== undefined)
145
+ result.maxbytes = normalizepolicyinteger(options.maxbytes, "maxbytes");
146
+ return result;
147
+ }
148
+ function normalizepolicyinteger(value, name) { const normalized = Number(value); if (!Number.isSafeInteger(normalized) || normalized <= 0)
149
+ throw new RangeError(`${name} must be a positive safe integer`); return normalized; }
150
+ function normalizebytes(value) { const normalized = Number(value ?? 0); if (!Number.isSafeInteger(normalized) || normalized < 0)
151
+ throw new RangeError("retention artifact bytes must be a non-negative safe integer"); return normalized; }
152
+ function normalizeupdatedat(value) { const normalized = Number(value ?? 0); if (!Number.isSafeInteger(normalized) || normalized < 0)
153
+ throw new RangeError("retention artifact updatedat must be a non-negative safe integer"); return normalized; }
154
+ function comparefreshness(left, right) { return right.updatedat - left.updatedat || right.bytes - left.bytes || left.name.localeCompare(right.name); }
92
155
  if (process.argv[1] === fileURLToPath(import.meta.url))
93
156
  createassets(parsearguments(process.argv.slice(2))).then(({ output }) => { console.log(`release assets: ${output}`); }).catch((error) => { console.error(error.message); process.exitCode = 1; });
94
157
  //# sourceMappingURL=assets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../release/assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../release/assets.ts"],"names":[],"mappings":"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"}
@@ -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.12" }, signal: AbortSignal.timeout(options.timeout ?? 5000) });
46
+ const response = await fetch(robotsUrl, { headers: { "User-Agent": options.userAgent ?? "Saddle/1.8.14" }, 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;
@@ -2,4 +2,22 @@
2
2
  * schema extraction accepts safe field descriptors and never evaluates source strings.
3
3
  */
4
4
  export declare function extractwithschema(html: any, schema: {}, url: any): {};
5
+ /** Extracts schema fields with bounded payload and field-level source provenance. */
6
+ export declare function extractstructured(html: any, schema?: {}, options?: {}): {
7
+ version: number;
8
+ sourceurl: string;
9
+ extractedat: string;
10
+ values: {};
11
+ provenance: {
12
+ [k: string]: {
13
+ sourceurl: string;
14
+ selector: string;
15
+ extractedat: string;
16
+ truncated: boolean;
17
+ };
18
+ };
19
+ bytes: number;
20
+ maxbytes: number;
21
+ truncated: any[];
22
+ };
5
23
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../scrape/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,KAAA,EAAE,MAAM,IAAK,EAAE,GAAG,KAAA,MAIvD"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../scrape/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,KAAA,EAAE,MAAM,IAAK,EAAE,GAAG,KAAA,MAIvD;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,IAAI,KAAA,EAAE,MAAM,KAAK,EAAE,OAAO,KAAK;;;;;;;;;;;;;;;;EAkBhE"}
@@ -7,6 +7,30 @@ export function extractwithschema(html, schema = {}, url) {
7
7
  result[name] = extractfield(html, descriptor, url);
8
8
  return result;
9
9
  }
10
+ /** Extracts schema fields with bounded payload and field-level source provenance. */
11
+ export function extractstructured(html, schema = {}, options = {}) {
12
+ if (typeof html !== "string")
13
+ throw new TypeError("structured extraction requires html text");
14
+ if (!schema || typeof schema !== "object" || Array.isArray(schema))
15
+ throw new TypeError("structured extraction requires a schema object");
16
+ if (options.parser !== undefined && typeof options.parser !== "function")
17
+ throw new TypeError("structured extraction parser must be a function");
18
+ const sourceurl = String(options.url ?? "");
19
+ const extractedat = String(options.extractedat ?? new Date(Number(options.now ?? Date.now())).toISOString());
20
+ const maxbytes = normalizebound(options.maxbytes ?? 65536, "maxbytes");
21
+ const parser = options.parser ?? ((input) => extractwithschema(input.html, input.schema, input.url));
22
+ const values = parser({ html, schema, url: sourceurl });
23
+ if (!values || typeof values !== "object" || Array.isArray(values))
24
+ throw new TypeError("structured extraction parser must return an object");
25
+ const bounded = boundpayload(values, maxbytes);
26
+ const provenance = Object.fromEntries(Object.entries(schema).map(([name, descriptor]) => [name, {
27
+ sourceurl,
28
+ selector: descriptorselector(descriptor),
29
+ extractedat,
30
+ truncated: bounded.truncated.includes(name)
31
+ }]));
32
+ return { version: 1, sourceurl, extractedat, values: bounded.values, provenance, bytes: bounded.bytes, maxbytes, truncated: bounded.truncated };
33
+ }
10
34
  function extractfield(html, descriptor, url) {
11
35
  if (typeof descriptor === "function")
12
36
  return descriptor({ html, url });
@@ -22,4 +46,47 @@ function extractfield(html, descriptor, url) {
22
46
  return pattern.exec(html)?.[1]?.replace(/<[^>]+>/g, " ").replace(/\s+/g, " ").trim() ?? null;
23
47
  }
24
48
  function textfromselector(html, selector) { return extractfield(html, { selector }); }
49
+ function descriptorselector(descriptor) { return typeof descriptor === "string" ? descriptor : typeof descriptor === "function" ? "function" : String(descriptor?.selector ?? "unknown"); }
50
+ function normalizebound(value, name) { const normalized = Number(value); if (!Number.isSafeInteger(normalized) || normalized <= 0)
51
+ throw new RangeError(`${name} must be a positive safe integer`); return normalized; }
52
+ function boundpayload(values, maxbytes) {
53
+ const bounded = {};
54
+ const truncated = [];
55
+ for (const [name, value] of Object.entries(values)) {
56
+ const candidate = JSON.stringify({ ...bounded, [name]: value });
57
+ if (byteLength(candidate) <= maxbytes) {
58
+ bounded[name] = value;
59
+ continue;
60
+ }
61
+ if (typeof value === "string") {
62
+ const clipped = clipstring(value, (trial) => byteLength(JSON.stringify({ ...bounded, [name]: trial })) <= maxbytes);
63
+ bounded[name] = clipped;
64
+ }
65
+ else {
66
+ bounded[name] = null;
67
+ }
68
+ truncated.push(name);
69
+ }
70
+ const bytes = byteLength(JSON.stringify(bounded));
71
+ if (bytes > maxbytes)
72
+ throw new RangeError("structured extraction payload budget is too small");
73
+ return { values: bounded, bytes, truncated };
74
+ }
75
+ function clipstring(value, fits) {
76
+ let low = 0;
77
+ let high = value.length;
78
+ let result = "";
79
+ while (low <= high) {
80
+ const middle = Math.floor((low + high) / 2);
81
+ const candidate = value.slice(0, middle);
82
+ if (fits(candidate)) {
83
+ result = candidate;
84
+ low = middle + 1;
85
+ }
86
+ else
87
+ high = middle - 1;
88
+ }
89
+ return result;
90
+ }
91
+ function byteLength(value) { return new TextEncoder().encode(String(value)).byteLength; }
25
92
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../scrape/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG;IACtD,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC5G,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG;IACzC,IAAI,OAAO,UAAU,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACvE,IAAI,OAAO,UAAU,KAAK,QAAQ;QAAE,OAAO,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9E,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ;QAAE,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;IAC9H,IAAI,UAAU,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IAChH,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IACvC,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,OAAO,QAAQ,SAAS,yBAAyB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,OAAO,yBAAyB,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1K,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AAC/F,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAI,EAAE,QAAQ,IAAI,OAAO,YAAY,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../scrape/schema.ts"],"names":[],"mappings":"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"}
@@ -85,7 +85,7 @@ The release also contains `manifest.*.1.8.11.json` and `sha256.*.1.8.11` files f
85
85
 
86
86
  ## 1.8.12 release matrix
87
87
 
88
- Version 1.8.12 is prepared to publish the expanded matrix below. The release workflows derive the version from the `v1.8.12` tag and generate the checksum and manifest files beside each surface artifact. Sizes and final signing states remain pending until the release workflows complete; this section does not claim that an artifact exists before CI attaches it.
88
+ Version 1.8.12 was published with the expanded matrix below. The release workflows derived the version from the `v1.8.12` tag and attached the generated checksum and manifest files beside each available surface artifact. The release contains 38 assets; iOS was not attached because caller-owned Apple signing and provisioning were not configured.
89
89
 
90
90
  | Surface | Architectures | Artifact naming contract |
91
91
  | --- | --- | --- |
@@ -97,4 +97,36 @@ Version 1.8.12 is prepared to publish the expanded matrix below. The release wor
97
97
  | Container | OCI | `saddle.container.1.8.12.tar.gz` |
98
98
  | Browser extension | Manifest V3 | `saddle.extension.1.8.12.zip` |
99
99
 
100
- Each surface also emits `sha256.*.1.8.12`, `manifest.*.1.8.12.json` and, where enabled by the release path, SBOM and provenance metadata. The manifest must state `unsigned`, `ci-test-key`, `caller-owned`, `notarized` or the verified provider status actually produced by CI.
100
+ Each surface also emits `sha256.*.1.8.12`, `manifest.*.1.8.12.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`. No state implies production trust.
101
+
102
+ ## 1.8.13 release matrix
103
+
104
+ Version 1.8.13 keeps the release-tag-derived matrix and adds deterministic retention metadata to generated artifact manifests. The implementation records retention policy and keep/prune decisions but never removes caller-owned files. The release contains 38 assets; iOS was not attached because caller-owned Apple signing and provisioning were not configured.
105
+
106
+ | Surface | Architectures | Artifact naming contract |
107
+ | --- | --- | --- |
108
+ | Linux desktop browser | x64, arm64 | `saddle.browser.1.8.13.<architecture>.deb`, `.rpm`, `.appimage` |
109
+ | Windows desktop browser | x86, x64, arm64 | `saddle.browser.1.8.13.<architecture>.exe`, `.msi` |
110
+ | macOS desktop browser | x64, arm64 | `saddle.browser.1.8.13.<architecture>.dmg`, `.app.zip` |
111
+ | Android | caller-configured signing | `saddle.apk.1.8.13.apk`, `saddle.aab.1.8.13.aab` |
112
+ | iOS | caller-configured signing and provisioning | `saddle.ipa.1.8.13.ipa`, `saddle.app.1.8.13.app.zip` |
113
+ | Container | OCI | `saddle.container.1.8.13.tar.gz` |
114
+ | Browser extension | Manifest V3 | `saddle.extension.1.8.13.zip` |
115
+
116
+ Each surface also emits `sha256.*.1.8.13`, `manifest.*.1.8.13.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 manifest may additionally carry `retention`, `retentionplan` and `retentionevaluatedat`; these fields are advisory execution decisions and do not imply deletion or publication.
117
+
118
+ ## 1.8.14 release matrix
119
+
120
+ Version 1.8.14 keeps the release-tag-derived matrix and adds post-push container pull and smoke validation. The implementation records retention policy and keep/prune decisions but never removes caller-owned files. The release is expected to contain the same 38-asset family; iOS remains unavailable until caller-owned Apple signing and provisioning are configured.
121
+
122
+ | Surface | Architectures | Artifact naming contract |
123
+ | --- | --- | --- |
124
+ | Linux desktop browser | x64, arm64 | `saddle.browser.1.8.14.<architecture>.deb`, `.rpm`, `.appimage` |
125
+ | Windows desktop browser | x86, x64, arm64 | `saddle.browser.1.8.14.<architecture>.exe`, `.msi` |
126
+ | macOS desktop browser | x64, arm64 | `saddle.browser.1.8.14.<architecture>.dmg`, `.app.zip` |
127
+ | Android | caller-configured signing | `saddle.apk.1.8.14.apk`, `saddle.aab.1.8.14.aab` |
128
+ | iOS | caller-configured signing and provisioning | `saddle.ipa.1.8.14.ipa`, `saddle.app.1.8.14.app.zip` |
129
+ | Container | OCI | `saddle.container.1.8.14.tar.gz` |
130
+ | Browser extension | Manifest V3 | `saddle.extension.1.8.14.zip` |
131
+
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.
@@ -1,10 +1,10 @@
1
1
  # Release assets
2
2
 
3
- The Node-only release adapter creates deterministic metadata for caller-selected artifacts. For version `1.8.12`, it writes dotted surface-specific names such as `sha256.desktop.1.8.12`, `manifest.desktop.1.8.12.json`, `sbom.desktop.1.8.12.cdx.json` and `provenance.desktop.1.8.12.intoto.jsonl`. The adapter rejects underscore-based public names and Rust build-helper executables. It never publishes, authenticates or selects a registry.
3
+ The Node-only release adapter creates deterministic metadata for caller-selected artifacts. For version `1.8.14`, it writes dotted surface-specific names such as `sha256.desktop.1.8.14`, `manifest.desktop.1.8.14.json`, `sbom.desktop.1.8.14.cdx.json` and `provenance.desktop.1.8.14.intoto.jsonl`. The adapter rejects underscore-based public names and Rust build-helper executables. It never publishes, authenticates or selects a registry.
4
4
 
5
5
  ```bash
6
6
  npm run release:assets -- \
7
- --version 1.8.12 \
7
+ --version 1.8.14 \
8
8
  --surface desktop \
9
9
  --output build/release \
10
10
  --artifact build/saddle.tgz \
@@ -0,0 +1,61 @@
1
+ # Saddle 1.8.12
2
+
3
+ Saddle 1.8.12 consolidates the root-first native surfaces, the GPL-3.0-only project policy, release provenance and the cross-platform artifact contract. The package manifest and active native manifests remain at `1.8.12`. The uploaded scope README is not an execution script and was not rewritten.
4
+
5
+ ## Highlights
6
+
7
+ | Area | Change |
8
+ |---|---|
9
+ | Licensing | Canonical GPL-3.0-only license, aligned package metadata and consolidated root legal documents. |
10
+ | Release verification | Independent checksum, manifest and explicit signing-state verification. |
11
+ | Storage | Paginated S3-compatible listing with prefix, continuation token, XML entity decoding and caller-owned limits. |
12
+ | Scraping | Bounded recursive sitemap traversal with deduplication, cycle protection and injected fetcher. |
13
+ | Browser | Bounded action recorder with immutable manifests, JSON export and explicit clearing. |
14
+ | Workflows | Strict typed inputs, defaults, choices and deterministic trigger identities. |
15
+ | Modes | Cross-runtime capability report with caller-owned host, port, credentials and provider boundaries. |
16
+ | Security | Existing CodeQL, OSV, npm audit, cargo audit, Trivy, SBOM and provenance gates remain active. |
17
+
18
+ ## Artifact matrix
19
+
20
+ The release workflows derive the version from the release tag and use these lowercase dotted names. The `v1.8.12` release was published and contains the generated assets listed below; iOS remains unavailable because Apple signing and provisioning were not configured.
21
+
22
+ | Surface | Architectures or mode | Expected artifact |
23
+ |---|---|---|
24
+ | Linux desktop browser | x64, arm64 | `saddle.browser.1.8.12.<architecture>.deb`, `.rpm`, `.appimage` |
25
+ | Windows desktop browser | x86, x64, arm64 | `saddle.browser.1.8.12.<architecture>.exe`, `.msi` |
26
+ | macOS desktop browser | x64, arm64 | `saddle.browser.1.8.12.<architecture>.dmg`, `.app.zip` |
27
+ | Android | caller-configured signing | `saddle.apk.1.8.12.apk`, `saddle.aab.1.8.12.aab` |
28
+ | iOS | caller-configured signing and provisioning | `saddle.ipa.1.8.12.ipa`, `saddle.app.1.8.12.app.zip` |
29
+ | Container | OCI | `saddle.container.1.8.12.tar.gz` |
30
+ | Browser extension | Manifest V3 | `saddle.extension.1.8.12.zip` |
31
+
32
+ Each generated surface must carry its checksum and manifest companion. Where enabled, CI also emits SBOM and provenance metadata. The signing state must be one of `unsigned`, `ci-test-key`, `caller-owned`, `notarized` or the exact provider status produced by CI. No unsigned artifact is described as trusted or production-signed.
33
+
34
+ ## Verified attached assets
35
+
36
+ The release contains **38 attached assets**. Desktop binaries are unsigned, Android APK/AAB files use the explicitly labeled `ci-test-key`, and the container is marked `caller-owned`.
37
+
38
+ | Surface | Attached assets | Signing |
39
+ |---|---|---|
40
+ | Linux desktop | `saddle.browser.1.8.12.x64.deb`, `saddle.browser.1.8.12.x64.rpm`, `saddle.browser.1.8.12.x64.appimage`, `saddle.browser.1.8.12.arm64.deb`, `saddle.browser.1.8.12.arm64.rpm`, `saddle.browser.1.8.12.arm64.appimage` | `unsigned` |
41
+ | Windows desktop | `saddle.browser.1.8.12.x86.exe`, `saddle.browser.1.8.12.x86.msi`, `saddle.browser.1.8.12.x64.exe`, `saddle.browser.1.8.12.x64.msi`, `saddle.browser.1.8.12.arm64.exe`, `saddle.browser.1.8.12.arm64.msi` | `unsigned` |
42
+ | macOS desktop | `saddle.browser.1.8.12.x64.dmg`, `saddle.browser.1.8.12.x64.app.zip`, `saddle.browser.1.8.12.arm64.dmg`, `saddle.browser.1.8.12.arm64.app.zip` | `unsigned` |
43
+ | Android | `saddle.apk.1.8.12.apk`, `saddle.aab.1.8.12.aab` | `ci-test-key` |
44
+ | Container | `saddle.container.1.8.12.tar.gz` | `caller-owned` |
45
+ | Browser extension | `saddle.extension.1.8.12.zip` | `unsigned` |
46
+ | Manifests | `manifest.android.1.8.12.json`, `manifest.container.1.8.12.json`, `manifest.desktop.linux.arm64.1.8.12.json`, `manifest.desktop.linux.x64.1.8.12.json`, `manifest.desktop.macos.arm64.1.8.12.json`, `manifest.desktop.macos.x64.1.8.12.json`, `manifest.desktop.windows.arm64.1.8.12.json`, `manifest.desktop.windows.x64.1.8.12.json`, `manifest.desktop.windows.x86.1.8.12.json` | metadata |
47
+ | Checksums | `sha256.android.1.8.12`, `sha256.container.1.8.12`, `sha256.desktop.linux.arm64.1.8.12`, `sha256.desktop.linux.x64.1.8.12`, `sha256.desktop.macos.arm64.1.8.12`, `sha256.desktop.macos.x64.1.8.12`, `sha256.desktop.windows.arm64.1.8.12`, `sha256.desktop.windows.x64.1.8.12`, `sha256.desktop.windows.x86.1.8.12` | integrity metadata |
48
+
49
+ ## Compatibility and upgrade notes
50
+
51
+ The public package remains `@wenathlan/saddle`. The release does not downgrade the package to `1.8.3`; the active version is `1.8.12`. Version `1.8.21` is reserved for the next objective-driven research and implementation cycle. SignPath Foundation approval and production code-signing credentials remain caller-owned and are not implied by this release note.
52
+
53
+ ## Verification
54
+
55
+ The release validation workflow passed, and the live release contains the 38 assets listed above. The original release-event security and mobile jobs were superseded by successful, explicitly labeled manual reruns; no production signing claim is made.
56
+
57
+ ## References
58
+
59
+ [1]: https://github.com/wenathlan/saddle "Saddle source repository"
60
+ [2]: https://github.com/wenathlan/saddle/releases "Saddle release archive"
61
+ [3]: https://github.com/wenathlan/saddle/blob/main/LICENSE "Saddle GPL-3.0-only license"
@@ -0,0 +1,70 @@
1
+ # Saddle 1.8.13
2
+
3
+ Saddle 1.8.13 carries the active code and release-facing manifests forward from 1.8.12. The previous [1.8.12 release notes](releasenotes-1.8.12.md) remain the canonical record for the licensing and artifact baseline. The comparative 1.8.21 research is planning material and is not presented as a shipped feature.
4
+
5
+ ## Changes
6
+
7
+ | Area | Change |
8
+ |---|---|
9
+ | Persistent queue | Added caller-owned leases, visibility timeout, deterministic clock injection, renewals, attempt accounting and idempotency-key deduplication. Existing crash recovery and retry behavior remain compatible. |
10
+ | Version identity | Aligned npm, lockfile, Maven, NuGet, RubyGems, browser extension, Tauri, iOS, crawler and Capacitor metadata to `1.8.13`. The iOS marketing version is `1.8.13` with build `1008013`. |
11
+ | Structured extraction | Added a schema-neutral result with field-level source URL, selector, extraction timestamp, bounded UTF-8 payload and caller-injected parser support. |
12
+ | Browser context | Added allowlisted snapshot projection with stable snapshot and element references, deterministic UTF-8 byte budgets and truncation metadata. |
13
+ | Workflow lifecycle | Extended resumable runs with explicit cancellation reasons and caller-owned, idempotent compensation callbacks. Compensation failures are surfaced as `COMPENSATION_FAILED`. |
14
+ | Artifact retention | Added deterministic keep/prune decisions by maximum age, count or bytes. Manifest generation records policy and decisions and never deletes caller files. |
15
+ | Documentation | Added the 1.8.13 release notes and retained the 1.8.12 artifact and signing policy documents. |
16
+ | Architecture | Kept the root-first layout, no project-owned `src` directory, transport-neutral exports and caller-owned infrastructure. |
17
+
18
+ ## Artifact contract
19
+
20
+ The active workflows derive names from the release tag. The `v1.8.13` release was published and contains the generated assets listed below; iOS remains unavailable because Apple signing and provisioning were not configured.
21
+
22
+ | Surface | Expected artifact family |
23
+ |---|---|
24
+ | Linux desktop | `saddle.browser.1.8.13.<architecture>.deb`, `.rpm`, `.appimage` |
25
+ | Windows desktop | `saddle.browser.1.8.13.<architecture>.exe`, `.msi` |
26
+ | macOS desktop | `saddle.browser.1.8.13.<architecture>.dmg`, `.app.zip` |
27
+ | Android | `saddle.apk.1.8.13.apk`, `saddle.aab.1.8.13.aab` |
28
+ | iOS | `saddle.ipa.1.8.13.ipa`, `saddle.app.1.8.13.app.zip` |
29
+ | Container | `saddle.container.1.8.13.tar.gz` |
30
+ | Browser extension | `saddle.extension.1.8.13.zip` |
31
+
32
+ Signing remains explicit. `unsigned`, `ci-test-key`, `caller-owned`, `notarized` and a provider-reported status are distinct states. This release note does not claim SignPath approval or production signing.
33
+
34
+ ## Verified attached assets
35
+
36
+ The release contains **38 attached assets**. Desktop binaries are unsigned, Android APK/AAB files use the explicitly labeled `ci-test-key`, and the container is marked `caller-owned`.
37
+
38
+ | Surface | Attached assets | Signing |
39
+ |---|---|---|
40
+ | Linux desktop | `saddle.browser.1.8.13.x64.deb`, `saddle.browser.1.8.13.x64.rpm`, `saddle.browser.1.8.13.x64.appimage`, `saddle.browser.1.8.13.arm64.deb`, `saddle.browser.1.8.13.arm64.rpm`, `saddle.browser.1.8.13.arm64.appimage` | `unsigned` |
41
+ | Windows desktop | `saddle.browser.1.8.13.x86.exe`, `saddle.browser.1.8.13.x86.msi`, `saddle.browser.1.8.13.x64.exe`, `saddle.browser.1.8.13.x64.msi`, `saddle.browser.1.8.13.arm64.exe`, `saddle.browser.1.8.13.arm64.msi` | `unsigned` |
42
+ | macOS desktop | `saddle.browser.1.8.13.x64.dmg`, `saddle.browser.1.8.13.x64.app.zip`, `saddle.browser.1.8.13.arm64.dmg`, `saddle.browser.1.8.13.arm64.app.zip` | `unsigned` |
43
+ | Android | `saddle.apk.1.8.13.apk`, `saddle.aab.1.8.13.aab` | `ci-test-key` |
44
+ | Container | `saddle.container.1.8.13.tar.gz` | `caller-owned` |
45
+ | Browser extension | `saddle.extension.1.8.13.zip` | `unsigned` |
46
+ | Manifests | `manifest.android.1.8.13.json`, `manifest.container.1.8.13.json`, `manifest.desktop.linux.arm64.1.8.13.json`, `manifest.desktop.linux.x64.1.8.13.json`, `manifest.desktop.macos.arm64.1.8.13.json`, `manifest.desktop.macos.x64.1.8.13.json`, `manifest.desktop.windows.arm64.1.8.13.json`, `manifest.desktop.windows.x64.1.8.13.json`, `manifest.desktop.windows.x86.1.8.13.json` | metadata |
47
+ | Checksums | `sha256.android.1.8.13`, `sha256.container.1.8.13`, `sha256.desktop.linux.arm64.1.8.13`, `sha256.desktop.linux.x64.1.8.13`, `sha256.desktop.macos.arm64.1.8.13`, `sha256.desktop.macos.x64.1.8.13`, `sha256.desktop.windows.arm64.1.8.13`, `sha256.desktop.windows.x64.1.8.13`, `sha256.desktop.windows.x86.1.8.13` | integrity metadata |
48
+
49
+ ## Registry publication
50
+
51
+ The six registry workflows derive the version from the same `v1.8.13` release tag through `.github/actions/releaseversion`. The release-event jobs completed successfully for GitHub Packages npm, public npmjs, Maven and RubyGems. GHCR completed successfully after the corrected Buildx and image-hardening rerun. NuGet was rerun manually from `main` and completed successfully with `Saddle.1.8.13.nupkg`; the package is published to GitHub Packages NuGet under the `wenathlan` owner. Public `nuget.org` was not targeted by the repository workflow and is not claimed here.
52
+
53
+ | Registry | Workflow | Verified version | Result |
54
+ |---|---|---:|---|
55
+ | GHCR | `publishghcr.yml` | `1.8.13` | success after corrected rerun |
56
+ | GitHub Packages npm | `publishgithubnpm.yml` | `1.8.13` | success |
57
+ | Public npmjs | `publishnpmjs.yml` | `1.8.13` | success |
58
+ | Maven GitHub Packages | `publishmaven.yml` | `1.8.13` | success |
59
+ | NuGet GitHub Packages | `publishnuget.yml` | `1.8.13` | success after explicit rerun |
60
+ | RubyGems GitHub Packages | `publishrubygems.yml` | `1.8.13` | success |
61
+
62
+ ## Verification
63
+
64
+ The queue, structured extraction, browser context, workflow compensation and retention features passed the active engine and release test suites. The release validation workflow passed, and the live release contains the 38 assets listed above. The original release-event security, GHCR and mobile failures were superseded by successful corrected reruns; production signing remains pending.
65
+
66
+ ## References
67
+
68
+ [1]: https://github.com/wenathlan/saddle "Saddle source repository"
69
+ [2]: https://github.com/wenathlan/saddle/releases "Saddle release archive"
70
+ [3]: https://github.com/wenathlan/saddle/blob/main/docs/releasenotes-1.8.12.md "Saddle 1.8.12 release notes"
@@ -0,0 +1,52 @@
1
+ # Saddle 1.8.14 release notes
2
+
3
+ Saddle 1.8.14 carries the active code and release-facing manifests forward from 1.8.13. The 1.8.13 release notes remain the canonical record for the previous artifact set. The comparative 1.8.21 research remains planning material and is not presented as a separate shipped version.
4
+
5
+ ## Changes
6
+
7
+ | Area | Change |
8
+ |---|---|
9
+ | Version identity | Aligned npm, lockfile, Maven, NuGet, RubyGems, browser extension, Tauri, Capacitor, iOS and crawler metadata to `1.8.14`. The iOS marketing version is `1.8.14` with build `1008014`. |
10
+ | Container | Added a build-stage TypeScript engine compilation, runtime-only `dist` copy, `org.opencontainers.image.version` label and post-push pull/label/CLI smoke validation. |
11
+ | Registry order | Documented GHCR as the first package surface, followed by GitHub Packages npm, public npmjs, Maven, NuGet and RubyGems. |
12
+ | Release automation | Kept the shared release-tag resolver as the only version source; workflows reject tag/package mismatches and do not contain per-release manual versions. |
13
+ | Architecture | Kept the root-first layout, no project-owned `src` directory, transport-neutral exports and caller-owned infrastructure. |
14
+
15
+ ## Artifact contract
16
+
17
+ The active workflows derive names from the `v1.8.14` release tag. The expected artifact family is listed below; attached-asset counts and registry conclusions must be updated only after the release workflows finish.
18
+
19
+ | Surface | Expected artifact family |
20
+ |---|---|
21
+ | Linux desktop | `saddle.browser.1.8.14.<architecture>.deb`, `.rpm`, `.appimage` |
22
+ | Windows desktop | `saddle.browser.1.8.14.<architecture>.exe`, `.msi` |
23
+ | macOS desktop | `saddle.browser.1.8.14.<architecture>.dmg`, `.app.zip` |
24
+ | Android | `saddle.apk.1.8.14.apk`, `saddle.aab.1.8.14.aab` |
25
+ | iOS | `saddle.ipa.1.8.14.ipa`, `saddle.app.1.8.14.app.zip` |
26
+ | Container | `saddle.container.1.8.14.tar.gz` |
27
+ | Browser extension | `saddle.extension.1.8.14.zip` |
28
+
29
+ Signing remains explicit. `unsigned`, `ci-test-key`, `caller-owned`, `notarized` and a provider-reported status are distinct states. These notes do not claim SignPath approval or production signing.
30
+
31
+ ## Registry publication
32
+
33
+ The six registry workflows derive the version from the same `v1.8.14` release tag through `.github/actions/releaseversion`. GHCR is listed first in the package order and must build, scan, push, pull and smoke-test the published image before the job is successful. The remaining workflows publish GitHub Packages npm, public npmjs, Maven, NuGet GitHub Packages and RubyGems from the same validated version. Public `nuget.org` is not targeted by the current repository workflow.
34
+
35
+ | Registry | Workflow | Version | Expected result |
36
+ |---|---|---:|---|
37
+ | GHCR | `publishghcr.yml` | `1.8.14` | build, scan, push, pull and smoke test |
38
+ | GitHub Packages npm | `publishgithubnpm.yml` | `1.8.14` | tag-derived package |
39
+ | Public npmjs | `publishnpmjs.yml` | `1.8.14` | tag-derived package |
40
+ | Maven GitHub Packages | `publishmaven.yml` | `1.8.14` | tag-derived package |
41
+ | NuGet GitHub Packages | `publishnuget.yml` | `1.8.14` | tag-derived package |
42
+ | RubyGems GitHub Packages | `publishrubygems.yml` | `1.8.14` | tag-derived package |
43
+
44
+ ## Verification policy
45
+
46
+ Local gates must pass before the tag is created. The release notes must be amended with effective asset names and workflow conclusions only after remote verification. Production signing remains pending until caller-owned certificates and provider configuration are supplied.
47
+
48
+ ## References
49
+
50
+ [1]: https://github.com/wenathlan/saddle "Saddle source repository"
51
+ [2]: https://github.com/wenathlan/saddle/releases "Saddle release archive"
52
+ [3]: https://github.com/wenathlan/saddle/blob/main/docs/releasenotes-1.8.13.md "Saddle 1.8.13 release notes"