Version 1.10.0 validation
Checked on 6 October 2026. The original frontend uses a scientific workbench with compact file/history/export tools, a square central scene, a docked structure inspector and categorized tool navigation. The 27-command palette routes to existing controls and explains disabled actions. Focus scene temporarily hides both side panels while preserving project and camera state.
- 209 JavaScript tests passed. Existing scientific geometry, project validation, editing history, connections, rendering, export metadata and account/provider safeguards remain covered.
- Eleven workbench browser groups passed on source and the production build. Seven viewports were checked: 1440x900, 1920x1080, 1280x800, 1024x768, 768x1024, 390x844 and 320x740. Desktop document heights match their 900/1080/800-pixel windows, with independently scrolling tools and inspector content. Every scene remains square and no page has horizontal overflow. A dedicated touch-tablet context verifies 44-pixel action and inspector-tab targets; precise-pointer desktop controls use 32-pixel minimums.
- The final tablet refinement passed targeted source checks and the complete compiled suite. Sticky, internally scrolling tablet tools reduce document height at 1024px from 2645 to 1184 pixels and at 768px to 1188 pixels. The 553/504-pixel square scenes start 12 pixels below their toolbars; the inspector follows immediately. Navigation reaches all tool categories without changing the project.
- Command and focus interactions passed. Ctrl/Command+K, filtering, arrow/Enter execution, disabled deletion actions, Escape dismissal and opener focus recovery work. Existing dialogs open after the palette closes. Focus/restore, Escape and responsive resizing retain exact structure, selections, display settings and camera state. Inspector tabs retain keyboard navigation and 120-contact pagination.
- Scientific editing and real exports passed. The new suite verifies FCC 14-position image picking, polyhedron Undo/Redo, selected-line deletion/recovery, independent width editing and a transparent PNG. Existing regressions also passed: 13 full-cell selection groups on source, 11 connection-editing groups and 11 history/Quick-guide groups on the production build. Export pixel checks retain red/gray/blue connection thirds and the expected thickness scaling.
- Twelve static administrator-route checks passed in a separately configured, intercepted build. Root/admin paths, authentication guards, session revocation, preserved unsaved work, account callback routing, mobile dialog fit and static assets were verified with synthetic API responses. No real administrator credentials, messages, account changes or email requests were submitted.
- Production build and screenshot critique passed. Desktop, tablet, phone, command palette and touch layouts were reviewed. The Three.js application still produces the existing bundle-size advisory; the build succeeds. New UI features add no dependencies or external font/image requests.
Use tests/scientific-workbench.py for the workbench interaction/layout checks. Reports, images, configured test builds and private deployment helpers are excluded from publication. Browser checks reported no JavaScript, console or HTTP errors and no external account, feedback, payment or scientific mutations. Deployment is checked separately after publishing; simulated account/API tests do not verify real email delivery.
Previous version 1.9.1 validation
Checked on 6 October 2026. Visible calculated/manual/periodic connections can be selected in 3D or a paginated Connections inspector, deleted with buttons or Delete/Suppr, and resized with an independent 0.25-4.00 thickness multiplier. Undo/Redo and saved projects preserve edits and selected connections. Atom and connection selections remain separate; original atomic data and calculated contact records are preserved.
- 209 JavaScript tests passed. Sixteen connection cases verify absolute image identities, reversed/translated endpoints, manual/calculated duplicate deletion, same-site image connections, unchanged scientific data, all display modes, legacy/new project validation, safe shifts beyond one cell, transactional exclusion limits, repetition remapping, atom removal and supercell promotion. RGB thirds retain their colors and lengths while radius follows thickness. A history regression verifies that connection selection does not create edits or discard a redo branch.
- Eleven browser groups passed on both source and production build with normal camera motion. Actual clicks on all three colored sections select one connection, foreground atoms occlude lines correctly, multiple and empty-space selection work, and manual/calculated/periodic deletion supports Undo/Redo and project restoration. Keyboard typing/dialog guards, precise numeric input, width coalescing and 390/768-pixel layouts pass. The Connections list supports keyboard selection, filters, sidebar deletion and 120 distinct connections across 100/20-row pages; selection persists across pages and filters.
- Exports were measured from real PNG pixels. Both scene and publication captures retain equal red/gray/blue thirds and transparency. Doubling thickness changes the gray-section raster width from 4 to 10 pixels within antialiasing tolerance; total connection length stays 420 pixels, with three 140-pixel sections. Camera and scientific distances remain unchanged.
- GPU resource checks passed. Twenty-four highlight replacements/clears, sixteen thickness/color rebuilds and four figure/scene exports hold selected scenes at 15 buffers, 2 geometries and 3 programs. Removing selection returns to 14 buffers/2 programs; clearing the scene leaves 9 reusable sphere/cylinder buffers. Instance/material cleanup and scene reuse pass. Width and full-length highlight matrices remain correct, including Contacts only at thickness 4.00.
- Existing editing regressions passed. Thirteen full-cell selection browser groups passed on source, and eleven history/guide groups passed on the production build. FCC images, selection boxes, camera gestures, manual image connections, deletion recovery, keyboard guards and the Quick guide remain usable.
No browser JavaScript, console or HTTP errors and no external scientific/account/email/feedback/payment mutations occurred. Backend/service configuration and the research clone remain unchanged. Use tests/connection-editing.py for the interaction/export checks and tests/connection-resources.py for actual WebGL cleanup. Browser artifacts and private helpers remain excluded from publication; deployment is verified separately after publishing.
Previous version 1.9.0 validation
Checked on 5 October 2026. Empty left-clicks clear the selected atoms in Select, Rotate and Connect modes; unfinished mouse connections are canceled. Empty-space rotation drags, right-button panning and wheel zoom preserve selection. The original workspace now has configurable translucent coordination polyhedra and clearer, grouped camera/selection/export controls.
- 192 JavaScript tests passed. Seventeen new cases cover tetrahedral/octahedral hull topology, periodic and full-cell center images, skew-cell enumeration against brute force, inclusive cutoffs, species filters, nonperiodic cells, duplicate vertices, insufficient/coplanar neighborhoods, partial occupancy, safe resource limits, type colors and legacy/new project validation. Real perimeter edges omit triangulation diagonals.
- Ten source and nine compiled browser groups passed with normal camera damping. Actual empty clicks clear selection in all three mouse modes without affecting orbit, pan or zoom. Cutoff, central/surrounding species, colors, opacity and edge toggles work with Undo/Redo and JSON project restoration. Arbitrary numeric cutoffs are accepted; a typed 2.01-angstrom cutoff remains exact in the control and project download. Real WebGL checks verify four tetrahedral faces/six edges and eight octahedral faces/twelve edges, translated periodic vertices, eight closed-cell center hulls, unobstructed atom picking and transparent hull silhouettes. Transparent PNG downloads include polyhedra.
- Existing workflows remain verified. All thirteen full-cell selection browser groups passed on source, and all eleven history/guide groups passed on the compiled frontend. FCC boundary picking, measurements, unrestricted selection, modifier boxes, captured/canceled gestures, image connections, deletion recovery, manual editing and camera history remain correct.
- Responsive appearance was checked at 1440, 768, 390 and 320 pixels. No page overflow, square scenes, readable species/color controls, visible keyboard focus and 44-pixel camera/selection/header/history controls. Hidden Support controls remain hidden.
- Real GPU cleanup passed. Sixteen polyhedron display rebuilds and eight figure/scene captures keep equivalent states at 15 buffers with faces/edges, 14 with faces only or 12 without hulls. Clear disposes hull resources and retains eight reusable sphere/cylinder buffers; reuse returns to 15. Geometry/material/program counts remain bounded.
The production frontend builds successfully. Browser checks reported no JavaScript, console or HTTP errors and no external account, email, feedback, payment or scientific mutations. Test artifacts remain excluded from publication. Use tests/polyhedra-workspace.py for source/compiled interaction and geometry checks, and tests/polyhedra-resources.py for real WebGL resource checks. Backend code and service configuration are unchanged; the research clone remains separate. Public deployment is verified separately after publication.
Previous version 1.8.1 validation
Checked on 5 October 2026. Every stored atom and displayed full-cell boundary image has a distinct selection ID. Plain left-click toggles atoms; plain left-drag selects a box by default. The Select/Rotate toggle preserves rotation, wheel zoom and right-drag pan. Ctrl/Command adds and Alt subtracts; Select all and workspace Ctrl/Command+A have no three-atom cap. The Atoms table identifies stored sites and image shifts. Boxes select projected centers, including atoms occluded by foreground spheres.
All 175 JavaScript tests passed and the production frontend built successfully. Thirteen native browser groups passed on source and compiled builds with normal camera damping. They cover all 14 FCC positions, actual boundary ray picking and measurements, large selections, modifier selection, capture outside the canvas, wheel suppression during dragging, Escape/blur/resize/redraw cancellation, zoom/rotation, same-site image connections, save/load, image deletion with Undo/Redo, hidden-image selection cleanup and 390/768-pixel layouts. No JavaScript, console or HTTP errors or external requests were reported.
The existing 11 history/guide browser groups passed with normal motion. GPU checks held at 19 buffers through 16 display rebuilds and four exports, then 21 buffers through 20 highlight replacements; clearing selection releases its instance buffer. Boundary coordinates retain exact integer lattice translations, including near-edge atoms in a validated large skew cell. Manual connection endpoint shifts survive project serialization and atom-ID remapping; image connections are discarded when repetitions change their coordinate frame. Deleting a boundary image removes its stored site and equivalent images, with this behavior explained in the interface; Undo restores them.
Backend code and service configuration were unchanged. Checks used isolated local structures and did not send account, feedback, donation or scientific service mutations. The research clone remains separate.
Previous version 1.8.0 validation
Checked on 5 October 2026. The original workspace now has Undo/Redo and a Quick guide, plus explicit preset Replace all atoms/Add atoms controls and a staged individual-atom editor. The research edition remains separate.
All 143 JavaScript tests passed. Eleven native browser workflow groups passed on source and compiled builds with both reduced and default smooth motion: deletion, manual connections, independent/global sizes, history branches/coalescing, exact camera restoration, immediate orbit-to-deletion boundaries, typing/dialog guards, guide and mobile layouts. Camera inertia settles before edits or history snapshots, and restored views clear residual damping; floating-point noise does not create extra selection edits or erase a redo branch.
Eight new manual editor browser groups and all six existing preset regression groups passed on the compiled build. Tests cover all ten presets without silent row changes, complete FCC/BCC bases, reference assignments, all 118 elements, optional occupancy, duplicate/conflict rejection, comment preservation and 320/390/768-pixel layouts. New checks use synthetic local structures and intercepted community responses; no account, feedback or payment actions were performed. They reported no browser JavaScript, console or HTTP errors or external requests.
The owner’s four intervening GitHub HTML edits were audited and preserved, including the hidden Support button. Initialization now tolerates that missing button. Backend code and service configuration are unchanged.
Previous version 1.7.5 validation
Checked on 4 October 2026. The a, b and c reference axes now have thick solid cylinder shafts and broad cone arrowheads, alongside the existing very bold labels. Their geometry scales with the cell and export resolution.
The production build passed. Native browser geometry checks passed for cubic and skew triclinic cells: shafts start at the origin, meet their arrowheads without a gap and point along the correct lattice vectors. Axis colors, lengths and label positions are preserved. The axes remain separate from atom selection and atom-based legend spacing, and the Crystal axes control removes both shafts and arrowheads. Shared cone geometry is released exactly once during rebuilds. The existing GPU regression passed with 19 buffers throughout 16 display rebuilds and four figure exports; reusable sphere/cylinder geometry is preserved. No backend code or dependencies changed.
Actual production-build raster checks confirmed thick shafts and wider tapered heads for all three axes in both viewer themes, fitted figure PNGs and transparent current-scene PNGs. The very bold labels remain present, and turning Crystal axes off removes both the geometry and labels from the viewer and both exports. Export dimensions, live camera and display settings remain correct. No JavaScript, console or HTTP errors occurred, and no account, feedback or payment actions were performed.
Previous version 1.7.4 validation
Checked on 4 October 2026. The reference-axis labels a, b and c now use extra-heavy lettering and a matching outline in the viewer and exported images.
The production build passed. Native browser checks confirmed weight 900 and the outline in both viewer themes. Actual figure and transparent scene PNG exports draw all three labels with the heavy font and a resolution-scaled stroke; independent glyph measurements show 40–62% more ink than regular lettering. Both 472 × 472 exports preserve the camera and display settings. Turning Crystal axes off hides the viewer labels and omits their drawing from both exports. No browser JavaScript, console or HTTP errors occurred, and no backend mutations or account/feedback/payment actions were performed. This styling change adds no production test files or backend changes; the existing JavaScript suite remains part of deployment CI.
Previous version 1.7.3 validation
Checked on 4 October 2026. Selected stored atoms can be removed with Delete / Suppr or the toolbar action. Connections render as three equal sections: the first endpoint’s effective element color, neutral grey, and the second endpoint’s effective element color.
- 120 JavaScript tests passed, including ten transactional atom-editing cases and six actual Three.js geometry/color cases. Deletion preserves remaining coordinates, radii, occupancy, element colors and settings; removes attached automatic/manual connections; renumbers surviving IDs; updates formula/counts; and removes obsolete declared symmetry/composition metadata. Periodic image shifts and portable project validation remain correct. Deleting every atom is rejected.
- Browser deletion and export checks passed on source and production builds. Table and real canvas selection, keyboard/button deletion, typing/select/contenteditable/dialog safeguards, busy-state rejection, project reload, surviving bond remapping and camera preservation pass. Editing a repeated instance makes the remaining displayed supercell the new base cell; rebuilding expands the edited cell rather than restoring removed sites. At 390 × 844, the deletion control fits, has a 44-pixel touch target, and works without horizontal overflow.
- Exported pixels verified. A red/grey/blue connection has matching ordered section lengths of 146/146/146 pixels in the fitted figure and 140/140/140 pixels in the transparent scene. Both captures preserve the camera. Geometry tests also cover reversed and shifted periodic endpoints, same-element connections, customized element colors and the 20,000-connection limit.
- Real scientific rebuild checks passed. The existing Python implementation accepts edited browser projects and preserves remaining species, occupancy and positions: three atoms rebuild to three/six at 1/2 repetitions, and the edited seven-atom supercell rebuilds to seven/fourteen. No backend source, service settings or dependencies changed.
- Existing mouse/export regressions passed. Real atom dragging, two-click connections, cancelled gestures, ordinary orbit/pan, independent element sizing, legacy project sizes and an actual 4,921-pixel transparent PNG at 5,000 DPI remain correct. Physical legend spacing, PNG resolution metadata and automatic size fitting pass. The fixture mocks only optional community readiness; unexpected scientific calls and errors remain checked.
- GPU cleanup verified. Buffer counts remain at 20 across 16 rebuilds and four figure exports, including the new per-instance bond colors. Shared geometry remains reusable, and obsolete instance resources are released. The compiled frontend builds successfully with no browser JavaScript/console errors or failed local assets in the feature checks.
Run tests/atom-editing.py --url <local frontend> with native Python Playwright for the synthetic browser checks. It blocks external requests and intercepts local scientific/community responses; no accounts, feedback or payments are submitted. Browser artifacts and private deployment helpers remain excluded from publication. This release updates the frontend only; deployment is verified separately after publishing.
Previous version 1.7.2 validation
Checked on 4 October 2026. This release fixes reproduced failures in service checks, account callbacks, administrator loading/pagination, project imports, boundary-atom calculation and viewer resource cleanup.
- 157 Python tests passed. Four new scientific cases cover skew-cell boundary roundoff, stable repeated rebuilds and supercells, and preservation of genuinely near-boundary or negative coordinates. Existing scientific, API, administrator and storage regressions pass.
- 104 JavaScript tests passed. Project color settings must be a mapping so edits survive serialization; arrays and primitive values are rejected. Existing geometry, presets, display sizes, connections, exports and accounts pass.
- 12 focused browser checks passed on the production build. Service tests ignore results after closing/editing the dialog and never cancel scientific calculations. Invalid project loads restore the last applied cutoff/repetitions. Keyboard focus, mobile layouts, disabled storage, WebGL fallback, transparent scenes and recovery after image-encoding failure remain usable.
- 12 administrator browser groups passed on the production build, and nine account groups passed with the real SDK and intercepted provider responses. Initial inbox expiry or sign-out during loading unlocks sign-in immediately; delayed replies cannot replace a newer session. Failed inbox page/filter requests keep the last confirmed rows and controls. Failed account links show an error and consume obsolete callback markers. No real accounts, emails, feedback or administrator credentials are submitted by these tests.
- 12 direct admin-route checks passed on plain static hosting. Both URL forms, refresh, protected login, account callbacks, root/modified footer links, mobile focus and assets remain correct.
- Real GPU cleanup verified. Live buffer counts stay at 19 through 16 size/color changes and four figure exports. Removed instance matrix/color buffers are released; shared sphere, cylinder and axis-arrow geometry remains reusable. Scene capture restoration also passes.
- Real scientific API integration passed. A synthetic triclinic atom at fractional
[0, 0.2, 0.3] stays on its original face through contact calculation, supercell expansion and unit/supercell project reloads. Production viewer/import/project/PNG/PDF checks, six full-cell groups and six preset/reference-site groups pass. High-resolution export and physical legend-gap checks remain valid.
Use tests/bug-regressions.py --url <frontend> for focused browser checks, tests/viewer-resources.py --url <source-frontend> for actual GPU-buffer cleanup, and tests/skew-boundary.py --url <frontend> --api <scientific-api> for the synthetic stateless calculation regression. Browser artifacts remain excluded from publication. This release requires both frontend and Python API deployment. Private feedback storage, delivered account emails and donation destinations retain their configuration status in ACCOUNTS_AND_SUPPORT.md and ADMIN_AND_FEEDBACK.md.
Previous version 1.7.1 validation
Checked on 4 October 2026. The direct /admin address now opens the existing server-verified password prompt. The production build contains a real admin/index.html entry for static hosting.
- 103 JavaScript tests passed. Existing geometry, presets, projects, exports and account/configuration checks remain valid.
- 12 static admin-route browser checks passed twice: once under
/crystal-studio-web/ with the production repository base and once under /nested-tool/ with the portable relative base. A plain static server without an application fallback verifies both admin URL forms, query/hash retention, refresh, asset loading, password protection, logout and login after reload, root navigation, ordinary/new-tab footer links, preserved unsaved crystal work, account callback suppression and reset destinations, skip-link focus and 320/390/768 px dialogs. All API requests are intercepted with independent dummy credentials; no live data are submitted.
- Nine existing administration browser scenarios passed again against the source frontend, covering private-session handling, moderation, drafts, API URL trust, delayed login cancellation and mobile keyboard access.
- Source entry checks passed: the workspace remains the default entry, both admin URL forms open the prompt after navigation and refresh, actual WebGL loads, assets return successfully and navigation sends no credentials or write requests.
- Production and portable builds passed. The Python API and dependencies are unchanged. Durable feedback storage and announcement persistence still require the private Supabase setup described in ADMIN_AND_FEEDBACK.md.
Previous version 1.7 validation
Checked on 4 October 2026. This release adds optional private feedback and separate administrator access for moderation and website announcements. Scientific project data and existing account roles are unchanged.
- 153 Python tests passed: all 65 scientific/API regressions, 58 administrator/security cases and 30 storage-adapter cases. Checks cover strict bounded input, honeypot, private inbox access, password verification, expiry/logout, bounded rates and simultaneous password checks, no-store responses, request limits, restricted CORS, secret/public key rejection, correct provider mappings and sanitized failures. Storage tests use injected fake HTTP responses; no live submissions or emails are sent.
- 103 JavaScript tests passed: all geometry, presets, display sizes, projects, exports and account/configuration regressions remain valid.
- Nine administration browser scenarios passed on source and production build: anonymous feedback, saved-draft retry, moderation/filtering/pagination, confirmation before deletion, announcement/settings, session expiry/signout, plain-text rendering, trust in the baked API URL and delayed-login cancellation. Feedback and admin dialogs fit 320/390/768 px with keyboard focus inside. These requests are fully intercepted and do not demonstrate a live database connection.
- Existing viewer regressions passed: full-cell FCC/BCC/SC display, basis preservation, projects, transparent/fitted PNGs, geometry/radii and renderer restoration; all preset/reference-site cases and mobile layouts. Production repository-path assets, actual WebGL and lazy PDF download pass in Chrome.
- Credentials and storage scope: the requested admin password is configured only as a private scrypt hash on the existing Render service. Private Supabase table provisioning and a backend secret are still required before feedback collection and announcement persistence can become active. Unavailable storage is shown explicitly and submissions are rejected rather than acknowledged without saving. Admin login is independent of storage readiness. No plaintext password or deployed hash belongs in published source/builds.
See ADMIN_AND_FEEDBACK.md for the migration and private server settings. Deployment and actual administrator login are verified separately after publishing. Account email delivery and optional payments retain their earlier setup status.
Previous version 1.6 validation
Checked on 4 October 2026. Manual crystal definitions now show complete conventional-cell boundaries by default. FCC has 14 visible sphere positions, BCC 9 and Simple cubic 8. Scientific structure data retain their 4/2/1 periodic representatives; the Python API is unchanged.
- 103 JavaScript tests passed: eleven new geometry tests check exact FCC/BCC/SC positions, 2 x 2 x 2 supercell boundaries, skew lattice translations, pre-existing faces/corners, mixed species and occupancies, outside/interior positions, tolerance and nonperiodic inputs. Two new project checks verify boolean persistence, legacy compatibility and rejection of malformed display flags. All prior checks pass.
- Actual full-cell browser checks passed: manual definitions show 4 stored/14 displayed, 2/9 and 1/8 positions. The Full unit cell toggle, JSON save/reload and older projects preserve the scientific basis. Copy current returns only canonical rows; staged preset and checkbox edits do not change the scene when canceled. Contacts-only labels describe full-cell positions without claiming visible spheres.
- Real rendering and exports checked: boundary copies are solid instanced spheres with the same element color and radius multiplier as their sources. Periodic contact ghosts do not duplicate a filled boundary. Copies block click-through and do not impersonate distinct connection endpoints. Transparent scene and fitted publication captures include copies and restore the camera, renderer and display settings. A synthetic FCC scene contains 51,356 opaque pixels versus 14,941 for its stored basis at the same framing.
- Regression and responsive checks passed: all preset/reference-site cases and independent transparent scene framing/restoration pass. Full-cell controls fit 320/390 px screens; a separate visual review also checks 768/1440 px layouts and keyboard Space toggling with no horizontal overflow or page errors. Desktop/mobile cell views and an exported figure were inspected.
- Production build checked: the GitHub Pages repository-path build succeeds, and real WebGL/assets/lazy PDF exports load in Chrome. Vite retains its existing large Three.js bundle warning.
Run python tests/full-cell.py --url http://127.0.0.1:5180 with Python Playwright and installed Chrome for UI and independent source-module renderer checks. Add --ui-only for a built or deployed frontend. Screenshots, exported PNGs and reports remain excluded from publication. Deployment is verified separately after publishing. Optional email-delivery and payment setup status remains recorded below and in ACCOUNTS_AND_SUPPORT.md.
Previous version 1.5 validation
Checked on 3 October 2026. This release makes email Login/Create account visible in the header and adds a validated community-settings deployment helper. The Python API is unchanged.
- 90 JavaScript tests passed: 15 new tests cover complete and partial public configuration, secret/service-role/placeholder/test-link rejection, preserved omitted settings, fixed-repository restrictions, dry runs without CLI calls, stdin-only variable writes, no value logging, workflow dispatch after successful writes and safe failure handling. Existing scientific/account tests pass.
- Real SDK/browser auth checks passed with mock HTTP: explicit Login opens signin; Create account opens email signup directly; successful sign-in displays My account and hides signup; logout restores both entry points. Existing signup confirmation, credential errors, persistent sessions and password reset pass. Recovery survives reload and reopening from the header. A callback lacking its local PKCE verifier cannot select password recovery for an unrelated existing session; it shows useful feedback and clears stale callback intent.
- Before connecting Supabase, provider-unconfigured production checks passed: login/signup buttons show correctly titled notices without collecting credentials; absent checkout destinations remain hidden. Crystal tools and transparent exports work without accounts or support payments.
- Responsive/regression checks passed: header controls meet44px touch targets with no horizontal overflow at320,390,768,1024 and1440px. Production repository-path assets, actual WebGL, PDF exports and all preset/reference-site browser cases pass.
- Before connecting Supabase, activation helper tested without live configuration: –help runs safely and importing the script does not execute it. The supplied external example configuration is rejected and changes nothing. Runner-injected tests verify intended public-variable writes/workflow dispatch; no fake settings or payment recipients are applied to the real repository.
Supabase connection deployment
On 3 October 2026, the owner’s actual public Supabase URL/key were validated, applied as SUPABASE_URL and SUPABASE_PUBLISHABLE_KEY Actions variables, and deployed successfully through workflow 37149654825, using application commit 48603ba873cfe841d6823766d8ba43bee5d1af81. PYTHON_API_URL was preserved. The workflow reran all 90 JavaScript tests and the production build successfully.
- Real provider checks passed: Auth health/settings returned 200 with the supplied public key. Email/password authentication and new signups are enabled, and email confirmation is required. An actual browser GET confirmed production CORS access.
- Live account-form checks passed: Login, direct Create account with password confirmation, and password-reset inputs are enabled. Forms fit 320, 390, 768, 1024 and 1440 px without overflow or uncaught script errors. Crystal tools remain available.
- Account/payment scope: No live credentials were submitted, no test account was created, and no email or payment was sent. Production Auth redirects, SMTP and delivered signup/reset emails remain unverified. Donation links are absent and payments remain inactive. Prior mock SDK checks do not demonstrate live email delivery or payments.
Activation instructions are in ACCOUNTS_AND_SUPPORT.md. The existing tests/community.py default/–public-only checks require an unconfigured app; its –auth-url uses only the dummy provider host, so it must not target production.
Previous version 1.4 validation
Checked on 3 October 2026. This release adds seven constrained cell presets and FCC/BCC/Simple cubic reference templates to the manual editor. The Python API and optional account integration are unchanged.
- 75 JavaScript tests passed: twelve new tests cover all preset metrics, free-parameter preservation, malformed inputs, impossible rhombohedral cells, periodic reference-site uniqueness, FCC/BCC/SC basis counts, independently checked skew geometry/volume, all 118 element choices and occupancy validation. All previous checks pass.
- Actual manual-editor browser checks passed: all ten choices are available, changing the preset keeps atom text, dependent parameters track edits, and impossible trigonal angles are rejected without losing the draft. FCC default sites can carry independent Na/Cl/O/Og assignments and partial occupancy, which persist in saved projects.
- Transactional reference-site application checked: identical sites are skipped, conflicting species or occupancies preserve all existing text, boundary1 matches origin0, empty/comment-only drafts work, and explicit replacement produces the selected rows. Unapplied invalid reference-picker drafts do not block creation from valid committed atom rows.
- Periodic bases and geometry checked: FCC/BCC/Simple cubic templates contain4/2/1 unique periodic representatives. Saved hexagonal vectors independently match a=4, c=6 and gamma120 degrees. Copy current unit cell restores exact metrics and unlocks Custom mode.
- Responsive and regression checks passed: the manual editor/reference picker has no horizontal overflow at320,390 and768 pixels. Existing real WebGL, local Python import/contact/supercell, manual-entry, project, PNG/PDF, high-resolution transparency and physical legend-gap checks pass. Optional unconfigured accounts/payments continue to leave all tools available.
tests/crystal-presets.py uses native Python Playwright and installed Chrome; use --url for production/deployed checks. Browser artifacts remain excluded from publication. Email registration still requires the owner’s Supabase connection/public project configuration and email delivery setup. No live accounts or donation recipients have been fabricated.
Previous version 1.3 validation
Checked on 3 October 2026. This release adds a current-view transparent scene export and optional managed-account/hosted-payment integrations. The Python API is unchanged.
- 63 JavaScript tests passed: all earlier geometry, manual input, sizing and figure checks, plus 17 account-service checks and two optional payment-link checks. Provider configuration rejects secret/service-role keys and unsafe callback destinations. Missing configuration makes no account SDK requests.
- Current scene PNG checked: a real 394 x 394 PNG at 400 DPI contains both visible crystal pixels and alpha-zero empty areas. The camera keeps its zoom and pan (within floating-point tolerance), and display settings are unchanged. Current-scene mode hides figure background/legend controls and remains distinct from fitted publication figures.
- Independent WebGL framing checked: after zooming and panning a synthetic scene, a 600 px square and the centered 600 px view inside a 1,000 x 600 PNG have identical alpha pixels. All 240,000 margin pixels are transparent. Pending connection previews are excluded. Camera, renderer, selection and settings restore exactly after both successful export and a forced PNG-encoding failure.
- Real account SDK with simulated HTTP checked: signup password confirmation and email-verification pending state; invalid credentials; successful sign-in; session persistence across reload; local logout; a neutral password-reset response; one-use PKCE recovery; reloading before setting a new password; successful password update. Password fields are cleared after submitting. These checks do not verify production email delivery or a live Supabase project.
- Optional support checked: separate monthly and one-time hosted checkout links use HTTPS and open with noopener/noreferrer. Unconfigured links stay absent. Registration and contributions never block structure editing or exports. No real payment was made.
- Responsive and production checks passed: account/support dialogs fit 390 and 768 px layouts; existing WebGL/import/contact/project/PNG/PDF checks pass at four viewport sizes. The production build works under the GitHub Pages repository path with dynamically loaded PDF support and no script errors.
Run tests/community.py with Python Playwright and installed Chrome. Full account checks use the isolated mock-provider Vite server described in ACCOUNTS_AND_SUPPORT.md; --public-only --url <site> checks transparent downloads and unconfigured optional services. The production site still requires the owner’s public Supabase configuration, public-user SMTP delivery setup and real recipient-owned payment links to activate registration and payments. No placeholder recipient or fake account system is published.
Previous version 1.2 validation
Checked on 3 October 2026. This release adds direct mouse connections, independent element sizes and genuine 5,000 DPI browser exports. The Python API is unchanged.
- 44 JavaScript tests passed: the previous geometry/connection/project checks plus element radius scaling, independent factors for all 118 element symbols, selection and periodic ghost sizes, legacy project defaults, invalid factors, 5,000 DPI bounds and PNG physical-resolution metadata.
- Actual mouse interaction passed: dragging atom-to-atom and clicking two atoms produce the intended direct manual links. Duplicate/reversed links and self-links are prevented. Escape, empty clicks/drops and pointer cancellation discard unfinished connections. Normal camera orbit remains available and cancellation restores it.
- Actual sphere pixels checked: hydrogen grows while oxygen stays unchanged, oxygen can then shrink independently, and the global multiplier composes with both. The controls, stored settings and rendered radii survive project saving and loading. Legacy projects without element scales use 1.00. Numeric input preserves values with more than two decimals rather than displaying a rounded value that differs from the stored setting.
- 5,000 DPI image verified: a transparent 2.5 cm square PNG is 4,921 x 4,921 pixels. Its single pHYs chunk has a valid CRC and 196,850 pixels/metre in both directions, which represents 5,000 DPI within integer metadata rounding. The final alpha edges preserve the 1 cm legend spacing within one output pixel, including compositing/antialiasing rounding. Clear corners, content margins, original camera and display settings are checked.
- Size fitting checked: 5,001 DPI and figures exceeding the device/8,192-side/32-million-pixel bounds are rejected. Fit size to device reduces the physical dimensions while keeping 5,000 DPI selected. On the tested device, an 8 cm square request fits to 2.8 cm square.
- Regression and build checks passed: the prior browser import, manual entry, connection persistence, responsive square scene, transparency, PNG/PDF, calculation and supercell checks all pass. Sixteen additional real WebGL captures cover four representations and camera directions with per-element scales, cell edges, axes, periodic images and selection outlines. The production build and GitHub Pages repository path work.
The native Playwright test tests/mouse-and-sizing.py creates synthetic input locally and requires no Python service. It accepts --url for a built or deployed frontend. Browser downloads/screenshots/reports are excluded from publishing. The preceding Python validation remains recorded below; no backend source or dependency changed in version 1.2.
Previous version 1.1 validation
Checked on 3 October 2026 with Python 3.14.7, Node.js 24.21.0 and installed Google Chrome on Windows. Browser checks use the real WebGL viewer and the real local FastAPI service.
- 65 Python tests passed: CIF/VESTA symmetry, skew cells, occupancies, input bounds, periodic image shifts, supercell rebuilding, API errors, concurrency, request limits, CORS, manually defined structures and safe element-data fallbacks through element 118. There are 49 existing upstream dependency deprecation warnings.
- 35 JavaScript tests passed: manual triclinic geometry and text parsing, all 118 element symbols, malformed and coincident sites, direct manual connections, contact deduplication, supercell endpoint remapping, legacy and current project validation, physical export dimensions, PNG resolution metadata, raster alignment and bounded alpha scans.
- Existing browser integration passed: actual WebGL; layouts at 320, 375, 768 and 1,440 pixels; keyboard navigation; atom selection and measurements; periodic contacts; safe project save/load; CIF import; retention after invalid input; contact-cutoff rebuilding; supercell calculation; and cancellation of older work.
- New browser integration passed: a square 3D canvas at all four screen sizes; offline manual cell creation with skew lattice vectors and occupancy; duplicate-site error retention; selecting and connecting two atoms; project persistence of connections; rejected null connections without losing the current structure; real Python contact calculations; and retained manual connections when expanding a supercell.
- Export pixels checked independently: transparent 8 cm square PNGs at 300 and 600 DPI have the requested horizontal legend-to-atom separation after orbit and zoom. The spacing is round(DPI / 2.54) completely empty pixel columns between visible legend ink and the nearest rendered atom edge. One centimetre is quantized to the nearest pixel, with at most half a pixel of physical rounding error. Cell edges and axes can occupy part of this gap.
- Higher resolution checked: a 5 cm square PNG at 2,400 DPI exports at 4,724 x 4,724 pixels, exceeding the previous 4,096-pixel side limit. PNG physical-resolution metadata is checked. The default is now 8 x 8 cm at 1,200 DPI (3,780 x 3,780 pixels). Limits are 8,192 pixels per side, 32 million total pixels, and the device’s actual WebGL limits.
- Background and PDF checked: transparent PNG corners and empty image areas have alpha zero; the white-background option produces an entirely opaque image. An 8 cm square PDF has the expected 226.772-point square page and retains the PNG alpha mask. Legend-off export also works. Exports restore the interactive camera, viewer dimensions and background exactly.
- Additional WebGL export cases passed: 16 captures cover all four representations and four camera directions, including unit-cell edges, axis labels, periodic images and selected-atom outlines. Each keeps the legend clear of the scene and maintains the requested spacing. Bonds-only views use the visible geometry as their spacing reference. Legend-off and rejected-export camera restoration also pass.
- Current design checked visually: actual transparent exported PNG, desktop layout, mobile layout and the manual-definition dialog were inspected. The legend uses shaded sphere artwork and simple element symbols in one fixed upper-left vertical column. Larger element sets shrink uniformly to stay inside the figure.
- Delayed project-read race checked: a newer manual structure or newer project survives an older file read; a stale read error cannot replace the latest status. All four deferred-read cases pass.
- Production build and path checked: the built app, hashed assets, WebGL and dynamically loaded PDF export work under
/crystal-studio-web/, matching GitHub Pages repository hosting. Vite reports its existing large Three.js bundle warning; the build succeeds.
No uncaught browser script errors occurred. The bundled structures and test inputs are synthetic demonstrations and regression cases. Manual entry requires the full unit-cell contents; it does not infer symmetry operations. Automatic contacts use covalent-radius cutoffs and should be reviewed for the structure’s chemistry. Manual connections join the exact displayed positions selected by the user; they are retained where endpoints remain in a resized supercell, without automatically copying them into new tiles.
The public project uses GitHub Pages, the GitHub source repository, and a Python API on Render. The Render service is on the Free plan in Frankfurt; its first request after inactivity can take longer while it starts. Free hosting was verified for the preceding live release. Version 1.1 local and production-path checks are recorded above; deployment is verified separately after publishing.
Reproduce the checks with the commands in README.md. tests/improvements.py accepts --url and --api to check a deployed site. For the GitHub Pages path, build with VITE_BASE_PATH=/crystal-studio-web/, preview on port 5175, then run node tests/pages.mjs; PAGES_URL can override that preview address. The standard browser regression accepts CRYSTAL_URL and CRYSTAL_API_URL.
After building frontend/dist, run python scripts/package.py from this folder to create a verified source archive. It includes the production frontend and excludes dependency folders, environments, local uploads and test artifacts.