@ttt-productions/ttt-core 0.79.91 → 0.79.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/constants/company-mascots.d.ts +27 -2
  2. package/dist/constants/company-mascots.d.ts.map +1 -1
  3. package/dist/constants/company-mascots.js +66 -6
  4. package/dist/constants/company-mascots.js.map +1 -1
  5. package/dist/doc-schemas/commissions.d.ts +6 -0
  6. package/dist/doc-schemas/commissions.d.ts.map +1 -1
  7. package/dist/doc-schemas/commissions.js +5 -3
  8. package/dist/doc-schemas/commissions.js.map +1 -1
  9. package/dist/doc-schemas/media-assets.d.ts +107 -6
  10. package/dist/doc-schemas/media-assets.d.ts.map +1 -1
  11. package/dist/doc-schemas/media-assets.js +37 -19
  12. package/dist/doc-schemas/media-assets.js.map +1 -1
  13. package/dist/doc-schemas/notification-ledger.d.ts +99 -5
  14. package/dist/doc-schemas/notification-ledger.d.ts.map +1 -1
  15. package/dist/doc-schemas/notification-ledger.js +94 -16
  16. package/dist/doc-schemas/notification-ledger.js.map +1 -1
  17. package/dist/doc-schemas/payments.d.ts +4 -0
  18. package/dist/doc-schemas/payments.d.ts.map +1 -1
  19. package/dist/doc-schemas/payments.js +7 -3
  20. package/dist/doc-schemas/payments.js.map +1 -1
  21. package/dist/doc-schemas/registry.d.ts +29 -1
  22. package/dist/doc-schemas/registry.d.ts.map +1 -1
  23. package/dist/doc-schemas/safety/foundation.d.ts +44 -20
  24. package/dist/doc-schemas/safety/foundation.d.ts.map +1 -1
  25. package/dist/doc-schemas/safety/foundation.js +96 -52
  26. package/dist/doc-schemas/safety/foundation.js.map +1 -1
  27. package/dist/media/index.d.ts +1 -0
  28. package/dist/media/index.d.ts.map +1 -1
  29. package/dist/media/index.js +1 -0
  30. package/dist/media/index.js.map +1 -1
  31. package/dist/media/publication/index.d.ts +2 -0
  32. package/dist/media/publication/index.d.ts.map +1 -0
  33. package/dist/media/publication/index.js +2 -0
  34. package/dist/media/publication/index.js.map +1 -0
  35. package/dist/media/publication/publication-args.d.ts +539 -0
  36. package/dist/media/publication/publication-args.d.ts.map +1 -0
  37. package/dist/media/publication/publication-args.js +182 -0
  38. package/dist/media/publication/publication-args.js.map +1 -0
  39. package/dist/media/target-info.d.ts.map +1 -1
  40. package/dist/media/target-info.js +4 -5
  41. package/dist/media/target-info.js.map +1 -1
  42. package/dist/paths/collection-groups.d.ts +1 -0
  43. package/dist/paths/collection-groups.d.ts.map +1 -1
  44. package/dist/paths/collection-groups.js +1 -0
  45. package/dist/paths/collection-groups.js.map +1 -1
  46. package/dist/paths/collection-refs.d.ts +1 -0
  47. package/dist/paths/collection-refs.d.ts.map +1 -1
  48. package/dist/paths/collection-refs.js +3 -0
  49. package/dist/paths/collection-refs.js.map +1 -1
  50. package/dist/schemas/admin.d.ts +8 -2
  51. package/dist/schemas/admin.d.ts.map +1 -1
  52. package/dist/schemas/admin.js +10 -8
  53. package/dist/schemas/admin.js.map +1 -1
  54. package/dist/schemas/hall-library.d.ts +10 -3
  55. package/dist/schemas/hall-library.d.ts.map +1 -1
  56. package/dist/schemas/hall-library.js +30 -24
  57. package/dist/schemas/hall-library.js.map +1 -1
  58. package/dist/schemas/notification.d.ts +15 -8
  59. package/dist/schemas/notification.d.ts.map +1 -1
  60. package/dist/schemas/notification.js +42 -23
  61. package/dist/schemas/notification.js.map +1 -1
  62. package/dist/schemas/users.d.ts +5 -0
  63. package/dist/schemas/users.d.ts.map +1 -1
  64. package/dist/schemas/users.js +15 -11
  65. package/dist/schemas/users.js.map +1 -1
  66. package/dist/upload-variables/create-admin-audition-variables.d.ts.map +1 -1
  67. package/dist/upload-variables/create-admin-audition-variables.js +2 -1
  68. package/dist/upload-variables/create-admin-audition-variables.js.map +1 -1
  69. package/dist/upload-variables/create-work-project-audition-variables.d.ts.map +1 -1
  70. package/dist/upload-variables/create-work-project-audition-variables.js +2 -1
  71. package/dist/upload-variables/create-work-project-audition-variables.js.map +1 -1
  72. package/dist/utils/pledge-totals.d.ts +3 -0
  73. package/dist/utils/pledge-totals.d.ts.map +1 -1
  74. package/dist/utils/pledge-totals.js +6 -0
  75. package/dist/utils/pledge-totals.js.map +1 -1
  76. package/package.json +1 -1
@@ -8,8 +8,7 @@ export type CompanyBillingKind = 'foundingPlayer' | 'player' | 'standIn';
8
8
  /** Demoable move intents — keyed by intent from day one so future event
9
9
  * performances (page-grabs, standing ovations) land as content, not code. */
10
10
  export type CompanyPerformanceIntent = 'bow' | 'hop' | 'wave';
11
- /** The performance intents, in demo-button order. The app previously
12
- * hand-mirrored this union in two places; consumers derive from this array. */
11
+ /** The performance intents, in demo-button order; consumers derive from this array. */
13
12
  export declare const COMPANY_PERFORMANCE_INTENTS: readonly CompanyPerformanceIntent[];
14
13
  /** The characters a user may cast as their dock companion (never a Stand-In). */
15
14
  export type SelectableCompanionId = 'bill' | 'kit';
@@ -112,4 +111,30 @@ export declare const COMPANION_SWITCH_EXCHANGES: Readonly<Record<SelectableCompa
112
111
  export declare const YORICK_BLOCK_LINES: Readonly<Record<SelectableCompanionId, readonly string[]>>;
113
112
  export declare const SIGNED_OUT_DOCK_LINES: readonly string[];
114
113
  export declare const ONBOARDING_CAMEOS: OnboardingCameos;
114
+ /** The permanent shell controls a tour step can highlight. */
115
+ export declare const SITE_TOUR_ANCHORS: readonly ["homeAndHelp", "accountArea", "dock", "pageActions"];
116
+ export type SiteTourAnchor = (typeof SITE_TOUR_ANCHORS)[number];
117
+ export interface SiteTourLine {
118
+ speaker: CompanyCharacterId;
119
+ text: string;
120
+ }
121
+ export interface SiteTourStepCopy {
122
+ /** Which permanent shell control this step highlights. */
123
+ anchor: SiteTourAnchor;
124
+ /** The mascot who leads this step. */
125
+ speaker: CompanyCharacterId;
126
+ /** Bold lead-in headline. */
127
+ heading: string;
128
+ /** Body paragraphs (verbatim), each its own paragraph. */
129
+ body: readonly string[];
130
+ /** Non-Artisan replacement for the FINAL body paragraph, when present. */
131
+ bodyNonArtisanFinal?: string;
132
+ }
133
+ /** The three-mascot greeting + invitation lines. */
134
+ export declare const SITE_TOUR_INVITATION_LINES: readonly SiteTourLine[];
135
+ /** The four-step tour copy. */
136
+ export declare const SITE_TOUR_STEPS: readonly SiteTourStepCopy[];
137
+ /** The three-mascot curtain-call lines. */
138
+ export declare const SITE_TOUR_CURTAIN_CALL_LINES: readonly SiteTourLine[];
139
+ export declare const SITE_TOUR_TOTAL_STEPS: number;
115
140
  //# sourceMappingURL=company-mascots.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"company-mascots.d.ts","sourceRoot":"","sources":["../../src/constants/company-mascots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"company-mascots.d.ts","sourceRoot":"","sources":["../../src/constants/company-mascots.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,9 @@
3
3
  //
4
4
  // The ONE home for the pure, server-safe Company business truths (id unions,
5
5
  // billing kinds, performance intents, selectability, roster order) AND the
6
- // DJ-approved VERBATIM character content (studies, click lines, footers,
7
- // companion-switch exchanges, Yorick block lines, signed-out dock lines,
8
- // onboarding cameos). Moved here losslessly from the app's staging modules
9
- // (`src/lib/company-contract` + `src/lib/company-mascots.tsx`).
6
+ // VERBATIM character content (studies, click lines, footers, companion-switch
7
+ // exchanges, Yorick block lines, signed-out dock lines, onboarding cameos, the
8
+ // first-visit site tour).
10
9
  //
11
10
  // This module is pure data: NO React, NO JSX, NO Next links, NO CSS, NO SVG,
12
11
  // NO functions inside the data. Rich copy is modelled as discriminated
@@ -22,8 +21,7 @@
22
21
  // ============================================================================
23
22
  /** The roster, in billing order (Bill → Kit → Yorick). */
24
23
  export const COMPANY_CHARACTER_IDS = ['bill', 'kit', 'yorick'];
25
- /** The performance intents, in demo-button order. The app previously
26
- * hand-mirrored this union in two places; consumers derive from this array. */
24
+ /** The performance intents, in demo-button order; consumers derive from this array. */
27
25
  export const COMPANY_PERFORMANCE_INTENTS = ['bow', 'hop', 'wave'];
28
26
  /** The castable dock companions, in order. */
29
27
  export const SELECTABLE_COMPANION_IDS = ['bill', 'kit'];
@@ -269,4 +267,66 @@ export const ONBOARDING_CAMEOS = {
269
267
  yorick: "You'll forget me. It's fine. Go.",
270
268
  },
271
269
  };
