Conversation
Replace the previous e2e test system with a new architecture using two isolated environments (setup + dashboard), PostgreSQL testcontainers with JSON snapshot/restore, and advisory lock-based mutation isolation. Key changes: - New helpers: TestDatabase, AppServer, TestDataBuilder, seed, context, logger, dialog, table, row-actions, form - DatabaseIsolation fixture with pg_advisory_lock for cross-file serialization of mutation tests - New specs: onboarding, login, overview, protocols, participants, interviews, settings (77 tests total) - Visual snapshots with animation disabling and dynamic content masking - Remove old test infrastructure (suites/, utils/, configs, protocols) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
fixes bug where interview data was lost on hard refresh
Extract hit detection from createDndStore into an injectable HitDetector function. Production uses domHitDetector (elementsFromPoint), tests use boundsHitDetector (geometric bounds). Fixes test failures caused by jsdom lacking elementsFromPoint.
# Conflicts: # .storybook/main.ts # lib/dnd/types.ts # lib/dnd/useDropTarget.ts # lib/form/components/fields/Boolean.js # lib/interviewer/Interfaces/FamilyTreeCensus/FamilyTreeProvider.tsx # lib/interviewer/Interfaces/FamilyTreeCensus/components/CensusForm.tsx # lib/interviewer/Interfaces/FamilyTreeCensus/components/FamilyTreeNode.tsx # lib/interviewer/Interfaces/FamilyTreeCensus/components/FamilyTreeNodeForm.tsx # lib/interviewer/Interfaces/FamilyTreeCensus/components/FamilyTreeShells.tsx # lib/interviewer/Interfaces/NameGenerator/NameGenerator.tsx # lib/interviewer/Interfaces/NameGenerator/components/NodePanels.tsx # lib/interviewer/Interfaces/NameGeneratorRoster/NameGeneratorRoster.tsx # lib/interviewer/components/MultiNodeBucket.tsx # lib/interviewer/components/NodeList.tsx # lib/interviewer/containers/OrdinalBins.js # lib/interviewer/styles/containers/_name-generator-interface.scss # package.json # pnpm-lock.yaml
Port the kinship2 pedigree layout algorithm to TypeScript as a standalone module at lib/pedigree-layout/. Includes depth assignment, alignment optimization via quadratic programming, connector geometry computation, and comprehensive test coverage.
Delete unused Canvas components (LayoutNode, NodeLayout, NodeLayoutContainer). Remove unused exports and functions from e2e helpers. Narrow storybook theme icon type. Add missing cookie mock properties in route test. Remove exported PairAccumulator types only used internally.
Use anonymous Docker volumes for node_modules and .next so the container gets Linux-native binaries instead of sharing the macOS host's. Always copy static/public files into the standalone directory even when the build is skipped, so the app serves CSS and JS properly. Update Playwright Docker image to v1.58.0 to match the lockfile.
Swap the BFS-based layoutFamilyTree engine and manual EdgeRenderer SVG geometry for the kinship2-ported alignPedigree + computeConnectors pipeline. A new pedigreeAdapter module bridges the store's Map-based data model and the library's array-based PedigreeInput format.
Convert solveQP from CJS require to ESM import for Vite/browser compatibility. Add quadprog type declaration. Gracefully fall back to unoptimized positions when the QP solver fails with inconsistent constraints. Add Storybook stories for visual evaluation of pedigree layouts.
…overage The onboard route handler always redirected to the generic /onboard/error page regardless of error type. Now checks for 'no-anonymous-recruitment' errorType and redirects to the dedicated page instead. Adds unit tests for the new redirect path (GET and POST) and a full e2e spec covering onboard integration scenarios including participant reuse, anonymous recruitment toggle, and limitInterviews enforcement.
The R code uses nid > 0 to identify valid entries (1-based indices). The TS port uses 0-based indices, so person 0 has nid = 0, which is indistinguishable from the empty sentinel. This caused missing QP variable assignments and contradictory constraints (e.g. pos[k] <= -1 vs pos[k] >= 0), triggering "constraints are inconsistent" errors. Fix by using position-based checks (j < n[lev]) instead of value-based checks (nid > 0), since entries are always packed left-to-right.
…e story Fix the same nid > 0 bug from alignped4 in two more locations: - connectors.ts: person 0 was excluded from duplicate arc detection - scaling.ts: person 0 was excluded from x-range computation Also fix twin detection sentinel in alignPedigree.ts (use -1 instead of 0 so person index 0 is distinguishable from "no parent connection"). Add ComplexMultiGenerational storybook story with 5 generations, ex-partners at two levels, half-siblings, and cousins.
The require() call in autohint.ts failed because Vite/Node.js cannot resolve ~/path aliases via require(). This caused autohint to crash silently, falling back to sequential ordering without spouse hints, which prevented proper sibling ordering at merge boundaries and resulted in duplicate node appearances (e.g. father shown twice). Replaced the require() lazy import with a layoutFn callback parameter that alignPedigree passes when calling autohint, breaking the circular dependency cleanly.
… story FamilyTreeShells hydration was reading sex only from stage metadata, defaulting to 'female' when metadata was missing. This caused all parent edges to go to motherIndex, breaking the layout with "only one parent" warnings. Now reads sex from node.attributes[nodeSexVariable] first (the primary source), falling back to metadata then 'female'. This matches how FamilyTreeProvider initializes the store. Added SimulatedHydration story to test the Redux hydration code path.
The pedigree layout uses 1-based levels (from R kinship2), so generation 0 is always empty and actual data starts at generation 1. This caused 200px top spacing (1 * rowHeight). Added y-normalization to pedigreeLayoutToPositions and buildConnectorData to shift all y coordinates so the topmost generation starts at y=0.
Twin set IDs were set to Math.min(id1, id2), so if person 0 was a twin, the set ID would be 0. But the sentinel for "not in a twin set" was also 0, causing person 0's twin set to be skipped. Changed sentinel from 0 to -1, and updated checks from "> 0" to ">= 0".
Resolved conflicts: - Fixed import paths (removed 'containers/' from path) - Replaced layoutFamilyTree.ts with new pedigree-layout library - Updated EdgeRenderer.tsx, store.ts, pedigreeAdapter.ts imports - Fixed PedigreeLayout.stories.tsx Node import
Resolved conflicts: - Added getEgoSexVariable and getNetworkEgo imports to FamilyTreeShells.tsx - Fixed import paths (removed 'containers/')
adds ability to create ex partners and select which existing network member the person is an ex partner of, name both parents if there are multiple possible parents, remove automatic creation of ex partners, add tests to cover this behavior
includes added tests
|
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
|
…_yarn/next/jsdom-28.1.0 chore(deps-dev): Bump jsdom from 28.0.0 to 28.1.0
- Convex hulls now visually encompass nodes using stroke-based technique with paint-order and non-scaling-stroke instead of centroid expansion - Legend uses controlled accordion where collapsing a section disables its visual feature (edges, hulls, highlighting) - Annotation lines fade gradually on pen lift using direct opacity animation instead of broken AnimatePresence exit animations
- New DrawingControls component with pen toggle (default off), freeze, and reset buttons, positioned bottom-left - Pen button enables/disables the annotation overlay - All three buttons always visible when freeDraw is enabled - Removed drawing controls from PresetSwitcher (now legend-only) - Made onChangeActiveAnnotations optional in Annotations
Use controlled open state to filter out outside-press dismiss events.
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
|
1 similar comment
|
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
|
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
|
fix asset query in prunePreviewProtocols to use AND [some, every] pattern, preventing orphaned assets from being matched. add asset cleanup in abort-preview
🎭 Playwright E2E Test Report❌ Tests failed. View the full report here: |
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Significant release!
Waiting on: