@wenathlan/saddle 1.8.13 → 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.
- package/README.md +46 -8
- package/dist/apps/registry.d.ts +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/memory/engine.d.ts +1 -1
- package/dist/scrape/robots.js +1 -1
- package/docs/artifactavailability.md +20 -4
- package/docs/releaseassets.md +2 -2
- package/docs/releasenotes-1.8.12.md +17 -2
- package/docs/releasenotes-1.8.13.md +30 -2
- package/docs/releasenotes-1.8.14.md +52 -0
- package/extension/README.md +1 -1
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<strong>Storage-backed jobs, scraping contracts and portable runners for Node.js.</strong><br/>
|
|
7
7
|
<strong>Binary computing engine, agent browser, scraper and packager.</strong><br/>
|
|
8
8
|
<a href="https://github.com/wenathlan/saddle/actions/workflows/ci.yml"><img src="https://github.com/wenathlan/saddle/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
9
|
-
<a href="https://github.com/wenathlan/saddle/releases/tag/v1.8.
|
|
9
|
+
<a href="https://github.com/wenathlan/saddle/releases/tag/v1.8.14"><img src="https://img.shields.io/badge/release-v1.8.14-d35d3d" alt="Release 1.8.14" /></a>
|
|
10
10
|
<a href="https://github.com/wenathlan/saddle/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-GPL--3.0--only-202a2f" alt="GPL 3.0 only license" /></a>
|
|
11
11
|
</p>
|
|
12
12
|
|
|
@@ -59,6 +59,21 @@ repository or bucket -> runner working set -> process -> durable artifact
|
|
|
59
59
|
|
|
60
60
|
The repository may act as a disk, a CI workflow may act as a function call, Pages may act as a static bus and a release artifact may act as the durable boundary. `workflow_dispatch`, `repository_dispatch` and HTTP adapters remain caller-configured interfaces.
|
|
61
61
|
|
|
62
|
+
### Runtime modes and physical boundaries
|
|
63
|
+
|
|
64
|
+
The historical design treats the repository and its runner as a **virtual processor**, not as a claim that remote storage is physical VRAM. The storage-to-compute bridge stages a bounded working set through memory, filesystem, tmpfs, mmap or a caller-owned adapter; network latency, bandwidth and provider quotas remain real limits. The same library contracts are available with or without their paired surface, so a caller can use fetch or browser, visible or headless, internal or external storage, physical or vectorized memory, and library or binary packaging without being locked to one mode.
|
|
65
|
+
|
|
66
|
+
| Mode | Boundary | Typical use |
|
|
67
|
+
| --- | --- | --- |
|
|
68
|
+
| Fetch | no browser | Static HTML, APIs and deterministic extraction. |
|
|
69
|
+
| Browser | caller-owned transport | Interactive pages, snapshots, tabs and actions. |
|
|
70
|
+
| Auto | adaptive selection | Fetch first, then browser when the caller permits it. |
|
|
71
|
+
| Headless | no visible UI | CI runners, servers and scheduled jobs. |
|
|
72
|
+
| CLI or binary | packaged entry point | Operator tools or third-party compute jobs. |
|
|
73
|
+
| Computer | storage-to-compute bridge | Bounded binary and memory processing. |
|
|
74
|
+
|
|
75
|
+
The engine keeps these boundaries explicit. It does not silently install a browser, mount a bucket as VRAM, create a database, choose a proxy, or transfer credentials to a provider.
|
|
76
|
+
|
|
62
77
|
### Engine: contracts instead of vendor lock-in
|
|
63
78
|
|
|
64
79
|
| Area | Contracts shipped | Result |
|
|
@@ -74,12 +89,30 @@ The repository may act as a disk, a CI workflow may act as a function call, Page
|
|
|
74
89
|
| Delivery | manifests, workflow registry, extension packaging and release assets | repeatable package and runner surfaces |
|
|
75
90
|
| Integrations | GitHub, GitLab, Forgejo, app lifecycle, command scopes and delivery adapters | caller-owned provider connectivity |
|
|
76
91
|
|
|
92
|
+
The protocol layer accepts JSON request/response envelopes, NDJSON append-only events, SSE progress streams, structured text and raw binary chunks. Retryable operations use bounded backoff, idempotency keys and caller-owned persistence; multi-step operations expose saga compensation instead of assuming that a partial remote action can be rolled back automatically.
|
|
93
|
+
|
|
94
|
+
| Reliability concern | Contract | Default boundary |
|
|
95
|
+
| --- | --- | --- |
|
|
96
|
+
| Retry | transient HTTP and network failures only | bounded attempts with caller-selected delay |
|
|
97
|
+
| Idempotency | request or delivery identity | at-least-once dispatch without duplicate effects |
|
|
98
|
+
| Circuit breaker | `closed -> open -> half-open` | caller-owned recovery threshold and timeout |
|
|
99
|
+
| Concurrency | queue, frontier or pool budget | explicit limits instead of unbounded fan-out |
|
|
100
|
+
| Compensation | workflow or saga callback | caller-owned cleanup after cancellation |
|
|
101
|
+
|
|
77
102
|
The root entry point is transport-neutral. Node filesystem, HTTP server, persistent sessions and Playwright are explicit subpaths or optional adapters. The library accepts caller-provided fetchers, browser transports, storage adapters, persistence, proxy pools, captcha evidence handlers, webhook secrets and remote credentials.
|
|
78
103
|
|
|
79
104
|
### Productization: one engine, many shells
|
|
80
105
|
|
|
81
106
|
The same contracts can be surfaced as an npm library, application archive, computer runtime, desktop installer, Android APK/AAB, iOS IPA, CLI, binary, browser package, Manifest V3 extension, web/PWA artifact, LibreOffice OXT, VSIX, webhook server, MCP transport, workflow action, container image, Maven package, NuGet package or RubyGem. These surfaces are declarative target plans and caller-owned adapters around the engine; they are not separate sources of truth.
|
|
82
107
|
|
|
108
|
+
### Agent context and structured output
|
|
109
|
+
|
|
110
|
+
The extraction path is **structured-first**: metadata and schema facts are selected before free-form text, then serialized to bounded Markdown, JSON or XML. Heading-aware chunks preserve source URL, content hash, heading path and token estimates for downstream retrieval. `generateLlmsTxt` and `generateLlmsFullTxt` expose concise agent indexes with absolute links, while `estimateTokens`, `fitsInContext` and the browser context budget prevent a caller from silently exceeding its chosen model or transport limit. No model provider is mandatory; parsing and context policies remain injectable.
|
|
111
|
+
|
|
112
|
+
### Third-party compute identity
|
|
113
|
+
|
|
114
|
+
Saddle can be connected to GitHub, GitLab, Forgejo, Gitea, Codeberg, Docker or another caller-owned runner. The operator owns the application identity, repository permissions, webhook secret and provider token; Saddle supplies transport-neutral contracts and never assumes that a hosted service account, database or runner exists. This is the operational meaning of the original multi-forge design: the runner is replaceable and the artifact is the durable boundary.
|
|
115
|
+
|
|
83
116
|
## Public API
|
|
84
117
|
|
|
85
118
|
| Export | Purpose |
|
|
@@ -90,6 +123,11 @@ The same contracts can be surfaced as an npm library, application archive, compu
|
|
|
90
123
|
| `extractcontent` | structured extraction |
|
|
91
124
|
| `serializeresult` | serialize JSON, Markdown or XML results |
|
|
92
125
|
| `formatforagent` | summary, chunks and token count |
|
|
126
|
+
| `chunkMarkdown` / `formatChunksForRAG` | heading-aware bounded chunks for downstream context |
|
|
127
|
+
| `generateLlmsTxt` / `generateLlmsFullTxt` | agent-readable documentation indexes |
|
|
128
|
+
| `estimateTokens` / `fitsInContext` | model-neutral context and cost estimates |
|
|
129
|
+
| `withRetry` | bounded retry and abort handling |
|
|
130
|
+
| `createServer` | caller-owned HTTP surface |
|
|
93
131
|
| `batchscrape` | bounded URL groups |
|
|
94
132
|
| `crawlurl` | crawl contract with domain and budget controls |
|
|
95
133
|
| `browseragent` | caller-owned navigation, click, type and screenshot actions |
|
|
@@ -112,7 +150,7 @@ npm run extension:build -- --output build/extension
|
|
|
112
150
|
ls build/extension/manifest.json build/extension/worker.js build/extension/content.js build/extension/popup.html
|
|
113
151
|
```
|
|
114
152
|
|
|
115
|
-
The base permission set is `activeTab`, `scripting` and `storage`. It does not request broad host permissions, cookies, `webRequest`, debugger access or arbitrary page code execution. Optional host escalation remains caller-owned. Releases attach `saddle
|
|
153
|
+
The base permission set is `activeTab`, `scripting` and `storage`. It does not request broad host permissions, cookies, `webRequest`, debugger access or arbitrary page code execution. Optional host escalation remains caller-owned. Releases attach `saddle.extension.<version>.zip`; cross-browser profiles remain adapter work.
|
|
116
154
|
|
|
117
155
|
## Security boundaries
|
|
118
156
|
|
|
@@ -127,17 +165,17 @@ The base permission set is `activeTab`, `scripting` and `storage`. It does not r
|
|
|
127
165
|
| Failure | retry, circuit breaker, idempotency and resume are configurable |
|
|
128
166
|
| Releases | version comes from the `vX.Y.Z` tag and must match `package.json` |
|
|
129
167
|
|
|
130
|
-
Version 1.8.
|
|
168
|
+
Version 1.8.14 carries the TypeScript-first source into the current release and keeps public JavaScript package paths stable. It includes release-derived package metadata, queue leases, bounded structured extraction with provenance, browser context budgets, explicit workflow cancellation with caller-owned compensation, deterministic artifact retention decisions and a post-push container pull/smoke validation. The dynamic debug collector is intentionally an unchecked browser boundary because it monkey-patches browser APIs; the rest of the web surface remains strictly typechecked. See [`docs/reorganization-1.8.9.md`](docs/reorganization-1.8.9.md), [`docs/toolchainresearch-1.8.9.md`](docs/toolchainresearch-1.8.9.md), [`docs/releasenotes-1.8.12.md`](docs/releasenotes-1.8.12.md), [`docs/releasenotes-1.8.13.md`](docs/releasenotes-1.8.13.md) and [`docs/releasenotes-1.8.14.md`](docs/releasenotes-1.8.14.md).
|
|
131
169
|
|
|
132
170
|
## Package surfaces and release automation
|
|
133
171
|
|
|
134
|
-
Workflows use the release tag and the local `releaseversion` action. They do not contain a manually edited version number. The action fetches the tag, checks out its commit and rejects a release when the tag version does not match the root `package.json`.
|
|
172
|
+
Workflows use the release tag and the local `releaseversion` action. They do not contain a manually edited version number. The action fetches the tag, checks out its commit and rejects a release when the tag version does not match the root `package.json`. The `created` release event fans out to the six registry workflows, so NuGet, Maven, RubyGems, GitHub Packages npm, public npmjs and GHCR receive the same validated version from one source of truth.
|
|
135
173
|
|
|
136
174
|
| Registry | Artifact | Workflow |
|
|
137
175
|
| --- | --- | --- |
|
|
176
|
+
| GHCR | `ghcr.io/wenathlan/saddle:<version>` | `publishghcr.yml` |
|
|
138
177
|
| GitHub Packages npm | `@wenathlan/saddle@<version>` | `publishgithubnpm.yml` |
|
|
139
178
|
| Public npmjs | `@wenathlan/saddle@<version>` | `publishnpmjs.yml` |
|
|
140
|
-
| GHCR | `ghcr.io/wenathlan/saddle:<version>` | `publishghcr.yml` |
|
|
141
179
|
| Maven | `io.wenathlan:saddle:<version>` | `publishmaven.yml` |
|
|
142
180
|
| NuGet | `Saddle.<version>.nupkg` | `publishnuget.yml` |
|
|
143
181
|
| RubyGems | `saddle <version>` | `publishrubygems.yml` |
|
|
@@ -176,7 +214,7 @@ npm run web:check
|
|
|
176
214
|
VITE_BASE_PATH=/saddle npm run web:build:pages
|
|
177
215
|
```
|
|
178
216
|
|
|
179
|
-
The engine test suite is deterministic and does not require real credentials or network access. The release path is: update `package.json` and the manifest files, update `changelog.md
|
|
217
|
+
The engine test suite is deterministic and does not require real credentials or network access. The release path is: update `package.json` and the manifest files, update `changelog.md` and release notes, run all gates, create `v<package-version>`, push the tag and create the GitHub release. Registry workflows then derive the same version from that release tag. A package metadata change alone does not publish anything; the release tag is the intentional publication boundary.
|
|
180
218
|
|
|
181
219
|
## Repository map
|
|
182
220
|
|
|
@@ -207,11 +245,11 @@ The engine is TypeScript-first ESM with English JSDoc comments and a generated J
|
|
|
207
245
|
|
|
208
246
|
## Historical documentation
|
|
209
247
|
|
|
210
|
-
Earlier README snapshots remain in `docs/plans/README.md`, `docs/talks9/README.md
|
|
248
|
+
Earlier root README snapshots and platform READMEs remain in `docs/plans/README.md`, `docs/talks9/README.md`, `docs/talks9/README (2).md`, `android/README.md`, `browser/README.md`, `desktop/README.md`, `extension/README.md` and `ios/README.md` as archival or surface-specific evidence. Their useful architecture ideas were consolidated here, while stale `@devthink`, `@iakadion`, `io.devthink`, Node 20/22, `client/src`, speculative provider quotas and unimplemented hosted services were not copied into the canonical contract.
|
|
211
249
|
|
|
212
250
|
## Current scope
|
|
213
251
|
|
|
214
|
-
Version 1.8.
|
|
252
|
+
Version 1.8.14 extends the TypeScript-first engine with flat project-owned desktop, Android and iOS build surfaces, explicit Capacitor staging boundaries, dotted release asset naming, helper-binary rejection, structured extraction provenance, browser context budgets, resumable workflow compensation, retention metadata and a container image that is pulled and smoke-tested after publication. Browser binaries, provider credentials, n8n host registration, persistent databases, captcha solvers and production deployment remain caller-selected adapters. Future work should extend contracts without coupling the core to one forge, registry, browser or storage vendor.
|
|
215
253
|
|
|
216
254
|
## License
|
|
217
255
|
|
package/dist/apps/registry.d.ts
CHANGED
|
@@ -22,10 +22,10 @@ export declare function appregistry(options?: {}): {
|
|
|
22
22
|
missing?: undefined;
|
|
23
23
|
appid?: undefined;
|
|
24
24
|
} | {
|
|
25
|
+
reason?: undefined;
|
|
25
26
|
allowed: boolean;
|
|
26
27
|
missing: any[];
|
|
27
28
|
appid: any;
|
|
28
|
-
reason?: undefined;
|
|
29
29
|
};
|
|
30
30
|
get: (id: any) => any;
|
|
31
31
|
list: () => any[];
|
package/dist/mcp/server.d.ts
CHANGED
package/dist/memory/engine.d.ts
CHANGED
|
@@ -16,9 +16,9 @@ export declare function memoryengine(options?: {}): {
|
|
|
16
16
|
data: any;
|
|
17
17
|
error?: undefined;
|
|
18
18
|
} | {
|
|
19
|
-
data?: undefined;
|
|
20
19
|
success: boolean;
|
|
21
20
|
error: any;
|
|
21
|
+
data?: undefined;
|
|
22
22
|
}>;
|
|
23
23
|
sync: (key: any, options?: {}) => Promise<any[]>;
|
|
24
24
|
capabilities: () => any;
|
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.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;
|
|
@@ -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
|
|
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,11 +97,11 @@ 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
|
|
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
101
|
|
|
102
102
|
## 1.8.13 release matrix
|
|
103
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.
|
|
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
105
|
|
|
106
106
|
| Surface | Architectures | Artifact naming contract |
|
|
107
107
|
| --- | --- | --- |
|
|
@@ -113,4 +113,20 @@ Version 1.8.13 keeps the release-tag-derived matrix and adds deterministic reten
|
|
|
113
113
|
| Container | OCI | `saddle.container.1.8.13.tar.gz` |
|
|
114
114
|
| Browser extension | Manifest V3 | `saddle.extension.1.8.13.zip` |
|
|
115
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 manifest may additionally carry `retention`, `retentionplan` and `retentionevaluatedat`; these fields are advisory execution decisions and do not imply deletion or publication.
|
|
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.
|
package/docs/releaseassets.md
CHANGED
|
@@ -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.
|
|
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.
|
|
7
|
+
--version 1.8.14 \
|
|
8
8
|
--surface desktop \
|
|
9
9
|
--output build/release \
|
|
10
10
|
--artifact build/saddle.tgz \
|
|
@@ -17,7 +17,7 @@ Saddle 1.8.12 consolidates the root-first native surfaces, the GPL-3.0-only proj
|
|
|
17
17
|
|
|
18
18
|
## Artifact matrix
|
|
19
19
|
|
|
20
|
-
The release workflows derive the version from the release tag and use these lowercase dotted names.
|
|
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
21
|
|
|
22
22
|
| Surface | Architectures or mode | Expected artifact |
|
|
23
23
|
|---|---|---|
|
|
@@ -31,13 +31,28 @@ The release workflows derive the version from the release tag and use these lowe
|
|
|
31
31
|
|
|
32
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
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
|
+
|
|
34
49
|
## Compatibility and upgrade notes
|
|
35
50
|
|
|
36
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.
|
|
37
52
|
|
|
38
53
|
## Verification
|
|
39
54
|
|
|
40
|
-
The
|
|
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.
|
|
41
56
|
|
|
42
57
|
## References
|
|
43
58
|
|
|
@@ -17,7 +17,7 @@ Saddle 1.8.13 carries the active code and release-facing manifests forward from
|
|
|
17
17
|
|
|
18
18
|
## Artifact contract
|
|
19
19
|
|
|
20
|
-
The active workflows derive names from the release tag. The
|
|
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
21
|
|
|
22
22
|
| Surface | Expected artifact family |
|
|
23
23
|
|---|---|
|
|
@@ -31,9 +31,37 @@ The active workflows derive names from the release tag. The following names are
|
|
|
31
31
|
|
|
32
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
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
|
+
|
|
34
62
|
## Verification
|
|
35
63
|
|
|
36
|
-
The queue, structured extraction, browser context, workflow compensation and retention features passed the active engine and release test suites. The
|
|
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.
|
|
37
65
|
|
|
38
66
|
## References
|
|
39
67
|
|
|
@@ -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"
|
package/extension/README.md
CHANGED
|
@@ -20,7 +20,7 @@ The content bridge runs in Chrome's isolated world. It exposes bounded page meta
|
|
|
20
20
|
|
|
21
21
|
## deterministic release artifact
|
|
22
22
|
|
|
23
|
-
The Node-only build adapter creates an isolated unpacked artifact with the release version in its manifest. A caller can run `npm run extension:build -- --version 1.8.
|
|
23
|
+
The Node-only build adapter creates an isolated unpacked artifact with the release version in its manifest. A caller can run `npm run extension:build -- --version 1.8.14 --output build/extension` and package that directory with the archive tool available in the host environment. The release workflow derives the version from the published tag and attaches `saddle.extension.<version>.zip` without changing the source manifest.
|
|
24
24
|
|
|
25
25
|
## next slices
|
|
26
26
|
|
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.14",
|
|
5
5
|
"description": "User initiated page snapshots through the Saddle browser contract.",
|
|
6
6
|
"minimum_chrome_version": "110",
|
|
7
7
|
"permissions": ["activeTab", "scripting", "storage"],
|