270
+ // ── First-visit site tour ─────────────────────────────────────────────────────
271
+ // The tour layer reads these records and never inlines its own strings. A `speaker` names the
272
+ // mascot whose headshot sits beside the line.
273
+ /** The permanent shell controls a tour step can highlight. */
274
+ export const SITE_TOUR_ANCHORS = ['homeAndHelp', 'accountArea', 'dock', 'pageActions'];
275
+ /** The three-mascot greeting + invitation lines. */
276
+ export const SITE_TOUR_INVITATION_LINES = [
277
+ {
278
+ speaker: 'bill',
279
+ text: 'Welcome to TTT! Before the curtain rises, may we show you the few controls that will help you find your way around?',
280
+ },
281
+ { speaker: 'kit', text: 'Four quick stops. He rehearsed twelve.' },
282
+ { speaker: 'yorick', text: 'I was told there would be snacks.' },
283
+ ];
284
+ /** The four-step tour copy. */
285
+ export const SITE_TOUR_STEPS = [
286
+ {
287
+ anchor: 'homeAndHelp',
288
+ speaker: 'bill',
289
+ heading: "TTT brings you home. Help is where you look when you're lost.",
290
+ body: [
291
+ 'TTT always returns you to Center Stage. Help opens the Backstage Guide, where you can learn how the theatre works and replay this tour.',
292
+ ],
293
+ },
294
+ {
295
+ anchor: 'accountArea',
296
+ speaker: 'kit',
297
+ heading: 'Most of the theatre waits behind your account menu.',
298
+ body: [
299
+ 'Use it to visit The Town, open Your Corner, change settings, or sign out. Artisans also have a separate My Work button for reaching their Works quickly.',
300
+ ],
301
+ bodyNonArtisanFinal: 'If you become an Artisan, My Work will appear here for reaching your Works quickly.',
302
+ },
303
+ {
304
+ anchor: 'dock',
305
+ speaker: 'yorick',
306
+ heading: 'Your companion lives here. Click them for a little company—or hide them from the notification tray when you need some quiet.',
307
+ body: [
308
+ 'The tray also lets you reduce motion across the whole theatre while keeping your companion visible and still.',
309
+ 'The bell opens notifications. After you scroll down a page, an arrow appears to carry you back to the top.',
310
+ 'I am, apparently, not eligible for the companion position.',
311
+ ],
312
+ },
313
+ {
314
+ anchor: 'pageActions',
315
+ speaker: 'kit',
316
+ heading: 'Some pages place their special actions in this corner.',
317
+ body: [
318
+ 'You may find controls for creating something, reviewing activity, or performing another action unique to that page. If the corner is empty, there is nothing waiting for you there.',
319
+ ],
320
+ },
321
+ ];
322
+ /** The three-mascot curtain-call lines. */
323
+ export const SITE_TOUR_CURTAIN_CALL_LINES = [
324
+ {
325
+ speaker: 'bill',
326
+ text: 'That is the whole house. You can revisit this tour from Help whenever you need it.',
327
+ },
328
+ { speaker: 'kit', text: 'Four stops. Barely an epic.' },
329
+ { speaker: 'yorick', text: 'I still think we missed the refreshments.' },
330
+ ];
331
+ export const SITE_TOUR_TOTAL_STEPS = SITE_TOUR_STEPS.length;
272
332
  //# sourceMappingURL=company-mascots.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"company-mascots.js","sourceRoot":"","sources":["../../src/constants/company-mascots.ts"],"names":[],"mappings":"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","sourcesContent":["// ============================================================================\n// THE COMPANY — canonical Green Room mascot contract + content (ARCH-102).\n//\n// The ONE home for the pure, server-safe Company business truths (id unions,\n// billing kinds, performance intents, selectability, roster order) AND the\n// DJ-approved VERBATIM character content (studies, click lines, footers,\n// companion-switch exchanges, Yorick block lines, signed-out dock lines,\n// onboarding cameos). Moved here losslessly from the app's staging modules\n// (`src/lib/company-contract` + `src/lib/company-mascots.tsx`).\n//\n// This module is pure data: NO React, NO JSX, NO Next links, NO CSS, NO SVG,\n// NO functions inside the data. Rich copy is modelled as discriminated\n// `CompanyCopySegment`s so a web renderer, a phone app, or an AI voice can each\n// present the exact approved words without importing a UI framework. The app\n// owns the puppets, rig, choreography, and the adapter that turns these\n// segments into `<p>`, `<em>`, and route-aware links.\n//\n// Canonical dialogue stays a versioned code constant here (never Firestore):\n// it is the personality source, the safe AI-unavailable fallback, and the\n// voice-regression fixture. Never reword — curly quotes/apostrophes are\n// authored exactly as they render.\n// ============================================================================\n\n// ── Contract: id unions, billing, intents, selectability ─────────────────────\n\n/** Every member of the Company, in roster order. */\nexport type CompanyCharacterId = 'bill' | 'kit' | 'yorick';\n\n/** The roster, in billing order (Bill → Kit → Yorick). */\nexport const COMPANY_CHARACTER_IDS: readonly CompanyCharacterId[] = ['bill', 'kit', 'yorick'];\n\n/** Billing tiers: the founding Player, permanent Players, and Stand-Ins\n * (Limited Engagement — never selectable as the companion). */\nexport type CompanyBillingKind = 'foundingPlayer' | 'player' | 'standIn';\n\n/** Demoable move intents — keyed by intent from day one so future event\n * performances (page-grabs, standing ovations) land as content, not code. */\nexport type CompanyPerformanceIntent = 'bow' | 'hop' | 'wave';\n\n/** The performance intents, in demo-button order. The app previously\n * hand-mirrored this union in two places; consumers derive from this array. */\nexport const COMPANY_PERFORMANCE_INTENTS: readonly CompanyPerformanceIntent[] = ['bow', 'hop', 'wave'];\n\n/** The characters a user may cast as their dock companion (never a Stand-In). */\nexport type SelectableCompanionId = 'bill' | 'kit';\n\n/** The castable dock companions, in order. */\nexport const SELECTABLE_COMPANION_IDS: readonly SelectableCompanionId[] = ['bill', 'kit'];\n\n// ── Rich-copy pure-data model ────────────────────────────────────────────────\n\n/** Semantic destinations the copy can link to. Each client maps these to its\n * own route/navigation — the package never carries an href in mascot copy. */\nexport type CompanyNavigationTarget = 'greenRoom' | 'futurePlans';\n\n/** A single run of copy. `link` carries a semantic target, not a URL. */\nexport type CompanyCopySegment =\n | { readonly kind: 'text'; readonly text: string }\n | { readonly kind: 'emphasis'; readonly text: string }\n | { readonly kind: 'link'; readonly label: string; readonly target: CompanyNavigationTarget };\n\n/** A block of copy — a paragraph or a set-aside aside. */\nexport type CompanyCopyBlockKind = 'paragraph' | 'aside';\n\nexport interface CompanyCopyBlock {\n readonly kind: CompanyCopyBlockKind;\n readonly segments: readonly CompanyCopySegment[];\n}\n\n// ── Registry shapes ──────────────────────────────────────────────────────────\n\nexport interface CompanyPerformance {\n readonly id: string;\n readonly label: string;\n readonly intent: CompanyPerformanceIntent;\n /** Community \"Choreography by\" credit — null until an audition stages it. */\n readonly creditUid: string | null;\n}\n\nexport interface CompanyMascot {\n readonly id: CompanyCharacterId;\n /** Full stage name shown on nameplates + the playbill (\"Bill the Understudy\"). */\n readonly name: string;\n /** The ironic-understatement epithet (the Company tradition). */\n readonly title: string;\n readonly billingKind: CompanyBillingKind;\n /** Billing line rendered beside the name (\"Founding Player\"). */\n readonly billingLabel: string;\n /** One-line structural descriptor (not character voice). */\n readonly shortBio: string;\n /** Playbill character study (human-written; the future AI personality source). */\n readonly characterStudy: readonly CompanyCopyBlock[];\n /** \"Role originated by\" — resolves live via the app when set. */\n readonly originatedByUid: string | null;\n /** Text shown after \"Role originated by — \" when originatedByUid is null. */\n readonly originatedByFallback: string;\n /** Whether the origination frame invites the reader (\"→ your name here?\"). */\n readonly invitesOrigination: boolean;\n /** The performances credit caption under the demo buttons. */\n readonly choreographyCaption: string;\n readonly performances: readonly CompanyPerformance[];\n /** Rotating click lines (dock companion bubble + on-stage line pop). Each\n * line is a segment run — most are a single text segment. */\n readonly lines: readonly (readonly CompanyCopySegment[])[];\n /** Dock speech-bubble footer segments. The character's short name is a\n * `greenRoom` link segment; the app renders it as a link when signed in and\n * as plain text when signed out. \"one day\" always links to `futurePlans`.\n * Absent for Stand-Ins (Yorick — never the dock companion). */\n readonly footer?: readonly CompanyCopySegment[];\n /** False for Stand-Ins (Yorick) — never storable as the dock companion. */\n readonly selectable: boolean;\n}\n\n/** Companion-switch snark exchange, keyed (in COMPANION_SWITCH_EXCHANGES) by the\n * character switched TO. Outgoing line first (the departing companion), then the\n * incoming retort. Plain strings. */\nexport interface CompanionSwitchExchange {\n readonly outgoing: { readonly id: SelectableCompanionId; readonly line: string };\n readonly incoming: { readonly id: SelectableCompanionId; readonly line: string };\n}\n\n/** Onboarding cameo lines — Company members crashing the registration tour. */\nexport interface OnboardingCameos {\n /** Kit crashes The Audition Stage step. */\n readonly kitAuditionStage: string;\n /** Yorick cameos on The Hall step. */\n readonly yorickHall: string;\n /** The send-off curtain call — all three bow. */\n readonly curtainCall: Readonly<Record<CompanyCharacterId, string>>;\n}\n\n// ── Segment construction helpers (module-private; output is pure data) ────────\n\n/** A line/footer that is a single plain-text run. */\nconst textRun = (text: string): readonly CompanyCopySegment[] => [{ kind: 'text', text }];\n\n/** A character's dock footer, built from the one verbatim sentence. The name is\n * a `greenRoom` link segment (the app renders it plain when signed out); \"one\n * day\" always links to `futurePlans`; `tail` is the character-specific close. */\nconst dockFooter = (name: string, tail: string): readonly CompanyCopySegment[] => [\n { kind: 'link', label: name, target: 'greenRoom' },\n { kind: 'text', text: ' is a basic version for now — ' },\n { kind: 'link', label: 'one day', target: 'futurePlans' },\n { kind: 'text', text: ` ${tail}` },\n];\n\nconst SHARED_PERFORMANCES: readonly CompanyPerformance[] = [\n { id: 'bow', label: 'Bow', intent: 'bow', creditUid: null },\n { id: 'hop', label: 'Hop', intent: 'hop', creditUid: null },\n { id: 'wave', label: 'Wave', intent: 'wave', creditUid: null },\n];\n\n// The dock-footer close sentences, VERBATIM (the pre-Company Bill wording; Kit's\n// from the settled spec). Curly apostrophes authored exactly as rendered.\nconst BILL_FOOTER_TAIL =\n 'we hope to make him an AI-powered guide who helps you navigate the site. He’ll never make content, just help.';\nconst KIT_FOOTER_TAIL =\n 'we hope to make him an AI-powered guide with this exact attitude. He’ll never make content. He does have opinions about yours.';\n\n// ── Bill the Understudy — Founding Player ────────────────────────────────────\n// The 14 approved lines are VERBATIM (incl. the italic emphasis in line 11).\nconst BILL: CompanyMascot = {\n id: 'bill',\n name: 'Bill the Understudy',\n title: 'The Understudy',\n billingKind: 'foundingPlayer',\n billingLabel: 'Founding Player',\n shortBio: \"TTT's founding player and your first guide.\",\n characterStudy: [\n {\n kind: 'paragraph',\n segments: textRun(\n 'The most enthusiastic understudy in show business, and TTT Productions’ founding player. Bill has read the whole script of this town — well, skimmed it — and rehearses every day for the role of your guide to everything here. He insists the ‘Bill’ is short for William, and that he once wrote plays in a town called Stratford. We have chosen to let him believe it. Someday he’ll answer anything you ask about this place. Today, he mostly waves.',\n ),\n },\n ],\n originatedByUid: null,\n originatedByFallback: 'To be determined',\n invitesOrigination: true,\n choreographyCaption: 'Choreography by — to be determined',\n performances: SHARED_PERFORMANCES,\n lines: [\n textRun(\"One day I'll help you find your perfect collaborator. Today, I mostly wave.\"),\n textRun(\"I'm just an understudy for now — but someday I'll know every corner of this town.\"),\n textRun('Rehearsing my big role: your guide to everything TTT. No spoilers.'),\n textRun(\"They say one day I'll have real personalities. Plural. I'm excited too.\"),\n textRun(\"I'll never make the art — that's your job. I'll just help you find your people.\"),\n textRun(\"Every great production starts with somebody standing in the wings. That's me. Literally.\"),\n textRun(\"Someday you'll ask me anything about this place and I'll actually answer. Bold, I know.\"),\n textRun('The Town Crier gets to shout. I get to practice my bow. For now.'),\n textRun(\"I've read the whole script of this town. Well... skimmed. I'm working on it.\"),\n textRun('Big dreams for a stick figure: guide, helper, friend. In that order.'),\n [\n { kind: 'text', text: \"When the curtain rises on my real role, you'll be the first to know. You \" },\n { kind: 'emphasis', text: 'did' },\n { kind: 'text', text: ' click me first.' },\n ],\n textRun('Until my big debut, consider me the most enthusiastic understudy in show business.'),\n textRun(\"Even the greatest playwright who ever lived starts over as an understudy in a town this good. That's my story, anyway.\"),\n textRun('Four hundred years of theatre experience. My résumé? A drawing of myself.'),\n ],\n footer: dockFooter('Bill', BILL_FOOTER_TAIL),\n selectable: true,\n};\n\n// ── Kit the Stand-In — permanent Player #2, Bill's rival ─────────────────────\nconst KIT: CompanyMascot = {\n id: 'kit',\n name: 'Kit the Stand-In',\n title: 'The Stand-In',\n billingKind: 'player',\n billingLabel: 'Player',\n shortBio: \"Permanent Player #2, and Bill's rival.\",\n characterStudy: [\n {\n kind: 'paragraph',\n segments: textRun(\n 'Sharp, quick, and absolutely certain he should have gone first. Kit auditioned for founding mascot, delivered the finest monologue the empty theatre had ever heard, and lost the part to a stick figure with a “trustworthy wave.” He has been gracious about it every single day since — loudly, to anyone in range. Keeps the rejection letter framed. Ask him about it. He’s dying for you to ask.',\n ),\n },\n {\n kind: 'aside',\n segments: textRun(\n 'Loosely nodding to a certain rival playwright — brilliant, theatrical, gone too soon. One day, an AI-powered guide with this exact personality: genuinely helpful, faintly insulted by the request.',\n ),\n },\n ],\n originatedByUid: null,\n originatedByFallback: 'To be determined',\n invitesOrigination: true,\n choreographyCaption: 'Choreography by — to be determined',\n performances: SHARED_PERFORMANCES,\n lines: [\n textRun(\"Yes, I'm the Stand-In. Permanently. The irony isn't lost on me — it lives with me now.\"),\n textRun(\"I was FIRST in line at the founding audition. They went with a stick figure who 'waves well.'\"),\n textRun(\"Bill rehearses roles nobody wrote. I've already memorized them. We are not the same.\"),\n textRun(\"One day this whole town will know my name. Today it's 'the other one.' Fine.\"),\n textRun(\"I don't do warm-ups. I arrive brilliant.\"),\n textRun('Founding mascot. FOUNDING. He waved at a login page and they gave him a title.'),\n textRun('My five-year plan is center stage. My five-century plan is also center stage.'),\n textRun('History remembers a playwright who died before his rival got famous. Anyway. No reason.'),\n textRun('Click Bill for encouragement. Click me to hear the truth, beautifully delivered.'),\n textRun('I keep my rejection letter framed. Motivation is motivation.'),\n textRun(\"You clicked me first today. I rehearsed being gracious about this — give me a moment.\"),\n textRun(\"When the curtain finally rises on my lead role, act surprised. I won't.\"),\n textRun('They say I might have been a spy in a past life. I neither confirm nor deny. Mystique.'),\n textRun('The Understudy and the Stand-In on one stage. Somewhere a playwright is laughing at us both.'),\n ],\n footer: dockFooter('Kit', KIT_FOOTER_TAIL),\n selectable: true,\n};\n\n// ── Yorick the Forgettable — Stand-In · Limited Engagement ───────────────────\n// Never selectable, never the dock companion; his lines are on-stage only.\nconst YORICK: CompanyMascot = {\n id: 'yorick',\n name: 'Yorick the Forgettable',\n title: 'The Forgettable',\n billingKind: 'standIn',\n billingLabel: 'Stand-In · Limited Engagement',\n shortBio: 'A Limited Engagement Stand-In, keeping the light warm.',\n characterStudy: [\n {\n kind: 'paragraph',\n segments: textRun(\n \"A fellow of infinite jest, reduced to holding a light he isn't allowed to stand in. Yorick insists he was the funniest jester who ever lived — and unfortunately, everyone who could confirm it is unavailable for comment. He is keeping the stage warm until the role is properly cast, and he'd rather you didn't get attached. You'll forget him anyway. Everyone does. It's in the name.\",\n ),\n },\n ],\n originatedByUid: null,\n originatedByFallback: 'no one will admit to it',\n invitesOrigination: false,\n choreographyCaption: 'Bow · Hop · Wave — borrowed from Bill, who says he can have them',\n performances: SHARED_PERFORMANCES,\n lines: [\n textRun(\"Oh! A visitor. Nobody visits the Wings. I'd know — I keep the guestbook. It's empty.\"),\n textRun(\"I used to kill at court, you know. Standing ovations. Kings weeping. ...You'll take my word for it.\"),\n textRun(\"Don't get attached. I'm told I'm temporary. The skull agrees.\"),\n textRun('Alas, poor me. I knew me well.'),\n textRun('Infinite jest, they said. INFINITE. And yet here I am, finite-ly employed.'),\n textRun(\"One day they'll cast this role properly and I'll be forgotten. Ahead of schedule, honestly.\"),\n ],\n selectable: false,\n};\n\nexport const COMPANY_MASCOTS: Readonly<Record<CompanyCharacterId, CompanyMascot>> = {\n bill: BILL,\n kit: KIT,\n yorick: YORICK,\n};\n\n/** Registry order (Bill → Kit → Yorick), reused from the roster. */\nexport const COMPANY_MASCOT_ORDER: readonly CompanyCharacterId[] = COMPANY_CHARACTER_IDS;\n\n// ── Pure helpers ─────────────────────────────────────────────────────────────\n\n/** True when `x` is a canonical Company character id. */\nexport function isCompanyCharacterId(x: unknown): x is CompanyCharacterId {\n return typeof x === 'string' && (COMPANY_CHARACTER_IDS as readonly string[]).includes(x);\n}\n\n/** True when `id` may be cast as the dock companion — driven by the mascot\n * data's `selectable` field (Yorick is false). */\nexport function isSelectableCompanion(id: CompanyCharacterId): id is SelectableCompanionId {\n return COMPANY_MASCOTS[id].selectable;\n}\n\n/** The mascot record for a character id. */\nexport function getCompanyMascot(id: CompanyCharacterId): CompanyMascot {\n return COMPANY_MASCOTS[id];\n}\n\n// ── Companion-switch snark exchanges (VERBATIM) ──────────────────────────────\n// Keyed by the character being switched TO. Outgoing line first (the departing\n// companion), then the incoming retort.\nexport const COMPANION_SWITCH_EXCHANGES: Readonly<\n Record<SelectableCompanionId, readonly CompanionSwitchExchange[]>\n> = {\n // Switching TO Kit — Bill exits, Kit enters.\n kit: [\n {\n outgoing: { id: 'bill', line: \"Kit?! ...No, it's fine. It's fine. I'll be in the wings. Rehearsing. Alone.\" },\n incoming: { id: 'kit', line: 'Finally. Someone with taste.' },\n },\n {\n outgoing: { id: 'bill', line: 'Take care of them, Kit. They click gently.' },\n incoming: { id: 'kit', line: 'I know how to be adored, Bill.' },\n },\n {\n outgoing: { id: 'bill', line: 'The understudy yields the stage. Again.' },\n incoming: { id: 'kit', line: 'And yet history will say I earned it. Because I did.' },\n },\n {\n outgoing: { id: 'bill', line: \"You'll come back. They always— they usually come back.\" },\n incoming: { id: 'kit', line: \"Don't wait up.\" },\n },\n {\n outgoing: { id: 'bill', line: 'Break a leg, Kit.' },\n incoming: { id: 'kit', line: 'I never break anything but hearts and attendance records.' },\n },\n ],\n // Switching TO Bill — Kit exits, Bill enters.\n bill: [\n {\n outgoing: { id: 'kit', line: 'Unbelievable. UNBELIEVABLE.' },\n incoming: { id: 'bill', line: \"It's good to be back! ...He'll be alright.\" },\n },\n {\n outgoing: { id: 'kit', line: \"Enjoy the waving. That's all he does, you know.\" },\n incoming: { id: 'bill', line: \"I also bow now! I've been practicing.\" },\n },\n {\n outgoing: { id: 'kit', line: 'I was BRILLIANT and you choose the stick figure with the cap.' },\n incoming: { id: 'bill', line: \"He means 'welcome back.' We're working on it.\" },\n },\n {\n outgoing: { id: 'kit', line: 'Fine. FINE. The wings have better lighting anyway.' },\n incoming: { id: 'bill', line: \"They really don't. I'd know.\" },\n },\n {\n outgoing: { id: 'kit', line: 'This is the founding audition all over again.' },\n incoming: { id: 'bill', line: \"You'll get the next one, Kit. ...Probably not. But maybe!\" },\n },\n ],\n};\n\n// ── Yorick block lines (VERBATIM) ────────────────────────────────────────────\n// Spoken by the ACTIVE companion when the user presses Yorick's cast button.\nexport const YORICK_BLOCK_LINES: Readonly<Record<SelectableCompanionId, readonly string[]>> = {\n bill: [\n \"Soft you now — he's a Stand-In! He's only keeping the light warm. Thou art stuck with me. Nay — blessed with me.\",\n \"Yorick?! He doesn't even know his blocking. Literally. He asks me where to stand.\",\n \"You can't cast Yorick — he's on a Limited Engagement. Very limited. He leaves when the real role is cast.\",\n 'Alas, poor choice — I knew him better than you do. Pick a Player.',\n ],\n kit: [\n 'The skeleton crew? No. Absolutely not. You have TWO trained professionals right here.',\n \"He doesn't even know his blocking. I've watched him bow into the curtain. Twice.\",\n \"Yorick's not staying. Don't get attached to the help.\",\n \"You'd pass over ME for the temp? ...I need to sit down. On the couch he's not allowed on.\",\n ],\n};\n\n// ── Signed-out dock lines (VERBATIM) ─────────────────────────────────────────\n// Spoken by whichever Player is on the dock when NO user is signed in — the\n// pre-login pitch.\nexport const SIGNED_OUT_DOCK_LINES: readonly string[] = [\n \"The show's inside — and it's free. No ads, just an email.\",\n \"I'd introduce you to the whole Company, but you'll need a ticket. Tickets are free.\",\n 'Everything in this town is made by real people. Come see.',\n];\n\n// ── Onboarding cameo lines (VERBATIM) ────────────────────────────────────────\nexport const ONBOARDING_CAMEOS: OnboardingCameos = {\n kitAuditionStage:\n \"The Audition Stage. Where stars are born. I was robbed here once — anyway, you'll love it.\",\n yorickHall:\n 'The Hall — every tale, tune, and show the town keeps. Four hundred years of my material, and not one shelf. Enjoy.',\n curtainCall: {\n bill: 'Break a leg out there.',\n kit: 'Try not to embarrass us.',\n yorick: \"You'll forget me. It's fine. Go.\",\n },\n};\n"]}
