From bd03d908484df3d7286cf545fd225acd0376fce2 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 01:28:06 +0000 Subject: [PATCH 01/28] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0bbe1f0..1aaa378 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ site/ __pycache__/ *.pyc .venv/ +.secret \ No newline at end of file From a2fa1805f6fe2156fabeca730f6e8cdcf261be3c Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 01:38:46 +0000 Subject: [PATCH 02/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 60f2f6e..3b00e59 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -8,6 +8,11 @@ jobs: deploy: runs-on: docs-runner # must match the label of your registered act_runner steps: + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: 24.18 + - name: Checkout uses: actions/checkout@v4 From 9da92a2ee48e475ad8f0f444833c620abb72e87c Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 01:53:17 +0000 Subject: [PATCH 03/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 3b00e59..60f2f6e 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -8,11 +8,6 @@ jobs: deploy: runs-on: docs-runner # must match the label of your registered act_runner steps: - - name: Set up Node - uses: actions/setup-node@v4 - with: - node-version: 24.18 - - name: Checkout uses: actions/checkout@v4 From 48c7ada3f14d0fc07a6412c695e2ce8765d97b0c Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 02:08:24 +0000 Subject: [PATCH 04/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 60f2f6e..4173c38 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -8,9 +8,19 @@ jobs: deploy: runs-on: docs-runner # must match the label of your registered act_runner steps: + - name: Debug + run: | + echo "REPOSITORY=$GITHUB_REPOSITORY" + echo "SERVER_URL=$GITHUB_SERVER_URL" + echo "GITEA_URL=$GITEA_URL" + env | sort | egrep -i 'GITHUB|GITEA|SERVER|URL|REPOSITORY' || true + - name: Checkout uses: actions/checkout@v4 - + with: + repository: bitcoinafterlife/bal-docs + server-url: https://bitcoin-after.life/gitea + fetch-depth: 1 - name: Install dependencies run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml From 66c2490baf3f3be32618d49280690e730f6293fb Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 02:12:38 +0000 Subject: [PATCH 05/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 4173c38..7d25ce3 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -18,8 +18,8 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - repository: bitcoinafterlife/bal-docs - server-url: https://bitcoin-after.life/gitea + repository: gitea/bitcoinafterlife/bal-docs + server-url: https://bitcoin-after.life fetch-depth: 1 - name: Install dependencies run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml From cecf8984fbe5f8b267ed33181c62698a64995e06 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 02:21:25 +0000 Subject: [PATCH 06/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 7d25ce3..e01604c 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -15,12 +15,10 @@ jobs: echo "GITEA_URL=$GITEA_URL" env | sort | egrep -i 'GITHUB|GITEA|SERVER|URL|REPOSITORY' || true - - name: Checkout - uses: actions/checkout@v4 - with: - repository: gitea/bitcoinafterlife/bal-docs - server-url: https://bitcoin-after.life - fetch-depth: 1 + - name: Checkout repository + run: | + git clone --depth 1 https://oauth2:${GITHUB_TOKEN}@${GITHUB_SERVER_URL#https://}/${GITHUB_REPOSITORY} . + - name: Install dependencies run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml From 1a5e29592bf11f86a2b5ce7762595d59c0665a39 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 02:27:20 +0000 Subject: [PATCH 07/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index e01604c..e836d14 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -18,7 +18,11 @@ jobs: - name: Checkout repository run: | git clone --depth 1 https://oauth2:${GITHUB_TOKEN}@${GITHUB_SERVER_URL#https://}/${GITHUB_REPOSITORY} . - + + - name: Set up virtualenv + run: | + echo "PATH=/home/git/venv/bin:$PATH" >> $GITHUB_ENV + - name: Install dependencies run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml From 7541b6328dde7dbb7f6da4cfaa9ebe92b13e8f57 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 02:29:02 +0000 Subject: [PATCH 08/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index e836d14..ed9d8f8 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -21,7 +21,7 @@ jobs: - name: Set up virtualenv run: | - echo "PATH=/home/git/venv/bin:$PATH" >> $GITHUB_ENV + echo "PATH=/home/git/venv/bin:$PATH" >> $GITHUB_ENV - name: Install dependencies run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml From d8bdc22c4f35bd8ffcedd446b649ffe05aec69ab Mon Sep 17 00:00:00 2001 From: svatantrya Date: Wed, 29 Jul 2026 22:38:03 -0400 Subject: [PATCH 09/28] uuuu --- internal/README.md | 0 internal/brand-assets.md | 0 internal/design-choices-DRAFT.md | 0 internal/screenshot-checklist.md | 105 +++---------------------------- internal/source-notes.md | 21 +------ 5 files changed, 11 insertions(+), 115 deletions(-) mode change 100644 => 100755 internal/README.md mode change 100644 => 100755 internal/brand-assets.md mode change 100644 => 100755 internal/design-choices-DRAFT.md mode change 100644 => 100755 internal/screenshot-checklist.md mode change 100644 => 100755 internal/source-notes.md diff --git a/internal/README.md b/internal/README.md old mode 100644 new mode 100755 diff --git a/internal/brand-assets.md b/internal/brand-assets.md old mode 100644 new mode 100755 diff --git a/internal/design-choices-DRAFT.md b/internal/design-choices-DRAFT.md old mode 100644 new mode 100755 diff --git a/internal/screenshot-checklist.md b/internal/screenshot-checklist.md old mode 100644 new mode 100755 index 6f49236..f868a4d --- a/internal/screenshot-checklist.md +++ b/internal/screenshot-checklist.md @@ -16,112 +16,27 @@ Placeholders never overwrite a real image. ## Capture rules — keep these identical everywhere - **Electrum window only**, not the whole desktop. - - Windows: ++win+shift+s++ (Snipping Tool) or use `grim -g "$(slurp)" shot.png` if you prefer - - macOS: ++cmd+shift+4++ then ++space++ to capture a window - - Linux: `gnome-screenshot -w` or `import -window root shot.png` (ImageMagick) -- **1280×720** at system zoom 100%** — this matches Electrum's typical window size when maximized on a laptop. -- **Light theme** (default Electrum) for consistency. Never mix light and dark. -- **PNG** format, no JPEG. -- **Crop tightly** to the Electrum window; include title bar and the relevant tab/dialog. - -## Setting up the test wallet - -Use **testnet** (not mainnet) so no real Bitcoin is at risk. In Electrum: -1. Create → New wallet -2. Name: `Screenshot_Test` or similar (will show in the title bar) -3. Standard wallet → Create new seed -4. Write down the seed (you'll need to restore it later) -5. Set a simple password like `test` (will be shown in password dialogs) -6. In Electrum's Network tab, switch to testnet servers - -Get testnet Bitcoin from a faucet (e.g. testnet-faucet.mempool.space) to populate the wallet so screenshots show real-looking balances. + Windows: ++win+shift+s++ · macOS: ++cmd+shift+4++ then ++space++ · Linux: your screenshot tool's window mode. +- **~1280×800**, system zoom at 100%. +- **One theme** for the entire manual — never mix light and dark shots. +- **PNG** format. ## Data hygiene — this is the important part Screenshots of an inheritance plugin leak real information if you are careless. -- Use the **dedicated testnet wallet** set up above. -- **Fake heir names** (Jonny, Andrea, Emma — as in the original manual). -- **Round, obviously fake amounts** (0.05 BTC, 0.1 BTC, never suspicious multiples like 0.0314 BTC). -- **No real Bitcoin address** that belongs to you or anyone you know — use generated testnet addresses or Bitcoin StackExchange examples. -- **Obfuscate file paths**: the title bar will show your wallet filename. Use a generic name like `Screenshot_Test`, not `MyWallet_MainAccount`. -- Check the window title bar, the status bar, tooltips, and any dialogs — they often contain a username or a real wallet filename. Crop or blur them if necessary. +- Use a **dedicated test wallet**, ideally on testnet. +- **Fake heir names** (Jonny, Andrea — as in the original manual). +- **Round, obviously fake amounts.** +- **No real Bitcoin address** that belongs to you or anyone you know. +- Check the window title bar, the status bar, and any visible file paths — they often + contain a username or a real wallet filename. ## Annotations If you add arrows or highlight boxes, keep one consistent style across the whole manual: same colour, same stroke width, same arrowhead. Inconsistent annotation looks worse than none. -## The 24 screenshots — what to capture - -All are from the **HEIRS and WILL tabs** or the **startup wizard**. Placeholder images already exist in `docs/img/`; replace them with real shots. - -### Installation & setup (6 images) - -| File | Where | What to show | -|---|---|---| -| `install-electrum-plugins-menu.png` | Electrum → Tools → Plugins | The "Plugins" dialog with built-in plugins listed. Show the internal plugins, and note the "Add" button for external plugins. | -| `install-from-file.png` | Electrum → Tools → Plugins → Add | File selector dialog, pointing to the BAL `.zip` file. | -| `install-plugin-enabled.png` | Electrum → Tools → Plugins | Plugin list with "Bitcoin After Life" checked/enabled. | -| `overview-tabs.png` | Electrum main window | The Electrum window with HEIRS and WILL tabs visible. Show the tab bar clearly. | -| `hardware-wallet-signing.png` | During signing on a hardware wallet | A hardware wallet confirmation screen (Ledger, Trezor, etc.) asking the user to confirm. If you don't have one, skip and update the manual to note it's optional. | -| `welist-website.png` | https://welist.bitcoin-after.life/ | The WeList website showing available Will-Executors and their fees. | - -### Wizard — 5 steps (5 images) - -Start the wizard from **HEIRS → Add new heir → (wizard opens)**. - -| File | Wizard step | What to show | -|---|---|---| -| `wizard-01-start.png` | Welcome screen | The first wizard dialog with the title and brief explanation. | -| `wizard-02-heirs.png` | Add heirs | A few heir rows filled in: e.g., Jonny (50%), Andrea (50%), with Bitcoin addresses. | -| `wizard-03-delivery-time.png` | Delivery date | The date/time picker. Show either the calendar view or the Raw input field. | -| `wizard-04-willexecutors.png` | Select Will-Executors | The list of available Will-Executors from WeList with checkboxes, fees visible. Check a few (e.g., 3–4 servers). | -| `wizard-05-summary.png` | Review & sign | The final summary showing all choices: heirs, date, servers, total fee. | - -### HEIRS tab (3 images) - -| File | What to show | -|---|---| -| `heirs-tab.png` | The HEIRS tab overview with a list of added heirs (if any). | -| `heirs-new-heir.png` | The "Add new heir" button or dialog. | -| `heirs-export.png` | The export dialog/list (if available in the plugin UI). | - -### WILL tab (3 images) - -| File | What to show | -|---|---| -| `will-tab.png` | The WILL tab with one or more inheritance transactions listed. Show the columns and status. | -| `will-server-column.png` | Zoom in on the "Server" column showing the 5 textual states (OK, pending, awaiting first broadcast, unknown, overdue). | -| `will-context-menu.png` | Right-click on a will entry to show the context menu (e.g., "View details", "Copy fee address", etc.). | -| `will-details.png` | The details dialog for a single will, showing transaction data, date, servers, status. | - -### Backup & signing (3 images) - -| File | Where | What to show | -|---|---|---| -| `backup-transaction-save.png` | WILL tab → right-click → Backup transaction | File save dialog, showing the default `.psbt` filename. | -| `settings-*.png` (general, auth, advanced) | HEIRS or WILL tab settings | Plugin settings dialogs (if they exist in the UI). Capture the "General", "Authentication", and "Advanced" tabs or panels. | - -### Check Alive (advanced mode) (1 image) - -| File | Where | What to show | -|---|---|---| -| `check-alive-prompt.png` | Opening the wallet after Check Alive triggers | The dialog asking the user to refresh the will. | - ---- - -## Workflow to capture all 24 - -1. **Set up testnet wallet** (see "Setting up the test wallet" above). -2. **Install BAL plugin** in your Electrum instance. -3. **Go through the wizard** once to understand the flow, then capture each step. -4. **Create a few test wills** (different dates, different heir counts) so you have variety for the WILL tab screenshots. -5. **Capture the HEIRS tab** at various states (empty, with heirs, export dialog). -6. **Capture the WILL tab** at various states (wills in different states, details dialog, context menus). -7. **Save each** as `docs/img/` using the names from the table above. -8. **Run** `python3 tools/make_placeholders.py --list` to verify all 24 are found (should show 0 missing). - ## Adding a new image 1. Add an entry to `screenshots.yml` (`file`, `page`, `shows`). diff --git a/internal/source-notes.md b/internal/source-notes.md old mode 100644 new mode 100755 index 3bf0890..9bf4315 --- a/internal/source-notes.md +++ b/internal/source-notes.md @@ -21,26 +21,13 @@ Compiled July 2026. Keep this updated whenever the manual is revised. | "BAL 1.0" | Plugin v0.2.6 | | Manual step-by-step parameter setup | Guided **wizard** since v0.2.0 | | Check Alive is a base parameter | **Advanced mode** only | -| ~~9-state colour table for transaction status~~ | **Still correct — this was my error.** Verified 2026-07-27 by sampling pixels from `will-tab.png` (v0.6.1): `#2BC8ED` Signed and `#8AFA6C` Checked match the PDF exactly. Status (9 colour-coded stages, cumulative, dot-joined) and Server (5 textual labels) are **two different columns** that coexist. The PDF documents only Status because Server is newer. | +| 9-state colour table for transaction status | **Server column** with 5 textual labels | | Postponing always requires an on-chain invalidation | Balance/heir changes → will **anticipated by one day and redistributed**, no on-chain fee. On-chain invalidation only for a genuine postponement | | Will-Executor lists come from BitcoinTalk | **WeList** directory, downloaded by default | | "prepare / sign / broadcast" run automatically on close | Still true, but the plugin **asks** — it never signs on your behalf | -## Version bumps log - -| Date | plugin_version | electrum_latest | Note | -|---|---|---|---| -| 2026-07 (initial) | 0.2.6 | 4.7.2 | Last version explicitly documented in a release ("tested with electrum 4.7.1") | -| 2026-07-26 | 0.6.1 | 4.8.0 | Jump from 0.2.6 → 0.6.1: releases v0.5.18/v0.6.0/v0.6.1 mostly cover Tor/onion will-executor support. | -| 2026-07-27 | 0.6.1 | 4.8.0 | Confirmed: v0.6.1 tested against Electrum 4.8.0. `electrum_tested` updated from 4.7.1 → 4.8.0; the compatibility table row simplified to a single Electrum version. | - ## To verify with the developers before the next revision -0. ~~Electrum version actually tested for plugin v0.6.1~~ — confirmed 2026-07-27: Electrum 4.8.0. -0b. ~~Architecture diagram version label mismatch~~ — fixed 2026-07-26: `docs/img/architecture.svg` - now reads "Python · v0.6.1", matching `plugin_version`. Still worth asking the diagram's source - (likely a design tool, not this repo) to drop the hardcoded version label so it doesn't need a - manual edit at every future release. 1. **Exact execution tolerance.** The manual states "~1 hour after the set time, due to the 11-block median". Confirm this still holds. 2. **Relative (Raw) date syntax.** The PDF documents `d` and `y` suffixes. Confirm which @@ -52,12 +39,6 @@ Compiled July 2026. Keep this updated whenever the manual is revised. 5. **Fee range currently charged** by Will-Executors on the network (for the recruitment article). 6. **Minimum system requirements** for a Will-Executor node, stated concretely. 7. **BIP 128 critique** — see `design-choices-DRAFT.md`. The single most exposed point. -8. **`docs/examples.md` (new, 2026-07-28) — needs a full accuracy pass.** Written from - `updating.md`/`delivery-time.md` rather than tested behaviour; user flagged it as containing - "parecchie imprecisioni" without specifying which. Marked with a draft warning on the page - itself. Re-check in particular: whether ordinary balance/heir changes really re-anticipate for - free every time (vs. some limit or condition), and whether postponing to hold a rolling 5-year - horizon really costs only "a small miner fee" as stated. ## Deliberately left out of the published manual From c1e5b3835183cf03285fc67159c504ff902119d8 Mon Sep 17 00:00:00 2001 From: svatantrya Date: Wed, 29 Jul 2026 22:39:42 -0400 Subject: [PATCH 10/28] tools --- .gitea/workflows/deploy.yml | 16 +------- .gitignore | 1 - tools/make_placeholders.py | 80 +++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 15 deletions(-) mode change 100644 => 100755 .gitea/workflows/deploy.yml mode change 100644 => 100755 .gitignore create mode 100755 tools/make_placeholders.py diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml old mode 100644 new mode 100755 index ed9d8f8..60f2f6e --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -8,20 +8,8 @@ jobs: deploy: runs-on: docs-runner # must match the label of your registered act_runner steps: - - name: Debug - run: | - echo "REPOSITORY=$GITHUB_REPOSITORY" - echo "SERVER_URL=$GITHUB_SERVER_URL" - echo "GITEA_URL=$GITEA_URL" - env | sort | egrep -i 'GITHUB|GITEA|SERVER|URL|REPOSITORY' || true - - - name: Checkout repository - run: | - git clone --depth 1 https://oauth2:${GITHUB_TOKEN}@${GITHUB_SERVER_URL#https://}/${GITHUB_REPOSITORY} . - - - name: Set up virtualenv - run: | - echo "PATH=/home/git/venv/bin:$PATH" >> $GITHUB_ENV + - name: Checkout + uses: actions/checkout@v4 - name: Install dependencies run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index 1aaa378..0bbe1f0 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,3 @@ site/ __pycache__/ *.pyc .venv/ -.secret \ No newline at end of file diff --git a/tools/make_placeholders.py b/tools/make_placeholders.py new file mode 100755 index 0000000..0bd0c06 --- /dev/null +++ b/tools/make_placeholders.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +"""Generate a visible placeholder for every screenshot listed in screenshots.yml +that does not yet exist in docs/img/. + +Real screenshots are never overwritten: drop the real PNG in docs/img/ with the +manifest filename and this script will simply skip it. + +Usage: + python3 tools/make_placeholders.py # fill in what's missing + python3 tools/make_placeholders.py --list # show what is still missing + python3 tools/make_placeholders.py --force # redraw ALL placeholders + # (never touches real screenshots + # unless they are placeholders) +""" +import sys +from pathlib import Path + +try: + import yaml +except ImportError: + sys.exit("Missing dependency: pip install pyyaml") +from PIL import Image, ImageDraw + +ROOT = Path(__file__).resolve().parent.parent +MANIFEST = ROOT / "screenshots.yml" +IMG_DIR = ROOT / "docs" / "img" +W, H = 1280, 720 +BG = (238, 241, 244) # --bal-bg #eef1f4 +FG = (91, 102, 114) # --bal-muted #5b6672 +ACCENT = (45, 108, 223) # --bal-accent #2d6cdf +# Backgrounds ever used by this script — lets --force recognise its own output +# (including older revisions) without ever touching a real screenshot. +KNOWN_PLACEHOLDER_BGS = {BG, (241, 243, 245)} + + +def draw_placeholder(path: Path, name: str, shows: str) -> None: + img = Image.new("RGB", (W, H), BG) + d = ImageDraw.Draw(img) + d.rectangle([8, 8, W - 8, H - 8], outline=ACCENT, width=4) + d.text((48, H // 2 - 60), "SCREENSHOT NEEDED", fill=ACCENT) + d.text((48, H // 2 - 20), f"file: docs/img/{name}", fill=FG) + d.text((48, H // 2 + 10), f"shows: {shows}", fill=FG) + d.text((48, H - 60), "Replace this file with the real screenshot (same filename).", fill=FG) + img.save(path) + + +def is_placeholder(path: Path) -> bool: + """A placeholder is exactly W x H with our flat background colour.""" + try: + with Image.open(path) as im: + return im.size == (W, H) and im.convert("RGB").getpixel((2, 2)) in KNOWN_PLACEHOLDER_BGS + except Exception: + return False + + +def main() -> None: + manifest = yaml.safe_load(MANIFEST.read_text(encoding="utf-8")) + IMG_DIR.mkdir(parents=True, exist_ok=True) + missing, created = [], 0 + for item in manifest["screenshots"]: + target = IMG_DIR / item["file"] + if target.exists() and not ("--force" in sys.argv and is_placeholder(target)): + continue + missing.append(item) + if "--list" not in sys.argv: + draw_placeholder(target, item["file"], item.get("shows", "")) + created += 1 + if "--list" in sys.argv: + if not missing: + print("All screenshots present.") + else: + print(f"{len(missing)} screenshot(s) still missing:") + for m in missing: + print(f" - {m['file']:38s} ({m.get('page','')}) — {m.get('shows','')}") + else: + print(f"{created} placeholder(s) generated, {len(manifest['screenshots']) - created} real image(s) already in place.") + + +if __name__ == "__main__": + main() From a2aca0350c8744ab26e3c3a90a71692689508216 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 02:41:26 +0000 Subject: [PATCH 11/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 60f2f6e..ed9d8f8 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -8,8 +8,20 @@ jobs: deploy: runs-on: docs-runner # must match the label of your registered act_runner steps: - - name: Checkout - uses: actions/checkout@v4 + - name: Debug + run: | + echo "REPOSITORY=$GITHUB_REPOSITORY" + echo "SERVER_URL=$GITHUB_SERVER_URL" + echo "GITEA_URL=$GITEA_URL" + env | sort | egrep -i 'GITHUB|GITEA|SERVER|URL|REPOSITORY' || true + + - name: Checkout repository + run: | + git clone --depth 1 https://oauth2:${GITHUB_TOKEN}@${GITHUB_SERVER_URL#https://}/${GITHUB_REPOSITORY} . + + - name: Set up virtualenv + run: | + echo "PATH=/home/git/venv/bin:$PATH" >> $GITHUB_ENV - name: Install dependencies run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml From 1c0484beb445077a9dc2a75f67363180b6f6d56f Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 02:43:21 +0000 Subject: [PATCH 12/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index ed9d8f8..41b65a7 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -24,7 +24,7 @@ jobs: echo "PATH=/home/git/venv/bin:$PATH" >> $GITHUB_ENV - name: Install dependencies - run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml + run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml pillow - name: Generate placeholders for missing screenshots run: python3 tools/make_placeholders.py From 1fcb706c986bb3d252bfa9832b674645c639d952 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 02:45:04 +0000 Subject: [PATCH 13/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 41b65a7..ea452fd 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -24,7 +24,7 @@ jobs: echo "PATH=/home/git/venv/bin:$PATH" >> $GITHUB_ENV - name: Install dependencies - run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml pillow + run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml pillow mkdocs-glightbox - name: Generate placeholders for missing screenshots run: python3 tools/make_placeholders.py From 1f8683b509628251eaa799228d98e3ff6e9999df Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 02:47:28 +0000 Subject: [PATCH 14/28] Update .gitea/workflows/deploy.yml aaa --- .gitea/workflows/deploy.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index ea452fd..28c65fc 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -34,3 +34,4 @@ jobs: - name: Publish run: rsync -a --delete site/ /var/www/bal-docs/ + \ No newline at end of file From 1bca88e00832a80c6aea785974059602c7193c5b Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 02:49:59 +0000 Subject: [PATCH 15/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 28c65fc..e5a6495 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -34,4 +34,6 @@ jobs: - name: Publish run: rsync -a --delete site/ /var/www/bal-docs/ - \ No newline at end of file + + - name: Permissions + run: chown git:www-data -R /var/www/bal-docs/ \ No newline at end of file From 82325bd1e7a53e89a1d00cff20a43ada63ce56bb Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 03:07:59 +0000 Subject: [PATCH 16/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index e5a6495..79d7288 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -36,4 +36,4 @@ jobs: run: rsync -a --delete site/ /var/www/bal-docs/ - name: Permissions - run: chown git:www-data -R /var/www/bal-docs/ \ No newline at end of file + run: chown gitea_runner:www-data -R /var/www/bal-docs/ \ No newline at end of file From 392efc878d1e2f45a25e2a4c79926b246507b82a Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 03:11:02 +0000 Subject: [PATCH 17/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 79d7288..6cad197 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -21,7 +21,7 @@ jobs: - name: Set up virtualenv run: | - echo "PATH=/home/git/venv/bin:$PATH" >> $GITHUB_ENV + echo "PATH=/home/gitea_runner/venv/bin:$PATH" >> $GITHUB_ENV - name: Install dependencies run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml pillow mkdocs-glightbox From 9189b0f2883f035d98874e237d7ef6177ce8fcbe Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 03:31:12 +0000 Subject: [PATCH 18/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 6cad197..e75effb 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -34,6 +34,3 @@ jobs: - name: Publish run: rsync -a --delete site/ /var/www/bal-docs/ - - - name: Permissions - run: chown gitea_runner:www-data -R /var/www/bal-docs/ \ No newline at end of file From ff83690ec6cacc72888f6e9f2537012d2c90f5f0 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 03:54:03 +0000 Subject: [PATCH 19/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index e75effb..732f679 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -8,12 +8,6 @@ jobs: deploy: runs-on: docs-runner # must match the label of your registered act_runner steps: - - name: Debug - run: | - echo "REPOSITORY=$GITHUB_REPOSITORY" - echo "SERVER_URL=$GITHUB_SERVER_URL" - echo "GITEA_URL=$GITEA_URL" - env | sort | egrep -i 'GITHUB|GITEA|SERVER|URL|REPOSITORY' || true - name: Checkout repository run: | From 19cf85f957627fb4a08f448f464bd593983ee57d Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 04:33:47 +0000 Subject: [PATCH 20/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 732f679..97bc048 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -15,7 +15,7 @@ jobs: - name: Set up virtualenv run: | - echo "PATH=/home/gitea_runner/venv/bin:$PATH" >> $GITHUB_ENV + echo "PATH=$HOME/venv/bin:$PATH" >> $GITHUB_ENV - name: Install dependencies run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml pillow mkdocs-glightbox From ad3da0dd53789fa2635a303e4fe8aef60ff480af Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 04:38:17 +0000 Subject: [PATCH 21/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 97bc048..8dd9074 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -18,7 +18,7 @@ jobs: echo "PATH=$HOME/venv/bin:$PATH" >> $GITHUB_ENV - name: Install dependencies - run: pip install --break-system-packages mkdocs-material mkdocs-macros-plugin pyyaml pillow mkdocs-glightbox + run: pip install mkdocs-material mkdocs-macros-plugin pyyaml pillow mkdocs-glightbox - name: Generate placeholders for missing screenshots run: python3 tools/make_placeholders.py From 12ad5fc84a7bc111a3228f8ef5ebf8ffa66d8e6f Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 05:01:45 +0000 Subject: [PATCH 22/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 8dd9074..c535ce1 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -8,6 +8,12 @@ jobs: deploy: runs-on: docs-runner # must match the label of your registered act_runner steps: + - name: Load environment + run: | + set -a + source .env + set +a + echo "BAL_DOCS_DEPLOY_DIR=$BAL_DOCS_DEPLOY_DIR" >> $GITHUB_ENV - name: Checkout repository run: | @@ -27,4 +33,4 @@ jobs: run: mkdocs build --strict - name: Publish - run: rsync -a --delete site/ /var/www/bal-docs/ + run: rsync -a --delete site/ $BAL_DOCS_DEPLOY_DIR From c541bb5c6a03bdeab815ef2974c0ddca24d8f42b Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 05:05:01 +0000 Subject: [PATCH 23/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index c535ce1..089187c 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -14,7 +14,8 @@ jobs: source .env set +a echo "BAL_DOCS_DEPLOY_DIR=$BAL_DOCS_DEPLOY_DIR" >> $GITHUB_ENV - + shell: bash + - name: Checkout repository run: | git clone --depth 1 https://oauth2:${GITHUB_TOKEN}@${GITHUB_SERVER_URL#https://}/${GITHUB_REPOSITORY} . From b38090d5b0c969e9ccfabef341d1a269af67c3f6 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 05:07:02 +0000 Subject: [PATCH 24/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 089187c..9424ab3 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -14,16 +14,13 @@ jobs: source .env set +a echo "BAL_DOCS_DEPLOY_DIR=$BAL_DOCS_DEPLOY_DIR" >> $GITHUB_ENV - shell: bash + echo "PATH=$HOME/venv/bin:$PATH" >> $GITHUB_ENV + shell: /bin/bash - name: Checkout repository run: | git clone --depth 1 https://oauth2:${GITHUB_TOKEN}@${GITHUB_SERVER_URL#https://}/${GITHUB_REPOSITORY} . - - name: Set up virtualenv - run: | - echo "PATH=$HOME/venv/bin:$PATH" >> $GITHUB_ENV - - name: Install dependencies run: pip install mkdocs-material mkdocs-macros-plugin pyyaml pillow mkdocs-glightbox From 631a9589488feef5358c4aa86356edf5484bab39 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 05:09:39 +0000 Subject: [PATCH 25/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 9424ab3..78ba7db 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -15,7 +15,6 @@ jobs: set +a echo "BAL_DOCS_DEPLOY_DIR=$BAL_DOCS_DEPLOY_DIR" >> $GITHUB_ENV echo "PATH=$HOME/venv/bin:$PATH" >> $GITHUB_ENV - shell: /bin/bash - name: Checkout repository run: | From 2196cbbf5aa4b29c5990a86b8047236a7cb74598 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 05:11:47 +0000 Subject: [PATCH 26/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 78ba7db..1975b09 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -11,7 +11,7 @@ jobs: - name: Load environment run: | set -a - source .env + source $HOME/.env set +a echo "BAL_DOCS_DEPLOY_DIR=$BAL_DOCS_DEPLOY_DIR" >> $GITHUB_ENV echo "PATH=$HOME/venv/bin:$PATH" >> $GITHUB_ENV From cc5928607f7a236ab4d6c8aa6be8f2224eb8882d Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 05:15:37 +0000 Subject: [PATCH 27/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 1975b09..805c3ab 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -10,10 +10,6 @@ jobs: steps: - name: Load environment run: | - set -a - source $HOME/.env - set +a - echo "BAL_DOCS_DEPLOY_DIR=$BAL_DOCS_DEPLOY_DIR" >> $GITHUB_ENV echo "PATH=$HOME/venv/bin:$PATH" >> $GITHUB_ENV - name: Checkout repository @@ -30,4 +26,4 @@ jobs: run: mkdocs build --strict - name: Publish - run: rsync -a --delete site/ $BAL_DOCS_DEPLOY_DIR + run: rsync -a --delete site/ /var/www/html From 18615b5915ba9d8b148b2586b56f96e5c929bc73 Mon Sep 17 00:00:00 2001 From: bitcoinafterlife Date: Thu, 30 Jul 2026 05:22:42 +0000 Subject: [PATCH 28/28] Update .gitea/workflows/deploy.yml --- .gitea/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 805c3ab..4d6939a 100755 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -26,4 +26,4 @@ jobs: run: mkdocs build --strict - name: Publish - run: rsync -a --delete site/ /var/www/html + run: rsync -a --delete site/ $BAL_DOCS_DEPLOY_DIR