From 73bbf11362baeaf56a87ef1d0955e322583839b8 Mon Sep 17 00:00:00 2001
From: Ender <59183375+EnderOfWorlds007@users.noreply.github.com>
Date: Tue, 18 Aug 2026 18:07:20 +0200
Subject: [PATCH 1/3] deps: bump bulletin-deploy 0.14.2 -> 0.15.0
paseo-next-v2 was re-genesised and the pinned POP_RULES contract address
(0x4909bFb3...) no longer has code at it, so every deploy failed in
preflight. 0.15.0 carries the refreshed address (0x747B456b...).
Verified on the bump, per e2e/BOOTSTRAP.md: both public manifest exports
the e2e suite depends on (fetchManifestRoundtrip, parseManifest) still
resolve.
---
package-lock.json | 8 ++++----
package.json | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index b9ddb45..e425bdf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,7 @@
"version": "0.1.0",
"license": "GPL-3.0-or-later",
"dependencies": {
- "bulletin-deploy": "0.14.2"
+ "bulletin-deploy": "0.15.0"
},
"bin": {
"decentralize": "dist/cli.js"
@@ -3117,9 +3117,9 @@
}
},
"node_modules/bulletin-deploy": {
- "version": "0.14.2",
- "resolved": "https://registry.security.parity.io/npm/bulletin-deploy/-/bulletin-deploy-0.14.2.tgz",
- "integrity": "sha512-BOzsS7z/WL8JZFjuqySk9yNDaje5+Ya71QIq2z8Kiu13WgR8IBk1mT+xrzpArjBBGKtJgWx5JfOeWeUo8tPOGg==",
+ "version": "0.15.0",
+ "resolved": "https://registry.security.parity.io/npm/bulletin-deploy/-/bulletin-deploy-0.15.0.tgz",
+ "integrity": "sha512-UFfj2HX+20aWwhulueqfm6uOGmeHf+Ee6+v0Enw/8BzKkEW6j4lbOo8VlpPsDTBc+CAW+/rxNaxtJ2AdrnIPXQ==",
"hasInstallScript": true,
"license": "GPL-3.0-or-later",
"dependencies": {
diff --git a/package.json b/package.json
index a15dbca..edc7b81 100644
--- a/package.json
+++ b/package.json
@@ -39,7 +39,7 @@
"prepublishOnly": "npm run build && npm test"
},
"dependencies": {
- "bulletin-deploy": "0.14.2"
+ "bulletin-deploy": "0.15.0"
},
"devDependencies": {
"@types/node": "^22.10.2",
From 033456f99942c45b6c08de677d1abb6080a4902b Mon Sep 17 00:00:00 2001
From: Ender <59183375+EnderOfWorlds007@users.noreply.github.com>
Date: Tue, 18 Aug 2026 19:11:58 +0200
Subject: [PATCH 2/3] fix: stop appending .dot, forward bare label for
bulletin-deploy 0.15.0
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
bulletin-deploy 0.15.0 made the DotNS TLD per-environment in
assets/environments.json (paseo-next-v2, the default, now registers
under .paseo; only preview still uses .dot), so every deploy was
failing with `Domain "…" ends in ".dot", but this environment uses
".paseo" names.` normaliseDomain no longer appends a suffix: it strips
a trailing .dot typed by the caller (backward compatible with every
existing invocation), and otherwise forwards the label unchanged,
letting bulletin-deploy apply whichever TLD the target --env actually
uses. PopRules validation is unchanged. Verified live: a bare
decentralize-ci against paseo-next-v2 resolved to decentralize-ci.paseo
and registered successfully.
Updates every place that assumed .dot: index.ts/cli.ts docs and error
text, README's Naming/usage sections, package.json's description, the
e2e suite's decentralize-ci.dot -> decentralize-ci.paseo references,
and e2e/bootstrap.sh's direct bulletin-deploy invocation (which had the
identical hardcoded-suffix bug outside decentralize's own code path).
Also updates e2e/BOOTSTRAP.md with facts established during this work:
the pool-fallback worker lost ProofOfPersonhoodFull after a Paseo Next
v2 re-genesis (now NoStatus, ~11 PAS per deploy instead of free), was
refunded to ~5005 PAS via the public faucet, and decentralize-ci.paseo
is registered to the worker's EVM-mapped address. Old claims are kept
and marked as history rather than deleted.
---
README.md | 27 ++++++--
e2e/BOOTSTRAP.md | 139 +++++++++++++++++++++++++++++++++--------
e2e/bootstrap.sh | 36 ++++++-----
e2e/deploy.e2e.test.ts | 10 +--
package.json | 2 +-
src/cli.test.ts | 19 +++++-
src/cli.ts | 4 +-
src/index.test.ts | 41 ++++++++----
src/index.ts | 50 ++++++++++++---
9 files changed, 249 insertions(+), 79 deletions(-)
diff --git a/README.md b/README.md
index 5ff8927..f289bba 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
Take a folder (or a single HTML file), turn it into a correct single-page-app
archive, and deploy it to the [Polkadot Bulletin Chain](https://github.com/paritytech/polkadot-bulletin-chain)
-under a `.dot` name.
+under a DotNS name.
> [!WARNING]
> Prototype / reference implementation. Not audited, actively experimental, and
@@ -47,6 +47,19 @@ verbatim (`--env`, `--password`, `--publish`, `--mnemonic`, `--js-merkle`, …).
Use `--` to end this tool's own parsing when a forwarded flag would otherwise be
ambiguous.
+**The TLD comes from the target environment, not from `--dot`.** `--dot` only
+carries the label — `my-app`, not `my-app.paseo`. This tool forwards that
+label to `bulletin-deploy`, which applies whichever suffix the environment you
+deploy to (`--env`, itself forwarded — see above) actually uses:
+`paseo-next-v2` (the default) registers under `.paseo`; `preview` still uses
+`.dot`; most other environments carry no fixed suffix at all. A trailing
+`.dot` typed on `--dot` is stripped for backward compatibility (every example
+before bulletin-deploy 0.15.0 spelled it out), but this tool does not append
+one — guessing the right suffix per environment would mean copying
+bulletin-deploy's environment table here, and that copy would rot the moment
+a new network is added upstream. Pass the bare label and let bulletin-deploy
+pick the suffix.
+
## What it actually does
1. **Copies** your source into a temp staging directory. Your build output is
@@ -61,7 +74,8 @@ ambiguous.
root. Ambiguity is an error naming the candidates, not a guess.
4. **Writes nothing else by default.** `404.html` + `_redirects` are only
written with `--fallback` (see below for why that's the default now).
-5. **Runs `bulletin-deploy`** against the staged directory with your `.dot` name.
+5. **Runs `bulletin-deploy`** against the staged directory with your DotNS
+ label — bare, so bulletin-deploy applies the target environment's own TLD.
## Why `index.html` at the root is the whole point
@@ -121,14 +135,17 @@ DotNS (PopRules) accepts a label with **exactly zero or two trailing digits**;
anything else reverts on-chain. bulletin-deploy responds by *rewriting* such
labels — and on 0.13.x it did so on the registration path, silently retargeting
the deploy at a different name ([its issue #1189](https://www.npmjs.com/package/bulletin-deploy)).
-Observed live: `--dot my-app3` became `my-app.dot`, an already-owned live name,
-and the deploy went on to offer to overwrite its content.
+Observed live: `--dot my-app3` became `my-app.dot` (`.dot` was the only TLD
+that existed at the time), an already-owned live name, and the deploy went on
+to offer to overwrite its content. The hazard — silently landing on a
+different, already-owned name — is the same regardless of which TLD the
+target environment uses today.
This tool refuses such labels up front and tells you what they would have become:
```
✖ --dot "my-app3" has 1 trailing digit; DotNS (PopRules) accepts exactly 0 or 2.
- bulletin-deploy would rewrite it to "my-app.dot" instead of failing …
+ bulletin-deploy would rewrite it to "my-app" instead of failing …
```
Use a label ending in a letter, or in exactly two digits (`my-app01`).
diff --git a/e2e/BOOTSTRAP.md b/e2e/BOOTSTRAP.md
index 0a6e465..d1546e8 100644
--- a/e2e/BOOTSTRAP.md
+++ b/e2e/BOOTSTRAP.md
@@ -17,12 +17,29 @@ here is audited or hardened for production use.
```sh
e2e/bootstrap.sh # check-only, read-only, never touches the chain
e2e/bootstrap.sh --fix # additionally runs `ipfs init` if the repo is missing
-e2e/bootstrap.sh --register # the one real deploy that (re)claims decentralize-ci.dot
+e2e/bootstrap.sh --register # the one real deploy that (re)claims decentralize-ci.paseo
```
-## 1. `decentralize-ci.dot`
-
-**What it is:** a fixed DotNS label on Paseo Next v2, registered 2026-08-07.
+## 1. `decentralize-ci.paseo`
+
+> **Update, 2026-08-18:** the label's TLD changed. bulletin-deploy 0.15.0 made
+> the TLD per-environment, and paseo-next-v2 (this suite's `ENV_ID`) registers
+> under `.paseo`, not `.dot` — the name below was re-registered as
+> `decentralize-ci.paseo` (see item 4's update for the full re-genesis story).
+> Everywhere below that still says `.dot` in a command example is preserved
+> as-written for history; the live, current name is `decentralize-ci.paseo`,
+> and `decentralize` itself now forwards the bare label `decentralize-ci` and
+> lets bulletin-deploy apply that suffix (see the main README's "Naming"
+> section) — do not hand it `decentralize-ci.dot` directly, that now fails
+> with `Domain "decentralize-ci.dot" ends in ".dot", but this environment
+> uses ".paseo" names.`
+
+**What it is:** a fixed DotNS label on Paseo Next v2, originally registered
+2026-08-07 as `decentralize-ci.dot`, then re-registered 2026-08-18 as
+`decentralize-ci.paseo` after the chain re-genesis described in item 4's
+update (a re-genesis resets on-chain state, so the original registration did
+not carry forward — this is the "How to recreate it if lost" path below,
+exercised for real).
**Why it's needed:** the suite re-deploys over the same name every run rather
than minting a fresh one per run. That keeps on-chain state bounded (one
@@ -35,8 +52,9 @@ built-in worker `5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV` — the
pool-fallback signer bulletin-deploy uses when no session and no
`--mnemonic` are supplied.
-**Why it classifies as free (NoStatus):** from `classifyLabelStatus` in the
-pinned bulletin-deploy:
+**Why it classifies as NoStatus (open to any account — see item 4's update
+for why "NoStatus" no longer also means "free"):** from `classifyLabelStatus`
+in the pinned bulletin-deploy:
| Label shape | Required status |
| --- | --- |
@@ -55,16 +73,18 @@ failure.
**How to recreate it if lost:** simply run a deploy against it. Any deploy —
the e2e suite's own run, `e2e/bootstrap.sh --register`, or a manual
-`bulletin-deploy
decentralize-ci.dot` — re-registers/overwrites it. There
-is no separate "provisioning" step; deploying *is* the recovery mechanism.
+`bulletin-deploy decentralize-ci --env paseo-next-v2` (bare label — see
+the 2026-08-18 update above) — re-registers/overwrites it. There is no
+separate "provisioning" step; deploying *is* the recovery mechanism.
**The sharp edge (accepted risk, not hidden):** ownership sits with
bulletin-deploy's **shared default dev worker**, not an account this project
controls. That worker is derived deterministically for *anyone* who runs
bulletin-deploy with no session and no `--mnemonic` against Paseo Next v2 —
it is not scoped to this repo or this CI. Concretely: anyone, anywhere,
-running plain `bulletin-deploy decentralize-ci.dot` with no session
-would be the *same* signer/owner and could silently overwrite our content.
+running plain `bulletin-deploy decentralize-ci --env paseo-next-v2` with
+no session would be the *same* signer/owner and could silently overwrite our
+content.
There is no ownership check we can add on our side to prevent this — the
worker's identity is bulletin-deploy's, not ours. This is a real, accepted
risk given the suite's scope (one disposable testnet fixture, not a
@@ -86,15 +106,15 @@ worker and then **transfer the name to the signed-in account** with zero
mobile signatures (`--no-transfer-to-signedin-user` is the opt-out — see
`bulletin-deploy --help`). A developer who is signed in on their own machine
and runs `e2e/bootstrap.sh --register` — or any bare `bulletin-deploy
-decentralize-ci.dot` — without realizing it would silently move the name off
-the pool-fallback worker and onto their personal account. That's worse than
-the stranger case above: it's not recoverable by re-running `--register`
-from CI, because CI's pool worker no longer owns the name to overwrite.
-`e2e/bootstrap.sh --register` checks `bulletin-deploy whoami` first and
-refuses to run while a session is signed in, naming `bulletin-deploy logout`
-as the remedy — but this check only covers this script's own `--register`
-path, not a developer running bulletin-deploy directly by hand. Log out
-before touching `decentralize-ci.dot` directly.
+decentralize-ci --env paseo-next-v2` — without realizing it would silently
+move the name off the pool-fallback worker and onto their personal account.
+That's worse than the stranger case above: it's not recoverable by re-running
+`--register` from CI, because CI's pool worker no longer owns the name to
+overwrite. `e2e/bootstrap.sh --register` checks `bulletin-deploy whoami` first
+and refuses to run while a session is signed in, naming `bulletin-deploy
+logout` as the remedy — but this check only covers this script's own
+`--register` path, not a developer running bulletin-deploy directly by hand.
+Log out before touching `decentralize-ci.paseo` directly.
## 2. Kubo (`ipfs` binary + initialized repo)
@@ -193,8 +213,47 @@ reporting section.
## 4. The worker's `ProofOfPersonhoodFull` status
-**What it is:** the pool-fallback signer (`5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV`)
-currently carries `ProofOfPersonhoodFull`.
+> **Update, 2026-08-18 — this predicted failure mode happened.** Paseo Next
+> v2 was re-genesised, and the pool-fallback worker
+> (`5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV`) came back with **no PoP
+> status at all**. `bulletin-deploy`'s preflight now reports `Your PoP:
+> NoStatus` for it — exactly the "single most likely way the design silently
+> stops working" scenario called out below, before it had actually happened.
+> The section below is left as originally written (it is still an accurate
+> description of *why* the suite used to cost nothing); read it as history,
+> then read this update for the current state:
+>
+> - **Deploys are no longer free.** A live registration against
+> `decentralize-ci.paseo` reported `Oracle price: 10 PAS / Paying: 11 PAS`
+> — `registerDepositWei` now takes the `NoStatus` branch (`startingPriceWei`)
+> exactly as predicted. Separately, bulletin-deploy's preflight also prints
+> a balance-floor figure (observed: **211.1 PAS**) that the signer must hold
+> to proceed — that figure is a *minimum balance requirement*, not the
+> price of this deploy; don't confuse the two when reading its output.
+> - **The worker was funded** to cover this: topped up via the public faucet
+> () to **~5005 PAS**, at
+> `5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV` — the same address as
+> above. **That is the address to top up** if this suite ever starts
+> failing on a balance error again.
+> - **The subtle trap: bulletin-deploy's own auto-top-up cannot rescue this
+> worker.** bulletin-deploy has a dev-convenience path that auto-tops-up a
+> low-balance signer from "Alice". That "Alice" is **the root account of
+> the dev mnemonic** (`//` with no derivation path) — and the pool-fallback
+> worker *is* that same root account, not `//Alice` (the well-known
+> `5GrwvaEF…` test account derived from it). The auto-top-up code compares
+> the source and recipient addresses and **skips the transfer whenever they
+> are equal** — so when the worker itself is the signer, "Alice" funding
+> the worker is a no-op by construction: the source and destination are the
+> same account. Funding the derived `//Alice` (`5GrwvaEF…`) does **nothing**
+> for this worker — do not waste a faucet request on it. Fund
+> `5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV` directly.
+> - **Current registration:** `decentralize-ci.paseo` is registered and owned
+> by `0x35Cdb23fF7fc86E8DCcd577CA309bFEA9c978D20` (the same worker, EVM-mapped
+> — matches item 1's "Current owner").
+>
+> **What it was (history, before the re-genesis):** the pool-fallback signer
+> (`5DfhGyQdFobKM8NsWvEeAKk5EQQgYe9AydgJ7rMB6E1EqRzV`) carried
+> `ProofOfPersonhoodFull`.
**Why this is the whole reason the suite costs nothing:** the price rule
lives in the pinned bulletin-deploy and keys on the **signer's** status, not
@@ -230,7 +289,17 @@ If nightly runs start failing on a price/balance error where they previously
didn't, check this first, before assuming a `decentralize` or
`bulletin-deploy` regression.
-## 5. Pinned `bulletin-deploy@0.14.2`
+## 5. Pinned `bulletin-deploy@0.15.0`
+
+> **Update, 2026-08-18:** bumped from `0.14.2` to `0.15.0`
+> (`deps/bulletin-deploy-0.15.0`). The section below still says `0.14.2` in
+> places where it is describing that specific version's behaviour verbatim
+> ("verified by hand against 0.14.2" etc.) — left as-written, since it is
+> accurate history, not updated to imply it was re-verified against 0.15.0
+> line-by-line. The one thing this bump changed that matters everywhere in
+> this document: `assets/environments.json` gained a per-environment `tld`
+> field, and `paseo-next-v2` (this suite's `ENV_ID`) now uses `.paseo` instead
+> of `.dot` — see item 1's update and the main README's "Naming" section.
**What it is:** `decentralize`'s own pinned dependency (`package.json` →
`dependencies.bulletin-deploy`), and the two public exports the e2e suite
@@ -270,8 +339,11 @@ a mismatch by the check above):
import paths with compatible signatures — the check above catches this
directly.
3. The price rule (`userStatus === NoStatus ? startingPriceWei : 0n`) is
- still keyed the same way — a change here could reintroduce a cost where
- today there is none.
+ still keyed the same way. (This branch is no longer hypothetical: as of
+ the 2026-08-18 update in item 4, the worker IS `NoStatus` and every run
+ now pays `startingPriceWei` — observed as `Oracle price: 10 PAS / Paying:
+ 11 PAS`. Re-verify this rule's shape on the next bump precisely because a
+ change here changes what the suite pays, not whether it pays at all.)
4. The CAR-vs-manifest relationship in the design doc ("The on-chain
contenthash is the CAR, not the UnixFS directory") still holds — this is
what the whole assertion chain in the design depends on.
@@ -292,12 +364,19 @@ confirming whether the free-deploy premise still holds at all — a secret
papering over a broken premise just hides the regression instead of
surfacing it.
+> **Update, 2026-08-18:** the trigger above fired — the worker's PoP status
+> lapsed (item 4) and the suite now pays `~11 PAS` per run. The rule in this
+> section still holds regardless: the fix was to **fund the worker directly**
+> (item 4's faucet top-up to ~5005 PAS), not to add a `MNEMONIC` secret. "No
+> secrets" was never a claim that deploys are free forever — it's a claim
+> that this suite doesn't authenticate as anyone. It still doesn't.
+
## Known unknowns
Stated honestly rather than assumed away:
- **Whether DotNS registrations expire.** Not established. If they do, the
- window before `decentralize-ci.dot` needs a fresh registration (as opposed
+ window before `decentralize-ci.paseo` needs a fresh registration (as opposed
to an overwrite of an existing one) is unknown. Both paths are handled by
bulletin-deploy either way (see item 1's "how to recreate"), so this
doesn't block the suite — it's flagged so nobody mistakes a
@@ -318,5 +397,11 @@ Stated honestly rather than assumed away:
bulletin-deploy ever exposes a genuinely lightweight read-only query for
this, revisit.
- **Whether the worker's `ProofOfPersonhoodFull` status can lapse, and on
- what schedule.** Not established — see item 4. Worth monitoring, not
- currently monitorable from outside a full deploy attempt.
+ what schedule.** Partially resolved, 2026-08-18: it can, and did — see item
+ 4's update. What's still unknown is the *schedule*: this instance was
+ triggered by a chain re-genesis, not a natural expiry, so whether
+ `ProofOfPersonhoodFull` also lapses on its own over time (independent of a
+ re-genesis event) remains unestablished. Still not monitorable from outside
+ a full deploy attempt (or a preflight-only run — see item 4's `Your PoP:
+ NoStatus` observation, which came from bulletin-deploy's own preflight
+ output, not a purpose-built check on our side).
diff --git a/e2e/bootstrap.sh b/e2e/bootstrap.sh
index ca774cb..991864f 100755
--- a/e2e/bootstrap.sh
+++ b/e2e/bootstrap.sh
@@ -30,7 +30,7 @@
# if the IPFS repo is missing. Nothing else. Does NOT
# register a name and does NOT deploy.
# --register Performs the ONE real on-chain deploy that (re)claims
-# decentralize-ci.dot on Paseo Next v2. Prints exactly what
+# decentralize-ci.paseo on Paseo Next v2. Prints exactly what
# it is about to do, then asks for confirmation unless --yes
# is also given. Refuses to run if any required check above
# it is failing.
@@ -73,7 +73,7 @@ Usage: e2e/bootstrap.sh [--fix] [--register [--yes]] [-h|--help]
--fix Run `ipfs init` if the IPFS repo is missing. The only
remediation this script performs automatically.
--register Perform the one real deploy that (re)claims
- decentralize-ci.dot on Paseo Next v2. Confirms interactively
+ decentralize-ci.paseo on Paseo Next v2. Confirms interactively
unless --yes is also passed.
--yes Skip the --register confirmation prompt.
@@ -254,7 +254,7 @@ check_dotns_status() {
# deploy path itself and can fail independently of the thing we're
# trying to check. Fabricating a check here would be worse than
# admitting we don't have one. See e2e/BOOTSTRAP.md.
- record_result "decentralize-ci.dot on-chain contenthash" "UNKNOWN" "cannot check without deploying — no supported read-only query found (see e2e/BOOTSTRAP.md). Use --register if you believe it needs (re)claiming."
+ record_result "decentralize-ci.paseo on-chain contenthash" "UNKNOWN" "cannot check without deploying — no supported read-only query found (see e2e/BOOTSTRAP.md). Use --register if you believe it needs (re)claiming."
}
# --- table + summary -----------------------------------------------------
@@ -294,7 +294,7 @@ do_register() {
# e2e/BOOTSTRAP.md item 1: bulletin-deploy's *default* behaviour when a
# mobile session is signed in is to register with the local worker and
# then transfer the name to that signed-in account. Running --register
- # while signed in would silently move decentralize-ci.dot off the
+ # while signed in would silently move decentralize-ci.paseo off the
# pool-fallback worker and onto a human's personal account, permanently
# breaking the overwrite-path design (the CI worker would no longer own
# it, and no `--register` re-run from CI could get it back). Refuse
@@ -304,24 +304,28 @@ do_register() {
if ! printf '%s' "$whoami_out" | grep -qi "not logged in"; then
echo "Refusing --register: bulletin-deploy reports an active signed-in session:" >&2
echo " ${whoami_out//$'\n'/$'\n '}" >&2
- echo "By default, registering while signed in hands ${DOT_LABEL}.dot to that" >&2
+ echo "By default, registering while signed in hands ${DOT_LABEL}.paseo to that" >&2
echo "signed-in account instead of the pool-fallback worker — this would break" >&2
echo "the overwrite-path design permanently (see e2e/BOOTSTRAP.md item 1)." >&2
echo "Run 'node node_modules/bulletin-deploy/bin/bulletin-deploy logout' first, then re-run --register." >&2
exit 1
fi
- echo "== --register: (re)claim ${DOT_LABEL}.dot on ${ENV_ID} =="
+ echo "== --register: (re)claim ${DOT_LABEL}.paseo on ${ENV_ID} =="
echo "This will:"
echo " 1. Stage a minimal placeholder index.html in a throwaway temp directory."
echo " 2. Run a REAL on-chain deploy:"
- echo " node node_modules/bulletin-deploy/bin/bulletin-deploy ${DOT_LABEL}.dot --env ${ENV_ID}"
- echo " 3. Use the pool-fallback worker (no session, no --mnemonic, no secret) —"
- echo " confirmed above: no bulletin-deploy session is signed in."
- echo " Expected cost: 0 PAS — the worker holds ProofOfPersonhoodFull, and"
- echo " ${DOT_LABEL} classifies as a NoStatus label (free to any status)."
- echo " If bulletin-deploy reports a nonzero price, STOP: that means the"
- echo " worker's PoP status lapsed. See e2e/BOOTSTRAP.md before proceeding."
+ echo " node node_modules/bulletin-deploy/bin/bulletin-deploy ${DOT_LABEL} --env ${ENV_ID}"
+ echo " (bare label — bulletin-deploy applies ${ENV_ID}'s own TLD, .paseo; see the"
+ echo " main README's Naming section for why this script does not append one)."
+ echo " 3. Use the pool-fallback worker (no session, no --mnemonic, no secret)."
+ echo " Expected cost: ~11 PAS (oracle price 10 PAS + margin) — the worker no"
+ echo " longer holds ProofOfPersonhoodFull (see e2e/BOOTSTRAP.md item 4, updated"
+ echo " 2026-08-18), so registerDepositWei charges the NoStatus price. The worker"
+ echo " is funded (~5005 PAS as of 2026-08-18) specifically to cover this — see"
+ echo " e2e/BOOTSTRAP.md item 4. If bulletin-deploy reports a balance failure,"
+ echo " the worker needs topping up again; see BOOTSTRAP.md item 4 for exactly"
+ echo " which address that is (the auto-top-up \"Alice\" cannot rescue it)."
echo
if [ "$ASSUME_YES" -ne 1 ]; then
@@ -348,7 +352,11 @@ do_register() {
echo "generated $(date -u +%Y-%m-%dT%H:%M:%SZ)