The Electron guide currently uses a teaching fixture. Add a real Notion clipboard case with REA findings, short source excerpts and responsive figures, alongside the existing DX-Ball reconstruction. - Trace the saved Notion 7.6.1 preload API through its wrappers to the clipboard receiver. Attribute the separate web-cache module probes to their original harness. Public content uses relative source locations and generic example data; packages and complete captures stay local. - Add a Showcases index and links from the homepage and JavaScript guide. Simplify homepage copy while preserving the approved headline and closing question. - Show copyable agent installation prompts and the direct setup command. Keep terminal cursors blinking consistently and respect reduced-motion settings. - Provide one Notes example ZIP. Generate it from the six public source files before website checks and manual Pages deployment; verify its contents against the source. Pages remains manual-only. Validation: - `npm run check:fast` - `python3 scripts/prepare-website.py` and `python3 scripts/verify-website.py` - Browser checks at `/` and `/rea/`: downloads, prompt/command copying, responsive layouts, keyboard navigation, reduced motion and DX-Ball comparison controls. - Published REA 4.1.0 preload analysis and feature traces; source/claim/privacy review. - Real Hopper/Ghidra verification: not performed (website-only change).
41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
"""Package the public Notes example for the static website."""
|
|
|
|
from io import BytesIO
|
|
from pathlib import Path
|
|
from zipfile import ZIP_DEFLATED, ZipFile, ZipInfo
|
|
|
|
|
|
EXAMPLE_FILES = (
|
|
"package.json",
|
|
"main.js",
|
|
"preload.js",
|
|
"renderer.js",
|
|
"csv.js",
|
|
"index.html",
|
|
)
|
|
|
|
|
|
def prepare_notes_example(site):
|
|
"""Create a ZIP with public source only and reproducible metadata."""
|
|
source = site / "examples/notes-electron"
|
|
contents = BytesIO()
|
|
with ZipFile(contents, "w") as archive:
|
|
for name in EXAMPLE_FILES:
|
|
entry = ZipInfo(f"notes-example/{name}", (1980, 1, 1, 0, 0, 0))
|
|
entry.create_system = 3
|
|
entry.external_attr = 0o100644 << 16
|
|
archive.writestr(
|
|
entry,
|
|
(source / name).read_bytes(),
|
|
compress_type=ZIP_DEFLATED,
|
|
compresslevel=9,
|
|
)
|
|
destination = site / "examples/notes-example.zip"
|
|
destination.write_bytes(contents.getvalue())
|
|
print(f"Prepared examples/notes-example.zip ({len(EXAMPLE_FILES)} files).")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
root = Path(__file__).resolve().parent.parent
|
|
prepare_notes_example(root / "website/public")
|