- contracts/scripts/deploy-notary-registry.ts: self-compiling ethers v6
deploy for NotaryRegistry.sol (solc-js in-process — avoids hardhat's
HH1006 on contracts/node_modules), with NOTARY_DRY_RUN mode and a
machine-readable JSON envelope as last stdout line.
- contracts/hardhat.config.ts: chain138 network (RPC defaults to the
public endpoint that resolves EXT-CHAIN138-CI-RPC).
- orchestrator/Dockerfile: multi-stage node:20-alpine build, non-root
user, dumb-init, /health HEALTHCHECK on :8080.
- Dockerfile (root, portal): multi-stage vite build → nginx:1.27-alpine,
VITE_ORCHESTRATOR_URL baked at build time.
- nginx.conf: SPA fallback + long-cache /assets, sourcemaps denied.
- docker-compose.yml: full sandbox stack (postgres 15 + redis 7 +
orchestrator + portal), all secrets parameterised via env_file.
- .env.sandbox.example: template with EXT-* blocker env vars documented
and CHAIN_138_RPC_URL defaulting to the resolved public endpoint.
- .dockerignore: excludes node_modules, artifacts, cache, terraform, k8s.
- orchestrator/src/config/env.ts: emptyToUndefined() preprocess so zod
optional regex fields validate empty-string identically to unset
(fixes docker-compose NOTARY_REGISTRY_ADDRESS= sandbox booting).
Headless smoke test on this box:
- docker compose --env-file .env.sandbox up -d → all 4 containers
reported Healthy.
- curl /ready → {"ready":true}
- curl portal / → HTTP 200 with correct <title>.
- orchestrator boot log prints all 7 EXT-* IDs (6 active, 1 resolved).
- /health returns 503 on this particular builder because memory is
'critical' — DB + Redis both 'up'; this is environment-specific and
not caused by PR Z.
Unit: 13 suites / 167 tests still pass after env.ts preprocess change.
Co-Authored-By: Nakamoto, S <defi@defi-oracle.io>
Blockscout /api/v2/stats returns average_block_time in milliseconds;
ReportingPage displays it as `${value.toFixed(1)}s` which rendered
~4424s instead of the real ~4.4s. Normalize in the service layer so
every caller gets seconds regardless of upstream format.
Co-Authored-By: Nakamoto, S <defi@defi-oracle.io>
Extends the POC from #2 beyond the Dashboard so every portal page that
can benefit from on-chain signal now pulls from live backends while
preserving its existing UX. Pages without an on-chain analogue (the
IFRS/GAAP/IPSAS report rows, the dbis_core compliance alerts) stay on
sample data with an explicit 'mocked' note.
New shared primitives
---------------------
src/hooks/useLatestTransactions.ts — polls SolaceScan /transactions every 15s
src/hooks/useAddressTransactions.ts — per-address tx feed, 60s polling
src/components/portal/LiveTransactionsPanel.tsx — reusable live-tx card
src/components/portal/LiveChainBanner.tsx — slim status banner
src/components/portal/OnChainBalanceTag.tsx — shared live/off-chain pill
Per-page wiring
---------------
AccountsPage — on-chain pill + META balance + SolaceScan link on
each account row that carries a walletAddress;
overlay renders only on wallet rows (negative check).
SettlementsPage — replaces the static 'Settlement Rate' tile with a
live Chain-138 block + tx-today tile; adds a
LiveTransactionsPanel above the CSD queue so the
page no longer renders identical output when RPC
is dead.
ReportingPage — new On-Chain Reporting Snapshot row (Blockscout
/stats: block depth, total tx, total addrs,
utilisation, avg block time). Clear note that
the IFRS/GAAP/IPSAS rows come from dbis_core and
are still mocked.
TreasuryPage — two new summary tiles: live Chain-138 gas +
aggregated on-chain custody (META) from sample
wallet addresses. Uses the same
useOnChainBalances hook as Accounts.
CompliancePage — AML monitor strip with wallet selector; dedicated
'On-Chain Tx Feed' card shows IN/OUT per tracked
wallet via SolaceScan. dbis_core alerts still
mocked (no public deploy).
TransactionBuilder — LiveChainBanner inserted above the composer so
users know chain health + gas + latency before
composing; transaction-builder-module made a
flex column so the banner doesn't cover the
canvas.
Assertions baked into every live widget
---------------------------------------
- RPC failure flips colour + text to 'degraded'/'—' (no silent freeze).
- Loading state is distinct from both live and degraded.
- Each overlay is only rendered where real data differs from sample data
(walletAddress rows for balances, tracked custody for AML, etc.) so a
page without live overlays is proof-of-scope, not proof-of-brokenness.
Verified locally
----------------
- tsc --noEmit: clean
- npm run build: clean (2066 modules, 565 ms)
Still intentionally mocked
--------------------------
- proxmox.ts — CF-Access protected; a BFF route is now open in
orchestrator PR (see companion PR for /api/proxmox/*).
- dbisCore.ts — no public deployment exists yet.
- Added quick start instructions in README.md for first-time setup, including commands for complete setup, verification, and service start.
- Revised FINAL_STATUS.md to reflect the project's infrastructure completion and readiness for execution, detailing scripts created and documentation status.
- Added multi-platform deployment architecture details (Web App, PWA, DApp) to README.md.
- Included comprehensive troubleshooting guides and fix scripts in README.md.
- Enhanced CHANGELOG.md with new features, fixes, and improvements, including TypeScript error resolutions and updated documentation structure.
- Revised development setup instructions in DEV_SETUP.md to reflect changes in script usage and environment variable setup.
- Revised the development setup section in CURRENT_STATUS.md for clarity and completeness.
- Improved environment variable validation with default values in env.ts.
- Enhanced error handling in errorHandler.ts to provide clearer feedback on validation issues.
- Added a new section in CURRENT_STATUS.md detailing prerequisites and quick start instructions for development setup.
- Updated environment variable validation to include defaults for missing variables in env.ts.
- Improved error handling in errorHandler.ts for better validation feedback.
- Made various code adjustments across services to ensure robustness and clarity.
- Added AccessControl to ComboHandler for role-based access management.
- Implemented gas estimation for plan execution and improved gas limit checks.
- Updated execution and preparation methods to enforce step count limits and role restrictions.
- Enhanced error handling in orchestrator API endpoints with AppError for better validation feedback.
- Integrated request timeout middleware for improved request management.
- Updated Swagger documentation to reflect new API structure and parameters.
- Integrated ECDSA for signature verification in ComboHandler.
- Updated event emissions to include additional parameters for better tracking.
- Improved gas tracking during execution of combo plans.
- Enhanced database interactions for storing and retrieving plans, including conflict resolution and status updates.
- Added new dependencies for security and database management in orchestrator.