diff --git a/CHANGES.md b/CHANGES.md index 4a9791f..18c0c75 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,7 +14,7 @@ place only: `instructions/dev/version-parts.md` § The candidate model. --- -## 9.0.0-beta.18 - 2026-10-09 - raw derive writes an Excel file's sheets as tab-separated files with a formula list; derived.md becomes the overview (#202) +## 9.0.0-beta.19 - 2026-10-09 - testfiles: real documents get short names and a source table, personal data is replaced by same-length filler, and the derive test now compares the sheet TSVs (#203) **Author:** Torben Nehmer @@ -48,6 +48,7 @@ place only: `instructions/dev/version-parts.md` § The candidate model. - Gitea-Wiki als generierter Spiegel von docs/: Konverter, Push-Skript, Workflows - raw pending names only the raw fetch pair as a bundle; a derived document is a folder - raw derive writes an Excel file's sheets as tab-separated files with a formula list; derived.md becomes the overview (#202) +- testfiles: real documents get short names and a source table, personal data is replaced by same-length filler, and the derive test now compares the sheet TSVs (#203) ### Tutorials: installation in English, and a first source to a first answer (#191) diff --git a/VERSION b/VERSION index f6c3260..44f00a6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -9.0.0-beta.18 +9.0.0-beta.19 diff --git a/testfiles/README.md b/testfiles/README.md index d475d37..10d73c0 100644 --- a/testfiles/README.md +++ b/testfiles/README.md @@ -15,8 +15,24 @@ public: metadata (PDF author and producer, Office author and company, mail headers, ZIP entry names); - nothing that was received in confidence. +The author names of a published work (a NIST publication, a statute) are part of the work, not a +real person in the sense of the second item. Links that address an account - unsubscribe, +settings, tracking - count as personal data even when no name is in them: they let anyone holding +the file reach the recipient's account at the sender. Replace such text with filler of the same +length, so a mail keeps its structure. + Removing a file later does not remove it from the history. +## Where the files come from + +| Files | Origin and basis for publishing them | +|-------|--------------------------------------| +| `pdf/nist-ai-rmf.pdf`, `pdf/nist-ssdf-genai.pdf` | NIST AI 600-1 and NIST SP 800-218A: works of the US federal government, public domain. The author in the PDF metadata is the author of the published work. | +| `pdf/ifg.pdf` | Informationsfreiheitsgesetz as published on gesetze-im-internet.de: an official work (§ 5 UrhG), free of copyright. | +| `pdf/einstein-dissertation.pdf` | Einstein's dissertation (1905), a public-domain work. The file is a scan from a web download; the digitizer's terms of use were not checked. Kept deliberately by the maintainer for the scanned pages (OCR coverage). | +| `mail/*` (GitHub, GOG and TLDR newsletters, each as `.eml` and `.msg`) | Mails received by the maintainer; promotional and informational content of the senders, released by the maintainer as test fixtures. Recipient address, names, host names and recipient-bound tokens are replaced by filler of the same length. | +| `office/*`, `zip/archive.zip` | Written by the maintainer for this purpose, with fictitious data; release confirmed by the maintainer. Author fields in the Office metadata are empty. The archive holds copies of six files of this directory (among them two mails) and is rebuilt from the sanitized copies. | + ## Layout | Folder | For | @@ -34,11 +50,14 @@ the right reason, but it is a nuisance to find. For each file, in a throwaway instance: `raw derive` succeeds; the original comes back byte for byte (a ZIP is unpacked and gets a `.md` beside its documents instead); a second run over the same -bytes gives the same text apart from `derived:`; and `raw accept` takes the folder. +bytes gives the same text apart from `derived:`; and `raw accept` takes the folder. The text +compared is every `.md` of the result plus the sheet files of a workbook (`.sheets/*.tsv`, +cells and formula lists). A file may carry a sidecar `.expect` (`offer.pdf.expect` for `offer.pdf`): one line per -piece of text that must appear in the derived text, empty lines and lines starting with `#` -ignored. Without one the file only has to derive, be stable and be accepted. A document that is +piece of text that must appear in the derived text - in any `.md` or sheet TSV of the result - +empty lines and lines starting with `#` ignored. A formula is named by its bare text, such as +`SUM(Sales!L6:L29)`, not by a tab-separated line. Without one the file only has to derive, be stable and be accepted. A document that is meant to be refused (encrypted, damaged) does not belong here; the synthetic tests cover refusals. ## Trying a file by hand diff --git a/testfiles/mail/github-outlook.msg b/testfiles/mail/github-outlook.msg new file mode 100644 index 0000000..f4c9c49 Binary files /dev/null and b/testfiles/mail/github-outlook.msg differ diff --git a/testfiles/mail/github-roundcube.eml b/testfiles/mail/github-roundcube.eml new file mode 100644 index 0000000..a24abd2 --- /dev/null +++ b/testfiles/mail/github-roundcube.eml @@ -0,0 +1,279 @@ +Return-Path: +Delivered-To: tester@mail.local +Received: from localhost (localhost [127.0.0.1]) + by relay1.mail.local (Postfix) with ESMTP id 1FBDF3C79 + for ; Fri, 9 Oct 2026 11:33:17 +0200 (CEST) +Authentication-Results: relay1.mail.local (amavis); dkim=pass (2048-bit key) + header.d=github.com +Received: from relay1.mail.local ([127.0.0.1]) + by localhost (relay1.mail.local [127.0.0.1]) (amavis, port 10026) with LMTP + id qUuEj-q26P2w for ; + Fri, 9 Oct 2026 11:33:15 +0200 (CEST) +Received: from gw1.mail.local (gw1.mail.local [192.0.2.12]) + by relay1.mail.local (Postfix) with ESMTPS id EDEF21322 + for ; Fri, 9 Oct 2026 11:33:15 +0200 (CEST) +Received: from gw1.mail.local (localhost [127.0.0.1]) + by gw1.mail.local (Proxmox) with ESMTP id D3AC64175D + for ; Fri, 09 Oct 2026 09:33:15 +0000 (UTC) +Received-SPF: pass (github.com: 192.30.252.200 is authorized to use 'noreply@github.com' in 'mfrom' identity (mechanism 'ip4:192.30.252.0/22' matched)) receiver=gw1.mail.local; identity=mailfrom; envelope-from="noreply@github.com"; helo=out-17.smtp.github.com; client-ip=192.30.252.200 +Received: from out-17.smtp.github.com (out-17.smtp.github.com [192.30.252.200]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) + (No client certificate requested) + by gw1.mail.local (Proxmox) with ESMTPS + for ; Fri, 09 Oct 2026 09:33:12 +0000 (UTC) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; + s=pf2026; t=1791538385; + bh=PUBUAPrF+j4smoQFdA2YzmimF06eina+b1lMnXVkNSk=; + h=Date:From:Reply-To:To:Cc:Subject:List-ID:List-Archive:List-Post: + From; + b=Glbp4FV+ONO7KVD75/XQI32S6nNkgMDQFHE88AhWhiFTBqjvc7Nw0brNmPpI7QiBH + 1XUObBokb3bzlcyCfF6GjccclB4rMdaJQN5sPHlhI5XgNdf1y/u1E+3TMBbegldNVi + fcyAbLCfs5YBofGXvZZRIka2l4OPLhmKTIHhhfnCFBmwfWJQ8DrxdXprVpsWTlss2A + e2D10Cntxq5yeMZM6/ogKBUBlkRcWM3tyqmBxoNYZxYwlQhCrGb851oM8mg5VWGOuW + SzD44XgjIoNFbYIGD1FalbbNNaPM9DD02b4sEiKf7KTxIgfIqCiUdCFmE/rmJbp8V7 + Z4W0FfTcgnejg== +Received: from github.com (hubbernetes-node-b6fc28b.va3-iad.github.net [10.48.68.62]) + by smtp.github.com (Postfix) with ESMTPA id 6DC44501B32 + for ; Fri, 9 Oct 2026 02:33:05 -0700 (PDT) +Date: Fri, 09 Oct 2026 02:33:05 -0700 +From: Boliang Zhang +Reply-To: microsoft/PowerToys +To: microsoft/PowerToys +Cc: Subscribed +Message-ID: +Subject: [microsoft/PowerToys] Pre-release v0.102.2814.0 - Preview + v0.102.2814.0 +Mime-Version: 1.0 +Content-Type: multipart/alternative; + boundary="--==_mimepart_6ac8b4d169f87_11712283000d9"; + charset=UTF-8 +Content-Transfer-Encoding: 7bit +Precedence: list +X-GitHub-Sender: LegendaryBlair +X-GitHub-Recipient: testermuster +X-GitHub-Reason: subscribed +List-ID: microsoft/PowerToys +List-Archive: https://github.com/microsoft/PowerToys +List-Post: +X-GitHub-Notify-Platform: newsies +X-Auto-Response-Suppress: All +destinations: tester@mail.local +X-GitHub-Recipient-Address: tester@mail.local + + +----==_mimepart_6ac8b4d169f87_11712283000d9 +Content-Type: text/plain; + charset=UTF-8 +Content-Transfer-Encoding: 7bit + + +# PowerToys Preview v0.102.2814.0 + +This is a preview-channel build for the **PowerToys 0.102 release train**, produced from the `stable` branch. It follows [v0.102.2803.0](https://github.com/microsoft/PowerToys/releases/tag/v0.102.2803.0); the notes below describe changes since that preview, not the complete 0.102 versus 0.101 changelog. This is not the final stable release. + +## Installer Hashes + +| Description | Filename | sha256 hash | +| --- | --- | --- | +| Per user - x64 | [PowerToysUserSetup-0.102.2814.0-x64.exe][ptUserX64] | 0E0BC3040FAFA85373410BB9221F869DCD6B355B1D95E1B56A11E94FC757D170 | +| Per user - ARM64 | [PowerToysUserSetup-0.102.2814.0-arm64.exe][ptUserArm64] | ECA42FE6646ACD8BE81E8BD3C03B46D6AD8CA8F8D04A080280A01209CD4E07A8 | +| Machine wide - x64 | [PowerToysSetup-0.102.2814.0-x64.exe][ptMachineX64] | 1AB750116360130C7A5B9B7DF1BD6795FD4BB3BF9538DADD64892F40D9DCDAD4 | +| Machine wide - ARM64 | [PowerToysSetup-0.102.2814.0-arm64.exe][ptMachineArm64] | DD37E0895EE43F306883F08B9ADB5367AFF5087C2A90E67C84D24FF345B72C2E | + +[ptUserX64]: https://github.com/microsoft/PowerToys/releases/download/v0.102.2814.0/PowerToysUserSetup-0.102.2814.0-x64.exe +[ptUserArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.102.2814.0/PowerToysUserSetup-0.102.2814.0-arm64.exe +[ptMachineX64]: https://github.com/microsoft/PowerToys/releases/download/v0.102.2814.0/PowerToysSetup-0.102.2814.0-x64.exe +[ptMachineArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.102.2814.0/PowerToysSetup-0.102.2814.0-arm64.exe + +## Highlights + +- **Mouse Button Lock**: Added opt-in left, right, and middle button locking so dragging and selection can continue without holding a button down. +- **Light Switch**: Added a CLI for status, theme switching, and schedule control, with JSON output for automation. +- **Settings**: Added a CLI to inspect module states and save enable/disable changes while PowerToys is closed. +- **Command Palette**: Fixed dragging packaged apps onto the dock and displaying their loaded icons. +- **Quick Accent**: Restored the horizontal scrollbar for overflowing character lists. +- **Shortcut Guide**: Improved startup and indexing, including fixes for rapid-reopen crashes and first-activation flicker. +- **Settings**: Replaced animated welcome-page GIFs with muted, looping H.264 videos and a fallback image. +- **ZoomIt**: Fixed DSC configuration to use actual registry-backed settings and notify the running utility of changes. + +## Command Palette + +- Fixed dragging packaged apps onto the dock so pinned entries launch correctly and their icons appear when loaded in [#51018](https://github.com/microsoft/PowerToys/pull/51018) by [@jiripolasek](https://github.com/jiripolasek) + +## Light Switch + +- Added a CLI to query status, set or toggle configured theme targets, and enable or disable schedules on the running Light Switch service, with JSON output for automation in [#50459](https://github.com/microsoft/PowerToys/pull/50459) + +## Mouse Button Lock + +- Added opt-in Mouse Button Lock for left, right, and middle buttons so dragging and selection can continue after a long press without continuously holding a button in [#49279](https://github.com/microsoft/PowerToys/pull/49279) by [@MuyuanMS](https://github.com/MuyuanMS) and [@owenpkent](https://github.com/owenpkent) + +## Quick Accent + +- Restored the horizontal scrollbar for overflowing character lists so Quick Accent shows the current position without clipping the scrollbar in [#50924](https://github.com/microsoft/PowerToys/pull/50924) by [@daverayment](https://github.com/daverayment) + +## Settings + +- Added a Settings CLI to inspect module states in text or JSON and save enable/disable changes while PowerToys is closed in [#50507](https://github.com/microsoft/PowerToys/pull/50507) by [@Copilot](https://github.com/Copilot) and [@MuyuanMS](https://github.com/MuyuanMS) +- Replaced animated welcome-page GIFs with muted, looping H.264 videos, with a PowerToys logo fallback when playback is unavailable in [#51057](https://github.com/microsoft/PowerToys/pull/51057) by [@Copilot](https://github.com/Copilot) + +## Shortcut Guide + +- Improved startup and shortcut indexing, preventing rapid-reopen crashes and initial overlay flicker while picking up PowerToys shortcut changes on the next launch in [#50609](https://github.com/microsoft/PowerToys/pull/50609) by [@daverayment](https://github.com/daverayment) + +## ZoomIt + +- Fixed the ZoomIt DSC resource to read and update actual registry-backed settings, detect configuration drift, and notify a running ZoomIt instance to reload changes in [#50551](https://github.com/microsoft/PowerToys/pull/50551) by [@Gijsreyn](https://github.com/Gijsreyn) + +## Development + +- Removed unused central package entries and documented retained dependency pins without changing the versions resolved by existing projects in [#50880](https://github.com/microsoft/PowerToys/pull/50880) by [@Copilot](https://github.com/Copilot) +- Moved local build logs into artifacts\logs so context-menu packaging no longer fails when trying to include open MSBuild log files in [#51056](https://github.com/microsoft/PowerToys/pull/51056) by [@Copilot](https://github.com/Copilot) +- Removed obsolete analyzer suppressions for retired template code to keep shared build diagnostics easier to maintain in [#51061](https://github.com/microsoft/PowerToys/pull/51061) by [@Copilot](https://github.com/Copilot) +- Promoted IL2081 trimming diagnostics to build errors in the shared AOT configuration while retaining explicit project-level exceptions in [#51073](https://github.com/microsoft/PowerToys/pull/51073) by [@Copilot](https://github.com/Copilot) +- Aligned main's checked-in release train with stable's existing 0.102 setting; the previous preview already used this release train in [#51111](https://github.com/microsoft/PowerToys/pull/51111) by [@Copilot](https://github.com/Copilot) and [@LegendaryBlair](https://github.com/LegendaryBlair) +- Enabled nullable reference checking across File Explorer preview and thumbnail projects and their unit tests, with annotations and guards that preserve existing preview behavior in [#51099](https://github.com/microsoft/PowerToys/pull/51099) by [@Copilot](https://github.com/Copilot) +- Updated PowerToys Run architecture documentation to point contributors to the current plugin-management and query-processing code in [#50519](https://github.com/microsoft/PowerToys/pull/50519) by [@ElenaGe216](https://github.com/ElenaGe216) and [@Gavin-Yau](https://github.com/Gavin-Yau) +- Enabled warnings-as-errors for the shared UI-test framework after resolving its analyzer warnings and documenting narrowly scoped exceptions in [#51085](https://github.com/microsoft/PowerToys/pull/51085) by [@Copilot](https://github.com/Copilot) +- Corrected developer documentation links so readers can reach the referenced Settings, PowerToys Run, and Group Policy files in [#51108](https://github.com/microsoft/PowerToys/pull/51108) by [@xThreeh](https://github.com/xThreeh) +- Updated Image Resizer observable models for WinRT and AOT compatibility and made the corresponding MVVM generator diagnostic fail the build while preserving settings serialization in [#51067](https://github.com/microsoft/PowerToys/pull/51067) by [@Copilot](https://github.com/Copilot) +- Corrected native build configuration warnings, removed an unused COM reference, and separated intermediate output folders without changing shipped filenames or output locations in [#51090](https://github.com/microsoft/PowerToys/pull/51090) by [@Copilot](https://github.com/Copilot) + +## Changes needing final review + +Two direct integration commits merged the reviewed main changes into stable without separate PRs: [2646ff0204b8](https://github.com/microsoft/PowerToys/commit/2646ff0204b82fb0ddcaf9810f1ef2841ec5009c) and [1fca166ef506](https://github.com/microsoft/PowerToys/commit/1fca166ef506f0f7391615879c13fa3769bdaafa). Both preserve the existing stable-only PowerDisplay diagnostics omission; no new branch-transition removals were identified. + + + + +-- +View it on GitHub: +https://github.com/microsoft/PowerToys/releases/tag/v0.102.2814.0 +You are receiving this because you are subscribed to this thread. + +Message ID: +----==_mimepart_6ac8b4d169f87_11712283000d9 +Content-Type: text/html; + charset=UTF-8 +Content-Transfer-Encoding: 7bit + +

