From 4a89782ff60cb45c166f967140b6581ac3d716d8 Mon Sep 17 00:00:00 2001
From: Bikebrainz <133275931+Bikebrainz@users.noreply.github.com>
Date: Tue, 29 Sep 2026 02:34:45 -0600
Subject: [PATCH 1/9] Document build follow-ups and correct roadmap evidence
---
CHANGELOG.md | 6 +
docs/changelog.html | 1 +
docs/reviews/2026-09-29-build-follow-up.md | 150 +++++++++++++++++++++
docs/reviews/README.md | 1 +
docs/roadmap/index.html | 13 +-
docs/roadmap/parity.json | 25 ++--
scripts/parity_report.py | 11 +-
7 files changed, 184 insertions(+), 23 deletions(-)
create mode 100644 docs/reviews/2026-09-29-build-follow-up.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0fb52563..cb587b7c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,12 @@ developer-facing record.
## [Unreleased]
+### Build follow-up
+- Add the September 29 to-do list with reproduced gaps and acceptance checks.
+- Correct stale scope-enforcement evidence and distinguish native QML Send
+ behavior from asynchronous browser/API/CLI sends.
+- Label roadmap grade changes as changes, including downward corrections.
+
### Repeater CLI and roadmap
- Report response presence per tab instead of treating missing response text as
a completed response. Clear elapsed-time and byte-count metadata on duplicated
diff --git a/docs/changelog.html b/docs/changelog.html
index 0361e1a4..07034909 100644
--- a/docs/changelog.html
+++ b/docs/changelog.html
@@ -52,6 +52,7 @@
Security checks now distinguish effective response headers from malformed lookalikes. These changes are in the development build; v3.8.0 remains the latest release listed below.
+ fix Build follow-up and roadmap corrections. The September 29 checklist records remaining byte-fidelity, HTML-context, cancellation, fixture-isolation and certificate-lifecycle work. Scope enforcement evidence is refreshed, and the native window's blocking Send path is called out separately.
fix Request files keep their binary bodies. Repeater CLI file and stdin loading preserves NUL bytes, non-UTF-8 data and trailing newlines. Invalid input leaves the draft unchanged; an empty file explicitly clears it. Tab summaries distinguish fresh tabs from completed responses, and duplicated tabs clear their old response metadata.
fix Repeater CLI loads the right request and waits for sends. History IDs select the complete captured request, including binary bodies. Send polling handles pending responses and reports refusals or unfinished waits. The new repeater stop command stops after the current response. The roadmap now distinguishes working views and responsive sends from the remaining byte-fidelity and immediate-cancellation gaps.
fix Reflected-XSS checks respect HTML tag boundaries. Iframe fallback text stays inert; custom tag names and abruptly closed comments no longer hide reflections. The roadmap now marks this probe as partial because template and SVG/MathML context handling still needs work.
diff --git a/docs/reviews/2026-09-29-build-follow-up.md b/docs/reviews/2026-09-29-build-follow-up.md
new file mode 100644
index 00000000..36919fe7
--- /dev/null
+++ b/docs/reviews/2026-09-29-build-follow-up.md
@@ -0,0 +1,150 @@
+# September 29 build follow-up
+
+Owner: Bikebrainz. This is the next-work checklist from the September 29 build
+and verification pass. The [capability register](../roadmap/parity.json) remains
+the full roadmap; this list prioritizes gaps reproduced or inspected during the
+session. An unchecked item is not implemented.
+
+## Changes from this build
+
+| Change | Pull request | Status |
+| --- | --- | --- |
+| Effective security headers and strict TLS certificate compatibility | [#21](https://github.com/Bikebrainz/Nullock/pull/21) | Merged |
+| Reflected-XSS media types and HTML boundaries; certificate-cache validation | [#22](https://github.com/Bikebrainz/Nullock/pull/22) | CI pending |
+| Stable history IDs, asynchronous CLI send polling and Stop | [#25](https://github.com/Bikebrainz/Nullock/pull/25) | CI pending |
+| Binary file/stdin requests and accurate tab response indicators | [#26](https://github.com/Bikebrainz/Nullock/pull/26) | CI pending |
+
+Every implementation PR also updates the public changelog and roadmap. These
+are development changes; they do not create a release or change the latest
+published version. Certificate details from #23 and HTML-context details from
+#24 were incorporated into #22.
+
+## Next work, in priority order
+
+### 1. Preserve response bytes through Repeater and Hex views
+
+- [ ] Carry the original response bytes through the tab model, snapshot and
+ per-tab history, with a separate decoded display representation.
+- [ ] Make request Hex honor the request's actual UTF-8 or Latin-1 encoding.
+- [ ] Make response Hex and binary export use the selected byte representation.
+
+**Evidence:** a loopback response body `00 ff 80 41` becomes
+`00 U+FFFD U+FFFD 41` in Repeater. `Repeater::send` converts the raw or decoded
+body with `QString::fromUtf8`; `toHexDump` then UTF-8-encodes the display text.
+The original bytes cannot be recovered from that string. A Latin-1 request can
+send correctly while its Hex view shows different bytes.
+
+**Done when:** all 256 byte values survive send, snapshot, history navigation,
+project save/reload and export; Hex matches the fixture bytes. Compressed
+responses distinguish original wire bytes from decoded body bytes. Include
+empty bodies, invalid UTF-8, NULs and bodies larger than the preview limit.
+
+### 2. Correct the remaining reflected-XSS HTML contexts
+
+- [ ] Handle inert template contents and SVG/MathML parsing contexts.
+- [ ] Expand the pinned-browser corpus before changing the parser or its grade.
+
+**Evidence:** after the tag-boundary fixes, a 97-context browser comparison left
+two mismatches for the marker ``:
+
+| HTML | Native marker classification | Chromium element present |
+| --- | --- | --- |
+| `` | true | false |
+| `` | false | true |
+
+The browser result describes this marker's parsed context, not a proof that an
+arbitrary script payload executes. Existing committed browser coverage lives in
+`Tests/ui/xss_context_browser_test.cjs` and `xss_media_types_browser_test.cjs`.
+
+**Done when:** the corpus covers nested templates, foreign-content integration
+points, malformed nesting and script/raw-text states, with native results
+matching the pinned browser. Keep XML execution, stored XSS and DOM XSS outside
+the claim unless they receive their own implementation and verification.
+
+### 3. Finish Repeater cancellation and native-window responsiveness
+
+- [ ] Route the native QML Send button through the asynchronous send path and
+ expose the same Stop state as the browser.
+- [ ] Add cancellation to the socket-owning worker during connection, TLS,
+ header and body waits.
+- [ ] Keep concurrent sends from separate tabs as a separate design task.
+
+**Evidence:** browser/API/CLI sends use `sendAsync`, but `Src/App/app.qml` still
+calls `repeater.send()` directly. Current Stop sets an atomic flag checked
+between responses and redirects; it does not interrupt a stalled socket.
+`HttpClient` uses per-wait timeouts and a five-minute total read budget.
+
+**Done when:** a controlled stalled connection, TLS handshake, header, fixed body
+and chunked body can each be stopped promptly without cross-thread socket use.
+The native window and browser remain responsive, no extra redirect is sent,
+newer edits survive completion, and shutdown joins the worker cleanly.
+
+### 4. Isolate OAST smoke fixtures and retain callback diagnostics
+
+- [ ] Allocate separate HTTP and DNS sink ports for each smoke run, alongside
+ the control/proxy ports, and verify startup on the requested listeners.
+- [ ] Report callback failures from the mock instead of discarding exceptions.
+- [ ] Check concurrent isolated runs and deliberate port conflicts.
+
+**Evidence:** one integrated run passed 193 checks and missed three HTTP OAST
+callbacks (SSRF, RCE and XXE); an isolated retry passed all 196. The cause of
+that first failure is not established. `scripts/probe_smoke.sh` uses the default
+OAST ports and suppresses exceptions from its HTTP callback mock.
+
+**Done when:** concurrent runs do not share sinks or state, listener failures
+produce a clear startup error, and callback diagnostics identify the failed
+operation. Retain token-specific positive assertions and safe-target negative
+controls; do not replace them with longer blind waits or automatic pass-on-retry.
+
+### 5. Complete CA and certificate-cache lifecycle controls
+
+- [ ] Revalidate expiry before returning an in-memory leaf.
+- [ ] Define explicit CA/key validation and repair, including operator-visible
+ trust changes.
+- [ ] Add supported CA replacement and leaf-cache clearing/eviction controls.
+
+**Evidence:** `CertAuthority::leafCertFor` returns an in-memory cache hit before
+checking dates or the current CA. Disk-cache reuse after restart now checks the
+CA signature, private key, DNS/IP SAN, dates and key identifiers. That fix does
+not provide live CA replacement or repair of a broken root/key pair.
+
+**Done when:** a controlled clock test refreshes an expired memory entry; valid
+entries remain reusable; CA rotation cannot leave mixed old/new leaves; failures
+are actionable without silently replacing a trusted root. Preserve owner-only
+key permissions and test both OpenSSL and LibreSSL certificate generation.
+
+### 6. Keep roadmap evidence specific and current
+
+- [ ] Audit remaining entries whose gap text contradicts their current state or
+ cites superseded line numbers and behavior.
+- [ ] Give browser, CLI and native-window behavior separate descriptions when
+ their implementations differ.
+- [ ] Require a runnable regression or a precise source reference for each
+ reconciliation; retain limitations instead of inferring full parity.
+
+This pass corrects the obsolete Repeater scope-bypass claim: the shared
+`HttpClient` checks outbound scope before connecting, including redirects, and
+the API snapshots the request synchronously before scheduling its worker.
+The 41-check outbound-scope regression passes. The native window's remaining
+blocking Send behavior is a separate issue described above.
+
+## Verification to carry forward
+
+- Native suites: 102 passed on the combined XSS/certificate implementation.
+- Public probe smoke: 196 passed on the isolated rerun; the earlier OAST misses
+ remain recorded above.
+- Strict TLS and runtime regressions: 64 checks with the native-window option;
+ the later CLI build also passed 62 headless runtime checks.
+- Pinned Chromium: 72 media-type and 95 HTML-context comparisons passed. An
+ additional 1,238 generated media-type comparisons found no mismatches.
+- CLI fixtures and real-app checks cover stable IDs, binary history bodies,
+ multiple busy polls, refusal/timeouts, Stop, binary files/stdin, UTF-8, invalid
+ base64 and fresh/completed/duplicated tab indicators.
+- Website checks cover links, script integrity, generated-page freshness and
+ desktop/mobile roadmap and changelog layout.
+
+For each follow-up, update `CHANGELOG.md`, `docs/changelog.html` and the affected
+roadmap evidence together. Run `python scripts/parity_report.py` after changing
+the register, then `python scripts/check_web_assets.py` and the relevant
+application/browser regression. Cross-platform CI must pass on the exact PR
+head before an implementation merge.
diff --git a/docs/reviews/README.md b/docs/reviews/README.md
index 183bd5c6..93350970 100644
--- a/docs/reviews/README.md
+++ b/docs/reviews/README.md
@@ -4,3 +4,4 @@ Keep dated engineering reviews here. These describe the repository at the time
of review; historical paths and findings may differ from the current code.
- [2026-08-11 HTTP security review](2026-08-11-http-security.md)
+- [2026-09-29 build follow-up and to-do list](2026-09-29-build-follow-up.md)
diff --git a/docs/roadmap/index.html b/docs/roadmap/index.html
index ecc3850b..8195eb5e 100644
--- a/docs/roadmap/index.html
+++ b/docs/roadmap/index.html
@@ -43,19 +43,20 @@ Every Burp feature, graded
- 72 absent
6 stub
95 partial
215 present
22 exceeds
58% at parity
+ 72 absent
6 stub
95 partial
216 present
21 exceeds
58% at parity
Where the work is
+ Start with the September 29 build follow-up for reproduced gaps, priorities and acceptance checks.
One bar per functional area, ordered worst-first. Click an area to filter the register.
- Extender 49 Platform 50 Proxy 50 Sessions 58 Target 43 Scanner 46 Repeater+ 65 Intruder 49
+ Extender 49 Platform 50 Proxy 50 Sessions 58 Target 43 Scanner 46 Repeater+ 65 Intruder 49
absent stub partial present exceeds
Recently updated
- Capabilities reconciled since the audit, including closed gaps and corrections, newest first. Each entry records its date and implementation commit. Showing the 24 most recent of 410 reconciled since the audit; the full set is in the capability table below.
- 0665e41b 2026-09-29 [A4] Passive audit: missing security headers (CSP/HSTS/XFO/XCTO/RP/Permissions-Policy/COOP present → present Hardened active and passive security-header parsing for repeated fields, fallback policies and malformed whitespace. Native regressions and pinned Chromium comparisons cover effective values. Existing capability remains present. b392a63b 2026-09-29 [A12] Active audit: reflected XSS present → partial Correct 66 browser/analyzer mismatches involving custom tag names, iframe fallback text and abrupt comment closure. Add 95 pinned-browser context comparisons and five public-API fixtures. Downgrade present to partial after separately reproducing template and SVG context gaps; those cases remain follow-up work. 784284db 2026-09-29 Proxy listener > Certificate > Generate CA-signed per-host certificate (per-host leaf mint present → present Declare leaf key identifiers explicitly so strict TLS clients accept LibreSSL-generated certificates. Runtime regression exercises real proxy HTTPS with strict validation enabled on every Python version. 4c44d3c0 2026-09-29 CA certificate: leaf caching across restarts Verify the current CA, private key and requested DNS/IP subject alternative name before disk-cache reuse. Strict HTTPS regressions cover wrong and missing SANs; focused checks retain valid DNS, IPv4 and IPv6 leaves. c2af0a33 2026-09-29 CA private key hardening on disk exceeds → present Reconciled against current source and focused CLI, application and browser checks. Correct stale behavior/evidence and state the remaining limits. Grade changed from exceeds to present. 697499b7 2026-09-29 Repeater: send a captured message to Repeater from other tools CLI file and stdin input preserve raw body bytes. Empty input clears the draft, omitted input preserves it, and invalid base64 is rejected before mutation. Existing missing tool pivots keep the grade partial. f5dcae31 2026-09-29 Repeater: headless / scriptable driving of the tool exceeds → present Verified the CLI through owned API fixtures and a real app: history IDs, asynchronous sends, Stop, binary file/stdin input and tab response state. Replaced stale defect descriptions and removed an unverified exceeds comparison. c2af0a33 2026-09-29 Repeater: message editor views — Pretty / Raw / Hex for both request and response absent → partial Reconciled against current source and focused CLI, application and browser checks. Correct stale behavior/evidence and state the remaining limits. Grade changed from present to partial. c2af0a33 2026-09-29 Repeater: automatic "Update Content-Length" when the body is edited present → present Reconciled against current source and focused CLI, application and browser checks. Correct stale behavior/evidence and state the remaining limits. c2af0a33 2026-09-29 Repeater: "Unpack gzip / deflate" in the response view present → present Reconciled against current source and focused CLI, application and browser checks. Correct stale behavior/evidence and state the remaining limits. c2af0a33 2026-09-29 Repeater: cancel an in-flight request; non-blocking send Reconciled against current source and focused CLI, application and browser checks. Correct stale behavior/evidence and state the remaining limits. Grade changed from absent to partial. 76c583ff 2026-09-11 Save/Resume attack present → present Existing manual SAVE/LOAD/RESUME is retained. Project switch and clean exit now save automatically; restoration remains idle and pending rows still need explicit Resume. CLI adds save/load/reset. 2026-09-11 [A36] Authenticated scanning: session-handling rules (macros) HTTP authenticated scan workflows verified, including form CSRF replacement, compressed token extraction, refresh cooldown, request fidelity and project isolation. Browser login execution remains a separate gap. 2026-09-11 [A37] Out-of-scope handling during scans present → present Full outbound scope boundary, live policy updates, full-URL redirect/crawler checks and visible validation errors. 17d6c051 2026-09-11 Cookie jar and session rules persist in the project file / user settings across restarts absent → present Cookie jars and session rules persist per project. Cookie changes autosave every two seconds and after shutdown workers drain; session-rule edits save when applied. Failed workspace writes remain visible and block project switching. Transient extracted session variables are intentionally cleared when changing projects. 2026-09-11 Recorded login sequences (browser-recorded login replayed by the scanner) for authenticate HTTP authenticated scan workflows verified, including form CSRF replacement, compressed token extraction, refresh cooldown, request fidelity and project isolation. Browser login execution remains a separate gap. 63ecda0e 2026-09-11 Annotations: per-item Notes column and colour highlighting on Proxy history / any message partial → partial Project-persisted comments and nine highlight colours synchronize across browser clients, survive restart/index rebuild, and round-trip through HAR. API/CLI field patches reject stale history generations. Selected-item XML and branch HTML reports include escaped notes. Legacy browser notes have an explicit migration action. f24543d3 2026-09-11 Project files: Repeater tabs, Intruder attack config and Sequencer state saved in the proj absent → partial Intruder configuration and result rows persist per project on switch/clean exit and restore idle. Browser drafts survive stale polls; rules/grep settings synchronize and stale project edits are refused. Runtime, browser and CLI checks pass. Sequencer persistence remains outstanding. 63ecda0e 2026-09-11 HTTP history filter bar (in-scope only / hide items without responses / MIME / status / re Annotation persistence caveat removed; unrelated filtering gaps remain documented. 63ecda0e 2026-09-11 HTTP history annotations: per-item highlight colours and comments, plus filter-by-annotati partial → present Project-persisted comments and nine highlight colours synchronize across browser clients, survive restart/index rebuild, and round-trip through HAR. API/CLI field patches reject stale history generations. Selected-item XML and branch HTML reports include escaped notes. Legacy browser notes have an explicit migration action. c30a3eae 2026-09-11 Repeater: multiple concurrent request tabs The GUI/control Repeater runs one request at a time on a worker, preserving UI responsiveness and edits made during a send. Busy/Stop states are exposed; Stop prevents subsequent redirects after the current response. Browser mutations are serialized and stale polls cannot overwrite pending edits. Tabs autosave per project. Independent concurrent sends across multiple tabs remain unavailable. 17d6c051 2026-09-11 Repeater: tab state persisted in the project file and restored on reopen present → present Repeater tabs save per project every two seconds when changed, before project switching, and after shutdown workers drain. Failed writes retain the current project and retry. Per-tab request history remains a separate capability. 63ecda0e 2026-09-11 Site map filter — by MIME type (HTML/Script/XML/CSS/Other text/Images/Flash/Other binary), present → present Annotation persistence caveat removed; unrelated filtering gaps remain documented. 63ecda0e 2026-09-11 Site map / history annotations: per-item Comment and Highlight (six colours), used to driv partial → present Project-persisted comments and nine highlight colours synchronize across browser clients, survive restart/index rebuild, and round-trip through HAR. API/CLI field patches reject stale history generations. Selected-item XML and branch HTML reports include escaped notes. Legacy browser notes have an explicit migration action.
+ Capabilities reconciled since the audit, including closed gaps and corrections, newest first. Each entry records its date and source or verification commit. Showing the 24 most recent of 410 reconciled since the audit; the full set is in the capability table below.
+ 0665e41b 2026-09-29 [A4] Passive audit: missing security headers (CSP/HSTS/XFO/XCTO/RP/Permissions-Policy/COOP present → present Hardened active and passive security-header parsing for repeated fields, fallback policies and malformed whitespace. Native regressions and pinned Chromium comparisons cover effective values. Existing capability remains present. b392a63b 2026-09-29 [A12] Active audit: reflected XSS present → partial Correct 66 browser/analyzer mismatches involving custom tag names, iframe fallback text and abrupt comment closure. Add 95 pinned-browser context comparisons and five public-API fixtures. Downgrade present to partial after separately reproducing template and SVG context gaps; those cases remain follow-up work. 784284db 2026-09-29 Proxy listener > Certificate > Generate CA-signed per-host certificate (per-host leaf mint present → present Declare leaf key identifiers explicitly so strict TLS clients accept LibreSSL-generated certificates. Runtime regression exercises real proxy HTTPS with strict validation enabled on every Python version. 4c44d3c0 2026-09-29 CA certificate: leaf caching across restarts Verify the current CA, private key and requested DNS/IP subject alternative name before disk-cache reuse. Strict HTTPS regressions cover wrong and missing SANs; focused checks retain valid DNS, IPv4 and IPv6 leaves. c2af0a33 2026-09-29 CA private key hardening on disk exceeds → present Reconciled against current source and focused CLI, application and browser checks. Correct stale behavior/evidence and state the remaining limits. Grade changed from exceeds to present. 697499b7 2026-09-29 Repeater: send a captured message to Repeater from other tools CLI file and stdin input preserve raw body bytes. Empty input clears the draft, omitted input preserves it, and invalid base64 is rejected before mutation. Existing missing tool pivots keep the grade partial. 927aed0e 2026-09-29 Repeater: out-of-scope send guard exceeds → present Rechecked the existing shared scope implementation and reran 41 live scope checks. Removed obsolete API-only and queued-tab-switch claims; use present rather than an unverified comparison-based exceeds grade. f5dcae31 2026-09-29 Repeater: headless / scriptable driving of the tool exceeds → present Verified the CLI through owned API fixtures and a real app: history IDs, asynchronous sends, Stop, binary file/stdin input and tab response state. Replaced stale defect descriptions and removed an unverified exceeds comparison. c2af0a33 2026-09-29 Repeater: message editor views — Pretty / Raw / Hex for both request and response absent → partial Reconciled against current source and focused CLI, application and browser checks. Correct stale behavior/evidence and state the remaining limits. Grade changed from present to partial. c2af0a33 2026-09-29 Repeater: automatic "Update Content-Length" when the body is edited present → present Reconciled against current source and focused CLI, application and browser checks. Correct stale behavior/evidence and state the remaining limits. c2af0a33 2026-09-29 Repeater: "Unpack gzip / deflate" in the response view present → present Reconciled against current source and focused CLI, application and browser checks. Correct stale behavior/evidence and state the remaining limits. c2af0a33 2026-09-29 Repeater: cancel an in-flight request; non-blocking send Reconciled browser/API/CLI asynchronous sends and Stop, while recording the native QML synchronous-send path separately. Immediate socket cancellation and concurrent sends remain incomplete; grade stays partial. 76c583ff 2026-09-11 Save/Resume attack present → present Existing manual SAVE/LOAD/RESUME is retained. Project switch and clean exit now save automatically; restoration remains idle and pending rows still need explicit Resume. CLI adds save/load/reset. 2026-09-11 [A36] Authenticated scanning: session-handling rules (macros) HTTP authenticated scan workflows verified, including form CSRF replacement, compressed token extraction, refresh cooldown, request fidelity and project isolation. Browser login execution remains a separate gap. 2026-09-11 [A37] Out-of-scope handling during scans present → present Full outbound scope boundary, live policy updates, full-URL redirect/crawler checks and visible validation errors. 17d6c051 2026-09-11 Cookie jar and session rules persist in the project file / user settings across restarts absent → present Cookie jars and session rules persist per project. Cookie changes autosave every two seconds and after shutdown workers drain; session-rule edits save when applied. Failed workspace writes remain visible and block project switching. Transient extracted session variables are intentionally cleared when changing projects. 2026-09-11 Recorded login sequences (browser-recorded login replayed by the scanner) for authenticate HTTP authenticated scan workflows verified, including form CSRF replacement, compressed token extraction, refresh cooldown, request fidelity and project isolation. Browser login execution remains a separate gap. 63ecda0e 2026-09-11 Annotations: per-item Notes column and colour highlighting on Proxy history / any message partial → partial Project-persisted comments and nine highlight colours synchronize across browser clients, survive restart/index rebuild, and round-trip through HAR. API/CLI field patches reject stale history generations. Selected-item XML and branch HTML reports include escaped notes. Legacy browser notes have an explicit migration action. f24543d3 2026-09-11 Project files: Repeater tabs, Intruder attack config and Sequencer state saved in the proj absent → partial Intruder configuration and result rows persist per project on switch/clean exit and restore idle. Browser drafts survive stale polls; rules/grep settings synchronize and stale project edits are refused. Runtime, browser and CLI checks pass. Sequencer persistence remains outstanding. 63ecda0e 2026-09-11 HTTP history filter bar (in-scope only / hide items without responses / MIME / status / re Annotation persistence caveat removed; unrelated filtering gaps remain documented. 63ecda0e 2026-09-11 HTTP history annotations: per-item highlight colours and comments, plus filter-by-annotati partial → present Project-persisted comments and nine highlight colours synchronize across browser clients, survive restart/index rebuild, and round-trip through HAR. API/CLI field patches reject stale history generations. Selected-item XML and branch HTML reports include escaped notes. Legacy browser notes have an explicit migration action. c30a3eae 2026-09-11 Repeater: multiple concurrent request tabs The GUI/control Repeater runs one request at a time on a worker, preserving UI responsiveness and edits made during a send. Busy/Stop states are exposed; Stop prevents subsequent redirects after the current response. Browser mutations are serialized and stale polls cannot overwrite pending edits. Tabs autosave per project. Independent concurrent sends across multiple tabs remain unavailable. 17d6c051 2026-09-11 Repeater: tab state persisted in the project file and restored on reopen present → present Repeater tabs save per project every two seconds when changed, before project switching, and after shutdown workers drain. Failed writes retain the current project and retry. Per-tab request history remains a separate capability. 63ecda0e 2026-09-11 Site map filter — by MIME type (HTML/Script/XML/CSS/Other text/Images/Flash/Other binary), present → present Annotation persistence caveat removed; unrelated filtering gaps remain documented.
@@ -83,7 +84,7 @@ How this stays true
nul·lock ▸ audited 2026-07-30 · reconciled through 2026-09-29 · generated from parity.json
-
+