feat: publish Regex Tools 0.2.0

This commit is contained in:
2026-07-27 01:06:57 +02:00
parent 873b9b218d
commit 4951c966d4
180 changed files with 35344 additions and 503 deletions

View File

@@ -1,5 +1,9 @@
import { useEffect, useRef } from "react";
import { DEFAULT_REGEX_LIMITS } from "../regex/execution/request-limits";
import {
DEFAULT_GENERATION_SETTINGS,
GENERATION_LIMITS,
} from "../regex/generation/generation-limits";
import { manifest } from "../toolbox/manifest";
const releaseSourceUrl = `https://git.add-ideas.de/zemion/regex-tools/src/tag/v${manifest.version}`;
@@ -43,10 +47,11 @@ export function HelpDialog({
<section>
<h3>What runs where</h3>
<p>
Syntax parsing and actual ECMAScript execution run in separate,
killable browser workers. Patterns, subjects and projects are never
uploaded. There is no backend, account, telemetry, CDN dependency,
or executable replacement function.
Syntax parsing and actual ECMAScript or PCRE2 execution run in
separate, killable browser workers. PCRE2 is the bundled,
self-hosted 10.47 WebAssembly engine. Patterns, subjects and
projects are never uploaded. There is no backend, account,
telemetry, CDN dependency, or executable replacement function.
</p>
</section>
<section>
@@ -56,8 +61,47 @@ export function HelpDialog({
syntax provider. The extraction tree contains actual browser-engine
matches and captures. Replacement mode adds a typed token tree and
bounded per-match contribution/range mapping over those actual
matches. None is an internal V8, SpiderMonkey or JavaScriptCore
execution trace.
matches. These views are not internal engine traces. The separate
PCRE trace viewer shows actual bounded automatic callouts reported
by PCRE2; its adjacent-position movement labels are derived and it
is not a complete record of every internal action. Browser
ECMAScript exposes no corresponding V8, SpiderMonkey or
JavaScriptCore trace API.
</p>
</section>
<section>
<h3>Advisory analysis</h3>
<p>
Static risk findings are ECMAScript-2025-specific heuristics, and
generated-input growth observations describe only the selected
bounded samples. Neither proves safety or general complexity. Growth
and cold/warm benchmark timing run in a separate killable worker and
never include the PCRE2 trace path.
</p>
</section>
<section>
<h3>Generated cases</h3>
<p>
ECMAScript generator v1 deterministically samples supported
normalized-AST paths from an explicit seed. Every intended positive
and negative subject runs through the selected actual engine before
it can become a test; candidates with the wrong outcome are
discarded. The coverage report names unsupported constructs.
Sampling is not proof of complete language coverage. PCRE2 remains
unavailable until its structural provider exposes the required AST;
its syntax is never reinterpreted as ECMAScript.
</p>
</section>
<section>
<h3>Pattern formatting</h3>
<p>
The ECMAScript formatter makes only grammar-backed literal/control
escape changes; it does not insert layout whitespace or reinterpret
PCRE2 syntax. Applying a preview requires independent source and
candidate reparsing, actual-engine match/replacement comparison,
every applicable exact unit test, and an explicit confirmation.
Passing bounded checks is evidence for those snapshots, not proof
for every possible subject.
</p>
</section>
<section>
@@ -105,6 +149,78 @@ export function HelpDialog({
<dt>Unit-test suite wall time</dt>
<dd>60 seconds</dd>
</div>
<div>
<dt>Corpus input</dt>
<dd>
{DEFAULT_REGEX_LIMITS.maximumCorpusDocuments.toLocaleString()}{" "}
documents · {DEFAULT_REGEX_LIMITS.corpusHardBytes / 1024 / 1024}{" "}
MiB
</dd>
</div>
<div>
<dt>Corpus wall time</dt>
<dd>
{DEFAULT_REGEX_LIMITS.maximumCorpusWallTimeMs / 60_000} minutes
</dd>
</div>
<div>
<dt>Analysis wall time</dt>
<dd>
{DEFAULT_REGEX_LIMITS.maximumBenchmarkWallTimeMs / 1_000}{" "}
seconds
</dd>
</div>
<div>
<dt>Benchmark iteration cap</dt>
<dd>
{DEFAULT_REGEX_LIMITS.maximumBenchmarkIterations.toLocaleString()}
</dd>
</div>
<div>
<dt>Growth probe steps</dt>
<dd>24</dd>
</div>
<div>
<dt>Generated cases</dt>
<dd>
{DEFAULT_REGEX_LIMITS.maximumGeneratedCases.toLocaleString()}{" "}
retained ·{" "}
{GENERATION_LIMITS.maximumCandidateAttempts.toLocaleString()}{" "}
attempts
</dd>
</div>
<div>
<dt>Generation defaults</dt>
<dd>
{DEFAULT_GENERATION_SETTINGS.perCaseTimeoutMs} ms per case ·{" "}
{DEFAULT_GENERATION_SETTINGS.maximumWallTimeMs / 1_000} seconds
aggregate
</dd>
</div>
<div>
<dt>Generated subject text</dt>
<dd>
{GENERATION_LIMITS.maximumTotalSubjectBytes / 1024 / 1024} MiB
aggregate hard cap
</dd>
</div>
<div>
<dt>Formatter validation</dt>
<dd>1,000 tests · 60 seconds aggregate</dd>
</div>
<div>
<dt>Independent corpus lines</dt>
<dd>
{DEFAULT_REGEX_LIMITS.maximumCorpusLines.toLocaleString()}
</dd>
</div>
<div>
<dt>Corpus applied output</dt>
<dd>
{DEFAULT_REGEX_LIMITS.maximumCorpusOutputBytes / 1024 / 1024}{" "}
MiB
</dd>
</div>
</dl>
<p>
A timeout terminates the worker. It means timed out, never no
@@ -116,7 +232,15 @@ export function HelpDialog({
<p>
Ad-hoc test text is excluded from local saves and exports by
default. Test definitions are deliberate project data. Import is
validated and paused until you review and run it.
validated and paused until you review and run it. Corpus documents,
contents, outputs and results are always ephemeral and excluded from
projects and IndexedDB. Analysis settings and results are likewise
ephemeral. Generated-case settings and review results are ephemeral;
only cases explicitly added to the test suite persist, together with
their bounded seed and generator provenance. Test subjects remain
excluded unless separately opted in. Formatter previews and
validation observations are ephemeral; only an explicitly applied
pattern enters workbench/project state.
</p>
</section>
<section>