Mock Profile Fixtures
Status
Current recommendation for deterministic profile demos, tests, and showcase data. This extends the reviewed seed-import model without authorizing real confidential data in git.
Locked Decisions
- Do not commit real friend, partner, roster, contact, or profile data to git.
- Fake fixtures must stay obviously fake and use
.invalidURLs or checked-in local fixture assets. - Consented real production profiles are operational data, not repository fixtures.
- Public profile, search, API, MCP, export, and discovery queries should exclude mock records unless a caller intentionally requests the mock fixture surface.
Current Recommendation
Add isMock to root public entities that can be seeded for deterministic
fixtures:
profileseventsworlds- future root entities that can appear independently in public search or public pages
Default isMock to false. Treat missing values as false during migrations so
existing production data remains visible. Shared query helpers should filter
isMock !== true by default, and fixture routes or test helpers should opt into
mock data through an explicit option instead of ad hoc query rewrites.
For public/demo substitution, prefer an explicit request shape such as
?data=mock on the profile list/discovery surface. That mode should return
mock results instead of ordinary production results, not silently blend the two,
unless a future demo surface deliberately asks for a mixed result set.
Consented Real Showcase Profiles
Do not add a broad appearsInMockResults field to every entity. Use a narrow
allowlist table for the rare case where a real, consented profile should appear
in a mock/demo surface:
entityType: initiallyprofileentityIdsurface: for exampledj_list_demoenabledreasonor internal notecreatedBycreatedAt- optional
expiresAt
This keeps ordinary profile records clean, avoids polluting every table with a showcase flag, and lets operators revoke demo inclusion without editing the profile itself. The allowlist must never imply that the profile is fake; it only means the real profile may appear on an explicitly requested mock/demo surface.
Query Rules
- Default public reads: exclude
isMock === true. - Explicit mock reads: include only
isMock === trueplus explicitly allowlisted real records for that surface. - Tests: seed fake records with
isMock === trueand assert default queries do not return them. - Production manual profile operations: keep real consented data as
isMock === false; use the showcase allowlist only when the real profile is approved for a demo surface.
Group Representation
Current recommendation:
- Keep
personandcommunityas the two root profile types. - Model artist groups, collectives, labels, venues, and clubs as
communityprofiles with flexible subtype/category tags. - Add relationship edges rather than overloading person profiles when a person represents or performs as part of a group.
Candidate direction:
- Add a
profileRepresentationsor broaderprofileRelationshipstable withfromProfileId,toProfileId,relationshipType,label, visibility, source, claim/review state, and timestamps. - Use relationship types such as
member_of,represents,resident_at, andbooking_contact_foronly after real workflows justify them. - Let public pages render selected relationships as concise links, not as explanatory trust copy.
Interview later:
- Whether artist duos should usually be community profiles, person aliases, or both.
- Whether an individual owner account should be able to claim both a person profile and an artist-group profile in one flow.
- Whether demo surfaces need mixed fake-plus-real results, or whether strict substitution is enough.
Suggested Slices
- Add
isMockto root public entities and centralize default filtering. - Add a mock/demo profile query mode for the DJ list using existing fake fixtures.
- Add a narrow real-profile demo allowlist table and operator mutation.
- Add tests proving default public reads exclude mock records.
- Add profile relationship planning or schema once group representation is needed by a real profile workflow.