+

Preview v0.102.2814.0

Repository: microsoft/PowerToys · Tag: v0.102.2814.0 · Commit: 1fca166 · Released by: LegendaryBlair

+ + +

PowerToys Preview v0.102.2814.0

+

This is a preview-channel build for the PowerToys 0.102 release train, produced from the stable branch. It follows v0.102.2803.0; the notes below describe changes since that preview, not the complete 0.102 versus 0.101 changelog. This is not the final stable release.

+

Installer Hashes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionFilenamesha256 hash
Per user - x64PowerToysUserSetup-0.102.2814.0-x64.exe0E0BC3040FAFA85373410BB9221F869DCD6B355B1D95E1B56A11E94FC757D170
Per user - ARM64PowerToysUserSetup-0.102.2814.0-arm64.exeECA42FE6646ACD8BE81E8BD3C03B46D6AD8CA8F8D04A080280A01209CD4E07A8
Machine wide - x64PowerToysSetup-0.102.2814.0-x64.exe1AB750116360130C7A5B9B7DF1BD6795FD4BB3BF9538DADD64892F40D9DCDAD4
Machine wide - ARM64PowerToysSetup-0.102.2814.0-arm64.exeDD37E0895EE43F306883F08B9ADB5367AFF5087C2A90E67C84D24FF345B72C2E
+

