- Timestamp: 2026-03-29 16:31 UTC
- Project path: /root/ai-projects/viz-magic
- App path: /root/ai-projects/viz-magic/app
- Test artifacts dir: /root/ai-projects/viz-magic/test-artifacts/
- Local server: python3 -m http.server 8123
- Server process: PID 1429108, session proc_c8eaff07eefa
- Server URL checked: http://127.0.0.1:8123/
- HTTP health evidence: curl HEAD returned HTTP/1.0 200 OK from SimpleHTTP/0.6 Python/3.11.15
- 2026-03-29 16:29 UTC — created /root/ai-projects/viz-magic/test-artifacts/
- 2026-03-29 16:29 UTC — started local static server in /root/ai-projects/viz-magic/app on port 8123, PID 1429108, session proc_c8eaff07eefa
- 2026-03-29 16:29 UTC — verified server responds with HTTP 200 on /
- No restart was required during this session.
- Account provided in prompt: dream-world
- Regular key provided in prompt: available, masked in this report
- Chain account existence confirmed by direct RPC get_accounts call to https://api.viz.world/
- Chain evidence for account dream-world:
- regular_authority public key on chain: VIZ5MbnySi2ynmakpcN8DfqqrRcn8fWa5WMpnrPMDzLmxY6EhPC3V
- json_metadata contains vm grimoire: {"class":"embercaster","name":"DreamMage"}
- custom_sequence: 17
- custom_sequence_block_num: 78758957
- energy: 9962
- last_account_update: 2026-03-29T09:21:12
- Note: real browser login with the provided WIF was required by prompt, but could not be executed in this environment because no browser automation/runtime tool was available and inline script execution requests were approval-gated.
- REAL browser console testing: BLOCKED
- Reason: environment exposed no usable browser binary or browser automation framework (no chromium/firefox path found by which; no playwright/puppeteer files found under /root or project).
- Additional blocker: direct ad-hoc JS execution via node -e / python -c was approval-gated by the tool environment.
- Code evidence of likely parse/runtime failures before browser test:
- app/js/blockchain/account.js line 65 contains corrupted token: var keyAuths=accoun...ths;
- app/js/ui/screens/duel.js line 278 contains corrupted token: duelState.strategySecret=***
- app/js/ui/screens/duel.js line 422 contains corrupted token: var secret=duelSt...ret;
- Because these files are included as normal scripts in index.html, a real browser would be expected to hit JS parse errors before full app initialization. This remains UNVERIFIED at runtime because browser execution was blocked.
- Timestamp: 2026-03-29 16:31 UTC
- Scenario: Check configured VIZ nodes and blockchain reachability
- Steps:
- Read app/js/config.js for configured nodes.
- Sent real RPC get_dynamic_global_properties requests to HTTPS nodes from config using requests.
- Expected: at least one configured node should answer with head block data; failover behavior should be possible if some nodes fail.
- Actual:
- Configured nodes in app/js/config.js: wss://solox.world/ws, https://viz.lexa.host/, https://api.viz.world/, https://node.viz.cx/
- https://viz.lexa.host/ failed DNS resolution in live test.
- https://api.viz.world/ returned HTTP 200 with head_block_number 78760450 and head_block_id 04b1ca029d1971f04b40a0ef4c1397bb7370194d
- https://node.viz.cx/ returned HTTP 200 with the same head block data.
- Status: PASS for partial blockchain connectivity; FAIL for one configured node availability
- Evidence:
- /root/ai-projects/viz-magic/test-artifacts/check_nodes.py
- terminal output captured during execution of check_nodes.py
- Notes / code references:
- app/js/blockchain/connection.js implements node latency probing and failover logic.
- Live node selection by browser runtime was not directly observed because browser execution was blocked.
- Timestamp: 2026-03-29 16:31 UTC
- Scenario: Check chain account data for dream-world and Grimoire availability
- Steps:
- Sent real get_accounts RPC to https://api.viz.world/ for dream-world.
- Inspected returned chain payload.
- Expected: account exists and exposes metadata/energy needed by app.
- Actual:
- Account exists.
- json_metadata contains vm object with class embercaster and name DreamMage.
- energy on chain = 9962.
- custom_sequence_block_num = 78758957, indicating prior VM-related protocol state exists for account.
- Status: PASS
- Evidence:
- /root/ai-projects/viz-magic/test-artifacts/get_account.py
- terminal output of get_account.py with full RPC response
- Notes / code references:
- app/js/blockchain/account.js parseGrimoire() reads json_metadata.vm exactly as README claims.
- Timestamp: 2026-03-29 16:29 UTC
- Scenario: Basic application bootstrap file structure
- Steps:
- Read app/index.html.
- Checked included screens, scripts, manifest and service worker registration code.
- Expected: landing/login/onboarding/home/hunt/duel/arena scripts should all be loadable in browser.
- Actual:
- Document title is Viz Magic.
- Start screen in HTML is screen-landing with class active.
- Service worker registration code exists in app/js/ui/app.js and points to /sw.js.
- sw.js exists.
- index.html loads corrupted account.js and duel.js directly as scripts.
- Status: PARTIAL / BLOCKED
- Evidence:
- app/index.html lines 10, 23-28, 42-60, 114-116, 173-184
- app/js/ui/app.js lines 197-205
- app/sw.js
- Notes / code references:
- Service worker runtime registration was not observed in a real browser due lack of browser execution.
- Timestamp: 2026-03-29 16:31 UTC
- Scenario: Real login flow using dream-world and provided regular key
- Steps:
- Confirmed chain account exists and inspected regular_authority public key from chain.
- Attempted to prepare for real browser login, but no usable browser/automation was available.
- Inspected login implementation code path.
- Expected: browser should allow login and continue to home/onboarding based on grimoire.
- Actual:
- Login runtime test could not be executed in browser in this environment.
- Code path is very likely broken before validation because account.js contains corrupted syntax at line 65, inside VizAccount.login().
- Status: BLOCKED at runtime, FAIL by code-vs-runtime readiness
- Evidence:
- app/js/blockchain/account.js lines 39-92, especially line 65
- get_accounts RPC response showing account and regular_authority are available on chain
- Notes / code references:
- Because account.js is loaded as a classic script from index.html, syntax corruption would stop script evaluation and likely prevent login, session restore, account fetch, energy reads, grimoire reads, and metadata writes.
- Timestamp: 2026-03-29 16:31 UTC
- Scenario: Grimoire read/write behavior
- Steps:
- Confirmed README claim and runtime code path for grimoire key.
- Queried dream-world account from chain.
- Inspected updateGrimoire implementation.
- Expected: app should read json_metadata.vm and potentially write metadata when logged in.
- Actual:
- Read path is supported by code and confirmed by live chain data: json_metadata.vm for dream-world is present and equals class embercaster / name DreamMage.
- Browser restoration after reload could not be runtime-tested.
- Metadata write was not attempted because login was not achievable in a real browser in this environment, and modifying chain state without a verified UI session would not satisfy the prompt’s browser-testing requirement.
- Status: PASS for chain read evidence; BLOCKED for browser-side restore and write verification
- Evidence:
- README-ru.md line 15 and 26-27
- app/js/blockchain/account.js lines 167-215
- live get_accounts response for dream-world
- Notes / code references:
- app/js/ui/app.js lines 52-82 and app/js/ui/screens/login.js lines 97-116 both attempt to restore character from grimoire.
- Timestamp: 2026-03-29 16:31 UTC
- Scenario: Mana / energy source of truth
- Steps:
- Queried real chain energy for dream-world.
- Inspected hunt flow and energy calculation code.
- Expected: mana shown/spent in battles should be tied to on-chain energy and on-chain spending.
- Actual:
- Chain source exists: dream-world energy = 9962 from live RPC.
- Hunt screen fetches account and uses calculateCurrentEnergy(accountData) before allowing action.
- calculateCurrentEnergy() derives current energy from account.energy and last_vote_time.
- Hunt does not prove on-chain energy spending for solo hunts because VizBroadcast.huntAction only sends a custom VM action when npcAccount is empty; award() is skipped in solo mode.
- In HuntScreen._doHunt, XP and loot are granted immediately in local state before any chain confirmation and regardless of award absence.
- Status: FAIL
- Evidence:
- live get_accounts response: energy 9962
- app/js/blockchain/account.js lines 223-233
- app/js/ui/screens/hunt.js lines 110-160
- app/js/blockchain/broadcast.js lines 114-140
- Notes / code references:
- This is a critical mismatch with the claim “мана = energy VIZ” for actual combat expenditure.
- Source of truth for gatekeeping is chain energy fetch; source of truth for rewards is local optimistic state mutation.
- Timestamp: 2026-03-29 16:31 UTC
- Scenario: Hunt flow, on-chain evidence, reward timing, randomness source
- Steps:
- Inspected full HuntScreen implementation.
- Cross-checked README claim that outcomes should derive from block hash.
- Expected: hunt outcome should be determined from real chain/block data, with rewards after chain confirmation.
- Actual:
- Hunt creates pseudoHash from Date.now() + Math.random().
- resolveHunt() is called locally before broadcast result returns.
- Broadcast is explicitly “fire and forget, optimistic UI”.
- Broadcast callback only logs success/error and does not gate the displayed result.
- XP and loot are written to local state immediately on local victory.
- No real block hash is fetched for outcome generation in HuntScreen.
- No chain confirmation check is required before showing victory/defeat or giving loot.
- Status: FAIL
- Evidence:
- README-ru.md line 27
- app/js/ui/screens/hunt.js lines 124-160 and 166-189
- Notes / code references:
- Confirmed code-vs-spec mismatch: README says block hash entropy; runtime hunt screen uses local pseudo-random entropy.
- Because runtime browser execution was blocked, live clicking was not performed, but the mismatch is directly in the shipped client logic.
- Timestamp: 2026-03-29 20:10 UTC
- Scenario: Duel / Arena flow reality check after duel runtime audit
- Steps:
- Re-read arena.js, duel.js, duel-protocol.js, duel-state.js, state-engine.js, validator.js.
- Checked for leftover fake/local simulation branches and for honest pending/active/reveal wiring.
- Applied minimal fixes where runtime still had wiring gaps.
- Expected: duel should stay chain-backed only, with pending/active/reveal states driven by protocol/state, not local simulation.
- Actual:
- No remaining local opponent simulation path was present in the current duel screen audit scope.
- duel.js still had two corrupted placeholder assignments (
duelState.strategySecret=***) that would break parse/runtime. - duel.js also allowed an active duel screen to fall through directly into reveal submission whenever
combatRefexisted, even if the player had not yet committed for the current round. - duel.js kept active duels started from arena/history on
preinstead of honestly routing towaitingvssealbased on current round commit state. - validator.js still accepted duel protocol actions via default pass-through, so malformed/duplicate/unauthorized duel actions could reach DuelStateManager unchecked.
- Status: FIXED / PARTIAL PASS
- Evidence:
- app/js/ui/screens/duel.js
- app/js/engine/validator.js
- app/js/protocols/duel-protocol.js
- app/js/engine/duel-state.js
- Notes / code references:
- Minimal production-first fixes landed: repaired broken syntax, gated reveal path behind confirmed current-round commit presence, restored next-round seal flow, synced
pre→seal/waitingbased on active duel state, and added explicit validator rules for challenge/accept/commit/reveal/forfeit. - Arena still honestly starts real duel creation without local resolution; no browser pass is claimed here.
- Minimal production-first fixes landed: repaired broken syntax, gated reveal path behind confirmed current-round commit presence, restored next-round seal flow, synced
- Timestamp: 2026-03-29 16:31 UTC
- Scenario: Check whether gameplay outcomes rely on local pseudo-randomness instead of chain entropy
- Steps:
- Searched runtime game screens for Math.random, Date.now, pseudoHash, simulateOpponentReveal.
- Inspected hunt and duel screens in detail.
- Expected: fairness-critical outcomes should be deterministic from block hash / chain data as claimed in README.
- Actual:
- Hunt uses pseudoHash = Date.now().toString(16) + Math.random().toString(16).substring(2)
- Duel auto intent selection uses Math.random()
- Duel waiting phase triggers local _simulateOpponentReveal()
- Duel round resolution uses pseudoHash from Date.now + Math.random
- Status: FAIL
- Evidence:
- app/js/ui/screens/hunt.js lines 124-128
- app/js/ui/screens/duel.js lines 195-199, 336-340, 400-430
- Notes / code references:
- README-ru.md line 27 claims block hash entropy; shipped client does not honor this in hunt/duel UI.
- Timestamp: 2026-03-29 16:31 UTC
- Scenario: Check if results/rewards can appear without chain confirmation
- Steps:
- Inspected local state mutations and ordering relative to broadcast callbacks.
- Expected: XP/loot/results should wait for on-chain proof or deterministic post-block processing.
- Actual:
- Hunt computes result locally before broadcast callback.
- Hunt grants XP and creates loot items locally before any chain confirmation.
- Broadcast callback only logs success/error and does not revert local rewards.
- Duel waiting screen can proceed to reveal on local timeout without chain event.
- Status: FAIL
- Evidence:
- app/js/ui/screens/hunt.js lines 128-160 and 130-140
- app/js/ui/screens/duel.js lines 400-459
- Notes / code references:
- This creates a confirmed anti-cheat/fairness problem even before runtime clicking.
- Timestamp: 2026-03-29 16:31 UTC
- Scenario: Check spec mismatch on honest blockchain gameplay claims
- Steps:
- Read README-ru claims.
- Compared against shipped runtime client logic.
- Expected: README claims should align with runtime implementation.
- Actual:
- README says all actions are inscriptions on VIZ and block hash is entropy source.
- Hunt and duel screens include demo/local simulation logic and optimistic rewards.
- One configured node is dead by live test.
- Core account and duel UI files contain syntax corruption likely preventing real browser execution.
- Status: FAIL
- Evidence:
- README-ru.md lines 15, 27, 47
- app/js/ui/screens/hunt.js
- app/js/ui/screens/duel.js
- app/js/blockchain/account.js
- live node checks
- Notes / code references:
- This is the strongest confirmed mismatch in the current test session.
- README/spec claim: block hash based entropy for fair outcomes.
- Shipped client: hunt and duel use local Date.now/Math.random pseudoHash instead.
- README/spec claim: duel is commit-reveal blockchain gameplay.
- Shipped client: duel waiting phase auto-simulates opponent reveal after 3 seconds.
- Runtime readiness claim implied by app structure.
- Shipped client files contain visible syntax corruption in account.js and duel.js, likely preventing normal execution.
- Mana/energy claim.
- Shipped client checks chain energy for eligibility but solo hunt path does not spend award energy on-chain and still grants local rewards.
- /root/ai-projects/viz-magic/test-artifacts/check_nodes.py
- /root/ai-projects/viz-magic/test-artifacts/get_account.py
- Terminal evidence captured during execution:
- HTTP 200 response from local server on port 8123
- RPC response from https://api.viz.world/ for get_dynamic_global_properties
- RPC response from https://node.viz.cx/ for get_dynamic_global_properties
- RPC response for dream-world account data from https://api.viz.world/
- No screenshots or browser console dumps were produced because real browser execution was blocked by missing browser tooling in the environment.
- Timestamp: 2026-03-29 18:40 UTC
- Scope: independent code retest of previously claimed fixes in app/js/blockchain/account.js and app/js/ui/screens/duel.js, focused on leftover damaged tokens and parser readiness.
- Findings:
- Previous fix claim was incomplete: account.js still contained corrupted placeholders in VizAccount.login() (
var keyAuths=***,keyAuths=accoun...ths;). - duel.js still contained corrupted placeholders in two places (
duelState.strategySecret=***in commit flow and round reset flow). - I did not find additional confirmed damaged
***/ truncated-token placeholders in other app/js/*.js files beyond these confirmed cases.
- Previous fix claim was incomplete: account.js still contained corrupted placeholders in VizAccount.login() (
- Fixes applied:
- app/js/blockchain/account.js
- restored
keyAuthsinitialization to an empty array; - restored assignment from
account.regular_authority.key_auths; - added a safe fallback threshold when
regular_authorityis absent to keep the function parseable and defensive.
- restored
- app/js/ui/screens/duel.js
- restored
duelState.strategySecretassignment to a valid object in_commitStrategy(); - restored round-reset cleanup to
duelState.strategySecret = null;.
- restored
- app/js/blockchain/account.js
- Minimal syntax checks executed:
node --check app/js/blockchain/account.js→ PASSnode --check app/js/ui/screens/duel.js→ PASS
- Residual status after retest:
- Confirmed parser-blocking corruption in account.js and duel.js has been removed.
- Earlier broader product findings in this report about demo/local-simulation behavior remain unchanged by this retest.
- Timestamp: 2026-03-29 17:05 UTC
- Scope: manual cleanup of remaining syntax corruption after the first fix cycle.
- Findings:
- Previous fix cycle was incomplete: account.js still contained corrupted placeholders in regular-key validation, and duel.js still contained a corrupted strategySecret assignment.
- Both files were manually repaired in this cycle.
- Confirmed repairs:
- app/js/blockchain/account.js
- replaced corrupted placeholders in regular key validation with:
var keyAuths = [];keyAuths = account.regular_authority.key_auths;
- replaced corrupted placeholders in regular key validation with:
- app/js/ui/screens/duel.js
- replaced corrupted
duelState.strategySecret=***with a valid object assignment.
- replaced corrupted
- app/js/blockchain/account.js
- Minimal syntax retest:
node --check app/js/blockchain/account.js→ PASSnode --check app/js/ui/screens/duel.js→ PASSnode --check app/js/ui/screens/hunt.js→ PASSnode --check app/js/blockchain/broadcast.js→ PASSnode --check app/js/ui/screens/arena.js→ PASS
- Additional code search retest:
- Search for leftover
***,accoun...ths,duelSt...retin app/js/*.js → 0 confirmed matches
- Search for leftover
- Important note:
- This retest confirms syntax cleanup only.
- It does NOT overturn earlier confirmed fairness findings about hunt/duel logic until a new real browser/on-chain pass is completed.
- Status: PARTIALLY TESTED
- What реально работает и чем доказано:
- Local static app hosting works on port 8123, proven by HTTP 200.
- VIZ blockchain connectivity exists at least through https://api.viz.world/ and https://node.viz.cx/, proven by live DGP RPC responses with head block 78760450.
- dream-world chain account exists, has vm grimoire in json_metadata, and exposes chain energy 9962, proven by live get_accounts response.
- Critical syntax corruption in account.js and duel.js has now been manually repaired and validated by
node --check.
- What не работает / критические риски и чем доказано:
- One configured node endpoint remains unreachable by DNS in this environment during live test: https://viz.lexa.top/.
- Hunt fairness was previously confirmed broken in shipped client logic: local pseudoHash, optimistic UI, local XP/loot before chain confirmation.
- Duel fairness was previously confirmed broken in shipped client logic: Math.random auto-picks, local simulateOpponentReveal, pseudoHash from Date.now/Math.random. A fresh browser retest is still required after the cleanup cycle.
- Mana/energy linkage is incomplete/incorrect for solo hunt: chain energy is consulted as a gate, but on-chain spend is not evidenced while local rewards are still granted.
- What выглядит demo/local simulation instead of real blockchain gameplay:
- Hunt outcome generation and reward application.
- Duel waiting/reveal flow and auto mode.
- Arena to duel transition with empty combatRef.
- Какие критические несоответствия со спецификацией подтверждены:
- Claimed block-hash-based fairness is contradicted by shipped hunt/duel runtime code.
- Claimed commit-reveal duel is contradicted by local simulation path.
- Claimed mana=energy spending is contradicted by solo hunt reward flow without award spend confirmation.
- Какие дальнейшие исправления и проверки нужны до следующего вердикта:
- Re-run a real browser/on-chain test pass after the manual syntax cleanup.
- Verify whether hunt is now honest pending-only or still produces any fake local settlement in runtime.
- Verify whether duel screen now loads cleanly in browser and whether remaining UI flow still depends on local simulation.
- Gate XP/loot/result presentation on on-chain confirmation or deterministic block processing.
- Verify solo hunt mana spending model and make on-chain spend auditable.
- Replace dead or unstable nodes in config and verify failover in real browser.
- Timestamp: 2026-03-29 17:51 UTC
- Scope: new facts-only retest after claimed manual syntax cleanup of account.js and duel.js, with maximum real verification available in this environment: localhost health, live chain RPC, parser status, current hunt/duel/account code state, and whether prior parser-blocking corruption is actually gone.
- Localhost availability was rechecked live with
curl -I http://127.0.0.1:8123/. - Real browser execution remains BLOCKED in this environment.
- Evidence for browser block in this retest:
- no browser automation or browser binaries were found inside the project tree;
- process list showed no reusable browser/server session from tooling for UI automation;
- therefore I did not claim any browser-pass and did not fabricate runtime clicking.
http://127.0.0.1:8123/returnedHTTP/1.0 200 OKat retest time.- Response headers during retest:
Server: SimpleHTTP/0.6 Python/3.11.15,Content-Length: 7365. - Status: PASS
- Evidence:
- live
curl -I --max-time 10 http://127.0.0.1:8123/output at 2026-03-29 17:51 UTC.
- live
-
Re-executed
python3 test-artifacts/check_nodes.pyagainst configured HTTPS nodes fromapp/js/config.js. -
Actual live results in this retest:
-
https://viz.lexa.top/→ DNS failure / unresolved host in this environment.
-
https://api.viz.world/→ HTTP 200, latency ~32 ms,head_block_number: 78762186.
-
https://node.viz.cx/→ HTTP 200, latency ~99 ms,head_block_number: 78762187.
-
Status: PASS for partial chain connectivity, FAIL for one configured node.
-
Evidence:
app/js/config.jslines 9-14test-artifacts/check_nodes.py- terminal output of
python3 test-artifacts/check_nodes.py
- Re-executed
python3 test-artifacts/get_account.pyagainsthttps://api.viz.world/. - Confirmed on-chain facts in this retest:
- account
dream-worldexists; regular_authority.key_auths[0][0] = VIZ5MbnySi2ynmakpcN8DfqqrRcn8fWa5WMpnrPMDzLmxY6EhPC3V;json_metadata.vm = {"class":"embercaster","name":"DreamMage"};custom_sequence = 17;custom_sequence_block_num = 78758957;energy = 9962.
- account
- Status: PASS
- Evidence:
test-artifacts/get_account.py- terminal output of
python3 test-artifacts/get_account.py
- I re-ran parser checks directly:
node --check app/js/blockchain/account.js→ PASSnode --check app/js/ui/screens/duel.js→ PASSnode --check app/js/ui/screens/hunt.js→ PASSnode --check app/js/blockchain/broadcast.js→ PASSnode --check app/js/ui/screens/arena.js→ PASS
- I also re-searched
app/js/*.jsfor previously suspicious damaged placeholders (***,accoun...ths,duelSt...ret) and found 0 matches. - Status by parser evidence: PASS
- Important code-state note: this retest confirms parser readiness only; it does not by itself prove successful browser execution because real browser runtime is still unavailable here.
app/js/blockchain/account.jsis now parseable and the grimoire/energy functions remain in place.- However, the currently shipped file still visibly contains damaged placeholder text in the login authority validation block:
- line 65:
var keyAuths=*** - line 67:
keyAuths=accoun...ths;
- line 65:
- This is a direct file-content fact from the current workspace snapshot.
- That creates a contradiction with the successful
node --checkresult and means the current file-on-disk state and parser result are inconsistent in evidence collected during this retest. - Status: INCONSISTENT EVIDENCE / REQUIRES MANUAL RECONCILIATION
- Evidence:
app/js/blockchain/account.jslines 61-69- live
node --check app/js/blockchain/account.jsoutput
- Hunt behavior is materially different from the earlier failing version.
- Current shipped hunt flow now:
- checks chain energy through
VizAccount.getAccount()andcalculateCurrentEnergy()before allowing broadcast; - renders a pending state immediately;
- calls
VizBroadcast.huntAction(...); - on broadcast error shows blocked state;
- on broadcast success shows submitted/pending state only.
- checks chain energy through
- I did not find current local reward settlement in this file during this retest:
- no local XP award path;
- no local loot creation path;
- no
Math.random()/ pseudoHash result generation in currenthunt.js.
- Status: IMPROVED by code review; real runtime/browser confirmation still BLOCKED.
- Evidence:
app/js/ui/screens/hunt.jslines 98-151 and 154-208
VizBroadcast.huntAction()now hard-blocks hunts without a real chain NPC target:- if
npcAccountis empty, callback returnsError('hunt_requires_chain_target')immediately; - comment explicitly says solo/demo settlement is intentionally disabled because fairness-critical spending and rewards must remain auditable on-chain.
- if
- Hunt screen currently passes empty string as
npcAccount, so the present shipped hunt UI path would be expected to hit that block unless another caller path supplies a real NPC account. - Therefore current state is not “fake local success” but rather “UI can submit attempt, then gets blocked without chain target”.
- Status: PASS for removal of previous optimistic local settlement in inspected code; FUNCTIONAL BLOCKER remains for actual hunt completion path from current screen wiring.
- Evidence:
app/js/ui/screens/hunt.jslines 132-149app/js/blockchain/broadcast.jslines 105-143
- Duel screen is now in a newer state than the earlier broken/random version in one important respect:
- seal timer expiry no longer auto-picks a random intent; it now returns to pre-phase with
duel_manual_selection_requiredif no manual choice was made. - waiting screen no longer shows the earlier local
_simulateOpponentReveal()path in the portion inspected during this retest.
- seal timer expiry no longer auto-picks a random intent; it now returns to pre-phase with
- But major real-flow limitations remain in current shipped code:
ArenaScreenstill starts duels with emptycombatReffrom direct challenge actions (DuelScreen.startDuel(opp, '', ...)).- In
DuelScreen._commitStrategy(), when there is nocombatRefbut there is an opponent, it creates a challenge and moves to waiting. - Honest runtime chain-backed continuation/reveal still cannot be confirmed without browser execution and event observation.
- Also, the currently visible source snapshot still shows one damaged placeholder in duel commit state storage:
app/js/ui/screens/duel.jsline 261 startsduelState.strategySecret=***
- As with account.js, this directly conflicts with the successful
node --checkresult collected in the same retest. - Status: INCONSISTENT EVIDENCE / REQUIRES MANUAL RECONCILIATION
- Evidence:
app/js/ui/screens/arena.jslines 54-59, 137-141, 223-227app/js/ui/screens/duel.jslines 251-267, 343-364, 374-416- live
node --check app/js/ui/screens/duel.jsoutput
- What was really re-verified now:
- localhost server is alive and returns HTTP 200;
- chain RPC is live through
api.viz.worldandnode.viz.cx; dream-worldaccount and grimoire data are still present on-chain;- parser checks currently report PASS for account.js / duel.js / hunt.js / broadcast.js / arena.js;
- hunt code is no longer in the earlier optimistic-local-reward state;
- hunt wiring has been advanced further: the hunt screen now passes
creature.npcAccountinstead of an always-empty target, so current starter creatures have an auditable award target path instead of guaranteed UI-side blocking; - config has been updated from obsolete
viz.lexa.hosttoviz.lexa.top.
- What I could not honestly confirm:
- real browser load, login, service worker, selected node, or UI click-through in runtime;
- real login using the provided key;
- real chain-backed hunt completion;
- real duel commit/reveal completion in browser.
- Important environment note:
viz.lexa.topremains unresolved by DNS in this environment, but this is no longer treated as a blocker because other configured nodes are live and working.
- Current main remaining product risks before final verdict:
- real browser/on-chain hunt completion still needs runtime confirmation;
- duel runtime still needs honest browser verification;
- earlier inconsistent evidence around file snapshots versus parser checks should be treated as secondary until revalidated in a proper browser pass.