@ttt-productions/ttt-core 0.79.105 → 0.79.106

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 (64) hide show
  1. package/dist/constants/craft-skill-statements.d.ts +1 -1
  2. package/dist/constants/craft-skill-statements.js +4 -4
  3. package/dist/constants/craft-skill-statements.js.map +1 -1
  4. package/dist/constants/index.d.ts +1 -0
  5. package/dist/constants/index.d.ts.map +1 -1
  6. package/dist/constants/index.js +1 -0
  7. package/dist/constants/index.js.map +1 -1
  8. package/dist/constants/legal-review-notice-state.d.ts +1 -1
  9. package/dist/constants/legal-review-notice-state.js +1 -1
  10. package/dist/constants/legal-review-notice-state.js.map +1 -1
  11. package/dist/constants/legal-review-notice.d.ts.map +1 -1
  12. package/dist/constants/legal-review-notice.js +21 -19
  13. package/dist/constants/legal-review-notice.js.map +1 -1
  14. package/dist/constants/member-agreements.d.ts +39 -0
  15. package/dist/constants/member-agreements.d.ts.map +1 -0
  16. package/dist/constants/member-agreements.js +102 -0
  17. package/dist/constants/member-agreements.js.map +1 -0
  18. package/dist/constants/publish-attestations.d.ts +6 -0
  19. package/dist/constants/publish-attestations.d.ts.map +1 -1
  20. package/dist/constants/publish-attestations.js +12 -5
  21. package/dist/constants/publish-attestations.js.map +1 -1
  22. package/dist/doc-schemas/content.d.ts +2 -1
  23. package/dist/doc-schemas/content.d.ts.map +1 -1
  24. package/dist/doc-schemas/content.js +12 -12
  25. package/dist/doc-schemas/content.js.map +1 -1
  26. package/dist/doc-schemas/ncii/requests.d.ts +9 -0
  27. package/dist/doc-schemas/ncii/requests.d.ts.map +1 -1
  28. package/dist/doc-schemas/ncii/requests.js +8 -0
  29. package/dist/doc-schemas/ncii/requests.js.map +1 -1
  30. package/dist/doc-schemas/payments.d.ts +1 -0
  31. package/dist/doc-schemas/payments.d.ts.map +1 -1
  32. package/dist/doc-schemas/payments.js +2 -0
  33. package/dist/doc-schemas/payments.js.map +1 -1
  34. package/dist/doc-schemas/registry.d.ts +7 -4
  35. package/dist/doc-schemas/registry.d.ts.map +1 -1
  36. package/dist/doc-schemas/user.d.ts +7 -8
  37. package/dist/doc-schemas/user.d.ts.map +1 -1
  38. package/dist/doc-schemas/user.js +15 -10
  39. package/dist/doc-schemas/user.js.map +1 -1
  40. package/dist/media/edge-serving-contract.d.ts +9 -0
  41. package/dist/media/edge-serving-contract.d.ts.map +1 -1
  42. package/dist/media/edge-serving-contract.js +16 -7
  43. package/dist/media/edge-serving-contract.js.map +1 -1
  44. package/dist/schemas/hall-library.d.ts +1 -0
  45. package/dist/schemas/hall-library.d.ts.map +1 -1
  46. package/dist/schemas/hall-library.js +3 -0
  47. package/dist/schemas/hall-library.js.map +1 -1
  48. package/dist/schemas/payments.d.ts +1 -0
  49. package/dist/schemas/payments.d.ts.map +1 -1
  50. package/dist/schemas/payments.js +3 -0
  51. package/dist/schemas/payments.js.map +1 -1
  52. package/dist/schemas/safety.d.ts +612 -100
  53. package/dist/schemas/safety.d.ts.map +1 -1
  54. package/dist/schemas/safety.js +101 -18
  55. package/dist/schemas/safety.js.map +1 -1
  56. package/dist/schemas/users.d.ts +25 -8
  57. package/dist/schemas/users.d.ts.map +1 -1
  58. package/dist/schemas/users.js +38 -22
  59. package/dist/schemas/users.js.map +1 -1
  60. package/dist/schemas/work-project-management.d.ts +1 -0
  61. package/dist/schemas/work-project-management.d.ts.map +1 -1
  62. package/dist/schemas/work-project-management.js +4 -0
  63. package/dist/schemas/work-project-management.js.map +1 -1
  64. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import type { CraftSkillKind } from '../doc-schemas/user.js';
2
2
  /** Bump when any VERBATIM statement below changes; the version is recorded on every
3
3
  * craft-skill doc so we know which wording the user agreed to. */
4
- export declare const CRAFT_SKILL_STATEMENT_VERSION = 1;
4
+ export declare const CRAFT_SKILL_STATEMENT_VERSION = 2;
5
5
  export declare const CRAFT_SKILL_KIND_LABELS: Record<CraftSkillKind, string>;
6
6
  /** One-line helper shown under each kind option in the picker. */
7
7
  export declare const CRAFT_SKILL_KIND_DESCRIPTIONS: Record<CraftSkillKind, string>;
@@ -8,7 +8,7 @@
8
8
  // ============================================================================
9
9
  /** Bump when any VERBATIM statement below changes; the version is recorded on every
10
10
  * craft-skill doc so we know which wording the user agreed to. */