Highlights

+
    +
  • Mouse Button Lock: Added opt-in left, right, and middle button locking so dragging and selection can continue without holding a button down.
  • +
  • Light Switch: Added a CLI for status, theme switching, and schedule control, with JSON output for automation.
  • +
  • Settings: Added a CLI to inspect module states and save enable/disable changes while PowerToys is closed.
  • +
  • Command Palette: Fixed dragging packaged apps onto the dock and displaying their loaded icons.
  • +
  • Quick Accent: Restored the horizontal scrollbar for overflowing character lists.
  • +
  • Shortcut Guide: Improved startup and indexing, including fixes for rapid-reopen crashes and first-activation flicker.
  • +
  • Settings: Replaced animated welcome-page GIFs with muted, looping H.264 videos and a fallback image.
  • +
  • ZoomIt: Fixed DSC configuration to use actual registry-backed settings and notify the running utility of changes.
  • +
+

Command Palette

+
    +
  • Fixed dragging packaged apps onto the dock so pinned entries launch correctly and their icons appear when loaded in #51018 by @jiripolasek
  • +
+

Light Switch

+
    +
  • Added a CLI to query status, set or toggle configured theme targets, and enable or disable schedules on the running Light Switch service, with JSON output for automation in #50459
  • +
+

Mouse Button Lock

+
    +
  • Added opt-in Mouse Button Lock for left, right, and middle buttons so dragging and selection can continue after a long press without continuously holding a button in #49279 by @MuyuanMS and @owenpkent
  • +
+

Quick Accent

+
    +
  • Restored the horizontal scrollbar for overflowing character lists so Quick Accent shows the current position without clipping the scrollbar in #50924 by @daverayment
  • +
+

Settings

+
    +
  • Added a Settings CLI to inspect module states in text or JSON and save enable/disable changes while PowerToys is closed in #50507 by @Copilot and @MuyuanMS
  • +
  • Replaced animated welcome-page GIFs with muted, looping H.264 videos, with a PowerToys logo fallback when playback is unavailable in #51057 by @Copilot
  • +
+

Shortcut Guide

+
    +
  • Improved startup and shortcut indexing, preventing rapid-reopen crashes and initial overlay flicker while picking up PowerToys shortcut changes on the next launch in #50609 by @daverayment
  • +
+

ZoomIt

+
    +
  • Fixed the ZoomIt DSC resource to read and update actual registry-backed settings, detect configuration drift, and notify a running ZoomIt instance to reload changes in #50551 by @Gijsreyn
  • +
+

Development

+
    +
  • Removed unused central package entries and documented retained dependency pins without changing the versions resolved by existing projects in #50880 by @Copilot
  • +
  • Moved local build logs into artifacts\logs so context-menu packaging no longer fails when trying to include open MSBuild log files in #51056 by @Copilot
  • +
  • Removed obsolete analyzer suppressions for retired template code to keep shared build diagnostics easier to maintain in #51061 by @Copilot
  • +
  • Promoted IL2081 trimming diagnostics to build errors in the shared AOT configuration while retaining explicit project-level exceptions in #51073 by @Copilot
  • +
  • Aligned main's checked-in release train with stable's existing 0.102 setting; the previous preview already used this release train in #51111 by @Copilot and @LegendaryBlair
  • +
  • Enabled nullable reference checking across File Explorer preview and thumbnail projects and their unit tests, with annotations and guards that preserve existing preview behavior in #51099 by @Copilot
  • +
  • Updated PowerToys Run architecture documentation to point contributors to the current plugin-management and query-processing code in #50519 by @ElenaGe216 and @Gavin-Yau
  • +
  • Enabled warnings-as-errors for the shared UI-test framework after resolving its analyzer warnings and documenting narrowly scoped exceptions in #51085 by @Copilot
  • +
  • Corrected developer documentation links so readers can reach the referenced Settings, PowerToys Run, and Group Policy files in #51108 by @xThreeh
  • +
  • Updated Image Resizer observable models for WinRT and AOT compatibility and made the corresponding MVVM generator diagnostic fail the build while preserving settings serialization in #51067 by @Copilot
  • +
  • Corrected native build configuration warnings, removed an unused COM reference, and separated intermediate output folders without changing shipped filenames or output locations in #51090 by @Copilot
  • +
+

Changes needing final review

+

Two direct integration commits merged the reviewed main changes into stable without separate PRs: 2646ff0204b8 and 1fca166ef506. Both preserve the existing stable-only PowerDisplay diagnostics omission; no new branch-transition removals were identified.

+ + +—

This release has 9 assets:

  • GroupPolicyObjectFiles-0.102.2814.0.zip
  • PowerToysSetup-0.102.2814.0-arm64.exe
  • PowerToysSetup-0.102.2814.0-x64.exe
  • PowerToysUserSetup-0.102.2814.0-arm64.exe
  • PowerToysUserSetup-0.102.2814.0-x64.exe
  • symbols-arm64.zip
  • symbols-x64.zip
  • Source code (zip)
  • Source code (tar.gz)

Visit the release page to download them.

+ +

—
You are receiving this because you are watching this repository.
View it on GitHub or unsubscribe from all notifications for this repository.