1
+ {"version":3,"file":"company-mascots.js","sourceRoot":"","sources":["../../src/constants/company-mascots.ts"],"names":[],"mappings":"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","sourcesContent":["// ============================================================================\n// THE COMPANY — canonical Green Room mascot contract + content (ARCH-102).\n//\n// The ONE home for the pure, server-safe Company business truths (id unions,\n// billing kinds, performance intents, selectability, roster order) AND the\n// VERBATIM character content (studies, click lines, footers, companion-switch\n// exchanges, Yorick block lines, signed-out dock lines, onboarding cameos, the\n// first-visit site tour).\n//\n// This module is pure data: NO React, NO JSX, NO Next links, NO CSS, NO SVG,\n// NO functions inside the data. Rich copy is modelled as discriminated\n// `CompanyCopySegment`s so a web renderer, a phone app, or an AI voice can each\n// present the exact approved words without importing a UI framework. The app\n// owns the puppets, rig, choreography, and the adapter that turns these\n// segments into `<p>`, `<em>`, and route-aware links.\n//\n// Canonical dialogue stays a versioned code constant here (never Firestore):\n// it is the personality source, the safe AI-unavailable fallback, and the\n// voice-regression fixture. Never reword — curly quotes/apostrophes are\n// authored exactly as they render.\n// ============================================================================\n\n// ── Contract: id unions, billing, intents, selectability ─────────────────────\n\n/** Every member of the Company, in roster order. */\nexport type CompanyCharacterId = 'bill' | 'kit' | 'yorick';\n\n/** The roster, in billing order (Bill → Kit → Yorick). */\nexport const COMPANY_CHARACTER_IDS: readonly CompanyCharacterId[] = ['bill', 'kit', 'yorick'];\n\n/** Billing tiers: the founding Player, permanent Players, and Stand-Ins\n * (Limited Engagement — never selectable as the companion). */\nexport type CompanyBillingKind = 'foundingPlayer' | 'player' | 'standIn';\n\n/** Demoable move intents — keyed by intent from day one so future event\n * performances (page-grabs, standing ovations) land as content, not code. */\nexport type CompanyPerformanceIntent = 'bow' | 'hop' | 'wave';\n\n/** The performance intents, in demo-button order; consumers derive from this array. */\nexport const COMPANY_PERFORMANCE_INTENTS: readonly CompanyPerformanceIntent[] = ['bow', 'hop', 'wave'];\n\n/** The characters a user may cast as their dock companion (never a Stand-In). */\nexport type SelectableCompanionId = 'bill' | 'kit';\n\n/** The castable dock companions, in order. */\nexport const SELECTABLE_COMPANION_IDS: readonly SelectableCompanionId[] = ['bill', 'kit'];\n\n// ── Rich-copy pure-data model ────────────────────────────────────────────────\n\n/** Semantic destinations the copy can link to. Each client maps these to its\n * own route/navigation — the package never carries an href in mascot copy. */\nexport type CompanyNavigationTarget = 'greenRoom' | 'futurePlans';\n\n/** A single run of copy. `link` carries a semantic target, not a URL. */\nexport type CompanyCopySegment =\n | { readonly kind: 'text'; readonly text: string }\n | { readonly kind: 'emphasis'; readonly text: string }\n | { readonly kind: 'link'; readonly label: string; readonly target: CompanyNavigationTarget };\n\n/** A block of copy — a paragraph or a set-aside aside. */\nexport type CompanyCopyBlockKind = 'paragraph' | 'aside';\n\nexport interface CompanyCopyBlock {\n readonly kind: CompanyCopyBlockKind;\n readonly segments: readonly CompanyCopySegment[];\n}\n\n// ── Registry shapes ──────────────────────────────────────────────────────────\n\nexport interface CompanyPerformance {\n readonly id: string;\n readonly label: string;\n readonly intent: CompanyPerformanceIntent;\n /** Community \"Choreography by\" credit — null until an audition stages it. */\n readonly creditUid: string | null;\n}\n\nexport interface CompanyMascot {\n readonly id: CompanyCharacterId;\n /** Full stage name shown on nameplates + the playbill (\"Bill the Understudy\"). */\n readonly name: string;\n /** The ironic-understatement epithet (the Company tradition). */\n readonly title: string;\n readonly billingKind: CompanyBillingKind;\n /** Billing line rendered beside the name (\"Founding Player\"). */\n readonly billingLabel: string;\n /** One-line structural descriptor (not character voice). */\n readonly shortBio: string;\n /** Playbill character study (human-written; the future AI personality source). */\n readonly characterStudy: readonly CompanyCopyBlock[];\n /** \"Role originated by\" — resolves live via the app when set. */\n readonly originatedByUid: string | null;\n /** Text shown after \"Role originated by — \" when originatedByUid is null. */\n readonly originatedByFallback: string;\n /** Whether the origination frame invites the reader (\"→ your name here?\"). */\n readonly invitesOrigination: boolean;\n /** The performances credit caption under the demo buttons. */\n readonly choreographyCaption: string;\n readonly performances: readonly CompanyPerformance[];\n /** Rotating click lines (dock companion bubble + on-stage line pop). Each\n * line is a segment run — most are a single text segment. */\n readonly lines: readonly (readonly CompanyCopySegment[])[];\n /** Dock speech-bubble footer segments. The character's short name is a\n * `greenRoom` link segment; the app renders it as a link when signed in and\n * as plain text when signed out. \"one day\" always links to `futurePlans`.\n * Absent for Stand-Ins (Yorick — never the dock companion). */\n readonly footer?: readonly CompanyCopySegment[];\n /** False for Stand-Ins (Yorick) — never storable as the dock companion. */\n readonly selectable: boolean;\n}\n\n/** Companion-switch snark exchange, keyed (in COMPANION_SWITCH_EXCHANGES) by the\n * character switched TO. Outgoing line first (the departing companion), then the\n * incoming retort. Plain strings. */\nexport interface CompanionSwitchExchange {\n readonly outgoing: { readonly id: SelectableCompanionId; readonly line: string };\n readonly incoming: { readonly id: SelectableCompanionId; readonly line: string };\n}\n\n/** Onboarding cameo lines — Company members crashing the registration tour. */\nexport interface OnboardingCameos {\n /** Kit crashes The Audition Stage step. */\n readonly kitAuditionStage: string;\n /** Yorick cameos on The Hall step. */\n readonly yorickHall: string;\n /** The send-off curtain call — all three bow. */\n readonly curtainCall: Readonly<Record<CompanyCharacterId, string>>;\n}\n\n// ── Segment construction helpers (module-private; output is pure data) ────────\n\n/** A line/footer that is a single plain-text run. */\nconst textRun = (text: string): readonly CompanyCopySegment[] => [{ kind: 'text', text }];\n\n/** A character's dock footer, built from the one verbatim sentence. The name is\n * a `greenRoom` link segment (the app renders it plain when signed out); \"one\n * day\" always links to `futurePlans`; `tail` is the character-specific close. */\nconst dockFooter = (name: string, tail: string): readonly CompanyCopySegment[] => [\n { kind: 'link', label: name, target: 'greenRoom' },\n { kind: 'text', text: ' is a basic version for now — ' },\n { kind: 'link', label: 'one day', target: 'futurePlans' },\n { kind: 'text', text: ` ${tail}` },\n];\n\nconst SHARED_PERFORMANCES: readonly CompanyPerformance[] = [\n { id: 'bow', label: 'Bow', intent: 'bow', creditUid: null },\n { id: 'hop', label: 'Hop', intent: 'hop', creditUid: null },\n { id: 'wave', label: 'Wave', intent: 'wave', creditUid: null },\n];\n\n// The dock-footer close sentences, VERBATIM (the pre-Company Bill wording; Kit's\n// from the settled spec). Curly apostrophes authored exactly as rendered.\nconst BILL_FOOTER_TAIL =\n 'we hope to make him an AI-powered guide who helps you navigate the site. He’ll never make content, just help.';\nconst KIT_FOOTER_TAIL =\n 'we hope to make him an AI-powered guide with this exact attitude. He’ll never make content. He does have opinions about yours.';\n\n// ── Bill the Understudy — Founding Player ────────────────────────────────────\n// The 14 approved lines are VERBATIM (incl. the italic emphasis in line 11).\nconst BILL: CompanyMascot = {\n id: 'bill',\n name: 'Bill the Understudy',\n title: 'The Understudy',\n billingKind: 'foundingPlayer',\n billingLabel: 'Founding Player',\n shortBio: \"TTT's founding player and your first guide.\",\n characterStudy: [\n {\n kind: 'paragraph',\n segments: textRun(\n 'The most enthusiastic understudy in show business, and TTT Productions’ founding player. Bill has read the whole script of this town — well, skimmed it — and rehearses every day for the role of your guide to everything here. He insists the ‘Bill’ is short for William, and that he once wrote plays in a town called Stratford. We have chosen to let him believe it. Someday he’ll answer anything you ask about this place. Today, he mostly waves.',\n ),\n },\n ],\n originatedByUid: null,\n originatedByFallback: 'To be determined',\n invitesOrigination: true,\n choreographyCaption: 'Choreography by — to be determined',\n performances: SHARED_PERFORMANCES,\n lines: [\n textRun(\"One day I'll help you find your perfect collaborator. Today, I mostly wave.\"),\n textRun(\"I'm just an understudy for now — but someday I'll know every corner of this town.\"),\n textRun('Rehearsing my big role: your guide to everything TTT. No spoilers.'),\n textRun(\"They say one day I'll have real personalities. Plural. I'm excited too.\"),\n textRun(\"I'll never make the art — that's your job. I'll just help you find your people.\"),\n textRun(\"Every great production starts with somebody standing in the wings. That's me. Literally.\"),\n textRun(\"Someday you'll ask me anything about this place and I'll actually answer. Bold, I know.\"),\n textRun('The Town Crier gets to shout. I get to practice my bow. For now.'),\n textRun(\"I've read the whole script of this town. Well... skimmed. I'm working on it.\"),\n textRun('Big dreams for a stick figure: guide, helper, friend. In that order.'),\n [\n { kind: 'text', text: \"When the curtain rises on my real role, you'll be the first to know. You \" },\n { kind: 'emphasis', text: 'did' },\n { kind: 'text', text: ' click me first.' },\n ],\n textRun('Until my big debut, consider me the most enthusiastic understudy in show business.'),\n textRun(\"Even the greatest playwright who ever lived starts over as an understudy in a town this good. That's my story, anyway.\"),\n textRun('Four hundred years of theatre experience. My résumé? A drawing of myself.'),\n ],\n footer: dockFooter('Bill', BILL_FOOTER_TAIL),\n selectable: true,\n};\n\n// ── Kit the Stand-In — permanent Player #2, Bill's rival ─────────────────────\nconst KIT: CompanyMascot = {\n id: 'kit',\n name: 'Kit the Stand-In',\n title: 'The Stand-In',\n billingKind: 'player',\n billingLabel: 'Player',\n shortBio: \"Permanent Player #2, and Bill's rival.\",\n characterStudy: [\n {\n kind: 'paragraph',\n segments: textRun(\n 'Sharp, quick, and absolutely certain he should have gone first. Kit auditioned for founding mascot, delivered the finest monologue the empty theatre had ever heard, and lost the part to a stick figure with a “trustworthy wave.” He has been gracious about it every single day since — loudly, to anyone in range. Keeps the rejection letter framed. Ask him about it. He’s dying for you to ask.',\n ),\n },\n {\n kind: 'aside',\n segments: textRun(\n 'Loosely nodding to a certain rival playwright — brilliant, theatrical, gone too soon. One day, an AI-powered guide with this exact personality: genuinely helpful, faintly insulted by the request.',\n ),\n },\n ],\n originatedByUid: null,\n originatedByFallback: 'To be determined',\n invitesOrigination: true,\n choreographyCaption: 'Choreography by — to be determined',\n performances: SHARED_PERFORMANCES,\n lines: [\n textRun(\"Yes, I'm the Stand-In. Permanently. The irony isn't lost on me — it lives with me now.\"),\n textRun(\"I was FIRST in line at the founding audition. They went with a stick figure who 'waves well.'\"),\n textRun(\"Bill rehearses roles nobody wrote. I've already memorized them. We are not the same.\"),\n textRun(\"One day this whole town will know my name. Today it's 'the other one.' Fine.\"),\n textRun(\"I don't do warm-ups. I arrive brilliant.\"),\n textRun('Founding mascot. FOUNDING. He waved at a login page and they gave him a title.'),\n textRun('My five-year plan is center stage. My five-century plan is also center stage.'),\n textRun('History remembers a playwright who died before his rival got famous. Anyway. No reason.'),\n textRun('Click Bill for encouragement. Click me to hear the truth, beautifully delivered.'),\n textRun('I keep my rejection letter framed. Motivation is motivation.'),\n textRun(\"You clicked me first today. I rehearsed being gracious about this — give me a moment.\"),\n textRun(\"When the curtain finally rises on my lead role, act surprised. I won't.\"),\n textRun('They say I might have been a spy in a past life. I neither confirm nor deny. Mystique.'),\n textRun('The Understudy and the Stand-In on one stage. Somewhere a playwright is laughing at us both.'),\n ],\n footer: dockFooter('Kit', KIT_FOOTER_TAIL),\n selectable: true,\n};\n\n// ── Yorick the Forgettable — Stand-In · Limited Engagement ───────────────────\n// Never selectable, never the dock companion; his lines are on-stage only.\nconst YORICK: CompanyMascot = {\n id: 'yorick',\n name: 'Yorick the Forgettable',\n title: 'The Forgettable',\n billingKind: 'standIn',\n billingLabel: 'Stand-In · Limited Engagement',\n shortBio: 'A Limited Engagement Stand-In, keeping the light warm.',\n characterStudy: [\n {\n kind: 'paragraph',\n segments: textRun(\n \"A fellow of infinite jest, reduced to holding a light he isn't allowed to stand in. Yorick insists he was the funniest jester who ever lived — and unfortunately, everyone who could confirm it is unavailable for comment. He is keeping the stage warm until the role is properly cast, and he'd rather you didn't get attached. You'll forget him anyway. Everyone does. It's in the name.\",\n ),\n },\n ],\n originatedByUid: null,\n originatedByFallback: 'no one will admit to it',\n invitesOrigination: false,\n choreographyCaption: 'Bow · Hop · Wave — borrowed from Bill, who says he can have them',\n performances: SHARED_PERFORMANCES,\n lines: [\n textRun(\"Oh! A visitor. Nobody visits the Wings. I'd know — I keep the guestbook. It's empty.\"),\n textRun(\"I used to kill at court, you know. Standing ovations. Kings weeping. ...You'll take my word for it.\"),\n textRun(\"Don't get attached. I'm told I'm temporary. The skull agrees.\"),\n textRun('Alas, poor me. I knew me well.'),\n textRun('Infinite jest, they said. INFINITE. And yet here I am, finite-ly employed.'),\n textRun(\"One day they'll cast this role properly and I'll be forgotten. Ahead of schedule, honestly.\"),\n ],\n selectable: false,\n};\n\nexport const COMPANY_MASCOTS: Readonly<Record<CompanyCharacterId, CompanyMascot>> = {\n bill: BILL,\n kit: KIT,\n yorick: YORICK,\n};\n\n/** Registry order (Bill → Kit → Yorick), reused from the roster. */\nexport const COMPANY_MASCOT_ORDER: readonly CompanyCharacterId[] = COMPANY_CHARACTER_IDS;\n\n// ── Pure helpers ─────────────────────────────────────────────────────────────\n\n/** True when `x` is a canonical Company character id. */\nexport function isCompanyCharacterId(x: unknown): x is CompanyCharacterId {\n return typeof x === 'string' && (COMPANY_CHARACTER_IDS as readonly string[]).includes(x);\n}\n\n/** True when `id` may be cast as the dock companion — driven by the mascot\n * data's `selectable` field (Yorick is false). */\nexport function isSelectableCompanion(id: CompanyCharacterId): id is SelectableCompanionId {\n return COMPANY_MASCOTS[id].selectable;\n}\n\n/** The mascot record for a character id. */\nexport function getCompanyMascot(id: CompanyCharacterId): CompanyMascot {\n return COMPANY_MASCOTS[id];\n}\n\n// ── Companion-switch snark exchanges (VERBATIM) ──────────────────────────────\n// Keyed by the character being switched TO. Outgoing line first (the departing\n// companion), then the incoming retort.\nexport const COMPANION_SWITCH_EXCHANGES: Readonly<\n Record<SelectableCompanionId, readonly CompanionSwitchExchange[]>\n> = {\n // Switching TO Kit — Bill exits, Kit enters.\n kit: [\n {\n outgoing: { id: 'bill', line: \"Kit?! ...No, it's fine. It's fine. I'll be in the wings. Rehearsing. Alone.\" },\n incoming: { id: 'kit', line: 'Finally. Someone with taste.' },\n },\n {\n outgoing: { id: 'bill', line: 'Take care of them, Kit. They click gently.' },\n incoming: { id: 'kit', line: 'I know how to be adored, Bill.' },\n },\n {\n outgoing: { id: 'bill', line: 'The understudy yields the stage. Again.' },\n incoming: { id: 'kit', line: 'And yet history will say I earned it. Because I did.' },\n },\n {\n outgoing: { id: 'bill', line: \"You'll come back. They always— they usually come back.\" },\n incoming: { id: 'kit', line: \"Don't wait up.\" },\n },\n {\n outgoing: { id: 'bill', line: 'Break a leg, Kit.' },\n incoming: { id: 'kit', line: 'I never break anything but hearts and attendance records.' },\n },\n ],\n // Switching TO Bill — Kit exits, Bill enters.\n bill: [\n {\n outgoing: { id: 'kit', line: 'Unbelievable. UNBELIEVABLE.' },\n incoming: { id: 'bill', line: \"It's good to be back! ...He'll be alright.\" },\n },\n {\n outgoing: { id: 'kit', line: \"Enjoy the waving. That's all he does, you know.\" },\n incoming: { id: 'bill', line: \"I also bow now! I've been practicing.\" },\n },\n {\n outgoing: { id: 'kit', line: 'I was BRILLIANT and you choose the stick figure with the cap.' },\n incoming: { id: 'bill', line: \"He means 'welcome back.' We're working on it.\" },\n },\n {\n outgoing: { id: 'kit', line: 'Fine. FINE. The wings have better lighting anyway.' },\n incoming: { id: 'bill', line: \"They really don't. I'd know.\" },\n },\n {\n outgoing: { id: 'kit', line: 'This is the founding audition all over again.' },\n incoming: { id: 'bill', line: \"You'll get the next one, Kit. ...Probably not. But maybe!\" },\n },\n ],\n};\n\n// ── Yorick block lines (VERBATIM) ────────────────────────────────────────────\n// Spoken by the ACTIVE companion when the user presses Yorick's cast button.\nexport const YORICK_BLOCK_LINES: Readonly<Record<SelectableCompanionId, readonly string[]>> = {\n bill: [\n \"Soft you now — he's a Stand-In! He's only keeping the light warm. Thou art stuck with me. Nay — blessed with me.\",\n \"Yorick?! He doesn't even know his blocking. Literally. He asks me where to stand.\",\n \"You can't cast Yorick — he's on a Limited Engagement. Very limited. He leaves when the real role is cast.\",\n 'Alas, poor choice — I knew him better than you do. Pick a Player.',\n ],\n kit: [\n 'The skeleton crew? No. Absolutely not. You have TWO trained professionals right here.',\n \"He doesn't even know his blocking. I've watched him bow into the curtain. Twice.\",\n \"Yorick's not staying. Don't get attached to the help.\",\n \"You'd pass over ME for the temp? ...I need to sit down. On the couch he's not allowed on.\",\n ],\n};\n\n// ── Signed-out dock lines (VERBATIM) ─────────────────────────────────────────\n// Spoken by whichever Player is on the dock when NO user is signed in — the\n// pre-login pitch.\nexport const SIGNED_OUT_DOCK_LINES: readonly string[] = [\n \"The show's inside — and it's free. No ads, just an email.\",\n \"I'd introduce you to the whole Company, but you'll need a ticket. Tickets are free.\",\n 'Everything in this town is made by real people. Come see.',\n];\n\n// ── Onboarding cameo lines (VERBATIM) ────────────────────────────────────────\nexport const ONBOARDING_CAMEOS: OnboardingCameos = {\n kitAuditionStage:\n \"The Audition Stage. Where stars are born. I was robbed here once — anyway, you'll love it.\",\n yorickHall:\n 'The Hall — every tale, tune, and show the town keeps. Four hundred years of my material, and not one shelf. Enjoy.',\n curtainCall: {\n bill: 'Break a leg out there.',\n kit: 'Try not to embarrass us.',\n yorick: \"You'll forget me. It's fine. Go.\",\n },\n};\n\n// ── First-visit site tour ─────────────────────────────────────────────────────\n// The tour layer reads these records and never inlines its own strings. A `speaker` names the\n// mascot whose headshot sits beside the line.\n\n/** The permanent shell controls a tour step can highlight. */\nexport const SITE_TOUR_ANCHORS = ['homeAndHelp', 'accountArea', 'dock', 'pageActions'] as const;\nexport type SiteTourAnchor = (typeof SITE_TOUR_ANCHORS)[number];\n\nexport interface SiteTourLine {\n speaker: CompanyCharacterId;\n text: string;\n}\n\nexport interface SiteTourStepCopy {\n /** Which permanent shell control this step highlights. */\n anchor: SiteTourAnchor;\n /** The mascot who leads this step. */\n speaker: CompanyCharacterId;\n /** Bold lead-in headline. */\n heading: string;\n /** Body paragraphs (verbatim), each its own paragraph. */\n body: readonly string[];\n /** Non-Artisan replacement for the FINAL body paragraph, when present. */\n bodyNonArtisanFinal?: string;\n}\n\n/** The three-mascot greeting + invitation lines. */\nexport const SITE_TOUR_INVITATION_LINES: readonly SiteTourLine[] = [\n {\n speaker: 'bill',\n text:\n 'Welcome to TTT! Before the curtain rises, may we show you the few controls that will help you find your way around?',\n },\n { speaker: 'kit', text: 'Four quick stops. He rehearsed twelve.' },\n { speaker: 'yorick', text: 'I was told there would be snacks.' },\n];\n\n/** The four-step tour copy. */\nexport const SITE_TOUR_STEPS: readonly SiteTourStepCopy[] = [\n {\n anchor: 'homeAndHelp',\n speaker: 'bill',\n heading: \"TTT brings you home. Help is where you look when you're lost.\",\n body: [\n 'TTT always returns you to Center Stage. Help opens the Backstage Guide, where you can learn how the theatre works and replay this tour.',\n ],\n },\n {\n anchor: 'accountArea',\n speaker: 'kit',\n heading: 'Most of the theatre waits behind your account menu.',\n body: [\n 'Use it to visit The Town, open Your Corner, change settings, or sign out. Artisans also have a separate My Work button for reaching their Works quickly.',\n ],\n bodyNonArtisanFinal:\n 'If you become an Artisan, My Work will appear here for reaching your Works quickly.',\n },\n {\n anchor: 'dock',\n speaker: 'yorick',\n heading:\n 'Your companion lives here. Click them for a little company—or hide them from the notification tray when you need some quiet.',\n body: [\n 'The tray also lets you reduce motion across the whole theatre while keeping your companion visible and still.',\n 'The bell opens notifications. After you scroll down a page, an arrow appears to carry you back to the top.',\n 'I am, apparently, not eligible for the companion position.',\n ],\n },\n {\n anchor: 'pageActions',\n speaker: 'kit',\n heading: 'Some pages place their special actions in this corner.',\n body: [\n 'You may find controls for creating something, reviewing activity, or performing another action unique to that page. If the corner is empty, there is nothing waiting for you there.',\n ],\n },\n];\n\n/** The three-mascot curtain-call lines. */\nexport const SITE_TOUR_CURTAIN_CALL_LINES: readonly SiteTourLine[] = [\n {\n speaker: 'bill',\n text: 'That is the whole house. You can revisit this tour from Help whenever you need it.',\n },\n { speaker: 'kit', text: 'Four stops. Barely an epic.' },\n { speaker: 'yorick', text: 'I still think we missed the refreshments.' },\n];\n\nexport const SITE_TOUR_TOTAL_STEPS = SITE_TOUR_STEPS.length;\n"]}
@@ -126,6 +126,12 @@ export declare const AuditionTypeSchema: z.ZodEnum<{
126
126
  workAudition: "workAudition";
127
127
  }>;
