ElastOS Weekly Shipping Report — Week of Apr 11–17, 2026 #11
SashaMIT
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Elacity Labs — Weekly Team Update for the World Computer Initiative (WCI)
April 10 – April 17, 2026
Key Links This Week
review/0.1.2curl -fsSL https://elastos.elacitylabs.com/install.sh | bashTable of Contents
The Big Picture
This week was about shipping a brand-new content class to dDRM, closing security gaps surfaced directly by the community, and preparing PC2 for convergence with the ElastOS Runtime:
EPUB ebooks and CBZ comics are now fully supported through the dDRM pipeline — a new reflowable "html-lock" render tier plus a "pixel-lock" comic path, all inside the existing
ddrm-rendererWASM module. Creator upload, encryption, viewer, and marketplace all updated end-to-end. This came out of one community question ("can we do an ebook?") and shipped in the same week.A full security sweep was run against community feedback — a community member's Docker-data-loss and name-recovery concerns, plus an internal audit of the newly-added EPUB/CBZ paths. We shipped mnemonic-based identity recovery, Docker volume guard rails, WASM zip-bomb hardening, and closed a copy-paste exfiltration path in the DRM viewer.
The CEK caching layer was audited and corrected — what was labelled LRU was actually FIFO. Fixed with proper promotion-on-read, plus two owner-guarded admin endpoints so node operators can observe cache behaviour and force-invalidate keys after access revocation. Cost impact: multi-chapter EPUBs and multi-page PDFs now pay Lit once instead of N times.
NFT IPFS Pinning landed as Phase 7 — the
nft_pinstable, three API endpoints, and Pin+Download buttons on the Elastos NFT app. Sovereign users can now seed their own NFT images/metadata on their PC2 node, so their collection stays reachable even if Elacity's gateway is down.The Elastos NFT app got a proper build pipeline and aggressive bundle cleanup —
scripts/build-elastos-nft.shnow clones, patches, strips, and builds reproducibly. Tier 1 cleanup took the bundle from 45 MB down to 22 MB (removed XMTP WASM, unused route chunks, marketing images). API-level content-type filtering ensures the app only shows NFT images, not misleading DRM assets.A comprehensive PC2 ↔ Runtime convergence inventory was published —
PC2_CONVERGENCE_INVENTORY_FOR_RUNTIME.mdmaps every PC2 subsystem (8 WASM crates, wallet bridge, dDRM pipeline, IPFS stack, Contabo infrastructure, smart contracts) to the Runtime capsule model, with a bottoms-up migration sequence starting at v0.1.2.A production-grade Elastos blockchain explorer is live at blockchain.elastos.io — Go sync engine + PostgreSQL + chi API + React/Vite frontend + Bash self-healing monitor, from genesis to live tip, delivered by one team member with AI assistance. Sub-millisecond balance lookups (20M-entry UTXO cache), WebSocket live feed, dynamic OpenGraph for shareable links, and two-source node cross-validation that raises a Telegram alert if our node lags the network by more than 50 blocks.
macOS notarization is officially closed out — all 6 Apple submissions Accepted, v1.2.2 DMG notarized and stapled. Gatekeeper confirms
Notarized Developer ID — Elacity LLC. Users double-click the.dmgand install — no Terminal, noxattr -crworkaround.ElastOS Runtime v0.1.2 — Released This Week
Why this matters: ElastOS Runtime v0.1.2 is the first release where PC2 becomes a boring front door rather than a demo shell. Device-backed identity, hosted rooms, the explicit operator lane, and a tightened release/install/update pipeline all land in the same tag. 0.1.2 closes the gap between local proof and the installed-path experience community members actually get when they run
curl -fsSL https://elastos.elacitylabs.com/install.sh | bash.Headline capabilities in 0.1.2
Identity that starts with the device, not a file
feat(identity): derive main DID from device key— the primary DID is now derived from a device-backed key instead of a loose keystore. First-run identity is intrinsic to the machine.feat(identity): store local profile under the device-backed identity— the local profile now lives under that identity, so profile state has a trust anchor from install onwards.did:key+ Ed25519 with encrypted key storage, consistent across PC2, chat, rooms, share, and site surfaces.Sovereign rooms, now with a hosted browser
feat(browser-runtime): add hosted browser capsule foundation— a capsule that runs inside the runtime and exposes a hosted browser surface.feat(capsules): add room-browser capsule assets— the assets that make the room-browser a first-class installed surface.feat(room): add hosted room runtime and browser integration— the hosted/apps/room-browser/route now comes up under the explicit operator lane viaelastos room open --addr 0.0.0.0:8090.Explicit operator lane for remote control
feat(node-control): add operator lane and remote node control—elastos setup --profile operator+elastos servebrings up the owner runtime, andelastos node info/elastos node status --peer <did:key:…>give signed remote-status and trusted-source update control over Carrier.PC2 front door honesty pass
feat(pc2): surface room, chat, and identity flows honestly— PC2 no longer dresses up surfaces it can't complete. Room, chat, and identity flows now surface real state, not aspirational screens.elastos(PC2 lane),elastos serve(operator lane), orelastos room open(reuses the operator runtime). No parallel entrypoints pretending to share a home.Release, install, and update pipeline tightened for 0.1.2
chore(release): package room-browser and tighten 0.1.2 release proofs— room-browser now packaged into the signed release surface.fix(release): restore linux runtime portability audit— Linux x86_64 and aarch64 are the truthful full-runtime baseline again, audited on every release cut.fix(setup): clarify source-bootstrap path for fresh source checkouts+docs(setup): add trusted-source add example— source builds now have an honest first-run story; they're explicitly a source artifact, not a pretend self-contained install.test(public): expect stable release channel— public acceptance tests now assert the stable channel, not a preview track.fix(smoke): handle null ticket fields in public operator proof— the operator smoke tolerates the real shape of ticket data coming back from Carrier.chore(chat): normalize lockfile package version to 0.1.2— canonical 0.1.2 tag alignment across crates.Docs aligned with the shipped runtime
docs(runtime): align docs with the shipped runtime model—GETTING_STARTED.md,INSTALL.md,COMMAND_MATRIX.md,INTERACTIVE_RUNTIME_CONTRACT.mdnow describe the runtime that actually ships, not the one the earlier docs were hoping for.What is proven on the 0.1.2 line
From the release
state.md:just verify— source-line gate: alignment, clean-home setup, command smoke, candidate command audit,fmt,clippy, testsjust verify-release— release-trust gate: everything above plus the PTY PC2 front-door smokescripts/shared-runtime-gossip-proof.sh— bidirectional gossip delivery on a shared runtimescripts/chat-wasm-native-interop-smoke.sh— native ↔ WASM chat end-to-endscripts/chat-wasm-local-smoke.sh— local WASM chatscripts/public-install-identity-smoke.sh— installed-path DID/profile acceptancescripts/public-install-operator-smoke.sh— installed-path operator-node acceptancescripts/public-install-pc2-frontdoor-smoke.sh— installed-path PC2 front-door acceptanceRuntime classes in 0.1.2
Every command now has one explicit runtime expectation. No command may hang.
elastos,elastos pc2elastos capsule <name> --lifecycle interactive --interactiveelastos chatelastos share,elastos open,elastos attest,elastos update,elastos setup,elastos site *elastos room open,elastos agent, non-interactiveelastos capsule,elastos runelastos serve)elastos serve,elastos gateway,elastos site serveInstall surface, in one block
Release summary — what this means for users
The focus of 0.1.2 was identity, rooms, setup, and verification — and the net effect is that more of ElastOS now behaves like one system instead of a set of partially connected paths:
setup --profile operatorfor the advanced/admin path, remote node control over Carrier, installed-path acceptance checks for identity, home-screen startup, and operator control, plus better source-checkout setup — including handling when trusted-source configuration is missing.Open truths (kept honest on purpose)
--profile demo+ operator lane — that split is still too implicit and will collapse in a later release.elastos → PC2 → app → homepath is still a manual acceptance item.See § 9 (PC2 ↔ Runtime Convergence) for how PC2 plugs into 0.1.2 and what moves over in 0.1.3.
EPUB + CBZ Ebook & Comic Support — New dDRM Content Class
Why this matters: A community member asked if PC2 could protect ebooks the same way it protects PDFs and video. The honest answer was "not with pixel-lock" — rendering reflowable text as images destroys accessibility, zoom fidelity, and mobile reflow. So this week we added a second render tier to the dDRM WASM module and landed EPUB + CBZ support end-to-end, without changing the Runtime capability surface.
Two render tiers inside the same WASM module
image/*,application/pdf,application/vnd.comicbook+zip, source codeapplication/epub+zipBoth tiers dispatched by MIME type inside
ddrm-renderer.wasm. Capability surface stilldrm:decrypt/drm:render— zero impact on the Runtime capsule contract.EPUB pipeline (html-lock)
/api/storage/lit/secure-viewreturns one chapter, forensically watermarked for this buyer.wasm-renderer/src/render/epub.rs:META-INF/container.xml→ locatescontent.opfquick-xml— title, author, spine, manifest, TOC (toc.ncxor nav doc)<script>,<object>,<iframe>, inlinejavascript:, and all event handlers stripped<img src>to inline data-URIs; rewrites<a href>same-archive links to#epub-link:…(client-intercepted, never hits the network); external links strippedbackground-imagedefault-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:; base-uri 'none'; form-action 'none'CBZ pipeline (pixel-lock)
page10.jpgcomes afterpage2.jpg) → decode → resize to viewport → watermark → re-encode JPEGpixel-lockwatermark pipeline as existing PDF/image DRM — single source of truth for forensic marksFixed-layout EPUB graceful fallback
Pre-paginated EPUBs (manga, picture books, technical docs exported as EPUB) can't reflow. The renderer detects
rendition:layout=pre-paginatedand returns HTTP 409 withtotalChapters: N. V1.2 ships detection + friendly error; automatic chapter→pixel fallback is a V1.2.x fast-follow.Creator + Market UX
elacity-creator: EXT_MIME_MAP recognises.epub → application/epub+zip,.cbz → application/vnd.comicbook+zip(bypasses the browser File API's unreliablefile.type). Auto-category detection. New "Comic / Graphic Novel (CBZ)" dropdown option. File icons.elacity-market: content badges display "Ebook" / "Comic";CONTENT_TYPE_ICONSupdated.WASM binary metrics
wasm-opt -Ozwith bulk-memory, nontrapping-float-to-int, and SIMD enabled.1.1.0 → 1.1.2over the course of the week (feature + security hardening + copy-lockdown + paged-mode scaffolding).Commits:
f835b33e(feature),b0524a14(security),6101fbc1(copy-lockdown + modes),69892070(docs sync)Documentation:
docs/wiki/Technical/EBOOK_PUBLISHING.md— full pipeline spec, viewer integration, fixed-layout handling, Runtime alignment notes.Security Sweep — Responding to Community Feedback
Why this matters: a community member raised two operational concerns this week:
Two of those concerns — identity recovery and Docker data safety — were gaps. A new user ran
docker compose down -v(the-vflag wipes named volumes), lost theiridentity.json, and couldn't rebuild the same DID to re-claim theirmyname.ela.cityhandle. We shipped three workstreams to close the gap, plus tightened WASM safety as part of the same sweep.Workstream A: Mnemonic-based identity recovery
The PC2 first-run flow generates a 24-word BIP-39 recovery phrase, but there was previously no way to use it after the volume was gone. Now:
POST /api/setup/restore-mnemonic— pre-auth, setup-wizard only, rate-limited (5/15 min/IP). Refuses to clobber a live node.npm run recover-mnemonic— hidden prompt,--mnemonicfor non-interactive,--forcekeeps oldidentity.json.bak-<iso>docker compose run --rm pc2-node npm run recover-mnemonicDerivation is cryptographically identical to
IdentityService.mnemonicToSeed— same HKDF + ed25519 path. Tested end-to-end: same phrase → identicalnodeIdacross runs. The phrase never touches disk or logs.Workstream B: Docker volume guard rails
The root cause of the reported data loss was the unclear contract of
docker compose down -v. We shipped:pc2-node/docker-compose.ymlexplicitly listing which commands preserve vs destroy thepc2-datavolumepc2-backupsvolume mounted at/app/backups, so a straydocker volume rm pc2-node_pc2-datacannot take the last-chance tarball with itpc2-dataas criticalWorkstream C: WASM zip-bomb + unbounded-alloc hardening
While we were in the EPUB/CBZ code for the feature, the renderer's memory-safety story got a full audit. Found four open paths, closed all four with documented hard caps:
MAX_ENTRY_UNCOMPRESSED_BYTESMAX_COMPRESSION_RATIOMAX_MANIFEST_ENTRIES<item>rowsMAX_CHAPTER_HTML_BYTESCBZ path has equivalent caps on entry size, ratio, and page count. WASM module bumped
1.1.0 → 1.1.1as a security hotfix. Public API (RenderCommand,RenderResult, MemFS paths) identical — zero breakage for the Runtime convergence plan.Workstream D: RECOVERY.md operator guide
A single-source
docs/wiki/Technical/RECOVERY.mdcaptures:Sovereign-scale note
As long as the registrar binds usernames to the DID (which is already derived from the mnemonic), re-running
recover-mnemonic+ the setup wizard's re-claim flow reattachesyourname.ela.cityautomatically. No operator intervention needed at the supernode level. This holds at any scale.Commits:
1665eca6(recovery),b0524a14(WASM hardening)Copy-Paste Exfiltration Closed + Paged/Scrolling Reading
Why this matters: During EPUB testing with Alice in Wonderland, the first thing a tester tried was ⌘C on a paragraph of Carroll's prose — and it worked. Text flowed straight out of the DRM viewer into any editor. The forensic watermark would still trace a leak, but we shouldn't make casual exfiltration easy. Same community test also surfaced a UX gap: the Prev/Next buttons jumped whole chapters, confusing anyone expecting page turns.
The copy-lockdown fix — defence in depth
Three layers of protection now ride on every EPUB chapter:
wrap_chapter_html):user-select: none+ vendor prefixes → mouse selection silently blocked::selection { background: transparent; color: inherit }→ ⌘A / Shift-click still "selects" invisibly, defeating the obvious UX cue-webkit-user-drag: noneon text and images → no drag-to-desktop save-webkit-touch-callout: none→ no iOS long-press action sheet@media print { body { visibility: hidden } }→ ⌘P produces a blank pagecontextmenu,copy,cut, and print shortcuts as a belt-and-braces complementBecause the CSS lives inside the sanitized HTML (not on the parent frame), a malicious script in the parent can't strip it — and the iframe itself can't either because all scripts are stripped by the sanitizer and blocked by
sandbox+ CSP.Paged ↔ Scrolling reading mode
Two UX models, switchable from the toolbar, persisted in
localStorage:← / →andPgUp/PgDnstep one page at a time;[/]force a chapter jump. Status bar:Page 3 of 12 · Chapter 2 of 15. Kindle-feel.← / →scroll;[/]switch chapters. Status bar:Chapter 2 · 2 of 15.The iframe sandbox was narrowed from fully-locked-down to
sandbox="allow-same-origin"only — needed so the parent can apply the paging transforms. Scripts, forms, downloads, and top-navigation remain blocked. Since the sanitizer strips scripts anyway, same-origin is a passive capability, not an execution surface.The "what are these dots?" question
One tester saw
* * * * * *in the middle of a chapter and suspected broken images. They're actually typographic asterisms — Carroll's original scene-break notation from the 1865 edition. Now styled as.asterismclass with proper centering, letter-spacing, andbreak-inside: avoidso they never split across pages.Commit:
6101fbc1CEK Cache — True LRU + Owner Admin Endpoints
Why this matters: Every Lit Protocol decryption call costs roughly $0.01 of Chipotle usage. A 14-chapter EPUB or a 40-page PDF at $0.01 per page/chapter adds up fast. The existing cache was supposed to make chapter 1 pay and chapters 2-N ride free — but an audit this week revealed the eviction policy was mislabelled.
Bug 1 — "LRU" was actually FIFO
The cache called
cekSessionCache.keys().next().valueto pick a victim — that returns insertion order, not last-access order. On a busy multi-user node, an active reader could get evicted by 50 cold one-off requests, costing an extra $0.01 Lit call on their next chapter.Fix: on every cache hit,
deletethen re-setto promote the entry to the Map's tail (most-recently-used position). Cache insertion now correctly evicts the head (least-recently-used). True LRU.Bug 2 — No way to force-invalidate after access revocation
If a user's NFT access was revoked, they kept decrypt capability for up to 5 minutes until TTL expired. The only mitigation was a full node restart.
Fix: two new owner-guarded endpoints in
/api/storage/admin/cek-cache/:Both protected by
authenticate+requireOwnermiddleware. Non-owner requests →401. Every flush logs actor + scope.Additional correctness tightening
cekCacheKey(kid, buyer)helper so read and write paths can't drift apartflushCEKCachesplits on the first:(not the last), handling kids that contain:characters safelycekCacheStats.coalescedcounter added to verify promise-coalescing is actually saving calls on a busy nodeNo security property changed: key still
(kid, buyer.toLowerCase()),buyerAddressstill derived from the authenticated session, TTL still 5 min, capacity still 50, process restart still flushes.Observed cost savings
Confirmed during EPUB testing: a 14-chapter book pays Lit $0.01 on chapter 1 and $0.00 on chapters 2-14. The server logs now show
[Lit] CEK cache hit for kid=… (saved $0.01)on every cache hit.Commit:
82bc3aa9NFT IPFS Pinning — Phase 7 Sovereign Persistence
Why this matters: Elastos NFT users were trusting Elacity's IPFS gateway to keep their art alive. If the gateway goes down (or a node drops the pin), the image disappears from their Library even though they still own the token. Phase 7 makes the PC2 node the primary pinner for the user's own NFT collection.
Database + API
nft_pinstable with composite PK(cid, wallet_address)— multi-wallet-per-node safePOST /api/nft/pin— stores the CID locally, fetches from any reachable IPFS gateway, pins with DHT announceGET /api/nft/pins— list pinned NFTs for a walletGET /api/nft/pin/:cid— pin statusDELETE /api/nft/pin/:cid— unpin + garbage-collectUI patches in the Elastos NFT app
ArtAssetViewpage — one click, content on your node foreverputer.auth.tokenso the iframe fetch calls are authenticated against the PC2 nodeGateway reachability fixes along the way
account.tsnow recognises relative URLs instead of double-prefixingcloudflare-ipfs.comandipfs.ela.city(both failing intermittently) replaced withipfs.iosedcatches any remaining gateway references in compiled JS — reproducible across future rebuildsCommit:
b4817edcElastos NFT App — Build Pipeline & Bundle Cleanup
Why this matters: Last week we ported
elacity-webinto PC2 as the Elastos NFT app. Shipping it fast meant some rough edges: bundle size was 45 MB (too big for a PC2 app), Explore showed audio/video categories that had no content on ESC, and there was no reproducible build — every run was manual.Reproducible build pipeline
scripts/build-elastos-nft.shis now a single command that:elacity-web developbranch into a temp dirpc2-node/data/test-apps/elastos-nft/sedfor IPFS gateway refsTier 1 bundle cleanup — 45 MB → 22 MB
Conservative chunk fix preserved shared context chunks imported by the main bundle — no functional regressions.
API-level content filtering (no more fake results)
Previously the app showed "All content", "Audio", "Video" filters with zero results on ESC. Now every Explore/Latest/Most-Viewed/Recently-Sold query sends
contentType: ['image']at the API level — so the filters match what actually exists on ESC.Sidebar + header polish
Removed: Home, Messages, Subscriptions, Create button, Cinema section, Audio/Video Library categories, Channels/Revenue Directory tabs. Explore is the default landing page. Library defaults to card view with image-only categories.
Collections support
Added
contractType: 'Collection'query parameter, so multi-asset collections render as collections, not as flat lists of individual tokens.Sibling Market app polish
Commits:
62b49002(app + bundle + market),b4817edc(Phase 7 + infra)PC2 ↔ ElastOS Runtime Convergence — Inventory Published
Why this matters: PC2 and the ElastOS Runtime are on a convergence path — PC2's working subsystems (wallet bridge, dDRM pipeline, IPFS stack, WASM crates, infrastructure) should become Runtime capsules over time, not duplicate effort. This week we published the first concrete map so the Runtime side and the PC2 side work off the same source of truth.
PC2_CONVERGENCE_INVENTORY_FOR_RUNTIME.mdSingle source of truth for "everything PC2 has built that maps to Runtime capsules, providers, and infrastructure." Covers:
wasm32-wasip1(same target as Runtime) —ddrm-renderer,aes-gcm-decrypt,cenc-decrypt,cenc-encrypt,ipfs-assemble,mp4-split,evm-multicall,amm-engine. Each with size, purpose, and proposed Runtime capsule mapping.Follow-up links doc
All repository URLs, GitHub file links, BaseScan contract links, launcher release links, and live product URLs are now gathered in one navigable page, so the Runtime team can jump straight to any artefact without hunting.
How PC2 plugs into Runtime 0.1.2
review/0.1.2branch consolidated into 18 commits across Apr 15–16Decisions agreed this week
ddrm-renderer, Contabo ESC RPC proxyCommits:
1aff5e7b(inventory),df88b806(clickable links)Elastos Blockchain Explorer — Full-Stack Build
Why this matters: Elastos has lacked a modern, comprehensive blockchain explorer. The demo frontend and the main-chain staker/voter rank backend landed last week. This week the full production stack came together and went live at blockchain.elastos.io — a single team member, working with AI assistance, delivered what would traditionally take a team of six engineers 14–18 weeks. Not a template, not a fork, not a dashboard bolted onto someone else's indexer. Every layer was designed and written to work together.
The Sync Engine — Go + PostgreSQL + JSON-RPC
A Go-based blockchain sync engine connects directly to an ELA full node over JSON-RPC and indexes the entire chain from genesis to current tip. Every block, transaction, input, output, and address relationship is stored — a complete relational picture of the chain, not just block headers.
The API Layer — chi + LRU + 20 M-entry UTXO cache
Built on Go's
chirouter. Exposes endpoints for blocks, transactions, addresses, governance, statistics, sync status, health, and an ELA JSON-RPC passthrough.The Aggregator — Governance + Cross-Validation
Runs continuously in the background:
The Frontend — React 18 + TypeScript + Vite
Talks to the backend exclusively through the JSON API and WebSocket — no ad-hoc polling, no stale data. Every view hydrates from the same source of truth the sync engine built.
SEO & Shareability
Every page generates dynamic OpenGraph metadata server-side so shared links render with real data in previews: block height and timestamp, address balance, transaction summary.
index.html, and returns enriched HTMLMonitoring & Self-Healing
A Bash monitoring system runs every minute with nine health checks:
Scope & Economics
Live at blockchain.elastos.io
Public deployment is live. All data surfaces — blocks, transactions, validators, staking, governance, rich list, mempool, charted daily metrics — are populated, query-ready, and served off the stack described above. Share-link previews (OpenGraph) resolve with real on-chain data, and the monitoring loop is already guarding the production instance.
Infrastructure & Operations
macOS Notarization — officially complete
source=Notarized Developer ID, origin=Developer ID Application: Elacity LLC (LA64G2ZMY2).dmgto install — no Terminal, noxattr -crworkaround.deb, and Windows.exenotary-elacitystored for future automated submissionsCommit:
6f3bb806Contabo ESC RPC proxy (for Phase 7 + Runtime convergence)
/api/esc-rpc→ proxies tohttps://38.242.211.112/rpc/esc(Contabo archive node with self-signed cert)api.ela.city/escsecondaryIPFS gateway reliability
cloudflare-ipfs.com, intermittentipfs.ela.city) replaced withipfs.iosedensures any compiled-in gateway refs also get swappedaccount.tsnow recognises relative thumbnail URLs)Static asset resolver refactor
/images/*,/static/*,/fonts/*now handled uniformlyDev environment hygiene
tsx watchprocesses, some 3+ days old, that had been accumulating from prior dev sessions. Live node on:4200healthy post-cleanup..gitignoretightened: SQLite WAL sidecars (*.db-wal,*.db-shm,*.db-journal) + dev-scratch folders (test-samples/,temp-3d-models/) no longer show up as untracked.What's Parked & What's Next
Parked (captured, awaiting next work window)
UPLOAD-ELACITY-LOCAL-FIRST—POST /api/storage/ipfs/upload-elacitycurrently does a synchronous call tobase.ela.citywith no timeout and no local fallback. On April 17 the service returned 504s and the Creator publish flow blocked for up to 3 × 60 seconds (asset + thumbnail + metadata) per publish. Full implementation plan, acceptance criteria, and degraded-service test strategy captured in.cursor/tasks/UPLOAD-ELACITY-LOCAL-FIRST/UPLOAD-ELACITY-LOCAL-FIRST.md. Aligned with the longer-term sovereign direction: user uploads to their own IPFS; Elacity indexer observes on-protocol and replicates.Immediate (this coming week)
UPLOAD-ELACITY-LOCAL-FIRST— ~1 day of work, unblocks the publish flow whenever Elacity IPFS is slowShort-term (1–2 weeks)
Medium-term (this month)
Summary Statistics
PC2 Engineering (Apr 10–17)
Ebooks & Comics (new content class)
application/epub+zip,application/vnd.comicbook+zip)render/epub.rs,render/cbz.rs)reader-epub.js,reader-cbz.js)Security
CEK Caching
GET /stats,POST /flush(owner-only)NFT IPFS Pinning (Phase 7)
nft_pins(migration 27)POST/GET/DELETE /api/nft/pin,GET /api/nft/pins)cloudflare-ipfs.com/ipfs.ela.cityswapped toipfs.ioElastos NFT App
scripts/build-elastos-nft.sh(reproducible)contractType: 'Collection'query parameterElastOS Runtime 0.1.2 (released this week)
review/0.1.2elastos setup --profile operator+elastos serve+elastos node info/statusjust verify-release+ 3 public-install smokes + 3 cross-runtime room sync testsPC2 ↔ Runtime Convergence
PC2_CONVERGENCE_INVENTORY_FOR_RUNTIME.mdddrm-renderer, Contabo ESC RPC proxyElastos Blockchain Explorer
Infrastructure
https://38.242.211.112/rpc/escvia PC2 proxy/api/esc-rpctsx watchprocesses retiredDocumentation
docs/wiki/Technical/RECOVERY.md(operator recovery guide)docs/handover/PC2_CONVERGENCE_INVENTORY_FOR_RUNTIME.md(Runtime convergence map)docs/wiki/Technical/EBOOK_PUBLISHING.md(copy-lockdown, paged-mode, testing)docs/wiki/Technical/ELACITY_DDRM_INTEGRATION.md(CEK cache + admin endpoints)docs/core/ROADMAP.md(EPUB + CBZ listed under V1.2).cursor/tasks/UPLOAD-ELACITY-LOCAL-FIRST/This is an Elacity Labs team update for the World Computer Initiative (WCI) covering April 10 – April 17, 2026. In scope: ElastOS Runtime 0.1.2 (identity, hosted rooms, operator lane, release pipeline), PC2
feature/lit-chipotle-migrationbranch work (dDRM WASM renderer for EPUB + CBZ, recovery + Docker guard rails, CEK caching observability, NFT IPFS pinning, Elastos NFT app build pipeline), the PC2 ↔ Runtime convergence inventory, and the end-to-end Elastos blockchain explorer build. Community feedback — specifically a member's name-recovery and Docker-data-loss concerns — drove two of the week's three largest security workstreams and has now been materially closed in code, docs, and tests.All reactions