+ +----==_mimepart_6ac8b4d169f87_11712283000d9-- + diff --git a/testfiles/mail/gog-outlook.msg b/testfiles/mail/gog-outlook.msg new file mode 100644 index 0000000..29db105 Binary files /dev/null and b/testfiles/mail/gog-outlook.msg differ diff --git a/testfiles/mail/gog-roundcube.eml b/testfiles/mail/gog-roundcube.eml new file mode 100644 index 0000000..141f87a --- /dev/null +++ b/testfiles/mail/gog-roundcube.eml @@ -0,0 +1,637 @@ +Return-Path: +Delivered-To: tester@mail.local +Received: from localhost (localhost [127.0.0.1]) + by relay1.mail.local (Postfix) with ESMTP id E7A713D1B + for ; Fri, 9 Oct 2026 12:10:57 +0200 (CEST) +Authentication-Results: relay1.mail.local (amavis); dkim=pass (2048-bit key) + header.d=smgrid.eu header.b="GW2zRKwt"; dkim=pass (2048-bit key) + header.d=email3.gog.com header.b="eFv0TUK7" +Received: from relay1.mail.local ([127.0.0.1]) + by localhost (relay1.mail.local [127.0.0.1]) (amavis, port 10026) with LMTP + id WujfPgrqimYD for ; + Fri, 9 Oct 2026 12:10:57 +0200 (CEST) +Received: from gw1.mail.local (gw1.mail.local [192.0.2.12]) + by relay1.mail.local (Postfix) with ESMTPS id 719511322 + for ; Fri, 9 Oct 2026 12:10:57 +0200 (CEST) +Received: from gw1.mail.local (localhost [127.0.0.1]) + by gw1.mail.local (Proxmox) with ESMTP id 5876C41760 + for ; Fri, 09 Oct 2026 10:10:57 +0000 (UTC) +Received-SPF: pass (emsgrid.com: Sender is authorized to use 'sm.#.3f5ada29ba85a3ae55-newsletter=email3.gog.com@emsgrid.com' in 'mfrom' identity (mechanism 'include:_spf.jupiter.salesmanago.pl' matched)) receiver=gw1.mail.local; identity=mailfrom; envelope-from="sm.#.3f5ada29ba85a3ae55-newsletter=email3.gog.com@emsgrid.com"; helo=amalthea.emgrid.pl; client-ip=89.25.191.77 +Received: from amalthea.emgrid.pl (amalthea.emgrid.pl [89.25.191.77]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) + (No client certificate requested) + by gw1.mail.local (Proxmox) with ESMTPS + for ; Fri, 09 Oct 2026 10:10:56 +0000 (UTC) +Received: from s12 (_local_) + by smgrid.pl (mta04) with ESMTP id 4j1N0n4lGxzJtb5T + for ; Fri, 09 Oct 2026 10:10:49 +0000 (UTC) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=smgrid.eu; + s=sm-trackid; t=1791540649; x=1791585649; + bh=gpu7ZaQ1XIQKWRN0rsfuWvDWyeFeTBF+wOJbmRwqrPE=; + h=Date:From:To:Subject:List-Unsubscribe:List-Unsubscribe-Post:Date: + From:To:Subject:List-Id:List-Unsubscribe:List-Unsubscribe-Post:CC; + b=GW2zRKwtIA4UQOhiuIUky5HB0uL1Psi4DZ2ftjurUdK8bOACUxDwYj8819gVPKbHi + SzVltCunE1hRyUfXil3qqFVuzO8SaKigpIfXECPuxzFSJJAQ+RGQeMwPVRNB43MCqd + oA7C094/1Q0sX5a+KAYAEtoaRXJ7HUK1plKyQrl2gAYlIdhC5/Hqb338nLePYf79iZ + DXw1XciZns9ZEjQXQhhTYSFNUxu1Gp2C9frzs1vDe6a8pyW61WfsMOw0TVuhLFGOpx + kovUlNK7QCg283mQ+ZpNCLpAM1vb8SadJs0SwbC7vzIOGPVmaqyusBefaSDqbIK9R7 + EFY0488QZRhDg== +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=email3.gog.com; + s=salesmanago; t=1791540649; x=1791585649; + bh=gpu7ZaQ1XIQKWRN0rsfuWvDWyeFeTBF+wOJbmRwqrPE=; + h=Date:From:To:Subject:List-Unsubscribe:List-Unsubscribe-Post:Date: + From:To:Subject:List-Id:List-Unsubscribe:List-Unsubscribe-Post:CC; + b=eFv0TUK7rrzF5OMLnsbYs0/Llxja3xiP57DsvZfbbh0e+fDY14eLLGaf6021fm+cP + wc5w//FRTjPV5Q4912AWJjNlLK1WdXibM6aLKQc6o13HipWX+DP5MsWPsmoxcDtxQc + ro5P+sPVEvkn06+xKj+NF03DCqPrH1ae5QZ0cWm3McLyb4L9YVsJZe+/LzoJXJicFY + GrXyk7GdIcGSr9t37r8f6N9vZf7qt/60Y7Wtth/EU0yDiUfWn3eI/aYGE96Ac/CURC + V8CHnicop8uUHBGj9GMuDo+FDk9FGy87+dSx4+0O1ms+Xs+mvT2b9+zr6Csfr96Vwd + l/nxTSL6BvW7w== +Date: Fri, 9 Oct 2026 12:10:49 +0200 (CEST) +From: "GOG.COM" +To: testermuster +Message-Id: <5404404998.40649541@emsgrid.com5404404998> +Subject: =?UTF-8?Q?Der_Albtraum_beginnt:_SILENT_HIL?= + =?UTF-8?Q?L:_Townfall_ist_jetzt_erh=C3=A4ltlich!?= +X-Abuse: Please report abuse here: abuse@manago.ai +X-Campaign: 000xx0x0-0x0x-0000-00xx-xx0xxxx00x0x +Feedback-ID: 000xx0x0-0x0x-0000-00xx-xx0xxxx00x0x:3f5ada29ba85a3ae:ManagoAI +List-Unsubscribe: , + +List-Unsubscribe-Post: List-Unsubscribe=One-Click +Precedence: bulk +X-Entity-Ref-ID: none +MIME-Version: 1.0 +Content-Type: multipart/alternative; + boundary="----=_Part_4135371_1142483364.1791540649541" + +------=_Part_4135371_1142483364.1791540649541 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 7bit + +Plain text version not available +------=_Part_4135371_1142483364.1791540649541 +Content-Type: text/html; charset=UTF-8 +Content-Transfer-Encoding: quoted-printable + +Der Albtraum beginnt: SILENT HILL: = +Townfall ist jetzt erh=C3=A4ltlich!= +
= +
Betritt St. Amelia,&n= +bsp;stelle dich dem, was geblieben ist, und&n= +bsp;finde heraus, warum alle verschwunden sind. &n= +bsp;‌ ‌ ‌ ‌ ‌ ‌ = +;‌ ‌ ‌ ‌ ‌ ‌  &= +nbsp;‌ ‌ ‌ ‌ ‌ ‌&nbs= +p;‌ ‌ ‌ ‌ ‌ ‌ &= +zwnj;   ‌ ‌ ‌ ‌ ‌&nb= +sp;‌ ‌ ‌ ‌ ‌ ‌ = +‌ ‌   ‌ ‌ ‌ ‌&n= +bsp;‌ ‌ ‌ ‌ ‌ ‌ = +;‌ ‌ ‌   ‌ ‌ ‌&= +nbsp;‌ ‌ ‌ ‌ ‌ ‌&nbs= +p;‌ ‌ ‌ ‌   ‌ ‌= + ‌ ‌ ‌ ‌ ‌ ‌&nb= +sp;‌ ‌ ‌ ‌ ‌   &zwnj= +; ‌ ‌ ‌ ‌ ‌ ‌&n= +bsp;‌ ‌ ‌ ‌ ‌ ‌ = +;  ‌ ‌ ‌ ‌ ‌ ‌&= +nbsp;‌ ‌ ‌ ‌ ‌ ‌&nbs= +p;‌   ‌ ‌ ‌ ‌ ‌= + ‌ ‌ ‌ ‌ ‌ ‌&nb= +sp;‌ ‌   ‌ ‌ ‌ &zwnj= +; ‌ ‌ ‌ ‌ ‌ ‌&n= +bsp;‌ ‌ ‌   ‌ ‌ &zwn= +j; ‌ ‌ ‌ ‌ ‌ ‌&= +nbsp;‌ ‌ ‌ ‌   ‌ &zw= +nj; ‌ ‌ ‌ ‌ ‌ ‌= + ‌ ‌ ‌ ‌ ‌   &z= +wnj; ‌ ‌ ‌ ‌ ‌ &zwnj= +; ‌ ‌ ‌ ‌ ‌ ‌&n= +bsp;  ‌ ‌ ‌ ‌ ‌ &zwn= +j; ‌ ‌ ‌ ‌ ‌ ‌&= +nbsp;‌   ‌ ‌ ‌ ‌ &zw= +nj; ‌ ‌ ‌ ‌ ‌ ‌= + ‌ ‌   ‌ ‌ ‌ &z= +wnj; ‌ ‌ ‌ ‌ ‌ &zwnj= +; ‌ ‌ ‌ 
<= +tbody>
= +
3D"GOG.com
= +
3D"Silent

ist jetzt = +erh=C3=A4ltlich. Und es ruft nach dir.

= +

WILLKOMMEN au= +f ST.  AMELIA, 1996

<= +table role=3Dpresentation border=3D0 cellpadding=3D0 cellspacing=3D0 width= +=3D"100%" style=3D"width:100%;">
3D"Tiled

=E2=80=8BEs ist 1996, du kommst in der abgelege= +nen, vom Nebel verschlungenen Inselstadt vor der K=C3=BCste Schottlands an.= + Erkunde die leeren Stra=C3=9Fen, verlassenen H=C3=A4user und verfallenden = +Wahrzeichen, w=C3=A4hrend Simon Ordell an einen Ort zur=C3=BCckkehrt, der u= +nheimlich vertraut wirkt.