128
128
  export type AuditionType = z.infer<typeof AuditionTypeSchema>;
129
+ /** How an audition takes entries: anyone may reply (`open`), or the creating Work posts the options (`curated`). */
130
+ export declare const AuditionModeSchema: z.ZodEnum<{
131
+ open: "open";
132
+ curated: "curated";
133
+ }>;
134
+ export type AuditionMode = z.infer<typeof AuditionModeSchema>;
129
135
  export declare const AuditionSchema: z.ZodObject<{
130
136
  auditionId: z.ZodString;
131
137
  type: z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"commissions.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/commissions.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,0BAA0B;;;;;;;;;;iBAUrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2BtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAS1E,eAAO,MAAM,wCAAwC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMnD,CAAC;AACH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wCAAwC,CAAC,CAAC;AAE1G,eAAO,MAAM,kBAAkB;;;;EAAoE,CAAC;AACpG,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuDzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;iBAoB9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,sBAAsB;;;;;;iBAIjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"commissions.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/commissions.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,0BAA0B;;;;;;;;;;iBAUrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2BtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAS1E,eAAO,MAAM,wCAAwC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMnD,CAAC;AACH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wCAAwC,CAAC,CAAC;AAE1G,eAAO,MAAM,kBAAkB;;;;EAAoE,CAAC;AACpG,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,oHAAoH;AACpH,eAAO,MAAM,kBAAkB;;;EAA8B,CAAC;AAC9D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuDzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;iBAoB9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,sBAAsB;;;;;;iBAIjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -84,13 +84,15 @@ export const CreateCommissionProposalTextResultSchema = z.object({
84
84
  proposal: CommissionProposalSchema,
85
85
  });
86
86
  export const AuditionTypeSchema = z.enum(['platformAudition', 'sponsoredAudition', 'workAudition']);
87
+ /** How an audition takes entries: anyone may reply (`open`), or the creating Work posts the options (`curated`). */
88
+ export const AuditionModeSchema = z.enum(['open', 'curated']);
87
89
  export const AuditionSchema = z.object({
88
90
  auditionId: z.string(),
89
91
  type: AuditionTypeSchema,
90
92
  title: z.string(),
91
93
  description: z.string(),
92
94
  videoAssetId: z.string(),
93
- // Auditions are VIDEO ONLY (DJ ruling). Paired with the required videoAssetId (both
95
+ // Auditions are VIDEO ONLY. Paired with the required videoAssetId (both
94
96
  // always present — the MEDIA-101 shape, not a required-asset/optional-kind mismatch),
95
97
  // derived from the ONE canonical stored-kind union narrowed to video — never an inline
96
98
  // re-declared union (ARCH-102).
@@ -105,7 +107,7 @@ export const AuditionSchema = z.object({
105
107
  // Curated vs open. 'open' (default when absent — existing auditions): anyone may post reply
106
108
  // entries AND vote. 'curated': the creating work posts the option entries itself (min 2, max 8,
107
109
  // each `isCreatorOption: true`) and users may ONLY vote — community reply entries are rejected.
108
- mode: z.enum(['open', 'curated']).optional(),
110
+ mode: AuditionModeSchema.optional(),
109
111
  // Curated atomic-reveal state (only meaningful when mode === 'curated'). The prompt + all N option
110
112
  // videos upload as ONE fixed batch; the audition stays non-votable + off the public board until the
111
113
  // WHOLE batch is live and every video passed moderation:
@@ -145,7 +147,7 @@ export const AuditionEntrySchema = z.object({
145
147
  auditionId: z.string(),
146
148
  workProjectId: z.string().optional(),
147
149
  videoAssetId: z.string(),
148
- // Audition entries are VIDEO ONLY (DJ ruling) — same video-only pairing as the audition
150
+ // Audition entries are VIDEO ONLY — same video-only pairing as the audition
149
151
  // prompt above; derived from the canonical stored-kind union narrowed to video.
150
152
  mediaType: ContentMediaKindSchema.extract(['video']),
151
153
  createdBy: userRefSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"commissions.js","sourceRoot":"","sources":["../../src/doc-schemas/commissions.ts"],"names":[],"mappings":"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","sourcesContent":["// Commission + Audition Firestore document SCHEMAS — commissionListings/{id} and its\n// commissionProposals, auditionBoard/{id} and its auditionEntries, plus the per-user\n// auditionVotes doc. Types inferred via z.infer.\n\nimport { z } from 'zod';\nimport { CommissionProposalStatusSchema } from '../schemas/commissions.js';\nimport { stakeSharesOfferedSchema } from '../schemas/atoms.js';\nimport { AuditionDeadlineSchema } from '../constants/audition-deadlines.js';\nimport { ContentMediaKindSchema } from './media-assets.js';\nimport { ModerationHiddenBySchema } from './moderation.js';\n\nconst userRefSchema = z.object({ uid: z.string() });\n\nexport const CommissionAttachmentSchema = z.object({\n pendingMediaId: z.string().optional(),\n name: z.string(),\n mediaAssetId: z.string(),\n // The stored content kind (image/video/audio). Set once by the upload pipeline\n // (getSimplifiedMediaType) and written by the commissionListingMedia publication adapter\n // as z.enum(['image','video','audio']); derived here from the ONE canonical stored-kind\n // union (ARCH-102), never a widened `string`.\n type: ContentMediaKindSchema,\n size: z.number(),\n});\nexport type CommissionAttachment = z.infer<typeof CommissionAttachmentSchema>;\n\nexport const FullCommissionListingSchema = z.object({\n commissionListingId: z.string(),\n title: z.string(),\n description: z.string(),\n commissionAttachment: CommissionAttachmentSchema.optional(),\n requiredTradeProfessions: z.array(z.string()),\n stakeSharesOffered: stakeSharesOfferedSchema,\n createdAt: z.number(),\n createdBy: userRefSchema,\n // Work reference only — title/description are NOT snapshotted (Display Identity Invariant:\n // resolve at render from publicWorkProjects by id, fallback label if the work is gone).\n // `type` (Tales/Tunes/Television) is an immutable classification, not display text, and IS\n // consumed by a commission-board type filter/index, so it stays — mirroring the\n // GuildInviteConversation `workProject: { workProjectId, type }` precedent.\n workProjectAssociatedWith: z.object({\n workProjectId: z.string(),\n type: z.string(),\n }),\n status: z.enum(['open', 'closed']),\n closedAt: z.number().optional(), // set by the close write, together with status 'closed'\n savedProposalArtisans: z.array(z.string()),\n shortId: z.string().optional(),\n shortUrl: z.string().optional(),\n // Admin moderation hide (reversible). When true the listing is suppressed from\n // the commission board; restored by clearing it.\n hidden: z.boolean(),\n hiddenBy: ModerationHiddenBySchema.optional(),\n});\nexport type FullCommissionListing = z.infer<typeof FullCommissionListingSchema>;\n\nexport const CommissionProposalSchema = z.object({\n commissionProposalId: z.string(),\n commissionListingId: z.string(),\n workProjectId: z.string(),\n proposalText: z.string(),\n proposalFileAssetId: z.string().optional(),\n // The attached file's stored content kind, inspected by the upload pipeline — the same union\n // the listing attachment's `type` derives from (ARCH-102).\n proposalFileType: ContentMediaKindSchema.optional(),\n createdBy: userRefSchema,\n createdOn: z.number(),\n status: CommissionProposalStatusSchema,\n guildInviteId: z.string().optional(),\n invitedOn: z.number().optional(),\n acceptedOn: z.number().optional(),\n rejectedAt: z.number().optional(),\n // [EUAS-006] Admin moderation hide (reversible) — matches the listing/audition/entry pattern. When\n // true the proposal's TEXT is suppressed from the board (tombstoned for ordinary viewers); restored\n // by clearing it. Optional so existing/seeded proposals don't need backfilling pre-launch.\n hidden: z.boolean().optional(),\n hiddenBy: ModerationHiddenBySchema.optional(),\n});\nexport type CommissionProposal = z.infer<typeof CommissionProposalSchema>;\n\n// Authoritative result of the createCommissionProposalText callable — the created item,\n// exactly as the transaction committed it; the client seeds its proposal caches from this\n// instead of refetching. Declared HERE (not schemas/commissions.ts) because it composes\n// CommissionProposalSchema and this module already imports schemas/commissions.js\n// (CommissionProposalStatusSchema) — the reverse runtime import would be a module cycle.\n// Re-exported on the ./schemas subpath via schemas/index.ts. Non-strict (server → client\n// result posture).\nexport const CreateCommissionProposalTextResultSchema = z.object({\n success: z.literal(true),\n commissionListingId: z.string().min(1),\n commissionProposalId: z.string().min(1),\n /** The proposal doc exactly as committed. */\n proposal: CommissionProposalSchema,\n});\nexport type CreateCommissionProposalTextResult = z.infer<typeof CreateCommissionProposalTextResultSchema>;\n\nexport const AuditionTypeSchema = z.enum(['platformAudition', 'sponsoredAudition', 'workAudition']);\nexport type AuditionType = z.infer<typeof AuditionTypeSchema>;\n\nexport const AuditionSchema = z.object({\n auditionId: z.string(),\n type: AuditionTypeSchema,\n title: z.string(),\n description: z.string(),\n videoAssetId: z.string(),\n // Auditions are VIDEO ONLY (DJ ruling). Paired with the required videoAssetId (both\n // always present — the MEDIA-101 shape, not a required-asset/optional-kind mismatch),\n // derived from the ONE canonical stored-kind union narrowed to video — never an inline\n // re-declared union (ARCH-102).\n mediaType: ContentMediaKindSchema.extract(['video']),\n // The poster's two deadlines (epoch ms) — see constants/audition-deadlines.ts: entries are\n // in time when SUBMITTED before `entriesCloseAt`; votes are in time before `auditionCloseAt`.\n entriesCloseAt: AuditionDeadlineSchema,\n auditionCloseAt: AuditionDeadlineSchema,\n createdOn: z.number(),\n createdBy: userRefSchema,\n workProjectId: z.string().optional(),\n // Curated vs open. 'open' (default when absent — existing auditions): anyone may post reply\n // entries AND vote. 'curated': the creating work posts the option entries itself (min 2, max 8,\n // each `isCreatorOption: true`) and users may ONLY vote — community reply entries are rejected.\n mode: z.enum(['open', 'curated']).optional(),\n // Curated atomic-reveal state (only meaningful when mode === 'curated'). The prompt + all N option\n // videos upload as ONE fixed batch; the audition stays non-votable + off the public board until the\n // WHOLE batch is live and every video passed moderation:\n // 'assembling' — batch still processing/moderating; not votable, not on the board (status stays\n // 'pendingReview'), only the creator sees a \"preparing…\" state.\n // 'ready' — all N+1 landed and approved; the reveal flips status → 'open', or straight to\n // 'closed' when the audition's close has already passed. A curated audition\n // closed after its reveal keeps 'ready' (only its status changes).\n // 'failed' — any video in the batch was rejected by moderation, or the batch was still\n // assembling a day after creation; the whole audition fails. status stays\n // non-open; only the creator sees it (on the project page) to Edit & resubmit or\n // Discard.\n // 'closed' — the audition was closed (by its creator or an admin) while still\n // 'assembling', BEFORE any reveal; terminal, so an option video that finishes\n // afterwards lands silently and never reveals it.\n curatedAssemblyStatus: z.enum(['assembling', 'ready', 'failed', 'closed']).optional(),\n // The fixed number of creator option videos submitted at create-time (2..8). Used to know when the\n // whole batch has landed (all expected entries approved → reveal).\n expectedOptionCount: z.number().int().optional(),\n // Set when curatedAssemblyStatus === 'failed': which video was rejected, for the creator-only\n // failed-audition surface on the project page.\n curatedFailureReason: z.string().optional(),\n sponsoredAuditionAmountUSD: z.number().optional(),\n stakeSharesOffered: stakeSharesOfferedSchema.optional(),\n status: z.enum(['open', 'closed', 'pendingReview']),\n closedAt: z.number().optional(), // set by the close write, together with status 'closed'\n auditionEntryCount: z.number().optional(),\n shortId: z.string().optional(),\n shortUrl: z.string().optional(),\n // Admin moderation hide (reversible). When true the audition is suppressed from\n // the audition board; restored by clearing it.\n hidden: z.boolean(),\n hiddenBy: ModerationHiddenBySchema.optional(),\n});\nexport type Audition = z.infer<typeof AuditionSchema>;\n\nexport const AuditionEntrySchema = z.object({\n auditionEntryId: z.string(),\n auditionId: z.string(),\n workProjectId: z.string().optional(),\n videoAssetId: z.string(),\n // Audition entries are VIDEO ONLY (DJ ruling) — same video-only pairing as the audition\n // prompt above; derived from the canonical stored-kind union narrowed to video.\n mediaType: ContentMediaKindSchema.extract(['video']),\n createdBy: userRefSchema,\n createdAt: z.number(),\n votes: z.number(),\n shortId: z.string().optional(),\n shortUrl: z.string().optional(),\n // Curated-mode option: true when this entry is a work-authored voting option on a\n // `mode: 'curated'` audition (posted by the creating work at creation), not a community reply.\n isCreatorOption: z.boolean().optional(),\n // Admin moderation hide (reversible). When true the entry is suppressed from the\n // audition's entry list; restored by clearing it.\n hidden: z.boolean(),\n hiddenBy: ModerationHiddenBySchema.optional(),\n});\nexport type AuditionEntry = z.infer<typeof AuditionEntrySchema>;\n\nexport const UserAuditionVoteSchema = z.object({\n votedForAuditionEntryId: z.string(),\n votedOn: z.number(),\n auditionEntryArtisanCreator: userRefSchema,\n});\nexport type UserAuditionVote = z.infer<typeof UserAuditionVoteSchema>;\n"]}
1
+ {"version":3,"file":"commissions.js","sourceRoot":"","sources":["../../src/doc-schemas/commissions.ts"],"names":[],"mappings":"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","sourcesContent":["// Commission + Audition Firestore document SCHEMAS — commissionListings/{id} and its\n// commissionProposals, auditionBoard/{id} and its auditionEntries, plus the per-user\n// auditionVotes doc. Types inferred via z.infer.\n\nimport { z } from 'zod';\nimport { CommissionProposalStatusSchema } from '../schemas/commissions.js';\nimport { stakeSharesOfferedSchema } from '../schemas/atoms.js';\nimport { AuditionDeadlineSchema } from '../constants/audition-deadlines.js';\nimport { ContentMediaKindSchema } from './media-assets.js';\nimport { ModerationHiddenBySchema } from './moderation.js';\n\nconst userRefSchema = z.object({ uid: z.string() });\n\nexport const CommissionAttachmentSchema = z.object({\n pendingMediaId: z.string().optional(),\n name: z.string(),\n mediaAssetId: z.string(),\n // The stored content kind (image/video/audio). Set once by the upload pipeline\n // (getSimplifiedMediaType) and written by the commissionListingMedia publication adapter\n // as z.enum(['image','video','audio']); derived here from the ONE canonical stored-kind\n // union (ARCH-102), never a widened `string`.\n type: ContentMediaKindSchema,\n size: z.number(),\n});\nexport type CommissionAttachment = z.infer<typeof CommissionAttachmentSchema>;\n\nexport const FullCommissionListingSchema = z.object({\n commissionListingId: z.string(),\n title: z.string(),\n description: z.string(),\n commissionAttachment: CommissionAttachmentSchema.optional(),\n requiredTradeProfessions: z.array(z.string()),\n stakeSharesOffered: stakeSharesOfferedSchema,\n createdAt: z.number(),\n createdBy: userRefSchema,\n // Work reference only — title/description are NOT snapshotted (Display Identity Invariant:\n // resolve at render from publicWorkProjects by id, fallback label if the work is gone).\n // `type` (Tales/Tunes/Television) is an immutable classification, not display text, and IS\n // consumed by a commission-board type filter/index, so it stays — mirroring the\n // GuildInviteConversation `workProject: { workProjectId, type }` precedent.\n workProjectAssociatedWith: z.object({\n workProjectId: z.string(),\n type: z.string(),\n }),\n status: z.enum(['open', 'closed']),\n closedAt: z.number().optional(), // set by the close write, together with status 'closed'\n savedProposalArtisans: z.array(z.string()),\n shortId: z.string().optional(),\n shortUrl: z.string().optional(),\n // Admin moderation hide (reversible). When true the listing is suppressed from\n // the commission board; restored by clearing it.\n hidden: z.boolean(),\n hiddenBy: ModerationHiddenBySchema.optional(),\n});\nexport type FullCommissionListing = z.infer<typeof FullCommissionListingSchema>;\n\nexport const CommissionProposalSchema = z.object({\n commissionProposalId: z.string(),\n commissionListingId: z.string(),\n workProjectId: z.string(),\n proposalText: z.string(),\n proposalFileAssetId: z.string().optional(),\n // The attached file's stored content kind, inspected by the upload pipeline — the same union\n // the listing attachment's `type` derives from (ARCH-102).\n proposalFileType: ContentMediaKindSchema.optional(),\n createdBy: userRefSchema,\n createdOn: z.number(),\n status: CommissionProposalStatusSchema,\n guildInviteId: z.string().optional(),\n invitedOn: z.number().optional(),\n acceptedOn: z.number().optional(),\n rejectedAt: z.number().optional(),\n // [EUAS-006] Admin moderation hide (reversible) — matches the listing/audition/entry pattern. When\n // true the proposal's TEXT is suppressed from the board (tombstoned for ordinary viewers); restored\n // by clearing it. Optional so existing/seeded proposals don't need backfilling pre-launch.\n hidden: z.boolean().optional(),\n hiddenBy: ModerationHiddenBySchema.optional(),\n});\nexport type CommissionProposal = z.infer<typeof CommissionProposalSchema>;\n\n// Authoritative result of the createCommissionProposalText callable — the created item,\n// exactly as the transaction committed it; the client seeds its proposal caches from this\n// instead of refetching. Declared HERE (not schemas/commissions.ts) because it composes\n// CommissionProposalSchema and this module already imports schemas/commissions.js\n// (CommissionProposalStatusSchema) — the reverse runtime import would be a module cycle.\n// Re-exported on the ./schemas subpath via schemas/index.ts. Non-strict (server → client\n// result posture).\nexport const CreateCommissionProposalTextResultSchema = z.object({\n success: z.literal(true),\n commissionListingId: z.string().min(1),\n commissionProposalId: z.string().min(1),\n /** The proposal doc exactly as committed. */\n proposal: CommissionProposalSchema,\n});\nexport type CreateCommissionProposalTextResult = z.infer<typeof CreateCommissionProposalTextResultSchema>;\n\nexport const AuditionTypeSchema = z.enum(['platformAudition', 'sponsoredAudition', 'workAudition']);\nexport type AuditionType = z.infer<typeof AuditionTypeSchema>;\n\n/** How an audition takes entries: anyone may reply (`open`), or the creating Work posts the options (`curated`). */\nexport const AuditionModeSchema = z.enum(['open', 'curated']);\nexport type AuditionMode = z.infer<typeof AuditionModeSchema>;\n\nexport const AuditionSchema = z.object({\n auditionId: z.string(),\n type: AuditionTypeSchema,\n title: z.string(),\n description: z.string(),\n videoAssetId: z.string(),\n // Auditions are VIDEO ONLY. Paired with the required videoAssetId (both\n // always present — the MEDIA-101 shape, not a required-asset/optional-kind mismatch),\n // derived from the ONE canonical stored-kind union narrowed to video — never an inline\n // re-declared union (ARCH-102).\n mediaType: ContentMediaKindSchema.extract(['video']),\n // The poster's two deadlines (epoch ms) — see constants/audition-deadlines.ts: entries are\n // in time when SUBMITTED before `entriesCloseAt`; votes are in time before `auditionCloseAt`.\n entriesCloseAt: AuditionDeadlineSchema,\n auditionCloseAt: AuditionDeadlineSchema,\n createdOn: z.number(),\n createdBy: userRefSchema,\n workProjectId: z.string().optional(),\n // Curated vs open. 'open' (default when absent — existing auditions): anyone may post reply\n // entries AND vote. 'curated': the creating work posts the option entries itself (min 2, max 8,\n // each `isCreatorOption: true`) and users may ONLY vote — community reply entries are rejected.\n mode: AuditionModeSchema.optional(),\n // Curated atomic-reveal state (only meaningful when mode === 'curated'). The prompt + all N option\n // videos upload as ONE fixed batch; the audition stays non-votable + off the public board until the\n // WHOLE batch is live and every video passed moderation:\n // 'assembling' — batch still processing/moderating; not votable, not on the board (status stays\n // 'pendingReview'), only the creator sees a \"preparing…\" state.\n // 'ready' — all N+1 landed and approved; the reveal flips status → 'open', or straight to\n // 'closed' when the audition's close has already passed. A curated audition\n // closed after its reveal keeps 'ready' (only its status changes).\n // 'failed' — any video in the batch was rejected by moderation, or the batch was still\n // assembling a day after creation; the whole audition fails. status stays\n // non-open; only the creator sees it (on the project page) to Edit & resubmit or\n // Discard.\n // 'closed' — the audition was closed (by its creator or an admin) while still\n // 'assembling', BEFORE any reveal; terminal, so an option video that finishes\n // afterwards lands silently and never reveals it.\n curatedAssemblyStatus: z.enum(['assembling', 'ready', 'failed', 'closed']).optional(),\n // The fixed number of creator option videos submitted at create-time (2..8). Used to know when the\n // whole batch has landed (all expected entries approved → reveal).\n expectedOptionCount: z.number().int().optional(),\n // Set when curatedAssemblyStatus === 'failed': which video was rejected, for the creator-only\n // failed-audition surface on the project page.\n curatedFailureReason: z.string().optional(),\n sponsoredAuditionAmountUSD: z.number().optional(),\n stakeSharesOffered: stakeSharesOfferedSchema.optional(),\n status: z.enum(['open', 'closed', 'pendingReview']),\n closedAt: z.number().optional(), // set by the close write, together with status 'closed'\n auditionEntryCount: z.number().optional(),\n shortId: z.string().optional(),\n shortUrl: z.string().optional(),\n // Admin moderation hide (reversible). When true the audition is suppressed from\n // the audition board; restored by clearing it.\n hidden: z.boolean(),\n hiddenBy: ModerationHiddenBySchema.optional(),\n});\nexport type Audition = z.infer<typeof AuditionSchema>;\n\nexport const AuditionEntrySchema = z.object({\n auditionEntryId: z.string(),\n auditionId: z.string(),\n workProjectId: z.string().optional(),\n videoAssetId: z.string(),\n // Audition entries are VIDEO ONLY — same video-only pairing as the audition\n // prompt above; derived from the canonical stored-kind union narrowed to video.\n mediaType: ContentMediaKindSchema.extract(['video']),\n createdBy: userRefSchema,\n createdAt: z.number(),\n votes: z.number(),\n shortId: z.string().optional(),\n shortUrl: z.string().optional(),\n // Curated-mode option: true when this entry is a work-authored voting option on a\n // `mode: 'curated'` audition (posted by the creating work at creation), not a community reply.\n isCreatorOption: z.boolean().optional(),\n // Admin moderation hide (reversible). When true the entry is suppressed from the\n // audition's entry list; restored by clearing it.\n hidden: z.boolean(),\n hiddenBy: ModerationHiddenBySchema.optional(),\n});\nexport type AuditionEntry = z.infer<typeof AuditionEntrySchema>;\n\nexport const UserAuditionVoteSchema = z.object({\n votedForAuditionEntryId: z.string(),\n votedOn: z.number(),\n auditionEntryArtisanCreator: userRefSchema,\n});\nexport type UserAuditionVote = z.infer<typeof UserAuditionVoteSchema>;\n"]}
@@ -63,12 +63,16 @@ export declare const MediaVariantKeySchema: z.ZodEnum<{
63
63
  main: "main";
64
64
  }>;
65
65
  export type MediaVariantKey = z.infer<typeof MediaVariantKeySchema>;
66
- /** Why this asset was created from its source (A0).
66
+ /** The sizes a profile picture is produced in (`TTT_MEDIA_SPECS['profile-picture']`), largest first. */
67
+ export declare const PROFILE_PICTURE_VARIANT_KEYS: readonly ["full", "medium", "small"];
68
+ export type ProfilePictureVariantKey = (typeof PROFILE_PICTURE_VARIANT_KEYS)[number];
69
+ /** Which variant renders a stored image as a single display: the largest servable one. An image
70
+ * origin carries exactly one of `main` / `full`; a profile picture adds the smaller sizes. */
71
+ export declare const MEDIA_DISPLAY_VARIANT_PRECEDENCE: readonly ["main", "full", "medium", "small"];
72
+ /** Why this asset was created from its source.
67
73
  *
68
- * `chat_derivative` was REMOVED with the chat-attachment architecture: chat is
69
- * text-only and owns no media, so no copy can be made "for a chat message". A
70
- * Conversation File is an ORIGINAL (`original`), never a chat derivative; nothing
71
- * ever set the retired value. */
74
+ * Chat is text-only and owns no media, so no copy is ever made for a chat message. A
75
+ * Conversation File is an ORIGINAL (`original`), never a derivative. */
72
76
  export declare const MediaCopyReasonSchema: z.ZodEnum<{
73
77
  original: "original";
74
78
  variant: "variant";
@@ -80,7 +84,7 @@ export declare const MediaCopyReasonSchema: z.ZodEnum<{
80
84
  }>;
81
85
  export type MediaCopyReason = z.infer<typeof MediaCopyReasonSchema>;
82
86
  /**
83
- * Canonical media origin lineage (Appendix A0). A copy INHERITS
87
+ * Canonical media origin lineage. A copy INHERITS
84
88
  * rootIngestId/rootAssetId/originatingUploaderUid/originatingUploadEventId/
85
89
  * originalUploadCreatedAt/rootSha256/originalSha256 unchanged; it sets its own
86
90
  * sourceAssetId/variantSha256s/copyReason/copyActorUid/currentOwner*. Client
@@ -599,6 +603,103 @@ export declare const MediaAssetSchema: z.ZodObject<{
599
603
  updatedAt: z.ZodNumber;
600
604
  }, z.core.$strict>;
601
605
  export type MediaAsset = z.infer<typeof MediaAssetSchema>;
606
+ /** What the Hall-media orphan reaper's asset phase reads of a candidate asset. */
607
+ export declare const MediaAssetReapCandidateSchema: z.ZodObject<{
608
+ mediaAssetId: z.ZodString;
609
+ ownerId: z.ZodString;
610
+ createdAt: z.ZodNumber;
611
+ publicationState: z.ZodOptional<z.ZodEnum<{
612
+ unpublished: "unpublished";
613
+ published: "published";
614
+ retired: "retired";
615
+ }>>;
616
+ retirement: z.ZodOptional<z.ZodObject<{
617
+ requestedAt: z.ZodNumber;
618
+ pendingVariantKeys: z.ZodArray<z.ZodString>;
619
+ attemptCount: z.ZodNumber;
620
+ nextAttemptAt: z.ZodNumber;
621
+ lastDeferral: z.ZodOptional<z.ZodEnum<{
622
+ failed: "failed";
623
+ held: "held";
624
+ }>>;
625
+ lastError: z.ZodOptional<z.ZodObject<{
626
+ code: z.ZodString;
627
+ message: z.ZodString;
628
+ retryable: z.ZodOptional<z.ZodBoolean>;
629
+ details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
630
+ at: z.ZodOptional<z.ZodNumber>;
631
+ }, z.core.$strict>>;
632
+ }, z.core.$strict>>;
633
+ }, z.core.$strip>;
634
+ export type MediaAssetReapCandidate = z.infer<typeof MediaAssetReapCandidateSchema>;
635
+ /** What a copy's safety-hold check reads of its source asset. */
636
+ export declare const MediaAssetCopySourceHoldFieldsSchema: z.ZodObject<{
637
+ mediaAssetId: z.ZodString;
638
+ originLineage: z.ZodOptional<z.ZodObject<{
639
+ lineageVersion: z.ZodLiteral<1>;
640
+ rootIngestId: z.ZodString;
641
+ rootAssetId: z.ZodString;
642
+ sourceAssetId: z.ZodOptional<z.ZodString>;
643
+ originatingUploaderUid: z.ZodString;
644
+ originatingUploadEventId: z.ZodString;
645
+ originalUploadCreatedAt: z.ZodNumber;
646
+ rootSha256: z.ZodString;
647
+ originalSha256: z.ZodOptional<z.ZodString>;
648
+ variantSha256s: z.ZodRecord<z.ZodEnum<{
649
+ full: "full";
650
+ small: "small";
651
+ poster: "poster";
652
+ medium: "medium";
653
+ main: "main";
654
+ }> & z.core.$partial, z.ZodString>;
655
+ copyReason: z.ZodEnum<{
656
+ original: "original";
657
+ variant: "variant";
658
+ hall_publish: "hall_publish";
659
+ profile_derivative: "profile_derivative";
660
+ moderation_copy: "moderation_copy";
661
+ evidence_copy: "evidence_copy";
662
+ other: "other";
663
+ }>;
664
+ createdFromOwnerType: z.ZodOptional<z.ZodEnum<{
665
+ workProject: "workProject";
666
+ audition: "audition";
667
+ hallItem: "hallItem";
668
+ craftSkill: "craftSkill";
669
+ commissionListing: "commissionListing";
670
+ commissionProposal: "commissionProposal";
671
+ auditionEntry: "auditionEntry";
672
+ conversationFile: "conversationFile";
673
+ userProfile: "userProfile";
674
+ squareStreetzPost: "squareStreetzPost";
675
+ workContent: "workContent";
676
+ realmFile: "realmFile";
677
+ safetyEvidence: "safetyEvidence";
678
+ systemContent: "systemContent";
679
+ }>>;
680
+ createdFromOwnerId: z.ZodOptional<z.ZodString>;
681
+ copyActorUid: z.ZodOptional<z.ZodString>;
682
+ currentOwnerType: z.ZodEnum<{
683
+ workProject: "workProject";
684
+ audition: "audition";
685
+ hallItem: "hallItem";
686
+ craftSkill: "craftSkill";
687
+ commissionListing: "commissionListing";
688
+ commissionProposal: "commissionProposal";
689
+ auditionEntry: "auditionEntry";
690
+ conversationFile: "conversationFile";
691
+ userProfile: "userProfile";
692
+ squareStreetzPost: "squareStreetzPost";
693
+ workContent: "workContent";
694
+ realmFile: "realmFile";
695
+ safetyEvidence: "safetyEvidence";
696
+ systemContent: "systemContent";
697
+ }>;
698
+ currentOwnerId: z.ZodString;
699
+ }, z.core.$strict>>;
700
+ legalHold: z.ZodBoolean;
701
+ }, z.core.$strip>;
702
+ export type MediaAssetCopySourceHoldFields = z.infer<typeof MediaAssetCopySourceHoldFieldsSchema>;
602
703
  /**
603
704
  * Where an asset stands on retirement — the one reading a caller that must not delete a record
604
705
  * naming media before its media is gone (account erasure) decides from: `absent` (no asset doc),
@@ -1 +1 @@
1
- {"version":3,"file":"media-assets.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/media-assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media-assets.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/media-assets.ts"],"names":[],"mappings":"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"}