VEYNDO
Handbook
docs/evidence/connected-commerce-2026-10-30.mdView source ↗

English source · 11 min

Connected commerce: first implementation slice

30 October 2026. Branch feat/connected-commerce-followups-20261030, based on 20dd5dad. Local development and subsequent public observations are separated below. The 13-area checklist remains open.

Native behavior

Applied native proposals open the existing customer simulator with the original sales channel. Server-derived source IDs, revisions and proposal digests are revalidated through the native task access owner. Customer tests retain their existing actor, shop, private environment and current permission checks. Repeat restores saved attribution; removing the reference preserves the editable brief.

Configuration evidence hashes the existing release projection at start and finish, then compares against current configuration. Operational records, stock and secrets stay excluded. The capture has a three-second overall timeout and short lock wait; an unavailable complete projection produces unverified, not a failed purchase or an unreadable saved report. A boundary comparison does not detect an edit that is fully reverted between captures. No partial digest counts as current.

The independent review identified the large-app failure case before integration. The corrected regression installs the native engraving app, creates 1001 actual configuration records, reads the earlier successful report and completes another native private purchase. Both remain usable with explicitly unavailable evidence.

Checks

  • Two Rust evidence-classification tests.
  • Targeted scenario and agent-workspace UI tests: reference inclusion/removal, repeated-source attribution, retained briefs, stale context and evidence states.
  • Actual Rust HTTP/PostgreSQL suite with separate restricted system and tenant logins and local deterministic inference: native purchase, exact budget, concurrent customers, idempotency, cold restart, cancellation, lock/lease fences, language/channel isolation, injection, source ownership/applied state, source changes during inference, changed/stale configuration, large app records, revoked rights and emergency stop.
  • Generated TS/WIT/OpenAPI operation inputs derive from the compiled registry.
  • Structural ownership/localization checks and a scoped Impeccable source scan.

The ownership and mid-inference mutation tests use a saved-task fixture. A second case now exercises the actual merchant model wire, native price proposal, explicit apply and an attributed private purchase. The proposal cannot start its customer test before approval; the live price remains unchanged until the selected publication described below. Only the provider response is synthetic in that case. Automatic rendered customer journeys remain separate acceptance work.

Native proposal through selected publication

The targeted agentic_scenarios suite now continues the same applied EUR 71.23 lamp proposal and attributed purchase through /api/environments/{id}/release. It passed on 30 October against the compiled Rust server, isolated PostgreSQL and separate restricted system/tenant logins. Only inference is deterministic.

  • The exact reviewed product:lamp digest publishes and native storefront reads return EUR 71.23 in the live fixture.
  • Full order data and every product's stock in both environments remain unchanged across publication. The private test order is not imported into live.
  • Unselected channel and app changes retain the same keys and digests.
  • The saved test still identifies its original proposal and order and reports current private configuration after publication.
  • Missing approval returns 400; stale and replayed selections return 409; revoking the current actor's publication rights returns 403.
  • The successful request creates exactly one native release and one shop.release.published outbox event; rejected requests add neither release.

The existing script owns the regression in scripts/testing/scenario_source.py. The run also retained its cancellation, restart, source-fencing, foreign-sandbox and emergency-stop cases. No full suite or real payment was run for this change. These are API acceptance results, not an automatic rendered-customer recording.

Actual Studio publication

The in-app browser then signed into a separate disposable native shop through the normal password form. A model-fixture proposal and native private purchase were prepared through the same handlers. In Studio, the saved result showed the order for EUR 71.23 beside the real product diff from EUR 79.90 to EUR 71.23.

Opening Open this test and repeat retained the exact saved report, default channel and private sandbox. Returning through Staging & releases, selecting only the lamp and publishing produced the native success message and history row. Reload retained that history and showed no remaining unpublished change in this single-change fixture. A final native read confirmed live price EUR 71.23, exactly one private order and zero live orders. The owned server/database were removed.

This browser fixture uses the supported HTTP-localhost development login profile. The preceding API regression separately exercises strict signed SQL scopes and restricted system/tenant logins. The strict profile intentionally rejects insecure browser login; no production setting was changed to make this local UI test work. The model response is deterministic. The browser exercises the merchant release journey; the customer purchase remains a native API scenario, not a rendered agent.

Actual Studio with selected product and saved private purchase

Native publication completed and recorded in history

Rendered component review

Chrome rendered the actual report/source components at 1365 × 900 and 390 × 844. The narrow content has matching client/scroll width (374 pixels), with readable wrapped labels. Keyboard activation removes the setup reference while the saved result attribution remains. Images deliberately label their synthetic display data. These are component previews, not automatic browser-customer evidence.

Desktop component preview with current and stale configuration

Mobile component preview

Remaining task 1 acceptance