<= +a target=3D_blank style=3D"display:block;width:100%;max-width:566px;" id=3D= +smlid_309 href=3D"https://gog.salesmanago.com/smrd.htm?url=3Dhttps%3A%2F%2F= +www.gog.com%2Fen%2Fgame%2Fsilent_hill_townfall%3Futm_source%3Dsalesmanago%2= +6utm_medium%3Demail%26utm_campaign%3D20261009_nl_SILENT_HILL_TOWNFALL_exclu= +sive_DE&track=3DXxxXXX00XXxxXxXXXXxxXXXXXXxxXXXXXXXXXxXxXXxXXXX0XXxXXx0= +XXX0XXXX0XXXxXXXxXXxXXXXXXXxXXxXXXXXxXXXxXXXXXXXXXXXxXXXXXXxxXx0xXXxxXX00XX= +XxXxXxXXxxxXXXXXxxxXXXXXXxXXX0XXXxxXXXXXxxXxXxXXxxXX0XXXXxx0XXXXxxXXXXXXXxX= +XXXXXXXXXXxXXxxXXXXXXxXXX00XXxxXxX0XXxxXXXXXXx">3D"Collage

D= +ie Stadt mag verlassen wirken, aber du bist alles andere als allein. Mit be= +grenzten Waffen und Werkzeugen bedeutet =C3=9Cberleben zu wissen, wann du d= +ich versteckst, wann du rennst und wann du k=C3=A4mpfst, wenn Schrecken aus= + der Stille auftauchen.

+=3D"Repeated
<= +tr>

Das gr=C3=B6=C3=9Fte R= +=C3=A4tsel der Stadt ist, was mit den Menschen passiert ist, die einst dort= + lebten. Folge den Spuren, die sie hinterlassen haben, l=C3=B6se storygetri= +ebene R=C3=A4tsel und finde heraus, warum du zur=C3=BCckgerufen wurdest.

= +

=E2= +=80=8BHole dir die De= +luxe Edition=E2=80=8B mit dem digitalen Artbook= +, dem Soundtrack und einem alternativen Outfit f=C3=BCr Simon und tauche no= +ch tiefer in die Welt des Spiels ein.

3D"Silent
= +
= +
<= +tr>
3D"Was

P= +robleme bei der Darstellung dieser Email? Klick bitte hier.<= +/p>

=E2=80=8B

Du erh=C3=A4ltst diese Email= +, weil sich deine Email-Adresse auf unserer Empf=C3=A4ngerliste befindet.&n= +bsp;Wenn du keine Emails mehr von uns erhalten m=C3=B6chtest, kannst du dic= +h = +hier abmelden.&nbs= +p;

=E2=80=8B

Diese Email dient ledi= +glich der Information und unterbreitet nicht das Angebot. Preise und Angebo= +te k=C3=B6nnen sich =C3=A4ndern. Weitere Informationen zu den einzelne= +n Angeboten finden sich auf GOG.COM. 

 = +

GOG.COM = +=C2=A9 GOG sp. z o.o., ul. Jagiello=C5=84ska 74, 03-301 Warschau, Polen. Alle anderen Marken si= +nd Eigentum ihrer jeweiligen Inhaber.

