@wenathlan/saddle 1.8.13 → 1.8.15

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 (75) hide show
  1. package/README.md +47 -9
  2. package/dist/binary/archive.d.ts +27 -0
  3. package/dist/binary/archive.d.ts.map +1 -0
  4. package/dist/binary/archive.js +46 -0
  5. package/dist/binary/archive.js.map +1 -0
  6. package/dist/binary/transform.d.ts +70 -0
  7. package/dist/binary/transform.d.ts.map +1 -0
  8. package/dist/binary/transform.js +105 -0
  9. package/dist/binary/transform.js.map +1 -0
  10. package/dist/delivery/manifest.d.ts +35 -0
  11. package/dist/delivery/manifest.d.ts.map +1 -0
  12. package/dist/delivery/manifest.js +68 -0
  13. package/dist/delivery/manifest.js.map +1 -0
  14. package/dist/index.d.ts +7 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +7 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/memory/planner.d.ts +66 -0
  19. package/dist/memory/planner.d.ts.map +1 -0
  20. package/dist/memory/planner.js +108 -0
  21. package/dist/memory/planner.js.map +1 -0
  22. package/dist/runners/chain.d.ts +125 -0
  23. package/dist/runners/chain.d.ts.map +1 -0
  24. package/dist/runners/chain.js +95 -0
  25. package/dist/runners/chain.js.map +1 -0
  26. package/dist/scrape/robots.js +1 -1
  27. package/dist/storage/index.d.ts +1 -0
  28. package/dist/storage/index.d.ts.map +1 -1
  29. package/dist/storage/index.js +1 -0
  30. package/dist/storage/index.js.map +1 -1
  31. package/dist/storage/memory.js +2 -2
  32. package/dist/storage/memory.js.map +1 -1
  33. package/dist/storage/pool.d.ts +95 -0
  34. package/dist/storage/pool.d.ts.map +1 -0
  35. package/dist/storage/pool.js +202 -0
  36. package/dist/storage/pool.js.map +1 -0
  37. package/dist/surfaces/requirements.d.ts +29 -0
  38. package/dist/surfaces/requirements.d.ts.map +1 -0
  39. package/dist/surfaces/requirements.js +50 -0
  40. package/dist/surfaces/requirements.js.map +1 -0
  41. package/docs/artifactavailability.md +22 -4
  42. package/docs/ecosystemplan.md +1 -1
  43. package/docs/enginearchitecture.md +28 -0
  44. package/docs/plans/00.index.md +2 -2
  45. package/docs/plans/06.dependencies.md +1 -1
  46. package/docs/plans/18.research.content.extraction.md +3 -3
  47. package/docs/plans/22.research.universal.runtime.md +10 -10
  48. package/docs/plans/28.action.plan.md +1 -1
  49. package/docs/plans/35.comparativo.concorrencia.md +10 -10
  50. package/docs/plans/40.npm.publish.md +6 -6
  51. package/docs/plans/41.o.que.falta.md +2 -2
  52. package/docs/plans/42.pesquisa.concorrencia.md +2 -2
  53. package/docs/plans/43.plan.universal.architecture.md +2 -2
  54. package/docs/plans/44.reference.md +1 -1
  55. package/docs/plans/45.robotarchitecture.md +3 -3
  56. package/docs/plans/46.scdnintegration.md +1 -1
  57. package/docs/plans/README.md +2 -2
  58. package/docs/plans/missing-facts.md +1 -1
  59. package/docs/registryresearch.md +3 -3
  60. package/docs/release17notes.md +1 -1
  61. package/docs/releaseassets.md +2 -2
  62. package/docs/releasenotes-1.8.12.md +17 -2
  63. package/docs/releasenotes-1.8.13.md +30 -2
  64. package/docs/releasenotes-1.8.14.md +67 -0
  65. package/docs/releasenotes-1.8.15.md +37 -0
  66. package/docs/talks9/README (2).md +2 -2
  67. package/docs/talks9/README.md +4 -4
  68. package/docs/talks9/Viabilidade do Saddle_ Uma An/303/241lise T/303/251cnica da Transforma/303/247/303/243o de Armazenamento Remoto em Mem/303/263ria Computacional.md" +4 -4
  69. package/docs/talks9/conversa.txt +4 -4
  70. package/docs/todo-1.8.15.md +483 -0
  71. package/docs/todo-1.8.16.md +651 -0
  72. package/docs/todo.md +708 -0
  73. package/extension/README.md +1 -1
  74. package/extension/manifest.json +1 -1
  75. package/package.json +9 -2
