brewdoc-darwin-arm64 0.6.0 → 0.7.1

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 (27) hide show
  1. package/README.md +44 -26
  2. package/binary/_internal/base_library.zip +0 -0
  3. package/binary/_internal/{brewdoc-0.6.0.dist-info → brewdoc-0.7.1.dist-info}/METADATA +46 -27
  4. package/binary/_internal/{brewdoc-0.6.0.dist-info → brewdoc-0.7.1.dist-info}/RECORD +16 -16
  5. package/binary/_internal/brewdoc-0.7.1.dist-info/direct_url.json +1 -0
  6. package/binary/_internal/brewdoc-0.7.1.dist-info/uv_cache.json +1 -0
  7. package/binary/_internal/truststore-0.10.5.dist-info/INSTALLER +1 -0
  8. package/binary/_internal/truststore-0.10.5.dist-info/METADATA +110 -0
  9. package/binary/_internal/truststore-0.10.5.dist-info/RECORD +13 -0
  10. package/binary/_internal/truststore-0.10.5.dist-info/REQUESTED +0 -0
  11. package/binary/_internal/truststore-0.10.5.dist-info/WHEEL +4 -0
  12. package/binary/_internal/truststore-0.10.5.dist-info/licenses/LICENSE +21 -0
  13. package/binary/brewdoc +0 -0
  14. package/binary/licenses/installed/truststore/truststore-0.10.5.dist-info/licenses/LICENSE +21 -0
  15. package/binary/licenses/installed-manifest.json +6 -1
  16. package/binary/version.json +2 -2
  17. package/native-manifest.json +107 -41
  18. package/native-verification.json +21 -3
  19. package/package.json +1 -1
  20. package/binary/_internal/brewdoc-0.6.0.dist-info/direct_url.json +0 -1
  21. package/binary/_internal/brewdoc-0.6.0.dist-info/uv_cache.json +0 -1
  22. /package/binary/_internal/{brewdoc-0.6.0.dist-info → brewdoc-0.7.1.dist-info}/INSTALLER +0 -0
  23. /package/binary/_internal/{brewdoc-0.6.0.dist-info → brewdoc-0.7.1.dist-info}/REQUESTED +0 -0
  24. /package/binary/_internal/{brewdoc-0.6.0.dist-info → brewdoc-0.7.1.dist-info}/WHEEL +0 -0
  25. /package/binary/_internal/{brewdoc-0.6.0.dist-info → brewdoc-0.7.1.dist-info}/entry_points.txt +0 -0
  26. /package/binary/_internal/{brewdoc-0.6.0.dist-info → brewdoc-0.7.1.dist-info}/licenses/LICENSE +0 -0
  27. /package/binary/licenses/installed/brewdoc/{brewdoc-0.6.0.dist-info → brewdoc-0.7.1.dist-info}/licenses/LICENSE +0 -0