= + +------=_Part_4135371_1142483364.1791540649541-- + diff --git a/testfiles/mail/tldr-outlook.msg b/testfiles/mail/tldr-outlook.msg new file mode 100644 index 0000000..d6334d7 Binary files /dev/null and b/testfiles/mail/tldr-outlook.msg differ diff --git a/testfiles/mail/tldr-roundcube.eml b/testfiles/mail/tldr-roundcube.eml new file mode 100644 index 0000000..e4198e5 --- /dev/null +++ b/testfiles/mail/tldr-roundcube.eml @@ -0,0 +1,1400 @@ +Return-Path: <000000x00000000x-0x0000x0-0000-0000-0000-000x00x00000-000000@dailyupdate.tldrnewsletter.com> +Delivered-To: tester@mail.local +Received: from localhost (localhost [127.0.0.1]) + by relay1.mail.local (Postfix) with ESMTP id 4B3A33D1B + for ; Fri, 9 Oct 2026 12:12:50 +0200 (CEST) +Authentication-Results: relay1.mail.local (amavis); dkim=pass (1024-bit key) + header.d=tldrnewsletter.com header.b="iNeJEoFI"; dkim=pass (1024-bit key) + header.d=amazonses.com header.b="hatOc5VA" +Received: from relay1.mail.local ([127.0.0.1]) + by localhost (relay1.mail.local [127.0.0.1]) (amavis, port 10026) with LMTP + id WaXwor7Xq29b for ; + Fri, 9 Oct 2026 12:12:48 +0200 (CEST) +Received: from gw1.mail.local (gw1.mail.local [192.0.2.12]) + by relay1.mail.local (Postfix) with ESMTPS id C4FB91322 + for ; Fri, 9 Oct 2026 12:12:48 +0200 (CEST) +Received: from gw1.mail.local (localhost [127.0.0.1]) + by gw1.mail.local (Proxmox) with ESMTP id A9F2041760 + for ; Fri, 09 Oct 2026 10:12:48 +0000 (UTC) +Received-SPF: pass (dailyupdate.tldrnewsletter.com: 54.240.77.27 is authorized to use '010001a12026838a-8b2742b8-#-#-#-914b29c02105-#@dailyupdate.tldrnewsletter.com' in 'mfrom' identity (mechanism 'ip4:54.240.77.27' matched)) receiver=gw1.mail.local; identity=mailfrom; envelope-from="010001a12026838a-8b2742b8-#-#-#-914b29c02105-#@dailyupdate.tldrnewsletter.com"; helo=a77-27.smtp-out.amazonses.com; client-ip=54.240.77.27 +Received: from a77-27.smtp-out.amazonses.com (a77-27.smtp-out.amazonses.com [54.240.77.27]) + (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) + key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) + (No client certificate requested) + by gw1.mail.local (Proxmox) with ESMTPS + for ; Fri, 09 Oct 2026 10:12:45 +0000 (UTC) +DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; + s=4fjbpw2ycutwr4bnoiraulemncpkibbj; d=tldrnewsletter.com; + t=1791540757; + h=From:To:Subject:List-Unsubscribe:List-Unsubscribe-Post:MIME-Version:Date:Message-ID:Content-Type; + bh=reKuGdDr29RCDLzjsTvTTpwTXbg7WzxPwkIUtr1KaQQ=; + b=iNeJEoFINA+s30i47q+t2Lb91YwI+XMFovIYeiEFz6AzBpdB6T+FIZA3qfc5ywHG + Ecf7O95lP9iZQS1EFszSyxUvNWyEX84JRvCB/+QD5HaH2if8ONXCNaVc6szVuHzU/IH + R9LDqkKOloBg+PmqbwrUFUPLrJBb67rNKOdLUmHQ= +DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; + s=224i4yxa5dv7c2xz3womw6peuasteono; d=amazonses.com; t=1791540757; + h=From:To:Subject:List-Unsubscribe:List-Unsubscribe-Post:MIME-Version:Date:Message-ID:Content-Type:Feedback-ID; + bh=reKuGdDr29RCDLzjsTvTTpwTXbg7WzxPwkIUtr1KaQQ=; + b=hatOc5VATYl5hTEzu5Aktu1AsjQiJwBw+kDPoMxD+sehOzigqPZ3m4O92TA+dL5x + Z469pt/pHmRQ5SoCFxuC9g231UdWeqCTvruczaksSsGUDiV/ptIgQXVnZF9Zy8g7Jss + OxA9QuPol/Yl3/c5OLCs7u5FRT74eqQM5vaZm6Ng= +From: TLDR Product +To: tester@mail.local +Subject: Will agents have network effects? =?utf-8?Q?=F0=9F=8C=90=2C?= your + moat is dead =?utf-8?Q?=F0=9F=8F=B0=2C?= when AI agents shop for us + =?utf-8?Q?=F0=9F=9B=92?= +X-Entity-Ref-Id: 0x0000x0-xx00-000x-0000-x0000x00000x +X-EmailOctopus-Parent-Id: 0x000xx0-x0xx-00x0-00xx-x0x0xx0000x0 +X-EmailOctopus-Parent-Type-Id: campaign +X-EmailOctopus-List-Id: x0x00x00-0x00-00xx-0x00-0000x0000000 +X-EmailOctopus-List-Contact-Id: 00000xx0-0xxx-00x0-x00x-00xxx0x00x00 +X-EmailOctopus-Started-Preparing-At: 2026-10-09T10:00:49+00:00 +X-EmailOctopus-Sent-At: 2026-10-09T10:12:37+00:00 +X-EmailOctopus-Team-Id: 66987ef2-4f4c-11e9-a3c9-06b79b628af2 +X-EmailOctopus-Version: 5 +List-Unsubscribe: +List-Unsubscribe-Post: List-Unsubscribe=One-Click +X-EmailOctopus-Ses-Configuration-Set-Name: emailoctopus-a9f7b12f74f3c968d9408897fb35539c +MIME-Version: 1.0 +Date: Fri, 9 Oct 2026 10:12:37 +0000 +Message-ID: <000000x00000000x-0x0000x0-0000-0000-0000-000x00x00000-000000@email.amazonses.com> +Content-Type: multipart/alternative; boundary=LB8Q1ZSP +Feedback-ID: ::1.us-east-1.Dj5/7DYmgk+n1sSGGXSQSLIthSjNQ0MGtV5Dro1Tr8U=:AmazonSES +X-SES-Outgoing: 2026.10.09-54.240.77.27 + +--LB8Q1ZSP +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: quoted-printable + +While current AI agents act as standalone tools, future agents can +develo= +p network effects through acquisition and engagement +loops.=C2=A0= +=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2= +=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C= +=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80= +=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0= +=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2= +=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0= +=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2= +=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C= +=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80= +=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0= +=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2=A0=E2=80=8C=C2= +=A0 + + + Sign Up [1] |Advertise [2]|View Online [3]=20 + +=09=09TLDR = + + +=09=09TOGETHER WITH [Plaid] [4] + +TLDR PRODUCT MANAGEMENT 2026-10-= +09 + + FINANCIAL UNDERSTANDING CAN'T BE PROMPTED. IT HAS TO BE BUILT +(S= +PONSOR) [4]=20 + + The wheel needed roads. Electricity needed the grid. Eve= +ry leap +forward has needed infrastructure underneath it. AI in finance is= + no +different. + +Plaid [4] is the infrastructure that makes permission= +ed financial data +not just accessible, but understood. A paycheck read as= + income, or an +irregular pattern read as potential fraud.=C2=A0 + +That= + understanding can't be prompted. It has to be built. Plaid's +proprietary= + models are built to specifically understand financial +behavior at scale.= + + +Meet the infrastructure for AI innovation in finance. [4] + += +=F0=9F=93=B1=20 + +NEWS & TRENDS + + WILL AGENTS HAVE NETWORK EFFECTS? (1= +1 MINUTE READ) [5]=20 + + While current AI agents act as standalone tools, = +future agents can +develop network effects through acquisition and engagem= +ent loops. By +turning artifacts into viral objects and building centraliz= +ed identity +layers, agent platforms could create winner-take-all dynamics= +.=20 + + YOUR MOAT IS DEAD. ANYONE CAN REBUILD YOUR PRODUCT (13 MINUTE READ= +) +[6]=20 + + Falling code generation costs and AI agent reimplementations= + have +eliminated traditional software feature and UI moats. Defensibility= + +has shifted toward accountability, proprietary data, regulatory trust,= + +hardware coupling, and customer outcomes, forcing companies to focus +o= +n operational moats and server-side APIs.=20 + +=F0=9F=9A=80=20 + +OPINIONS= + & TUTORIALS + + WHY AGENT-WRITTEN CODE NEEDS PRODUCT VERIFICATION (6 MIN= +UTE READ) [7] + + + When AI agents write both code and tests, they encod= +e identical +misunderstandings, producing green builds that fail real user= + needs. +Teams must establish independent verification based on user +req= +uirements. Lower maintenance costs and faster repair cycles make +comprehe= +nsive end-to-end product verification feasible.=20 + + TESLER'S LAW: COMPLE= +XITY MOVED TO A DIFFERENT PART OF THE JOURNEY (10 +MINUTE READ) [8]=20 + += + Generative AI interfaces do not eliminate software complexity - they +shi= +ft it to users, developers, and reviewers. While AI automates +routine tas= +ks, it adds hidden burdens in prompt specification and +verification. Desi= +gners must address this by creating clear +constraints and verification wo= +rkflows.=20 + +=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20 + +RESOURCES & TOOLS += + + 4 FREE DATADOG RESOURCES TO HELP YOU UNDERSTAND YOUR USERS (SPONSOR) += +[9]=20 + + Juggling tools to try and get a sense of your UX? This PM Toolki= +t [9] +by Datadog shows you how to extract real meaning from product data = +and +build stronger pre-launch hypotheses. Learn how to visually replay += +user sessions to uncover friction and prioritize updates that move the +ne= +edle. Get the toolkit [9]=20 + + PRODUCT DEFINITION (8 MINUTE READ) [10] = + + + Product thinking and "Product Definition" are essential in the AI += +era, where agents execute code rapidly given clear direction. Formerly +kn= +own as feature specification, Product Definition shapes requirements +and = +context into actionable artifacts like prototypes and PRDs. This +competen= +cy evolves from tactical execution to building systems that +align teams a= +nd AI agents.=20 + + WHEN DOES ONBOARDING BECOME A PRODUCT PROBLEM? (8 MINU= +TE READ) [11]=20 + + Customer onboarding friction often signals a hidden pr= +oduct issue. +Product managers should address this by creating a repeatabl= +e "Golden +Path," mapping user tasks from purchase to production to replac= +e +manual steps with automated features. Tracking time to first value and= + +completion rates reduces delays and builds long-term product value.=20 += + +=F0=9F=8E=81=20 + +MISCELLANEOUS + + PRODUCT MANAGER, APPLIED AI AT TL= +DR ($225K BASE + $60K BONUS, FULLY +REMOTE) [12]=20 + + TLDR is hiring its= + first PM to help build the agent-first operating +layer used across the c= +ompany. We're looking for a builder who has +shipped real products/systems= + with LLMs. Click here to learn more +[12].=20 + + INTRODUCING: SPOTIFY TE= +CHNOLOGY. PROVEN AT SPOTIFY, NOW YOURS (6 +MINUTE READ) [13]=20 + + Spotif= +y Technology is a unified suite of developer and media tools +including Po= +rtal, Confidence, Xirp, and Spotify for Backstage. Tested +across Spotify'= +s internal engineering teams to cover the entire +development lifecycle, t= +he offering aims to help external R&D +organizations balance team autonomy= + with architectural alignment.=20 + + HOW SNYK TURNED AN INTERNAL SUPPORT A= +GENT INTO A CUSTOMER FEATURE (8 +MINUTE READ) [14]=20 + + Snyk turned its = +internal AI support agent, Snyk Assist, into a +customer-facing feature. T= +he agent answers user queries within +permission boundaries, utilizing off= +line and online evaluations. Since +launch, it has resolved over 85% of su= +pport sessions without needing a +ticket.=20 + +=E2=9A=A1=20 + +QUICK LINK= +S + + EARN YOUR MBA 100% ONLINE FROM THE OHIO STATE UNIVERSITY (SPONSOR)= + +[15]=20 + + Advance your career with Ohio State's online MBA for Working= + +Professionals-our nationally ranked part-time MBA with the flexibility= + +of an online program that can be completed from anywhere. + +EXPLORE T= +HE PROGRAM [15] + + THE MOST COMMON REASONS WHY AI PILOTS FAIL, EVEN AT T= +HE 'BEST' +COMPANIES (1 MINUTE READ) [16]=20 + + This thread outlines thir= +teen common pitfalls that cause enterprise +AI pilots to fail, such as aut= +omating isolated steps instead of full +workflows, lacking baseline metric= +s, ignoring edge cases, and failing +to engage legal and security teams ea= +rly.=20 + + WHAT HAPPENS WHEN AI AGENTS SHOP FOR US (3 MINUTE READ) [17] = + + + As AI shopping agents use wallets to browse catalogs and complete += +checkouts automatically, online merchants risk losing direct customer +con= +tact, while users must retain final purchase approval to prevent +accident= +al transactions.=20 + +Love TLDR? Tell your friends and get rewards! + + = +Share your referral link below with friends to get free TLDR swag!=20 + + h= +ttps://refer.tldr.tech/x00000x0/9 [18]=20 + +=09=09 Track your referrals he= +re. [19]=20 + +Want to advertise in TLDR? =F0=9F=93=B0 + + If your compan= +y is interested in reaching an audience of product +management professiona= +ls and decision makers, you may want to +ADVERTISE WITH US [20].=20 + +Wan= +t to work at TLDR? =F0=9F=92=BC + + APPLY HERE [21], CREATE YOUR OWN ROLE= + [22] or send a friend's resume +to jobs@tldr.tech and get $1k if we hire = +them! TLDR is one of INC.'S +BEST BOOTSTRAPPED BUSINESSES [23] of 2025. = + + + If you have any comments or feedback, just respond to this email! = + + +Thanks for reading,=20 +Ellen Le [24]=20 + + Manage your subscriptions= + [25] to our other newsletters on tech, +startups, and programming. Or if = +TLDR Product Management isn't for +you, please unsubscribe [26].=20 + + = + + +Links: +------ +[1] https://tldr.tech/product?utm_source=3Dtldrprod= +uct +[2] https://advertise.tldr.tech/?utm_source=3Dtldrproduct&utm_medium= +=3Dnewsletter&utm_campaign=3Dadvertisetopnav +[3] https://a.tldrnewsletter= +.com/web-version?ep=3D1&lc=3D00000xx0-0xxx-00x0-x00x-00xxx0x00x00&p=3D0x000= +xx0-x0xx-00x0-00xx-x0x0xx0000x0&pt=3Dcampaign&t=3D1791540757&s=3Dx0xxx000x0= +0x000x0000000xx0000x0000x0x0x0000x0x0x000xx0xxx000xx00 +[4] https://plaid.= +com/intelligent-finance?utm_source=3DTLDRProduct&utm_medium=3DPaidNewslette= +r&utm_campaign=3DTLDRProduct_Paid_Newsletter_Ad_Buy&utm_content=3DIntellige= +ntFinanceLP +[5] https://andrewchen.substack.com/p/will-agents-have-networ= +k-effects?utm_source=3Dtldrproduct +[6] https://www.techfounderstack.com/p= +/your-moat-is-dead-anyone-can-rebuild?utm_source=3Dtldrproduct +[7] https:= +//stack72.dev/why-agent-written-code-needs-product-verification/?utm_source= +=3Dtldrproduct +[8] https://links.tldrnewsletter.com/j1OCPG +[9] https://= +www.datadoghq.com/resources/product-manager-toolkit/?utm_source=3Dtldrnewsl= +etter&utm_medium=3Dnewsletter&utm_campaign=3Ddg-content-toolkit-2026product= +manager-dem-productanalytics-ww-en-701vy00000meylhyak-tldrpm-secondary-1009= +26 +[10] https://blog.ravi-mehta.com/p/product-definition?utm_source=3Dtld= +rproduct +[11] https://amycmitchell.substack.com/p/product-management-deve= +loper-experience?utm_source=3Dtldrproduct +[12] https://jobs.ashbyhq.com/t= +ldr.tech/897f4391-66ab-44ca-a8eb-65dd9809200d?utm_source=3Dtldr&sp=3Dxxx0x0= +XX00xxxxXxXXXXXXXx +[13] https://engineering.atspotify.com/2026/10/introdu= +cing-spotify-technology-proven-at-spotify-now-yours?utm_source=3Dtldrproduc= +t +[14] https://www.langchain.com/blog/how-snyk-turned-an-internal-support= +-agent-into-a-customer-feature?utm_source=3Dtldrproduct +[15] https://onli= +ne.osu.edu/masters-degree/master-business-administration-working-profession= +als/?lead_source=3DResponse-Solutions&utm_campaign=3Doaa_oso_wpmba-student-= +recruitment_fy27_tldr_product&channel=3DOther-Paid&utm_source=3D3rd-Party-D= +isplay&utm_medium=3DENewsletter +[16] https://threadreaderapp.com/thread/2= +107530654741348354.html?utm_source=3Dtldrproduct +[17] https://flaviocopes= +.com/agent-checkout/?utm_source=3Dtldrproduct +[18] https://refer.tldr.tec= +h/x00000x0/9 +[19] https://hub.sparklp.co/xxx_xxx00x00xxxx/9 +[20] https:= +//advertise.tldr.tech/?utm_source=3Dtldrproduct&utm_medium=3Dnewsletter&utm= +_campaign=3Dadvertisecta +[21] https://jobs.ashbyhq.com/tldr.tech +[22] h= +ttps://jobs.ashbyhq.com/tldr.tech/c227b917-a6a4-40ce-8950-d3e165357871 +[2= +3] https://www.linkedin.com/feed/update/urn:li:activity:7401699691039830016= +/ +[24] https://www.linkedin.com/in/ellenle/ +[25] https://tldr.tech/prod= +uct/manage?email=3Dtester%40mail.local +[26] https://a.tldrnewsletter.com/= +unsubscribe?ep=3D1&l=3Dx0x00x00-0x00-00xx-0x00-0000x0000000&lc=3D00000xx0-0= +xxx-00x0-x00x-00xxx0x00x00&p=3D0x000xx0-x0xx-00x0-00xx-x0x0xx0000x0&pt=3Dca= +mpaign&pv=3D5&spa=3D1791540049&t=3D1791540757&s=3Dxx000000000000x000000x000= +x0xxx00x000x000000xx0x0000000x00x00xx0x +--LB8Q1ZSP +Content-Type: text/html; charset=utf-8 +Content-Transfer-Encoding: quoted-printable + +TLDR Product + + + +
While curr= +ent AI agents act as standalone tools, future agents can develop network ef= +fects through acquisition and engagement loops. =E2=80=8C =E2=80= +=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80= +=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80= +=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80= +=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80= +=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C  = +=E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C = +=E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C = +=E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C = +=E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C = +=E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C =E2=80=8C = +=E2=80=8C 
+ +
+
+
+ +
+ +
+ + +
+ +
+ + + +
+ +
+ +
+ +
TLDR +
+
+ +
+ + + + +
Together With +3D"Plaid"
+
+ +

