Repository navigation
Maintenance execution plan: ordered batches and backlog review (2026-09-25) #169
Description
Reviewed the complete open inventory on 2026-09-25 (America/Los_Angeles): 30 issues and 1 PR, against main at bd249f5. Read all issue bodies and discussion comments, reviewed the open PR diff/checks, compared recent merged/closed work, and rechecked relevant repository settings and Central availability. This tracker records the execution order; it does not implement or release the batches.
How to work this queue
Use the numbered milestones in order, with the dependencies below controlling merge order. Work that is independent and ready may proceed while external access or a preceding decision is blocked. priority: P0/P1/P2/P3 indicates urgency, area:* ownership, and triage:* disposition. security-review marks sensitive acceptance criteria, not a vulnerability classification. Keep batches reviewable; a batch need not be one giant PR.
| Order | Batch and items | Execution rule |
|---|---|---|
| 00 | #111, #112 | Correct consumer guidance now; finish exact signed 1.4.1 Central delivery when namespace access permits. Independent vault/access checks need actual evidence. |
| 01 | #100, #130 | Align ESAPI URL/context semantics and deprecation guidance together, preserving supported encoder contexts. |
| 02 | #102, #109, #97, #119, #108 | Pin/guard first, add scanning and updates, preserve complete CI gates, then enforce settings that depend on them. Independent settings hardening can start now. |
| 03 | #137, #131 / PR #168, #120, #93 | Derive real OSGi API floors, finish XML 1.1 adapter review, test the final TLD surface through JSP engines, then decide/modernize the browser fixture. |
| 04 | #123, #96, #104, #122, #95, #103, #124, #125, #110 | Normalize and decide site scope; coordinate toolchain/release changes; measure reproducibility and quality. Re-run final byte comparison after byte-affecting changes. Historical key records can proceed independently. |
| 05 | #128 (including #114), #115, #116, #117, #127 | One coherent consumer front page plus release history, metadata and contributor guidance. Match final behavior and toolchain. |
| 06 | #142, #149 | Record explicit keep/change/defer/reject decisions. Future API proposals are not approved simply by being organized. |
Consolidation and single owners
- Consolidated into #128: README commands, coordinates and taglib discovery #114 → Rewrite the README and context guide, incorporating #114 and current 1.5 contracts #128: transfer all remaining build-command, coordinates, links and taglib-discovery requirements; close Consolidated into #128: README commands, coordinates and taglib discovery #114 as duplicate/consolidated, not completed implementation.
- Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111 versus Modernize release tooling and validate future releases without replacing 1.4.1 #95: Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111 owns Central access, exact retained 1.4.1 delivery, independent vault drills and publisher rehearsals. Modernize release tooling and validate future releases without replacing 1.4.1 #95 owns future release-tooling changes. Existing documentation/key generation is already done.
- Limit build hygiene to repository normalization, source packaging and safe fixture cleanup #123 → Constrain OSGi imports to actual adapter API requirements and freeze bundle identities #137 for BSNs: OSGi bundle identity declarations and table data have one owner in Constrain OSGi imports to actual adapter API requirements and freeze bundle identities #137.
- Pin every GitHub Actions workflow dependency to a verified commit SHA #102/Add code scanning, grouped dependency updates and resolved dependency visibility #97/Harden repository settings in stages after verifying CI and release-tag protections #108: pins in Pin every GitHub Actions workflow dependency to a verified commit SHA #102, Dependabot/scanning in Add code scanning, grouped dependency updates and resolved dependency visibility #97, repository enforcement in Harden repository settings in stages after verifying CI and release-tag protections #108.
- Guard SNAPSHOT development versions and prevent release-coordinate cache contamination in CI #109/Restructure CI without dropping compatibility or browser regression gates #119: snapshot/install/cache policy in Guard SNAPSHOT development versions and prevent release-coordinate cache contamination in CI #109, CI topology and aggregate gates in Restructure CI without dropping compatibility or browser regression gates #119.
- Pin supported Maven build plugins and centralize plugin-version enforcement #104/Pin Maven bootstrap and toolchain policy; evaluate verified dependency trust separately #122/Modernize release tooling and validate future releases without replacing 1.4.1 #95: plugin pins in Pin supported Maven build plugins and centralize plugin-version enforcement #104, wrapper/common toolchain-enforcer policy in Pin Maven bootstrap and toolchain policy; evaluate verified dependency trust separately #122, parent/signing/publishing changes in Modernize release tooling and validate future releases without replacing 1.4.1 #95. One shared configuration, not three competing implementations.
- Add XML 1.1 tags and EL functions to both taglibs #131 and Add XML 1.1 tags and EL functions to both taglibs #168: issue plus implementation PR, not duplicates. Guard facade mappings and JSP/Jakarta parity #167 already supplied facade/TLD/parity checks; Render every current JSP and Jakarta tag/EL binding through isolated JSP engines #120 retains distinct real-JSP-engine coverage.
- Previously completed or declined issues stay closed. Their work is credited in the revised bodies rather than reopened or silently repeated.
Security and compatibility corrections made during organization
- Central still lists 1.4.0; the exact 1.4.1 core POM returned HTTP 404. The signed GitHub security release is available. Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111 is the urgent delivery/access track; no rebuilding, replacement or tag movement is allowed.
- Align ESAPI URL-component semantics and define safe adapter context contracts #100: removed the premise that more escaping makes arbitrary unquoted JavaScript/CSS safe. Context and value-preservation tests control the contract. See OWASP context guidance.
- Restructure CI without dropping compatibility or browser regression gates #119/Decide and modernize the optional browser integration fixture without losing coverage #93: do not make browser checks nonblocking or retire them without an explicit coverage decision; do not omit Add isolated packaged-consumer compatibility CI across Java 8–25 #162's packaged-consumer/Java 8 gates.
- Constrain OSGi imports to actual adapter API requirements and freeze bundle identities #137: the historical core range
[1.4,2)is insufficient for JSP/Jakarta tags now calling the 1.5 JSON API. Derive supported ranges and exercise actual linkage. - Modernize release tooling and validate future releases without replacing 1.4.1 #95/Add code scanning, grouped dependency updates and resolved dependency visibility #97/Pin every GitHub Actions workflow dependency to a verified commit SHA #102/Harden repository settings in stages after verifying CI and release-tag protections #108/Pin Maven bootstrap and toolchain policy; evaluate verified dependency trust separately #122: guard credentialed execution and artifact provenance, verify SHA/trust policy, preserve review gates, and avoid blind old version overrides or blanket transitive-advisory exclusions. See GitHub secure-use guidance.
- Limit build hygiene to repository normalization, source packaging and safe fixture cleanup #123/Enforce maintainable source checks while preserving copyright attribution #124/Rewrite the README and context guide, incorporating #114 and current 1.5 contracts #128: preserve compatibility fixtures/unsafe-method disablement and historical notices; more escaping is not automatically a patch-compatible change.
- Decide whether strict base64url belongs in this output-encoding library #149: decision hold for decoding/transport scope and canonical Unicode/error behavior; no malicious or vulnerable implementation is alleged.
Open PR review
PR #168 at 7bfa00f3242c8918b7d201c8e55bbd7b1b31e00e contains delegating tag/TLD/test/doc changes with no core algorithm or dependency change. No new security regression identified in its diff. All 20 GitHub checks passed at review time, and independent local parity validation passed across 33 source files. A full local Maven rerun was not performed because Maven was unavailable in this session's PATH. Independent maintainer review remains required; triage did not approve or merge it. Its delivery batch includes the existing OSGi minimum-core problem.
Completion evidence and release gate
- All initially open issues/PRs reviewed and assigned priority, area, disposition and numbered milestone.
- Duplicated responsibilities consolidated; obsolete version assumptions and dangerous acceptance criteria corrected.
- PR diff/checks reviewed and limits of local verification recorded.
- For each batch, record merged PRs, validation and remaining blockers/explicit dispositions here as work completes.
- Before any 1.5 release, re-inventory all then-open issues and PRs and satisfy the full backlog gate in
RELEASING.md. Labeling, deferring, moving milestones or completing one batch is not release approval.
This tracker is the cross-batch index and intentionally has no single batch milestone. No source code, repository security setting, release asset, tag or PR merge is changed by this organization pass.
Batch 00 progress — 2026-09-25 (America/Los_Angeles)
Implementation: #171 merged at 2026-09-26 05:00:48 UTC as 6a3c3a9bd5d8eaa82c6ee956ab78ff9e11821b6f. All 20 GitHub checks passed on the PR head. After the normal merge was blocked by the approving-review requirement, Jim explicitly directed the merge and the administrator override was used. #112 is closed; batch 00 remains operationally incomplete under #111.
- Clarify ESAPI dependency policy by release and preserve the 1.4.1 upgrade warning #112: release-specific guidance, the temporary ESAPI pin with the encoder upgrade warning, and verified-artifact installation instructions are in docs: correct ESAPI release guidance and record batch 00 readiness #171. Both consumer examples passed Maven dependency tree/resolution in separate fresh repositories. The 1.4.0 GitHub release notes now include the dated pin/upgrade supplement; the original notes, assets, signatures, and tag are preserved.
- Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111: verified all 19 signatures and signed manifests, plus every artifact, signature, and checksum in the retained Central bundle. Bundle SHA-256:
c70234d2290fff0011d484219b7bc8fae2581cf24b24b03abf5eab4413b6d4c3. All five exact Central 1.4.1 POMs still return 404. Jim's signed-in Portal shows no namespaces and disabled publishing. Initial key setup was confirmed by Jim; neither an independent vault drill nor a staging rehearsal was confirmed. Jeremy's checks remain unconfirmed. No bundle was rebuilt, re-signed, uploaded, or republished; continue the existing Support request. - Remaining: publisher namespace access; exact 1.4.1 publication and comparison; each custodian's independent vault drill and each publisher's distinct validated-then-dropped rehearsal; post-publication notices and destinations. The OWASP project page still refers to 1.3.0 and javadoc.io to 1.4.0. Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111 stays open, and the full 1.5 release gate remains unchanged.
Detailed validation evidence.
Batch 01 complete — 2026-09-25 (America/Los_Angeles)
- Complete forUri deprecation across registry and tag APIs without removing 1.x support #130 / Propagate the forUri deprecation to Encoders, tags and TLDs #170: reviewed the contributor's deprecation changes at
813f01070142af7e172ce4256f9910d1e13ddf6a, approved, and merged Propagate the forUri deprecation to Encoders, tags and TLDs #170 as98608dd52c46e4f250e5eff4d3a6fda218a22dd3. All 20 PR checks passed; local integration and JSP/Jakarta parity passed. Registry/tag annotations, generated deprecation descriptions, migration guidance, and focused compiler diagnostics retain the existing 1.x APIs and behavior. - Align ESAPI URL-component semantics and define safe adapter context contracts #100 / fix: encode ESAPI URL components and document context migration #172: final diff reviewed and merged fix: encode ESAPI URL components and document context migration #172 as
fe5e0ad174481c2f23a566aa33069a0e45562785at 2026-09-26 05:20:26 UTC. All 20 PR checks passed on4a7c7466142be434513ff27abb3a830fd1d9e878. Jim directed review and merge; the administrator override was used for the approving-review requirement. The adapter now encodes one raw URL component using UTF-8 and%20spaces, preserving its null, malformed-Unicode, checked-exception, and lazy-configuration contracts. The output change is explicitly unreleased 1.5 behavior. The quoted HTML/CSS/JavaScript contracts and existing security fixes remain intact. - Validation: local
clean verifypassed 2,126 tests plus API and Java 8 signature checks; all 16 focused adapter tests passed on each of ten stable ESAPI versions. Independent URL/HTML parsing covers delimiter and markup boundaries. Packaged consumers passed locally on Java 17 and in CI on Java 8/11/17/21/25, including URL/null checks on classpath, module path, and OSGi. Browser checks, Java 8 unit tests, all matrix checks, final Javadocs, all eight legacy TLD descriptions, and 31-file JSP/Jakarta parity passed. - Disposition: Align ESAPI URL-component semantics and define safe adapter context contracts #100 and Complete forUri deprecation across registry and tag APIs without removing 1.x support #130 are closed. Shared migration guidance and the ESAPI comparison/context guide are supplied to Rewrite the README and context guide, incorporating #114 and current 1.5 contracts #128. Core/registry/tag
forUribehavior remains unchanged through 1.x; no removal decision or 1.5 release is authorized. Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111 remains operationally blocked as recorded above. Next implementation batch: 02.
Batch 02 complete — 2026-09-25 (America/Los_Angeles)
- Delivery: ci: complete batch 02 security and compatibility controls #173 merged as
f8586a6bfe5b326e5f860ae55cbb4b74a8e0e1a2at 2026-09-26 05:52:52 UTC after all 26 GitHub checks passed on659e6e2f1a73df4b35f7315803b1db53fac1150a. The live graph check exposed GitHub detector precedence masking runtime edges, so ci: preserve runtime and build dependencies in GitHub graphs #177 aligned the detector identities; it merged asd4562ec5bbe833a436ef7459b1d2d42ca926b2bfat 06:03:00 UTC after all 26 checks passed on166ed8c5e820ea13b8c67e9025fc98a0362486ec. Jim instructed completion and merge. The normal independent-review gate remained active; the explicitly configured, audit-visible PR-only maintainer review bypass was used for these merges. Required CI/security checks have no bypass and all passed. This is not recorded as independent approval. - Pin every GitHub Actions workflow dependency to a verified commit SHA #102 / Guard SNAPSHOT development versions and prevent release-coordinate cache contamination in CI #109 / Restructure CI without dropping compatibility or browser regression gates #119: every external action is pinned to its verified authoritative release commit (including peeling CodeQL's annotated tag). Development/release version consistency is guarded; ordinary builds use
verify; all Maven storage is isolated and uncached, including the necessary Java 8install. Two required fail-closed gates retain clean reactor/API/Java 8 signatures, all ten ESAPI versions, JSP/Jakarta parity, Docker/browser coverage, Java 8 unit tests, and original packaged consumers on Java 8/11/17/21/25. The optional Jakarta WAR contains the byte-identical reactor JAR without an install. Timeouts, cancellation, schedules, manual dispatch and diagnostic retention are present; newer-JDK build probes remain advisory. - Add code scanning, grouped dependency updates and resolved dependency visibility #97: advanced CodeQL is the sole scanner owner for Java including the optional app, Actions and Python; all three analyses passed with zero findings. Weekly grouped Maven and SHA-pinned Actions updates cover the library/parent/app POMs and preserve the Felix compatibility fixture. The trusted-main dependency workflow submitted normal and optional-profile runtime/test graphs plus separate resolved build-plugin graphs. Final trusted-main submission succeeded for both profiles. The live GitHub SBOM now contains ESAPI runtime commons-configuration 1.10/commons-lang 2.6, HttpClient 5.4.4/HttpCore 5.3.4, Spring Web 6.2.19 and Tomcat 10.1.55 alongside compiler-plugin 3.16.0/plexus-compiler-javac 2.17.0 development dependencies. Runtime and build submissions share a detector with distinct correlators so GitHub merges both. Dependabot created grouped PRs Update artifact actions with verified pins and strict digest checks #175 and Bump the maven-dependencies group across 6 directories with 17 updates #176; these remain open for deliberate review. Newly visible legacy build/report advisories remain open for batch 04 tooling triage (Pin supported Maven build plugins and centralize plugin-version enforcement #104/Pin Maven bootstrap and toolchain policy; evaluate verified dependency trust separately #122/Modernize release tooling and validate future releases without replacing 1.4.1 #95); this batch does not claim they are all fixed. ESAPI transitive findings remain visible with explicit version/reachability/scope triage and a recheck deadline; no blanket suppression or untested override was introduced. Optional public Scorecard/best-practices registration and an additional scanner are deferred explicitly.
- Harden repository settings in stages after verifying CI and release-tag protections #108: enabled secret scanning/push protection, read-only default tokens, no Actions PR approvals, approval for all external fork runs, Pages HTTPS, the exact action allowlist/full-SHA policy, and all-tag update/deletion protection. Disabled both failing legacy webhooks while retaining their configuration. Main requires both compatibility gates and all three CodeQL jobs, bound to GitHub Actions, with strict current-base checks. Review rules retain one approval/stale dismissal and add latest-push approval/resolved threads. The old all-admin always-bypass is removed; only Jim and Jeremy can use a PR-only review bypass. GitHub rejected the verified team actor, so supported individual user actors are configured. CODEOWNERS validation stays with Add accurate contributor guidance and validated community/review metadata #127; signed-tag verification is separate from commit-signature rules.
- Validation and negative cases: local fresh-repository JDK 17
clean verifypassed 2,126 tests, API/signature checks, Java 17 packaged consumers and 11 package guard tests. Actionlint and 10 policy/parser tests pass. Live probes rejected mutable action tags, unlisted pinned GitHub-owned actions, tag update/deletion, and direct branch updates missing a PR/five checks. The allowlist probe caught and corrected an API reset of the blanket GitHub-owned allowance. Every original tag is unchanged. The actual external fork PR Add XML 1.1 tags and EL functions to both taglibs #168's read-only/no-secrets run and the new workflow boundaries were inspected; the evidence documents the limit that a new external-fork CodeQL run was not manufactured. All final-main workflows passed: Java CI, packaged consumers, CodeQL, and dependency submission above. One PR ESAPI runner failed before tests with a Maven Central HTTP 403; its failed-job rerun passed. - Disposition and cleanup: Pin every GitHub Actions workflow dependency to a verified commit SHA #102, Guard SNAPSHOT development versions and prevent release-coordinate cache contamination in CI #109, Add code scanning, grouped dependency updates and resolved dependency visibility #97, Restructure CI without dropping compatibility or browser regression gates #119 and Harden repository settings in stages after verifying CI and release-tag protections #108 are closed. Back on clean, synchronized
main. Removed merged batch 00/01/02 branches, the completed review branch, and disposable policy probes; retained unrelated branches and activegh-pages. Removed 25 obsolete shared Maven Actions caches (1,959,364,548 bytes); retained CodeQL cache and the user’s local Maven repository. Detailed validation, CI/security operations and recovery, and action provenance are checked in. Existing open PRs must refresh their old workflow tags before rerunning under the SHA policy. Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111 remains operationally incomplete; the full 1.5 backlog/release gate is unchanged. Next batch: 03, including the new OSGi PR Declare OSGi import ranges from actual API use and freeze bundle names #174 alongside Constrain OSGi imports to actual adapter API requirements and freeze bundle identities #137 and Add XML 1.1 tags and EL functions to both taglibs #131/PR Add XML 1.1 tags and EL functions to both taglibs #168.
Batch 03 complete — 2026-09-25 (America/Los_Angeles)
- Constrain OSGi imports to actual adapter API requirements and freeze bundle identities #137 / Declare OSGi import ranges from actual API use and freeze bundle names #174: reviewed and approved the contributor's OSGi change at
28b57eb7d6cfb7b01dcbf7484da9d471e3ed1d3c, then merged normally as159041aa5a668483d456d3c9e8e4a673b697e6cbafter all 26 checks passed. Symbolic names are explicit and preserved, JSP/Jakarta core imports require[1.5,2)for JSON linkage, ESAPI uses the supported 1.4.1 security floor, and API ranges remain conservative. Real Felix R6/R8 consumers accept supported wiring and reject core 1.4.0; classpath/JPMS JSON linkage and 15 package guards pass. No embedded dependencies or new library/API baseline. - Add XML 1.1 tags and EL functions to both taglibs #131 / Add XML 1.1 tags and EL functions to both taglibs #168: reviewed and approved at
ece754c3a094f591dc23213f317735f1b237b706, then merged normally as2b8e7b3a90895fbcacb89c3b2894c461dc71843dafter all 26 checks passed. Both adapters expose the three XML 1.1 contexts in advanced descriptors andforXml11in basic descriptors, with direct Writer delegation and context restrictions. The intendedforJavaomission remains explicit. Existing contract tests expand automatically; 34-file JSP/Jakarta parity passes. - Render every current JSP and Jakarta tag/EL binding through isolated JSP engines #120 / Test every packaged taglib binding through real JSP engines #179: merged as
e6bbebe8e8ee9043e9cd1328fdda18b3e55816b2after all 26 checks passed on96a1c64d0878fedf6919d6cadb65e542a974986f. Normal Docker-freeverifynow forks isolated maintained Tomcat/Jasper 9.0.122 and 10.1.60 engines. The actual packaged TLDs generate 144 bindings across both adapters, 1,152 complete response-byte assertions, and 144 JSP translation rejections for bodies/missing attributes. Coverage includes JSON/XML 1.1, hostile markup/Unicode/controls, buffer boundaries, null/missing values and EL coercion. Engine dependencies stay outside library test/runtime classpaths. Local clean verify passed 2,178 unit plus eight existing integration tests, API/signatures and the new engines; CI retains the Java 8/11/17/21/25 matrix and browser checks. - Decide and modernize the optional browser integration fixture without losing coverage #93 / Retain and modernize required browser and packaged WAR coverage #180: merged as
111d03390b96bba9fce33474cef413f8b07b6288after all 26 checks passed ond215dc02f275d8cd9914fbaf6dd50cb8197e9446. Explicit decision: retain the required actual-browser suite because facade byte comparisons cannot replace its DOM, HTML parser and JavaScript grammar assertions. The optional fixture now uses supported Boot 4.1.1, coherent Tomcat 11.0.26 APIs, Testcontainers 2.0.5 and aligned Selenium 4.49.0; library support baselines remain unchanged. Browser/helper images are pinned by verified registry index digest, discarded recording is disabled, and browser/container/server cleanup is explicit. The executable WAR itself is launched and its packaged JSP/JSTL views and exact encoded cells are verified. Removed unused JSON/service/test scaffolding and duplicate API JARs while retaining required JSTL. The 34 packaged third-party coordinates returned no OSV advisories at review time; this does not cover OS images, build plugins or test-only dependencies. - Requested reviews: Sol reviewed all batch 02/03 changes in three scopes and independently read back the live repository controls. Its browser review identified unused JSP sessions rewriting a test URL; setting
session=falsefixed the startup assertion and the packaged test passed. Sol found no remaining actionable issues. Astra's final complete-diff review at413177cefound no actionable correctness/security findings and independently passed 10 policy/parser tests, 15 artifact guards, parity, and exact WAR/JAR comparison. CI then exposed Testcontainers image-name compatibility handling; an explicit declaration retained the exact digest, and Astra reviewed the correction throughd215dc02with no findings. AI review is not recorded as independent maintainer approval. Jim explicitly directed review and merge; Test every packaged taglib binding through real JSP engines #179 and Retain and modernize required browser and packaged WAR coverage #180 used the documented PR-only review bypass, while required CI/security checks have no bypass and passed. - Final verification and cleanup: All 26 final PR checks passed, including five JavaScript browser tests, the server-rendered DOM test, executable-WAR test, exact reactor JAR inclusion, all required compatibility legs and CodeQL. All final-main workflows also passed: Java CI, packaged consumers, CodeQL, and dependency submission. All four batch issues are closed. Returned to clean synchronized
main; removed the merged task/review branches and retained contributor fork branches, active Pages and unrelated work. The open automated dependency PRs remain for deliberate review in their owning batches. Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111 and the full 1.5 release gate remain unchanged. Continue with batch 04 as directed.
Batch 04 — implementation merged; historical-key evidence gap remains
- Limit build hygiene to repository normalization, source packaging and safe fixture cleanup #123 closed by PR #184, merge
3c82455fd02cf709f00b29f45c34d90f22a80d8f: source descriptors/attachment guards, text/XML normalization and safe ESAPI fixture cleanup. Sol then Astra found no actionable issues; all 26 final-head checks and all four post-merge main workflows passed. - Retire unused site tooling while preserving documentation and useful reports #96, Pin supported Maven build plugins and centralize plugin-version enforcement #104, Pin Maven bootstrap and toolchain policy; evaluate verified dependency trust separately #122, Modernize release tooling and validate future releases without replacing 1.4.1 #95, Enforce maintainable source checks while preserving copyright attribution #124, Publish useful JaCoCo coverage and enforce measured nonregression thresholds #125, Make release artifacts reproducible with a recorded reference toolchain #103 closed by PR #185, merge
58af3881e5f6e2b58b10b5254809a02dde79a20a: Site/OSS-parent retirement, verified Maven wrapper and coherent plugin/build policy, source checks, measured coverage gates, isolated signing/publishing tools, deterministic artifacts and verified local bundle assembly. Existing Pages and published consumer identities/scopes remain intact. - All 28 checks passed on PR Modernize build policy and verify release artifacts #185 head
8d761d5c886455830dde0fc4600fc3747ddd5350: Docker/browser/WAR, ten ESAPI versions, Windows/Unix bootstrap with bad-hash rejection, Java 8 unit JVM, original-JAR consumers on 8/11/17/21/25, and CodeQL. Full local verify, 17 artifact guards, parity, coverage regression/skip probes and Java 17 packaged consumers also passed. - Two separate clean exports of the same source commit, with fresh repositories and the reference Temurin 17.0.20.1+1/Maven 3.9.16, produced 12 byte-identical JARs and five identical POMs. A disposable local-only test key validated all 17 signatures, 68 checksums and a 102-entry bundle. Wrong-key, stale-POM, tamper, missing-key and SNAPSHOT-release failures were verified. No production key/token, Portal upload or release tag was used. Disposable signing private material was removed.
- Sol's review found an inaccurate migrated Central example and optimization-sensitive Python assertions. Both were fixed; 14 policy/verification tests now include optimized-mode regression probes. Sol re-review and final Astra review found no remaining actionable findings. Astra independently checked the tests, retained comparison payloads and wrapper provenance. Model review is not independent maintainer approval.
- Complete historical release-key records and verify consumer instructions #110 progressed: full observed 1.1–1.4.0 signature mapping, authenticated archival keys for 1.2.2–1.4.0, and tested full-fingerprint/checksum instructions in
VERIFYING.md. It remains open only for independent authorization records for the four earliest fingerprints; see the evidence-gap comment. Current project key unchanged. - Reference toolchain, Checkstyle Java 17 compatibility exception, descriptor parser exclusion, unit-only coverage scope and publisher-plugin mitigation limits are explicit in
BUILDING.md,RELEASING.md, and batch 04 validation. - The broader resolved signing/publishing dependency audit led to PR #187, merged as
3bd86250a9c9cd48577c3bf7fb9c46dbe91c1c90at 2026-09-26 07:35:25 UTC. Bouncy Castle pg/prov/util are aligned at 1.86 and both release plugins use compatible Plexus Utils 3.6.2, confined to plugin dependencies. All 28 final-head checks passed on0cb11a6a3bf2c842793c135df62fb9e9eaf2fd64; Sol and then Astra independently reviewed the diff and validation evidence with no actionable findings. The authorized PR-only review bypass was used; required CI/security checks have no bypass and passed. Model review is not independent maintainer approval. - Repeated the two-clean-build comparison after the POM change: all 17 payloads matched, and only the parent POM changed versus Modernize build policy and verify release artifacts #185. Both default GnuPG and optional Bouncy Castle signing passed with a new disposable local-only key; each set of 17 signatures verified and produced a 102-entry bundle. The full actual GPG/Central closure, 28 distinct coordinates including plugin roots, returned no OSV matches on 2026-09-26. The checked-in validation record contains all coordinates, payload hashes and both bundle hashes. This does not certify the entire build graph or live Central transport; other scoped dependency alerts remain visible.
- All four post-merge workflows passed on final main
3bd8625: Java CI, packaged consumers, CodeQL, and dependency submission. Live SBOM readback confirms BC 1.86/Plexus 3.6.2 and Central 0.11.0 alongside runtime/test ESAPI 2.7.0.0 and Jasper 9.0.122/10.1.60/11.0.26; the release and runtime graphs coexist. - Back on clean, synchronized
main; all merged task branches, generated targets/bytecode caches, isolated Maven/wrapper repositories and downloaded reference JDK were removed. Disposable signing private material was deleted, compact validation evidence retained, and unrelated branches/Pages/user Maven storage preserved. Eight batch 04 issues are closed; Complete historical release-key records and verify consumer instructions #110 remains open for its four historical authorization-record gaps. Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111 retains Central access, independent custody and real validated-and-dropped staging rehearsals. The 1.5 release gate remains in force; no tagging/publication was authorized by this maintenance batch.
Batch 05 complete — 2026-09-26 (America/Los_Angeles)
- Delivery: PR #189 merged as
8c32b2c69337b4883af13e4c9271c7726b0f6666after all 28 checks passed on final head735ad8b4cf8c19510a2f6fbff350c7fb5a2a58cf. Sol reviewed the docs/adapters and metadata/community scopes; corrected findings include version/context wording, moved links and the missing release template. Final Sol and Astra reviews found no actionable findings, including the final merged-ESAPI-history correction. Model review is not independent maintainer approval. Jim's authorized PR-only review bypass was used; required CI/security checks have no bypass and passed. - Rewrite the README and context guide, incorporating #114 and current 1.5 contracts #128 (including consolidated Consolidated into #128: README commands, coordinates and taglib discovery #114): coherent consumer README plus context/String/Writer/JSP/EL/URL/JPMS guidance; all four coordinates; released 1.4.1 versus unreleased 1.5 labels; core/adapter dependency and packaging distinctions; non-goals and explicit exact-output versioning policy. All five exact Central 1.4.1 POMs still returned 404; the signed GitHub security-release notice remains prominent. A POM/artifact-provenance inventory covers 28 resolved third-party consumer compile/runtime/provided coordinates, with test/build/WAR graphs explicitly outside that inventory.
- Create a verified changelog and reuse the existing security release-notes structure #115 / Refresh project/POM metadata while preserving historical authorship and bundle identities #116: verified changelog from tags, releases and merged changes; reusable release-note template and metadata checklist. Historical date discrepancies are labeled, not invented or overwritten. All four generated Bundle-Vendor/Bundle-DocURL entries and all five effective POMs use current OWASP organization/project metadata; maintainer roles and original Jeff Ichnowski authorship are accurate. Published names, Java 8, scopes and source notices remain intact.
- Correct repository discovery metadata and safely retire stale wiki guidance #117: verified wiki editing was unrestricted, restricted it to push-access users, and archived all four latest pages byte-for-byte with hashes from
a10dea70c502c02d072d3d9d2dc520d7c042587a. A verified complete-history Git bundle is retained. Current docs replace useful content and identify obsolete IE grave-accent/unsafe CSS/URL examples as historical. After merge, hid the wiki without deleting its history; unauthenticated/wikiredirects to the repository front page and APIhas_wikiis false. Live Java 8/context/core-versus-adapter description, current project homepage and 11 topics were read back. The external OWASP website remains separately coordinated under Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111; no social-preview blocker was added. - Add accurate contributor guidance and validated community/review metadata #127: project contribution guide, official OWASP Code of Conduct, PR template and three public issue forms with private security routes. Live issue chooser shows all three forms plus blank ordinary issues; Discussions stays disabled. CODEOWNERS lists verified admins Jim/Jeremy and GitHub reports zero errors. Existing enforcement is described accurately without new mandatory-owner/DCO/SLA requirements. Funding links distinguish the existing Add .well-known/funding-manifest-urls for FLOSS/fund #157 Manicode maintainer authorization from Foundation donations; both appear publicly in the enabled Sponsor section. GitHub detects the project contribution/CoC/PR files; its aggregate health score is not used as a substitute for live form verification.
- Validation: fresh isolated
clean verifypassed the full tests, API/Java 8 signatures, coverage and both JSP engines; 17 artifact guards, 14 policy/verification tests, 34-file parity and Java 17 classpath/explicit-and-automatic-JPMS/Felix consumers passed. The documented module example ran against the original 1.4.1 JAR after full-fingerprint signature verification. Two clean reference builds after metadata changes produced identical copies of all 17 payloads (12 JARs/five POMs); the checked-in record records hashes, provenance and scope. Later documentation-only commits change no artifact inputs. - Post-merge: all four main workflows passed: Java CI, packaged consumers, CodeQL, and dependency submission. All five batch issues are closed. Merged task branch removed locally/remotely; continued batch 06 from synchronized main. No release/signing/tag operation occurred; Complete historical release-key records and verify consumer instructions #110/Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111 remain open.
Batch 06 decision queue complete — 2026-09-26 (America/Los_Angeles)
- Delivery: PR #190 merged as
21705bdfe972f3a4458549fdbefe924b17b97096after all 28 final-head checks passed on70720012ab25d5218ef16811fbd6ef2f29127c44. Sol reviewed the committed four-file documentation diff, then Astra performed the final pass; neither found actionable findings. The authorized PR-only review bypass was used; required CI/security checks have no bypass and passed. Model reviews are not independent maintainer approval. - Decide future-major compatibility policy without committing 1.x to breaking changes #142 completed: the decision record gives explicit keep/defer decisions, consumer-fixture evidence, rationale and migration costs for every item: Java 8 baseline, explicit/automatic module identities, Jakarta/shared tag packages, forUri retention, javax/ESAPI adapter lifecycle and ESAPI compile scope, multi-release JARs, and exact-output versioning. No future break or removal date is approved; accepted future proposals require consumer-impact evidence and published migration notice before implementation. No speculative implementation tickets were created, and closed proposals stay closed. Already merged JSON/ordinary-template features remain accurately described. README, contribution and context guides link the record.
- Decide whether strict base64url belongs in this output-encoding library #149 closed as NOT_PLANNED: transport encoding/canonical decoding stays outside Java Encoder. Documented the JDK 8+ byte API instead of adding Base64Url/facade/tag/EL surfaces. The record covers protocol-specific padding, non-canonical decoder acceptance, strict Unicode/error/resource-limit boundaries, view/output-context restrictions and the mismatch with Encoder/EncodedWriter byte grouping. Conditional implementation/test/API criteria are N/A because the utility is rejected; no submitted code is alleged vulnerable and no contributor implementation is assigned. Existing ESAPI delegates are untouched. Reconsideration needs a new narrow product decision, not a promised future feature.
- Validation: the byte example compiled with
javac --release 8and printedAAECon JDK 17; padded/unpadded JDK decoder behavior was checked. Relative links/anchors and whitespace passed; both reviewers independently checked the evidence. This is documentation only, so batch 05's final byte comparison remains applicable. - Final main workflows: all four passed on
21705bdfe972f3a4458549fdbefe924b17b97096: Java CI, packaged consumers, CodeQL, dependency submission. No failure or cancelled check is treated as success. - Cleanup: back on clean
main, synchronized at21705bd. Both merged batch branches removed locally/remotely; generated targets, isolated Maven/wrapper repositories, downloaded reference JDK, temporary verification homes and generated CLI state removed. Compact logs, both sets of verified comparison payloads and the complete wiki-history bundle are retained. Unrelated branches, Pages, user tabs and the user's Maven storage are preserved. - Remaining: Complete historical release-key records and verify consumer instructions #110 still needs independent authorization records for four early signing fingerprints. Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111 still owns Central namespace access/exact retained 1.4.1 delivery, independent custody drills and validated-then-dropped publisher rehearsals. Existing automated dependency proposals and other then-open work still require deliberate release-gate review. Completing these decision/documentation batches does not authorize a 1.5 release, signing, tagging or publication; the full
RELEASING.mdgate remains in force.
PR queue cleanup complete — 2026-09-26 (America/Los_Angeles)
- Actions Update artifact actions with verified pins and strict digest checks #175: refreshed onto current main, reviewed official upload-artifact v7.0.1 (
043fb46d1a93c77aae656e7c1c64a875d1fc6a0a) and download-artifact v8.0.1 (3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c) source/releases/client behavior, and updated ACTION_PINS. Named same-run packaged consumers explicitly retain ZIP creation/extraction and fail a digest mismatch. Node 24 runs on hosted runners independently of the Java 8 consumer JVM. No cross-run token or workflow-permission expansion. Actionlint and all 14 policy/verification tests passed. Sol and then Astra found no actionable issues; all 28 final-head checks passed on9fafc772b8e7f55d44417a8b1f59b2ea69de2568. Merged as011734abc029726a115811b53228cdaa789e7232. - Bump the maven-dependencies group across 6 directories with 17 updates #176 closed as superseded: previously delivered GPG/Central/versions-plugin/Boot/app changes, retired reporting paths, the accepted bundle-plugin update and deferred API baselines account for every proposal. It was not merged with failing CI. Closure rationale.
- Bump the maven-dependencies group across 1 directory with 11 updates #188 closed as superseded by Update bundle plugin and isolate compatibility-sensitive dependency proposals #191: accepted only Bundle Plugin 6.2.0; deferred Checkstyle 14 (Java 21 requirement), Plexus 4 in publisher realms, changed public provided APIs/minimum test APIs, and Tomcat 11 replacing the javax/10.1 fixtures. These are dated compatibility decisions with explicit reconsideration criteria, not claims that all upgrades were applied or blanket advisory dismissals. Closure rationale and complete dependency decision record.
- Focused Update bundle plugin and isolate compatibility-sensitive dependency proposals #191 merged as
18582d3c7b2e7cdf87e42ab093a7763524f0fe90after all 28 checks passed on952501f0854405b0456cddc2f6d5ffbbe45d44d5. The only artifact-input change is Bundle Plugin 6.1.2 → 6.2.0, with bnd 7.3.0 → 7.4.0. Eleven exact baseline-sensitive coordinates are excluded only from the broad Maven version-update group, so they receive individual review. Monitored directories, schedules, existing ignores and the separate security-update group are unchanged. No new ignore, security-alert dismissal or automatic merge was added. - Validation: fresh reference Temurin 17.0.20.1+1/Maven 3.9.16 clean verify passed 2,178 unit tests and eight integration tests, API/Java 8 signatures, coverage and both real JSP engines. Java 17 original-JAR classpath/explicit-and-automatic-JPMS/Felix consumers, old-core rejection, 17 artifact guards, 14 policy/verification tests and 34-file parity passed. Required CI covers the Docker/browser/WAR suite, ten ESAPI versions and Java 8/11/17/21/25 consumers. Both fresh reproducibility exports of
d9d157d917c4b21208edcd52bdab5515e86a0a52produced identical copies of all 17 payloads. Against batch 05, only the parent POM plugin version and four binary manifests' Created-By values changed; every JAR entry set and all other entry contents match. The checked-in validation record contains all hashes and scope limits. - Dependency evidence: the actual bundle-plugin closure has 61 distinct coordinates before and after; only the plugin, bndlib and bnd.util versions change. Those three selected new coordinates returned no OSV matches. This delta check does not certify the 58 inherited coordinates or the full build/runtime graph. Existing advisory review remains required.
- Requested reviews: Sol reviewed Actions and Maven dispositions separately, corrected the already delivered versions-plugin attribution, then reviewed both final diffs. Astra's final passes found no actionable issues and independently checked all 17 payloads, baseline byte differences and unchanged security grouping. Model review is not independent maintainer approval. Jim authorized the merges; the existing PR-only review bypass was used, with all required CI/security checks passing and no bypass for those checks.
- Post-merge verification: All four workflows passed on the Actions merge: Java CI, Packaged consumer compatibility, CodeQL, Dependency submission. All four also passed on final main
18582d3: Java CI, Packaged consumer compatibility, CodeQL, Dependency submission. Live SBOM readback confirms Bundle Plugin 6.2.0 and both bnd 7.4.0 artifacts coexist with ESAPI 2.7.0.0, Bouncy Castle 1.86 and Central plugin 0.11.0; the build/runtime/release graph coverage remains intact. - Cleanup: clean synchronized main at
18582d3; all merged/superseded task branches removed, temporary Maven worktree/build outputs/isolated caches/reference JDK removed, and compact logs plus both sets of verified payloads retained. Unrelated branches/Pages and user Maven storage are preserved. Both Maven and Actions Dependabot refresh jobs completed successfully. The Maven refresh generated 16 individual PRs (Bump jakarta.servlet.jsp:jakarta.servlet.jsp-api from 3.0.0 to 4.0.0 #192–Bump javax.servlet:javax.servlet-api from 3.0.1 to 4.0.1 in /jsp #207) for the already reviewed deferrals, including duplicate inherited parent-POM proposals from module scans. Every diff was inspected and closed with its specific compatibility rationale and links to the merged record; no new compatible upgrade was discarded. Redundant CI for closed proposals was cancelled where still running, not counted as successful verification. Final GitHub API readback: zero open PRs. Future version/security proposals remain eligible and need review on their own evidence. - Remaining release work: Complete historical release-key records and verify consumer instructions #110's four early fingerprint authorization gaps and Complete release readiness: Central 1.4.1 publication and independent maintainer recovery #111's Central publication/access, independent custody drills and publisher rehearsals remain open. No release signing, Portal upload, tag or publication was performed or authorized by this cleanup. The full 1.5 release gate remains in force.
Activity