11
- export const CRAFT_SKILL_STATEMENT_VERSION = 1;
11
+ export const CRAFT_SKILL_STATEMENT_VERSION = 2;
12
12
  export const CRAFT_SKILL_KIND_LABELS = {
13
13
  original: 'My own work',
14
14
  mimicOnTtt: 'Mimicked work from TTT Productions',
@@ -21,9 +21,9 @@ export const CRAFT_SKILL_KIND_DESCRIPTIONS = {
21
21
  mimicOffTtt: 'A cover or recreation of work from outside TTT (including public-domain works).',
22
22
  };
23
23
  export const CRAFT_SKILL_STATEMENTS = {
24
- original: 'I certify this craft skill is entirely my own original creation and I own all rights to it. No part of it copies or imitates another person’s work.',
25
- mimicOnTtt: 'This craft skill is my performance or recreation of work created by a member of the TTT Productions community, shown here to demonstrate my abilities. I have linked the original artisan or work below. The original work belongs to its creator, and I claim no ownership of it.',
26
- mimicOffTtt: 'This craft skill is my performance or recreation of a work that did not originate on TTT Productions (including public-domain or out-of-copyright works), shown only to demonstrate my abilities. The underlying work belongs to its owner, and I claim no ownership of it. I understand TTT Productions may remove this content at any time, including in response to a rights-holder request.',
24
+ original: 'I certify this craft is entirely my own original creation and I own all rights to it. No part of it copies or imitates another person’s work.',
25
+ mimicOnTtt: 'This craft is my performance or recreation of work created by a member of the TTT Productions community, shown here to demonstrate my abilities. I have linked the original artisan or work below. The original work belongs to its creator, and I claim no ownership of it.',
26
+ mimicOffTtt: 'This craft is my performance or recreation of a work that did not originate on TTT Productions (including public-domain or out-of-copyright works), shown only to demonstrate my abilities. The underlying work belongs to its owner, and I claim no ownership of it. I understand TTT Productions may remove this content at any time, including in response to a rights-holder request.',
27
27
  };
28
28
  export const CRAFT_SKILL_KIND_ORDER = ['original', 'mimicOnTtt', 'mimicOffTtt'];
29
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"craft-skill-statements.js","sourceRoot":"","sources":["../../src/constants/craft-skill-statements.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,0EAA0E;AAC1E,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AAC3E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAI/E;kEACkE;AAClE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAAmC;IACrE,QAAQ,EAAE,aAAa;IACvB,UAAU,EAAE,oCAAoC;IAChD,WAAW,EAAE,4CAA4C;CAC1D,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,6BAA6B,GAAmC;IAC3E,QAAQ,EAAE,sCAAsC;IAChD,UAAU,EAAE,gFAAgF;IAC5F,WAAW,EAAE,iFAAiF;CAC/F,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAmC;IACpE,QAAQ,EACN,qJAAqJ;IACvJ,UAAU,EACR,oRAAoR;IACtR,WAAW,EACT,iYAAiY;CACpY,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAqB,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AAElG;;;GAGG;AACH,MAAM,CAAC,MAAM,6CAA6C,GACxD,sJAAsJ,CAAC;AAEzJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACnD,WAAW,EAAE,6CAA6C;CACA,CAAC;AAK7D,0FAA0F;AAC1F,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAClD,qCAAqC,CACF,CAAC;AAEtC,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CAAC,IAAoB;IAC1D,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;AAC3F,CAAC","sourcesContent":["// ============================================================================\n// CRAFT-SKILL ATTESTATION — the ONE home for the three-kind upload flow's\n// statement version, VERBATIM agreement statements, kind labels/descriptions,\n// picker order, and the refusal copy for a kind that is not available yet. The\n// client displays these and the user must explicitly agree before the file\n// picker unlocks; the backend records only `{ statementKind, statementVersion,\n// agreedAt }` and validates the version against CRAFT_SKILL_STATEMENT_VERSION.\n// ============================================================================\n\nimport type { CraftSkillKind } from '../doc-schemas/user.js';\n\n/** Bump when any VERBATIM statement below changes; the version is recorded on every\n * craft-skill doc so we know which wording the user agreed to. */\nexport const CRAFT_SKILL_STATEMENT_VERSION = 1;\n\nexport const CRAFT_SKILL_KIND_LABELS: Record<CraftSkillKind, string> = {\n original: 'My own work',\n mimicOnTtt: 'Mimicked work from TTT Productions',\n mimicOffTtt: 'Mimicked work from outside TTT Productions',\n};\n\n/** One-line helper shown under each kind option in the picker. */\nexport const CRAFT_SKILL_KIND_DESCRIPTIONS: Record<CraftSkillKind, string> = {\n original: 'Entirely your own original creation.',\n mimicOnTtt: 'Your performance or recreation of another member’s TTT work (link the source).',\n mimicOffTtt: 'A cover or recreation of work from outside TTT (including public-domain works).',\n};\n\nexport const CRAFT_SKILL_STATEMENTS: Record<CraftSkillKind, string> = {\n original:\n 'I certify this craft skill is entirely my own original creation and I own all rights to it. No part of it copies or imitates another person’s work.',\n mimicOnTtt:\n 'This craft skill is my performance or recreation of work created by a member of the TTT Productions community, shown here to demonstrate my abilities. I have linked the original artisan or work below. The original work belongs to its creator, and I claim no ownership of it.',\n mimicOffTtt:\n 'This craft skill is my performance or recreation of a work that did not originate on TTT Productions (including public-domain or out-of-copyright works), shown only to demonstrate my abilities. The underlying work belongs to its owner, and I claim no ownership of it. I understand TTT Productions may remove this content at any time, including in response to a rights-holder request.',\n};\n\nexport const CRAFT_SKILL_KIND_ORDER: CraftSkillKind[] = ['original', 'mimicOnTtt', 'mimicOffTtt'];\n\n/**\n * Why \"Mimicked work from outside TTT Productions\" cannot be chosen yet: the picker shows it\n * when a person selects that kind, and the upload callable refuses the kind with the same words.\n */\nexport const CRAFT_SKILL_MIMIC_OFF_TTT_UNAVAILABLE_MESSAGE =\n \"This option isn't allowed yet. Sharing covers or recreations of work from outside TTT stays off until I've talked with a lawyer and gotten approval.\";\n\n/**\n * The ONE owner of which craft kinds are blocked at launch, with each one's refusal copy. A\n * blocked kind still renders in the picker (so people see it is coming) but selecting it stops\n * the flow with this copy, and the upload callable refuses it with the same words. Unblocking a\n * kind is removing its entry here.\n */\nexport const CRAFT_SKILL_KIND_UNAVAILABLE_MESSAGES = {\n mimicOffTtt: CRAFT_SKILL_MIMIC_OFF_TTT_UNAVAILABLE_MESSAGE,\n} as const satisfies Partial<Record<CraftSkillKind, string>>;\n\n/** A craft kind that is blocked at launch. */\nexport type BlockedCraftSkillKind = keyof typeof CRAFT_SKILL_KIND_UNAVAILABLE_MESSAGES;\n\n/** Every craft kind blocked at launch — derived from the refusal copy, never restated. */\nexport const BLOCKED_CRAFT_SKILL_KINDS = Object.keys(\n CRAFT_SKILL_KIND_UNAVAILABLE_MESSAGES,\n) as readonly BlockedCraftSkillKind[];\n\n/** True when `kind` is blocked at launch; narrows it to index its refusal copy. */\nexport function isBlockedCraftSkillKind(kind: CraftSkillKind): kind is BlockedCraftSkillKind {\n return Object.prototype.hasOwnProperty.call(CRAFT_SKILL_KIND_UNAVAILABLE_MESSAGES, kind);\n}\n"]}
1
+ {"version":3,"file":"craft-skill-statements.js","sourceRoot":"","sources":["../../src/constants/craft-skill-statements.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,0EAA0E;AAC1E,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AAC3E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAI/E;kEACkE;AAClE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAAmC;IACrE,QAAQ,EAAE,aAAa;IACvB,UAAU,EAAE,oCAAoC;IAChD,WAAW,EAAE,4CAA4C;CAC1D,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,6BAA6B,GAAmC;IAC3E,QAAQ,EAAE,sCAAsC;IAChD,UAAU,EAAE,gFAAgF;IAC5F,WAAW,EAAE,iFAAiF;CAC/F,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAmC;IACpE,QAAQ,EACN,+IAA+I;IACjJ,UAAU,EACR,8QAA8Q;IAChR,WAAW,EACT,2XAA2X;CAC9X,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAqB,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AAElG;;;GAGG;AACH,MAAM,CAAC,MAAM,6CAA6C,GACxD,sJAAsJ,CAAC;AAEzJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACnD,WAAW,EAAE,6CAA6C;CACA,CAAC;AAK7D,0FAA0F;AAC1F,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAClD,qCAAqC,CACF,CAAC;AAEtC,mFAAmF;AACnF,MAAM,UAAU,uBAAuB,CAAC,IAAoB;IAC1D,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;AAC3F,CAAC","sourcesContent":["// ============================================================================\n// CRAFT-SKILL ATTESTATION — the ONE home for the three-kind upload flow's\n// statement version, VERBATIM agreement statements, kind labels/descriptions,\n// picker order, and the refusal copy for a kind that is not available yet. The\n// client displays these and the user must explicitly agree before the file\n// picker unlocks; the backend records only `{ statementKind, statementVersion,\n// agreedAt }` and validates the version against CRAFT_SKILL_STATEMENT_VERSION.\n// ============================================================================\n\nimport type { CraftSkillKind } from '../doc-schemas/user.js';\n\n/** Bump when any VERBATIM statement below changes; the version is recorded on every\n * craft-skill doc so we know which wording the user agreed to. */\nexport const CRAFT_SKILL_STATEMENT_VERSION = 2;\n\nexport const CRAFT_SKILL_KIND_LABELS: Record<CraftSkillKind, string> = {\n original: 'My own work',\n mimicOnTtt: 'Mimicked work from TTT Productions',\n mimicOffTtt: 'Mimicked work from outside TTT Productions',\n};\n\n/** One-line helper shown under each kind option in the picker. */\nexport const CRAFT_SKILL_KIND_DESCRIPTIONS: Record<CraftSkillKind, string> = {\n original: 'Entirely your own original creation.',\n mimicOnTtt: 'Your performance or recreation of another member’s TTT work (link the source).',\n mimicOffTtt: 'A cover or recreation of work from outside TTT (including public-domain works).',\n};\n\nexport const CRAFT_SKILL_STATEMENTS: Record<CraftSkillKind, string> = {\n original:\n 'I certify this craft is entirely my own original creation and I own all rights to it. No part of it copies or imitates another person’s work.',\n mimicOnTtt:\n 'This craft is my performance or recreation of work created by a member of the TTT Productions community, shown here to demonstrate my abilities. I have linked the original artisan or work below. The original work belongs to its creator, and I claim no ownership of it.',\n mimicOffTtt:\n 'This craft is my performance or recreation of a work that did not originate on TTT Productions (including public-domain or out-of-copyright works), shown only to demonstrate my abilities. The underlying work belongs to its owner, and I claim no ownership of it. I understand TTT Productions may remove this content at any time, including in response to a rights-holder request.',\n};\n\nexport const CRAFT_SKILL_KIND_ORDER: CraftSkillKind[] = ['original', 'mimicOnTtt', 'mimicOffTtt'];\n\n/**\n * Why \"Mimicked work from outside TTT Productions\" cannot be chosen yet: the picker shows it\n * when a person selects that kind, and the upload callable refuses the kind with the same words.\n */\nexport const CRAFT_SKILL_MIMIC_OFF_TTT_UNAVAILABLE_MESSAGE =\n \"This option isn't allowed yet. Sharing covers or recreations of work from outside TTT stays off until I've talked with a lawyer and gotten approval.\";\n\n/**\n * The ONE owner of which craft kinds are blocked at launch, with each one's refusal copy. A\n * blocked kind still renders in the picker (so people see it is coming) but selecting it stops\n * the flow with this copy, and the upload callable refuses it with the same words. Unblocking a\n * kind is removing its entry here.\n */\nexport const CRAFT_SKILL_KIND_UNAVAILABLE_MESSAGES = {\n mimicOffTtt: CRAFT_SKILL_MIMIC_OFF_TTT_UNAVAILABLE_MESSAGE,\n} as const satisfies Partial<Record<CraftSkillKind, string>>;\n\n/** A craft kind that is blocked at launch. */\nexport type BlockedCraftSkillKind = keyof typeof CRAFT_SKILL_KIND_UNAVAILABLE_MESSAGES;\n\n/** Every craft kind blocked at launch — derived from the refusal copy, never restated. */\nexport const BLOCKED_CRAFT_SKILL_KINDS = Object.keys(\n CRAFT_SKILL_KIND_UNAVAILABLE_MESSAGES,\n) as readonly BlockedCraftSkillKind[];\n\n/** True when `kind` is blocked at launch; narrows it to index its refusal copy. */\nexport function isBlockedCraftSkillKind(kind: CraftSkillKind): kind is BlockedCraftSkillKind {\n return Object.prototype.hasOwnProperty.call(CRAFT_SKILL_KIND_UNAVAILABLE_MESSAGES, kind);\n}\n"]}
@@ -15,6 +15,7 @@ export * from './admin-labels.js';
15
15
  export * from './craft-skill-statements.js';
16
16
  export * from './publish-attestations.js';
17
17
  export * from './pledge-and-bouquet-copy.js';
18
+ export * from './member-agreements.js';
18
19
  export * from './public-documents.js';
19
20
  export * from './admin-claims.js';
20
21
  export * from './legal-review-notice-state.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
@@ -15,6 +15,7 @@ export * from './admin-labels.js';
15
15
  export * from './craft-skill-statements.js';
16
16
  export * from './publish-attestations.js';
17
17
  export * from './pledge-and-bouquet-copy.js';
18
+ export * from './member-agreements.js';
18
19
  export * from './public-documents.js';
19
20
  export * from './admin-claims.js';
20
21
  export * from './legal-review-notice-state.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC","sourcesContent":["export * from './analytics.js';\nexport * from './app-mode.js';\nexport * from './business-work-project.js';\nexport * from './business-content.js';\nexport * from './business-admin.js';\nexport * from './business-user.js';\nexport * from './business-platform.js';\nexport * from './hall-content-routing.js';\nexport * from './text-fields.js';\nexport * from './chat.js';\nexport * from './conversation-files.js';\nexport * from './moderation.js';\nexport * from './options.js';\nexport * from './admin-labels.js';\nexport * from './craft-skill-statements.js';\nexport * from './publish-attestations.js';\nexport * from './pledge-and-bouquet-copy.js';\nexport * from './public-documents.js';\nexport * from './admin-claims.js';\nexport * from './legal-review-notice-state.js';\nexport * from './legal-review-notice.js';\nexport * from './safety-confirmation-phrases.js';\nexport * from './safety-telemetry-patterns.js';\nexport * from './safety-active-statuses.js';\nexport * from './telemetry-content-policy.js';\nexport * from './pagination.js';\nexport * from './release-flags.js';\nexport * from './retention.js';\nexport * from './scheduled-jobs.js';\nexport * from './media-download.js';\nexport * from './media-processing.js';\nexport * from './storage-keys.js';\nexport * from './company-mascots.js';\nexport * from './center-stage-rooms.js';\nexport * from './audition-deadlines.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC","sourcesContent":["export * from './analytics.js';\nexport * from './app-mode.js';\nexport * from './business-work-project.js';\nexport * from './business-content.js';\nexport * from './business-admin.js';\nexport * from './business-user.js';\nexport * from './business-platform.js';\nexport * from './hall-content-routing.js';\nexport * from './text-fields.js';\nexport * from './chat.js';\nexport * from './conversation-files.js';\nexport * from './moderation.js';\nexport * from './options.js';\nexport * from './admin-labels.js';\nexport * from './craft-skill-statements.js';\nexport * from './publish-attestations.js';\nexport * from './pledge-and-bouquet-copy.js';\nexport * from './member-agreements.js';\nexport * from './public-documents.js';\nexport * from './admin-claims.js';\nexport * from './legal-review-notice-state.js';\nexport * from './legal-review-notice.js';\nexport * from './safety-confirmation-phrases.js';\nexport * from './safety-telemetry-patterns.js';\nexport * from './safety-active-statuses.js';\nexport * from './telemetry-content-policy.js';\nexport * from './pagination.js';\nexport * from './release-flags.js';\nexport * from './retention.js';\nexport * from './scheduled-jobs.js';\nexport * from './media-download.js';\nexport * from './media-processing.js';\nexport * from './storage-keys.js';\nexport * from './company-mascots.js';\nexport * from './center-stage-rooms.js';\nexport * from './audition-deadlines.js';\n"]}
@@ -1,5 +1,5 @@
1
1
  /** Whether the founder notice is shown and its acknowledgment required. */
2
2
  export declare const LEGAL_REVIEW_NOTICE_ACTIVE: boolean;
3
3
  /** Identifies the exact notice copy in force. Recorded with every acceptance and receipt. */
4
- export declare const LEGAL_REVIEW_NOTICE_REVISION = "founder-note-v1";
4
+ export declare const LEGAL_REVIEW_NOTICE_REVISION = "founder-note-v2";
5
5
  //# sourceMappingURL=legal-review-notice-state.d.ts.map
@@ -15,5 +15,5 @@
15
15
  /** Whether the founder notice is shown and its acknowledgment required. */
16
16
  export const LEGAL_REVIEW_NOTICE_ACTIVE = true;
17
17
  /** Identifies the exact notice copy in force. Recorded with every acceptance and receipt. */
18
- export const LEGAL_REVIEW_NOTICE_REVISION = 'founder-note-v1';
18
+ export const LEGAL_REVIEW_NOTICE_REVISION = 'founder-note-v2';
19
19
  //# sourceMappingURL=legal-review-notice-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"legal-review-notice-state.js","sourceRoot":"","sources":["../../src/constants/legal-review-notice-state.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,oFAAoF;AACpF,gFAAgF;AAChF,0EAA0E;AAC1E,sEAAsE;AACtE,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAChF,gDAAgD;AAChD,+EAA+E;AAE/E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,0BAA0B,GAAY,IAAI,CAAC;AAExD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,4BAA4B,GAAG,iBAAiB,CAAC","sourcesContent":["// ============================================================================\n// FOUNDER LEGAL-REVIEW NOTICE — the switch. Code-controlled, exactly like APP_MODE:\n// change the constant → publish ttt-core → install → deploy. It is NOT an Admin\n// switch, and it is independent of APP_MODE and of any release's \"require\n// acceptance\" choice — none of the three implies a value for another.\n//\n// Off: the notice renders nowhere and no notice acknowledgment is required.\n// Receipts already recorded (registration, pledge, Hall submission) remain.\n//\n// The copy lives beside it in ./legal-review-notice.ts. The REVISION names that\n// exact copy and is immutable: any wording change ships under a NEW revision id,\n// so every recorded receipt keeps pointing at the words the person actually saw\n// (the package test pins each revision's copy).\n// ============================================================================\n\n/** Whether the founder notice is shown and its acknowledgment required. */\nexport const LEGAL_REVIEW_NOTICE_ACTIVE: boolean = true;\n\n/** Identifies the exact notice copy in force. Recorded with every acceptance and receipt. */\nexport const LEGAL_REVIEW_NOTICE_REVISION = 'founder-note-v1';\n"]}
1
+ {"version":3,"file":"legal-review-notice-state.js","sourceRoot":"","sources":["../../src/constants/legal-review-notice-state.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,oFAAoF;AACpF,gFAAgF;AAChF,0EAA0E;AAC1E,sEAAsE;AACtE,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAChF,gDAAgD;AAChD,+EAA+E;AAE/E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,0BAA0B,GAAY,IAAI,CAAC;AAExD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,4BAA4B,GAAG,iBAAiB,CAAC","sourcesContent":["// ============================================================================\n// FOUNDER LEGAL-REVIEW NOTICE — the switch. Code-controlled, exactly like APP_MODE:\n// change the constant → publish ttt-core → install → deploy. It is NOT an Admin\n// switch, and it is independent of APP_MODE and of any release's \"require\n// acceptance\" choice — none of the three implies a value for another.\n//\n// Off: the notice renders nowhere and no notice acknowledgment is required.\n// Receipts already recorded (registration, pledge, Hall submission) remain.\n//\n// The copy lives beside it in ./legal-review-notice.ts. The REVISION names that\n// exact copy and is immutable: any wording change ships under a NEW revision id,\n// so every recorded receipt keeps pointing at the words the person actually saw\n// (the package test pins each revision's copy).\n// ============================================================================\n\n/** Whether the founder notice is shown and its acknowledgment required. */\nexport const LEGAL_REVIEW_NOTICE_ACTIVE: boolean = true;\n\n/** Identifies the exact notice copy in force. Recorded with every acceptance and receipt. */\nexport const LEGAL_REVIEW_NOTICE_REVISION = 'founder-note-v2';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"legal-review-notice.d.ts","sourceRoot":"","sources":["../../src/constants/legal-review-notice.ts"],"names":[],"mappings":"AAkBA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAItF,iFAAiF;AACjF,MAAM,MAAM,2BAA2B,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAE3E,6EAA6E;AAC7E,MAAM,MAAM,wBAAwB,GAChC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAA;CAAE,CAAC;AAIpG,2DAA2D;AAC3D,eAAO,MAAM,2BAA2B,mCAAmC,CAAC;AAE5E,4BAA4B;AAC5B,eAAO,MAAM,wBAAwB,QAMuC,CAAC;AAE7E,mEAAmE;AACnE,eAAO,MAAM,8BAA8B,EAAE,SAAS,wBAAwB,EAM7E,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,4BAA4B,QAE2B,CAAC;AAgCrE,wGAAwG;AACxG,wBAAgB,kCAAkC,IAAI,SAAS,wBAAwB,EAAE,CAIxF;AAID;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,kDAAmD,CAAC;AAC7F,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAOrF;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B;IACzC;6FACyF;;IAEzF,mEAAmE;;IAEnE,wEAAwE;;IAExE,iGAAiG;;IAEjG,oGAAoG;;IAEpG,mDAAmD;;IAEnD,6CAA6C;;IAE7C,gDAAgD;;IAEhD;2DACuD;;IAEvD,+CAA+C;;IAE/C,+BAA+B;;IAE/B,gDAAgD;;IAEhD,oCAAoC;;IAEpC,0CAA0C;;IAE1C,8CAA8C;;IAE9C,0BAA0B;;IAE1B,4BAA4B;;IAE5B,uBAAuB;;CAEwC,CAAC;AAElE,uCAAuC;AACvC,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,8BAA8B,CAAC;AAEnF,iDAAiD;AACjD,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,wBAAwB,IACxE,CAAC,OAAO,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,4BAA4B,EAEpC,wBAAwB,EAAE,CAAC;AAYhC;;;GAGG;AACH,wBAAgB,sCAAsC,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAE5F;AAID,4EAA4E;AAC5E,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,SAAS,wBAAwB,EAAE,GAC5C,MAAM,CAIR;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,wBAAwB,EAC3E,OAAO,EAAE,CAAC,EACV,OAAO,CAAC,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACvC,MAAM,GAAG,IAAI,CAgBf;AAID,gGAAgG;AAChG,wBAAgB,+BAA+B,IAAI,MAAM,GAAG,IAAI,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,MAAM,GACrB,wBAAwB,GAAG,IAAI,CAGjC"}
1
+ {"version":3,"file":"legal-review-notice.d.ts","sourceRoot":"","sources":["../../src/constants/legal-review-notice.ts"],"names":[],"mappings":"AAkBA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKtF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAItF,iFAAiF;AACjF,MAAM,MAAM,2BAA2B,GAAG,gBAAgB,GAAG,aAAa,CAAC;AAE3E,6EAA6E;AAC7E,MAAM,MAAM,wBAAwB,GAChC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAA;CAAE,CAAC;AAIpG,2DAA2D;AAC3D,eAAO,MAAM,2BAA2B,mCAAmC,CAAC;AAE5E,4BAA4B;AAC5B,eAAO,MAAM,wBAAwB,QAMuC,CAAC;AAE7E,mEAAmE;AACnE,eAAO,MAAM,8BAA8B,EAAE,SAAS,wBAAwB,EAM7E,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,4BAA4B,QAE2B,CAAC;AAmCrE,wGAAwG;AACxG,wBAAgB,kCAAkC,IAAI,SAAS,wBAAwB,EAAE,CAIxF;AAID;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,kDAAmD,CAAC;AAC7F,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAOrF;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B;IACzC;6FACyF;;IAEzF,mEAAmE;;IAEnE,wEAAwE;;IAExE,iGAAiG;;IAEjG,oGAAoG;;IAEpG,mDAAmD;;IAEnD,6CAA6C;;IAE7C,gDAAgD;;IAEhD;2DACuD;;IAEvD,+CAA+C;;IAE/C,+BAA+B;;IAE/B,gDAAgD;;IAEhD,oCAAoC;;IAEpC,0CAA0C;;IAE1C,8CAA8C;;IAE9C,0BAA0B;;IAE1B,4BAA4B;;IAE5B,uBAAuB;;CAEwC,CAAC;AAElE,uCAAuC;AACvC,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,8BAA8B,CAAC;AAEnF,iDAAiD;AACjD,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,wBAAwB,IACxE,CAAC,OAAO,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,eAAO,MAAM,4BAA4B,EAEpC,wBAAwB,EAAE,CAAC;AAYhC;;;GAGG;AACH,wBAAgB,sCAAsC,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAE5F;AAID,4EAA4E;AAC5E,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,SAAS,wBAAwB,EAAE,GAC5C,MAAM,CAIR;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,wBAAwB,EAC3E,OAAO,EAAE,CAAC,EACV,OAAO,CAAC,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACvC,MAAM,GAAG,IAAI,CAgBf;AAID,gGAAgG;AAChG,wBAAgB,+BAA+B,IAAI,MAAM,GAAG,IAAI,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,MAAM,GACrB,wBAAwB,GAAG,IAAI,CAGjC"}
@@ -38,33 +38,35 @@ export const LEGAL_REVIEW_NOTICE_SHORT_LINE = [
38
38
  /** The required acknowledgment checkbox (Hall submission, pledge). */
39
39
  export const LEGAL_REVIEW_NOTICE_CHECKBOX = "I understand TTT's terms express the founder's intentions, have not had legal review, and " +
40
40
  'will be updated once Charter Season support makes that possible.';
41
- // The registration Terms checkbox. While the notice is active it carries the notice clause;
42
- // otherwise it is the plain agreement. Both link the two documents by their canonical labels.
41
+ /** A public document as a link run, labelled by its canonical label. */
42
+ function documentLink(target) {
43
+ return { kind: 'link', label: PUBLIC_DOCUMENT_LABELS[target], target };
44
+ }
45
+ // The registration Terms checkbox names and links every public document registration accepts.
46
+ // While the notice is active it carries the notice clause; otherwise it is the plain agreement.
43
47
  const REGISTRATION_TERMS_AGREEMENT_LEAD = [
44
- { kind: 'text', text: 'I have read and agree to the ' },
45
- {
46
- kind: 'link',
47
- label: PUBLIC_DOCUMENT_LABELS[SPECIAL_DOCS.TERMS_PAGE],
48
- target: SPECIAL_DOCS.TERMS_PAGE,
49
- },
50
- { kind: 'text', text: ' and ' },
51
- {
52
- kind: 'link',
53
- label: PUBLIC_DOCUMENT_LABELS[SPECIAL_DOCS.PRIVACY_PAGE],
54
- target: SPECIAL_DOCS.PRIVACY_PAGE,
55
- },
48
+ { kind: 'text', text: "I've read and agree to the " },
49
+ documentLink(SPECIAL_DOCS.TERMS_PAGE),
50
+ { kind: 'text', text: ', ' },
51
+ documentLink(SPECIAL_DOCS.PRIVACY_PAGE),
52
+ { kind: 'text', text: ' (including the essential cookies the site needs to run), and ' },
53
+ documentLink(SPECIAL_DOCS.RULES_AND_AGREEMENTS),
54
+ { kind: 'text', text: ", and I've seen the " },
55
+ documentLink(SPECIAL_DOCS.FUTURE_PLANS),
56
+ { kind: 'text', text: ', ' },
57
+ documentLink(SPECIAL_DOCS.DMCA_POLICY),
58
+ { kind: 'text', text: ', and ' },
59
+ documentLink(SPECIAL_DOCS.TAKE_IT_DOWN_PAGE_COPY),
60
+ { kind: 'text', text: ' pages.' },
56
61
  ];
57
62
  const REGISTRATION_TERMS_AGREEMENT_WITH_NOTICE = [
58
63
  ...REGISTRATION_TERMS_AGREEMENT_LEAD,
59
64
  {
60
65
  kind: 'text',
61
- text: ", and I understand they express the founder's intentions and have not had legal review.",
66
+ text: " I understand these express the founder's intentions and have not had legal review.",
62
67
  },
63
68
  ];
64
- const REGISTRATION_TERMS_AGREEMENT_WITHOUT_NOTICE = [
65
- ...REGISTRATION_TERMS_AGREEMENT_LEAD,
66
- { kind: 'text', text: '.' },
67
- ];
69
+ const REGISTRATION_TERMS_AGREEMENT_WITHOUT_NOTICE = REGISTRATION_TERMS_AGREEMENT_LEAD;
68
70
  /** The registration Terms checkbox label, with the notice clause exactly while the notice is active. */
69
71
  export function registrationTermsAgreementSegments() {
70
72
  return LEGAL_REVIEW_NOTICE_ACTIVE
@@ -1 +1 @@
1
- {"version":3,"file":"legal-review-notice.js","sourceRoot":"","sources":["../../src/constants/legal-review-notice.ts"],"names":[],"mappings":"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","sourcesContent":["// ============================================================================\n// FOUNDER LEGAL-REVIEW NOTICE — the ONE owner of the notice copy, its placements,\n// and the plain-text helper for backend-owned copy. The on/off switch and the\n// immutable revision id live in ./legal-review-notice-state.ts.\n//\n// TTT's public pages were written by the founder before any legal review. The\n// notice says so wherever people read policy, create accounts, upload, publish,\n// or pledge. The app renders it through one component,\n// `<LegalReviewNotice context=… variant=… />`; nothing restates these words or\n// keeps a local flag.\n//\n// Copy is settled and verbatim — never reword it in place. A wording change is a\n// new LEGAL_REVIEW_NOTICE_REVISION (the package test pins each revision's copy).\n// Links are semantic targets, not URLs: a public document id, or the founder's\n// note itself; the app maps them to routes or its note dialog.\n// ============================================================================\n\nimport { SPECIAL_DOCS } from '../paths/collections.js';\nimport { PUBLIC_DOCUMENT_LABELS, type PublicDocumentId } from './public-documents.js';\nimport {\n LEGAL_REVIEW_NOTICE_ACTIVE,\n LEGAL_REVIEW_NOTICE_REVISION,\n} from './legal-review-notice-state.js';\nimport type { LegalReviewNoticeReceipt } from '../doc-schemas/legal-review-notice.js';\n\n// ── Copy model ───────────────────────────────────────────────────────────────\n\n/** Where a notice link points: a public document, or the founder's full note. */\nexport type LegalReviewNoticeLinkTarget = PublicDocumentId | 'founderNote';\n\n/** One run of notice copy. A link carries a semantic target, never a URL. */\nexport type LegalReviewNoticeSegment =\n | { readonly kind: 'text'; readonly text: string }\n | { readonly kind: 'link'; readonly label: string; readonly target: LegalReviewNoticeLinkTarget };\n\n// ── The settled copy ─────────────────────────────────────────────────────────\n\n/** The full note's heading (the note's first sentence). */\nexport const LEGAL_REVIEW_NOTICE_HEADING = \"A note from DJ, TTT's founder.\";\n\n/** The full note's body. */\nexport const LEGAL_REVIEW_NOTICE_BODY =\n \"These pages describe how I intend TTT to work: my principles and what I'm trying to build. \" +\n 'I wrote them myself, with help from AI tools, before I could afford a lawyer, so none of it ' +\n \"has had legal review, and I honestly don't know whether all of it is legally sound. Charter \" +\n \"Season support keeps TTT running first; after that, it's how I'll get a lawyer to turn this \" +\n 'into real, reviewed legal wording. The words may change when that happens. My intentions ' +\n \"won't. If a change needs your agreement, I'll ask you before it applies.\";\n\n/** The short line. Its closing sentence links to the full note. */\nexport const LEGAL_REVIEW_NOTICE_SHORT_LINE: readonly LegalReviewNoticeSegment[] = [\n {\n kind: 'text',\n text: \"TTT's terms are my intentions, written by me and not yet reviewed by a lawyer. \",\n },\n { kind: 'link', label: \"Read the founder's note.\", target: 'founderNote' },\n];\n\n/** The required acknowledgment checkbox (Hall submission, pledge). */\nexport const LEGAL_REVIEW_NOTICE_CHECKBOX =\n \"I understand TTT's terms express the founder's intentions, have not had legal review, and \" +\n 'will be updated once Charter Season support makes that possible.';\n\n// The registration Terms checkbox. While the notice is active it carries the notice clause;\n// otherwise it is the plain agreement. Both link the two documents by their canonical labels.\nconst REGISTRATION_TERMS_AGREEMENT_LEAD: readonly LegalReviewNoticeSegment[] = [\n { kind: 'text', text: 'I have read and agree to the ' },\n {\n kind: 'link',\n label: PUBLIC_DOCUMENT_LABELS[SPECIAL_DOCS.TERMS_PAGE],\n target: SPECIAL_DOCS.TERMS_PAGE,\n },\n { kind: 'text', text: ' and ' },\n {\n kind: 'link',\n label: PUBLIC_DOCUMENT_LABELS[SPECIAL_DOCS.PRIVACY_PAGE],\n target: SPECIAL_DOCS.PRIVACY_PAGE,\n },\n];\n\nconst REGISTRATION_TERMS_AGREEMENT_WITH_NOTICE: readonly LegalReviewNoticeSegment[] = [\n ...REGISTRATION_TERMS_AGREEMENT_LEAD,\n {\n kind: 'text',\n text: \", and I understand they express the founder's intentions and have not had legal review.\",\n },\n];\n\nconst REGISTRATION_TERMS_AGREEMENT_WITHOUT_NOTICE: readonly LegalReviewNoticeSegment[] = [\n ...REGISTRATION_TERMS_AGREEMENT_LEAD,\n { kind: 'text', text: '.' },\n];\n\n/** The registration Terms checkbox label, with the notice clause exactly while the notice is active. */\nexport function registrationTermsAgreementSegments(): readonly LegalReviewNoticeSegment[] {\n return LEGAL_REVIEW_NOTICE_ACTIVE\n ? REGISTRATION_TERMS_AGREEMENT_WITH_NOTICE\n : REGISTRATION_TERMS_AGREEMENT_WITHOUT_NOTICE;\n}\n\n// ── Variants and placements ──────────────────────────────────────────────────\n\n/**\n * How the notice renders:\n * - `inline` — the short line, in the flow of surrounding text;\n * - `strip` — the short line as a compact strip;\n * - `card` — the full note (heading + body);\n * - `checkbox` — the required acknowledgment checkbox.\n */\nexport const LEGAL_REVIEW_NOTICE_VARIANTS = ['inline', 'strip', 'card', 'checkbox'] as const;\nexport type LegalReviewNoticeVariant = (typeof LEGAL_REVIEW_NOTICE_VARIANTS)[number];\n\ntype LegalReviewNoticeVariantList = readonly [\n LegalReviewNoticeVariant,\n ...LegalReviewNoticeVariant[],\n];\n\n/**\n * Every placement of the notice and the variants it may render (the first is its default).\n * The keys ARE the typed context union. Take It Down and the DMCA policy are statutory\n * processes and carry no notice, so they have no context\n * (see `publicDocumentCarriesLegalReviewNotice`).\n */\nexport const LEGAL_REVIEW_NOTICE_PLACEMENTS = {\n /** Terms, Privacy, Rules & Agreements, Future Plans — beside the current content, rendered at\n * display time (never stored in the document body); also the Admin editors' preview. */\n publicDocument: ['strip'],\n /** Registration — the full note above the agreement checkboxes. */\n registration: ['card'],\n /** The \"Our stuff has changed\" re-acceptance prompt — the full note. */\n reacceptance: ['card'],\n /** Pledge checkout — a compact explanation plus a separate required checkbox on every pledge. */\n pledge: ['strip', 'checkbox'],\n /** Hall submission — a required checkbox in the publish attestations, above Submit for Approval. */\n publish: ['checkbox'],\n /** Work / Realm creation, beside its agreement. */\n workProjectCreation: ['inline', 'strip'],\n /** Artisan upgrade, beside its agreement. */\n artisanCreatorUpgrade: ['inline', 'strip'],\n /** Craft-skill upload, beside its agreement. */\n craftSkillUpload: ['inline', 'strip'],\n /** An Artisan submitting an Audition entry — a compact strip beside Submit Entry (the launch\n * mascot Auditions hand their winning art to TTT). */\n auditionEntrySubmission: ['strip'],\n /** Square first post, beside its agreement. */\n squareStreetzFirstPost: ['inline', 'strip'],\n /** Guild invite agreements. */\n guildInviteAgreement: ['inline', 'strip'],\n /** Hall download, beside its acknowledgment. */\n hallDownload: ['inline', 'strip'],\n /** The Charter Season explainer. */\n charterExplainer: ['inline', 'card'],\n /** The landing page's founder section. */\n landingFounder: ['inline', 'card'],\n /** The landing page's fundraising section. */\n landingFundraising: ['inline', 'card'],\n /** Stake explanations. */\n stakeShareExplanation: ['inline', 'card'],\n /** Bouquet explanations. */\n bouquetAppreciationExplanation: ['inline', 'card'],\n /** The site footer. */\n footer: ['inline'],\n} as const satisfies Record<string, LegalReviewNoticeVariantList>;\n\n/** A named placement of the notice. */\nexport type LegalReviewNoticeContext = keyof typeof LEGAL_REVIEW_NOTICE_PLACEMENTS;\n\n/** The variants a given placement may render. */\nexport type LegalReviewNoticeVariantFor<C extends LegalReviewNoticeContext> =\n (typeof LEGAL_REVIEW_NOTICE_PLACEMENTS)[C][number];\n\nexport const LEGAL_REVIEW_NOTICE_CONTEXTS = Object.keys(\n LEGAL_REVIEW_NOTICE_PLACEMENTS,\n) as LegalReviewNoticeContext[];\n\nconst PUBLIC_DOCUMENT_CARRIES_NOTICE: Record<PublicDocumentId, boolean> = {\n [SPECIAL_DOCS.TERMS_PAGE]: true,\n [SPECIAL_DOCS.PRIVACY_PAGE]: true,\n [SPECIAL_DOCS.RULES_AND_AGREEMENTS]: true,\n [SPECIAL_DOCS.FUTURE_PLANS]: true,\n // Statutory processes run as built.\n [SPECIAL_DOCS.DMCA_POLICY]: false,\n [SPECIAL_DOCS.TAKE_IT_DOWN_PAGE_COPY]: false,\n};\n\n/**\n * Whether a public document's page (and its Admin editor preview) shows the `publicDocument`\n * notice strip. A placement fact only — the notice itself still renders nothing while off.\n */\nexport function publicDocumentCarriesLegalReviewNotice(documentId: PublicDocumentId): boolean {\n return PUBLIC_DOCUMENT_CARRIES_NOTICE[documentId];\n}\n\n// ── Plain text (backend-owned copy) ──────────────────────────────────────────\n\n/** Flatten segments to plain text: text as written, a link as its label. */\nexport function legalReviewNoticeSegmentsText(\n segments: readonly LegalReviewNoticeSegment[],\n): string {\n return segments\n .map((segment) => (segment.kind === 'text' ? segment.text : segment.label))\n .join('');\n}\n\n/**\n * The notice as plain text for a placement, for backend-owned copy (a Stripe description, an\n * email). `null` while the notice is off. `variant` defaults to the placement's first variant;\n * a variant the placement does not render throws.\n */\nexport function legalReviewNoticePlainText<C extends LegalReviewNoticeContext>(\n context: C,\n variant?: LegalReviewNoticeVariantFor<C>,\n): string | null {\n if (!LEGAL_REVIEW_NOTICE_ACTIVE) return null;\n const allowed: readonly LegalReviewNoticeVariant[] = LEGAL_REVIEW_NOTICE_PLACEMENTS[context];\n const chosen: LegalReviewNoticeVariant = variant ?? allowed[0];\n if (!allowed.includes(chosen)) {\n throw new Error(`The ${context} notice placement does not render the ${chosen} variant.`);\n }\n switch (chosen) {\n case 'inline':\n case 'strip':\n return legalReviewNoticeSegmentsText(LEGAL_REVIEW_NOTICE_SHORT_LINE);\n case 'card':\n return `${LEGAL_REVIEW_NOTICE_HEADING} ${LEGAL_REVIEW_NOTICE_BODY}`;\n case 'checkbox':\n return LEGAL_REVIEW_NOTICE_CHECKBOX;\n }\n}\n\n// ── What gets recorded ───────────────────────────────────────────────────────\n\n/** The revision a server records with an acceptance or acknowledgment now; `null` while off. */\nexport function activeLegalReviewNoticeRevision(): string | null {\n return LEGAL_REVIEW_NOTICE_ACTIVE ? LEGAL_REVIEW_NOTICE_REVISION : null;\n}\n\n/**\n * The receipt a server records when a person acknowledges the notice (pledge evidence, the Hall\n * threshold item): the active revision and the server time. `null` while the notice is off —\n * nothing is required, so nothing is recorded.\n */\nexport function buildLegalReviewNoticeReceipt(\n acknowledgedAt: number,\n): LegalReviewNoticeReceipt | null {\n const revision = activeLegalReviewNoticeRevision();\n return revision === null ? null : { revision, acknowledgedAt };\n}\n"]}
1
+ {"version":3,"file":"legal-review-notice.js","sourceRoot":"","sources":["../../src/constants/legal-review-notice.ts"],"names":[],"mappings":"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","sourcesContent":["// ============================================================================\n// FOUNDER LEGAL-REVIEW NOTICE — the ONE owner of the notice copy, its placements,\n// and the plain-text helper for backend-owned copy. The on/off switch and the\n// immutable revision id live in ./legal-review-notice-state.ts.\n//\n// TTT's public pages were written by the founder before any legal review. The\n// notice says so wherever people read policy, create accounts, upload, publish,\n// or pledge. The app renders it through one component,\n// `<LegalReviewNotice context=… variant=… />`; nothing restates these words or\n// keeps a local flag.\n//\n// Copy is settled and verbatim — never reword it in place. A wording change is a\n// new LEGAL_REVIEW_NOTICE_REVISION (the package test pins each revision's copy).\n// Links are semantic targets, not URLs: a public document id, or the founder's\n// note itself; the app maps them to routes or its note dialog.\n// ============================================================================\n\nimport { SPECIAL_DOCS } from '../paths/collections.js';\nimport { PUBLIC_DOCUMENT_LABELS, type PublicDocumentId } from './public-documents.js';\nimport {\n LEGAL_REVIEW_NOTICE_ACTIVE,\n LEGAL_REVIEW_NOTICE_REVISION,\n} from './legal-review-notice-state.js';\nimport type { LegalReviewNoticeReceipt } from '../doc-schemas/legal-review-notice.js';\n\n// ── Copy model ───────────────────────────────────────────────────────────────\n\n/** Where a notice link points: a public document, or the founder's full note. */\nexport type LegalReviewNoticeLinkTarget = PublicDocumentId | 'founderNote';\n\n/** One run of notice copy. A link carries a semantic target, never a URL. */\nexport type LegalReviewNoticeSegment =\n | { readonly kind: 'text'; readonly text: string }\n | { readonly kind: 'link'; readonly label: string; readonly target: LegalReviewNoticeLinkTarget };\n\n// ── The settled copy ─────────────────────────────────────────────────────────\n\n/** The full note's heading (the note's first sentence). */\nexport const LEGAL_REVIEW_NOTICE_HEADING = \"A note from DJ, TTT's founder.\";\n\n/** The full note's body. */\nexport const LEGAL_REVIEW_NOTICE_BODY =\n \"These pages describe how I intend TTT to work: my principles and what I'm trying to build. \" +\n 'I wrote them myself, with help from AI tools, before I could afford a lawyer, so none of it ' +\n \"has had legal review, and I honestly don't know whether all of it is legally sound. Charter \" +\n \"Season support keeps TTT running first; after that, it's how I'll get a lawyer to turn this \" +\n 'into real, reviewed legal wording. The words may change when that happens. My intentions ' +\n \"won't. If a change needs your agreement, I'll ask you before it applies.\";\n\n/** The short line. Its closing sentence links to the full note. */\nexport const LEGAL_REVIEW_NOTICE_SHORT_LINE: readonly LegalReviewNoticeSegment[] = [\n {\n kind: 'text',\n text: \"TTT's terms are my intentions, written by me and not yet reviewed by a lawyer. \",\n },\n { kind: 'link', label: \"Read the founder's note.\", target: 'founderNote' },\n];\n\n/** The required acknowledgment checkbox (Hall submission, pledge). */\nexport const LEGAL_REVIEW_NOTICE_CHECKBOX =\n \"I understand TTT's terms express the founder's intentions, have not had legal review, and \" +\n 'will be updated once Charter Season support makes that possible.';\n\n/** A public document as a link run, labelled by its canonical label. */\nfunction documentLink(target: PublicDocumentId): LegalReviewNoticeSegment {\n return { kind: 'link', label: PUBLIC_DOCUMENT_LABELS[target], target };\n}\n\n// The registration Terms checkbox names and links every public document registration accepts.\n// While the notice is active it carries the notice clause; otherwise it is the plain agreement.\nconst REGISTRATION_TERMS_AGREEMENT_LEAD: readonly LegalReviewNoticeSegment[] = [\n { kind: 'text', text: \"I've read and agree to the \" },\n documentLink(SPECIAL_DOCS.TERMS_PAGE),\n { kind: 'text', text: ', ' },\n documentLink(SPECIAL_DOCS.PRIVACY_PAGE),\n { kind: 'text', text: ' (including the essential cookies the site needs to run), and ' },\n documentLink(SPECIAL_DOCS.RULES_AND_AGREEMENTS),\n { kind: 'text', text: \", and I've seen the \" },\n documentLink(SPECIAL_DOCS.FUTURE_PLANS),\n { kind: 'text', text: ', ' },\n documentLink(SPECIAL_DOCS.DMCA_POLICY),\n { kind: 'text', text: ', and ' },\n documentLink(SPECIAL_DOCS.TAKE_IT_DOWN_PAGE_COPY),\n { kind: 'text', text: ' pages.' },\n];\n\nconst REGISTRATION_TERMS_AGREEMENT_WITH_NOTICE: readonly LegalReviewNoticeSegment[] = [\n ...REGISTRATION_TERMS_AGREEMENT_LEAD,\n {\n kind: 'text',\n text: \" I understand these express the founder's intentions and have not had legal review.\",\n },\n];\n\nconst REGISTRATION_TERMS_AGREEMENT_WITHOUT_NOTICE = REGISTRATION_TERMS_AGREEMENT_LEAD;\n\n/** The registration Terms checkbox label, with the notice clause exactly while the notice is active. */\nexport function registrationTermsAgreementSegments(): readonly LegalReviewNoticeSegment[] {\n return LEGAL_REVIEW_NOTICE_ACTIVE\n ? REGISTRATION_TERMS_AGREEMENT_WITH_NOTICE\n : REGISTRATION_TERMS_AGREEMENT_WITHOUT_NOTICE;\n}\n\n// ── Variants and placements ──────────────────────────────────────────────────\n\n/**\n * How the notice renders:\n * - `inline` — the short line, in the flow of surrounding text;\n * - `strip` — the short line as a compact strip;\n * - `card` — the full note (heading + body);\n * - `checkbox` — the required acknowledgment checkbox.\n */\nexport const LEGAL_REVIEW_NOTICE_VARIANTS = ['inline', 'strip', 'card', 'checkbox'] as const;\nexport type LegalReviewNoticeVariant = (typeof LEGAL_REVIEW_NOTICE_VARIANTS)[number];\n\ntype LegalReviewNoticeVariantList = readonly [\n LegalReviewNoticeVariant,\n ...LegalReviewNoticeVariant[],\n];\n\n/**\n * Every placement of the notice and the variants it may render (the first is its default).\n * The keys ARE the typed context union. Take It Down and the DMCA policy are statutory\n * processes and carry no notice, so they have no context\n * (see `publicDocumentCarriesLegalReviewNotice`).\n */\nexport const LEGAL_REVIEW_NOTICE_PLACEMENTS = {\n /** Terms, Privacy, Rules & Agreements, Future Plans — beside the current content, rendered at\n * display time (never stored in the document body); also the Admin editors' preview. */\n publicDocument: ['strip'],\n /** Registration — the full note above the agreement checkboxes. */\n registration: ['card'],\n /** The \"Our stuff has changed\" re-acceptance prompt — the full note. */\n reacceptance: ['card'],\n /** Pledge checkout — a compact explanation plus a separate required checkbox on every pledge. */\n pledge: ['strip', 'checkbox'],\n /** Hall submission — a required checkbox in the publish attestations, above Submit for Approval. */\n publish: ['checkbox'],\n /** Work / Realm creation, beside its agreement. */\n workProjectCreation: ['inline', 'strip'],\n /** Artisan upgrade, beside its agreement. */\n artisanCreatorUpgrade: ['inline', 'strip'],\n /** Craft-skill upload, beside its agreement. */\n craftSkillUpload: ['inline', 'strip'],\n /** An Artisan submitting an Audition entry — a compact strip beside Submit Entry (the launch\n * mascot Auditions hand their winning art to TTT). */\n auditionEntrySubmission: ['strip'],\n /** Square first post, beside its agreement. */\n squareStreetzFirstPost: ['inline', 'strip'],\n /** Guild invite agreements. */\n guildInviteAgreement: ['inline', 'strip'],\n /** Hall download, beside its acknowledgment. */\n hallDownload: ['inline', 'strip'],\n /** The Charter Season explainer. */\n charterExplainer: ['inline', 'card'],\n /** The landing page's founder section. */\n landingFounder: ['inline', 'card'],\n /** The landing page's fundraising section. */\n landingFundraising: ['inline', 'card'],\n /** Stake explanations. */\n stakeShareExplanation: ['inline', 'card'],\n /** Bouquet explanations. */\n bouquetAppreciationExplanation: ['inline', 'card'],\n /** The site footer. */\n footer: ['inline'],\n} as const satisfies Record<string, LegalReviewNoticeVariantList>;\n\n/** A named placement of the notice. */\nexport type LegalReviewNoticeContext = keyof typeof LEGAL_REVIEW_NOTICE_PLACEMENTS;\n\n/** The variants a given placement may render. */\nexport type LegalReviewNoticeVariantFor<C extends LegalReviewNoticeContext> =\n (typeof LEGAL_REVIEW_NOTICE_PLACEMENTS)[C][number];\n\nexport const LEGAL_REVIEW_NOTICE_CONTEXTS = Object.keys(\n LEGAL_REVIEW_NOTICE_PLACEMENTS,\n) as LegalReviewNoticeContext[];\n\nconst PUBLIC_DOCUMENT_CARRIES_NOTICE: Record<PublicDocumentId, boolean> = {\n [SPECIAL_DOCS.TERMS_PAGE]: true,\n [SPECIAL_DOCS.PRIVACY_PAGE]: true,\n [SPECIAL_DOCS.RULES_AND_AGREEMENTS]: true,\n [SPECIAL_DOCS.FUTURE_PLANS]: true,\n // Statutory processes run as built.\n [SPECIAL_DOCS.DMCA_POLICY]: false,\n [SPECIAL_DOCS.TAKE_IT_DOWN_PAGE_COPY]: false,\n};\n\n/**\n * Whether a public document's page (and its Admin editor preview) shows the `publicDocument`\n * notice strip. A placement fact only — the notice itself still renders nothing while off.\n */\nexport function publicDocumentCarriesLegalReviewNotice(documentId: PublicDocumentId): boolean {\n return PUBLIC_DOCUMENT_CARRIES_NOTICE[documentId];\n}\n\n// ── Plain text (backend-owned copy) ──────────────────────────────────────────\n\n/** Flatten segments to plain text: text as written, a link as its label. */\nexport function legalReviewNoticeSegmentsText(\n segments: readonly LegalReviewNoticeSegment[],\n): string {\n return segments\n .map((segment) => (segment.kind === 'text' ? segment.text : segment.label))\n .join('');\n}\n\n/**\n * The notice as plain text for a placement, for backend-owned copy (a Stripe description, an\n * email). `null` while the notice is off. `variant` defaults to the placement's first variant;\n * a variant the placement does not render throws.\n */\nexport function legalReviewNoticePlainText<C extends LegalReviewNoticeContext>(\n context: C,\n variant?: LegalReviewNoticeVariantFor<C>,\n): string | null {\n if (!LEGAL_REVIEW_NOTICE_ACTIVE) return null;\n const allowed: readonly LegalReviewNoticeVariant[] = LEGAL_REVIEW_NOTICE_PLACEMENTS[context];\n const chosen: LegalReviewNoticeVariant = variant ?? allowed[0];\n if (!allowed.includes(chosen)) {\n throw new Error(`The ${context} notice placement does not render the ${chosen} variant.`);\n }\n switch (chosen) {\n case 'inline':\n case 'strip':\n return legalReviewNoticeSegmentsText(LEGAL_REVIEW_NOTICE_SHORT_LINE);\n case 'card':\n return `${LEGAL_REVIEW_NOTICE_HEADING} ${LEGAL_REVIEW_NOTICE_BODY}`;\n case 'checkbox':\n return LEGAL_REVIEW_NOTICE_CHECKBOX;\n }\n}\n\n// ── What gets recorded ───────────────────────────────────────────────────────\n\n/** The revision a server records with an acceptance or acknowledgment now; `null` while off. */\nexport function activeLegalReviewNoticeRevision(): string | null {\n return LEGAL_REVIEW_NOTICE_ACTIVE ? LEGAL_REVIEW_NOTICE_REVISION : null;\n}\n\n/**\n * The receipt a server records when a person acknowledges the notice (pledge evidence, the Hall\n * threshold item): the active revision and the server time. `null` while the notice is off —\n * nothing is required, so nothing is recorded.\n */\nexport function buildLegalReviewNoticeReceipt(\n acknowledgedAt: number,\n): LegalReviewNoticeReceipt | null {\n const revision = activeLegalReviewNoticeRevision();\n return revision === null ? null : { revision, acknowledgedAt };\n}\n"]}
@@ -0,0 +1,39 @@
1
+ import type { LegalReviewNoticeSegment } from './legal-review-notice.js';
2
+ /** One agreement's wording: text runs, with a public document as a link run. */
3
+ export type MemberAgreementWording = readonly LegalReviewNoticeSegment[];
4
+ /** Names the registration wording: the clean-content box and the Terms box. */
5
+ export declare const REGISTRATION_AGREEMENTS_VERSION = 1;
6
+ /** The content box. Profanity and mature themes are allowed; nudity and sexual content are not. */
7
+ export declare const REGISTRATION_CLEAN_CONTENT_AGREEMENT: MemberAgreementWording;
8
+ /** Names the become-an-Artisan wording: the intro, the location question, and every box. */
9
+ export declare const ARTISAN_CREATOR_AGREEMENTS_VERSION = 1;
10
+ export declare const ARTISAN_CREATOR_DIALOG_TITLE = "Become an Artisan";
11
+ export declare const ARTISAN_CREATOR_DIALOG_INTRO = "Unlock Artisan tools by agreeing to the terms below. This lets you share your crafts and create Works.";
12
+ /** The location question. Only Yes leads to the agreements; No leads to the regional interest list. */
13
+ export declare const ARTISAN_CREATOR_US_PERSON_QUESTION = "Do you live in the United States?";
14
+ /** The become-an-Artisan boxes, in the order the dialog shows them. */
15
+ export declare const ARTISAN_CREATOR_AGREEMENT_IDS: readonly ["realDateOfBirth", "humanMadeOnly", "uploadRights", "rulesAndAgreements", "collaborateOnline"];
16
+ export type ArtisanCreatorAgreementId = (typeof ARTISAN_CREATOR_AGREEMENT_IDS)[number];
17
+ export declare const ARTISAN_CREATOR_AGREEMENTS: Record<ArtisanCreatorAgreementId, MemberAgreementWording>;
18
+ /** Names the Realm founding wording. */
19
+ export declare const WORK_REALM_FOUNDING_AGREEMENT_VERSION = 1;
20
+ export declare const WORK_REALM_FOUNDING_AGREEMENT_TITLE = "Realm Creation Agreement";
21
+ export declare const WORK_REALM_FOUNDING_AGREEMENT: MemberAgreementWording;
22
+ /** Names the Square first-post wording: the moderation notice and every box. */
23
+ export declare const SQUARE_STREETZ_AGREEMENTS_VERSION = 1;
24
+ /** Shown above the boxes. A notice, not an agreement — nothing is ticked for it. */
25
+ export declare const SQUARE_STREETZ_MODERATION_NOTICE = "Before a post goes live, a banned-word list checks its text, and automated moderation scans any image or video. A post can be rejected automatically.";
26
+ /** The Square first-post boxes, in the order the form shows them. */
27
+ export declare const SQUARE_STREETZ_AGREEMENT_IDS: readonly ["communityRules", "respect", "ownership", "onTopic"];
28
+ export type SquareStreetzAgreementId = (typeof SQUARE_STREETZ_AGREEMENT_IDS)[number];
29
+ export declare const SQUARE_STREETZ_AGREEMENTS: Record<SquareStreetzAgreementId, MemberAgreementWording>;
30
+ /** Names the pledge attestation wording. */
31
+ export declare const PLEDGE_ATTESTATION_VERSION = 1;
32
+ /** Pledges are readable by every registered member, so the disclosure says members, not the public. */
33
+ export declare const PLEDGE_ATTESTATION: MemberAgreementWording;
34
+ /** Names the Hall download acknowledgment wording. */
35
+ export declare const HALL_DOWNLOAD_ACKNOWLEDGEMENT_VERSION = 1;
36
+ export declare const HALL_DOWNLOAD_ACKNOWLEDGEMENT_TITLE = "Before you download";
37
+ export declare const HALL_DOWNLOAD_ACKNOWLEDGEMENT = "Hall downloads are for your personal, offline use only. Please don't redistribute, repost, or share downloaded files \u2014 TTT holds published Works in stewardship for the Artisans who made them and the whole community.";
38
+ export declare const HALL_DOWNLOAD_ACKNOWLEDGEMENT_ACCEPT_LABEL = "I understand \u2014 download";
39
+ //# sourceMappingURL=member-agreements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-agreements.d.ts","sourceRoot":"","sources":["../../src/constants/member-agreements.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAMzE,gFAAgF;AAChF,MAAM,MAAM,sBAAsB,GAAG,SAAS,wBAAwB,EAAE,CAAC;AAczE,+EAA+E;AAC/E,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD,mGAAmG;AACnG,eAAO,MAAM,oCAAoC,EAAE,sBAElD,CAAC;AAIF,4FAA4F;AAC5F,eAAO,MAAM,kCAAkC,IAAI,CAAC;AAEpD,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAEhE,eAAO,MAAM,4BAA4B,2GACiE,CAAC;AAE3G,uGAAuG;AACvG,eAAO,MAAM,kCAAkC,sCAAsC,CAAC;AAEtF,uEAAuE;AACvE,eAAO,MAAM,6BAA6B,0GAMhC,CAAC;AACX,MAAM,MAAM,yBAAyB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvF,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,yBAAyB,EAAE,sBAAsB,CAe9F,CAAC;AAIJ,wCAAwC;AACxC,eAAO,MAAM,qCAAqC,IAAI,CAAC;AAEvD,eAAO,MAAM,mCAAmC,6BAA6B,CAAC;AAE9E,eAAO,MAAM,6BAA6B,EAAE,sBAM3C,CAAC;AAIF,gFAAgF;AAChF,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAEnD,oFAAoF;AACpF,eAAO,MAAM,gCAAgC,0JAC4G,CAAC;AAE1J,qEAAqE;AACrE,eAAO,MAAM,4BAA4B,gEAK/B,CAAC;AACX,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAErF,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,wBAAwB,EAAE,sBAAsB,CAkB9F,CAAC;AAIF,4CAA4C;AAC5C,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C,uGAAuG;AACvG,eAAO,MAAM,kBAAkB,EAAE,sBAEhC,CAAC;AAIF,sDAAsD;AACtD,eAAO,MAAM,qCAAqC,IAAI,CAAC;AAEvD,eAAO,MAAM,mCAAmC,wBAAwB,CAAC;AAEzE,eAAO,MAAM,6BAA6B,iOACiL,CAAC;AAE5N,eAAO,MAAM,0CAA0C,iCAA4B,CAAC"}
@@ -0,0 +1,102 @@
1
+ // ============================================================================
2
+ // MEMBER AGREEMENTS — the ONE home for the wording of each agreement a member ticks
3
+ // (registration, becoming an Artisan, founding a public Realm, the first Square
4
+ // post, a pledge, the Hall download acknowledgment) and the version naming each
5
+ // surface's wording. Every surface renders these words verbatim. A wording change
6
+ // bumps its surface's version: the callable behind the surface accepts only the
7
+ // current version and records it with the acceptance, so a record always names the
8
+ // words the member agreed to.
9
+ //
10
+ // Elsewhere: the registration Terms box carries the founder-notice clause, so its
11
+ // segments live with the notice (./legal-review-notice.ts) — REGISTRATION's version
12
+ // here covers its wording too. The Hall publish attestations live in
13
+ // ./publish-attestations.ts, the craft statements in ./craft-skill-statements.ts.
14
+ // ============================================================================
15
+ import { SPECIAL_DOCS } from '../paths/collections.js';
16
+ import { PUBLIC_DOCUMENT_LABELS } from './public-documents.js';
17
+ import { EXISTING_REALM_STAKE_SHARES, MAX_WORK_PROJECT_STAKE_SHARES, } from './business-work-project.js';
18
+ function plain(text) {
19
+ return [{ kind: 'text', text }];
20
+ }
21
+ const RULES_AND_AGREEMENTS_LINK = {
22
+ kind: 'link',
23
+ label: PUBLIC_DOCUMENT_LABELS[SPECIAL_DOCS.RULES_AND_AGREEMENTS],
24
+ target: SPECIAL_DOCS.RULES_AND_AGREEMENTS,
25
+ };
26
+ // ── Registration ─────────────────────────────────────────────────────────────
27
+ /** Names the registration wording: the clean-content box and the Terms box. */
28
+ export const REGISTRATION_AGREEMENTS_VERSION = 1;
29
+ /** The content box. Profanity and mature themes are allowed; nudity and sexual content are not. */
30
+ export const REGISTRATION_CLEAN_CONTENT_AGREEMENT = plain("I'll keep what I share clean: no nudity, sexual, or explicit content.");
31
+ // ── Become an Artisan ────────────────────────────────────────────────────────
32
+ /** Names the become-an-Artisan wording: the intro, the location question, and every box. */
33
+ export const ARTISAN_CREATOR_AGREEMENTS_VERSION = 1;
34
+ export const ARTISAN_CREATOR_DIALOG_TITLE = 'Become an Artisan';
35
+ export const ARTISAN_CREATOR_DIALOG_INTRO = 'Unlock Artisan tools by agreeing to the terms below. This lets you share your crafts and create Works.';
36
+ /** The location question. Only Yes leads to the agreements; No leads to the regional interest list. */
37
+ export const ARTISAN_CREATOR_US_PERSON_QUESTION = 'Do you live in the United States?';
38
+ /** The become-an-Artisan boxes, in the order the dialog shows them. */
39
+ export const ARTISAN_CREATOR_AGREEMENT_IDS = [
40
+ 'realDateOfBirth',
41
+ 'humanMadeOnly',
42
+ 'uploadRights',
43
+ 'rulesAndAgreements',
44
+ 'collaborateOnline',
45
+ ];
46
+ export const ARTISAN_CREATOR_AGREEMENTS = {
47
+ realDateOfBirth: plain("This is my real date of birth, and I'm 18 or older."),
48
+ humanMadeOnly: plain('Everything I upload is human-made: no AI-generated, AI-modified, or AI-completed content.'),
49
+ uploadRights: plain("I'll only upload work I made or have the right to use."),
50
+ rulesAndAgreements: [
51
+ { kind: 'text', text: 'I have read and agree to the ' },
52
+ RULES_AND_AGREEMENTS_LINK,
53
+ { kind: 'text', text: '.' },
54
+ ],
55
+ collaborateOnline: plain("I'll collaborate online only. I won't use TTT to arrange meeting another member in person. In-person TTT work will only ever happen at official TTT Productions locations, and none exist yet."),
56
+ };
57
+ // ── Founding a public Realm ──────────────────────────────────────────────────
58
+ /** Names the Realm founding wording. */
59
+ export const WORK_REALM_FOUNDING_AGREEMENT_VERSION = 1;
60
+ export const WORK_REALM_FOUNDING_AGREEMENT_TITLE = 'Realm Creation Agreement';
61
+ export const WORK_REALM_FOUNDING_AGREEMENT = plain('By creating a new Realm, you agree that other Artisans may create and publish Works (Tales, ' +
62
+ "Tunes, Television) set within your Realm. When they do, this Realm's founding Work receives " +
63
+ `${EXISTING_REALM_STAKE_SHARES} of each such Work's ` +
64
+ `${MAX_WORK_PROJECT_STAKE_SHARES.toLocaleString('en-US')} Stakes, held by the founding ` +
65
+ "Work's Guild — not paid to you personally.");
66
+ // ── First Square post ────────────────────────────────────────────────────────
67
+ /** Names the Square first-post wording: the moderation notice and every box. */
68
+ export const SQUARE_STREETZ_AGREEMENTS_VERSION = 1;
69
+ /** Shown above the boxes. A notice, not an agreement — nothing is ticked for it. */
70
+ export const SQUARE_STREETZ_MODERATION_NOTICE = 'Before a post goes live, a banned-word list checks its text, and automated moderation scans any image or video. A post can be rejected automatically.';
71
+ /** The Square first-post boxes, in the order the form shows them. */
72
+ export const SQUARE_STREETZ_AGREEMENT_IDS = [
73
+ 'communityRules',
74
+ 'respect',
75
+ 'ownership',
76
+ 'onTopic',
77
+ ];
78
+ export const SQUARE_STREETZ_AGREEMENTS = {
79
+ communityRules: [
80
+ { kind: 'text', text: "I've read the community rules on the " },
81
+ RULES_AND_AGREEMENTS_LINK,
82
+ {
83
+ kind: 'text',
84
+ text: ' page, and I understand breaking them can get me suspended or banned.',
85
+ },
86
+ ],
87
+ respect: plain("I'll treat people with respect — no bullying, harassment, or doxxing — and I won't use posts to share personal contact details or set up in-person meetups."),
88
+ ownership: plain('I own what I post. I give TTT a royalty-free license to host and show it here, and I let members make labeled, credited mimics of it.'),
89
+ onTopic: plain('My posts will be about TTT: its Works, crafts, Auditions, Commissions, and Artisans.'),
90
+ };
91
+ // ── Pledge checkout ──────────────────────────────────────────────────────────
92
+ /** Names the pledge attestation wording. */
93
+ export const PLEDGE_ATTESTATION_VERSION = 1;
94
+ /** Pledges are readable by every registered member, so the disclosure says members, not the public. */
95
+ export const PLEDGE_ATTESTATION = plain("I confirm I'm 18 or older, and I understand my name and pledge amount will be visible to other TTT members.");
96
+ // ── Hall download ────────────────────────────────────────────────────────────
97
+ /** Names the Hall download acknowledgment wording. */
98
+ export const HALL_DOWNLOAD_ACKNOWLEDGEMENT_VERSION = 1;
99
+ export const HALL_DOWNLOAD_ACKNOWLEDGEMENT_TITLE = 'Before you download';
100
+ export const HALL_DOWNLOAD_ACKNOWLEDGEMENT = "Hall downloads are for your personal, offline use only. Please don't redistribute, repost, or share downloaded files — TTT holds published Works in stewardship for the Artisans who made them and the whole community.";
101
+ export const HALL_DOWNLOAD_ACKNOWLEDGEMENT_ACCEPT_LABEL = 'I understand — download';
102
+ //# sourceMappingURL=member-agreements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-agreements.js","sourceRoot":"","sources":["../../src/constants/member-agreements.ts"],"names":[],"mappings":"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","sourcesContent":["// ============================================================================\n// MEMBER AGREEMENTS — the ONE home for the wording of each agreement a member ticks\n// (registration, becoming an Artisan, founding a public Realm, the first Square\n// post, a pledge, the Hall download acknowledgment) and the version naming each\n// surface's wording. Every surface renders these words verbatim. A wording change\n// bumps its surface's version: the callable behind the surface accepts only the\n// current version and records it with the acceptance, so a record always names the\n// words the member agreed to.\n//\n// Elsewhere: the registration Terms box carries the founder-notice clause, so its\n// segments live with the notice (./legal-review-notice.ts) — REGISTRATION's version\n// here covers its wording too. The Hall publish attestations live in\n// ./publish-attestations.ts, the craft statements in ./craft-skill-statements.ts.\n// ============================================================================\n\nimport { SPECIAL_DOCS } from '../paths/collections.js';\nimport { PUBLIC_DOCUMENT_LABELS } from './public-documents.js';\nimport type { LegalReviewNoticeSegment } from './legal-review-notice.js';\nimport {\n EXISTING_REALM_STAKE_SHARES,\n MAX_WORK_PROJECT_STAKE_SHARES,\n} from './business-work-project.js';\n\n/** One agreement's wording: text runs, with a public document as a link run. */\nexport type MemberAgreementWording = readonly LegalReviewNoticeSegment[];\n\nfunction plain(text: string): MemberAgreementWording {\n return [{ kind: 'text', text }];\n}\n\nconst RULES_AND_AGREEMENTS_LINK: LegalReviewNoticeSegment = {\n kind: 'link',\n label: PUBLIC_DOCUMENT_LABELS[SPECIAL_DOCS.RULES_AND_AGREEMENTS],\n target: SPECIAL_DOCS.RULES_AND_AGREEMENTS,\n};\n\n// ── Registration ─────────────────────────────────────────────────────────────\n\n/** Names the registration wording: the clean-content box and the Terms box. */\nexport const REGISTRATION_AGREEMENTS_VERSION = 1;\n\n/** The content box. Profanity and mature themes are allowed; nudity and sexual content are not. */\nexport const REGISTRATION_CLEAN_CONTENT_AGREEMENT: MemberAgreementWording = plain(\n \"I'll keep what I share clean: no nudity, sexual, or explicit content.\",\n);\n\n// ── Become an Artisan ────────────────────────────────────────────────────────\n\n/** Names the become-an-Artisan wording: the intro, the location question, and every box. */\nexport const ARTISAN_CREATOR_AGREEMENTS_VERSION = 1;\n\nexport const ARTISAN_CREATOR_DIALOG_TITLE = 'Become an Artisan';\n\nexport const ARTISAN_CREATOR_DIALOG_INTRO =\n 'Unlock Artisan tools by agreeing to the terms below. This lets you share your crafts and create Works.';\n\n/** The location question. Only Yes leads to the agreements; No leads to the regional interest list. */\nexport const ARTISAN_CREATOR_US_PERSON_QUESTION = 'Do you live in the United States?';\n\n/** The become-an-Artisan boxes, in the order the dialog shows them. */\nexport const ARTISAN_CREATOR_AGREEMENT_IDS = [\n 'realDateOfBirth',\n 'humanMadeOnly',\n 'uploadRights',\n 'rulesAndAgreements',\n 'collaborateOnline',\n] as const;\nexport type ArtisanCreatorAgreementId = (typeof ARTISAN_CREATOR_AGREEMENT_IDS)[number];\n\nexport const ARTISAN_CREATOR_AGREEMENTS: Record<ArtisanCreatorAgreementId, MemberAgreementWording> =\n {\n realDateOfBirth: plain(\"This is my real date of birth, and I'm 18 or older.\"),\n humanMadeOnly: plain(\n 'Everything I upload is human-made: no AI-generated, AI-modified, or AI-completed content.',\n ),\n uploadRights: plain(\"I'll only upload work I made or have the right to use.\"),\n rulesAndAgreements: [\n { kind: 'text', text: 'I have read and agree to the ' },\n RULES_AND_AGREEMENTS_LINK,\n { kind: 'text', text: '.' },\n ],\n collaborateOnline: plain(\n \"I'll collaborate online only. I won't use TTT to arrange meeting another member in person. In-person TTT work will only ever happen at official TTT Productions locations, and none exist yet.\",\n ),\n };\n\n// ── Founding a public Realm ──────────────────────────────────────────────────\n\n/** Names the Realm founding wording. */\nexport const WORK_REALM_FOUNDING_AGREEMENT_VERSION = 1;\n\nexport const WORK_REALM_FOUNDING_AGREEMENT_TITLE = 'Realm Creation Agreement';\n\nexport const WORK_REALM_FOUNDING_AGREEMENT: MemberAgreementWording = plain(\n 'By creating a new Realm, you agree that other Artisans may create and publish Works (Tales, ' +\n \"Tunes, Television) set within your Realm. When they do, this Realm's founding Work receives \" +\n `${EXISTING_REALM_STAKE_SHARES} of each such Work's ` +\n `${MAX_WORK_PROJECT_STAKE_SHARES.toLocaleString('en-US')} Stakes, held by the founding ` +\n \"Work's Guild — not paid to you personally.\",\n);\n\n// ── First Square post ────────────────────────────────────────────────────────\n\n/** Names the Square first-post wording: the moderation notice and every box. */\nexport const SQUARE_STREETZ_AGREEMENTS_VERSION = 1;\n\n/** Shown above the boxes. A notice, not an agreement — nothing is ticked for it. */\nexport const SQUARE_STREETZ_MODERATION_NOTICE =\n 'Before a post goes live, a banned-word list checks its text, and automated moderation scans any image or video. A post can be rejected automatically.';\n\n/** The Square first-post boxes, in the order the form shows them. */\nexport const SQUARE_STREETZ_AGREEMENT_IDS = [\n 'communityRules',\n 'respect',\n 'ownership',\n 'onTopic',\n] as const;\nexport type SquareStreetzAgreementId = (typeof SQUARE_STREETZ_AGREEMENT_IDS)[number];\n\nexport const SQUARE_STREETZ_AGREEMENTS: Record<SquareStreetzAgreementId, MemberAgreementWording> = {\n communityRules: [\n { kind: 'text', text: \"I've read the community rules on the \" },\n RULES_AND_AGREEMENTS_LINK,\n {\n kind: 'text',\n text: ' page, and I understand breaking them can get me suspended or banned.',\n },\n ],\n respect: plain(\n \"I'll treat people with respect — no bullying, harassment, or doxxing — and I won't use posts to share personal contact details or set up in-person meetups.\",\n ),\n ownership: plain(\n 'I own what I post. I give TTT a royalty-free license to host and show it here, and I let members make labeled, credited mimics of it.',\n ),\n onTopic: plain(\n 'My posts will be about TTT: its Works, crafts, Auditions, Commissions, and Artisans.',\n ),\n};\n\n// ── Pledge checkout ──────────────────────────────────────────────────────────\n\n/** Names the pledge attestation wording. */\nexport const PLEDGE_ATTESTATION_VERSION = 1;\n\n/** Pledges are readable by every registered member, so the disclosure says members, not the public. */\nexport const PLEDGE_ATTESTATION: MemberAgreementWording = plain(\n \"I confirm I'm 18 or older, and I understand my name and pledge amount will be visible to other TTT members.\",\n);\n\n// ── Hall download ────────────────────────────────────────────────────────────\n\n/** Names the Hall download acknowledgment wording. */\nexport const HALL_DOWNLOAD_ACKNOWLEDGEMENT_VERSION = 1;\n\nexport const HALL_DOWNLOAD_ACKNOWLEDGEMENT_TITLE = 'Before you download';\n\nexport const HALL_DOWNLOAD_ACKNOWLEDGEMENT =\n \"Hall downloads are for your personal, offline use only. Please don't redistribute, repost, or share downloaded files — TTT holds published Works in stewardship for the Artisans who made them and the whole community.\";\n\nexport const HALL_DOWNLOAD_ACKNOWLEDGEMENT_ACCEPT_LABEL = 'I understand — download';\n"]}
@@ -1,3 +1,9 @@
1
1
  import type { WorkProjectType } from '../types/content.js';
2
+ /** Names the wording of every attestation below. */
3
+ export declare const PUBLISH_ATTESTATIONS_VERSION = 1;
2
4
  export declare const CONSISTENT_FORMAT_WORDING: Record<WorkProjectType, string>;
5
+ export declare const PUBLISH_NO_CREDITS_ATTESTATION = "There are no credits or attribution baked into the content. Collaborators are credited on the Work's Guildmates section, which shows every guildmate on the Work \u2014 not inside the content itself.";
6
+ export declare const PUBLISH_NO_BEGGING_ATTESTATION = "The content does not ask viewers for bouquets or support \u2014 no begging for bouquets anywhere in the Work.";
7
+ export declare const PUBLISH_HUMAN_MADE_ORIGINAL_ATTESTATION = "This Work is entirely human-made and original: no AI-generated, AI-modified, or AI-completed content, and it is not built from anyone else's creative work.";
8
+ export declare const PUBLISH_STEWARDSHIP_ATTESTATION = "I understand that submitting locks this Work for editing, and once published it becomes TTT-owned, held in stewardship: it stays in the Hall, and its creators can't edit it directly \u2014 corrections go through an admin-reviewed change request.";
3
9
  //# sourceMappingURL=publish-attestations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"publish-attestations.d.ts","sourceRoot":"","sources":["../../src/constants/publish-attestations.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAOrE,CAAC"}
1
+ {"version":3,"file":"publish-attestations.d.ts","sourceRoot":"","sources":["../../src/constants/publish-attestations.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,oDAAoD;AACpD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAOrE,CAAC;AAEF,eAAO,MAAM,8BAA8B,2MAC0J,CAAC;AAEtM,eAAO,MAAM,8BAA8B,kHACiE,CAAC;AAE7G,eAAO,MAAM,uCAAuC,gKAC2G,CAAC;AAEhK,eAAO,MAAM,+BAA+B,0PACwM,CAAC"}
@@ -1,13 +1,20 @@
1
1
  // ============================================================================
2
- // HALL-PUBLISH ATTESTATION COPY — the ONE home for the consistent-format
3
- // attestation wording (ARCH-102, extended 2026-07-13; consolidated from the
4
- // former component-local map in ttt-prod publish-attestations.tsx). The
5
- // attestation carries a Work-type-specific example using the Work's own unit
6
- // word; the publish flow always knows the type.
2
+ // HALL-PUBLISH ATTESTATION COPY — the ONE home for the attestations a Guild ticks
3
+ // before submitting a Work for Hall review (ARCH-102), and the version naming
4
+ // their wording. The consistent-format attestation carries a Work-type-specific
5
+ // example using the Work's own unit word; the publish flow always knows the type.
6
+ // A wording change bumps PUBLISH_ATTESTATIONS_VERSION, which the submission
7
+ // records with the attestations.
7
8
  // ============================================================================
9
+ /** Names the wording of every attestation below. */
10
+ export const PUBLISH_ATTESTATIONS_VERSION = 1;
8
11
  export const CONSISTENT_FORMAT_WORDING = {
9
12
  Tales: 'All items in this Work are the same kind of thing — a consistent format throughout. If chapter 1 is a short story, then all chapters are short stories.',
10
13
  Tunes: 'All items in this Work are the same kind of thing — a consistent format throughout. If track 1 is a podcast, then all tracks are podcasts.',
11
14
  Television: 'All items in this Work are the same kind of thing — a consistent format throughout. If episode 1 is a clip show, then all episodes are clip shows.',
12
15
  };
16
+ export const PUBLISH_NO_CREDITS_ATTESTATION = "There are no credits or attribution baked into the content. Collaborators are credited on the Work's Guildmates section, which shows every guildmate on the Work — not inside the content itself.";
17
+ export const PUBLISH_NO_BEGGING_ATTESTATION = 'The content does not ask viewers for bouquets or support — no begging for bouquets anywhere in the Work.';
18
+ export const PUBLISH_HUMAN_MADE_ORIGINAL_ATTESTATION = "This Work is entirely human-made and original: no AI-generated, AI-modified, or AI-completed content, and it is not built from anyone else's creative work.";
19
+ export const PUBLISH_STEWARDSHIP_ATTESTATION = "I understand that submitting locks this Work for editing, and once published it becomes TTT-owned, held in stewardship: it stays in the Hall, and its creators can't edit it directly — corrections go through an admin-reviewed change request.";
13
20
  //# sourceMappingURL=publish-attestations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publish-attestations.js","sourceRoot":"","sources":["../../src/constants/publish-attestations.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yEAAyE;AACzE,4EAA4E;AAC5E,wEAAwE;AACxE,6EAA6E;AAC7E,gDAAgD;AAChD,+EAA+E;AAI/E,MAAM,CAAC,MAAM,yBAAyB,GAAoC;IACxE,KAAK,EACH,yJAAyJ;IAC3J,KAAK,EACH,4IAA4I;IAC9I,UAAU,EACR,oJAAoJ;CACvJ,CAAC","sourcesContent":["// ============================================================================\n// HALL-PUBLISH ATTESTATION COPY — the ONE home for the consistent-format\n// attestation wording (ARCH-102, extended 2026-07-13; consolidated from the\n// former component-local map in ttt-prod publish-attestations.tsx). The\n// attestation carries a Work-type-specific example using the Work's own unit\n// word; the publish flow always knows the type.\n// ============================================================================\n\nimport type { WorkProjectType } from '../types/content.js';\n\nexport const CONSISTENT_FORMAT_WORDING: Record<WorkProjectType, string> = {\n Tales:\n 'All items in this Work are the same kind of thing — a consistent format throughout. If chapter 1 is a short story, then all chapters are short stories.',\n Tunes:\n 'All items in this Work are the same kind of thing — a consistent format throughout. If track 1 is a podcast, then all tracks are podcasts.',\n Television:\n 'All items in this Work are the same kind of thing — a consistent format throughout. If episode 1 is a clip show, then all episodes are clip shows.',\n};\n"]}
1
+ {"version":3,"file":"publish-attestations.js","sourceRoot":"","sources":["../../src/constants/publish-attestations.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kFAAkF;AAClF,8EAA8E;AAC9E,gFAAgF;AAChF,kFAAkF;AAClF,4EAA4E;AAC5E,iCAAiC;AACjC,+EAA+E;AAI/E,oDAAoD;AACpD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C,MAAM,CAAC,MAAM,yBAAyB,GAAoC;IACxE,KAAK,EACH,yJAAyJ;IAC3J,KAAK,EACH,4IAA4I;IAC9I,UAAU,EACR,oJAAoJ;CACvJ,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GACzC,mMAAmM,CAAC;AAEtM,MAAM,CAAC,MAAM,8BAA8B,GACzC,0GAA0G,CAAC;AAE7G,MAAM,CAAC,MAAM,uCAAuC,GAClD,6JAA6J,CAAC;AAEhK,MAAM,CAAC,MAAM,+BAA+B,GAC1C,kPAAkP,CAAC","sourcesContent":["// ============================================================================\n// HALL-PUBLISH ATTESTATION COPY — the ONE home for the attestations a Guild ticks\n// before submitting a Work for Hall review (ARCH-102), and the version naming\n// their wording. The consistent-format attestation carries a Work-type-specific\n// example using the Work's own unit word; the publish flow always knows the type.\n// A wording change bumps PUBLISH_ATTESTATIONS_VERSION, which the submission\n// records with the attestations.\n// ============================================================================\n\nimport type { WorkProjectType } from '../types/content.js';\n\n/** Names the wording of every attestation below. */\nexport const PUBLISH_ATTESTATIONS_VERSION = 1;\n\nexport const CONSISTENT_FORMAT_WORDING: Record<WorkProjectType, string> = {\n Tales:\n 'All items in this Work are the same kind of thing — a consistent format throughout. If chapter 1 is a short story, then all chapters are short stories.',\n Tunes:\n 'All items in this Work are the same kind of thing — a consistent format throughout. If track 1 is a podcast, then all tracks are podcasts.',\n Television:\n 'All items in this Work are the same kind of thing — a consistent format throughout. If episode 1 is a clip show, then all episodes are clip shows.',\n};\n\nexport const PUBLISH_NO_CREDITS_ATTESTATION =\n \"There are no credits or attribution baked into the content. Collaborators are credited on the Work's Guildmates section, which shows every guildmate on the Work — not inside the content itself.\";\n\nexport const PUBLISH_NO_BEGGING_ATTESTATION =\n 'The content does not ask viewers for bouquets or support — no begging for bouquets anywhere in the Work.';\n\nexport const PUBLISH_HUMAN_MADE_ORIGINAL_ATTESTATION =\n \"This Work is entirely human-made and original: no AI-generated, AI-modified, or AI-completed content, and it is not built from anyone else's creative work.\";\n\nexport const PUBLISH_STEWARDSHIP_ATTESTATION =\n \"I understand that submitting locks this Work for editing, and once published it becomes TTT-owned, held in stewardship: it stays in the Hall, and its creators can't edit it directly — corrections go through an admin-reviewed change request.\";\n"]}
@@ -133,6 +133,7 @@ export declare const ThresholdItemSchema: z.ZodObject<{
133
133
  attestHumanMadeOriginal: z.ZodLiteral<true>;
134
134
  attestPublishStewardship: z.ZodLiteral<true>;
135
135
  attestedAt: z.ZodNumber;
136
+ attestationsVersion: z.ZodNumber;
136
137
  legalReviewNotice: z.ZodOptional<z.ZodObject<{
137
138
  revision: z.ZodString;
138
139
  acknowledgedAt: z.ZodNumber;
@@ -149,7 +150,7 @@ export type ThresholdItem = z.infer<typeof ThresholdItemSchema>;
149
150
  * moderation text-clear remedy) can target. Detail surfaces live on the hall parent;
150
151
  * sub-item surfaces on the published chapter/track/episode doc; the `workRealm`
151
152
  * surface targets the single `workRealms/{id}` doc (the realm grain of the one
152
- * text-change pipeline — R1, 2026-07-12). */
153
+ * text-change pipeline). */
153
154
  export declare const HallContentTextSurfaceSchema: z.ZodEnum<{
154
155
  workRealm: "workRealm";
155
156
  tale: "tale";
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/content.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/content.ts"],"names":[],"mappings":"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"}