TLDR Product Management 2026-10-09

+
+
+ +
+
+ + + + Financial understanding can= +'t be prompted. It has to be built (Sponsor) + + +
+
+ + The wheel needed roads. Electricity nee= +ded the grid. Every leap forward has needed infrastructure underneath it. A= +I in finance is no different.

<= +span>Plaid is the infrastructure that makes permissioned financi= +al data not just accessible, but understood. A paycheck read as income, or = +an irregular pattern read as potential fraud. 

+ +

That understanding can't be prompted. It has to be built. Plaid's propri= +etary models are built to specifically understand financial behavior at sca= +le.

+ +

Meet the infrastructure for AI = +innovation in finance. + + +

+
+
+
+
+
+ +
+ +
+
+
=F0=9F= +=93=B1
+
+ +
+
+
+ +

News & Trends

+
+
+
+ +
+ +
+
+ + + + Will agents have network ef= +fects? (11 minute read) + + +
+
+ + While current AI agents act as standalo= +ne tools, future agents can develop network effects through acquisition and= + engagement loops. By turning artifacts into viral objects and building cen= +tralized identity layers, agent platforms could create winner-take-all dyna= +mics. + +
+
+
+ +
+
+ + + + Your Moat Is Dead. Anyone C= +an Rebuild Your Product (13 minute read) + + +
+
+ + Falling code generation costs and AI ag= +ent reimplementations have eliminated traditional software feature and UI m= +oats. Defensibility has shifted toward accountability, proprietary data, re= +gulatory trust, hardware coupling, and customer outcomes, forcing companies= + to focus on operational moats and server-side APIs. + +
+
+
+ +
+ +
+
+
=F0=9F= +=9A=80
+
+
+ +
+
+
+ +

Opinions & Tutorials

+
+
+
+ + +
+ +
+
+ + + + Why Agent-Written Code Need= +s Product Verification (6 minute read) + + +
+
+ + When AI agents write both code and test= +s, they encode identical misunderstandings, producing green builds that fai= +l real user needs. Teams must establish independent verification based on u= +ser requirements. Lower maintenance costs and faster repair cycles make com= +prehensive end-to-end product verification feasible. + +
+
+
+ +
+
+ + + + Tesler's Law: complexity mo= +ved to a different part of the journey (10 minute read) + + +
+
+ + Generative AI interfaces do not elimina= +te software complexity - they shift it to users, developers, and reviewers.= + While AI automates routine tasks, it adds hidden burdens in prompt specifi= +cation and verification. Designers must address this by creating clear cons= +traints and verification workflows. + +
+
+
+ +
+ +
+
+
=F0=9F= +=A7=91=E2=80=8D=F0=9F=92=BB
+
+
+ +
+
+
+ +

Resources & Tools

+
+
+
+ +
+ +
+
+ + + + 4 free Datadog resources to= + help you understand your users (Sponsor) + + +
+
+ + Juggling tools to try and get a sense o= +f your UX? This PM Toolkit by Datado= +g shows you how to extract real meaning from product data and build stronge= +r pre-launch hypotheses. Learn how to visually replay user sessions to unco= +ver friction and prioritize updates that move the needle. Get the toolkit + +
+
+
+ +
+
+ + + + Product definition (8 minut= +e read) + + +
+
+ + Product thinking and "Product Definitio= +n" are essential in the AI era, where agents execute code rapidly given cle= +ar direction. Formerly known as feature specification, Product Definition s= +hapes requirements and context into actionable artifacts like prototypes an= +d PRDs. This competency evolves from tactical execution to building systems= + that align teams and AI agents. + +
+
+
+ +
+
+ + + + When Does Onboarding Become= + a Product Problem? (8 minute read) + + +
+
+ + Customer onboarding friction often sign= +als a hidden product issue. Product managers should address this by creatin= +g a repeatable "Golden Path," mapping user tasks from purchase to productio= +n to replace manual steps with automated features. Tracking time to first v= +alue and completion rates reduces delays and builds long-term product value= +. + +
+
+
+ +
+ +
+
+
=F0=9F= +=8E=81
+
+ +
+
+