package/README.md CHANGED
@@ -3,14 +3,14 @@
3
3
  [![PyPI](https://img.shields.io/pypi/v/brewdoc)](https://pypi.org/project/brewdoc/)
4
4
  [![CI](https://github.com/kochetkov-ma/brewdoc/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/kochetkov-ma/brewdoc/actions/workflows/ci.yml)
5
5
  [![Release](https://img.shields.io/github/v/release/kochetkov-ma/brewdoc)](https://github.com/kochetkov-ma/brewdoc/releases/latest)
6
- [![MIT](https://img.shields.io/github/license/kochetkov-ma/brewdoc)](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/LICENSE)
6
+ [![MIT](https://img.shields.io/github/license/kochetkov-ma/brewdoc)](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/LICENSE)
7
7
 
8
8
  Fast, deterministic document-to-Markdown conversion for agent systems. Easy to install. No model weights, OCR or external services.
9
9
 
10
10
  Local conversion runs offline after installation, with no runtime component downloads.
11
11
  Supported documents become one Markdown file and a JSON receipt describing omissions.
12
- See [formats and limits](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md).
13
- Version 0.4.1 added [selected ZIP/XML reader budgets](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#zipxml-reader-limits)
12
+ See [formats and limits](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md).
13
+ Version 0.4.1 added [selected ZIP/XML reader budgets](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#zipxml-reader-limits)
14
14
  for DOCX/PPTX and workbook metadata/artifacts. Excessive work refuses before output
15
15
  writes; native workbook values and total process memory remain outside those bounds.
16
16
 
@@ -21,28 +21,35 @@ It also added textless PDF page facts and selected caption, table and math-spaci
21
21
  Version 0.6.0 writes cleaner Markdown with minimal escaping, adds `--body-only`, accepts
22
22
  documents through `--url`, decodes legacy HTML charsets and falls back to the whole page in
23
23
  article mode.
24
+ Version 0.7.0 added `--render-js auto` and HTML `--no-links`, refuses captcha, login and
25
+ JavaScript shell pages with a plain reason, reports HTTP status, redirects and charset in URL
26
+ receipts, decodes mislabelled HTML charsets by fallback and writes code and image links as
27
+ standard Markdown links.
28
+ Version 0.7.1 checks `--url` TLS against the operating system trust store, converts the title,
29
+ description, JSON-LD and noscript text of some JavaScript shell pages as a partial result, and
30
+ names AWS WAF challenges.
24
31
 
25
32
  ## Install
26
33
 
27
- These examples select 0.6.0. Use a channel listed as available in [that release](https://github.com/kochetkov-ma/brewdoc/releases/tag/v0.6.0). Choose one method:
34
+ These examples select 0.7.1. Use a channel listed as available in [that release](https://github.com/kochetkov-ma/brewdoc/releases/tag/v0.7.1). Choose one method:
28
35
 
29
36
  ```sh
30
- python -m pip install "brewdoc==0.6.0"
31
- uv tool install --python 3.12 "brewdoc==0.6.0"
32
- pipx install --python 3.12 "brewdoc==0.6.0"
37
+ python -m pip install "brewdoc==0.7.1"
38
+ uv tool install --python 3.12 "brewdoc==0.7.1"
39
+ pipx install --python 3.12 "brewdoc==0.7.1"
33
40
  ```
34
41
 
35
42
  Use a virtual environment for pip. Python 3.12+ is required; local and URL HTML need CPython 3.12-3.14.
36
- [INSTALL.md](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/INSTALL.md) covers prerequisites, Windows, uvx, PATH, update and removal.
43
+ [INSTALL.md](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/INSTALL.md) covers prerequisites, Windows, uvx, PATH, update and removal.
37
44
  [Latest release](https://github.com/kochetkov-ma/brewdoc/releases/latest) lists actual assets and channel availability.
38
45
 
39
46
  ### Standalone downloads
40
47
 
41
- Use downloads listed as available in the release. Python and dependencies are bundled. Verify [SHA256SUMS](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.6.0/SHA256SUMS) and keep the entire extracted directory.
48
+ Use downloads listed as available in the release. Python and dependencies are bundled. Verify [SHA256SUMS](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.7.1/SHA256SUMS) and keep the entire extracted directory.
42
49
 
43
- [![Linux x64 download](https://img.shields.io/badge/Linux_x64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.6.0/brewdoc-0.6.0-linux-x64.tar.gz)
44
- [![Windows x64 download](https://img.shields.io/badge/Windows_x64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.6.0/brewdoc-0.6.0-windows-x64.zip)
45
- [![macOS ARM64 download](https://img.shields.io/badge/macOS_ARM64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.6.0/brewdoc-0.6.0-macos-arm64.tar.gz)
50
+ [![Linux x64 download](https://img.shields.io/badge/Linux_x64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.7.1/brewdoc-0.7.1-linux-x64.tar.gz)
51
+ [![Windows x64 download](https://img.shields.io/badge/Windows_x64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.7.1/brewdoc-0.7.1-windows-x64.zip)
52
+ [![macOS ARM64 download](https://img.shields.io/badge/macOS_ARM64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.7.1/brewdoc-0.7.1-macos-arm64.tar.gz)
46
53
 
47
54
  | Native target | Verification environment | JavaScript |
48
55
  |---|---|---|
@@ -52,21 +59,21 @@ Use downloads listed as available in the release. Python and dependencies are bu
52
59
 
53
60
  Older OSes, Linux musl/ARM64 and macOS Intel are outside this binary set.
54
61
  Windows is unsigned; macOS has an ad hoc signature without Developer ID/notarization.
55
- Linux archives have checksums, without a detached publisher signature. [Download and launch](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/INSTALL.md#standalone).
62
+ Linux archives have checksums, without a detached publisher signature. [Download and launch](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/INSTALL.md#standalone).
56
63
 
57
64
  ### npm
58
65
 
59
66
  [![npm](https://img.shields.io/npm/v/brewdoc)](https://www.npmjs.com/package/brewdoc)
60
67
 
61
68
  npm targets Linux x64/glibc and macOS ARM64. Windows uses the GitHub native download or Python package.
62
- Use npm/npx only when listed as available in [the release](https://github.com/kochetkov-ma/brewdoc/releases/tag/v0.6.0).
63
- [INSTALL.md](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/INSTALL.md#npm-and-npx) contains exact-version installation, update and removal instructions.
69
+ Use npm/npx only when listed as available in [the release](https://github.com/kochetkov-ma/brewdoc/releases/tag/v0.7.1).
70
+ [INSTALL.md](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/INSTALL.md#npm-and-npx) contains exact-version installation, update and removal instructions.
64
71
 
65
72
  ### Homebrew
66
73
 
67
74
  Use `kochetkov-ma/brew/brewdoc` only when the release lists it as available.
68
75
  It installs the complete native bundle on macOS 15+ ARM64 or Linux x64 with system
69
- glibc 2.35+. See [installation and lifecycle](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/INSTALL.md#homebrew).
76
+ glibc 2.35+. See [installation and lifecycle](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/INSTALL.md#homebrew).
70
77
 
71
78
  ## Usage
72
79
 
@@ -85,7 +92,7 @@ caller order retains full-workbook ordinals. Artifact keys come from the Markdow
85
92
  Requests and output collisions are validated before writes. Paths resolve against the caller's directory;
86
93
  `--out` creates parents. Refusal preserves existing output. Self-check is offline and has its own output.
87
94
  `--body-only` drops the title, metadata, omissions, contents and unit anchors; unit headings stay
88
- only for several units. The receipt is unchanged. See [body-only output](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#body-only-output).
95
+ only for several units. The receipt is unchanged. See [body-only output](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#body-only-output).
89
96
 
90
97
  ## Markdown and receipts
91
98
 
@@ -93,7 +100,7 @@ Parsed document output uses `brewdoc.markdown/2`: quoted source title, Metadata,
93
100
  Known omissions, Contents, then anchored units. PDF uses `page/000001`, workbooks `sheet/000001`,
94
101
  PPTX/ODP `slide/000001`, and DOCX/EPUB/HTML/ODT/EML `chapter/000001`.
95
102
  Empty declared units remain navigable. Escaping is minimal; HTML, EPUB and EML omit form
96
- controls and write images with alt text as `![alt](src)`. See [Markdown escaping](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#markdown-escaping).
103
+ controls and write images with alt text as `![alt](src)`. See [Markdown escaping](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#markdown-escaping).
97
104
  Metadata holds source/selection/content hashes, conversion tallies and artifact capabilities;
98
105
  it excludes paths, timestamps, permissions and host data. EPUB retains declared publication metadata.
99
106
 
@@ -116,7 +123,8 @@ without it, Markdown follows on stdout. Local receipts use `brewdoc.receipt/1`;
116
123
  | `out` | Markdown path, or null for stdout |
117
124
  | `markdown_schema`, `unit_keys`, `artifacts` | Success-only schema, ordered source keys and available/requested artifacts |
118
125
  | `selected_sheets` | Caller-ordered names, only when selected |
119
- | `acquisition` | URL provenance, frozen snapshot and capture status |
126
+ | `article_fallback`, `charset_fallback` | Local HTML whole-page fallback and charset chosen by fallback, only when used |
127
+ | `acquisition` | URL provenance, HTTP status, redirects, challenge, charset, frozen snapshot and capture status |
120
128
 
121
129
  Exit 0 means conversion, 1 refusal and 2 invalid usage. Success does not prove content fidelity or complete JavaScript.
122
130
  PDF/DOCX/PPTX emit ASCII; workbooks/HTML/EPUB/ODT/ODP/EML emit UTF-8 without BOM, with LF newlines.
@@ -134,7 +142,7 @@ refs = brewdoc.list_book_artifacts("book.xlsm", sheets=("Calc",))
134
142
  payload = brewdoc.read_book_artifact("book.xlsm", refs[0].key, sheets=("Calc",))
135
143
  ```
136
144
 
137
- `run` accepts `sheets`, an `artifact_outputs` key-to-path mapping, `article` and `body_only`. Renderers include
145
+ `run` accepts `sheets`, an `artifact_outputs` key-to-path mapping, `article`, `body_only` and `links`. Renderers include
138
146
  `render_pdf`, `render_doc`, `render_presentation`, `render_epub`, `render_html` and `render_book`.
139
147
  `read_formulas` provides typed formulas; `self_check` verifies installed routes. Local APIs never acquire URLs.
140
148
 
@@ -147,18 +155,28 @@ Content-Type and magic bytes pick the route: HTML, PDF, Office, OpenDocument, EP
147
155
  brewdoc --url https://example.com/article --out article.md
148
156
  brewdoc --url https://arxiv.org/pdf/1706.03762 --out attention.md
149
157
  brewdoc --url https://example.com/article --render-js --timeout 30 --out article.md
158
+ brewdoc --url "https://hn.algolia.com/?q=rust" --render-js auto --out search.md
159
+ brewdoc --url https://example.com/article --no-links --out article.md
150
160
  ```
151
161
 
162
+ Bare `--render-js` means `always`; `--render-js auto` runs JS only when the static page is a JavaScript shell.
163
+ Prefer `--render-js auto` for unknown pages: `always` runs JS on every page and can hit an engine quota on a
164
+ page that static mode reads. Pages that need more than the bounded engine refuse, such as crates.io.
165
+ A shell page whose static HTML embeds at least 200 characters of JSON-LD or noscript text converts that
166
+ text as a partial result, such as an Airbnb listing or a SoundCloud track; the receipt keeps a
167
+ `javascript_required` error. Captcha, bot challenge, login and other shell pages refuse at stage `challenge`
168
+ or `javascript_required` with a plain reason; the receipt names the challenge and keeps the HTTP status.
169
+ `--no-links` (HTML only) keeps link text, omits destinations and discloses it in the receipt.
152
170
  `--timeout` is one positive finite waiting budget, default 30 seconds; cleanup/conversion can add time.
153
171
  Public destinations, DNS, redirects, TLS, requests and bytes are validated. Ordinary requests use GET;
154
172
  JS admits only the narrow credential-free HN Algolia XHR POST exception. Local HTML never fetches or runs scripts.
155
173
  Optional JS needs installed/bundled prerequisites, refuses unsupported runtimes before HTTP and downloads no engine.
156
- Timing-only expiry can preserve valid partial content; hard failures refuse output. [Full URL/JS limits](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#url-acquisition).
174
+ Timing-only expiry can preserve valid partial content; hard failures refuse output. [Full URL/JS limits](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#url-acquisition).
157
175
 
158
176
  ## Article mode
159
177
 
160
178
  Introduced in 0.4.0; use a channel listed as available in the release. For Python JS capture, install
161
- `brewdoc[render-js]==0.6.0`; supported standalone bundles include its prerequisites.
179
+ `brewdoc[render-js]==0.7.1`; supported standalone bundles include its prerequisites.
162
180
 
163
181
  ```sh
164
182
  brewdoc page.html --article --out article.md
@@ -181,7 +199,7 @@ without layout or inferred author/date metadata. The source title is unchanged.
181
199
 
182
200
  When content is selected, the receipt's `not_carried` and Markdown's Known omissions declare:
183
201
  `body content outside the selected article or main subtree; complete page coverage is not claimed`.
184
- The [article contract](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#article-selection)
202
+ The [article contract](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#article-selection)
185
203
  defines selection, fallback and limits.
186
204
 
187
205
  [Earlier source-package CI](https://github.com/kochetkov-ma/brewdoc/actions/runs/38431645006) passed on
@@ -192,10 +210,10 @@ tested patches, not a claim about newer versions. These results predate the 0.5.
192
210
  CPython 3.12.14 retains the local macOS full-suite baseline and existing CI smoke checks.
193
211
  Package evidence is separate from standalone binaries; other OS/minor combinations, free-threaded CPython and other
194
212
  architectures remain untested here.
195
- See [package compatibility](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#python-package-compatibility).
213
+ See [package compatibility](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#python-package-compatibility).
196
214
 
197
- [Format contracts](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md) | [Corpus](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/benchmarks/CATALOG.md) | [Measurements](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/benchmarks/METHODOLOGY.md) | [Results](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/benchmarks/results/README.md)
198
- [Releasing](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/RELEASING.md) | [Agent entry point](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/llms.txt) | [MIT license](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/LICENSE)
215
+ [Format contracts](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md) | [Corpus](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/benchmarks/CATALOG.md) | [Measurements](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/benchmarks/METHODOLOGY.md) | [Results](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/benchmarks/results/README.md)
216
+ [Releasing](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/RELEASING.md) | [Agent entry point](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/llms.txt) | [MIT license](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/LICENSE)
199
217
 
200
218
  ## Related projects
201
219
 
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: brewdoc
3
- Version: 0.6.0
3
+ Version: 0.7.1
4
4
  Summary: Fast, deterministic document-to-Markdown conversion for agent systems. Easy to install. No model weights, OCR or external services.
5
5
  Project-URL: Homepage, https://github.com/kochetkov-ma/brewdoc
6
6
  Project-URL: Repository, https://github.com/kochetkov-ma/brewdoc
@@ -22,6 +22,7 @@ Requires-Python: >=3.12
22
22
  Requires-Dist: pdfplumber==0.11.10
23
23
  Requires-Dist: python-calamine==0.8.2
24
24
  Requires-Dist: selectolax==0.4.13; python_version < '3.15' and platform_python_implementation == 'CPython'
25
+ Requires-Dist: truststore==0.10.5
25
26
  Provides-Extra: render-js
26
27
  Requires-Dist: quickjs-ng==0.17.0.1; (python_version < '3.15' and platform_python_implementation == 'CPython') and extra == 'render-js'
27
28
  Description-Content-Type: text/markdown
@@ -31,14 +32,14 @@ Description-Content-Type: text/markdown
31
32
  [![PyPI](https://img.shields.io/pypi/v/brewdoc)](https://pypi.org/project/brewdoc/)
32
33
  [![CI](https://github.com/kochetkov-ma/brewdoc/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/kochetkov-ma/brewdoc/actions/workflows/ci.yml)
33
34
  [![Release](https://img.shields.io/github/v/release/kochetkov-ma/brewdoc)](https://github.com/kochetkov-ma/brewdoc/releases/latest)
34
- [![MIT](https://img.shields.io/github/license/kochetkov-ma/brewdoc)](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/LICENSE)
35
+ [![MIT](https://img.shields.io/github/license/kochetkov-ma/brewdoc)](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/LICENSE)
35
36
 
36
37
  Fast, deterministic document-to-Markdown conversion for agent systems. Easy to install. No model weights, OCR or external services.
37
38
 
38
39
  Local conversion runs offline after installation, with no runtime component downloads.
39
40
  Supported documents become one Markdown file and a JSON receipt describing omissions.
40
- See [formats and limits](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md).
41
- Version 0.4.1 added [selected ZIP/XML reader budgets](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#zipxml-reader-limits)
41
+ See [formats and limits](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md).
42
+ Version 0.4.1 added [selected ZIP/XML reader budgets](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#zipxml-reader-limits)
42
43
  for DOCX/PPTX and workbook metadata/artifacts. Excessive work refuses before output
43
44
  writes; native workbook values and total process memory remain outside those bounds.
44
45
 
@@ -49,28 +50,35 @@ It also added textless PDF page facts and selected caption, table and math-spaci
49
50
  Version 0.6.0 writes cleaner Markdown with minimal escaping, adds `--body-only`, accepts
50
51
  documents through `--url`, decodes legacy HTML charsets and falls back to the whole page in
51
52
  article mode.
53
+ Version 0.7.0 added `--render-js auto` and HTML `--no-links`, refuses captcha, login and
54
+ JavaScript shell pages with a plain reason, reports HTTP status, redirects and charset in URL
55
+ receipts, decodes mislabelled HTML charsets by fallback and writes code and image links as
56
+ standard Markdown links.
57
+ Version 0.7.1 checks `--url` TLS against the operating system trust store, converts the title,
58
+ description, JSON-LD and noscript text of some JavaScript shell pages as a partial result, and
59
+ names AWS WAF challenges.
52
60
 
53
61
  ## Install
54
62
 
55
- These examples select 0.6.0. Use a channel listed as available in [that release](https://github.com/kochetkov-ma/brewdoc/releases/tag/v0.6.0). Choose one method:
63
+ These examples select 0.7.1. Use a channel listed as available in [that release](https://github.com/kochetkov-ma/brewdoc/releases/tag/v0.7.1). Choose one method:
56
64
 
57
65
  ```sh
58
- python -m pip install "brewdoc==0.6.0"
59
- uv tool install --python 3.12 "brewdoc==0.6.0"
60
- pipx install --python 3.12 "brewdoc==0.6.0"
66
+ python -m pip install "brewdoc==0.7.1"
67
+ uv tool install --python 3.12 "brewdoc==0.7.1"
68
+ pipx install --python 3.12 "brewdoc==0.7.1"
61
69
  ```
62
70
 
63
71
  Use a virtual environment for pip. Python 3.12+ is required; local and URL HTML need CPython 3.12-3.14.
64
- [INSTALL.md](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/INSTALL.md) covers prerequisites, Windows, uvx, PATH, update and removal.
72
+ [INSTALL.md](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/INSTALL.md) covers prerequisites, Windows, uvx, PATH, update and removal.
65
73
  [Latest release](https://github.com/kochetkov-ma/brewdoc/releases/latest) lists actual assets and channel availability.
66
74
 
67
75
  ### Standalone downloads
68
76
 
69
- Use downloads listed as available in the release. Python and dependencies are bundled. Verify [SHA256SUMS](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.6.0/SHA256SUMS) and keep the entire extracted directory.
77
+ Use downloads listed as available in the release. Python and dependencies are bundled. Verify [SHA256SUMS](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.7.1/SHA256SUMS) and keep the entire extracted directory.
70
78
 
71
- [![Linux x64 download](https://img.shields.io/badge/Linux_x64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.6.0/brewdoc-0.6.0-linux-x64.tar.gz)
72
- [![Windows x64 download](https://img.shields.io/badge/Windows_x64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.6.0/brewdoc-0.6.0-windows-x64.zip)
73
- [![macOS ARM64 download](https://img.shields.io/badge/macOS_ARM64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.6.0/brewdoc-0.6.0-macos-arm64.tar.gz)
79
+ [![Linux x64 download](https://img.shields.io/badge/Linux_x64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.7.1/brewdoc-0.7.1-linux-x64.tar.gz)
80
+ [![Windows x64 download](https://img.shields.io/badge/Windows_x64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.7.1/brewdoc-0.7.1-windows-x64.zip)
81
+ [![macOS ARM64 download](https://img.shields.io/badge/macOS_ARM64-download-blue)](https://github.com/kochetkov-ma/brewdoc/releases/download/v0.7.1/brewdoc-0.7.1-macos-arm64.tar.gz)
74
82
 
75
83
  | Native target | Verification environment | JavaScript |
76
84
  |---|---|---|
@@ -80,21 +88,21 @@ Use downloads listed as available in the release. Python and dependencies are bu
80
88
 
81
89
  Older OSes, Linux musl/ARM64 and macOS Intel are outside this binary set.
82
90
  Windows is unsigned; macOS has an ad hoc signature without Developer ID/notarization.
83
- Linux archives have checksums, without a detached publisher signature. [Download and launch](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/INSTALL.md#standalone).
91
+ Linux archives have checksums, without a detached publisher signature. [Download and launch](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/INSTALL.md#standalone).
84
92
 
85
93
  ### npm
86
94
 
87
95
  [![npm](https://img.shields.io/npm/v/brewdoc)](https://www.npmjs.com/package/brewdoc)
88
96
 
89
97
  npm targets Linux x64/glibc and macOS ARM64. Windows uses the GitHub native download or Python package.
90
- Use npm/npx only when listed as available in [the release](https://github.com/kochetkov-ma/brewdoc/releases/tag/v0.6.0).
91
- [INSTALL.md](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/INSTALL.md#npm-and-npx) contains exact-version installation, update and removal instructions.
98
+ Use npm/npx only when listed as available in [the release](https://github.com/kochetkov-ma/brewdoc/releases/tag/v0.7.1).
99
+ [INSTALL.md](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/INSTALL.md#npm-and-npx) contains exact-version installation, update and removal instructions.
92
100
 
93
101
  ### Homebrew
94
102
 
95
103
  Use `kochetkov-ma/brew/brewdoc` only when the release lists it as available.
96
104
  It installs the complete native bundle on macOS 15+ ARM64 or Linux x64 with system
97
- glibc 2.35+. See [installation and lifecycle](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/INSTALL.md#homebrew).
105
+ glibc 2.35+. See [installation and lifecycle](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/INSTALL.md#homebrew).
98
106
 
99
107
  ## Usage
100
108
 
@@ -113,7 +121,7 @@ caller order retains full-workbook ordinals. Artifact keys come from the Markdow
113
121
  Requests and output collisions are validated before writes. Paths resolve against the caller's directory;
114
122
  `--out` creates parents. Refusal preserves existing output. Self-check is offline and has its own output.
115
123
  `--body-only` drops the title, metadata, omissions, contents and unit anchors; unit headings stay
116
- only for several units. The receipt is unchanged. See [body-only output](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#body-only-output).
124
+ only for several units. The receipt is unchanged. See [body-only output](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#body-only-output).
117
125
 
118
126
  ## Markdown and receipts
119
127
 
@@ -121,7 +129,7 @@ Parsed document output uses `brewdoc.markdown/2`: quoted source title, Metadata,
121
129
  Known omissions, Contents, then anchored units. PDF uses `page/000001`, workbooks `sheet/000001`,
122
130
  PPTX/ODP `slide/000001`, and DOCX/EPUB/HTML/ODT/EML `chapter/000001`.
123
131
  Empty declared units remain navigable. Escaping is minimal; HTML, EPUB and EML omit form
124
- controls and write images with alt text as `![alt](src)`. See [Markdown escaping](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#markdown-escaping).
132
+ controls and write images with alt text as `![alt](src)`. See [Markdown escaping](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#markdown-escaping).
125
133
  Metadata holds source/selection/content hashes, conversion tallies and artifact capabilities;
126
134
  it excludes paths, timestamps, permissions and host data. EPUB retains declared publication metadata.
127
135
 
@@ -144,7 +152,8 @@ without it, Markdown follows on stdout. Local receipts use `brewdoc.receipt/1`;
144
152
  | `out` | Markdown path, or null for stdout |
145
153
  | `markdown_schema`, `unit_keys`, `artifacts` | Success-only schema, ordered source keys and available/requested artifacts |
146
154
  | `selected_sheets` | Caller-ordered names, only when selected |
147
- | `acquisition` | URL provenance, frozen snapshot and capture status |
155
+ | `article_fallback`, `charset_fallback` | Local HTML whole-page fallback and charset chosen by fallback, only when used |
156
+ | `acquisition` | URL provenance, HTTP status, redirects, challenge, charset, frozen snapshot and capture status |
148
157
 
149
158
  Exit 0 means conversion, 1 refusal and 2 invalid usage. Success does not prove content fidelity or complete JavaScript.
150
159
  PDF/DOCX/PPTX emit ASCII; workbooks/HTML/EPUB/ODT/ODP/EML emit UTF-8 without BOM, with LF newlines.
@@ -162,7 +171,7 @@ refs = brewdoc.list_book_artifacts("book.xlsm", sheets=("Calc",))
162
171
  payload = brewdoc.read_book_artifact("book.xlsm", refs[0].key, sheets=("Calc",))
163
172
  ```
164
173
 
165
- `run` accepts `sheets`, an `artifact_outputs` key-to-path mapping, `article` and `body_only`. Renderers include
174
+ `run` accepts `sheets`, an `artifact_outputs` key-to-path mapping, `article`, `body_only` and `links`. Renderers include
166
175
  `render_pdf`, `render_doc`, `render_presentation`, `render_epub`, `render_html` and `render_book`.
167
176
  `read_formulas` provides typed formulas; `self_check` verifies installed routes. Local APIs never acquire URLs.
168
177
 
@@ -175,18 +184,28 @@ Content-Type and magic bytes pick the route: HTML, PDF, Office, OpenDocument, EP
175
184
  brewdoc --url https://example.com/article --out article.md
176
185
  brewdoc --url https://arxiv.org/pdf/1706.03762 --out attention.md
177
186
  brewdoc --url https://example.com/article --render-js --timeout 30 --out article.md
187
+ brewdoc --url "https://hn.algolia.com/?q=rust" --render-js auto --out search.md
188
+ brewdoc --url https://example.com/article --no-links --out article.md
178
189
  ```
179
190
 
191
+ Bare `--render-js` means `always`; `--render-js auto` runs JS only when the static page is a JavaScript shell.
192
+ Prefer `--render-js auto` for unknown pages: `always` runs JS on every page and can hit an engine quota on a
193
+ page that static mode reads. Pages that need more than the bounded engine refuse, such as crates.io.
194
+ A shell page whose static HTML embeds at least 200 characters of JSON-LD or noscript text converts that
195
+ text as a partial result, such as an Airbnb listing or a SoundCloud track; the receipt keeps a
196
+ `javascript_required` error. Captcha, bot challenge, login and other shell pages refuse at stage `challenge`
197
+ or `javascript_required` with a plain reason; the receipt names the challenge and keeps the HTTP status.
198
+ `--no-links` (HTML only) keeps link text, omits destinations and discloses it in the receipt.
180
199
  `--timeout` is one positive finite waiting budget, default 30 seconds; cleanup/conversion can add time.
181
200
  Public destinations, DNS, redirects, TLS, requests and bytes are validated. Ordinary requests use GET;
182
201
  JS admits only the narrow credential-free HN Algolia XHR POST exception. Local HTML never fetches or runs scripts.
183
202
  Optional JS needs installed/bundled prerequisites, refuses unsupported runtimes before HTTP and downloads no engine.
184
- Timing-only expiry can preserve valid partial content; hard failures refuse output. [Full URL/JS limits](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#url-acquisition).
203
+ Timing-only expiry can preserve valid partial content; hard failures refuse output. [Full URL/JS limits](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#url-acquisition).
185
204
 
186
205
  ## Article mode
187
206
 
188
207
  Introduced in 0.4.0; use a channel listed as available in the release. For Python JS capture, install
189
- `brewdoc[render-js]==0.6.0`; supported standalone bundles include its prerequisites.
208
+ `brewdoc[render-js]==0.7.1`; supported standalone bundles include its prerequisites.
190
209
 
191
210
  ```sh
192
211
  brewdoc page.html --article --out article.md
@@ -209,7 +228,7 @@ without layout or inferred author/date metadata. The source title is unchanged.
209
228
 
210
229
  When content is selected, the receipt's `not_carried` and Markdown's Known omissions declare:
211
230
  `body content outside the selected article or main subtree; complete page coverage is not claimed`.
212
- The [article contract](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#article-selection)
231
+ The [article contract](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#article-selection)
213
232
  defines selection, fallback and limits.
214
233
 
215
234
  [Earlier source-package CI](https://github.com/kochetkov-ma/brewdoc/actions/runs/38431645006) passed on
@@ -220,10 +239,10 @@ tested patches, not a claim about newer versions. These results predate the 0.5.
220
239
  CPython 3.12.14 retains the local macOS full-suite baseline and existing CI smoke checks.
221
240
  Package evidence is separate from standalone binaries; other OS/minor combinations, free-threaded CPython and other
222
241
  architectures remain untested here.
223
- See [package compatibility](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md#python-package-compatibility).
242
+ See [package compatibility](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md#python-package-compatibility).
224
243
 
225
- [Format contracts](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/FORMATS.md) | [Corpus](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/benchmarks/CATALOG.md) | [Measurements](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/benchmarks/METHODOLOGY.md) | [Results](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/benchmarks/results/README.md)
226
- [Releasing](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/RELEASING.md) | [Agent entry point](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/llms.txt) | [MIT license](https://github.com/kochetkov-ma/brewdoc/blob/v0.6.0/LICENSE)
244
+ [Format contracts](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/FORMATS.md) | [Corpus](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/benchmarks/CATALOG.md) | [Measurements](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/benchmarks/METHODOLOGY.md) | [Results](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/benchmarks/results/README.md)
245
+ [Releasing](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/RELEASING.md) | [Agent entry point](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/llms.txt) | [MIT license](https://github.com/kochetkov-ma/brewdoc/blob/v0.7.1/LICENSE)
227
246
 
228
247
  ## Related projects
229
248
 
@@ -1,33 +1,33 @@
1
1
  ../../../bin/brewdoc,sha256=EBcDAz0fm_7gb81W-eoCcf0v2BLUMB1QEU85SQT2Xc0,344
2
- brewdoc-0.6.0.dist-info/INSTALLER,sha256=5hhM4Q4mYTT9z6QB6PGpUAW81PGNFrYrdXMj4oM_6ak,2
3
- brewdoc-0.6.0.dist-info/METADATA,sha256=c8MXeRPbOqaAz4Wl0zFYz9m3edVuHR1zTt04vyHZX9o,14751
4
- brewdoc-0.6.0.dist-info/RECORD,,
5
- brewdoc-0.6.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- brewdoc-0.6.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
7
- brewdoc-0.6.0.dist-info/direct_url.json,sha256=R4khUVbzQAwMsfSZxeM_XFN1s6X_Y8urHUP1tNyTFXI,103
8
- brewdoc-0.6.0.dist-info/entry_points.txt,sha256=avLrj5Y-MJ1yq0XFkjH5dbZW9QwYQkpn_hz6sNydbA4,45
9
- brewdoc-0.6.0.dist-info/licenses/LICENSE,sha256=DNUrRveB3NXcyWxUr8csAHYmvrOmAzFDDAKv3iXNYKk,1073
10
- brewdoc-0.6.0.dist-info/uv_cache.json,sha256=I8b14fujtRjLrvOMFD51vx27cgCOV3K4Go_utEdL0vQ,127
11
- brewdoc/__init__.py,sha256=IyLGlv-WYbGMathise30JzWRf1AFRjqYE0TGnT6w-BE,867
2
+ brewdoc-0.7.1.dist-info/INSTALLER,sha256=5hhM4Q4mYTT9z6QB6PGpUAW81PGNFrYrdXMj4oM_6ak,2
3
+ brewdoc-0.7.1.dist-info/METADATA,sha256=RyMs1kM4lqvdtHH23eANHcOTMVrwzEW99PV550tnXnw,16454
4
+ brewdoc-0.7.1.dist-info/RECORD,,
5
+ brewdoc-0.7.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ brewdoc-0.7.1.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
7
+ brewdoc-0.7.1.dist-info/direct_url.json,sha256=EUCJQJxYhd7a0gbLqQRfTPL5oRWKXXjXzAs4YVOM5Ig,103
8
+ brewdoc-0.7.1.dist-info/entry_points.txt,sha256=avLrj5Y-MJ1yq0XFkjH5dbZW9QwYQkpn_hz6sNydbA4,45
9
+ brewdoc-0.7.1.dist-info/licenses/LICENSE,sha256=DNUrRveB3NXcyWxUr8csAHYmvrOmAzFDDAKv3iXNYKk,1073
10
+ brewdoc-0.7.1.dist-info/uv_cache.json,sha256=QjCGCtlFFSLxpw_VVFZPumJe43U1DFk8eINGpMCj3Po,126
11
+ brewdoc/__init__.py,sha256=ZhvyKgMYdQAeE5-yXULupPEts3E_w9ypOQF9dqoBQDs,867
12
12
  brewdoc/_standalone.py,sha256=-zfCo75E8YlQexHuPoTu1tl1SJGMNftH1JXSt6qilxo,4705
13
13
  brewdoc/_urljs/__init__.py,sha256=SrVyNMaD02iahY2zp3kggkW7KGJ1xv-C5d4DK1-JYWw,51
14
14
  brewdoc/_urljs/glue.js,sha256=FLE1gUULoiMZNHH_RmwV0pFMx2BOc5tBMRBG8ahklgQ,45856
15
- brewdoc/_urljs/native.py,sha256=HadpXlktvsFQyl52A7YjMNgL0N5S8qC2-K4hTk0qIE8,44208
15
+ brewdoc/_urljs/native.py,sha256=usZXp_nWS5KKXj1T-Qelmkr5lhGxfVkTMt80g0bz0CQ,44464
16
16
  brewdoc/_vendor/THIRD_PARTY_NOTICES.txt,sha256=Mg3dxJ1SNPASEu4_ruk2j-7WM0lZmrfulGCUpNoOZak,26003
17
17
  brewdoc/_vendor/linkedom-worker.js,sha256=6p8d5psAnSEJaN2PTT9OzxCVvt-A04nsgyRMFxNXgog,411521
18
- brewdoc/cli.py,sha256=Kd8bx983MrIJs9NSVE1Hr6DmFcsaRgw6gi6dbLZQhHM,6658
18
+ brewdoc/cli.py,sha256=plbn5-iYgBCcIUtXEn5yDq0WUouJmxCXEZ_wGP7FKPo,7113
19
19
  brewdoc/common.py,sha256=r4w2_BegIDVU5r89Y9vH-UQAcwKgP5dITMfi5UMPQA4,51045
20
20
  brewdoc/docx.py,sha256=w5fzxManQw7E34p70-YOT3-hfE0E4Z9SBHaiIqY3ke0,6154
21
21
  brewdoc/eml.py,sha256=KYWPD9K16JMiNtubtnQt8w9k5PejVQdXnEO29Vn5zSY,7433
22
22
  brewdoc/epub.py,sha256=j9kcZAclfbGrvxHcvaImsGkUrmUzWrip-pvBzh2Zz5U,49436
23
- brewdoc/htmljs.py,sha256=yxkqeMPdQ7uK-p0H_71BjjtSokXUv1czeicQhHU9heY,42516
24
- brewdoc/htmltext.py,sha256=3ENBVSjDUiQ4xrM_SBEWikF2Pfum1s9RPhFywVPKzj8,38611
25
- brewdoc/htmlurl.py,sha256=8yiqYCDcOB_rTfyd31nYksOiHy-YZIo5NltafUzc0fg,44737
23
+ brewdoc/htmljs.py,sha256=UEBVlFZc95gaq0rQtgZVY8WkGQS3LzVVywAggc9nrlk,44581
24
+ brewdoc/htmltext.py,sha256=Dq0OykXbNUXC8Phn4q0PDHF48H3J1POYifinv0D6AiQ,42149
25
+ brewdoc/htmlurl.py,sha256=YeraHZMQUlKe-XrqhY0oXCiXQhNyQVlj9aCCENk28ec,54681
26
26
  brewdoc/odf.py,sha256=M5OZwNmZKQx68zpQRf158MUXMTHmnnKmtBam6sPi0YI,15467
27
27
  brewdoc/output.py,sha256=aMgDoB5UDbRWYr9pBxlH402jEiUl8OSEqhox31O0ljk,4123
28
28
  brewdoc/pdf.py,sha256=6qU5tPMjcAeYgqEVIPR8u8xk-FydNCTuD8onQldkTlU,66444
29
29
  brewdoc/pptx.py,sha256=OYE42ZMgifyhWW8uj0M7JHsasaxXkcfLfSKVsp77is0,17844
30
30
  brewdoc/selfcheck.py,sha256=4MGa8Jg3sxDW4f7WBOSiB2cwtyFCN_Uzg0QVTXdSW1s,28042
31
- brewdoc/service.py,sha256=Qix2cgYeUQm9xNrX3JEV27rG-IzEVSYWEphfcOoXzL0,7733
31
+ brewdoc/service.py,sha256=QS-6kDYKV-peTmw-LU6FYnEIM8JmtI2eUqjCbcm8nuM,8161
32
32
  brewdoc/sheets.py,sha256=qgvSxj4MnwPELvwzb3oSmffIOO5LIaAcTzC65TkYp6c,17411
33
33
  brewdoc/text.py,sha256=OCrVnR3t4_FSn5rpxmQhItKg2oagKNhFhyp8XcJYHNw,602
@@ -0,0 +1 @@
1
+ {"url":"file:///Users/runner/work/_temp/ci-dist/dist/brewdoc-0.7.1-py3-none-any.whl","archive_info":{}}
@@ -0,0 +1 @@
1
+ {"timestamp":{"secs_since_epoch":1792439289,"nanos_since_epoch":63548055},"commit":null,"tags":null,"env":{},"directories":{}}
@@ -0,0 +1,110 @@
1
+ Metadata-Version: 2.4
2
+ Name: truststore
3
+ Version: 0.10.5
4
+ Summary: Verify certificates using native system trust stores
5
+ Author-email: Seth Michael Larson <sethmichaellarson@gmail.com>, David Glick <david@glicksoftware.com>
6
+ Requires-Python: >= 3.10
7
+ Description-Content-Type: text/markdown
8
+ License-Expression: MIT
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Operating System :: MacOS
12
+ Classifier: Operating System :: Microsoft
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3 :: Only
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Programming Language :: Python :: 3.15
21
+ Classifier: Programming Language :: Python :: Implementation :: CPython
22
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
23
+ License-File: LICENSE
24
+ Project-URL: Documentation, https://truststore.readthedocs.io
25
+ Project-URL: Source, https://github.com/sethmlarson/truststore
26
+
27
+ # Truststore
28
+
29
+ [![PyPI](https://img.shields.io/pypi/v/truststore)](https://pypi.org/project/truststore)
30
+ [![CI](https://github.com/sethmlarson/truststore/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/sethmlarson/truststore/actions/workflows/ci.yml)
31
+
32
+ Truststore is a library which exposes native system certificate stores (ie "trust stores")
33
+ through an `ssl.SSLContext`-like API. This means that Python applications no longer need to
34
+ rely on certifi as a root certificate store. Native system certificate stores
35
+ have many helpful features compared to a static certificate bundle like certifi:
36
+
37
+ - Automatically update certificates as new CAs are created and removed
38
+ - Fetch missing intermediate certificates
39
+ - Check certificates against certificate revocation lists (CRLs) to avoid monster-in-the-middle (MITM) attacks
40
+ - Managed per-system rather than per-application by a operations/IT team
41
+ - PyPI is no longer a CA distribution channel 🥳
42
+
43
+ Right now truststore is a stand-alone library that can be installed globally in your
44
+ application to immediately take advantage of the benefits in Python 3.10+. Truststore
45
+ has also been integrated into pip 24.2+ as the default method for verifying HTTPS
46
+ certificates (with a fallback to certifi).
47
+
48
+ Long-term the hope is to add this functionality into Python itself. Wish us luck!
49
+
50
+ ## Installation
51
+
52
+ Truststore is installed from [PyPI](https://pypi.org/project/truststore) with pip:
53
+
54
+ ```{code-block} shell
55
+ $ python -m pip install truststore
56
+ ```
57
+
58
+ Truststore **requires Python 3.10 or later** and supports the following platforms:
59
+ - macOS 10.8+ via [Security framework](https://developer.apple.com/documentation/security)
60
+ - Windows via [CryptoAPI](https://docs.microsoft.com/en-us/windows/win32/seccrypto/cryptography-functions#certificate-verification-functions)
61
+ - Linux via OpenSSL
62
+
63
+ ## User Guide
64
+
65
+ > **Warning**
66
+ > **PLEASE READ:** `inject_into_ssl()` **must not be used by libraries or packages** as it will cause issues on import time when integrated with other libraries.
67
+ > Libraries and packages should instead use `truststore.SSLContext` directly which is detailed below.
68
+ >
69
+ > The `inject_into_ssl()` function is intended only for use in applications and scripts.
70
+
71
+ You can inject `truststore` into the standard library `ssl` module so the functionality is used
72
+ by every library by default. To do so use the `truststore.inject_into_ssl()` function:
73
+
74
+ ```python
75
+ import truststore
76
+ truststore.inject_into_ssl()
77
+
78
+ # Automatically works with urllib3, requests, aiohttp, and more:
79
+ import urllib3
80
+ http = urllib3.PoolManager()
81
+ resp = http.request("GET", "https://example.com")
82
+
83
+ import aiohttp
84
+ http = aiohttp.ClientSession()
85
+ resp = await http.request("GET", "https://example.com")
86
+
87
+ import requests
88
+ resp = requests.get("https://example.com")
89
+ ```
90
+
91
+ If you'd like finer-grained control or you're developing a library or package you can create your own `truststore.SSLContext` instance
92
+ and use it anywhere you'd use an `ssl.SSLContext`:
93
+
94
+ ```python
95
+ import ssl
96
+ import truststore
97
+
98
+ ctx = truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
99
+
100
+ import urllib3
101
+ http = urllib3.PoolManager(ssl_context=ctx)
102
+ resp = http.request("GET", "https://example.com")
103
+ ```
104
+
105
+ You can read more in the [user guide in the documentation](https://truststore.readthedocs.io/en/latest/#user-guide).
106
+
107
+ ## License
108
+
109
+ MIT
110
+
@@ -0,0 +1,13 @@
1
+ truststore-0.10.5.dist-info/INSTALLER,sha256=5hhM4Q4mYTT9z6QB6PGpUAW81PGNFrYrdXMj4oM_6ak,2
2
+ truststore-0.10.5.dist-info/METADATA,sha256=H9SW8pCFMhTmMNlvcWPS3ZFvhOvmNLWKqCfWhT6PhhA,4515
3
+ truststore-0.10.5.dist-info/RECORD,,
4
+ truststore-0.10.5.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ truststore-0.10.5.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
6
+ truststore-0.10.5.dist-info/licenses/LICENSE,sha256=M757fo-k_Rmxdg4ajtimaL2rhSyRtpLdQUJLy3Jan8o,1086
7
+ truststore/__init__.py,sha256=pbihzIROul2l51JSJaFbrxLhRB_9u3Ol_ScM_w4WE64,1307
8
+ truststore/_api.py,sha256=L9h9Pz1-C2LfUHX-slr_TUGHiHrO11FXezhW6dFGa-o,13160
9
+ truststore/_macos.py,sha256=nZlLkOmszUE0g6ryRwBVGY5COzPyudcsiJtDWarM5LQ,20503
10
+ truststore/_openssl.py,sha256=r42qoqmCdS6kQsG9eNWBedYxgQhzs7_DW-nehrrOlAM,2370
11
+ truststore/_ssl_constants.py,sha256=LaCaVgQG4PNdNSh6Yfg4GxUM4BMa_PisxCAR4IFgYMU,1106
12
+ truststore/_windows.py,sha256=jWeQJoSJKq9hMxk_XUf6RpFViXcDcd9Guip6iMx9GCw,18035
13
+ truststore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: flit 3.12.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2022 Seth Michael Larson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/binary/brewdoc CHANGED
Binary file
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2022 Seth Michael Larson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -1,6 +1,6 @@
1
1
  [
2
2
  {
3
- "path": "licenses/installed/brewdoc/brewdoc-0.6.0.dist-info/licenses/LICENSE",
3
+ "path": "licenses/installed/brewdoc/brewdoc-0.7.1.dist-info/licenses/LICENSE",
4
4
  "bytes": 1073,
5
5
  "sha256": "0cd52b46f781dcd5dcc96c54afc72c007626beb3a60331430c02afde25cd60a9"
6
6
  },
@@ -188,5 +188,10 @@
188
188
  "path": "licenses/installed/selectolax/selectolax-0.4.13.dist-info/licenses/LICENSE",
189
189
  "bytes": 1077,
190
190
  "sha256": "d8c42c1875be7c97fdd54e7b5a36ad171e9bf9aedb7f2231ba1b34c15070921f"
191
+ },
192
+ {
193
+ "path": "licenses/installed/truststore/truststore-0.10.5.dist-info/licenses/LICENSE",
194
+ "bytes": 1086,
195
+ "sha256": "33be7b7e8fa4fd19b1760e1a8ed8a668bdab852c91b692dd41424bcb725a9fca"
191
196
  }
192
197
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.6.0",
3
- "source_sha": "49abdfac86a7459443ba7c3305edec9694f97af8",
2
+ "version": "0.7.1",
3
+ "source_sha": "59fefc96dcfb105cea394877849b0dd91e42804a",
4
4
  "python": "3.12.14",
5
5
  "target": "macos-arm64"
6
6
  }
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "archive": {
3
- "bytes": 32941284,
4
- "filename": "brewdoc-0.6.0-macos-arm64.tar.gz",
5
- "sha256": "8581b6021ca25e7fb67e94a05b270c2869ae3ce661f34c50da90ea4b4d17c595"
3
+ "bytes": 32984973,
4
+ "filename": "brewdoc-0.7.1-macos-arm64.tar.gz",
5
+ "sha256": "20b46150ff8ffabc51e4bfd1faa7a1124525581b6d7c1a8c50b7ddaa145a7e57"
6
6
  },
7
7
  "executable": "brewdoc/brewdoc",
8
8
  "inventory": {
@@ -188,73 +188,73 @@
188
188
  "bytes": 1333490,
189
189
  "kind": "file",
190
190
  "mode": 420,
191
- "sha256": "0605da7bdc1cb7b5a1de3c6866defa140e31632dc2b49aa72a4880e34b63f84a"
191
+ "sha256": "636b9541cd2fa43384417b55ff6728dd1fad1db70c006391f8b66e872de2784f"
192
192
  },
193
193
  "brewdoc/_internal/brewdoc": {
194
194
  "kind": "directory",
195
195
  "mode": 493
196
196
  },
197
- "brewdoc/_internal/brewdoc-0.6.0.dist-info": {
197
+ "brewdoc/_internal/brewdoc-0.7.1.dist-info": {
198
198
  "kind": "directory",
199
199
  "mode": 493
200
200
  },
201
- "brewdoc/_internal/brewdoc-0.6.0.dist-info/INSTALLER": {
201
+ "brewdoc/_internal/brewdoc-0.7.1.dist-info/INSTALLER": {
202
202
  "bytes": 2,
203
203
  "kind": "file",
204
204
  "mode": 420,
205
205
  "sha256": "e6184ce10e266134fdcfa401e8f1a95005bcd4f18d16b62b757323e2833fe9a9"
206
206
  },
207
- "brewdoc/_internal/brewdoc-0.6.0.dist-info/METADATA": {
208
- "bytes": 14751,
207
+ "brewdoc/_internal/brewdoc-0.7.1.dist-info/METADATA": {
208
+ "bytes": 16454,
209
209
  "kind": "file",
210
210
  "mode": 420,
211
- "sha256": "73c3177913db3aa680cf85a5d33158cfd9b779d56e1d1d734edd38bf21d95fda"
211
+ "sha256": "47232cd6433896abddb471f6dde00d1dc393315af0cc45bdf4f579e74b675e7c"
212
212
  },
213
- "brewdoc/_internal/brewdoc-0.6.0.dist-info/RECORD": {
213
+ "brewdoc/_internal/brewdoc-0.7.1.dist-info/RECORD": {
214
214
  "bytes": 2604,
215
215
  "kind": "file",
216
216
  "mode": 420,
217
- "sha256": "eed5704e30204d29a948b3804dc7fd8846e8afa500bc2bd859650e86f85162a5"
217
+ "sha256": "ed8b5486048997e165f41d5d2582515c6f4d760940ce04f1d69776ca534e7784"
218
218
  },
219
- "brewdoc/_internal/brewdoc-0.6.0.dist-info/REQUESTED": {
219
+ "brewdoc/_internal/brewdoc-0.7.1.dist-info/REQUESTED": {
220
220
  "bytes": 0,
221
221
  "kind": "file",
222
222
  "mode": 420,
223
223
  "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
224
224
  },
225
- "brewdoc/_internal/brewdoc-0.6.0.dist-info/WHEEL": {
225
+ "brewdoc/_internal/brewdoc-0.7.1.dist-info/WHEEL": {
226
226
  "bytes": 87,
227
227
  "kind": "file",
228
228
  "mode": 420,
229
229
  "sha256": "5b77e4a649bbfb07fdbc123967eeecd1e5a478cfaca6eefc23c35e6fdf037848"
230
230
  },
231
- "brewdoc/_internal/brewdoc-0.6.0.dist-info/direct_url.json": {
231
+ "brewdoc/_internal/brewdoc-0.7.1.dist-info/direct_url.json": {
232
232
  "bytes": 103,
233
233
  "kind": "file",
234
234
  "mode": 420,
235
- "sha256": "4789215156f3400c0cb1f499c5e33f5c5375b3a5ff63cbab1d43f5b4dc931572"
235
+ "sha256": "114089409c5885dedad206cba9045f4cf2f9a1158a5d78d7cc0b3861538ce488"
236
236
  },
237
- "brewdoc/_internal/brewdoc-0.6.0.dist-info/entry_points.txt": {
237
+ "brewdoc/_internal/brewdoc-0.7.1.dist-info/entry_points.txt": {
238
238
  "bytes": 45,
239
239
  "kind": "file",
240
240
  "mode": 420,
241
241
  "sha256": "6af2eb8f963e309d72ab45c59231f975b656f50c18424a67fe1cfab0dc9d6c0e"
242
242
  },
243
- "brewdoc/_internal/brewdoc-0.6.0.dist-info/licenses": {
243
+ "brewdoc/_internal/brewdoc-0.7.1.dist-info/licenses": {
244
244
  "kind": "directory",
245
245
  "mode": 493
246
246
  },
247
- "brewdoc/_internal/brewdoc-0.6.0.dist-info/licenses/LICENSE": {
247
+ "brewdoc/_internal/brewdoc-0.7.1.dist-info/licenses/LICENSE": {
248
248
  "bytes": 1073,
249
249
  "kind": "file",
250
250
  "mode": 420,
251
251
  "sha256": "0cd52b46f781dcd5dcc96c54afc72c007626beb3a60331430c02afde25cd60a9"
252
252
  },
253
- "brewdoc/_internal/brewdoc-0.6.0.dist-info/uv_cache.json": {
254
- "bytes": 127,
253
+ "brewdoc/_internal/brewdoc-0.7.1.dist-info/uv_cache.json": {
254
+ "bytes": 126,
255
255
  "kind": "file",
256
256
  "mode": 420,
257
- "sha256": "23c6f5e1fba3b518cbaef38c143e75bf1dbb72008e5772b81a8feeb4474bd2f4"
257
+ "sha256": "4230860ad9451522f1a70fd554564fba625ee375350c593c788346a4c0a3dcfa"
258
258
  },
259
259
  "brewdoc/_internal/brewdoc/_urljs": {
260
260
  "kind": "directory",
@@ -2210,11 +2210,55 @@
2210
2210
  "mode": 420,
2211
2211
  "sha256": "fe0f992e9acf81baafec12ecf9611ef0885b0ddfd04dc7e2af3fcd132475630c"
2212
2212
  },
2213
+ "brewdoc/_internal/truststore-0.10.5.dist-info": {
2214
+ "kind": "directory",
2215
+ "mode": 493
2216
+ },
2217
+ "brewdoc/_internal/truststore-0.10.5.dist-info/INSTALLER": {
2218
+ "bytes": 2,
2219
+ "kind": "file",
2220
+ "mode": 420,
2221
+ "sha256": "e6184ce10e266134fdcfa401e8f1a95005bcd4f18d16b62b757323e2833fe9a9"
2222
+ },
2223
+ "brewdoc/_internal/truststore-0.10.5.dist-info/METADATA": {
2224
+ "bytes": 4515,
2225
+ "kind": "file",
2226
+ "mode": 420,
2227
+ "sha256": "1fd496f290853214e630d96f7163d2dd916f84ebe634b58aa827d6853e8f8610"
2228
+ },
2229
+ "brewdoc/_internal/truststore-0.10.5.dist-info/RECORD": {
2230
+ "bytes": 1051,
2231
+ "kind": "file",
2232
+ "mode": 420,
2233
+ "sha256": "df0d4a94db9cbfa77b6659d958093e75f9b139d3eec5c73f55b91541e5de0a5f"
2234
+ },
2235
+ "brewdoc/_internal/truststore-0.10.5.dist-info/REQUESTED": {
2236
+ "bytes": 0,
2237
+ "kind": "file",
2238
+ "mode": 420,
2239
+ "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
2240
+ },
2241
+ "brewdoc/_internal/truststore-0.10.5.dist-info/WHEEL": {
2242
+ "bytes": 82,
2243
+ "kind": "file",
2244
+ "mode": 420,
2245
+ "sha256": "1b68144734c4b66791f27add5d425f3620775585718a03d0f9b110ba3a4d88db"
2246
+ },
2247
+ "brewdoc/_internal/truststore-0.10.5.dist-info/licenses": {
2248
+ "kind": "directory",
2249
+ "mode": 493
2250
+ },
2251
+ "brewdoc/_internal/truststore-0.10.5.dist-info/licenses/LICENSE": {
2252
+ "bytes": 1086,
2253
+ "kind": "file",
2254
+ "mode": 420,
2255
+ "sha256": "33be7b7e8fa4fd19b1760e1a8ed8a668bdab852c91b692dd41424bcb725a9fca"
2256
+ },
2213
2257
  "brewdoc/brewdoc": {
2214
- "bytes": 4022016,
2258
+ "bytes": 4064256,
2215
2259
  "kind": "file",
2216
2260
  "mode": 493,
2217
- "sha256": "ab3c72b5e4a15286b9692f39d52ef5e715c345e6ab3e73a5ce5414bb3db5e536"
2261
+ "sha256": "54fc142ac2a2ef97a8e19b043c34f2b586266648f44b1f6b0598c2262b371210"
2218
2262
  },
2219
2263
  "brewdoc/licenses": {
2220
2264
  "kind": "directory",
@@ -2225,10 +2269,10 @@
2225
2269
  "mode": 493
2226
2270
  },
2227
2271
  "brewdoc/licenses/installed-manifest.json": {
2228
- "bytes": 8106,
2272
+ "bytes": 8305,
2229
2273
  "kind": "file",
2230
2274
  "mode": 420,
2231
- "sha256": "1566f90d96f8f572f1a3b0bc3587ec3591af3fdd61df9a7ad1347cef4edb9005"
2275
+ "sha256": "053c4b723539c3188dff9904e37926be18bb32aa4b60e186a042dce47652ce41"
2232
2276
  },
2233
2277
  "brewdoc/licenses/installed/brewdoc": {
2234
2278
  "kind": "directory",
@@ -2238,15 +2282,15 @@
2238
2282
  "kind": "directory",
2239
2283
  "mode": 493
2240
2284
  },
2241
- "brewdoc/licenses/installed/brewdoc/brewdoc-0.6.0.dist-info": {
2285
+ "brewdoc/licenses/installed/brewdoc/brewdoc-0.7.1.dist-info": {
2242
2286
  "kind": "directory",
2243
2287
  "mode": 493
2244
2288
  },
2245
- "brewdoc/licenses/installed/brewdoc/brewdoc-0.6.0.dist-info/licenses": {
2289
+ "brewdoc/licenses/installed/brewdoc/brewdoc-0.7.1.dist-info/licenses": {
2246
2290
  "kind": "directory",
2247
2291
  "mode": 493
2248
2292
  },
2249
- "brewdoc/licenses/installed/brewdoc/brewdoc-0.6.0.dist-info/licenses/LICENSE": {
2293
+ "brewdoc/licenses/installed/brewdoc/brewdoc-0.7.1.dist-info/licenses/LICENSE": {
2250
2294
  "bytes": 1073,
2251
2295
  "kind": "file",
2252
2296
  "mode": 420,
@@ -2634,6 +2678,24 @@
2634
2678
  "mode": 420,
2635
2679
  "sha256": "d8c42c1875be7c97fdd54e7b5a36ad171e9bf9aedb7f2231ba1b34c15070921f"
2636
2680
  },
2681
+ "brewdoc/licenses/installed/truststore": {
2682
+ "kind": "directory",
2683
+ "mode": 493
2684
+ },
2685
+ "brewdoc/licenses/installed/truststore/truststore-0.10.5.dist-info": {
2686
+ "kind": "directory",
2687
+ "mode": 493
2688
+ },
2689
+ "brewdoc/licenses/installed/truststore/truststore-0.10.5.dist-info/licenses": {
2690
+ "kind": "directory",
2691
+ "mode": 493
2692
+ },
2693
+ "brewdoc/licenses/installed/truststore/truststore-0.10.5.dist-info/licenses/LICENSE": {
2694
+ "bytes": 1086,
2695
+ "kind": "file",
2696
+ "mode": 420,
2697
+ "sha256": "33be7b7e8fa4fd19b1760e1a8ed8a668bdab852c91b692dd41424bcb725a9fca"
2698
+ },
2637
2699
  "brewdoc/licenses/supplemental": {
2638
2700
  "kind": "directory",
2639
2701
  "mode": 493
@@ -4116,10 +4178,10 @@
4116
4178
  "bytes": 135,
4117
4179
  "kind": "file",
4118
4180
  "mode": 420,
4119
- "sha256": "b2e1ba41807f184c61e4cdf5f86ed4de6a6cde06af8642996bca7d6c7b852fd6"
4181
+ "sha256": "fed7ca115aca19fd1954be93cfafb3edc143cbab3cb225abd119f70ed72e6621"
4120
4182
  }
4121
4183
  },
4122
- "lock_sha256": "aaa02ff5914201a5696adae87176158d20d6e1dc37623cdffbbc67d8a005e81e",
4184
+ "lock_sha256": "b4f8690a4e740510d30b044ec4c2727a09e1c576bca0057ec895676c0453cd18",
4123
4185
  "minimum_tested": "macOS 15 on Apple Silicon",
4124
4186
  "oracle": [],
4125
4187
  "probes": [
@@ -4175,13 +4237,13 @@
4175
4237
  "artifact": {
4176
4238
  "bytes": 664,
4177
4239
  "key": "formula/sheet/000002",
4178
- "sha256": "a9ddfb5e8a1b5b922812f8adbc3d5cee5f480c198f52603812a850718f738c9d"
4240
+ "sha256": "cfb3c6482690790cbb843ca80ef86f11ad1e363ea4c8dbe418db93778958b1eb"
4179
4241
  },
4180
- "bytes_base64": "UEsDBBQAAAAAAMymUl3ZAU4y4wIAAOMCAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbDw/eG1sIHZlcnNpb249IjEuMCI/PjxUeXBlcyB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIj48RGVmYXVsdCBFeHRlbnNpb249InJlbHMiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCIvPjxPdmVycmlkZSBQYXJ0TmFtZT0iL3hsL3dvcmtib29rLnhtbCIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIi8+PE92ZXJyaWRlIFBhcnROYW1lPSIveGwvd29ya3NoZWV0cy9zaGVldDEueG1sIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCIvPjxPdmVycmlkZSBQYXJ0TmFtZT0iL3hsL3dvcmtzaGVldHMvc2hlZXQyLnhtbCIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiLz48T3ZlcnJpZGUgUGFydE5hbWU9Ii94bC93b3Jrc2hlZXRzL3NoZWV0My54bWwiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC53b3Jrc2hlZXQreG1sIi8+PC9UeXBlcz5QSwMEFAAAAAAAzKZSXUuDozoFAQAABQEAAAsAAABfcmVscy8ucmVsczw/eG1sIHZlcnNpb249IjEuMCI/PjxSZWxhdGlvbnNoaXBzIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiPjxSZWxhdGlvbnNoaXAgSWQ9InJJZDEiIFR5cGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiIFRhcmdldD0ieGwvd29ya2Jvb2sueG1sIi8+PC9SZWxhdGlvbnNoaXBzPlBLAwQUAAAAAADMplJdImE/o1IBAABSAQAADwAAAHhsL3dvcmtib29rLnhtbDw/eG1sIHZlcnNpb249IjEuMCI/Pjx3b3JrYm9vayB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIj48c2hlZXRzPjxzaGVldCBuYW1lPSJJbnB1dHMiIHNoZWV0SWQ9IjEiIHI6aWQ9InJJZDEiLz48c2hlZXQgbmFtZT0iQ2FsYyIgc2hlZXRJZD0iMiIgcjppZD0icklkMiIvPjxzaGVldCBuYW1lPSJFbXB0eSIgc2hlZXRJZD0iMyIgcjppZD0icklkMyIvPjwvc2hlZXRzPjwvd29ya2Jvb2s+UEsDBBQAAAAAAMymUl3JpmJ5IAIAACACAAAaAAAAeGwvX3JlbHMvd29ya2Jvb2sueG1sLnJlbHM8P3htbCB2ZXJzaW9uPSIxLjAiPz48UmVsYXRpb25zaGlwcyB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzIj48UmVsYXRpb25zaGlwIElkPSJySWQxIiBUeXBlPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIgVGFyZ2V0PSJ3b3Jrc2hlZXRzL3NoZWV0MS54bWwiLz48UmVsYXRpb25zaGlwIElkPSJySWQyIiBUeXBlPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIgVGFyZ2V0PSJ3b3Jrc2hlZXRzL3NoZWV0Mi54bWwiLz48UmVsYXRpb25zaGlwIElkPSJySWQzIiBUeXBlPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIgVGFyZ2V0PSJ3b3Jrc2hlZXRzL3NoZWV0My54bWwiLz48L1JlbGF0aW9uc2hpcHM+UEsDBBQAAAAAAMymUl3hQA/x9gAAAPYAAAAYAAAAeGwvd29ya3NoZWV0cy9zaGVldDEueG1sPHdvcmtzaGVldCB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIj48c2hlZXREYXRhPjxyb3cgcj0iMSI+PGMgcj0iQTEiPjx2PjE8L3Y+PC9jPjwvcm93Pjxyb3cgcj0iMiI+PGMgcj0iQTIiPjx2PjI8L3Y+PC9jPjwvcm93Pjxyb3cgcj0iMyI+PGMgcj0iQTMiPjxmPlNVTShBMTpBMik8L2Y+PHY+Mzwvdj48L2M+PC9yb3c+PC9zaGVldERhdGE+PC93b3Jrc2hlZXQ+UEsDBBQAAAAAAMymUl3R4blYmQEAAJkBAAAYAAAAeGwvd29ya3NoZWV0cy9zaGVldDIueG1sPHdvcmtzaGVldCB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIj48c2hlZXREYXRhPjxyb3cgcj0iMSI+PGMgcj0iQTEiPjxmPlNVTShJbnB1dHMhQTE6QTIpPC9mPjx2PjM8L3Y+PC9jPjxjIHI9IkIxIj48ZiB0PSJzaGFyZWQiIHJlZj0iQjE6QjIiIHNpPSI3Ij5JbnB1dHMhQTEqMjwvZj48dj4yPC92PjwvYz48L3Jvdz48cm93IHI9IjIiPjxjIHI9IkIyIj48ZiBzaT0iNyIgdD0ic2hhcmVkIi8+PHY+NDwvdj48L2M+PC9yb3c+PHJvdyByPSIzIj48YyByPSJDMyI+PGYgYng9IjAiIGFjYT0iMSI+SUYoQTEmbHQ7NCwmcXVvdDtjYWbDqSZxdW90OywmcXVvdDsmcXVvdDspPC9mPjx2PjE8L3Y+PC9jPjwvcm93Pjwvc2hlZXREYXRhPjwvd29ya3NoZWV0PlBLAwQUAAAAAADMplJdCntq/2UAAABlAAAAGAAAAHhsL3dvcmtzaGVldHMvc2hlZXQzLnhtbDx3b3Jrc2hlZXQgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiI+PHNoZWV0RGF0YS8+PC93b3Jrc2hlZXQ+UEsBAhQDFAAAAAAAzKZSXdkBTjLjAgAA4wIAABMAAAAAAAAAAAAAAIABAAAAAFtDb250ZW50X1R5cGVzXS54bWxQSwECFAMUAAAAAADMplJdS4OjOgUBAAAFAQAACwAAAAAAAAAAAAAAgAEUAwAAX3JlbHMvLnJlbHNQSwECFAMUAAAAAADMplJdImE/o1IBAABSAQAADwAAAAAAAAAAAAAAgAFCBAAAeGwvd29ya2Jvb2sueG1sUEsBAhQDFAAAAAAAzKZSXcmmYnkgAgAAIAIAABoAAAAAAAAAAAAAAIABwQUAAHhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzUEsBAhQDFAAAAAAAzKZSXeFAD/H2AAAA9gAAABgAAAAAAAAAAAAAAIABGQgAAHhsL3dvcmtzaGVldHMvc2hlZXQxLnhtbFBLAQIUAxQAAAAAAMymUl3R4blYmQEAAJkBAAAYAAAAAAAAAAAAAACAAUUJAAB4bC93b3Jrc2hlZXRzL3NoZWV0Mi54bWxQSwECFAMUAAAAAADMplJdCntq/2UAAABlAAAAGAAAAAAAAAAAAAAAgAEUCwAAeGwvd29ya3NoZWV0cy9zaGVldDMueG1sUEsFBgAAAAAHAAcA0QEAAK8LAAAAAA==",
4242
+ "bytes_base64": "UEsDBBQAAAAAAAaeU13ZAU4y4wIAAOMCAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbDw/eG1sIHZlcnNpb249IjEuMCI/PjxUeXBlcyB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIj48RGVmYXVsdCBFeHRlbnNpb249InJlbHMiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCIvPjxPdmVycmlkZSBQYXJ0TmFtZT0iL3hsL3dvcmtib29rLnhtbCIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIi8+PE92ZXJyaWRlIFBhcnROYW1lPSIveGwvd29ya3NoZWV0cy9zaGVldDEueG1sIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCIvPjxPdmVycmlkZSBQYXJ0TmFtZT0iL3hsL3dvcmtzaGVldHMvc2hlZXQyLnhtbCIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiLz48T3ZlcnJpZGUgUGFydE5hbWU9Ii94bC93b3Jrc2hlZXRzL3NoZWV0My54bWwiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC53b3Jrc2hlZXQreG1sIi8+PC9UeXBlcz5QSwMEFAAAAAAABp5TXUuDozoFAQAABQEAAAsAAABfcmVscy8ucmVsczw/eG1sIHZlcnNpb249IjEuMCI/PjxSZWxhdGlvbnNoaXBzIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiPjxSZWxhdGlvbnNoaXAgSWQ9InJJZDEiIFR5cGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiIFRhcmdldD0ieGwvd29ya2Jvb2sueG1sIi8+PC9SZWxhdGlvbnNoaXBzPlBLAwQUAAAAAAAGnlNdImE/o1IBAABSAQAADwAAAHhsL3dvcmtib29rLnhtbDw/eG1sIHZlcnNpb249IjEuMCI/Pjx3b3JrYm9vayB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIj48c2hlZXRzPjxzaGVldCBuYW1lPSJJbnB1dHMiIHNoZWV0SWQ9IjEiIHI6aWQ9InJJZDEiLz48c2hlZXQgbmFtZT0iQ2FsYyIgc2hlZXRJZD0iMiIgcjppZD0icklkMiIvPjxzaGVldCBuYW1lPSJFbXB0eSIgc2hlZXRJZD0iMyIgcjppZD0icklkMyIvPjwvc2hlZXRzPjwvd29ya2Jvb2s+UEsDBBQAAAAAAAaeU13JpmJ5IAIAACACAAAaAAAAeGwvX3JlbHMvd29ya2Jvb2sueG1sLnJlbHM8P3htbCB2ZXJzaW9uPSIxLjAiPz48UmVsYXRpb25zaGlwcyB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzIj48UmVsYXRpb25zaGlwIElkPSJySWQxIiBUeXBlPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIgVGFyZ2V0PSJ3b3Jrc2hlZXRzL3NoZWV0MS54bWwiLz48UmVsYXRpb25zaGlwIElkPSJySWQyIiBUeXBlPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIgVGFyZ2V0PSJ3b3Jrc2hlZXRzL3NoZWV0Mi54bWwiLz48UmVsYXRpb25zaGlwIElkPSJySWQzIiBUeXBlPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIgVGFyZ2V0PSJ3b3Jrc2hlZXRzL3NoZWV0My54bWwiLz48L1JlbGF0aW9uc2hpcHM+UEsDBBQAAAAAAAaeU13hQA/x9gAAAPYAAAAYAAAAeGwvd29ya3NoZWV0cy9zaGVldDEueG1sPHdvcmtzaGVldCB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIj48c2hlZXREYXRhPjxyb3cgcj0iMSI+PGMgcj0iQTEiPjx2PjE8L3Y+PC9jPjwvcm93Pjxyb3cgcj0iMiI+PGMgcj0iQTIiPjx2PjI8L3Y+PC9jPjwvcm93Pjxyb3cgcj0iMyI+PGMgcj0iQTMiPjxmPlNVTShBMTpBMik8L2Y+PHY+Mzwvdj48L2M+PC9yb3c+PC9zaGVldERhdGE+PC93b3Jrc2hlZXQ+UEsDBBQAAAAAAAaeU13R4blYmQEAAJkBAAAYAAAAeGwvd29ya3NoZWV0cy9zaGVldDIueG1sPHdvcmtzaGVldCB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIj48c2hlZXREYXRhPjxyb3cgcj0iMSI+PGMgcj0iQTEiPjxmPlNVTShJbnB1dHMhQTE6QTIpPC9mPjx2PjM8L3Y+PC9jPjxjIHI9IkIxIj48ZiB0PSJzaGFyZWQiIHJlZj0iQjE6QjIiIHNpPSI3Ij5JbnB1dHMhQTEqMjwvZj48dj4yPC92PjwvYz48L3Jvdz48cm93IHI9IjIiPjxjIHI9IkIyIj48ZiBzaT0iNyIgdD0ic2hhcmVkIi8+PHY+NDwvdj48L2M+PC9yb3c+PHJvdyByPSIzIj48YyByPSJDMyI+PGYgYng9IjAiIGFjYT0iMSI+SUYoQTEmbHQ7NCwmcXVvdDtjYWbDqSZxdW90OywmcXVvdDsmcXVvdDspPC9mPjx2PjE8L3Y+PC9jPjwvcm93Pjwvc2hlZXREYXRhPjwvd29ya3NoZWV0PlBLAwQUAAAAAAAGnlNdCntq/2UAAABlAAAAGAAAAHhsL3dvcmtzaGVldHMvc2hlZXQzLnhtbDx3b3Jrc2hlZXQgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiI+PHNoZWV0RGF0YS8+PC93b3Jrc2hlZXQ+UEsBAhQDFAAAAAAABp5TXdkBTjLjAgAA4wIAABMAAAAAAAAAAAAAAIABAAAAAFtDb250ZW50X1R5cGVzXS54bWxQSwECFAMUAAAAAAAGnlNdS4OjOgUBAAAFAQAACwAAAAAAAAAAAAAAgAEUAwAAX3JlbHMvLnJlbHNQSwECFAMUAAAAAAAGnlNdImE/o1IBAABSAQAADwAAAAAAAAAAAAAAgAFCBAAAeGwvd29ya2Jvb2sueG1sUEsBAhQDFAAAAAAABp5TXcmmYnkgAgAAIAIAABoAAAAAAAAAAAAAAIABwQUAAHhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzUEsBAhQDFAAAAAAABp5TXeFAD/H2AAAA9gAAABgAAAAAAAAAAAAAAIABGQgAAHhsL3dvcmtzaGVldHMvc2hlZXQxLnhtbFBLAQIUAxQAAAAAAAaeU13R4blYmQEAAJkBAAAYAAAAAAAAAAAAAACAAUUJAAB4bC93b3Jrc2hlZXRzL3NoZWV0Mi54bWxQSwECFAMUAAAAAAAGnlNdCntq/2UAAABlAAAAGAAAAAAAAAAAAAAAgAEUCwAAeGwvd29ya3NoZWV0cy9zaGVldDMueG1sUEsFBgAAAAAHAAcA0QEAAK8LAAAAAA==",
4181
4243
  "code": 0,
4182
4244
  "markdown_bytes": 2282,
4183
4245
  "markdown_encoding": "utf-8",
4184
- "markdown_sha256": "d74d81b171b0e229dda896d452fb1ef9a2868edb44fa1453422da840f208b713",
4246
+ "markdown_sha256": "40c6ac0bc4131079722c875e7850a87dfe76fa2d86d3bb7622cdbe3ec9a00d38",
4185
4247
  "path": "formulas.xlsx",
4186
4248
  "probe": "formula",
4187
4249
  "receipt": {
@@ -4245,7 +4307,7 @@
4245
4307
  "unit_kind": "sheet",
4246
4308
  "units": 3
4247
4309
  },
4248
- "source_sha256": "71c5b803feeb41d12b4fb5f185a6f5fb47f9f59c12d3131ddcd79ded84ec6ea8"
4310
+ "source_sha256": "3e9fa69a62e4bccad6158443fec7e4d79d22156d5fca4f5f9413aad4eb14016e"
4249
4311
  }
4250
4312
  ],
4251
4313
  "python": "3.12.14",
@@ -4309,6 +4371,10 @@
4309
4371
  "name": "python-calamine",
4310
4372
  "version": "0.8.2"
4311
4373
  },
4374
+ {
4375
+ "name": "brewdoc",
4376
+ "version": "0.7.1"
4377
+ },
4312
4378
  {
4313
4379
  "name": "pdfminer.six",
4314
4380
  "version": "20260107"
@@ -4325,6 +4391,10 @@
4325
4391
  "name": "pycparser",
4326
4392
  "version": "3.0"
4327
4393
  },
4394
+ {
4395
+ "name": "truststore",
4396
+ "version": "0.10.5"
4397
+ },
4328
4398
  {
4329
4399
  "name": "cffi",
4330
4400
  "version": "2.1.1"
@@ -4333,10 +4403,6 @@
4333
4403
  "name": "pdfplumber",
4334
4404
  "version": "0.11.10"
4335
4405
  },
4336
- {
4337
- "name": "brewdoc",
4338
- "version": "0.6.0"
4339
- },
4340
4406
  {
4341
4407
  "name": "pypdfium2",
4342
4408
  "version": "5.13.0"
@@ -4358,9 +4424,9 @@
4358
4424
  "macos": "Ad hoc build signature; no Developer ID signing or notarization",
4359
4425
  "windows": "Unsigned; publisher signing has not been configured"
4360
4426
  },
4361
- "source_sha": "49abdfac86a7459443ba7c3305edec9694f97af8",
4427
+ "source_sha": "59fefc96dcfb105cea394877849b0dd91e42804a",
4362
4428
  "target": "macos-arm64",
4363
4429
  "verification_scope": "smoke",
4364
- "version": "0.6.0",
4365
- "wheel_sha256": "3e6693bbac7f3c426542df374afb7ee65ac8bc8fac956add4e76ed61245b6b82"
4430
+ "version": "0.7.1",
4431
+ "wheel_sha256": "79f7dea14f5101efb707b10d5be2263aaefbd134d7dee81d02fd131bfc0ca933"
4366
4432
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "archive_sha256": "8581b6021ca25e7fb67e94a05b270c2869ae3ce661f34c50da90ea4b4d17c595",
2
+ "archive_sha256": "20b46150ff8ffabc51e4bfd1faa7a1124525581b6d7c1a8c50b7ddaa145a7e57",
3
3
  "children": {
4
4
  "dns": [
5
5
  "::1",
@@ -57,6 +57,9 @@
57
57
  "https": {
58
58
  "acquisition": {
59
59
  "capture_status": "static",
60
+ "challenge": null,
61
+ "charset": "UTF-8",
62
+ "charset_source": "header",
60
63
  "counts": {
61
64
  "promise_jobs": 0,
62
65
  "requests": 1,
@@ -67,6 +70,7 @@
67
70
  "error_count": 0,
68
71
  "errors": [],
69
72
  "final_url": "https://example.org/",
73
+ "http_status": 200,
70
74
  "mode": "static",
71
75
  "pending": {
72
76
  "jobs": null,
@@ -75,7 +79,9 @@
75
79
  "requests": null,
76
80
  "timers": null
77
81
  },
82
+ "redirect_count": 0,
78
83
  "refusal_stage": null,
84
+ "render_js": null,
79
85
  "requested_url": "https://example.org/",
80
86
  "response": {
81
87
  "body_bytes": 577,
@@ -143,6 +149,9 @@
143
149
  "invalid_tls": {
144
150
  "acquisition": {
145
151
  "capture_status": "refused",
152
+ "challenge": null,
153
+ "charset": null,
154
+ "charset_source": null,
146
155
  "counts": {
147
156
  "promise_jobs": 0,
148
157
  "requests": 1,
@@ -158,6 +167,7 @@
158
167
  }
159
168
  ],
160
169
  "final_url": null,
170
+ "http_status": null,
161
171
  "mode": "static",
162
172
  "pending": {
163
173
  "jobs": null,
@@ -166,7 +176,9 @@
166
176
  "requests": null,
167
177
  "timers": null
168
178
  },
179
+ "redirect_count": 0,
169
180
  "refusal_stage": "tls",
181
+ "render_js": null,
170
182
  "requested_url": "https://self-signed.badssl.com/",
171
183
  "response": {
172
184
  "body_bytes": null,
@@ -229,6 +241,9 @@
229
241
  "javascript": {
230
242
  "acquisition": {
231
243
  "capture_status": "partial",
244
+ "challenge": null,
245
+ "charset": "UTF-8",
246
+ "charset_source": "header",
232
247
  "counts": {
233
248
  "promise_jobs": 0,
234
249
  "requests": 2,
@@ -249,6 +264,7 @@
249
264
  }
250
265
  ],
251
266
  "final_url": "https://example.org/",
267
+ "http_status": 200,
252
268
  "mode": "javascript",
253
269
  "pending": {
254
270
  "jobs": false,
@@ -257,7 +273,9 @@
257
273
  "requests": 0,
258
274
  "timers": 0
259
275
  },
276
+ "redirect_count": 0,
260
277
  "refusal_stage": null,
278
+ "render_js": "always",
261
279
  "requested_url": "https://example.org/",
262
280
  "response": {
263
281
  "body_bytes": 577,
@@ -336,9 +354,9 @@
336
354
  ],
337
355
  "schema": 1,
338
356
  "self_check": 38,
339
- "source_sha": "49abdfac86a7459443ba7c3305edec9694f97af8",
357
+ "source_sha": "59fefc96dcfb105cea394877849b0dd91e42804a",
340
358
  "target": "macos-arm64",
341
359
  "verdict": "PASS",
342
360
  "verification_scope": "smoke",
343
- "version": "0.6.0"
361
+ "version": "0.7.1"
344
362
  }
package/package.json CHANGED
@@ -22,5 +22,5 @@
22
22
  "type": "git",
23
23
  "url": "git+https://github.com/kochetkov-ma/brewdoc.git"
24
24
  },
25
- "version": "0.6.0"
25
+ "version": "0.7.1"
26
26
  }
@@ -1 +0,0 @@
1
- {"url":"file:///Users/runner/work/_temp/ci-dist/dist/brewdoc-0.6.0-py3-none-any.whl","archive_info":{}}
@@ -1 +0,0 @@
1
- {"timestamp":{"secs_since_epoch":1792356859,"nanos_since_epoch":581216600},"commit":null,"tags":null,"env":{},"directories":{}}