Workshop assistant.
@@ -287,8 +314,63 @@
diff --git a/.gitignore b/.gitignore index 95b8017..e346ea0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,12 @@ .DS_Store -CODE2PROMPT*.txt +C2P-*.* node_modules playwright-report/* +!playwright-report/FOLDER-DESCRIPTION.md test-results/* +!test-results/FOLDER-DESCRIPTION.md coverage/* +!coverage/FOLDER-DESCRIPTION.md docs/* -references/.venv +!docs/FOLDER-DESCRIPTION.md +codemap/* diff --git a/JSDOC_index.md b/JSDOC_index.md index 1665287..482b613 100644 --- a/JSDOC_index.md +++ b/JSDOC_index.md @@ -31,7 +31,7 @@ Node tooling exists only for tests, docs, validation, and i18n extraction. ```text lab.html ├─ face-api.js (Vladmandic) + MediaPipe Tasks Vision - ├─ scripts/main.js — application controller; exposes window.gstmxx + ├─ lab-js/main.js — application controller; exposes window.gstmxx │ ├─ camera.js — webcam stream lifecycle, 2s recording │ ├─ engine.js — face-api 2D detection / landmarks / descriptors / matching │ ├─ engine-3d.js — MediaPipe ImageEmbedder experimental visual-embedding path @@ -73,7 +73,7 @@ with "does the modified face still match". This split is documented in the ## Module map -### Core scripts (`scripts/`) +### Core scripts (`lab-js/`) - **`main.js`** — application entry point; initialises subsystems, dispatches the `gstmxxReady` lifecycle event, and exposes the public API on `window.gstmxx`. diff --git a/README.md b/README.md index 6446d36..eac4bc7 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ authoring guide — kept there so they live in one place only. ## Internationalization Runtime translations for English, Italian, and Portuguese are shipped through -`scripts/i18n.js` (a single inline message catalog + `data-i18n*` attributes + +`lab-js/i18n.js` (a single inline message catalog + `data-i18n*` attributes + `t()` in JS). There is no `locales/` directory and no build step. Translated pages currently include `index.html`, `lab.html`, and `loader.html`; other static pages are English-baseline until they add `data-i18n*` bindings. See diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..9676385 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,36 @@ +# Security Policy + +## Reporting a vulnerability + +Report privately to **vecna@hermescenter.org**, or open a [GitHub private security advisory](https://github.com/vecna/ghostmaxxing/security/advisories/new). +Please do not open a public issue for an unpatched vulnerability. + +Expect an acknowledgement within 5 working days and an assessment within 15. +We will tell you when a fix ships and credit you unless you ask us not to. + +## Scope + +Ghostmaxxing is a static site with no backend. Everything runs client-side and no face data is transmitted. That shapes what a vulnerability looks like here. + +**In scope** + +- Any path by which biometric data (camera frames, descriptors, embeddings, saved faces, thumbnails) leaves the browser or persists where a user does not expect it. +- XSS or injection in any page, particularly `report.html` — a person reading that page may be at risk, and a compromise there is a safety problem, not only a security one. +- Escape from the Ghostyle plugin sandbox into a scope that could exfiltrate data or persist across sessions. +- Weaknesses in the reporting channel described on `report.html`, including anything that could deanonymise a submitter or leak submission metadata. +- Supply-chain issues in vendored assets under `lab-js/vendor/` or `styles/vendor/`. + +**Out of scope** + +- The recognition pipeline failing to match, or a Ghostyle failing to defeat a match. This is the subject of the project, not a defect. See the disclaimer in the README. +- Anything related to the whistleblowing submission platform, hosted at https://raccontaci.nina.watch, should be reported at https://globaleaks.org +- Reports generated by automated scanners with no demonstrated impact. +- Missing hardening headers with no exploitable consequence on a static site. + +## A note on the Ghostyle threat model + +Ghostyles are arbitrary JavaScript that runs in the user's browser, and the project treats them that way deliberately — review is a maintainer reading the whole file. A malicious Ghostyle is therefore not in itself a vulnerability report. A way for a Ghostyle to reach beyond its documented surface **is**. + +## Machine-readable pointer + +`/.well-known/security.txt` (RFC 9116) points here. diff --git a/about.html b/about.html index 86038ba..1dafec3 100644 --- a/about.html +++ b/about.html @@ -5,7 +5,7 @@
@@ -287,8 +314,63 @@