Automatic rendered shopper journeys and captured screenshots, authenticated B2B profiles, and the complete combined rendered proposal/preview/test/publication journey are still open. Saved API results and native diffs are now connected as described below. The existing API simulation and these component images do not establish those capabilities. The checklist records their acceptance separately.

Home and content page overview

The existing editor now compares up to four real page renderers, with native home fallback, current unsaved content, global/channel/page appearance and the existing language scope. The inspector remains mounted while hidden so the typed agent request survives toggling. Opening the same draft returns without resetting its baseline or undo history; another page uses the existing discard confirmation.

The final affected designer/workspace suite passed 35 cases including the new dirty/undo regression. TypeScript passed. The scoped source detector returned no findings. The independent finish review scored the draft-preservation fix resolved; documentation review confirmed the scoped behavior and completion boundaries.

Chrome desktop and mobile fixtures use actual components with labelled example data. At the 390 × 844 viewport, browser measurements were inner width 390, document client/scroll width 375 and body width 375, with no document overflow. Native viewport image output is scaled to 375 × 812. Full-page mobile capture caused reflow, so the retained evidence is the actual top and scrolled viewport.

Desktop page overview

Mobile overview controls

Mobile page previews

These captures do not establish production deployment, product/category/cart template editing or a rendered autonomous purchase.

Browser-agent cart entry

The registered veyndo_add_product tool now uses the native UI command to create an absent/completed cart and add items without replacing the current basket. Twelve targeted command and React-hook tests pass: concurrent additions, invalid IDs/quantities before creation, cancellation after creation, retained old handles after changing shop, private-preview suppression, token exclusion and normal shopping when document.modelContext is absent. TypeScript and frontend ownership checks pass. Merchant-provided names are explicitly annotated as untrusted output.

The current Chrome imperative-API documentation was checked on 30 October. The initial browser inventory timeout was resolved by selecting the existing in-app browser directly. All five tools were then discovered and called through the browser WebMCP capability against the actual local Rust server and a disposable PostgreSQL database with restricted signed system/tenant connections.

The German catalogue returned the native bag product at EUR 169. Adding one bag and one scarf returned EUR 228; changing the bag quantity to two returned three items and EUR 397. Checkout review visibly displayed those same lines and total, with contact/address fields and simulated payment selected. No order was submitted. Negative quantity and an unknown product both failed without changing the basket. The native update cleared the basket; reload showed zero and registered five tools again. The test tab was closed and the owned local fixture stopped. This is local browser acceptance, not public deployment or cross-browser certification.

Actual native checkout opened through browser tools

Saved tests beside selective publication

The native EnvironmentManager now reads saved customer tests through a sandbox-scoped request and embeds the existing report renderer. No release path, permission or publication gate is replaced. The exact sandbox/channel/report is retained on return to the simulator. Changes in request scope hide earlier report, history and selection state; late responses cannot repopulate another scope.

Targeted React checks cover compound rights and revocation, current/stale refresh, late responses after a sandbox switch, retry after read/navigation failure, selected changes cleared before the next diff arrives, exact saved-report navigation, channel-scoped initial report loading and denied URL report access. TypeScript, frontend architecture and all four interface language catalogues pass. Full suite execution remains on the daily cadence. The 20 affected release-review, scenario and navigation component tests pass. The scoped Impeccable detector reports no findings; independent UI and documentation reviews returned ship at component scope.

The in-app browser rendered the actual components at 1280-pixel desktop width and in a 390-pixel mobile iframe. The outer white area in the mobile capture is the fixture page, not the component. Synthetic display data was used for this UI review; selection, current/stale refresh, callback arguments and empty sandbox switching were exercised. These images do not establish a native selected publication or an automatic browser-customer journey.

Saved test beside publication controls

Stale evidence and native before/after diff

390-pixel component layout

Native shop preview in the release review

The current sandbox storefront opens inline beside a saved API customer test. Opening/reloading first reads the actor-private report again; the selected run supplies its channel and language without a default-channel fallback. The iframe uses the normal native storefront and browser session. No tokens enter its URL. A close, profile change or parent scope/report refresh removes the frame and invalidates pending responses. The original digest-bound release remains unchanged.

On 30 October, the in-app browser signed into a fresh disposable native Rust / PostgreSQL fixture, selected the saved price-proposal test and opened the actual storefront. Optional tracking was rejected. Home and product navigation retained the private tenant, default channel and en-GB language. The lamp detail showed EUR 71.23. Desktop and 390-pixel inner mobile widths rendered in a 1280-pixel Studio window. Closing the frame and selecting only the tested product completed the normal publication flow. Native readback verified the live product price and retained one private test order with no live order.

