page-markdown 0.2.0 → 0.3.0

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.
@@ -1,122 +1,122 @@
1
- # Additional Terms — AI Training and Commercial Use
2
-
3
- **Effective:** alongside the GNU Affero General Public License v3.0 (the "AGPL-3.0") that governs this Software, for versions of the Software published on or after the date this rider was first attached. Prior versions remain governed by their original license.
4
-
5
- These terms are intended to supplement the AGPL-3.0 under Section 7 to the maximum extent permitted. They state the WATT3D project's conditions for commercial use and AI model training. Redistribution of the Software, in source or object form, is permitted only if these terms accompany the Software in the same file or in a clearly-cross-referenced sibling file.
6
-
7
- If You want to make Commercial Use of the Software, or use the Software for AI model training, outside the public terms below, You need a separate commercial license from WATT3D.
8
-
9
- ---
10
-
11
- ## 1. Definitions
12
-
13
- **"You"** has the meaning given in the AGPL-3.0, and additionally includes any organization, employer, principal, or commercial entity on whose behalf You act when exercising rights under this license. Where multiple persons or entities collectively exercise the rights granted here (for example, a contractor working for a client), each is a "You" for the purposes of these terms.
14
-
15
- **"Software"** means the work licensed under AGPL-3.0 together with these additional terms, including its source code, comments, documentation, test fixtures, and accompanying assets. References to portions of the Software include copyrightable expression in those materials, including their selection and arrangement.
16
-
17
- **"AI Model"** means any machine-learning artifact whose parameters, weights, embeddings, lookup tables, retrieval indices, or equivalent learned state are derived, in whole or in any part, from a training, fine-tuning, distillation, retrieval-augmentation index-building, or analogous data-driven process.
18
-
19
- **"Open Weights"** means that **all** of the following are published, free of cost and free of any registration, authentication, or access gate, at a stable public URL, under a license no more restrictive than the AGPL-3.0 with respect to redistribution, modification, and further use:
20
-
21
- 1. The complete trained parameters of the AI Model.
22
- 2. The tokenizer, vocabulary, or equivalent pre-processing artifacts required to run inference.
23
- 3. A textual description of the model architecture sufficient for an independent party to load and run the parameters.
24
- 4. Inference code, or a clear pointer to a public inference implementation, sufficient to use the AI Model.
25
-
26
- Quantization, distillation, or pruning of the AI Model does not satisfy Open Weights unless the artifacts above are released for the full-precision trained model.
27
-
28
- **"Fully Open Source"** means that every software work owned, controlled, distributed, or operated by You — including all internal tools, services, infrastructure, and products that involve software, whether or not they incorporate the Software — is publicly released under an OSI-approved license at least as protective of downstream freedoms as the AGPL-3.0, with the source code published in its preferred form for modification at a stable public URL, free of cost and free of any registration, authentication, or access gate.
29
-
30
- Non-software business assets — token holdings, financial records, customer data, employee records, corporate governance documents, trade-secret information that does not exist in software form, and the like — are not subject to this requirement. Hardware designs, model weights, configuration, and infrastructure-as-code artifacts that are themselves software, are subject to it.
31
-
32
- **"Training Use"** means using the Software, or any portion of the Software of any size, or any work derived from any portion of the Software, as input to:
33
-
34
- 1. The training of an AI Model from initialization;
35
- 2. The fine-tuning, instruction-tuning, RLHF, DPO, or analogous post-training adjustment of an AI Model;
36
- 3. The distillation, knowledge-transfer, or output-based training from (i) any AI Model that was itself produced through Training Use of the Software, or (ii) any AI Model whose outputs You knew or reasonably should have known to reflect Training Use of the Software — including chained or multi-hop distillation through one or more intermediate models;
37
- 4. The construction of a retrieval-augmented generation (RAG) corpus or vector index, whether the resulting system is offered externally, internally, or kept private.
38
-
39
- The fraction, weighting, materiality, or marginal contribution of the Software to the resulting AI Model is **irrelevant** to whether Training Use has occurred. Inclusion of any quantity of the Software — or of any work derived from any portion of the Software — in any of the above is Training Use, regardless of the model's size, the size of the training mixture, or the degree to which the Software measurably influences the model's outputs.
40
-
41
- **"Derivative Model"** means any AI Model produced through Training Use of the Software.
42
-
43
- **"Commercial Use"** means any use of the Software, or of any Derivative Model, in connection with an activity for which You receive, expect to receive, or compete to receive direct or indirect compensation. This includes but is not limited to:
44
-
45
- 1. Distribution, sale, licensing, or hosted offering of products or services that incorporate or depend on the Software;
46
- 2. Internal use of the Software within a for-profit organization, or within any organization that derives revenue from software, software services, AI services, or data services;
47
- 3. Training, fine-tuning, evaluating, distilling, or operating any AI Model that is itself offered commercially, used internally by a commercial entity, or expected to contribute (directly or indirectly) to commercial activity;
48
- 4. Use of the Software as part of, or in support of, the research, development, evaluation, or operation of any commercial product, service, model, or infrastructure.
49
-
50
- **Training Use is Commercial Use**, regardless of the immediate purpose of the training run, except as expressly exempted in Section 4(c) for non-commercial academic research.
51
-
52
- ## 2. Commercial Use Restriction
53
-
54
- Commercial Use of the Software, or of any Derivative Model, is permitted only if You are **Fully Open Source** at the time of, and throughout, that Commercial Use.
55
-
56
- If You are not Fully Open Source, You must not engage in Commercial Use of the Software or of any Derivative Model. The only permitted alternatives are:
57
-
58
- (a) bring all software works You own, control, distribute, or operate into compliance with the Fully Open Source definition before continuing Commercial Use; or
59
-
60
- (b) obtain a separate commercial license from WATT3D before continuing Commercial Use; or
61
-
62
- (c) cease all Commercial Use of the Software and of any Derivative Model, and remove the Software from any commercial product, service, or training pipeline within thirty (30) days of becoming aware of the breach.
63
-
64
- This restriction is in addition to, and does not replace, the obligations imposed by the AGPL-3.0 itself.
65
-
66
- ## 3. Open-Weight Reciprocity
67
-
68
- Independently of Section 2, if You make Training Use of the Software, then on or before the date of any deployment, public release, internal use, or further training that exposes the resulting Derivative Model to use by any person or system — whichever occurs first — You must release that Derivative Model under **Open Weights**.
69
-
70
- This obligation applies:
71
-
72
- - whether or not the Derivative Model is offered to the public;
73
- - whether or not You are Fully Open Source;
74
- - regardless of the Derivative Model's size, parameter count, architecture, or capability;
75
- - regardless of the size of the training mixture or the fraction of the mixture composed of the Software;
76
- - regardless of the degree to which the Software influences the Derivative Model's measurable behavior.
77
-
78
- This obligation does not require You to release training data, training code, or training-time hyperparameters — only the artifacts enumerated in the Open Weights definition.
79
-
80
- ## 4. Exemptions
81
-
82
- The following uses of the Software are **exempt** from Sections 2 and 3:
83
-
84
- **(a) Transient analysis.** Reading the Software for code review, search indexing, linting, static analysis, or single-prompt code understanding by an AI assistant operating in a per-session context, where (i) no persistent model parameters are updated as a result, and (ii) no portion of the Software is retained in any corpus, index, cache, fine-tuning dataset, or other artifact used for later training or retrieval.
85
-
86
- **(b) Personal, non-commercial use.** Use of the Software by a natural person outside the scope of employment, contracting, or for-profit activity, where no Derivative Model is produced and no Commercial Use occurs.
87
-
88
- **(c) Academic research.** Non-commercial academic research conducted at, or on behalf of, an accredited academic institution or recognized non-profit research organization, by individuals acting in their academic capacity. Where industry-affiliated researchers participate, the use is exempt only to the extent the research is unfunded by, and not directed by, a commercial sponsor. Any Derivative Model produced under this exemption must be released under Open Weights within twelve (12) months of the first public disclosure (including any preprint, conference talk, or arXiv submission) of related results.
89
-
90
- **(d) Attributed citation in human-readable works.** Inclusion of short, attributed quotations from the Software in human-readable works — for example, documentation, blog posts, books, slide decks, or academic citations — provided that such quotations are not used as, or assembled into, training input for any AI Model. This exemption does not authorize bulk inclusion in a training corpus by any path, regardless of the corpus's overall size or composition.
91
-
92
- ## 5. Notice Requirement
93
-
94
- Anyone exercising the rights granted by the AGPL-3.0 in conjunction with these additional terms must retain, in all source and binary distributions:
95
-
96
- 1. The text of the AGPL-3.0 license;
97
- 2. This rider, in full;
98
- 3. All prior copyright notices on the Software.
99
-
100
- These notices may be carried in a single file or in clearly-cross-referenced sibling files, but must remain readily discoverable from the project root.
101
-
102
- ## 6. Compatibility and Severability
103
-
104
- These additional terms are intended to be compatible with the AGPL-3.0 under Section 7 thereof. If a court of competent jurisdiction finds any specific provision of this rider incompatible with the AGPL-3.0 or otherwise unenforceable, that provision shall be severed and the remainder of the rider and the AGPL-3.0 shall remain in full force. With respect to parties affected by the severance, the Software remains licensed under the AGPL-3.0 alone, and any reciprocity or Commercial Use obligation under this rider shall apply only to the extent it can be reconciled with the AGPL-3.0 grants.
105
-
106
- ## 7. Termination and Cure
107
-
108
- The rights granted under the AGPL-3.0 and this rider terminate automatically upon Your material breach of these additional terms. The rights are reinstated:
109
-
110
- (a) **Automatically**, as described in AGPL-3.0 Section 8, if within thirty (30) days of becoming aware of the breach, or of receiving notice of the breach from the copyright holder (whichever is earlier), You either (i) bring Yourself into compliance — including, where applicable, by becoming Fully Open Source, obtaining a separate commercial license, and/or releasing all required Derivative Models under Open Weights — or (ii) cease all Commercial Use of the Software and of any Derivative Model and remove the Software from all commercial pipelines;
111
-
112
- (b) **By express reinstatement** from the copyright holder, as described in AGPL-3.0 Section 8, where reinstatement under (a) is not available.
113
-
114
- Nothing in this Section limits the reinstatement mechanics provided by AGPL-3.0 Section 8; this Section supplements them with a specific cure window for the obligations introduced by this rider.
115
-
116
- ## 8. Acceptance
117
-
118
- Use, modification, or distribution of the Software, or any Training Use or Commercial Use as defined above, constitutes acceptance of these additional terms.
119
-
120
- ---
121
-
122
- Copyright © 2026 WATT3D. All rights reserved beyond the grants under the AGPL-3.0 and this rider.
1
+ # Additional Terms — AI Training and Commercial Use
2
+
3
+ **Effective:** alongside the GNU Affero General Public License v3.0 (the "AGPL-3.0") that governs this Software, for versions of the Software published on or after the date this rider was first attached. Prior versions remain governed by their original license.
4
+
5
+ These terms are intended to supplement the AGPL-3.0 under Section 7 to the maximum extent permitted. They state the WATT3D project's conditions for commercial use and AI model training. Redistribution of the Software, in source or object form, is permitted only if these terms accompany the Software in the same file or in a clearly-cross-referenced sibling file.
6
+
7
+ If You want to make Commercial Use of the Software, or use the Software for AI model training, outside the public terms below, You need a separate commercial license from WATT3D.
8
+
9
+ ---
10
+
11
+ ## 1. Definitions
12
+
13
+ **"You"** has the meaning given in the AGPL-3.0, and additionally includes any organization, employer, principal, or commercial entity on whose behalf You act when exercising rights under this license. Where multiple persons or entities collectively exercise the rights granted here (for example, a contractor working for a client), each is a "You" for the purposes of these terms.
14
+
15
+ **"Software"** means the work licensed under AGPL-3.0 together with these additional terms, including its source code, comments, documentation, test fixtures, and accompanying assets. References to portions of the Software include copyrightable expression in those materials, including their selection and arrangement.
16
+
17
+ **"AI Model"** means any machine-learning artifact whose parameters, weights, embeddings, lookup tables, retrieval indices, or equivalent learned state are derived, in whole or in any part, from a training, fine-tuning, distillation, retrieval-augmentation index-building, or analogous data-driven process.
18
+
19
+ **"Open Weights"** means that **all** of the following are published, free of cost and free of any registration, authentication, or access gate, at a stable public URL, under a license no more restrictive than the AGPL-3.0 with respect to redistribution, modification, and further use:
20
+
21
+ 1. The complete trained parameters of the AI Model.
22
+ 2. The tokenizer, vocabulary, or equivalent pre-processing artifacts required to run inference.
23
+ 3. A textual description of the model architecture sufficient for an independent party to load and run the parameters.
24
+ 4. Inference code, or a clear pointer to a public inference implementation, sufficient to use the AI Model.
25
+
26
+ Quantization, distillation, or pruning of the AI Model does not satisfy Open Weights unless the artifacts above are released for the full-precision trained model.
27
+
28
+ **"Fully Open Source"** means that every software work owned, controlled, distributed, or operated by You — including all internal tools, services, infrastructure, and products that involve software, whether or not they incorporate the Software — is publicly released under an OSI-approved license at least as protective of downstream freedoms as the AGPL-3.0, with the source code published in its preferred form for modification at a stable public URL, free of cost and free of any registration, authentication, or access gate.
29
+
30
+ Non-software business assets — token holdings, financial records, customer data, employee records, corporate governance documents, trade-secret information that does not exist in software form, and the like — are not subject to this requirement. Hardware designs, model weights, configuration, and infrastructure-as-code artifacts that are themselves software, are subject to it.
31
+
32
+ **"Training Use"** means using the Software, or any portion of the Software of any size, or any work derived from any portion of the Software, as input to:
33
+
34
+ 1. The training of an AI Model from initialization;
35
+ 2. The fine-tuning, instruction-tuning, RLHF, DPO, or analogous post-training adjustment of an AI Model;
36
+ 3. The distillation, knowledge-transfer, or output-based training from (i) any AI Model that was itself produced through Training Use of the Software, or (ii) any AI Model whose outputs You knew or reasonably should have known to reflect Training Use of the Software — including chained or multi-hop distillation through one or more intermediate models;
37
+ 4. The construction of a retrieval-augmented generation (RAG) corpus or vector index, whether the resulting system is offered externally, internally, or kept private.
38
+
39
+ The fraction, weighting, materiality, or marginal contribution of the Software to the resulting AI Model is **irrelevant** to whether Training Use has occurred. Inclusion of any quantity of the Software — or of any work derived from any portion of the Software — in any of the above is Training Use, regardless of the model's size, the size of the training mixture, or the degree to which the Software measurably influences the model's outputs.
40
+
41
+ **"Derivative Model"** means any AI Model produced through Training Use of the Software.
42
+
43
+ **"Commercial Use"** means any use of the Software, or of any Derivative Model, in connection with an activity for which You receive, expect to receive, or compete to receive direct or indirect compensation. This includes but is not limited to:
44
+
45
+ 1. Distribution, sale, licensing, or hosted offering of products or services that incorporate or depend on the Software;
46
+ 2. Internal use of the Software within a for-profit organization, or within any organization that derives revenue from software, software services, AI services, or data services;
47
+ 3. Training, fine-tuning, evaluating, distilling, or operating any AI Model that is itself offered commercially, used internally by a commercial entity, or expected to contribute (directly or indirectly) to commercial activity;
48
+ 4. Use of the Software as part of, or in support of, the research, development, evaluation, or operation of any commercial product, service, model, or infrastructure.
49
+
50
+ **Training Use is Commercial Use**, regardless of the immediate purpose of the training run, except as expressly exempted in Section 4(c) for non-commercial academic research.
51
+
52
+ ## 2. Commercial Use Restriction
53
+
54
+ Commercial Use of the Software, or of any Derivative Model, is permitted only if You are **Fully Open Source** at the time of, and throughout, that Commercial Use.
55
+
56
+ If You are not Fully Open Source, You must not engage in Commercial Use of the Software or of any Derivative Model. The only permitted alternatives are:
57
+
58
+ (a) bring all software works You own, control, distribute, or operate into compliance with the Fully Open Source definition before continuing Commercial Use; or
59
+
60
+ (b) obtain a separate commercial license from WATT3D before continuing Commercial Use; or
61
+
62
+ (c) cease all Commercial Use of the Software and of any Derivative Model, and remove the Software from any commercial product, service, or training pipeline within thirty (30) days of becoming aware of the breach.
63
+
64
+ This restriction is in addition to, and does not replace, the obligations imposed by the AGPL-3.0 itself.
65
+
66
+ ## 3. Open-Weight Reciprocity
67
+
68
+ Independently of Section 2, if You make Training Use of the Software, then on or before the date of any deployment, public release, internal use, or further training that exposes the resulting Derivative Model to use by any person or system — whichever occurs first — You must release that Derivative Model under **Open Weights**.
69
+
70
+ This obligation applies:
71
+
72
+ - whether or not the Derivative Model is offered to the public;
73
+ - whether or not You are Fully Open Source;
74
+ - regardless of the Derivative Model's size, parameter count, architecture, or capability;
75
+ - regardless of the size of the training mixture or the fraction of the mixture composed of the Software;
76
+ - regardless of the degree to which the Software influences the Derivative Model's measurable behavior.
77
+
78
+ This obligation does not require You to release training data, training code, or training-time hyperparameters — only the artifacts enumerated in the Open Weights definition.
79
+
80
+ ## 4. Exemptions
81
+
82
+ The following uses of the Software are **exempt** from Sections 2 and 3:
83
+
84
+ **(a) Transient analysis.** Reading the Software for code review, search indexing, linting, static analysis, or single-prompt code understanding by an AI assistant operating in a per-session context, where (i) no persistent model parameters are updated as a result, and (ii) no portion of the Software is retained in any corpus, index, cache, fine-tuning dataset, or other artifact used for later training or retrieval.
85
+
86
+ **(b) Personal, non-commercial use.** Use of the Software by a natural person outside the scope of employment, contracting, or for-profit activity, where no Derivative Model is produced and no Commercial Use occurs.
87
+
88
+ **(c) Academic research.** Non-commercial academic research conducted at, or on behalf of, an accredited academic institution or recognized non-profit research organization, by individuals acting in their academic capacity. Where industry-affiliated researchers participate, the use is exempt only to the extent the research is unfunded by, and not directed by, a commercial sponsor. Any Derivative Model produced under this exemption must be released under Open Weights within twelve (12) months of the first public disclosure (including any preprint, conference talk, or arXiv submission) of related results.
89
+
90
+ **(d) Attributed citation in human-readable works.** Inclusion of short, attributed quotations from the Software in human-readable works — for example, documentation, blog posts, books, slide decks, or academic citations — provided that such quotations are not used as, or assembled into, training input for any AI Model. This exemption does not authorize bulk inclusion in a training corpus by any path, regardless of the corpus's overall size or composition.
91
+
92
+ ## 5. Notice Requirement
93
+
94
+ Anyone exercising the rights granted by the AGPL-3.0 in conjunction with these additional terms must retain, in all source and binary distributions:
95
+
96
+ 1. The text of the AGPL-3.0 license;
97
+ 2. This rider, in full;
98
+ 3. All prior copyright notices on the Software.
99
+
100
+ These notices may be carried in a single file or in clearly-cross-referenced sibling files, but must remain readily discoverable from the project root.
101
+
102
+ ## 6. Compatibility and Severability
103
+
104
+ These additional terms are intended to be compatible with the AGPL-3.0 under Section 7 thereof. If a court of competent jurisdiction finds any specific provision of this rider incompatible with the AGPL-3.0 or otherwise unenforceable, that provision shall be severed and the remainder of the rider and the AGPL-3.0 shall remain in full force. With respect to parties affected by the severance, the Software remains licensed under the AGPL-3.0 alone, and any reciprocity or Commercial Use obligation under this rider shall apply only to the extent it can be reconciled with the AGPL-3.0 grants.
105
+
106
+ ## 7. Termination and Cure
107
+
108
+ The rights granted under the AGPL-3.0 and this rider terminate automatically upon Your material breach of these additional terms. The rights are reinstated:
109
+
110
+ (a) **Automatically**, as described in AGPL-3.0 Section 8, if within thirty (30) days of becoming aware of the breach, or of receiving notice of the breach from the copyright holder (whichever is earlier), You either (i) bring Yourself into compliance — including, where applicable, by becoming Fully Open Source, obtaining a separate commercial license, and/or releasing all required Derivative Models under Open Weights — or (ii) cease all Commercial Use of the Software and of any Derivative Model and remove the Software from all commercial pipelines;
111
+
112
+ (b) **By express reinstatement** from the copyright holder, as described in AGPL-3.0 Section 8, where reinstatement under (a) is not available.
113
+
114
+ Nothing in this Section limits the reinstatement mechanics provided by AGPL-3.0 Section 8; this Section supplements them with a specific cure window for the obligations introduced by this rider.
115
+
116
+ ## 8. Acceptance
117
+
118
+ Use, modification, or distribution of the Software, or any Training Use or Commercial Use as defined above, constitutes acceptance of these additional terms.
119
+
120
+ ---
121
+
122
+ Copyright © 2026 WATT3D. All rights reserved beyond the grants under the AGPL-3.0 and this rider.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,85 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## 0.3.0 — 2026-11-13
6
+
7
+ - Build the live-style report with `npm run report:build`, then open `.browser-test/concealment-report.html` in an already running browser.
8
+
9
+ - **Opt-in:** enable `detectConcealedText: true` to separate text concealed by
10
+ supported live source-document computed styles:
11
+ `display:none`, hidden/collapsed visibility, zero opacity, zero font size and
12
+ supported empty clips (including nonzero zero-area rects; legacy `clip`
13
+ requires absolute/fixed positioning), transparent text and text exactly
14
+ matching its own or nearest opaque background
15
+ into capped `concealedText`, with uncapped omission
16
+ counts and notices in both Markdown outputs. Detection is off by default;
17
+ HELIOS enables it explicitly. Default-on is withdrawn for 0.3.0 and will be
18
+ reconsidered after a real-site trial. Disabled detection makes no style calls.
19
+ Static documents retain previous output.
20
+ Whitespace-only groups are excluded from entries, totals, truncation and
21
+ notices, also correcting slice 1; substantive groups retain original
22
+ whitespace and UTF-16 counts.
23
+ Source whitespace is removed for display-none and zero-font-size runs; other
24
+ reasons retain whitespace-only runs and replace substantive runs with one
25
+ ordinary space only when their original text starts or ends with JavaScript
26
+ whitespace.
27
+ The check reports computed, static-only, disabled or incomplete capability.
28
+ Short tabs and existing answer/code exceptions remain; independent reasons
29
+ still lift text and can change extraction choice and tab omissions.
30
+ Opacity-applicable transitions and named animations with nonzero durations
31
+ retain text with a warning; this scroll-reveal rule remains provisional
32
+ pending real-site evidence and Astra review.
33
+ Colour detection handles computed sRGB rgb()/rgba() only, for own text.
34
+ OKLCH and Display P3 computed colours are not parsed, so even white text on
35
+ white in those forms can stay in the output.
36
+ Measured in Chrome 157 on Windows, on one machine, using synthetic pages
37
+ of 20,006 elements built from `95bf97d`, with five warmed alternating pairs
38
+ per page: full conversion with detection added a paired-median 100.5 ms
39
+ on the deep page and 108.5 ms on the shallow page, about 12.5% each.
40
+ Both full-conversion targets (at most 25% and at most 250 ms added) were met.
41
+ The sanitize stage with detection (including preparation and lift) added
42
+ about 127 ms on either page. The earlier candidate (`2a3b0b5`) added about
43
+ 442 ms deep and 340 ms shallow by a difference of medians, which is not
44
+ directly comparable. This is not a general performance guarantee;
45
+ real-site cost is not yet measured.
46
+ Chrome is the only browser tested; Firefox and
47
+ Safari are untested.
48
+ Unknown colours, missing opaque backgrounds, intervening translucent layers
49
+ or images, text clipping, differing text fill, shadows and strokes prevent
50
+ equality detection. Fully transparent text fill is detected when no other
51
+ effect paints the text. Near-colour matches and partially transparent text
52
+ with non-zero alpha (including alpha 0.01) are not detected. White text on a
53
+ page with no declared
54
+ opaque background is not detected: the root background is unknown.
55
+
56
+ - Boxes a page marks as skippable are left out of the article: a box that opens with a
57
+ link to the end marker it closes with, as BBC's "most read" and podcast boxes do in
58
+ every language. Boxes holding a quote, embed, code or table stay.
59
+ - Malformed web links keep their text without a link even in browsers that accept spaces in hostnames.
60
+ - Table cells with `rowspan="0"` span to the end of their row group, including with `colspan`.
61
+ - Text-only output keeps image alt text without URL fragments from parentheses or titles.
62
+ - Captions survive in single-column, nested and code-bearing tables.
63
+
64
+ - **AP News linked names to impossible web addresses.** Malformed hrefs such as
65
+ `https://ron%20desantis/` now keep their text without a link when a base URL is
66
+ available.
67
+ - **Linked story headings stay headings.** On BBC News, card headlines appeared
68
+ inside link text and the logo left an empty heading. Headlines now link from
69
+ real headings, card text and images stay, and emptied headings are removed.
70
+ - **Note labels stay.** Readability removed Docker's `.admonition-header` because
71
+ its name holds "header", so its Warning, Note and Tip labels were lost. Each now
72
+ opens its blockquote in bold.
73
+ - **Spanned cells fill their columns.** A cell with `colspan` used to fill one
74
+ column and leave blanks, so Tailscale's "Unlimited" across all plans read as
75
+ Personal only. Its value now repeats in each column it covers, except when it
76
+ spans the whole row, as a caption does.
77
+ - **FAQ answers inside `<details>` survive.** Readability dropped a one-paragraph
78
+ answer wrapper with a link in it: Tailscale's answer on SSH check mode.
79
+ - **Ars Technica's MacBook Pro review repeated photo captions and left its kicker
80
+ as body text.** Matching lightbox captions and image descriptions now appear
81
+ once, distinct alt text and gallery images stay, and the kicker reads as a label.
82
+
3
83
  ## 0.2.0 — 2026-11-07
4
84
 
5
85
  Fixes for silent content loss, found by live runs in a real extension (HELIOS, in