Miscellaneous

<= +/div> +
+
+ +
+ +
+
+ + + + Product Manager, Applied AI= + at TLDR ($225k base + $60k bonus, Fully Remote) + + +
+
+ + TLDR is hiring its first PM to help bui= +ld the agent-first operating layer used across the company. We're looking f= +or a builder who has shipped real products/systems with LLMs. Click here to learn more. + +
+
+
+ +
+
+ + + + Introducing: Spotify Techno= +logy. Proven at Spotify, now yours (6 minute read) + + +
+
+ + Spotify Technology is a unified suite o= +f developer and media tools including Portal, Confidence, Xirp, and Spotify= + for Backstage. Tested across Spotify's internal engineering teams to cover= + the entire development lifecycle, the offering aims to help external R&= +;D organizations balance team autonomy with architectural alignment. + +
+
+
+ +
+
+ + + + How Snyk turned an internal= + support agent into a customer feature (8 minute read) + + +
+
+ + Snyk turned its internal AI support age= +nt, Snyk Assist, into a customer-facing feature. The agent answers user que= +ries within permission boundaries, utilizing offline and online evaluations= +. Since launch, it has resolved over 85% of support sessions without needin= +g a ticket. + +
+
+
+ +
+ + + +
+
+
=E2=9A= +=A1
+
+ +
+
+
+ +

Quick Links

+
+
+
+ +
+ +
+
+ + + + Earn your MBA 100% online f= +rom The Ohio State University (Sponsor) + + +
+
+ + Advance your career with Ohio State's o= +nline MBA for Working Professionals-our nationally ranked part-time MBA wit= +h the flexibility of an online program that can be completed from anywhere.= +

= +Explore the program + + +

+
+
+ +
+
+ + + + The most common reasons why= + AI pilots fail, even at the 'best' companies (1 minute read) + + +
+
+ + This thread outlines thirteen common pi= +tfalls that cause enterprise AI pilots to fail, such as automating isolated= + steps instead of full workflows, lacking baseline metrics, ignoring edge c= +ases, and failing to engage legal and security teams early. + +
+
+
+ +
+
+ + + + What happens when AI agents= + shop for us (3 minute read) + + +
+
+ + As AI shopping agents use wallets to br= +owse catalogs and complete checkouts automatically, online merchants risk l= +osing direct customer contact, while users must retain final purchase appro= +val to prevent accidental transactions. + +
+
+
+ +
+ + + + + + + + +
+ +

+Love TLDR? Tell your friends and get rewards! +

+
+
+Share your referral link below with friends to get free TLDR swag! +
+
+ +
+Track your referrals here. +
+ + + + +
+ +

+Want to advertise in TLDR? =F0=9F=93=B0 +

+
+If your company is interested in reaching an audience of product management= + professionals and decision makers, you may want to advertise with us. +
+
+ + + +

+Want to work at TLDR? =F0=9F=92=BC +

+
+Apply here, +create your own role or send a friend's resume to jobs@tldr.tech an= +d get $1k if we hire them! TLDR is one of Inc.'s Best Bootstrapped businesses = +of 2025. +
+
+ +
+If you have any comments or feedback, just respond to this email! +
+
Thanks for reading, +
+Ellen L= +e +
+
+
+
+
+ +
+
+Manage your subscriptions to our other newsletters on tech= +, startups, and programming. Or if TLDR Product Management isn't for you, p= +lease unsubscribe. +
+ +
+
+
+
+
+
+ + +3D"" + +--LB8Q1ZSP-- + diff --git a/testfiles/office/excel-artificial.xlsx b/testfiles/office/excel-artificial.xlsx new file mode 100644 index 0000000..1a0467a Binary files /dev/null and b/testfiles/office/excel-artificial.xlsx differ diff --git a/testfiles/office/excel-business.xlsx b/testfiles/office/excel-business.xlsx new file mode 100644 index 0000000..1b40022 Binary files /dev/null and b/testfiles/office/excel-business.xlsx differ diff --git a/testfiles/office/excel-business.xlsx.expect b/testfiles/office/excel-business.xlsx.expect new file mode 100644 index 0000000..e4b109a --- /dev/null +++ b/testfiles/office/excel-business.xlsx.expect @@ -0,0 +1,2 @@ +# the bare formula text: it is in a .formulas.tsv only, not in derived.md and not in a cell TSV +SUM(Sales!L6:L29) diff --git a/testfiles/office/excel-science.xlsx b/testfiles/office/excel-science.xlsx new file mode 100644 index 0000000..9f2d9b5 Binary files /dev/null and b/testfiles/office/excel-science.xlsx differ diff --git a/testfiles/office/pptx-baseline.pptx b/testfiles/office/pptx-baseline.pptx new file mode 100644 index 0000000..8f743f2 Binary files /dev/null and b/testfiles/office/pptx-baseline.pptx differ diff --git a/testfiles/office/pptx-master.pptx b/testfiles/office/pptx-master.pptx new file mode 100644 index 0000000..b18d6a6 Binary files /dev/null and b/testfiles/office/pptx-master.pptx differ diff --git a/testfiles/office/pptx-objects.pptx b/testfiles/office/pptx-objects.pptx new file mode 100644 index 0000000..88f260d Binary files /dev/null and b/testfiles/office/pptx-objects.pptx differ diff --git a/testfiles/office/word-complex.docx b/testfiles/office/word-complex.docx new file mode 100644 index 0000000..ed21fde Binary files /dev/null and b/testfiles/office/word-complex.docx differ diff --git a/testfiles/office/word-simple.docx b/testfiles/office/word-simple.docx new file mode 100644 index 0000000..e03d1c4 Binary files /dev/null and b/testfiles/office/word-simple.docx differ diff --git a/testfiles/pdf/einstein-dissertation.pdf b/testfiles/pdf/einstein-dissertation.pdf new file mode 100644 index 0000000..ff9171b Binary files /dev/null and b/testfiles/pdf/einstein-dissertation.pdf differ diff --git a/testfiles/pdf/ifg.pdf b/testfiles/pdf/ifg.pdf new file mode 100644 index 0000000..fbaecd2 Binary files /dev/null and b/testfiles/pdf/ifg.pdf differ diff --git a/testfiles/pdf/nist-ai-rmf.pdf b/testfiles/pdf/nist-ai-rmf.pdf new file mode 100644 index 0000000..b25cede Binary files /dev/null and b/testfiles/pdf/nist-ai-rmf.pdf differ diff --git a/testfiles/pdf/nist-ssdf-genai.pdf b/testfiles/pdf/nist-ssdf-genai.pdf new file mode 100644 index 0000000..f9bc373 Binary files /dev/null and b/testfiles/pdf/nist-ssdf-genai.pdf differ diff --git a/testfiles/zip/archive.zip b/testfiles/zip/archive.zip new file mode 100644 index 0000000..16da089 Binary files /dev/null and b/testfiles/zip/archive.zip differ diff --git a/tools/chemenu/tests/test_raw_derive_testfiles.py b/tools/chemenu/tests/test_raw_derive_testfiles.py index 4243ee5..8b69add 100644 --- a/tools/chemenu/tests/test_raw_derive_testfiles.py +++ b/tools/chemenu/tests/test_raw_derive_testfiles.py @@ -55,6 +55,8 @@ def _texts(folder: Path) -> dict[str, str]: texts[md.relative_to(folder).as_posix()] = "\n".join( line for line in lines if not line.startswith("derived:") ) + for tsv in sorted(folder.rglob("*.sheets/*.tsv")): + texts[tsv.relative_to(folder).as_posix()] = tsv.read_text(encoding="utf-8") return texts @@ -102,3 +104,17 @@ def test_a_real_document_derives_stably_and_is_accepted(tree, document): page=None, replaces=None, dry_run=False, ) assert not (tree / "incoming" / document.stem).exists() + + +def test_texts_covers_the_sheet_tsvs_beside_the_markdown(tmp_path): + (tmp_path / "x.sheets").mkdir() + (tmp_path / "derived.md").write_text("derived: now\nbody\n", encoding="utf-8") + cells = tmp_path / "x.sheets" / "01-a.tsv" + cells.write_text("a\tb\n", encoding="utf-8") + + before = _texts(tmp_path) + assert before["derived.md"] == "body" + assert before["x.sheets/01-a.tsv"] == "a\tb\n" + + cells.write_text("a\tc\n", encoding="utf-8") + assert _texts(tmp_path) != before