package/docs/todo.md ADDED
@@ -0,0 +1,708 @@
1
+ # Saddle engine — checklist de implementação
2
+
3
+ ## Auditoria e contratos
4
+
5
+ - [x] Auditar a base atual do repositório e confirmar branch, remotes e arquivos existentes.
6
+ - [x] Separar o escopo da biblioteca do escopo da interface visual.
7
+ - [x] Definir o runtime mínimo suportado e a política de compatibilidade.
8
+ - [x] Transformar a tese `storage == compute` em interfaces executáveis e testáveis.
9
+
10
+ ## Núcleo da biblioteca
11
+
12
+ - [x] Criar o modelo de job, sessão, artefato, provider, storage backend e working set.
13
+ - [x] Implementar o event log versionado e a validação do Session JSON.
14
+ - [x] Implementar o scheduler que seleciona o primeiro runner disponível.
15
+ - [x] Implementar o bridge de storage com um adaptador local seguro e extensível.
16
+ - [x] Implementar o executor de jobs com ciclo `prepare → process → sync → cleanup`.
17
+
18
+ ## Superfícies e entrega
19
+
20
+ - [x] Criar a API pública da biblioteca e a CLI inicial.
21
+ - [x] Adicionar testes unitários e testes de integração sem credenciais reais.
22
+ - [x] Adicionar package metadata, build, exports e exemplo executável.
23
+ - [x] Adicionar workflows GitHub Actions sem executar ações destrutivas.
24
+ - [x] Validar tudo localmente e revisar o diff antes do push.
25
+ - [x] Publicar a primeira implementação no repositório GitHub selecionado após confirmação final do diff.
26
+
27
+ ## Migração de arquitetura
28
+
29
+ - [x] Remover o layout `src` e mover a lógica para módulos root based.
30
+ - [x] Migrar o engine de TypeScript para JavaScript ESM.
31
+ - [x] Renomear arquivos internos para lowercase sem underscore ou hyphen.
32
+ - [x] Substituir classes e identificadores públicos por nomes lowercase compatíveis com a skill.
33
+ - [x] Remover endereços e portas hardcoded do runtime e tornar opções parametrizáveis.
34
+ - [x] Manter o pacote `@wenathlan/saddle` como superfície de distribuição sem travar os adaptadores.
35
+
36
+ ## Expansão do engine
37
+
38
+ - [x] Implementar os modos library, cli, binary, browser, headless e computer como superfícies independentes.
39
+ - [x] Adicionar memória interna, externa, física, vetorizada e de biblioteca como estratégias selecionáveis.
40
+ - [x] Adicionar adapters para GitHub, storage S3 compatible e dispatch de workflow sem credenciais no código.
41
+ - [x] Implementar API de sessão, replay abstrato e persistência JSONL.
42
+ - [x] Adicionar contrato de socket para realtime sem depender de uma plataforma única.
43
+ - [x] Manter alternativas de deploy abertas sem Netlify Functions ou Vercel Functions.
44
+
45
+ ## Próxima frente do engine
46
+
47
+ - [x] Criar contratos de persistência para jobs sessions artifacts chunks e providers.
48
+ - [x] Adicionar schema operacional compatível com Prisma Drizzle e MySQL2 sem impor um driver.
49
+ - [x] Implementar queue de jobs idempotência retry e saga de compensação.
50
+ - [x] Adicionar workflow dispatch parametrizado e registro de run.
51
+ - [x] Adicionar browser session replay abstrato sem acoplar o core a um browser.
52
+ - [x] Adicionar scraping seguro com robots cache extraction e content types.
53
+ - [x] Criar packager para binary container e manifest de distribuição.
54
+ - [x] Adicionar adapters multiforge para GitLab Forgejo Gitea Codeberg e Hugging Face.
55
+ - [x] Criar contrato de browser e replay de eventos sem acoplar a um navegador.
56
+ - [x] Implementar parser de robots e respeito ao crawl delay.
57
+ - [x] Implementar cache com ttl e stale while revalidate.
58
+ - [x] Implementar extraction estruturada de metadata links e texto.
59
+ - [x] Criar manifest de distribuição para library cli binary e container.
60
+ - [x] Gerar plano de container sem fixar host ou port.
61
+ - [x] Criar adapter genérico de forge e wrappers GitLab Forgejo Gitea Codeberg e Hugging Face.
62
+
63
+ ## Próxima camada operacional
64
+
65
+ - [x] Criar bot unificado com start stop command webhook schedule e status.
66
+ - [x] Criar parser de comandos e registro de adapters de plataforma.
67
+ - [x] Criar serializadores JSON NDJSON e SSE sem servidor obrigatório.
68
+ - [x] Criar streaming de blocos com backpressure configurável.
69
+ - [x] Adicionar adapter SQL neutro para Drizzle Prisma e MySQL2.
70
+ - [x] Adicionar workflows multiforge e manifests de execução.
71
+
72
+ ## Roadmap P0 e P1
73
+
74
+ - [x] Criar memory engine com `memoryobject`, `computeresult`, targets e `safeload`.
75
+ - [x] Implementar transformações storage to compute e compute to storage.
76
+ - [x] Adicionar API universal de scrape, crawl, batch e health com SSE.
77
+ - [x] Adicionar rate limiting global, por usuário e por domínio.
78
+ - [x] Implementar crawling BFS com normalização de URL, sitemap e limite de domínio.
79
+ - [x] Adicionar queue persistente para crawl e fallback em memória.
80
+ - [x] Implementar `save` e `load` de sessões e extraction por schema.
81
+ - [x] Adicionar servidor MCP opcional com ferramentas scrape, crawl, batch, extract e serialize.
82
+ - [x] Criar Dockerfile seguro e docker compose parametrizado.
83
+ - [x] Adicionar runtime universal sem exigir fs, process ou Buffer no núcleo.
84
+
85
+ ## Roadmap P2 e P3
86
+
87
+ - [x] Criar perfil de fingerprint coerente por sessão sem patch stealth automático.
88
+ - [x] Implementar pool de proxy com health score, rotate e revive.
89
+ - [x] Adicionar contrato de captcha solver manual ou externo com evidências.
90
+ - [x] Implementar token estimate, chunk markdown e RAG manifest.
91
+ - [x] Gerar llms.txt e llms-full.txt a partir de páginas estruturadas.
92
+ - [x] Adicionar webhooks HMAC e eventos de job.
93
+ - [x] Criar manifests para browser extension, desktop, mobile e n8n.
94
+
95
+ ## Public library layer
96
+
97
+ - [x] Criar `saddleurl` e `scrapeurl` com formatos configuráveis.
98
+ - [x] Adicionar `extractcontent`, `serializeresult`, `formatforagent`, batch e crawl helpers.
99
+ - [x] Criar Browser Agent abstrato com navigate click type screenshot text html scroll e execute commands.
100
+ - [x] Adicionar taxonomia de erros HTTP e recovery policy.
101
+ - [x] Implementar retry policy e circuit breaker configuráveis.
102
+ - [x] Criar servidor Node parametrizado com host e port recebidos por configuração.
103
+ - [x] Adicionar adapters de storage remoto para GitHub Contents e file hosting.
104
+ - [x] Atualizar documentação, exports, exemplo público e superfície deploy.
105
+
106
+ ## Format and mode consolidation
107
+
108
+ - [x] Audit all public modules for English JSDoc section comments.
109
+ - [x] Add a mode matrix for library application browser cli binary and memory.
110
+ - [x] Add binary build contracts and explicit mode resolution.
111
+ - [x] Add computer desktop mobile extension and internet surface manifests.
112
+ - [x] Review package exports docs examples and embedded error handlers.
113
+
114
+ ## Release audit
115
+
116
+ - [x] Compare every README foundation engine and productization item with the current code.
117
+ - [x] Compare the conclusions file with the current storage, site, database, forge, and runner model.
118
+ - [x] Mark missing features as implemented, partial, deferred, or unsafe by design.
119
+ - [x] Complete durable database schema and migration contracts.
120
+ - [x] Add persistent queue recovery and MCP transport with SSRF guard.
121
+ - [x] Complete production release workflow and changelog.
122
+ - [x] Add npm provenance through npm Trusted Publishing without a long-lived token.
123
+ - [x] Add live release workflow metadata for GitHub Packages and the public registries.
124
+
125
+ ## Registry workflows
126
+
127
+ - [x] Document GitHub Packages versus public npmjs publication.
128
+ - [x] Add GitHub Packages npm workflow using `GITHUB_TOKEN` and `packages: write`.
129
+ - [x] Add public npmjs workflow using npm Trusted Publishing and `id-token: write`.
130
+ - [x] Add GHCR container workflow using `GITHUB_TOKEN` and `packages: write`.
131
+ - [x] Add Maven GitHub Packages workflow and minimal pom/settings metadata.
132
+ - [x] Add NuGet GitHub Packages workflow and minimal project metadata.
133
+ - [x] Add RubyGems GitHub Packages workflow and minimal gem metadata.
134
+ - [x] Validate workflows locally without publishing or exposing credentials.
135
+ - [x] Implement the highest priority missing library features.
136
+ - [x] Prepare package version 1.0 metadata and release notes.
137
+ - [x] Add safe GitHub release validation and npmjs publish workflow using OIDC Trusted Publishing.
138
+ - [x] Create the v1.0 tag only after the final checks pass.
139
+ - [x] Inspect failed or missing release workflow runs and package listings.
140
+ - [x] Publish the authorized GitHub Packages npm artifact after correcting the namespace blocker.
141
+ - [x] Verify package version and visibility through the GitHub package page.
142
+ - [x] Publish GHCR Maven NuGet and RubyGems artifacts after their independent metadata checks.
143
+ - [x] Commit and push publication verification metadata.
144
+
145
+ ## Comparative audit and extension surface
146
+
147
+ - [x] Compare browser-agent, scraper, automation, MCP, storage and workflow libraries using primary repository or documentation sources.
148
+ - [x] Compare browser extension architectures and record permission, content-script, service-worker and messaging gaps.
149
+ - [x] Reconcile the three supplied README or conclusions documents with the current root-based engine.
150
+ - [x] Create a prioritized feature gap matrix with evidence and implementation status.
151
+ - [x] Create the `extension/` surface with manifest, service worker, content bridge, popup or control surface and shared protocol contracts.
152
+ - [x] Add deterministic extension tests without browser credentials or network access.
153
+ - [x] Integrate extension exports and documentation without coupling the core to Chrome or another vendor.
154
+
155
+ ## Master ecosystem plan
156
+
157
+ ### Release 1.7.0 execution
158
+
159
+ - [x] Confirm the 1.7.0 working tree, workflows, release metadata and package contents.
160
+ - [x] Create and push tag `v1.7.0` from the validated commit.
161
+ - [x] Create GitHub Release Notes for 1.7.0 without publishing credentials in the repository.
162
+ - [x] Verify the npm GitHub Packages, GHCR, Maven, NuGet and RubyGems workflow runs.
163
+ - [x] Confirm the published artifact name and version in each registry before reporting success.
164
+ - [x] Record the npmjs Trusted Publishing bootstrap blocker without claiming a publish.
165
+ - [x] Continue with the surfaces block after the release verification.
166
+
167
+ The following blocks are the execution order for the complete ecosystem. A block becomes complete only when its contracts, implementation, deterministic tests, documentation and release impact are all checked.
168
+
169
+ ### Block 1 — audit and governance
170
+
171
+ - [ ] Reconcile the supplied `README.md`, `README(2).md`, and `other.md` with the current code and remove claims that are not executable.
172
+ - [ ] Maintain the comparative audit with primary sources for browser agents, scrapers, MCP, storage, workflow and extension projects.
173
+ - [ ] Keep `docs/gapmatrix.md` current with implemented, partial, deferred and unsafe-by-design states.
174
+ - [ ] Define criteria for public API stability, adapter ownership, credentials, permissions, persistence and recovery.
175
+
176
+ ### Block 2 — browser agent foundation
177
+
178
+ - [x] Add accessibility or structured page snapshots with snapshot identifiers and stable references.
179
+ - [x] Add stale reference, overlay obstruction, navigation and frame errors.
180
+ - [x] Add tab, frame, window and browser session identity contracts.
181
+ - [x] Add action results for navigation, click, type, fill, key, scroll, upload and screenshot.
182
+ - [x] Add deterministic event recording and replay with snapshot boundaries and tab/window/frame context restoration.
183
+
184
+ ### Block 3 — extension runtime
185
+
186
+ - [x] Add the first Manifest V3 extension surface with popup, content bridge, service worker and protocol.
187
+ - [x] Add durable pending commands and rehydration after service worker termination.
188
+ - [x] Add a read-only isolated-world to page-world bridge with token correlation, bounded facts and timeout errors.
189
+ - [ ] Add optional host permission escalation with explicit user consent.
190
+ - [x] Add snapshot diffing, tab/frame metadata and resumable command records.
191
+ - [x] Add deterministic extension packaging and unpacked validation.
192
+ - [ ] Add Firefox, Edge and WebExtension-compatible adapter profiles.
193
+
194
+ ### Block 4 — working set and storage
195
+
196
+ - [x] Complete chunk manifests with resume, checksum, range reads and partial sync.
197
+ - [x] Add content-addressed storage indexes and deduplication across backends.
198
+ - [x] Add cache tiers with ETag, stale-while-revalidate, invalidation and bounded memory.
199
+ - [x] Add storage capability negotiation for local, forge, S3-compatible, dataset and extension storage.
200
+ - [x] Add conflict detection and merge policy for concurrent artifact writes.
201
+
202
+ ### Block 5 — runners and execution
203
+
204
+ - [x] Add provider health, capacity, cost, quota and capability reporting.
205
+ - [x] Add workflow trigger contracts for manual, webhook, schedule, repository dispatch and retry events.
206
+ - [x] Add resumable remote run records with cancellation, timeout and heartbeat semantics.
207
+ - [x] Add cron or alarm manifests without binding the core to a single forge or host.
208
+ - [x] Add execution sandbox capability reports for Node, browser, container and binary modes.
209
+
210
+ ### Block 6 — scraping and agent context
211
+
212
+ - [x] Add structured accessibility and semantic extraction alongside HTML extraction.
213
+ - [x] Add content-type detection and safe bounded normalization for JSON, XML, Markdown, text, HTML and binary results; richer parsers remain adapters.
214
+ - [x] Add crawl frontier priorities, per-domain budgets, sitemap refresh and persistence metrics.
215
+ - [x] Add RAG chunk lineage, embeddings adapter contracts and retrieval result provenance.
216
+ - [x] Add token accounting and model context policies without hardcoded provider prices.
217
+
218
+ ### Block 7 — API, MCP and security
219
+
220
+ - [x] Complete HTTP and Web Request/Response server routes for scrape, crawl, batch, jobs, health and artifacts.
221
+ - [x] Add versioned API envelopes, request ids, structured error responses and content negotiation.
222
+ - [x] Add MCP browser snapshot and browser action tools over JSONL and HTTP transports.
223
+ - [x] Expand SSRF defenses to redirects, DNS rebinding, IPv6, metadata endpoints and proxy dispatch.
224
+ - [x] Add authentication, authorization, rate limits and audit events as caller-owned adapters.
225
+
226
+ ### Block 8 — bots, apps and integrations
227
+
228
+ - [x] Complete GitHub, GitLab, Forgejo, Gitea, Codeberg, Hugging Face, Discord, Telegram and generic webhook adapters.
229
+ - [x] Add app installation, OAuth, bot token and webhook lifecycle contracts without storing secrets in the library.
230
+ - [x] Add command permissions, idempotent command execution and platform-neutral status reporting.
231
+ - [x] Add notification and artifact delivery adapters with retry and dead-letter behavior.
232
+ - [x] Add integration conformance tests using fake transports only.
233
+
234
+ ### Block 9 — packaging and distribution
235
+
236
+ - [x] Add extension zip and unpacked validation with a release-tag-derived build; keep desktop, mobile, n8n and binary artifact plans caller-owned.
237
+ - [x] Add reproducible SBOM, provenance, checksum and release asset generation.
238
+ - [x] Verify all registry workflows for v1.7.0 without exposing credentials.
239
+ - [ ] Add install and smoke-test instructions for npm, GitHub Packages, GHCR, Maven, NuGet and RubyGems.
240
+ - [ ] Publish only after namespace, visibility, license and artifact contents are confirmed.
241
+
242
+ ### Block 10 — product surfaces and operations
243
+
244
+ - [x] Add desktop and mobile manifests with caller-owned adapter contracts.
245
+ - [x] Extend n8n trigger and action declarations with deterministic execution guards.
246
+ - [x] Add a product surface index and usage guide for the new contracts.
247
+ - [x] Add an auditable operator control contract for jobs, sessions, storage, runners, permissions, logs and artifacts.
248
+ - [x] Add a framework-neutral Web Request and Response control handler with optional caller authorization.
249
+ - [x] Add bounded operational metrics for latency, retries, queue depth, runner selection, storage bytes and failures.
250
+ - [x] Add retention, backup, restore and threat ownership policy contracts without forcing workers or persistence.
251
+ - [x] Add the first caller-owned desktop, mobile, n8n and framework-neutral web control contracts around the same engine contracts.
252
+ - [ ] Add operator controls for jobs, sessions, storage, runners, permissions, logs and artifacts.
253
+ - [ ] Add observability for latency, retries, queue depth, runner selection, storage bytes and failures.
254
+ - [ ] Add migration, backup, restore and data retention policies for persistent adapters.
255
+ - [ ] Add threat model, abuse boundaries, terms-of-service guidance and security release process.
256
+
257
+ ### Block 11 — cross-runtime compatibility
258
+
259
+ - [x] Reexecute cross-runtime validation from the derived release tag without a fixed workflow version.
260
+ - [x] Confirm that the npmjs workflow uses the `NPM_TOKEN` secret without exposing its value in logs or files.
261
+ - [x] Replace the invalid or unauthorized `NPM_TOKEN` secret with a valid raw token for the intended npm scope.
262
+ - [x] Reexecute npmjs publication and confirm `@wenathlan/saddle@1.8.1` is visible in the public registry.
263
+ - [x] Confirm the npm token identity can publish `@wenathlan/saddle` without exposing the token.
264
+ - [x] Validate root library operation in Node, Bun and Deno through the CI matrix.
265
+ - [x] Validate the browser worker root boundary through the injected `workerbridge` contract.
266
+ - [ ] Validate extension-context package loading where supported; the permission policy contract is covered separately.
267
+ - [x] Add a minimal extension permission policy and optional caller-owned escalation contract.
268
+ - [x] Keep Node-only filesystem and HTTP adapters outside the transport-neutral core.
269
+ - [x] Add capability detection and graceful unsupported-mode errors.
270
+ - [x] Add Node package surface import tests for every declared export target.
271
+ - [x] Add a deterministic transport-neutral export graph audit for every browser-safe subpath; full vendor bundler output remains a host concern.
272
+
273
+ ### Block 12 — release gates
274
+
275
+ - [x] Align package metadata, lockfile, changelog and release notes to `1.8.0`.
276
+ - [x] Run all local release gates on the 1.8.0 candidate.
277
+ - [x] Create and push tag `v1.8.0` only from the validated commit.
278
+ - [x] Create GitHub Release `v1.8.0` with notes derived from the changelog.
279
+ - [x] Verify GitHub npm, GHCR, Maven, NuGet and RubyGems workflows for `1.8.0`.
280
+ - [x] Confirm npmjs status without claiming publication when the registry returns HTTP 404.
281
+ - [x] Audit the latest verified Node, Docker, Java, .NET, Ruby and Bun/Deno action versions before changing CI.
282
+ - [x] Update workflow toolchains and Docker base images without hardcoding a package release version.
283
+ - [x] Validate that all five registry workflows derive the package version from the release tag.
284
+ - [ ] Keep npmjs publication blocked until the owner confirms a valid `NPM_TOKEN`; do not publish during toolchain maintenance.
285
+ - [ ] Require deterministic tests, format audit, syntax checks, package dry-run and security scan for every block.
286
+ - [ ] Require documentation and changelog updates for every public contract.
287
+ - [ ] Require a clean working tree and reviewed diff before each push.
288
+ - [ ] Create a versioned release only after all claims in the README match code or are explicitly marked planned or deferred.
289
+ - [ ] Audit `.github` for duplicated release logic and unify only the shared version, checkout and validation path.
290
+ - [x] Centralize package installation, deterministic gates and tarball validation in `.github/actions/validatepackage`.
291
+ - [ ] Continue the next library feature block with tests, documentation and release-aware metadata.
292
+ - [x] Migrate all canonical package identity references from `@wenathlan/saddle` to `@wenathlan/saddle`.
293
+ - [x] Create a follow-up release after the package identity migration; do not reuse the existing v1.8.0 tag.
294
+ - [x] Align package metadata and release notes to follow-up version `1.8.1`.
295
+ - [x] Create tag `v1.8.1` only after the scoped npm identity migration passes all gates.
296
+
297
+ ### Release 1.8.2 — canonical wenathlan publication
298
+
299
+ - [x] Confirm repository administration and package publication authority for `wenathlan` while retaining `iakadion` repository administration.
300
+ - [x] Audit every active manifest, workflow, documentation example and release asset for the canonical `@wenathlan/saddle` identity.
301
+ - [x] Bump package metadata, lockfile, Maven, NuGet, RubyGems, changelog and release notes to `1.8.2`.
302
+ - [x] Update GitHub Packages npm publication to derive the transferred `@wenathlan` namespace; preserve registry-specific GHCR, Maven, NuGet and RubyGems naming rules.
303
+ - [x] Run all deterministic gates and inspect the final diff before creating `v1.8.2`.
304
+ - [x] Create and push tag `v1.8.2`, publish the GitHub release and trigger all six publication workflows.
305
+ - [x] Verify public npm and the extension zip asset independently; record successful authenticated workflow evidence and protected-access limits for GitHub Package registries.
306
+
307
+ ### Release 1.8.4 — platform pipelines and pages
308
+
309
+ - [x] Audit every Node.js 22 reference across source, Docker, GitHub Actions, GitLab, Forgejo, Gitea, Codeberg and Woodpecker configurations.
310
+ - [x] Replace all active Node.js 22 references with Node.js 26.7.0 and add deterministic version checks.
311
+ - [x] Add the Saddle Pages GitHub Pages build and deployment workflow without committing generated site output.
312
+ - [x] Add equivalent caller-configured workflows for GitLab, Forgejo, Gitea, Codeberg and Woodpecker.
313
+ - [x] Document required repository variables, tokens and deployment limitations for each external forge.
314
+ - [x] Verify the owner and package coordinate before deleting the legacy Maven package `io.devthink:saddle`.
315
+ - [x] Bump JavaScript, Maven, NuGet, RubyGems, Docker and release metadata to `1.8.4`.
316
+ - [x] Run all library and website gates, commit the migration, create `v1.8.4` and verify the resulting library pipelines.
317
+
318
+ ### Package metadata and next engine block
319
+
320
+ - [x] Compare the attached package manifest with the current `package.json` without copying unrelated scripts or claims.
321
+ - [x] Add only the optional Playwright peer because the new explicit adapter and test use it; do not add unused runtime dependencies.
322
+ - [x] Add compatible `engines`, `packageManager` and optional `peerDependencies`; do not add empty `optionalDependencies`, unsupported `trustedDependencies` or unused patch metadata.
323
+ - [x] Preserve the root-based JavaScript ESM boundary and keep Node-only adapters in explicit subpaths.
324
+ - [x] Update package documentation and changelog for any new public metadata or dependency contract.
325
+ - [x] Run install, syntax, format, deterministic tests, package dry-run and security review before the next release.
326
+ - [x] Decide that the resulting changes belong in `1.8.5`; keep the immutable `1.8.4` tag unchanged.
327
+ - [ ] Continue the next engine block only after the package manifest changes are committed and the working tree is clean.
328
+
329
+ ### Web duplicate cleanup
330
+
331
+ - [x] Inventory `/web` files and group duplicate suffix variants by canonical basename.
332
+ - [x] Compare duplicate contents and merge unique sections into the canonical file for each authorized group.
333
+ - [x] Delete 310 duplicate suffix files outside the ignored directories and keep canonical paths without numeric suffixes.
334
+ - [x] Remove the explicitly authorized `web/other1` and `web/other2` directories after the migration audit.
335
+ - [x] Run web typecheck, static Pages build, touched-file format check, engine gates and diff review.
336
+ - [x] Publish the deduplicated web tree in commit `d4b6ec5`.
337
+
338
+ ### Web root architecture migration
339
+
340
+ - [x] Inventory `web/client`, nested workflow folders and all path-sensitive imports before moving files.
341
+ - [x] Move the client contents to the web root without creating a second source tree or duplicate canonical files.
342
+ - [x] Consolidate web workflows into the root workflow locations defined by the architecture and remove nested copies.
343
+ - [x] Remove `web/other1` and `web/other2` after checking that no active build or deploy path references them.
344
+ - [x] Reconcile Vite, TypeScript, Pages, GitLab, Forgejo, Gitea, Codeberg and Woodpecker paths after the move.
345
+ - [x] Merge web development dependencies and package configuration into the repository root; remove the nested package and lockfile.
346
+ - [x] Run web typecheck, static build, dependency synchronization and deploy configuration checks.
347
+ - [x] Commit and push the root migration after reviewing the complete diff and resolving workflow-scope permissions.
348
+
349
+ ### Pages incident and release 1.8.6
350
+
351
+ - [x] Inspect the latest GitHub Actions runs, logs and annotations for Pages, release validation and Dependabot.
352
+ - [x] Reconcile `main` with any Dependabot branch or pull request without deleting an active branch blindly.
353
+ - [x] Verify the GitHub Pages source, artifact path, base path, environment and repository visibility settings.
354
+ - [x] Fix the Pages workflow and validate a deployable artifact from the root-based web project.
355
+ - [x] Set the repository project name and description to the Saddle canonical identity after browser confirmation.
356
+ - [x] Bump all package and release manifests to `1.8.6` without hardcoding workflow versions.
357
+ - [x] Run engine, web, packaging and release gates for `1.8.6`.
358
+ - [x] Create and push the `v1.8.6` tag and release only after the previous checks pass.
359
+ - [x] Verify the six registry workflows and Pages execution after the release trigger, including the successful GHCR rerun.
360
+
361
+ ### Branch and checks consolidation
362
+
363
+ - [x] Inventory every remote branch, open pull request, tag and unique commit reachable only from a non-main ref.
364
+ - [x] Record branch tips before deletion so removing refs cannot remove commits from the object database or release history.
365
+ - [x] Close obsolete automated pull requests after confirming their changes are not needed by the root-based package.
366
+ - [x] Delete every non-main remote branch only after preserving its tip in the audit record and checking for unmerged work.
367
+ - [x] Explain the change from the previous check count to the current check count by comparing workflow definitions and check runs.
368
+ - [x] Keep only `main` as an active branch and verify that the latest commit on it has the expected CI, compatibility and Pages checks.
369
+
370
+ ### Security, assets, documentation and release 1.8.7
371
+
372
+ - [ ] Inventory all GitHub security alerts, Dependabot alerts, dependency paths and workflow security findings without hiding unresolved advisories.
373
+ - [ ] Identify vulnerable direct and transitive packages, prefer Node.js built-ins where they replace external dependencies, and update safe dependencies to current compatible versions.
374
+ - [ ] Regenerate the root lockfile and verify npm audit, dependency review and package gates with the smallest safe remediation.
375
+ - [ ] Review workflow permissions, third-party action pins, secret handling, Docker build inputs and release-version derivation for security regressions.
376
+ - [ ] Inventory `web/public/manos`, determine whether its script is required, and remove or relocate it without leaving duplicate public runtime files.
377
+ - [ ] Audit every web image, SVG, favicon, font and asset URL under the Pages base path; replace root-absolute paths that break at `/saddle/` with base-aware references.
378
+ - [ ] Inspect all current and historical README/Markdown sources through git history, deduplicate claims, remove stale package identities and consolidate the canonical README in English.
379
+ - [ ] Update all release manifests and changelog metadata to `1.8.7`; keep workflows deriving the version from the tag and package metadata instead of manual edits.
380
+ - [ ] Run engine, web, dependency, security, packaging and release gates for `1.8.7`.
381
+ - [ ] Create and publish `v1.8.7` only after all actionable security findings and asset checks are resolved or explicitly documented as unfixable external advisories.
382
+
383
+ ### Reorganization and release 1.8.8
384
+
385
+ - [x] Inventory every active root module and map imports, exports, tests and package payloads by correlated responsibility.
386
+ - [x] Classify overlapping scrape, crawl, cache, normalization, extraction, robots and frontier logic into canonical ownership groups.
387
+ - [x] Define the smallest safe target layout without introducing `src`, deep nesting or provider-specific coupling.
388
+ - [x] Preserve all current public exports through direct moves or compatibility shims before deleting any duplicate implementation.
389
+ - [x] Consolidate equivalent logic inside the owning domain while retaining the richest tested behavior from all historical implementations.
390
+ - [x] Update every import, export map, test fixture, documentation path and package `files` entry affected by the regrouping.
391
+ - [x] Add or improve English JSDoc section comments, bounded error catchers and deterministic tests for each consolidated context.
392
+ - [x] Remove only files proven redundant after import, test, package and historical-feature audits; record deferred legacy surfaces explicitly.
393
+ - [x] Run the complete engine, web, format, package, dependency and security gates after the reorganization.
394
+ - [x] Update release metadata and create `v1.8.8` only after the final diff, package contents and compatibility surface are verified.
395
+
396
+ ### TypeScript migration and multi target release 1.8.9
397
+
398
+ #### Group 1: baseline and active engine conversion
399
+
400
+ - [x] Consult the current date and record the TypeScript, Node.js, build and packaging versions used for the migration.
401
+ - [x] Inventory every active JavaScript file from `adapters` through `workflow`, excluding `docs` and `web`, with imports, exports, tests and package ownership.
402
+ - [x] Classify the active engine into correlated conversion groups: core, domain, memory, storage, runtime, queue, browser, scrape, API, protocol, workflow and delivery.
403
+ - [x] Define one root based TypeScript compiler configuration without creating `src` or committing generated `dist` output.
404
+ - [x] Convert the transport neutral public entry and one correlated group at a time while preserving function names and package exports.
405
+ - [x] Convert Node only adapters with explicit type boundaries for filesystem, HTTP, process, workers and optional Playwright.
406
+ - [x] Convert tests and helper scripts to TypeScript where they belong to the active engine contract, retaining deterministic execution.
407
+ - [ ] Add English JSDoc sections, explicit error catchers and strict type checks without introducing unnecessary external runtime dependencies.
408
+ - [x] Remove or archive only JavaScript files proven replaced after import graph, package and test verification.
409
+ - [x] Keep generated JavaScript, declaration files, maps and bundles outside version control and produce them only in CI or local build output.
410
+
411
+ #### Group 2: library, application and binary targets
412
+
413
+ - [x] Define target manifests for library, package, application, computer, desktop, browser, CLI, binary, internet and headless modes.
414
+ - [x] Define Android targets for APK and AAB through a caller owned mobile adapter without hardcoded credentials, hosts or signing keys.
415
+ - [x] Define iOS targets for IPA and app packaging through a caller owned mobile adapter without committing provisioning material.
416
+ - [x] Define desktop targets for macOS app, DMG and PKG, Windows EXE, MSI and MSIX, and Linux AppImage, DEB, RPM, Snap and Flatpak.
417
+ - [x] Define CLI and binary targets for Node, Bun or another caller selected runtime while keeping the library core authoritative.
418
+ - [x] Define browser extension targets for CRX, XPI and SAFARIEXTZ with shared browser neutral contracts and minimal permissions.
419
+ - [x] Define package targets for npm, GitHub Packages, Maven, NuGet, RubyGems, OCI, MCP, VSIX and other supported artifact surfaces.
420
+ - [x] Add reproducible target manifests, version derivation from the release tag, checksums, SBOM and provenance without committing generated artifacts.
421
+ - [x] Add caller configured workflows for target builds, with secrets only in repository or forge settings and no platform locked functions.
422
+ - [x] Run smoke tests for every target manifest and explicitly mark unavailable local toolchains as caller or CI responsibilities.
423
+
424
+ #### Group 3: web TypeScript architecture and release
425
+
426
+ - [x] Audit `web` folder by folder and file by file, preserving the root based layout and excluding generated `web/dist` output from version control.
427
+ - [x] Group related web components, routes, hooks, contexts, utilities and styles without creating `src`, `client` or duplicated mode trees.
428
+ - [x] Apply the same lowercase naming, English JSDoc, error boundary, design token and accessibility rules to the web surface.
429
+ - [x] Preserve base aware assets, responsive layouts, navigation, pages build and public marketing behavior during the regrouping.
430
+ - [x] Update TypeScript compiler, Vite, test, format and build configurations for the unified root architecture.
431
+ - [x] Run engine, web, package, security, target manifest and artifact exclusion gates after each completed group.
432
+ - [x] Update README, architecture notes, changelog and release metadata to `1.8.9` only after all implemented claims match code.
433
+ - [x] Create the validated `v1.8.9` tag and publish only the generated artifacts from CI to the six registries and configured target channels.
434
+
435
+ ### Missing native and release artifacts for 1.8.9
436
+
437
+ #### Group 4: shared desktop browser application
438
+
439
+ - [x] Research and document the supported desktop shell, browser engine, installer and signing toolchains for Windows, Linux and macOS.
440
+ - [x] Create a shared TypeScript desktop browser application boundary that reuses the existing web UI and library contracts without duplicating business logic.
441
+ - [ ] Add caller-configured desktop runtime settings for profile, storage, downloads, permissions, proxy and update channels.
442
+ - [x] Generate Windows EXE and MSI artifacts from the shared desktop source; retain portable directory and MSIX as deferred targets.
443
+ - [x] Generate Linux AppImage, Debian and RPM artifacts from the shared desktop source; retain Snap and Flatpak as deferred targets.
444
+ - [x] Generate the macOS DMG artifact from the shared desktop source; retain PKG, signing and notarization as caller-owned targets.
445
+ - [x] Add deterministic app metadata, icons, version derivation and checksums without committing generated packages.
446
+ - [ ] Add smoke checks that inspect each generated manifest and confirm the desktop artifact points to the compiled web and library entrypoints.
447
+ - [x] Attach every successfully generated desktop artifact to the existing GitHub release instead of creating an untracked local package.
448
+ - [x] Record unavailable native SDKs, signing certificates or store credentials as explicit workflow inputs rather than claiming an unsigned artifact is store-ready.
449
+
450
+ #### Group 5: mobile and release asset workflows
451
+
452
+ - [x] Define Android APK and AAB source boundaries and caller-owned signing configuration that reuse the shared application contracts.
453
+ - [x] Define iOS app and IPA source boundaries with caller-owned Xcode, provisioning profile, certificate and notarization inputs.
454
+ - [x] Add Android workflow jobs that generate debug artifacts when the Android toolchain is available and publish signed artifacts only when secrets exist.
455
+ - [x] Add iOS workflow jobs that run on macOS runners only when the required certificates and provisioning inputs are configured.
456
+ - [x] Add release asset naming, checksum, provenance and artifact retention rules for generated APK, AAB, EXE, MSI, DEB, RPM, AppImage, DMG, OXT and container targets; retain IPA, MSIX, Snap, Flatpak, PKG and VSIX as explicit unavailable or caller-owned targets.
457
+ - [x] Add a release-assets manifest listing generated, unavailable and caller-required artifacts so release notes never imply that a missing binary exists.
458
+ - [x] Run the desktop and mobile workflows from the tag-derived version without hardcoded version numbers or credentials.
459
+ - [x] Update release notes, README, target documentation and todo.md only after the generated asset list is verified against the actual GitHub release.
460
+
461
+ ### Native surface conversion and artifact normalization follow-up
462
+
463
+ - [x] Research Ionic, Capacitor, Tauri and other TS/TSX-to-mobile conversion paths and document the selected trade-offs.
464
+ - [x] Create explicit root-based `android/`, `ios/` and `browser/` surface boundaries without duplicating the library engine or web application logic.
465
+ - [x] Define Android TSX design and configuration inputs that consume the shared library contracts before conversion to APK and AAB.
466
+ - [x] Define iOS TSX design and configuration inputs that consume the shared library contracts before conversion to app and IPA.
467
+ - [x] Define the browser surface as the desktop browser contract and document why the implementation remains under `desktop/` or moves to a canonical browser boundary.
468
+ - [x] Add focused Android, iOS, browser and desktop workflows that convert the shared TypeScript and TSX source without hardcoded infrastructure or credentials.
469
+ - [x] Measure the Android bundle composition and reduce the APK size through release shrinking, ABI strategy, dependency review and asset optimization without removing required functionality.
470
+ - [x] Normalize release artifact names to lowercase Saddle names with dots and release versions, including `saddle.browser.1.8.10`, `saddle.apk.1.8.10.apk`, `saddle.aab.1.8.10.aab`, `saddle.container.1.8.10.tar.gz` and `saddle.extension.1.8.10.zip`.
471
+ - [x] Remove all `build_script_build*.exe`, `build-script-build.exe`, stale `saddle_desktop.exe`, duplicate `saddle-desktop.exe` and other non-user-facing build outputs from release assets and workflow collection paths.
472
+ - [x] Add release manifest validation that rejects helper binaries, underscore-based public artifact names and unexpected duplicate assets before upload.
473
+
474
+ ### Flat native build migration for 1.8.11
475
+
476
+ - [x] Audit every `src` directory and source path in `desktop/`, `android/`, `ios/`, `browser/` and root workflows; distinguish required vendor-generated internals from project-owned source.
477
+ - [x] Define the flat root mapping for the desktop Tauri build, keeping only generated `dist/` output out of version control and moving project-owned configuration and entrypoints to the `desktop/` root where feasible.
478
+ - [x] Define the flat root mapping for the Capacitor Android build, configuring Gradle source sets and project-owned entrypoints without maintaining a project-owned `app/src` source tree.
479
+ - [x] Define the flat root mapping for the Capacitor iOS build, documenting which Xcode and Capacitor generated paths remain toolchain-owned and which Saddle files belong at the `ios/` root.
480
+ - [x] Update `capacitor.config.ts`, desktop configuration, Gradle/Xcode settings and all native workflows to consume the flat mappings without hardcoded host, port, credentials or release versions.
481
+ - [x] Remove or relocate every project-owned `src` path that is not required by the native toolchain and add validation that prevents new forbidden source directories.
482
+ - [x] Preserve the TypeScript library-first boundary so native surfaces convert shared web output instead of duplicating engine logic.
483
+ - [x] Bump all active manifests and release metadata to 1.8.11 while preserving historical 1.8.10 references.
484
+ - [x] Run local checks and native CI builds, verify the release asset names and sizes, publish v1.8.11 and document any toolchain-owned paths that cannot be flattened safely.
485
+
486
+ ### Native identity and security hardening follow-up
487
+
488
+ - [x] Research OpenCode, ZCode and comparable cross-platform applications for icon, metadata, signing, notarization and release hardening patterns without copying their proprietary assets or code.
489
+ - [x] Design and generate a distinctive Saddle icon family for Tauri, Android, iOS, browser extension and web metadata, preserving the flat project-owned layout and excluding generated `src` trees.
490
+ - [x] Define caller-owned signing contracts for Windows Authenticode, macOS notarization, Android release signing and Apple provisioning without embedding private keys or pretending unsigned binaries are trusted.
491
+ - [x] Expand desktop artifact coverage for x64, ARM64, MSI, EXE, AppImage, DEB, RPM, DMG and `.app` where the runner and signing configuration support it.
492
+ - [x] Expand mobile and extension artifact coverage for Android APK/AAB, iOS IPA/app and browser extension packages, documenting unavailable targets instead of claiming nonexistent outputs.
493
+ - [x] Investigate `GHSA-wrw7-89jp-8q8g` against the complete dependency graph, lockfiles and transitive Capacitor/Tauri surfaces; upgrade, override or isolate the vulnerable path when a compatible fix exists.
494
+ - [x] Add an aggressive security workflow combining dependency review, npm audit, OSV or equivalent advisory ingestion, CodeQL, secret scanning, SBOM generation, artifact scanning and fail-closed severity policy.
495
+ - [x] Update all application and package workflows to derive versions from release tags, use repository secrets for signing and registry credentials, upload SARIF or equivalent findings, and keep security evidence with the release.
496
+ - [ ] Run the full local and CI security/native gates, document any residual caller-owned signing or unsupported architecture, and prepare the next 1.8.11 release update only after validation.
497
+
498
+ ### Branch and signing distribution follow-up
499
+
500
+ - [x] Inventory all local and remote branches, preserve their commits through tags or reachable history, and retain only `main` as the active remote branch without rewriting commit history.
501
+ - [x] Research how open source projects distribute Windows, macOS, Android and iOS artifacts when they do not own platform signing certificates, distinguishing self-signed test keys, public release signing, notarization, package-manager trust and user-side installation.
502
+ - [x] Document legitimate certificate acquisition paths, costs, identity requirements, renewal responsibilities and the exact GitHub Actions secret contracts for each platform.
503
+ - [x] Add an explicit unsigned/test-build mode and release manifest status so workflows never imply that an unsigned artifact is trusted or malware-free.
504
+ - [x] Decide whether the next immutable release must be `1.8.12`, because the published `v1.8.11` tag cannot safely be overwritten with the new hardening commits.
505
+
506
+ ### Binary signing research for 1.8.12
507
+
508
+ - [x] Compare Microsoft's official Authenticode, SmartScreen, Trusted Signing, MSIX and Store guidance.
509
+ - [x] Compare Apple Developer ID, Gatekeeper, hardened runtime, notarization and App Store distribution.
510
+ - [x] Compare Android APK signing, Play App Signing, upload keys and direct APK distribution.
511
+ - [x] Compare iOS distribution certificates, provisioning profiles, App Store Connect and ad hoc builds.
512
+ - [x] Inspect SignPath Foundation eligibility, trust model, HSM custody and open-source application process.
513
+ - [x] Inspect Azure Artifact Signing pricing, regional availability, identity validation and OIDC integration.
514
+ - [x] Inspect traditional OV and EV certificate requirements, renewal, timestamping and SmartScreen reputation.
515
+ - [x] Inspect Microsoft Store MSIX re-signing and package certification requirements.
516
+ - [x] Inspect WinGet manifests, package provenance and whether a package manager changes binary trust.
517
+ - [x] Inspect GitHub Actions artifact attestations, provenance and SBOM limits compared with Authenticode.
518
+ - [x] Inspect Sigstore Cosign, Fulcio, Rekor and whether Windows SmartScreen accepts their signatures.
519
+ - [x] Inspect minisign, signify, OpenPGP, GPG and SSH signatures as integrity mechanisms rather than platform trust.
520
+ - [x] Inspect osslsigncode and native SignTool capabilities for Authenticode signing.
521
+ - [x] Inspect jsign, apksigner, jarsigner, codesign and notarytool as platform tooling boundaries.
522
+ - [x] Inspect Tauri, Electron, Wails, Neutralino, Flutter and Qt release signing guidance.
523
+ - [x] Inspect OpenCode, Zed, VS Code, VSCodium, Code - OSS and other open-source IDE release workflows.
524
+ - [x] Inspect RustDesk, KeePassXC, Audacity, OBS Studio and Blender signing/distribution practices.
525
+ - [x] Inspect GitHub Desktop, Chromium, Firefox and other large open-source desktop release models.
526
+ - [x] Inspect open-source projects using SignPath or equivalent community certificate programs.
527
+ - [x] Inspect free CI signing services and distinguish free infrastructure from free identity certificates.
528
+ - [x] Search Stack Overflow for self-signed, SmartScreen, Authenticode, timestamp and reputation questions.
529
+ - [x] Search Reddit for real-world open-source code-signing costs and validate claims against official sources.
530
+ - [x] Search X or public mirrors for signing anecdotes and reject claims without reproducible evidence.
531
+ - [x] Search academic papers on software signing, trusted distribution, reproducible builds and supply-chain provenance.
532
+ - [x] Search the in-toto, SLSA and Sigstore specifications for provenance guarantees that complement signatures.
533
+ - [x] Evaluate whether reproducible builds reduce reputation warnings or only improve independent verification.
534
+ - [x] Evaluate whether timestamping preserves signature validity after certificate expiration.
535
+ - [x] Evaluate whether certificate pinning, installer metadata, icons or version resources affect SmartScreen trust.
536
+ - [x] Evaluate whether Authenticode signing of the installer also requires signing embedded PE files.
537
+ - [x] Evaluate whether MSIX, AppX, MSI, NSIS, EXE, DMG, PKG, AppImage and DEB have different trust semantics.
538
+ - [x] Evaluate whether package-manager verification can replace platform signing for public downloads.
539
+ - [x] Evaluate self-signed development certificates and safe enterprise trust deployment boundaries.
540
+ - [x] Evaluate malware, impersonation and supply-chain risks of “free certificate generator” projects.
541
+ - [x] Evaluate private-key custody models: local token, HSM, cloud KMS, OIDC and provider-hosted signing.
542
+ - [x] Evaluate release-only secret access, Dependabot/fork restrictions and environment approvals.
543
+ - [x] Evaluate exact cost, region, account identity, renewal and revocation requirements for each provider.
544
+ - [x] Produce a 1.8.12 decision matrix with verified, conditional, unsupported and unsafe routes.
545
+
546
+ ### 1.8.12 implementation work
547
+
548
+ - [ ] Add optional MSIX/AppX packaging and Store submission documentation.
549
+ - [ ] Add a provider adapter for SignPath or Azure Artifact Signing behind protected release secrets.
550
+ - [ ] Add nested PE signature verification and fail closed when a signing status claims provider trust.
551
+ - [ ] Add Sigstore/SLSA provenance and release manifest evidence without presenting it as Authenticode.
552
+ - [ ] Bump manifests, run gates, create the immutable `v1.8.12` tag and publish only after the release inputs are confirmed.
553
+
554
+ ### Expanded open-source IDE and artifact investigation
555
+
556
+ - [ ] Map public release workflows for VS Code, VSCodium, Code - OSS, Zed, OpenCode, Lapce, Helix, Neovim GUIs, Eclipse, IntelliJ Community, RustRover alternatives, Lite XL and Pulsar.
557
+ - [ ] Map public release workflows for RustDesk, KeePassXC, Audacity, OBS Studio, Blender, Krita, Godot and GitHub Desktop.
558
+ - [ ] Inspect each project's Windows artifact formats, publisher metadata, signatures, timestamp authorities and release manifests.
559
+ - [ ] Inspect each project's macOS signing, notarization, DMG/PKG/app packaging and Apple identity boundaries.
560
+ - [ ] Inspect each project's Linux packaging, repository signing and whether package-manager trust is separate from binary trust.
561
+ - [x] Inspect workflows for SignPath, Azure Artifact Signing, DigiCert ONE, Keyfactor, SSL.com, GaraSign, SignServer and cloud KMS.
562
+ - [x] Inspect public certificates and signatures only as metadata, never copy or reuse a third-party private key or identity.
563
+ - [ ] Compare PE Authenticode tables, signer chains, timestamps, catalog signatures and embedded binary signatures on representative public releases.
564
+ - [ ] Compare MSIX/AppX identity, publisher subject, package identity name and Store re-signing behavior on representative public releases.
565
+ - [ ] Compare NSIS, MSI, DMG, PKG, AppImage, DEB and RPM metadata with platform trust behavior.
566
+ - [ ] Investigate whether public package managers provide publisher verification, checksum verification or only transport/discovery.
567
+ - [x] Investigate “free certificate” claims with provider terms, certificate chain verification and revocation status.
568
+ - [x] Investigate test certificates, enterprise roots, CI ephemeral keys and safe development-only workflows.
569
+ - [x] Investigate whether any legitimate provider offers free signing to established open-source projects beyond SignPath Foundation.
570
+ - [x] Reject certificate scraping, identity reuse, stolen keys, reputation farming, download inflation and SmartScreen bypass claims.
571
+ - [x] Add verified findings and an updated 1.8.12 route classification to the research report.
572
+
573
+ ### SignPath Foundation application
574
+
575
+ - [ ] Open the official SignPath Foundation application and select GitHub Actions as the Saddle CI/CD integration.
576
+ - [ ] Prepare public project fields: project name, repository URL, homepage, open-source license, release workflow and public build provenance.
577
+ - [ ] Confirm the application does not require private keys or credentials to be pasted into the form.
578
+ - [ ] Stop before entering the user's personal email or submitting the application until the user takes over the browser or explicitly confirms the final form.
579
+ - [ ] Record the application status, policy identifiers and provider instructions without committing any secret to the repository.
580
+
581
+ ### Four atomic implementation batches
582
+
583
+ - [ ] Keep `/home/ubuntu/upload/README.md` as an objective scope reference; do not rewrite it as an execution script.
584
+ - [ ] Audit every license declaration, SPDX identifier, notice and package metadata before choosing a normalized project license.
585
+ - [ ] Record the license decision and its compatibility impact for npm, GitHub Packages, GHCR, Maven, NuGet and RubyGems.
586
+ - [x] Batch 1.8.12: complete signing and distribution readiness, expanded artifact metadata, and release documentation.
587
+ - [x] Batch 1.8.12: run tests, security gates, packaging checks and artifact-manifest validation before tagging.
588
+ - [x] Batch 1.8.13: select the next highest-value missing feature from the objective backlog after the 1.8.12 audit: independent release verification.
589
+ - [x] Batch 1.8.13: implement, test, document and prepare the release surface without publishing a tag before the SignPath form is confirmed.
590
+ - [x] Batch 1.8.14: select and implement the next objective-driven feature group without assuming a fixed implementation path: declarative cross-platform release matrix.
591
+ - [x] Batch 1.8.14: run the complete verification matrix and update release artifacts and notes.
592
+ - [x] Batch 1.8.15: select and implement the next objective-driven feature group based on observed gaps: bounded memory working set.
593
+ - [x] Batch 1.8.15: run the complete verification matrix and update release artifacts and notes.
594
+ - [ ] Create commits and release tags only after each batch has passed its gates and the user has completed the SignPath form when signing claims depend on it.
595
+
596
+ ### License and document consolidation
597
+
598
+ - [x] Apply the confirmed policy A: GPL-3.0-only and open source.
599
+ - [x] Keep the scope README unchanged and treat it as an objective reference rather than a deterministic file plan.
600
+ - [x] Map every root and `docs` legal document, including extensionless files and `.md`/`.txt` variants.
601
+ - [x] Compare duplicate privacy, terms, conduct, copyright, notice, license and README documents before removing any copy.
602
+ - [x] Select one canonical root document for each legal policy and update internal links without leaving ambiguous duplicates.
603
+ - [x] Replace proprietary view-only license text with the official unmodified GPL-3.0 text in the canonical `LICENSE` file.
604
+ - [x] Align package manifests with `GPL-3.0-only` and remove redundant license copies after preserving required package references.
605
+ - [x] Add a project-specific copyright and license notice without modifying the official GPL text.
606
+ - [x] Verify repository-wide license references, package metadata, release notes and SignPath documentation after consolidation.
607
+
608
+ ### Commit authorization
609
+
610
+ - [ ] Create the authorized consolidation commit without creating a tag or release.
611
+ - [ ] Keep the SignPath form, signing provider approval and release tags pending for a later version.
612
+
613
+ ### Objective driven batches 1.8.16 to 1.8.20
614
+
615
+ - [x] Read the scope README as a non-deterministic objective reference and preserve it unchanged.
616
+ - [x] Audit current engine gaps before selecting each feature; do not precommit to a file path or implementation recipe.
617
+ - [x] Batch 1.8.16: implement the highest-value missing engine contract selected from the audit: paginated S3-compatible listing.
618
+ - [x] Batch 1.8.16: add focused tests, documentation and verification evidence.
619
+ - [x] Batch 1.8.17: implement the next objective-driven feature after 1.8.16 is verified: bounded recursive sitemap traversal.
620
+ - [x] Batch 1.8.17: add focused tests, documentation and verification evidence.
621
+ - [x] Batch 1.8.18: implement the next objective-driven feature after 1.8.17 is verified: bounded and exportable browser action recording.
622
+ - [x] Batch 1.8.18: add focused tests, documentation and verification evidence.
623
+ - [x] Batch 1.8.19: implement the next objective-driven feature after 1.8.18 is verified: strict workflow inputs and deterministic trigger matching.
624
+ - [x] Batch 1.8.19: add focused tests, documentation and verification evidence.
625
+ - [x] Batch 1.8.20: implement the next objective-driven feature after 1.8.19 is verified: cross-runtime capability report.
626
+ - [x] Batch 1.8.20: run the complete local verification matrix and record release readiness.
627
+ - [ ] Wait for the user's explicit notice before committing or tagging the five new batches.
628
+
629
+ ### Version 1.8.12 commit and 1.8.21 research
630
+
631
+ - [x] Audit every active version identifier and release-facing manifest before committing 1.8.12.
632
+ - [x] Create and push the authorized 1.8.12 commit without changing immutable tag `v1.8.11`.
633
+ - [x] Define a comparable-repository selection rubric for storage, browser, scraper, workflow, memory, packaging and cross-runtime features.
634
+ - [x] Research up to 60 public repositories with working implementations and preserve URLs, license, activity and feature evidence.
635
+ - [x] Compare implementation patterns against Saddle's root-first, caller-owned and transport-neutral architecture.
636
+ - [x] Select only implementable, non-infringing gaps for 1.8.21 and document rejected patterns with reasons.
637
+ - [x] Implement and verify the selected 1.8.21 features before any 1.8.21 tag or release: structured extraction with provenance and bounds, browser context budgeting, workflow cancellation with caller compensation, and deterministic artifact retention.
638
+
639
+ ### Release note and version policy
640
+
641
+ - [x] Keep the historical 1.8.12 release notes intact while bumping active code and manifests to `1.8.13`.
642
+ - [x] Add or update the canonical 1.8.12 release notes with generated artifact contracts and actual signing status.
643
+ - [x] Keep the uploaded README and SKILL as non-deterministic scope and architecture references; do not rewrite them as an execution script.
644
+ - [x] Complete the 60-repository code and feature analysis, then select independent implementation gaps for 1.8.21.
645
+
646
+ ### Pending releases after signing configuration
647
+
648
+ - [x] Audit existing remote tags and releases before creating any immutable release reference.
649
+ - [x] Confirm the exact missing release sequence and ensure each tag points to a validated commit without rewriting historical tags.
650
+ - [x] Prepare release notes and artifact manifests with `unsigned`, `ci-test-key` or `caller-owned` signing status until the user configures a signing provider.
651
+ - [x] Run the complete local release gate immediately before creating each authorized tag or release.
652
+ - [x] Create only the confirmed missing tags and GitHub releases; do not publish unsigned binaries as trusted artifacts.
653
+ - [x] Verify each remote release, asset list, checksum manifest and corrected workflow rerun after creation.
654
+ - [x] Make release-time Android fallback behavior explicit: use a CI test key only when production signing secrets are absent, label the resulting manifest `ci-test-key`, and never imply store trust.
655
+ - [x] Resolve Android SDK tool paths explicitly for `apksigner` and keep AAB/APK verification fail-closed without assuming the tool is on `PATH`.
656
+ - [x] Diagnose the failed security workflow for v1.8.12 and v1.8.13; the original failures were unverified TruffleHog results, while corrected security runs passed.
657
+ - [x] Diagnose GHCR publication failures for v1.8.12 and v1.8.13; corrected image hardening and Buildx attestations produced a successful manual GHCR run.
658
+
659
+ ### Version 1.8.13 alignment and historical README consolidation
660
+
661
+ - [x] Audit every version-bearing file, package manifest, release note and workflow for stale `1.8.12` values.
662
+ - [x] Inspect all historical README versions and README-related commits using Git history only, preserving unique information and removing no valid content.
663
+ - [x] Consolidate the current README with the missing historical information in a clean, non-duplicated structure.
664
+ - [x] Verify NuGet metadata and publication workflow derive `1.8.13` from the release tag and package metadata.
665
+ - [x] Verify the six package publication workflows derive the same release version and do not rely on manually edited version constants.
666
+ - [x] Run the complete local and workflow validation matrix, then publish the corrective NuGet 1.8.13 package only if the remote metadata is still stale.
667
+
668
+ ### Historical workflow reconstruction
669
+
670
+ - [x] Enumerate all 169 commits with Git and inspect container/NuGet workflow changes through `git show`, `git rev-list` and related Git commands.
671
+ - [x] Identify the historical version source, package ordering and container download-validation steps without treating old release tags as mutable.
672
+ - [x] Confirm the intended NuGet target version as `1.8.14`; the earlier `1.8.3` mention was superseded by the explicit 1.8.14 request.
673
+ - [ ] Restore deterministic container-first package ordering and a real download/run validation for the published container.
674
+ - [ ] Align NuGet and container version derivation to the release tag and rerun both workflows after the correction.
675
+
676
+ ### Version 1.8.14
677
+
678
+ - [x] Recover the GitHub authorization flow through the authenticated browser without exposing or storing a token in the repository.
679
+ - [x] Set commit author identity to `iakadion` only when the authenticated user confirms that identity in Git configuration.
680
+ - [x] Update all active manifests, release notes, artifact examples and workflow metadata from `1.8.13` to `1.8.14`.
681
+ - [x] Run the complete local validation matrix and create the 1.8.14 commits without rewriting historical tags.
682
+ - [x] Create and verify the 1.8.14 release and its six registry workflows after authorization is available.
683
+ - [x] Diagnose the desktop artifact workflow still in progress for v1.8.14 and confirm all expected desktop assets are uploaded.
684
+ - [x] Diagnose the mobile artifact workflow failure for v1.8.14, rerun it with the corrected Android signing/tool-path behavior and record the actual result.
685
+ - [x] Replace the prepared 1.8.14 asset table with the remotely verified asset list and counts only after desktop/mobile verification completes.
686
+
687
+ ### Documentation location and repository owners
688
+
689
+ - [x] Move this checklist from the repository root to `docs/todo.md` and update every active reference.
690
+ - [x] Prevent future operational checklists from being created at the repository root.
691
+ - [x] Replace invalid GitHub owners in CODEOWNERS, READMEs and documentation with `@iakadion`, `@inathlan`, `@aasblor` and `@nasblor`; retain `@wenathlan` only as the repository organization and published package owner.
692
+ - [x] Validate that no active CODEOWNERS entry references legacy invalid owner handles.
693
+ - [x] Inspect the GitHub CODEOWNERS API error and retain only valid accounts that the repository accepts as owners with write access; the API now reports zero errors.
694
+
695
+ ### Planning releases 1.8.15 and 1.8.16
696
+
697
+ - [x] Read the supplied scope references in full, distinguish verified constraints from aspirational proposals, and preserve both files unchanged.
698
+ - [x] Map the active 1.8.14 engine, exports, tests, package surfaces and release rules against the realistic 1.8.15 opportunity set.
699
+ - [x] Create `docs/todo-1.8.15.md` with more than 400 individually checkable research, contract, implementation, test, documentation, validation and release steps.
700
+ - [ ] Define a public-repository research rubric and category quota for the 1.8.16 comparative analysis, targeting 100–300 relevant repositories without treating any external implementation as a copy source.
701
+ - [x] Create `docs/todo-1.8.16.md` with 600–900 individually checkable steps covering repository research, evidence capture, gap selection, implementation, tests, documentation, release and post-release verification.
702
+ - [x] Review both versioned plans for architectural constraints, security, feasibility, feature ownership and release-gate dependencies before beginning implementation.
703
+
704
+ ### Authorized execution order
705
+
706
+ - [ ] 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
+ - [ ] 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.
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.