Thirteen affected React tests cover report revalidation, denied access with retry, late closed requests, missing-run rejection, profile switching, scope/rights changes and publication selections. TypeScript, build, structure, inventory and localization checks pass. The scoped Impeccable detector reports no findings. The browser used the supported HTTP localhost development session profile. The previous separate strict native database acceptance is not replaced by this UI check.

These screenshots are acceptance artifacts, not automatically captured product evidence. Automatic rendered customer journeys and stored run-bound screenshots remain open in the checklist. Public Core deployment is recorded separately.

Actual sandbox shop beside its saved test

Native shop at mobile width in the publication review

Selected publication completed after inspecting the preview

Public saved-test continuity

On 30 October at 14:10 CET, Chrome reopened the existing private Abnahme 29 Oktober sandbox in the hosted Studio and repeated its two saved fictional customers through the configured public model. The EUR 1.00 German profile stopped before purchasing the EUR 19.90 cup. The EUR 25.00 English profile completed one simulated order for EUR 19.90, recorded as 24342063fe7b4c89b9a706af1fac054d. Both new results reported matching start, finish and current publishable configuration. The older 29 October report remained readable with explicitly unavailable historical configuration evidence.

This exercised the native API shopper worker from the real public Studio. It did not convert its journal into a rendered browser test or publish sandbox changes.

Public release preview and completed browser purchase

The existing Northflank release workflow deployed main d56d6633 (PR 250), image divine-sock-5900, at 14:11:47 CET on 30 October. The Core instance reached Running with 1/1 health checks and zero restarts. The hosted Studio served index-DDtRqbuj.js, matching the new frontend. Full reload retained the merchant session and the selected private sandbox. No duplicate manual deployment or change to the CD setting was necessary.

In the public Staging & publications workspace, the selected saved customer result opened the actual private shop in its default channel and en-GB language. Native Chrome input then followed product detail → add one cup → contact/address → pickup → Demo payment → review → completion. The resulting confirmation RAC-c742b982 showed EUR 19.90, including EUR 3.18 VAT and zero shipping. Returning to the collection retained Bag 0; opening it displayed “Your bag is waiting for something good.” The mobile-width preview was also opened. No real payment was made and no sandbox configuration was published.

Public private-shop preview with completed simulated order

Empty basket after returning from the completed purchase

Current native shop in the mobile-width release preview

These are cropped captures of the actual hosted Studio, with browser chrome removed. This journey verifies the native release-review iframe. It is a separate surface from original Storyfront checkout and does not constitute a new Storyfront acceptance or automatically recorded customer-agent browser execution.

Saved-test navigation repair

The public walkthrough exposed two usability defects: starting a new test kept the previous report ID in the address, and repeated test titles were indistinguishable in the publication selector. The follow-up keeps the selected/new test in the existing URL while preserving shop, channel, fragment and history state. A parent's subsequent URL read no longer resets the edited brief. Scope changes still discard late start responses. Both selectors share localized dates and short run IDs, including a safe fallback for old reports without usable dates.

The four affected component suites pass 20 tests. They cover failed starts, late responses, reload selection, retained input, repeated titles, permission withdrawal and saved-test navigation. TypeScript and the production frontend build pass. This follow-up's public delivery is recorded separately from PR 250 above.

Native product presentation in the page overview

The follow-up adds a selected channel product beside the existing home/content previews. ProductGallery and ProductPurchase share the live storefront presentation. The read uses the editor request with explicit channel and content locale; it does not mount the shopper controller, telemetry or cart session. Late responses from previous workspace/request/channel scopes are discarded. Purchase and app actions remain inactive; the native gallery remains usable.

Four affected test files passed 31 cases: product page, native product preview, site designer and storefront canvas. After the delivery-note guard changed, the 13 affected product/preview cases passed again. Assertions cover scoped requests, no global shopper transport, disabled purchase actions, late foreign responses and retry after denied reads.

The actual React editor was inspected in the local in-app browser using explicitly synthetic products and fixture responses. Changing the selected product updated the native heading/image. Mobile preview measured 375 CSS pixels of content and 375 scroll width, without horizontal overflow. These are renderer/component checks, not a live database or hosted acceptance of this increment. Lower product sections, recommendations, category/cart templates and editable product templates remain open.

Local page overview with native product presentation and synthetic data

Local mobile product preview after changing the selected product

Delivery connection finding

PR 251 merged as d2891136c617509260b71555d82ec88f6d021433; GitHub verification, documentation and packaged image jobs passed. Northflank release runs d76e4528-ecbf-4102-a068-d75df8c69d64 and b420f79b-d41c-46d0-a49c-f85a68ca53a9 failed at repository access before the build. The existing GitHub installation 84002493 is active and grants all repositories. Northflank still reports Git sync error after re-entering its existing linking flow. No installation was removed, access broadened or release safety step skipped. The last verified public Core remains d56d6633.