Release Privacy Tools 0.2.0
Verify / verify (push) Canceled after 0s

This commit is contained in:
2026-09-02 10:09:14 +02:00
parent bfd6422149
commit 38fa45dbaa
31 changed files with 1039 additions and 95 deletions
+5
View File
@@ -1,5 +1,10 @@
# Changelog
## 0.2.0 - 2026-09-02
- Added reusable selective-removal profiles and pseudonymized per-file policy evidence across supported and inspect-only formats.
- Distinguished verified full re-encoding, available re-encoding, inspect-only input, and non-executable selective-preservation requests; added Toolbox I/O/capability metadata.
## 0.1.0 - 2026-09-01
- Added byte-signature inventory, claimed-vs-detected media types, safe names,
+3 -3
View File
@@ -1,5 +1,5 @@
==============================================================================
@add-ideas/toolbox-contract@0.2.3
@add-ideas/toolbox-contract@0.3.0
Declared licence: Apache-2.0
==============================================================================
--- LICENSE ---
@@ -198,7 +198,7 @@ Declared licence: Apache-2.0
==============================================================================
@add-ideas/toolbox-helpers@0.1.0
@add-ideas/toolbox-helpers@0.2.0
Declared licence: GPL-3.0-or-later
==============================================================================
--- LICENSE ---
@@ -879,7 +879,7 @@ Public License instead of this License. But first, please read
==============================================================================
@add-ideas/toolbox-shell-react@0.2.3
@add-ideas/toolbox-shell-react@0.3.0
Declared licence: Apache-2.0
==============================================================================
--- LICENSE ---
+19 -4
View File
@@ -22,9 +22,24 @@ lookups, telemetry, or runtime network calls. A source file is never modified.
removed, preserved, generated, unsupported, or incompletely checked, and
includes source/output SHA-256 hashes and a bounded decoded-pixel sample
comparison.
5. Download an individual re-encoded image, a JSON report, or a ZIP containing
re-encoded images and the report. The report itself may be sensitive because
it contains source filenames and metadata values.
5. Download generic sequentially named outputs, a pseudonymized safe-share
report, or a ZIP containing both. The separate detailed report preserves
source filenames and metadata values and may itself be sensitive.
6. Apply a reusable selective-removal policy to the scan evidence. The policy
matrix records remove, preserve, and review categories for every input,
distinguishes verified full re-encoding from inspect-only formats, and can
be exported without source names or raw metadata values.
The safe-share report deliberately omits source names, timestamps, hashes,
exact byte sizes, metadata values and offsets. It retains scanner coverage,
format/dimension facts and categorized counts; unusual combinations can still
be identifying, so the report remains subject to human review.
Policy evidence is a decision aid, not a surgical metadata editor. Current
JPEG/PNG/WebP output is a complete decoded-pixel re-encode; it does not preserve
selected source metadata. For TIFF, GIF, HEIF-family, JPEG XL, PDF, archives,
Office and unknown inputs the policy honestly reports `inspect-only` or
`policy-not-executable` rather than promising a cleaned file.
## Format support
@@ -107,7 +122,7 @@ npm run release:artifact
This checks the manifest, types, lint, formatting, unit fixtures, production
build, Toolbox contract, and Chromium/Firefox workflows, then creates the
deterministic `release/privacy-tools-0.1.0.zip` plus its SHA-256 sidecar. The
deterministic `release/privacy-tools-0.2.0.zip` plus its SHA-256 sidecar. The
archive contains the static application, project documents, and exact runtime
dependency licence texts.
+2 -2
View File
@@ -1,8 +1,8 @@
# Corresponding source
The corresponding source for Privacy Tools 0.1.0 is published at:
The corresponding source for Privacy Tools 0.2.0 is published at:
https://git.add-ideas.de/lotobo/privacy-tools/src/tag/v0.1.0
https://git.add-ideas.de/lotobo/privacy-tools/src/tag/v0.2.0
Build with Node.js 22 and npm 11:
+3 -3
View File
@@ -11,9 +11,9 @@ Material runtime components include:
| -------------------------------- | ------- | ---------------- | -------------------------------------------------------------------------------------------------- |
| ExifReader | 4.44.0 | MPL-2.0 | Secondary metadata parser; <https://github.com/mattiasw/ExifReader/tree/v4.44.0> |
| fflate | 0.8.2 | MIT | Bounded PNG metadata inflation and ZIP creation; <https://github.com/101arrowz/fflate/tree/v0.8.2> |
| `@add-ideas/toolbox-helpers` | 0.1.0 | GPL-3.0-or-later | Hashing, safe names, download and deterministic JSON primitives |
| `@add-ideas/toolbox-contract` | 0.2.3 | Apache-2.0 | Toolbox manifest contract |
| `@add-ideas/toolbox-shell-react` | 0.2.3 | Apache-2.0 | Shared application shell |
| `@add-ideas/toolbox-helpers` | 0.2.0 | GPL-3.0-or-later | Hashing, safe names, download and deterministic JSON primitives |
| `@add-ideas/toolbox-contract` | 0.3.0 | Apache-2.0 | Toolbox manifest contract |
| `@add-ideas/toolbox-shell-react` | 0.3.0 | Apache-2.0 | Shared application shell |
| React / React DOM | 19.2.8 | MIT | User interface |
ExifReader is used unmodified. Its MPL-2.0 covered source remains available at
+8 -2
View File
@@ -27,8 +27,14 @@ arrays, and plain objects. No parser returns HTML or a live third-party object.
decoded sample. `buildSanitizationReport` assigns verified/warning/failed
based on explicit coverage and output findings.
6. `archive` serializes bounded deterministic JSON and creates stored ZIP
entries from application-generated `images/` paths and sanitized unique
names.
entries from application-generated `images/` paths. Safe-share archives use
generic sequential image names and a reduced report; detailed reports remain
an explicit, separate download for local auditing.
7. `policy` applies frozen, versioned category rules to normalized findings. It
creates pseudonymous per-file evidence across every inventoried format and
separately reports whether the requested removal can be executed by the
existing verified re-encode path. New policy profiles can be added without
changing a container parser.
Pixel decoding and Canvas encoding currently run on the main browser context
because portable cross-browser image encoder support is there; metadata parsing
+14 -2
View File
@@ -55,5 +55,17 @@ filesystem metadata, clipboard/history records, application caches, backed-up
originals, or cloud/recipient copies. Review the visible output, destination,
report, and surrounding files yourself.
The JSON report is sensitive by design: it can include original filenames,
hashes, timestamps, and metadata values. Share or retain it only intentionally.
The detailed JSON report is sensitive by design: it can include original
filenames, hashes, timestamps, metadata values, offsets, and parser notes. Share
or retain it only intentionally. The separate safe-share report replaces file
identity with sequential pseudonyms and omits those source identifiers and raw
values. It retains formats, dimensions, coverage states, note counts, and
finding-category totals so it is useful for review without claiming anonymity.
Safe-share ZIPs likewise use generic sequential output names.
Selective-removal policy evidence follows the same pseudonymization boundary.
It can show which finding categories a policy would remove, preserve, or send
for review, but it never upgrades inspection coverage and never calls a format
safe when no verified output exists. A requested “location-only” policy is
therefore non-executable with the current all-metadata pixel re-encode; users
receive evidence rather than a misleading partially preserved output.
+1 -1
View File
@@ -1,5 +1,5 @@
const CACHE_PREFIX = "privacy-tools-shell-";
const CACHE_NAME = CACHE_PREFIX + "0.1.0";
const CACHE_NAME = CACHE_PREFIX + "0.2.0";
const CORE = ["./", "./manifest.webmanifest", "./favicon.svg"];
self.addEventListener("install", (event) => {
event.waitUntil(
+51 -3
View File
@@ -3,12 +3,20 @@
"schemaVersion": 1,
"id": "de.add-ideas.privacy-tools",
"name": "Privacy Tools",
"version": "0.1.0",
"description": "Inspect and remove shareable-file metadata locally in the browser.",
"version": "0.2.0",
"description": "Inspect metadata and create policy-evidenced sharing copies locally.",
"entry": "./",
"icon": "./favicon.svg",
"categories": ["privacy", "files", "security"],
"tags": ["metadata", "exif", "privacy", "sanitize", "share"],
"tags": [
"metadata",
"exif",
"privacy",
"sanitize",
"policy",
"evidence",
"share"
],
"integration": {
"contextVersion": 1,
"launchModes": ["navigate", "new-tab"],
@@ -21,6 +29,46 @@
"crossOriginIsolated": false,
"topLevelContext": false
},
"io": {
"accepts": [
{
"mediaType": "*/*",
"extensions": [],
"label": "Files for bounded metadata inventory"
}
],
"produces": [
{
"mediaType": "image/jpeg",
"extensions": [".jpg", ".jpeg"],
"label": "Verified re-encoded JPEG"
},
{
"mediaType": "image/png",
"extensions": [".png"],
"label": "Verified re-encoded PNG"
},
{
"mediaType": "image/webp",
"extensions": [".webp"],
"label": "Verified re-encoded WebP"
},
{
"mediaType": "application/json",
"extensions": [".json"],
"label": "Inspection and policy evidence"
},
{
"mediaType": "application/zip",
"extensions": [".zip"],
"label": "Safe-share bundle"
}
]
},
"capabilities": {
"required": ["canvas-2d", "web-crypto", "workers"],
"optional": ["create-image-bitmap"]
},
"privacy": {
"processing": "local",
"fileUploads": true,